ChinaMobileRestApiController.java 31.6 KB
Newer Older
liqin's avatar
liqin committed
1 2 3 4
package cn.wisenergy.chnmuseum.party.web.controller;

import cn.wisenergy.chnmuseum.party.auth.SHA256PasswordEncryptionService;
import cn.wisenergy.chnmuseum.party.auth.util.JwtTokenUtil;
liqin's avatar
liqin committed
5
import cn.wisenergy.chnmuseum.party.common.enums.LanguageEnum;
liqin's avatar
liqin committed
6
import cn.wisenergy.chnmuseum.party.common.mvc.InterfaceException;
liqin's avatar
liqin committed
7
import cn.wisenergy.chnmuseum.party.common.util.TimeUtils;
yangtianyou's avatar
yangtianyou committed
8
import cn.wisenergy.chnmuseum.party.common.validator.groups.Add;
liqin's avatar
liqin committed
9
import cn.wisenergy.chnmuseum.party.common.vo.AudioVo;
liqin's avatar
liqin committed
10
import cn.wisenergy.chnmuseum.party.common.vo.DatumVo;
liqin's avatar
liqin committed
11
import cn.wisenergy.chnmuseum.party.common.vo.GenericPageParam;
liqin's avatar
liqin committed
12
import cn.wisenergy.chnmuseum.party.common.vo.VideoVo;
wzp's avatar
wzp committed
13
import cn.wisenergy.chnmuseum.party.model.*;
liqin's avatar
liqin committed
14
import cn.wisenergy.chnmuseum.party.service.*;
wzp's avatar
wzp committed
15
import cn.wisenergy.chnmuseum.party.service.impl.*;
liqin's avatar
liqin committed
16 17
import cn.wisenergy.chnmuseum.party.web.controller.base.BaseController;
import com.alibaba.fastjson.JSONObject;
liqin's avatar
liqin committed
18 19
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.parser.Feature;
liqin's avatar
liqin committed
20
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
yangtianyou's avatar
yangtianyou committed
21
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
wzp's avatar
wzp committed
22
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
liqin's avatar
liqin committed
23
import com.baomidou.mybatisplus.core.metadata.IPage;
liqin's avatar
liqin committed
24
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
liqin's avatar
liqin committed
25
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
liqin's avatar
liqin committed
26
import io.swagger.annotations.Api;
liqin's avatar
liqin committed
27 28
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
liqin's avatar
liqin committed
29
import io.swagger.annotations.ApiOperation;
liqin's avatar
liqin committed
30
import lombok.extern.slf4j.Slf4j;
liqin's avatar
liqin committed
31
import org.apache.commons.lang3.StringUtils;
wzp's avatar
wzp committed
32
import org.apache.shiro.authc.DisabledAccountException;
liqin's avatar
liqin committed
33
import org.apache.shiro.authc.IncorrectCredentialsException;
yangtianyou's avatar
yangtianyou committed
34
import org.apache.shiro.authz.annotation.RequiresPermissions;
liqin's avatar
liqin committed
35 36 37 38 39 40
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
yangtianyou's avatar
yangtianyou committed
41
import org.springframework.validation.annotation.Validated;
liqin's avatar
liqin committed
42 43 44
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
wzp's avatar
wzp committed
45
import java.time.LocalDate;
liqin's avatar
liqin committed
46
import java.time.LocalDateTime;
wzp's avatar
wzp committed
47
import java.util.ArrayList;
yangtianyou's avatar
yangtianyou committed
48
import java.util.HashMap;
wzp's avatar
wzp committed
49 50
import java.util.List;
import java.util.Map;
liqin's avatar
liqin committed
51
import java.util.concurrent.TimeUnit;
liqin's avatar
liqin committed
52
import java.util.stream.Collectors;
liqin's avatar
liqin committed
53

liqin's avatar
liqin committed
54
@Slf4j
liqin's avatar
liqin committed
55 56
@RestController()
@RequestMapping("/cmRestApi")
liqin's avatar
liqin committed
57
@Api(tags = {"中国移动API"})
liqin's avatar
liqin committed
58 59 60 61 62 63 64
public class ChinaMobileRestApiController extends BaseController {

    private static final Logger LOGGER = LoggerFactory.getLogger(ChinaMobileRestApiController.class);

    @Resource
    private StringRedisTemplate stringRedisTemplate;

wzp's avatar
wzp committed
65 66 67
    @Resource
    private TUserServiceImpl userService;

wzp's avatar
wzp committed
68 69 70
    @Resource
    private TOrganServiceImpl organService;

wzp's avatar
wzp committed
71 72 73
    @Resource
    private RunLogServiceImpl runLogService;

wzp's avatar
wzp committed
74 75 76
    @Resource
    private TAreaServiceImpl areaService;

wzp's avatar
wzp committed
77 78 79
    @Resource
    private AssetServiceImpl assetService;

wzp's avatar
wzp committed
80 81 82
    @Resource
    private TBoxOperationServiceImpl boxOperationService;

liqin's avatar
liqin committed
83 84 85
    @Resource
    private ExhibitionBoardService exhibitionBoardService;

yangtianyou's avatar
yangtianyou committed
86 87 88
    @Resource
    private TBoardStatisticService tBoardStatisticService;

liqin's avatar
liqin committed
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
    @Resource
    private LearningProjectService learningProjectService;

