|
@@ -0,0 +1,206 @@
|
|
|
|
|
+package cn.iocoder.yudao.module.rd.controller.admin.researchachievement;
|
|
|
|
|
+
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
+import cn.hutool.core.util.ObjUtil;
|
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
|
|
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
|
|
|
|
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
|
|
|
|
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
|
|
|
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
|
|
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
|
|
|
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
|
|
|
|
+import cn.iocoder.yudao.module.rd.controller.admin.attachment.vo.AttachmentPageReqVO;
|
|
|
|
|
+import cn.iocoder.yudao.module.rd.controller.admin.researchachievement.vo.ResearchAchievementPageReqVO;
|
|
|
|
|
+import cn.iocoder.yudao.module.rd.controller.admin.researchachievement.vo.ResearchAchievementRespVO;
|
|
|
|
|
+import cn.iocoder.yudao.module.rd.controller.admin.researchachievement.vo.ResearchAchievementSaveReqVO;
|
|
|
|
|
+import cn.iocoder.yudao.module.rd.dal.dataobject.attachment.AttachmentDO;
|
|
|
|
|
+import cn.iocoder.yudao.module.rd.dal.dataobject.researchachievement.ResearchAchievementDO;
|
|
|
|
|
+import cn.iocoder.yudao.module.rd.enums.AttachmentCategoryEnum;
|
|
|
|
|
+import cn.iocoder.yudao.module.rd.service.attachment.AttachmentService;
|
|
|
|
|
+import cn.iocoder.yudao.module.rd.service.researchachievement.ResearchAchievementService;
|
|
|
|
|
+import cn.iocoder.yudao.module.rd.utils.DictDataUtils;
|
|
|
|
|
+import io.swagger.v3.oas.annotations.Operation;
|
|
|
|
|
+import io.swagger.v3.oas.annotations.Parameter;
|
|
|
|
|
+import io.swagger.v3.oas.annotations.tags.Tag;
|
|
|
|
|
+import org.springframework.security.access.prepost.PreAuthorize;
|
|
|
|
|
+import org.springframework.validation.annotation.Validated;
|
|
|
|
|
+import org.springframework.web.bind.annotation.*;
|
|
|
|
|
+
|
|
|
|
|
+import javax.annotation.Resource;
|
|
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
+import javax.validation.Valid;
|
|
|
|
|
+import java.io.IOException;
|
|
|
|
|
+import java.util.Collections;
|
|
|
|
|
+import java.util.HashMap;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+import java.util.Map;
|
|
|
|
|
+
|
|
|
|
|
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
|
|
|
|
|
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
|
|
|
|
+
|
|
|
|
|
+@Tag(name = "管理后台 - 知识产权、荣誉证书等研究成果")
|
|
|
|
|
+@RestController
|
|
|
|
|
+@RequestMapping("/rd/research-achievement")
|
|
|
|
|
+@Validated
|
|
|
|
|
+public class ResearchAchievementController {
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private ResearchAchievementService researchAchievementService;
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private DictDataUtils dictDataUtils;
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private AttachmentService attachmentService;
|
|
|
|
|
+
|
|
|
|
|
+ @PostMapping("/create")
|
|
|
|
|
+ @Operation(summary = "创建知识产权、荣誉证书等研究成果")
|
|
|
|
|
+ @PreAuthorize("@ss.hasPermission('rd:research-achievement:create')")
|
|
|
|
|
+ public CommonResult<Long> createResearchAchievement(@Valid @RequestBody ResearchAchievementSaveReqVO createReqVO) {
|
|
|
|
|
+ return success(researchAchievementService.createResearchAchievement(createReqVO));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @PutMapping("/update")
|
|
|
|
|
+ @Operation(summary = "更新知识产权、荣誉证书等研究成果")
|
|
|
|
|
+ @PreAuthorize("@ss.hasPermission('rd:research-achievement:update')")
|
|
|
|
|
+ public CommonResult<Boolean> updateResearchAchievement(@Valid @RequestBody ResearchAchievementSaveReqVO updateReqVO) {
|
|
|
|
|
+ researchAchievementService.updateResearchAchievement(updateReqVO);
|
|
|
|
|
+ return success(true);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @DeleteMapping("/delete")
|
|
|
|
|
+ @Operation(summary = "删除知识产权、荣誉证书等研究成果")
|
|
|
|
|
+ @Parameter(name = "id", description = "编号", required = true)
|
|
|
|
|
+ @PreAuthorize("@ss.hasPermission('rd:research-achievement:delete')")
|
|
|
|
|
+ public CommonResult<Boolean> deleteResearchAchievement(@RequestParam("id") Long id) {
|
|
|
|
|
+ researchAchievementService.deleteResearchAchievement(id);
|
|
|
|
|
+ return success(true);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @GetMapping("/get")
|
|
|
|
|
+ @Operation(summary = "获得知识产权、荣誉证书等研究成果")
|
|
|
|
|
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
|
|
|
|
|
+ @PreAuthorize("@ss.hasPermission('rd:research-achievement:query')")
|
|
|
|
|
+ public CommonResult<ResearchAchievementRespVO> getResearchAchievement(@RequestParam("id") Long id) {
|
|
|
|
|
+ ResearchAchievementDO researchAchievement = researchAchievementService.getResearchAchievement(id);
|
|
|
|
|
+ return success(buildAchievement(researchAchievement));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 查询研究成果 专利 软著 论文 荣誉证书 详情
|
|
|
|
|
+ * @param achievement
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ private ResearchAchievementRespVO buildAchievement(ResearchAchievementDO achievement) {
|
|
|
|
|
+ // 如果 technology 为空 返回空对象
|
|
|
|
|
+ if (ObjUtil.isEmpty(achievement)) {
|
|
|
|
|
+ return new ResearchAchievementRespVO();
|
|
|
|
|
+ }
|
|
|
|
|
+ ResearchAchievementRespVO achievementVO = BeanUtils.toBean(achievement, ResearchAchievementRespVO.class);
|
|
|
|
|
+ // 查询 研究成果类型 字典数据
|
|
|
|
|
+ Map<String, String> achievementTypePair = dictDataUtils.getDictData("rd_achievement_type");
|
|
|
|
|
+ // key 研究成果类型value值 value不同类型对应的子类型数据字典type
|
|
|
|
|
+ Map<String, String> achievementTypeRemarkPair = dictDataUtils.getDictDataRemark("rd_achievement_type");
|
|
|
|
|
+
|
|
|
|
|
+ // 研究成果类型
|
|
|
|
|
+ String achievementType = achievementVO.getAchievementType();
|
|
|
|
|
+ if (StrUtil.isNotBlank(achievementType) && achievementTypePair.containsKey(achievementType)) {
|
|
|
|
|
+ achievementVO.setAchievementTypeLabel(achievementTypePair.get(achievementType));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 研究成果子类型
|
|
|
|
|
+ String subType = achievementVO.getSubType();
|
|
|
|
|
+ if (StrUtil.isNotBlank(achievementType) && achievementTypeRemarkPair.containsKey(achievementType)) {
|
|
|
|
|
+ // 当前研究成果类型 对应的子类型
|
|
|
|
|
+ String dictDataRemark = achievementTypeRemarkPair.get(achievementType);
|
|
|
|
|
+ if (StrUtil.isNotBlank(dictDataRemark)) {
|
|
|
|
|
+ Map<String, String> subTypePair = dictDataUtils.getDictData(dictDataRemark);
|
|
|
|
|
+ if (StrUtil.isNotBlank(subType) && subTypePair.containsKey(subType)) {
|
|
|
|
|
+ achievementVO.setSubTypeLabel(subTypePair.get(subType));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 查询当前 核心技术 附件列表
|
|
|
|
|
+ AttachmentPageReqVO reqVO = new AttachmentPageReqVO();
|
|
|
|
|
+ reqVO.setBizId(achievement.getId());
|
|
|
|
|
+ reqVO.setCategory(AttachmentCategoryEnum.ACHIEVEMENT.getCode());
|
|
|
|
|
+ List<AttachmentDO> attachments = attachmentService.getIotAttachments(reqVO);
|
|
|
|
|
+ if (CollUtil.isNotEmpty(attachments)) {
|
|
|
|
|
+ achievementVO.setAttachments(attachments);
|
|
|
|
|
+ }
|
|
|
|
|
+ return achievementVO;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @GetMapping("/page")
|
|
|
|
|
+ @Operation(summary = "获得知识产权、荣誉证书等研究成果分页")
|
|
|
|
|
+ @PreAuthorize("@ss.hasPermission('rd:research-achievement:query')")
|
|
|
|
|
+ public CommonResult<PageResult<ResearchAchievementRespVO>> getResearchAchievementPage(@Valid ResearchAchievementPageReqVO pageReqVO) {
|
|
|
|
|
+ PageResult<ResearchAchievementDO> pageResult = researchAchievementService.getResearchAchievementPage(pageReqVO);
|
|
|
|
|
+ return success(new PageResult<>(buildAchievements(pageResult.getList()), pageResult.getTotal()));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 设置研究成果列表中 每个 研究成果的 主类型 子类型 label
|
|
|
|
|
+ * @param achievements
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ private List<ResearchAchievementRespVO> buildAchievements(List<ResearchAchievementDO> achievements) {
|
|
|
|
|
+ if (CollUtil.isEmpty(achievements)) {
|
|
|
|
|
+ return Collections.emptyList();
|
|
|
|
|
+ }
|
|
|
|
|
+ // 查询数据字典值列表
|
|
|
|
|
+ // 研究成果 子类型 key研究成果id value子类型标签
|
|
|
|
|
+ Map<Long, String> subTypesPair = new HashMap<>();
|
|
|
|
|
+
|
|
|
|
|
+ // 查询 研究成果 主类别 字典数据
|
|
|
|
|
+ Map<String, String> achievementTypePair = dictDataUtils.getDictData("rd_achievement_type");
|
|
|
|
|
+ // key 研究成果类型value值 value不同类型对应的子类型数据字典type
|
|
|
|
|
+ Map<String, String> achievementTypeRemarkPair = dictDataUtils.getDictDataRemark("rd_achievement_type");
|
|
|
|
|
+
|
|
|
|
|
+ achievements.forEach(achievement -> {
|
|
|
|
|
+ // 每个研究成果的 主类型
|
|
|
|
|
+ String achievementType = achievement.getAchievementType();
|
|
|
|
|
+
|
|
|
|
|
+ // 研究成果子类型
|
|
|
|
|
+ String subType = achievement.getSubType();
|
|
|
|
|
+ if (StrUtil.isNotBlank(achievementType) && achievementTypeRemarkPair.containsKey(achievementType)) {
|
|
|
|
|
+ // 当前研究成果类型 对应的子类型
|
|
|
|
|
+ String dictDataRemark = achievementTypeRemarkPair.get(achievementType);
|
|
|
|
|
+ if (StrUtil.isNotBlank(dictDataRemark)) {
|
|
|
|
|
+ Map<String, String> subTypePair = dictDataUtils.getDictData(dictDataRemark);
|
|
|
|
|
+ if (StrUtil.isNotBlank(subType) && subTypePair.containsKey(subType)) {
|
|
|
|
|
+ subTypesPair.put(achievement.getId(), subTypePair.get(subType));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ return BeanUtils.toBean(achievements, ResearchAchievementRespVO.class, (achievementVO) -> {
|
|
|
|
|
+ if (StrUtil.isNotBlank(achievementVO.getAchievementType())) {
|
|
|
|
|
+ if (achievementTypePair.containsKey(achievementVO.getAchievementType())) {
|
|
|
|
|
+ achievementVO.setAchievementTypeLabel(achievementTypePair.get(achievementVO.getAchievementType()));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StrUtil.isNotBlank(achievementVO.getSubType())) {
|
|
|
|
|
+ if (subTypesPair.containsKey(achievementVO.getId())) {
|
|
|
|
|
+ achievementVO.setSubTypeLabel(subTypesPair.get(achievementVO.getId()));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @GetMapping("/export-excel")
|
|
|
|
|
+ @Operation(summary = "导出知识产权、荣誉证书等研究成果 Excel")
|
|
|
|
|
+ @PreAuthorize("@ss.hasPermission('rd:research-achievement:export')")
|
|
|
|
|
+ @ApiAccessLog(operateType = EXPORT)
|
|
|
|
|
+ public void exportResearchAchievementExcel(@Valid ResearchAchievementPageReqVO pageReqVO,
|
|
|
|
|
+ HttpServletResponse response) throws IOException {
|
|
|
|
|
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
|
|
|
|
+ List<ResearchAchievementDO> list = researchAchievementService.getResearchAchievementPage(pageReqVO).getList();
|
|
|
|
|
+ // 导出 Excel
|
|
|
|
|
+ ExcelUtils.write(response, "知识产权、荣誉证书等研究成果.xls", "数据", ResearchAchievementRespVO.class,
|
|
|
|
|
+ BeanUtils.toBean(list, ResearchAchievementRespVO.class));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+}
|