package cn.chnmuseum.party.web.controller; import cn.chnmuseum.party.common.enums.*; import cn.chnmuseum.party.common.log.MethodLog; import cn.chnmuseum.party.common.log.OperModule; import cn.chnmuseum.party.common.log.OperType; import cn.chnmuseum.party.common.util.PinYinUtil; import cn.chnmuseum.party.common.validator.groups.Add; import cn.chnmuseum.party.common.validator.groups.Update; import cn.chnmuseum.party.common.vo.GenericPageParam; import cn.chnmuseum.party.model.*; import cn.chnmuseum.party.service.*; import cn.chnmuseum.party.web.controller.base.BaseController; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.constraints.NotBlank; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; /** * <pre> * 展板 前端控制器 * </pre> * * @author Danny Lee * @since 2021-03-19 */ @Slf4j @RestController @RequestMapping("/exhibitionBoard") @Api(tags = {"展板操作接口"}) public class ExhibitionBoardController extends BaseController { @Resource private ExhibitionBoardService exhibitionBoardService; @Resource private ExhibitionBoardCatService exhibitionBoardCatService; @Resource private CopyrightOwnerService copyrightOwnerService; @Resource private VideoContentService videoContentService; @Resource private AuditService auditService; @Resource private AssetService assetService; @Resource private LearningContentBoardService learningContentBoardService; @Resource private LearningContentService learningContentService; @PostMapping("/save") @RequiresAuthentication //@RequiresPermissions("exhibition:board:save") @ApiOperation(value = "添加展板", notes = "添加展板") @MethodLog(operModule = OperModule.DISPLAYCONTENT, operType = OperType.ADD) @Transactional public Map<String, Object> saveExhibitionBoard(@Validated(value = {Add.class}) ExhibitionBoard exhibitionBoard) { final LambdaQueryWrapper<ExhibitionBoard> lambdaQueryWrapper = Wrappers.<ExhibitionBoard>lambdaQuery().eq(ExhibitionBoard::getName, exhibitionBoard.getName().trim()); final int count = this.exhibitionBoardService.count(lambdaQueryWrapper); if (count > 0) { return getFailResult("400", "名称已存在,请修改名称"); } TUser user = getcurUser(); // 6.24 需求变更:新建展板除名称以外其余都可为空 List<String> audioIdList = exhibitionBoard.getAudioIdList(); if (CollectionUtil.isEmpty(exhibitionBoard.getAudioIdList())) { audioIdList = Collections.emptyList(); } // if (audioIdList == null || audioIdList.isEmpty()) { // return getFailResult("400", "导览音频文件必须上传"); // } List<String> datumIdList = exhibitionBoard.getDatumIdList(); if (CollectionUtil.isEmpty(datumIdList)) { datumIdList = Collections.emptyList(); } // if (datumIdList == null || datumIdList.isEmpty()) { // return getFailResult("400", "参考资料文件必须上传"); // } exhibitionBoard.setAuditStatus(AuditStatusEnum.TBC.name()); exhibitionBoard.setPublished(false); exhibitionBoard.setDeleted(false); //填充拼音 fillPinYin(exhibitionBoard); // 保存业务节点信息 boolean result = exhibitionBoardService.save(exhibitionBoard); // 返回操作结果 if (result) { for (String audioId : audioIdList) { final Asset asset = this.assetService.getById(audioId); asset.setFileType(FileTypeEnum.AUDIO.name()); asset.setFileCat(FileCatEnum.EXHIBITION_BOARD_AUDIO.name()); asset.setRefItemId(exhibitionBoard.getId()); this.assetService.updateById(asset); } for (String datumId : datumIdList) { final Asset asset = this.assetService.getById(datumId); asset.setFileCat(FileCatEnum.EXHIBITION_BOARD_DATUM.name()); asset.setRefItemId(exhibitionBoard.getId()); this.assetService.updateById(asset); } final Audit audit = Audit.builder() .content(exhibitionBoard.getName()) .name(exhibitionBoard.getName()) .refItemId(exhibitionBoard.getId()) .userId(user.getId()) .organId(user.getOrgId()) .type(AuditTypeEnum.EXHIBITION_BOARD.name()) .operation(AuditOperationEnum.ADD.name()) .status(AuditStatusEnum.TBC.name()) .level(AuditStatusEnum.TBC.name()) .build(); this.auditService.save(audit); return getSuccessResult(); } else { // 保存失败 return getFailResult(); } } /** * 展板加上中文拼音,用于拼音或拼音首字母搜索 * * @param exhibitionBoard */ private void fillPinYin(ExhibitionBoard exhibitionBoard) { String name = exhibitionBoard.getName(); if (StringUtils.isBlank(name)) { return; } exhibitionBoard.setNamePinYin(PinYinUtil.getPinYin(name, Boolean.FALSE, Boolean.FALSE)); exhibitionBoard.setNameFirstPinYin(PinYinUtil.getPinYin(name, Boolean.TRUE, Boolean.FALSE)); } @PutMapping("/update") @RequiresAuthentication //@RequiresPermissions("exhibition:board:update") @ApiOperation(value = "修改展板信息", notes = "修改展板信息") @MethodLog(operModule = OperModule.DISPLAYCONTENT, operType = OperType.UPDATE) @Transactional public Map<String, Object> updateExhibitionBoard(@Validated(value = {Update.class}) ExhibitionBoard exhibitionBoard) { final LambdaQueryWrapper<ExhibitionBoard> lambdaQueryWrapper = Wrappers.<ExhibitionBoard>lambdaQuery().eq(ExhibitionBoard::getName, exhibitionBoard.getName().trim()); lambdaQueryWrapper.ne(ExhibitionBoard::getId, exhibitionBoard.getId()); final int count = this.exhibitionBoardService.count(lambdaQueryWrapper); if (count > 0) { return getFailResult("400", "名称已存在,请修改名称"); } List<String> audioIdList = exhibitionBoard.getAudioIdList(); if (CollectionUtil.isEmpty(audioIdList)) { audioIdList = new ArrayList<>(); } // if (audioIdList == null || audioIdList.isEmpty()) { // return getFailResult("400", "导览音频文件必须上传"); // } List<String> datumIdList = exhibitionBoard.getDatumIdList(); if (CollectionUtil.isEmpty(datumIdList)) { audioIdList = new ArrayList<>(); } // if (datumIdList == null || datumIdList.isEmpty()) { // return getFailResult("400", "参考资料文件必须上传"); // } // 2021-05-31修改前 // removeNotInIds(audioIdList,exhibitionBoard.getId()); for (String audioId : audioIdList) { final Asset asset = this.assetService.getById(audioId); if (asset.getPublished()) { asset.setFileType(FileTypeEnum.AUDIO.name()); asset.setFileCat(FileCatEnum.EXHIBITION_BOARD_AUDIO.name()); asset.setRefItemId(exhibitionBoard.getId()); this.assetService.updateById(asset); } } // 2021-05-31修改前 // removeNotInIds(audioIdList,exhibitionBoard.getId()); for (String datumId : datumIdList) { final Asset asset = this.assetService.getById(datumId); if (asset == null) { continue; } if (asset.getPublished()) { asset.setFileCat(FileCatEnum.EXHIBITION_BOARD_DATUM.name()); asset.setRefItemId(exhibitionBoard.getId()); this.assetService.updateById(asset); } } // 2021-05-31修改后 audioIdList.addAll(datumIdList); if (CollectionUtil.isNotEmpty(audioIdList)) { removeNotInIds(audioIdList, exhibitionBoard.getId()); } final ExhibitionBoard one = this.exhibitionBoardService.getById(exhibitionBoard.getId()); one.setAuditStatus(AuditStatusEnum.TBC.name()); //填充拼音 fillPinYin(one); this.exhibitionBoardService.updateById(one); final TUser user = getcurUser(); final Audit audit = Audit.builder() .content(exhibitionBoard.getName()) .name(exhibitionBoard.getName()) .refItemId(exhibitionBoard.getId()) .userId(user.getId()) .organId(user.getOrgId()) .type(AuditTypeEnum.EXHIBITION_BOARD.name()) .operation(AuditOperationEnum.EDIT.name()) .status(AuditStatusEnum.TBC.name()) .level(AuditStatusEnum.TBC.name()) .modelData(JSONObject.toJSONString(exhibitionBoard)) .build(); this.auditService.save(audit); return getSuccessResult(); } /** * 修改展板时,不在这个id集合李淼的 代表是要删除的 * * @param assetIds */ public void removeNotInIds(List<String> assetIds, String refItemId) { LambdaQueryWrapper<Asset> assetWrapper = new QueryWrapper<Asset>().lambda() .eq(Asset::getRefItemId, refItemId) .notIn(Asset::getId, assetIds); boolean remove = assetService.remove(assetWrapper); } @PostMapping("/getListByLearningId") @RequiresAuthentication //@RequiresPermissions("exhibition:board:list") @ApiOperation(value = "根据学习项目获取展板全部列表(无分页)", notes = "根据学习项目获取展板全部列表(无分页)") @MethodLog(operModule = OperModule.DISPLAYCONTENT, operType = OperType.SELECT) public Map<String, Object> getExhibitionBoardList(String learningProjectId, @RequestParam(value = "exhibitionBoardCatIdList") List<String> boardCatIds) { if (StringUtils.isEmpty(learningProjectId)) { return getFailResult("学习项目不能为空!"); } if (CollectionUtils.isEmpty(boardCatIds)) { return getFailResult("请选择展板分类!"); } // 查询该学习项目的主要学习内容 LambdaQueryWrapper<LearningContent> lambdaQueryWrapper = Wrappers.<LearningContent>lambdaQuery(); lambdaQueryWrapper.eq(LearningContent::getLearningProjectId, learningProjectId); lambdaQueryWrapper.eq(LearningContent::getIsMajor, true); LearningContent one = this.learningContentService.getOne(lambdaQueryWrapper); // 查询主要学习内容的展板id final LambdaQueryWrapper<LearningContentBoard> learningContentBoardLambdaQueryWrapper = Wrappers.<LearningContentBoard>lambdaQuery(); learningContentBoardLambdaQueryWrapper.eq(LearningContentBoard::getLearningContentId, one.getId()); List<LearningContentBoard> list = this.learningContentBoardService.list(learningContentBoardLambdaQueryWrapper); List<String> boardId = list.stream().map(LearningContentBoard::getExhibitionBoardId).collect(Collectors.toList()); // 查询在指定展板分类下的展板信息 LambdaQueryWrapper<ExhibitionBoard> lambdaQuery = Wrappers.<ExhibitionBoard>lambdaQuery(); lambdaQuery.eq(ExhibitionBoard::getPublished, true); lambdaQuery.in(ExhibitionBoard::getExhibitionBoardCatId, boardCatIds); lambdaQuery.in(ExhibitionBoard::getId, boardId); List<ExhibitionBoard> exhibitionBoardList = exhibitionBoardService.list(lambdaQuery); for (ExhibitionBoard exhibitionBoard : exhibitionBoardList) { // 展板版权方信息 if (StringUtils.isNotEmpty(exhibitionBoard.getBoardCopyrightOwnerId())) { final CopyrightOwner copyrightOwner = this.copyrightOwnerService.getById(exhibitionBoard.getBoardCopyrightOwnerId()); if (copyrightOwner == null) { exhibitionBoard.setBoardCopyrightOwnerName("对应的展板版权方已被删除"); } else { exhibitionBoard.setBoardCopyrightOwnerName(copyrightOwner.getName()); } }else{ exhibitionBoard.setBoardCopyrightOwnerName("无"); } // 视频版权方信息 if (StringUtils.isNotEmpty(exhibitionBoard.getVideoContentCopyrightOwnerId())) { final CopyrightOwner copyrightOwner = this.copyrightOwnerService.getById(exhibitionBoard.getVideoContentCopyrightOwnerId()); if (copyrightOwner == null) { exhibitionBoard.setVideoContentCopyrightOwnerName("对应的视频内容版权方已被删除"); } else { exhibitionBoard.setVideoContentCopyrightOwnerName(copyrightOwner.getName()); } }else { exhibitionBoard.setVideoContentCopyrightOwnerName("无"); } // 展板分类信息 if (StringUtils.isNotEmpty(exhibitionBoard.getExhibitionBoardCatId())) { final ExhibitionBoardCat exhibitionBoardCat = this.exhibitionBoardCatService.getById(exhibitionBoard.getExhibitionBoardCatId()); if (exhibitionBoardCat == null) { exhibitionBoard.setExhibitionBoardCatName("对应的展板分类已被删除"); } else { exhibitionBoard.setExhibitionBoardCatName(exhibitionBoardCat.getName()); } }else { exhibitionBoard.setExhibitionBoardCatName("无"); } // 展板对应的视频内容 if (StringUtils.isNotEmpty(exhibitionBoard.getVideoContentId())) { String videoContentId = exhibitionBoard.getVideoContentId(); final VideoContent videoContent = this.videoContentService.getById(videoContentId); if (videoContent == null) { exhibitionBoard.setVideoList(Collections.emptyList()); } else { exhibitionBoard.setVideoContentName(videoContent.getName()); final List<Asset> videoList = this.assetService.list(Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, videoContentId).eq(Asset::getPublished, true)); exhibitionBoard.setVideoList(videoList); } }else { exhibitionBoard.setVideoContentName("无"); exhibitionBoard.setVideoList(Collections.emptyList()); } } return getResult(exhibitionBoardList); } @PostMapping("/getList") @RequiresAuthentication //@RequiresPermissions("exhibition:board:list") @ApiOperation(value = "获取展板全部列表(无分页)", notes = "获取展板全部列表(无分页)") @MethodLog(operModule = OperModule.DISPLAYCONTENT, operType = OperType.SELECT) public Map<String, Object> getExhibitionBoardList( @RequestParam(value = "exhibitionBoardCatIdList", required = false) List<String> exhibitionBoardCatIdList, @RequestParam(value = "boardCopyrightOwnerIdList", required = false) List<String> boardCopyrightOwnerIdList) { final LambdaQueryWrapper<ExhibitionBoard> lambdaQueryWrapper = Wrappers.<ExhibitionBoard>lambdaQuery().eq(ExhibitionBoard::getPublished, true); if (exhibitionBoardCatIdList != null && !exhibitionBoardCatIdList.isEmpty()) { lambdaQueryWrapper.in(ExhibitionBoard::getExhibitionBoardCatId, exhibitionBoardCatIdList); } if (boardCopyrightOwnerIdList != null && !boardCopyrightOwnerIdList.isEmpty()) { lambdaQueryWrapper.in(ExhibitionBoard::getBoardCopyrightOwnerId, boardCopyrightOwnerIdList); } lambdaQueryWrapper.orderByDesc(ExhibitionBoard::getCreateTime); List<ExhibitionBoard> exhibitionBoardList = exhibitionBoardService.list(lambdaQueryWrapper); for (ExhibitionBoard exhibitionBoard : exhibitionBoardList) { // 展板版权方信息 if (StringUtils.isNotEmpty(exhibitionBoard.getBoardCopyrightOwnerId())) { final CopyrightOwner copyrightOwner = this.copyrightOwnerService.getById(exhibitionBoard.getBoardCopyrightOwnerId()); if (copyrightOwner == null) { exhibitionBoard.setBoardCopyrightOwnerName("对应的展板版权方已被删除"); } else { exhibitionBoard.setBoardCopyrightOwnerName(copyrightOwner.getName()); } }else{ exhibitionBoard.setBoardCopyrightOwnerName("无"); } // 展板对应视频版权方信息 if (StringUtils.isNotEmpty(exhibitionBoard.getVideoContentCopyrightOwnerId())) { final CopyrightOwner copyrightOwner = this.copyrightOwnerService.getById(exhibitionBoard.getVideoContentCopyrightOwnerId()); if (copyrightOwner == null) { exhibitionBoard.setVideoContentCopyrightOwnerName("对应的视频内容版权方已被删除"); } else { exhibitionBoard.setVideoContentCopyrightOwnerName(copyrightOwner.getName()); } }else { exhibitionBoard.setVideoContentCopyrightOwnerName("无"); } // 展板分类信息 if (exhibitionBoard.getExhibitionBoardCatId() != null) { final ExhibitionBoardCat exhibitionBoardCat = this.exhibitionBoardCatService.getById(exhibitionBoard.getExhibitionBoardCatId()); if (exhibitionBoardCat == null) { exhibitionBoard.setExhibitionBoardCatName("对应的展板分类已被删除"); } else { exhibitionBoard.setExhibitionBoardCatName(exhibitionBoardCat.getName()); } }else { exhibitionBoard.setExhibitionBoardCatName("无"); } // 展板视频信息 if (StringUtils.isNotEmpty(exhibitionBoard.getVideoContentId())) { String videoContentId = exhibitionBoard.getVideoContentId(); final VideoContent videoContent = this.videoContentService.getById(videoContentId); if (videoContent == null) { exhibitionBoard.setVideoList(Collections.emptyList()); } else { exhibitionBoard.setVideoContentName(videoContent.getName()); final List<Asset> videoList = this.assetService.list(Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, videoContentId).eq(Asset::getPublished, true)); exhibitionBoard.setVideoList(videoList); } } } return getResult(exhibitionBoardList); } @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 = "copyrightOwner", value = "版权方", paramType = "query", dataType = "String"), @ApiImplicitParam(name = "startDate", value = "创建时间-开始", paramType = "query", dataType = "String"), @ApiImplicitParam(name = "endDate", value = "创建时间-结束", paramType = "query", dataType = "String") }) @PostMapping("/getPageList") @RequiresAuthentication //@RequiresPermissions("exhibition:board:page") @ApiOperation(value = "获取展板分页列表", notes = "获取展板分页列表") @MethodLog(operModule = OperModule.DISPLAYCONTENT, operType = OperType.SELECT) public Map<String, Object> getExhibitionBoardPageList(GenericPageParam genericPageParam) { LambdaQueryWrapper<ExhibitionBoard> queryWrapper = new LambdaQueryWrapper<>(); // 对名称或编码模糊查询 if (StringUtils.isNotBlank(genericPageParam.getNameOrCode())) { queryWrapper.like(ExhibitionBoard::getName, genericPageParam.getNameOrCode()); } // 对版权方模糊查询 if (StringUtils.isNotBlank(genericPageParam.getBoardCopyrightOwnerId())) { queryWrapper.eq(ExhibitionBoard::getBoardCopyrightOwnerId, genericPageParam.getBoardCopyrightOwnerId()); } // 对版权方模糊查询 if (StringUtils.isNotBlank(genericPageParam.getExhibitionBoardCatId())) { queryWrapper.eq(ExhibitionBoard::getExhibitionBoardCatId, genericPageParam.getExhibitionBoardCatId()); } // 根据创建时间区间检索 if (genericPageParam.getStartDate() != null && genericPageParam.getEndDate() != null) { queryWrapper.ge(ExhibitionBoard::getCreateTime, genericPageParam.getStartDate().atTime(0, 0, 0)) .le(ExhibitionBoard::getCreateTime, genericPageParam.getEndDate().atTime(23, 59, 59)); } // 设置排序规则 queryWrapper.orderByDesc(ExhibitionBoard::getCreateTime); // 设置查询内容 queryWrapper.select( ExhibitionBoard::getId, ExhibitionBoard::getName, ExhibitionBoard::getRemarks, ExhibitionBoard::getQrcodeUrl, ExhibitionBoard::getAuditStatus, ExhibitionBoard::getPublished, ExhibitionBoard::getDeleted, ExhibitionBoard::getVideoContentCopyrightOwnerId, ExhibitionBoard::getExhibitionBoardCatId, ExhibitionBoard::getBoardCopyrightOwnerId, ExhibitionBoard::getVideoContentId, ExhibitionBoard::getCreateTime, ExhibitionBoard::getUpdateTime); Page<ExhibitionBoard> page = this.exhibitionBoardService.page(getPage(), queryWrapper); for (ExhibitionBoard exhibitionBoard : page.getRecords()) { // 展板版权方信息 if (StringUtils.isNotEmpty(exhibitionBoard.getBoardCopyrightOwnerId())) { final CopyrightOwner copyrightOwner = this.copyrightOwnerService.getById(exhibitionBoard.getBoardCopyrightOwnerId()); if (copyrightOwner == null) { exhibitionBoard.setBoardCopyrightOwnerName("对应的展板版权方已被删除"); } else { exhibitionBoard.setBoardCopyrightOwnerName(copyrightOwner.getName()); } }else { exhibitionBoard.setBoardCopyrightOwnerName("无"); } // 展板简介 if (StringUtils.isEmpty(exhibitionBoard.getRemarks())) { exhibitionBoard.setRemarks("无"); } // 展板视频版权方信息 if (StringUtils.isNotEmpty(exhibitionBoard.getVideoContentCopyrightOwnerId())) { final CopyrightOwner copyrightOwner = this.copyrightOwnerService.getById(exhibitionBoard.getVideoContentCopyrightOwnerId()); if (copyrightOwner == null) { exhibitionBoard.setVideoContentCopyrightOwnerName("对应的视频内容版权方已被删除"); } else { exhibitionBoard.setVideoContentCopyrightOwnerName(copyrightOwner.getName()); } }else { exhibitionBoard.setVideoContentCopyrightOwnerName("无"); exhibitionBoard.setVideoContentName("无"); } // 展板分类信息 if (StringUtils.isNotEmpty(exhibitionBoard.getExhibitionBoardCatId())) { final ExhibitionBoardCat exhibitionBoardCat = this.exhibitionBoardCatService.getById(exhibitionBoard.getExhibitionBoardCatId()); if (exhibitionBoardCat == null) { exhibitionBoard.setExhibitionBoardCatName("对应的展板分类已被删除"); } else { exhibitionBoard.setExhibitionBoardCatName(exhibitionBoardCat.getName()); } }else { exhibitionBoard.setExhibitionBoardCatName("无"); } // 展板对应视频 if (StringUtils.isNotEmpty(exhibitionBoard.getVideoContentId() )) { String videoContentId = exhibitionBoard.getVideoContentId(); final VideoContent videoContent = this.videoContentService.getById(videoContentId); if (videoContent == null) { exhibitionBoard.setVideoContentName("对应的视频内容已被删除"); } else { exhibitionBoard.setVideoContentName(videoContent.getName()); final List<Asset> videoList = this.assetService.list(Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, videoContentId).eq(Asset::getPublished, true)); exhibitionBoard.setVideoList(videoList); } }else { exhibitionBoard.setVideoContentName("无"); } } return getResult(page); } @ApiOperation(value = "获取展板详情", notes = "获取展板详情") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "标识ID", dataType = "String", paramType = "path") }) @GetMapping("/get/{id}") @RequiresAuthentication //@RequiresPermissions("exhibition:board:get:id") @MethodLog(operModule = OperModule.DISPLAYCONTENT, operType = OperType.SELECT) public Map<String, Object> getById(@PathVariable("id") String id) { ExhibitionBoard exhibitionBoard = exhibitionBoardService.getById(id); String exhibitionBoardCatId = exhibitionBoard.getExhibitionBoardCatId(); // 展板分类信息 if (StringUtils.isNotEmpty(exhibitionBoardCatId)) { exhibitionBoard.setExhibitionBoardCatName(this.exhibitionBoardCatService.getById(exhibitionBoardCatId).getName()); }else { exhibitionBoard.setExhibitionBoardCatName("暂无数据"); } // 展板版权方信息 String boardCopyrightOwnerId = exhibitionBoard.getBoardCopyrightOwnerId(); if (StringUtils.isNotEmpty(boardCopyrightOwnerId)) { exhibitionBoard.setBoardCopyrightOwnerName(this.copyrightOwnerService.getById(boardCopyrightOwnerId).getName()); }else { exhibitionBoard.setBoardCopyrightOwnerName("暂无数据"); } // 展板简介 if (StringUtils.isEmpty(exhibitionBoard.getRemarks())) { exhibitionBoard.setRemarks("暂无数据"); } // 视频版权方信息 if (StringUtils.isNotEmpty(exhibitionBoard.getVideoContentCopyrightOwnerId())) { String name = this.copyrightOwnerService.getById(exhibitionBoard.getVideoContentCopyrightOwnerId()).getName(); exhibitionBoard.setVideoContentCopyrightOwnerName(name); } LambdaQueryWrapper<Asset> assetQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, id); assetQueryWrapper.eq(Asset::getFileCat, FileCatEnum.EXHIBITION_BOARD_AUDIO.name()); final List<Asset> audioList = this.assetService.list(assetQueryWrapper); exhibitionBoard.setAudioList(audioList); exhibitionBoard.setAudioIdList(audioList.stream().map(Asset::getId).collect(Collectors.toList())); assetQueryWrapper.clear(); assetQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, exhibitionBoard.getId()).eq(Asset::getPublished, true); assetQueryWrapper.eq(Asset::getFileCat, FileCatEnum.EXHIBITION_BOARD_DATUM.name()); final List<Asset> datumList = this.assetService.list(assetQueryWrapper); exhibitionBoard.setDatumList(datumList); exhibitionBoard.setDatumIdList(datumList.stream().map(Asset::getId).collect(Collectors.toList())); final LambdaQueryWrapper<Audit> auditQueryWrapper = Wrappers.<Audit>lambdaQuery().eq(Audit::getRefItemId, id); final List<Audit> auditList = this.auditService.list(auditQueryWrapper); exhibitionBoard.setAuditHistoryList(auditList); final String videoContentId = exhibitionBoard.getVideoContentId(); if (StringUtils.isNotEmpty(videoContentId)) { final VideoContent videoContent = this.videoContentService.getById(videoContentId); exhibitionBoard.setVideoContentName(videoContent.getName()); assetQueryWrapper.clear(); assetQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, videoContentId).eq(Asset::getPublished, true); assetQueryWrapper.eq(Asset::getFileCat, FileCatEnum.VIDEO_CONTENT.name()); final List<Asset> videoList = this.assetService.list(assetQueryWrapper); exhibitionBoard.setVideoList(videoList); } return getResult(exhibitionBoard); } @ApiOperation(value = "获取展板详情(审核详情使用)", notes = "获取展板详情(审核详情使用)") @ApiImplicitParams({ @ApiImplicitParam(name = "auditId", value = "审核ID", dataType = "String", paramType = "path", required = true) }) @GetMapping("/getAudit/{auditId}") @RequiresAuthentication //@RequiresPermissions("video:content:get:id") @MethodLog(operModule = OperModule.DISPLAYCONTENT, operType = OperType.SELECT) public Map<String, Object> getAuditInfoById(@PathVariable("auditId") String auditId) { final ExhibitionBoard exhibitionBoard = JSONObject.parseObject(this.auditService.getById(auditId).getModelData(), ExhibitionBoard.class); String exhibitionBoardCatId = exhibitionBoard.getExhibitionBoardCatId(); if (StringUtils.isNotEmpty(exhibitionBoardCatId)) { exhibitionBoard.setExhibitionBoardCatName(this.exhibitionBoardCatService.getById(exhibitionBoardCatId).getName()); } String boardCopyrightOwnerId = exhibitionBoard.getBoardCopyrightOwnerId(); if (StringUtils.isNotEmpty(boardCopyrightOwnerId)) { exhibitionBoard.setBoardCopyrightOwnerName(this.copyrightOwnerService.getById(boardCopyrightOwnerId).getName()); } if (StringUtils.isNotEmpty(exhibitionBoard.getVideoContentCopyrightOwnerId())) { String name = this.copyrightOwnerService.getById(exhibitionBoard.getVideoContentCopyrightOwnerId()).getName(); exhibitionBoard.setVideoContentCopyrightOwnerName(name); } final List<String> audioIdList = exhibitionBoard.getAudioIdList(); if (audioIdList != null && !audioIdList.isEmpty()) { final List<Asset> audioList = this.assetService.listByIds(audioIdList); exhibitionBoard.setAudioIdList(audioIdList); exhibitionBoard.setAudioList(audioList); } final List<String> datumIdList = exhibitionBoard.getDatumIdList(); if (datumIdList != null && !datumIdList.isEmpty()) { final List<Asset> datumList = this.assetService.listByIds(datumIdList); exhibitionBoard.setDatumIdList(datumIdList); exhibitionBoard.setDatumList(datumList); } final LambdaQueryWrapper<Audit> auditQueryWrapper = Wrappers.<Audit>lambdaQuery().eq(Audit::getRefItemId, exhibitionBoard.getId()); final List<Audit> auditList = this.auditService.list(auditQueryWrapper); exhibitionBoard.setAuditHistoryList(auditList); final String videoContentId = exhibitionBoard.getVideoContentId(); if (StringUtils.isNotEmpty(videoContentId)) { final VideoContent videoContent = this.videoContentService.getById(videoContentId); if (videoContent != null) { exhibitionBoard.setVideoContentName(videoContent.getName()); } else { exhibitionBoard.setVideoContentName("相关视频内容已被删除"); } final LambdaQueryWrapper<Asset> lambdaQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, videoContentId); lambdaQueryWrapper.eq(Asset::getFileCat, FileCatEnum.VIDEO_CONTENT.name()); lambdaQueryWrapper.eq(Asset::getPublished, true); final List<Asset> videoList = this.assetService.list(lambdaQueryWrapper); exhibitionBoard.setVideoList(videoList); } return getResult(exhibitionBoard); } @ApiOperation(value = "上架/下架展板内容", notes = "上架/下架展板内容") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "标识ID", dataType = "String", paramType = "path"), @ApiImplicitParam(name = "isPublish", value = "是否上架", dataType = "boolean", paramType = "query", allowableValues = "True, False") }) @PutMapping("/publish/{id}") @RequiresAuthentication //@RequiresPermissions("exhibition:board:publish") @MethodLog(operModule = OperModule.DISPLAYCONTENT, operType = OperType.UPPER) public Map<String, Object> enableExhibitionBoard(@PathVariable("id") String id, @RequestParam("isPublish") Boolean isPublish) { TUser user = getcurUser(); // 下架一个展板时,该展板对应的学习内容没下架不允许下架该展板 if (!isPublish) { // 查询该展板对应的所有学习内容的id LambdaQueryWrapper<LearningContentBoard> objectLambdaQueryWrapper = new LambdaQueryWrapper<>(); objectLambdaQueryWrapper.eq(LearningContentBoard::getExhibitionBoardId, id); List<LearningContentBoard> list = this.learningContentBoardService.list(objectLambdaQueryWrapper); List<String> collect = list.stream().map(LearningContentBoard::getLearningContentId).collect(Collectors.toList()); // 查询学习内容,判断是否已全部下架 if (CollectionUtil.isNotEmpty(collect)) { LambdaQueryWrapper<LearningContent> learningContentLambdaQueryWrapper = new LambdaQueryWrapper<>(); learningContentLambdaQueryWrapper.in(LearningContent::getId, collect); learningContentLambdaQueryWrapper.eq(LearningContent::getIsMajor, false); List<LearningContent> list1 = this.learningContentService.list(learningContentLambdaQueryWrapper); for (LearningContent learningContent : list1) { if (learningContent.getPublished()) { return getFailResult("该展板所在学习内容未下架,展板不能被下架!"); } } } } final ExhibitionBoard exhibitionBoard = this.exhibitionBoardService.getById(id); final Audit audit = Audit.builder() .userId(user.getId()) .content(exhibitionBoard.getName()) .name(exhibitionBoard.getName()) .refItemId(id) .organId(user.getOrgId()) .type(AuditTypeEnum.EXHIBITION_BOARD.name()) .operation(isPublish ? AuditOperationEnum.UPPER.name() : AuditOperationEnum.LOWER.name()) .status(AuditStatusEnum.TBC.name()) .level(AuditStatusEnum.TBC.name()) .build(); this.auditService.save(audit); this.exhibitionBoardService.updateById(ExhibitionBoard.builder().id(id).auditStatus(AuditStatusEnum.TBC.name()).build()); return getSuccessResult(); } @DeleteMapping("/delete/{id}") @RequiresAuthentication //@RequiresPermissions("exhibition:board:delete") @ApiOperation(value = "根据ID删除展板", notes = "根据ID删除展板") @ApiImplicitParams(value = { @ApiImplicitParam(name = "id", value = "标识ID", paramType = "path", dataType = "String") }) @MethodLog(operModule = OperModule.DISPLAYCONTENT, operType = OperType.DELETE) public Map<String, Object> deleteExhibitionBoard(@PathVariable("id") String id) { ExhibitionBoard byId = this.exhibitionBoardService.getById(id); // 上架状态下的展板需要判断是否被学习内容使用 if (byId.getPublished()) { // 查询该展板是否被学习内容使用 final LambdaQueryWrapper<LearningContentBoard> queryWrapper = Wrappers.lambdaQuery(); // 查询展板对应的学习内容id queryWrapper.eq(LearningContentBoard::getExhibitionBoardId, id); queryWrapper.select(LearningContentBoard::getLearningContentId); List<String> list = this.learningContentBoardService.listObjs(queryWrapper, Object::toString); if (CollectionUtil.isNotEmpty(list)) { List<LearningContent> learningContents = this.learningContentService.listByIds(list); String collect = learningContents.stream().map(LearningContent::getName).collect(Collectors.joining(",")); return getFailResult("该展板被学习内容:" + collect + "使用,不能被删除!"); } } TUser user = getcurUser(); final ExhibitionBoard exhibitionBoard = this.exhibitionBoardService.getById(id); final Audit audit = Audit.builder() .content(exhibitionBoard.getName()) .name(exhibitionBoard.getName()) .userId(user.getId()) .refItemId(id) .organId(user.getOrgId()) .type(AuditTypeEnum.EXHIBITION_BOARD.name()) .operation(AuditOperationEnum.REMOVE.name()) .status(AuditStatusEnum.TBC.name()) .level(AuditStatusEnum.TBC.name()) .build(); final boolean result = this.auditService.save(audit); //修改自身状态为待初审 LambdaUpdateWrapper<ExhibitionBoard> wrapper = new UpdateWrapper<ExhibitionBoard>().lambda() .eq(ExhibitionBoard::getId, exhibitionBoard.getId()) .set(ExhibitionBoard::getAuditStatus, AuditStatusEnum.TBC.name()) .set(ExhibitionBoard::getUpdateTime, LocalDateTime.now()); boolean update = exhibitionBoardService.update(wrapper); if (result) { return getSuccessResult(); } return getFailResult(); } }