    @Resource
    private LearningContentService learningContentService;

    @Resource
    private ExhibitionBoardCatService exhibitionBoardCatService;

    @Resource
    private CopyrightOwnerService copyrightOwnerService;

    @Resource
    private LearningContentBoardService learningContentBoardService;

yangtianyou's avatar
yangtianyou committed
104 105 106 107 108 109 110 111 112
    @Resource
    private TAppVersionService appVersionService;

    @Resource
    private TAppDirPicService appDirPicService;

    @Resource
    private TAppRunPicService appRunPicService;

liqin's avatar
liqin committed
113 114 115 116 117 118
    private static final String SHIRO_JWT_TOKEN = "shiro:jwt:token:";
    //用户登录次数计数  redisKey 前缀
    private static final String SHIRO_LOGIN_COUNT = "shiro_login_count_";
    //用户登录是否被锁定    一小时 redisKey 前缀
    private static final String SHIRO_IS_LOCK = "shiro_is_lock_";

liqin's avatar
liqin committed
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
    /**
     * 机顶盒激活状态查询
     *
     * @param
     * @return
     */
    @ApiOperation(value = "获取机顶盒密钥", notes = "获取机顶盒密钥")
    @GetMapping("/equitment/key")
    @RequiresPermissions("equitment:key")
    public Map<String, Object> getBoxPrivateKey(@RequestParam(value = "mac") String mac) {
        try {
            final LambdaQueryWrapper<TBoxOperation> queryWrapper = Wrappers.<TBoxOperation>lambdaQuery().eq(TBoxOperation::getMac, mac.trim().toUpperCase());
            final TBoxOperation tBoxOperation = this.boxOperationService.getOne(queryWrapper);
            if (tBoxOperation != null) {
                final String organId = tBoxOperation.getOrganId();
liqin's avatar
liqin committed
134 135
                final TUser tUser = getcurUser();
                if (tUser != null && organId.equals(tUser.getOrgId())) {
liqin's avatar
liqin committed
136 137 138
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("key", tBoxOperation.getPrivateKey());
                    return getResult(jsonObject);
liqin's avatar
liqin committed
139 140 141
                } else {
                    throw new InterfaceException("400", "您无权获取本单位机顶盒密钥");
                }
liqin's avatar
liqin committed
142
            }
liqin's avatar
liqin committed
143
            throw new InterfaceException("400", "未查询到相关机顶盒信息");
liqin's avatar
liqin committed
144 145 146 147 148 149
        } catch (Exception e) {
            e.printStackTrace();
        }
        return getFailResult();
    }

wzp's avatar
wzp committed
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
    /**
     * 机顶盒激活状态查询
     *
     * @param
     * @return
     */
    @ApiOperation(value = "机顶盒激活状态查询", notes = "机顶盒激活状态查询")
    @GetMapping("/equitment/activity")
    @RequiresPermissions("/equitment/activity/")
    public Map<String, Object> getActivity(@RequestParam(required = true) String mac) {
        List<TBoxOperation> list = new ArrayList<>();
        try {
            UpdateWrapper<TBoxOperation> wrapper = new UpdateWrapper<>();
            wrapper.eq("mac", mac);
            list = boxOperationService.list(wrapper);
            HashMap<Object, Object> map = new HashMap<>();
            map.put("activityStatus", false);
            if (list != null && list.get(0) != null && 2 == list.get(0).getStatus()) {
                map.put("activityStatus", true);
            }
            return getResult(map);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return getFailResult();
    }
wzp's avatar
wzp committed
176 177


liqin's avatar
liqin committed
178 179 180 181 182 183 184 185 186 187
    /**
     * 管理员ajax登录请求 后端用户登录
     *
     * @param username
     * @param password
     * @return
     */
    @RequestMapping(value = "/user/webLogin", method = RequestMethod.POST)
    public ResponseEntity<JSONObject> login(@RequestParam(value = "username") String username,
                                            @RequestParam(value = "password") String password,
wzp's avatar
wzp committed
188
                                            @RequestParam(value = "mac") String mac) {
liqin's avatar
liqin committed
189
        JSONObject resultMap = new JSONObject(true);
wzp's avatar
wzp committed
190
        TUser user;
liqin's avatar
liqin committed
191
        if (StringUtils.isNoneBlank(username)) {
wzp's avatar
wzp committed
192

liqin's avatar
liqin committed
193
            try {
wzp's avatar
wzp committed
194 195 196 197 198 199 200 201 202 203 204 205 206
                //访问一次,计数一次
                ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue();
                if ("LOCK".equals(opsForValue.get(SHIRO_IS_LOCK + username))) {
                    resultMap.put("status", 400);
                    resultMap.put("message", "由于密码输入错误次数大于5次,12小时内帐号已禁止登录!请您联系相关管理人员,联系电话:13924551212,邮箱:325346534@zh.com。");
                    return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(resultMap);
                }
                user = userService.selectByUsername(username);
                if (user == null) {
                    resultMap.put("status", 500);
                    resultMap.put("message", "用户名或密码不正确!");
                    return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(resultMap);
                }
wzp's avatar
wzp committed
207
                TBoxOperation operation = boxOperationService.getOne(new UpdateWrapper<TBoxOperation>().eq("organ_id", user.getOrgId()));
liqin's avatar
liqin committed
208
                if (operation == null || "".equals(operation.getMac())) {
wzp's avatar
wzp committed
209 210 211 212
                    resultMap.put("status", 500);
                    resultMap.put("message", "用户未激活!");
                    return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(resultMap);
                }
liqin's avatar
liqin committed
213
                if (!mac.equals(operation.getMac())) {
wzp's avatar
wzp committed
214 215 216 217
                    resultMap.put("status", 500);
                    resultMap.put("message", "mac地址不正确!");
                    return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(resultMap);
                }
wzp's avatar
wzp committed
218 219 220 221 222 223 224 225 226 227 228 229
                if ("2".equals(user.getStatus())) {
                    throw new DisabledAccountException("此帐号已禁用,请联系管理员!");
                }

                if (user.getPermanent() != null && !user.getPermanent()) {
                    if (user.getEffectiveDate().isAfter(LocalDate.now()) || user.getExiredDate().isBefore(LocalDate.now())) {
                        throw new DisabledAccountException("此帐号已失效,请联系管理员!");
                    }
                }

                byte[] salt = user.getPasswordSalt();
                if (!new String(SHA256PasswordEncryptionService.createPasswordHash(password, salt)).equals(new String(user.getPasswordHash()))) {
liqin's avatar
liqin committed
230 231 232 233 234 235 236 237 238 239 240
                    opsForValue.increment(SHIRO_LOGIN_COUNT + username, 1);
                    //计数大于5时,设置用户被锁定一小时
                    String s = opsForValue.get(SHIRO_LOGIN_COUNT + username);
                    if (StringUtils.isNotBlank(s)) {
                        if (Integer.parseInt(s) >= 5) {
                            opsForValue.set(SHIRO_IS_LOCK + username, "LOCK");
                            stringRedisTemplate.expire(SHIRO_IS_LOCK + username, 12, TimeUnit.HOURS);
                        }
                    }
                    throw new IncorrectCredentialsException("用户名或密码不正确!");
                }
wzp's avatar
wzp committed
241
                String token = JwtTokenUtil.sign(username, user.getId());
liqin's avatar
liqin committed
242
                // 将token信息存入Redis
wzp's avatar
wzp committed
243
                stringRedisTemplate.opsForValue().set(SHIRO_JWT_TOKEN + token, user.getId(), 240, TimeUnit.MINUTES);
liqin's avatar
liqin committed
244 245 246

                JSONObject jsonObject = new JSONObject(true);
                jsonObject.put("token", token);
wzp's avatar
wzp committed
247 248
                jsonObject.put("userId", user.getId());
                jsonObject.put("userName", user.getUserName());
liqin's avatar
liqin committed
249
                jsonObject.put("expire", TimeUtils.format(LocalDateTime.now().plusMinutes(240), TimeUtils.FORMAT_ONE));
wzp's avatar
wzp committed
250 251
                jsonObject.put("orgCode", user.getOrgId());
                jsonObject.put("orgName", user.getOrgName());
liqin's avatar
liqin committed
252 253

                resultMap.put("resultCode", 200);
wzp's avatar
wzp committed
254
                resultMap.put("message", "登录成功");
liqin's avatar
liqin committed
255 256 257
                resultMap.put("data", jsonObject);
                return ResponseEntity.status(HttpStatus.OK).body(resultMap);
            } catch (Exception e) {
wzp's avatar
wzp committed
258
                resultMap.put("resultCode", 500);
liqin's avatar
liqin committed
259 260 261 262 263 264 265 266
                resultMap.put("message", e.getMessage());
            }
        }
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(resultMap);
    }

    @ApiOperation(value = "获取单个成员信息")
    @GetMapping(value = "/user/getUserInfo")
wzp's avatar
wzp committed
267
    public ResponseEntity<JSONObject> getById(String userId) {
wzp's avatar
wzp committed
268
        JSONObject resultMap = new JSONObject(true);
liqin's avatar
liqin committed
269
        try {
wzp's avatar
wzp committed
270
            TUser user = userService.getById(userId);
wzp's avatar
wzp committed
271
            TOrgan organ = organService.getById(user.getOrgId());
liqin's avatar
liqin committed
272

wzp's avatar
wzp committed
273 274 275 276
            if (null == user) {
                resultMap.put("resultCode", 500);
                resultMap.put("message", "用户不存在");
                resultMap.put("data", "");
liqin's avatar
liqin committed
277 278 279 280
                return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
            }

            JSONObject jsonObject = new JSONObject(true);
wzp's avatar
wzp committed
281 282
            jsonObject.put("userId", user.getId());
            jsonObject.put("userName", user.getUserName());
wzp's avatar
wzp committed
283
//            long expire = stringRedisTemplate.getExpire(SHIRO_JWT_TOKEN + token) == null ? 0L : stringRedisTemplate.getExpire(SHIRO_JWT_TOKEN + token);
wzp's avatar
wzp committed
284 285 286 287
            //jsonObject.put("expire", TimeUtils.format(LocalDateTime.now().plusMinutes(expire), TimeUtils.FORMAT_ONE));
            jsonObject.put("effectiveDate", user.getEffectiveDate());
            jsonObject.put("expireDate", user.getExiredDate());
            jsonObject.put("orgCode", user.getOrgId());
liqin's avatar
liqin committed
288
            jsonObject.put("orgName", organ.getName());
wzp's avatar
wzp committed
289

liqin's avatar
liqin committed
290 291 292 293 294
            resultMap.put("resultCode", 200);
            resultMap.put("message", "成功");
            resultMap.put("data", jsonObject);
            return ResponseEntity.ok(resultMap);
        } catch (Exception e) {
wzp's avatar
wzp committed
295 296
            resultMap.put("resultCode", 500);
            resultMap.put("message", "获取单个成员信息失败!");
liqin's avatar
liqin committed
297
        }
wzp's avatar
wzp committed
298
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(resultMap);
liqin's avatar
liqin committed
299 300
    }

liqin's avatar
liqin committed
301
    @RequestMapping(value = "/user/logout", method = RequestMethod.GET)
wzp's avatar
wzp committed
302 303
    public ResponseEntity<JSONObject> logout() {
        String token = request.getHeader("Authorization");
wzp's avatar
wzp committed
304
        JSONObject resultMap = new JSONObject(true);
liqin's avatar
liqin committed
305 306
        try {
            if (StringUtils.isNotBlank(token)) {
wzp's avatar
wzp committed
307
//                SecurityUtils.getSubject().logout();
liqin's avatar
liqin committed
308 309 310 311 312 313 314
                this.stringRedisTemplate.delete(SHIRO_JWT_TOKEN + token);
            }
            resultMap.put("resultCode", 200);
            resultMap.put("message", "成功");
            resultMap.put("data", "");
            return ResponseEntity.status(HttpStatus.OK).body(resultMap);
        } catch (Exception e) {
wzp's avatar
wzp committed
315 316 317 318 319 320 321 322 323 324
            resultMap.put("resultCode", 500);
            resultMap.put("message", "注销错误!");
        }
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(resultMap);
    }

    /**
     * 插入机顶盒日志表
     */
    @ApiOperation(value = "插入机顶盒日志表", notes = "插入机顶盒日志表")
wzp's avatar
wzp committed
325
    @PostMapping(value = "/equitment/runLog")
wzp's avatar
wzp committed
326 327 328 329 330 331 332 333 334 335 336 337 338
    public ResponseEntity<JSONObject> insertRunLog(RunLog runLog) {
        JSONObject resultMap = new JSONObject();

        try {
            boolean b = runLogService.insertRunLog(runLog);
            resultMap.put("resultCode", 200);
            resultMap.put("message", "成功");
            resultMap.put("data", "");
            return ResponseEntity.status(HttpStatus.OK).body(resultMap);
        } catch (Exception e) {
            resultMap.put("resultCode", 500);
            resultMap.put("message", "失败");
            resultMap.put("data", "");
liqin's avatar
liqin committed
339
        }
wzp's avatar
wzp committed
340
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(resultMap);
liqin's avatar
liqin committed
341 342
    }

wzp's avatar
wzp committed
343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364
    /**
     * 查询语言列表
     */
    @ApiOperation(value = "查询语言列表", notes = "查询语言列表")
    @PostMapping(value = "/language/info")
    public ResponseEntity<JSONObject> languageInfo() {
        JSONObject resultMap = new JSONObject();

        try {
            List<Map<String, String>> list = areaService.languageInfo();
            resultMap.put("resultCode", 200);
            resultMap.put("message", "成功");
            resultMap.put("data", list);
            return ResponseEntity.status(HttpStatus.OK).body(resultMap);
        } catch (Exception e) {
            resultMap.put("resultCode", 500);
            resultMap.put("message", "失败");
            resultMap.put("data", "");
        }
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(resultMap);
    }

liqin's avatar
liqin committed
365 366 367
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer"),
liqin's avatar
liqin committed
368
            @ApiImplicitParam(name = "learningContentId", value = "学习内容ID", paramType = "query", dataType = "String")
liqin's avatar
liqin committed
369
    })
liqin's avatar
liqin committed
370
    @PostMapping("/exhibitionBoard/getPage")
liqin's avatar
liqin committed
371
    @RequiresPermissions("exhibition:board:page")
liqin's avatar
liqin committed
372
    @ApiOperation(value = "展板列表查询", notes = "展板列表查询")
liqin's avatar
liqin committed
373
    public Map<String, Object> getExhibitionBoardPageList(@RequestParam(value = "learningContentId") String learningContentId) {
liqin's avatar
liqin committed
374
        final IPage<ExhibitionBoard> page = this.learningContentBoardService.getBoardPageByLearningContentId(getPage(), learningContentId, null);
liqin's avatar
liqin committed
375
        for (ExhibitionBoard exhibitionBoard : page.getRecords()) {
liqin's avatar
liqin committed
376 377 378 379 380 381 382 383
            if (exhibitionBoard.getAssetCopyrightOwnerId() != null) {
                String name = this.copyrightOwnerService.getById(exhibitionBoard.getAssetCopyrightOwnerId()).getName();
                exhibitionBoard.setBoardCopyrightOwnerName(name);
            }
            if (exhibitionBoard.getExhibitionBoardCatId() != null) {
                String name = this.exhibitionBoardCatService.getById(exhibitionBoard.getExhibitionBoardCatId()).getName();
                exhibitionBoard.setExhibitionBoardCatName(name);
            }
liqin's avatar
liqin committed
384 385 386
            final String assetId = exhibitionBoard.getAssetId();
            final Asset asset = this.assetService.getById(assetId);
            final String videoUrl = asset.getVideoUrl();
liqin's avatar
liqin committed
387 388
            final List<VideoVo> videoVoList = JSONObject.parseObject(videoUrl, new TypeReference<List<VideoVo>>() {
            }, Feature.OrderedField);
liqin's avatar
liqin committed
389
            exhibitionBoard.setVideoUrlList(videoVoList.stream().map(VideoVo::getFileUrl).collect(Collectors.toList()));
liqin's avatar
liqin committed
390 391
            exhibitionBoard.setVideoUrl(videoUrl);
            exhibitionBoard.setLearningContentId(learningContentId);
liqin's avatar
liqin committed
392
        }
liqin's avatar
liqin committed
393
        return getResult(page);
liqin's avatar
liqin committed
394 395
    }

liqin's avatar
liqin committed
396
    @ApiOperation(value = "展板详情页面查询", notes = "展板详情页面查询")
liqin's avatar
liqin committed
397
    @ApiImplicitParams({
liqin's avatar
liqin committed
398
            @ApiImplicitParam(name = "boardId", value = "展板ID", dataType = "String", paramType = "query"),
liqin's avatar
liqin committed
399
            @ApiImplicitParam(name = "language", value = "语言", dataType = "String", paramType = "query")
liqin's avatar
liqin committed
400
    })
liqin's avatar
liqin committed
401
    @GetMapping("/exhibitionBoard/getBoardInfo")
liqin's avatar
liqin committed
402
    public Map<String, Object> getById(@RequestParam(value = "boardId") String id, @RequestParam(value = "language", required = false) LanguageEnum language) {
liqin's avatar
liqin committed
403
        ExhibitionBoard exhibitionBoard = exhibitionBoardService.getById(id);
liqin's avatar
liqin committed
404 405 406 407 408 409 410 411 412
        String exhibitionBoardCatId = exhibitionBoard.getExhibitionBoardCatId();
        if (exhibitionBoardCatId != null) {
            exhibitionBoard.setExhibitionBoardCatName(this.exhibitionBoardCatService.getById(exhibitionBoardCatId).getName());
        }
        String boardCopyrightOwnerId = exhibitionBoard.getBoardCopyrightOwnerId();
        if (boardCopyrightOwnerId != null) {
            exhibitionBoard.setBoardCopyrightOwnerName(this.copyrightOwnerService.getById(boardCopyrightOwnerId).getName());
        }

liqin's avatar
liqin committed
413 414 415 416 417 418 419
        final String guideAudioUrl = exhibitionBoard.getGuideAudioUrl();
        final List<AudioVo> audioVoList = JSONObject.parseObject(guideAudioUrl, new TypeReference<List<AudioVo>>() {
        }, Feature.OrderedField);
        exhibitionBoard.setAudioUrlList(audioVoList.stream().map(AudioVo::getFileUrl).collect(Collectors.toList()));

        final String refMaterialUrl = exhibitionBoard.getRefMaterialUrl();
        final List<AudioVo> refMaterialVoList = JSONObject.parseObject(refMaterialUrl, new TypeReference<List<AudioVo>>() {
liqin's avatar
liqin committed
420
        }, Feature.OrderedField);
liqin's avatar
liqin committed
421 422 423 424 425 426 427 428 429 430 431 432 433 434 435
        exhibitionBoard.setMaterialUrlList(refMaterialVoList.stream().map(AudioVo::getFileUrl).collect(Collectors.toList()));

        String assetId = exhibitionBoard.getAssetId();
        if (assetId != null) {
            final Asset asset = this.assetService.getById(assetId);
            exhibitionBoard.setAssetName(this.assetService.getById(assetId).getName());
            final String assetCopyrightOwnerId = asset.getAssetCopyrightOwnerId();
            final String assetCopyrightOwnerName = this.copyrightOwnerService.getById(assetCopyrightOwnerId).getName();
            exhibitionBoard.setAssetCopyrightOwnerName(assetCopyrightOwnerName);

            final String videoUrl = asset.getVideoUrl();
            final List<VideoVo> videoVoList = JSONObject.parseObject(videoUrl, new TypeReference<List<VideoVo>>() {
            }, Feature.OrderedField);
            exhibitionBoard.setVideoUrlList(videoVoList.stream().map(VideoVo::getFileUrl).collect(Collectors.toList()));
        }
liqin's avatar
liqin committed
436
        return getResult(exhibitionBoard);
liqin's avatar
liqin committed
437 438
    }

yangtianyou's avatar
yangtianyou committed
439 440 441 442 443
    @PostMapping("/equitment/playLog")
    @RequiresPermissions("t:board:statistic:statisticBoardInfo")
    @ApiOperation(value = "播放记录信息反馈", notes = "播放记录信息反馈")
    public Map<String, Object> boardStatisticInfo(@Validated(value = {Add.class}) TBoardStatistic tBoardStatistic) {
        // 展板信息统计
liqin's avatar
liqin committed
444 445
        try {
            Object result = tBoardStatisticService.boardStatisticInfo(tBoardStatistic, false);
yangtianyou's avatar
yangtianyou committed
446
            // 返回操作结果
liqin's avatar
liqin committed
447
            if (result != null && (boolean) result) {
yangtianyou's avatar
yangtianyou committed
448 449
                return getSuccessResult();
            }
liqin's avatar
liqin committed
450
        } catch (Exception e) {
yangtianyou's avatar
yangtianyou committed
451 452 453 454 455 456
            e.printStackTrace();
        }
        // 保存失败
        return getFailResult();
    }

liqin's avatar
liqin committed
457 458 459
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer"),
liqin's avatar
liqin committed
460 461
            @ApiImplicitParam(name = "learningProjectId", value = "学习项目ID", paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "nameOrCode", value = "名称或编码", paramType = "query", dataType = "String")
liqin's avatar
liqin committed
462 463 464
    })
    @PostMapping("/learningContent/getPage")
    @RequiresPermissions("learning:content:page")
liqin's avatar
liqin committed
465
    @ApiOperation(value = "查询学习内容", notes = "查询学习内容")
liqin's avatar
liqin committed
466
    public Map<String, Object> getLearningContentPageList(GenericPageParam genericPageParam, @RequestParam(value = "learningProjectId", required = false) String learningProjectId) {
liqin's avatar
liqin committed
467 468
        LambdaQueryWrapper<LearningContent> queryWrapper = new LambdaQueryWrapper<>();
        // 对名称或编码模糊查询
liqin's avatar
liqin committed
469 470 471 472
        if (StringUtils.isNotBlank(learningProjectId)) {
            queryWrapper.eq(LearningContent::getLearningProjectId, learningProjectId);
        }
        // 对名称或编码模糊查询
liqin's avatar
liqin committed
473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498
        if (StringUtils.isNotBlank(genericPageParam.getNameOrCode())) {
            queryWrapper.like(LearningContent::getName, genericPageParam.getNameOrCode());
        }
        // 根据创建时间区间检索
        if (genericPageParam.getStartDate() != null && genericPageParam.getEndDate() != null) {
            queryWrapper.ge(LearningContent::getCreateTime, genericPageParam.getStartDate().atTime(0, 0, 0))
                    .le(LearningContent::getCreateTime, genericPageParam.getEndDate().atTime(23, 59, 59));
        }
        // 设置排序规则
        queryWrapper.orderByDesc(LearningContent::getCreateTime);
        // 设置查询内容
        queryWrapper.select(
                LearningContent::getId,
                LearningContent::getName,
                LearningContent::getAuditStatus,
                LearningContent::getCreateTime,
                LearningContent::getUpdateTime);
        Page<LearningContent> page = this.learningContentService.page(getPage(), queryWrapper);
        for (LearningContent learningContent : page.getRecords()) {
            LambdaQueryWrapper<LearningContentBoard> lambdaQueryWrapper = Wrappers.<LearningContentBoard>lambdaQuery().eq(LearningContentBoard::getLearningContentId, learningContent.getId());
            int exhibitionBoardCount = this.learningContentBoardService.count(lambdaQueryWrapper);
            learningContent.setExhibitionBoardCount(exhibitionBoardCount);
        }
        return getResult(page);
    }

liqin's avatar
liqin committed
499 500 501 502 503 504 505
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "nameOrCode", value = "名称或编码", paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "startDate", value = "创建时间-开始", paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "endDate", value = "创建时间-结束", paramType = "query", dataType = "String")
    })
liqin's avatar
liqin committed
506
    @PostMapping("/learningProject/getPage")
liqin's avatar
liqin committed
507
    @RequiresPermissions("learning:project:page")
liqin's avatar
liqin committed
508
    @ApiOperation(value = "查询项目", notes = "查询项目")
liqin's avatar
liqin committed
509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541
    public Map<String, Object> getLearningProjectPageList(GenericPageParam genericPageParam) {
        LambdaQueryWrapper<LearningProject> queryWrapper = new LambdaQueryWrapper<>();
        // 对名称或编码模糊查询
        if (StringUtils.isNotBlank(genericPageParam.getNameOrCode())) {
            queryWrapper.like(LearningProject::getName, genericPageParam.getNameOrCode());
        }
        // 根据创建时间区间检索
        if (genericPageParam.getStartDate() != null && genericPageParam.getEndDate() != null) {
            queryWrapper.ge(LearningProject::getCreateTime, genericPageParam.getStartDate().atTime(0, 0, 0))
                    .le(LearningProject::getCreateTime, genericPageParam.getEndDate().atTime(23, 59, 59));
        }
        // 设置排序规则
        queryWrapper.orderByDesc(LearningProject::getCreateTime);
        // 设置查询内容
        queryWrapper.select(
                LearningProject::getId,
                LearningProject::getName,
                LearningProject::getRemarks,
                LearningProject::getCreateTime,
                LearningProject::getUpdateTime);
        Page<LearningProject> page = this.learningProjectService.page(getPage(), queryWrapper);
        for (LearningProject learningProject : page.getRecords()) {
            LambdaQueryWrapper<LearningContent> lambdaQueryWrapper = Wrappers.<LearningContent>lambdaQuery()
                    .eq(LearningContent::getLearningProjectId, learningProject.getId())
                    .eq(LearningContent::getIsPublished, true);
            lambdaQueryWrapper.select(LearningContent::getName);
            List<LearningContent> learningContentList = this.learningContentService.list(lambdaQueryWrapper);
            String learningContentNames = learningContentList.stream().map(LearningContent::getName).collect(Collectors.joining("、"));
            learningProject.setLearningContentNames(learningContentNames);
        }
        return getResult(page);
    }

liqin's avatar
liqin committed
542
    @ApiImplicitParams(value = {
liqin's avatar
liqin committed
543
            @ApiImplicitParam(name = "boardId", value = "展板内容ID", paramType = "path", dataType = "String", required = true)
liqin's avatar
liqin committed
544
    })
liqin's avatar
liqin committed
545
    @GetMapping("/exhibitionBoard/getRefMaterial/{boardId}")
liqin's avatar
liqin committed
546 547
    @RequiresPermissions("learning:project:page")
    @ApiOperation(value = "展板参考资料查询", notes = "展板参考资料查询")
liqin's avatar
liqin committed
548
    public Map<String, Object> getBoardRefMaterial(@PathVariable(value = "boardId") String boardId) {
liqin's avatar
liqin committed
549
        final ExhibitionBoard exhibitionBoard = this.exhibitionBoardService.getById(boardId);
liqin's avatar
liqin committed
550

liqin's avatar
liqin committed
551
        final String refMaterialUrl = exhibitionBoard.getRefMaterialUrl();
liqin's avatar
liqin committed
552 553
        final List<DatumVo> datumVoList = JSONObject.parseObject(refMaterialUrl, new TypeReference<List<DatumVo>>() {
        }, Feature.OrderedField);
liqin's avatar
liqin committed
554
        return getResult(datumVoList);
liqin's avatar
liqin committed
555 556 557 558 559
    }

    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer"),
liqin's avatar
liqin committed
560
            @ApiImplicitParam(name = "learningContentId", value = "学习内容ID", paramType = "query", dataType = "String"),
liqin's avatar
liqin committed
561 562 563 564
            @ApiImplicitParam(name = "nameOrCode", value = "名称或编码", paramType = "query", dataType = "String")
    })
    @PostMapping("/exhibitionBoard/search")
    @RequiresPermissions("learning:content:board:page")
liqin's avatar
liqin committed
565
    @ApiOperation(value = "模糊搜索查询", notes = "模糊搜索查询")
liqin's avatar
liqin committed
566
    public Map<String, Object> getLearningContentBoardPageList(GenericPageParam genericPageParam, @RequestParam(value = "learningContentId", required = false) String learningContentId) {
liqin's avatar
liqin committed
567
        IPage<ExhibitionBoard> page = this.learningContentBoardService.getBoardPageByLearningContentId(getPage(), learningContentId, genericPageParam.getNameOrCode());
liqin's avatar
liqin committed
568 569 570
        return getResult(page);
    }

liqin's avatar
liqin committed
571 572 573 574 575 576 577 578 579
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer")
    })
    @PostMapping("/asset/search")
    @RequiresPermissions("learning:content:board:page")
    @ApiOperation(value = "获取当前用户可查看的视频信息", notes = "获取当前用户可查看的视频信息")
    public Map<String, Object> getAssetPageByOrganId() {
        final TUser tUser = getcurUser();
liqin's avatar
liqin committed
580 581 582 583 584 585
        if (tUser != null && tUser.getOrgCode() != null) {
            final String orgCode = tUser.getOrgCode();
            IPage<Asset> page = this.learningContentBoardService.getAssetPageByOrganCode(getPage(), orgCode);
            return getResult(page);
        }
        return getFailResult("400", "用户未登录");
liqin's avatar
liqin committed
586 587
    }

yangtianyou's avatar
yangtianyou committed
588 589 590 591 592 593
    @ApiOperation(value = "app最新版本查询")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "versionNo", value = "app版本号", dataType = "String", paramType = "query")
    })
    @GetMapping(value = "/version/check")
    @RequiresPermissions("app:version:check")
liqin's avatar
liqin committed
594
    public Map<String, Object> versionCheck(String versionNo) {
yangtianyou's avatar
yangtianyou committed
595 596 597
        TAppVersion current = new TAppVersion();//当前版本
        // 查询最新版本号信息
        QueryWrapper<TAppVersion> qw = new QueryWrapper<>();
liqin's avatar
liqin committed
598
        qw.eq("is_current", 1);
yangtianyou's avatar
yangtianyou committed
599 600
        qw.select().orderByDesc("update_time");
        List<TAppVersion> currentList = appVersionService.list(qw);
liqin's avatar
liqin committed
601
        if (currentList == null || currentList.size() == 0) {
yangtianyou's avatar
yangtianyou committed
602
            return getFailResult("未设置当前版本信息");
liqin's avatar
liqin committed
603
        } else {
yangtianyou's avatar
yangtianyou committed
604 605 606
            current = currentList.get(0);
        }
        Map map = new HashMap();
wzp's avatar
wzp committed
607 608 609 610
        map.put("isLatest", versionNo.equals(current.getAppVersion()));
        map.put("versionNo", current.getAppVersion());
        map.put("versionUrl", current.getApkUrl());
        map.put("updateLog", current.getUpdateLog());
611
        map.put("updateTime", current.getUpdateTime());
yangtianyou's avatar
yangtianyou committed
612 613
        return getResult(map);
    }
liqin's avatar
liqin committed
614 615


yangtianyou's avatar
yangtianyou committed
616 617 618
    @ApiOperation(value = "app界面图片查询")
    @GetMapping(value = "/app/picSelect")
    @RequiresPermissions("app:pic:select")
liqin's avatar
liqin committed
619
    public Map<String, Object> appPicSelect() {
yangtianyou's avatar
yangtianyou committed
620 621 622 623
        TAppDirPic currentDir = null;// 当前目录页面
        TAppRunPic currentRun = null;// 当前运行画面
        // 查询当前目录界面信息
        QueryWrapper<TAppDirPic> qw = new QueryWrapper<>();
liqin's avatar
liqin committed
624
        qw.eq("is_current", 1);
yangtianyou's avatar
yangtianyou committed
625 626
        qw.select().orderByDesc("create_time");
        List<TAppDirPic> currentDirList = appDirPicService.list(qw);
liqin's avatar
liqin committed
627
        if (currentDirList != null && currentDirList.size() > 0) {
yangtianyou's avatar
yangtianyou committed
628 629 630
            currentDir = currentDirList.get(0);
        }
        QueryWrapper<TAppRunPic> qw1 = new QueryWrapper<>();
liqin's avatar
liqin committed
631
        qw1.eq("is_current", 1);
yangtianyou's avatar
yangtianyou committed
632 633
        qw1.select().orderByDesc("create_time");
        List<TAppRunPic> currentRunList = appRunPicService.list(qw1);
liqin's avatar
liqin committed
634
        if (currentRunList != null && currentRunList.size() > 0) {
yangtianyou's avatar
yangtianyou committed
635 636
            currentRun = currentRunList.get(0);
        }
liqin's avatar
liqin committed
637

yangtianyou's avatar
yangtianyou committed
638
        Map map = new HashMap();
wzp's avatar
wzp committed
639 640
        map.put("dirImgUrl", currentDir != null ? currentDir.getAppDirPic() : "未设置目录图片");
        map.put("runImgUrl", currentRun != null ? currentRun.getAppRunPic() : "未设置运行图片");
yangtianyou's avatar
yangtianyou committed
641 642
        return getResult(map);
    }
liqin's avatar
liqin committed
643
}