xiexiang 1 rok pred
rodič
commit
244b981498

+ 57 - 0
src/main/java/cn/cslg/pas/common/dto/business/UpdatePatentProjectDTO.java

@@ -0,0 +1,57 @@
+package cn.cslg.pas.common.dto.business;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 更新专利数据库DTO
+ * @Author xiexiang
+ * @Date 2023/11/9
+ */
+@Data
+public class UpdatePatentProjectDTO {
+    @Schema(description = "id")
+    private Integer id;
+    @Schema(description = "名称")
+    private String name;
+    @Schema(description = "委托方id")
+    private String entrustId;
+    @Schema(description = "委托方名称")
+    private String entrustName;
+    @Schema(description = "负责人id")
+    private String headId;
+    @Schema(description = "负责部门id")
+    private String departmentId;
+    @Schema(description = "合同号")
+    private String contractNo;
+    @Schema(description = "内部卷号")
+    private String volumeNumber;
+    @Schema(description = "委案日")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date commissionCaseDay;
+    @Schema(description = "描述")
+    private String description;
+    @Schema(description = "应用场景")
+    private List<Integer> scenarioIds;
+
+    @Schema(description = "处理事项")
+    private List<Integer> matterIds;
+    @Schema(description = "是否更新")
+    private Boolean ifUpdate;
+    @Schema(description = "树结构")
+    private List<ProjectTreesDTO> trees;
+    @Schema(description = "周期")
+    private String crons;
+    @Schema(description = "状态")
+    private Integer status;
+    @Schema(description = "事件集合")
+    private List<ProjectEventDTO> events;
+    @Schema(description = "文件guids")
+    private List<String> fileGuids;
+}

+ 64 - 0
src/main/java/cn/cslg/pas/common/dto/business/UpdateReportProjectDTO.java

@@ -0,0 +1,64 @@
+package cn.cslg.pas.common.dto.business;
+
+import cn.hutool.core.date.DateTime;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/11/10
+ */
+@Data
+public class UpdateReportProjectDTO {
+    @Schema(description = "id")
+    private Integer id;
+    @Schema(description = "名称")
+    private String name;
+    @Schema(description = "委托类型1客户,2部门")
+    private Integer entrustType;
+    @Schema(description = "委托方id")
+    private Integer entrustId;
+    @Schema(description = "负责人id")
+    private Integer headId;
+    @Schema(description = "负责部门id")
+    private Integer departmentId;
+    @Schema(description = "项目类型(1专题库 2报告 3专利挖掘项目)")
+    private Integer type;
+    @Schema(description = "合同号")
+    private String contractNo;
+    @Schema(description = "内部卷号")
+    private String volumeNumber;
+    @Schema(description = "委案日")
+    private DateTime commissionCaseDay;
+    @Schema(description = "描述")
+    private String description;
+    @Schema(description = "标的专利号")
+    private String signPatentNo;
+    @Schema(description = "标的产品号")
+    private Integer signProjectId;
+    @Schema(description = "报告类型")
+    //0无效分析 1第三方意见 2稳定性分析 3FTO调查 4
+    private Integer reportType;
+    @Schema(description = "报告状态")
+    private Integer stauts;
+    @Schema(description = "案件编号")
+    private String caseNumber;
+    @Schema(description = "发文序号")
+    private String issueNumber;
+    @Schema(description = "发明创造名称")
+    private String inventionName;
+    @Schema(description = "专利权人")
+    private String currentApplication;
+    @Schema(description = "无效宣告请求人")
+    private String invalidApplication;
+    @Schema(description = "结论论述")
+    private String cronDescription;
+    @Schema(description = "事件集合")
+    List<ProjectEventDTO> events;
+    @Schema(description = "文件guids")
+    private List<String> fileGuids;
+    @Schema(description = "核心结论")
+    private List<Integer> cronIds;
+}

+ 18 - 7
src/main/java/cn/cslg/pas/controller/PatentProjectController.java

@@ -3,6 +3,7 @@ package cn.cslg.pas.controller;
 import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.dto.business.PatentProjectDTO;
 import cn.cslg.pas.common.dto.business.UpdateEventDTO;
+import cn.cslg.pas.common.dto.business.UpdatePatentProjectDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.request.StringGroupRequest;
 import cn.cslg.pas.common.model.request.StringRequest;
@@ -70,12 +71,22 @@ public class PatentProjectController {
 
     @Operation(summary = "更新专利数据库")
     @PostMapping("/updatePatentProject")
-    public Response updatePatentProject(String event, List<MultipartFile> files) throws Exception {
-        if (event != null) {
-            UpdateEventDTO updateEventDTO = JSONObject.parseObject(event, UpdateEventDTO.class);
-            Business business = businessFactory.getClass("eventService");
-            business.updateMessage(updateEventDTO, files);
-            return Response.success(1);
+    public Response updatePatentProject(@RequestBody UpdatePatentProjectDTO updatePatentProjectDTO) throws Exception {
+        if (updatePatentProjectDTO != null) {
+            Business business = businessFactory.getClass("patentProjectService");
+            Integer id = null;
+            try {
+                id = (Integer) business.updateMessage(updatePatentProjectDTO);
+            } catch (Exception e) {
+                if (e instanceof XiaoShiException) {
+                    return Response.error(e.getMessage());
+                } else if (e instanceof UnLoginException) {
+                    return Response.unLogin(e.getMessage());
+                } else if (e instanceof ConditionException) {
+                    return Response.conditionError(e.getMessage());
+                }
+            }
+            return Response.success(id);
         }
         else {
             return Response.error("网络异常");
@@ -85,7 +96,7 @@ public class PatentProjectController {
     @Operation(summary = "删除专利数据库")
     @PostMapping("/deletePatentProject")
     public String deletePatentProject(@RequestBody List<Integer> ids) throws Exception {
-        Business business = businessFactory.getClass("eventService");
+        Business business = businessFactory.getClass("patentProjectService");
         business.deleteMessage(ids);
         return Response.success();
     }

+ 195 - 10
src/main/java/cn/cslg/pas/service/business/PatentProjectService.java

@@ -46,16 +46,16 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
 
     @Autowired
     private PatentProjectMapper patentProjectMapper;
+
     @Autowired
     private FormatQueryService formatQueryService;
 
-
     @Autowired
     private QueryGroupFactory queryGroupFactory;
 
-
     @Autowired
     private CacheUtils cacheUtils;
+
     @Autowired
     private LoginUtils loginUtils;
 
@@ -73,6 +73,7 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
 
     @Autowired
     private FileManagerService fileManagerService;
+
     @Autowired
     private AssoProjectService assoProjectService;
 
@@ -91,6 +92,12 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
     @Autowired
     private ProductCategoryService productCategoryService;
 
+    @Autowired
+    private ProjectService projectService;
+
+    @Autowired
+    private AssoProjectScenarioService assoProjectScenarioService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Object queryMessage(QueryRequest queryRequest) throws Exception {
@@ -133,11 +140,21 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
     @Transactional(rollbackFor = Exception.class)
     public Object deleteMessage(List<Integer> ids) throws IOException {
         //TODO 检查是否有关联报告,如果有则提示不允许删除
-
+        LambdaQueryWrapper<AssoProject> reportExistWrapper = new LambdaQueryWrapper<>();
+        reportExistWrapper.in(AssoProject::getProjectId, ids);
+        reportExistWrapper.eq(AssoProject::getAssoProjectType, 2);
+        List<AssoProject> assoProjects = assoProjectService.list(reportExistWrapper);
+        if (assoProjects.size() != 0) {
+            throw new XiaoShiException("待删除专题库集合中有关联报告,无法删除!");
+        }
         //TODO 根据id删除专利数据库和文件关联表
-
+        LambdaQueryWrapper<AssoProjectFile> deleteFileWrapper = new LambdaQueryWrapper<>();
+        deleteFileWrapper.in(AssoProjectFile::getProjectId, ids);
+        assoProjectFileService.remove(deleteFileWrapper);
         //TODO 根据id删除专利数据库和事件的关联表
-
+        LambdaQueryWrapper<AssoProjectEvent> deleteEventWrapper = new LambdaQueryWrapper<>();
+        deleteEventWrapper.in(AssoProjectEvent::getProjectId, ids);
+        assoProjectEventService.remove(deleteEventWrapper);
         //TODO 根据id删除专利数据库的自定义字段的标引(es部分,暂时不做)
 
         //TODO 根据id删除专利数据库的自定义字段(自定义字段模块未完成,暂时不做)
@@ -145,7 +162,9 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
         //TODO 根据id删除专利数据库和事件的关联
 
         //TODO 根据id删除专利数据库和应用场景关联
-
+        LambdaQueryWrapper<AssoProjectScenario> deleteScenarioWrapper = new LambdaQueryWrapper<>();
+        deleteScenarioWrapper.in(AssoProjectScenario::getProjectId, ids);
+        assoProjectScenarioService.remove(deleteScenarioWrapper);
         //TODO 根据id删除专利数据库和报告的关联
 
         //TODO 根据id删除任务信息(任务模块未完成,暂时不做)
@@ -155,9 +174,7 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
         //TODO 根据id删除导入任务信息(导入任务模块未完成,暂时不做)
 
         //
-
-
-        return null;
+        return ids;
     }
 
     /**
@@ -396,8 +413,176 @@ public class PatentProjectService extends ServiceImpl<PatentProjectMapper, Paten
         //TODO 更新事件
         //TODO 若产品或产品类别技术类别有更新,则删除产品或产品类别技术类别和专利的标引(只需判断,删除部分,待es完成)
         //TODO 更新关联附件
+        if (object == null) {
+            throw new XiaoShiException("参数不能为空");
+        }
+        //TODO 校验参数
+        UpdatePatentProjectDTO updatePatentProjectDTO = (UpdatePatentProjectDTO) object;
+        //判断是否选择更新并且上传了cron表达式
+        if (updatePatentProjectDTO.getIfUpdate() != false) {
+            if (updatePatentProjectDTO.getCrons() == null && updatePatentProjectDTO.getCrons().equals("")) {
+                throw new XiaoShiException("选择更新,则cron表达式不能为空!");
+            }
+        }
+        //校验必传参数是否上传
+        if (updatePatentProjectDTO.getHeadId() == null) {
+            throw new XiaoShiException("负责人id不能为空");
+        }
+        //获取登陆人信息 用于设置创建人
+        PersonnelVO personnelVO = new PersonnelVO();
+        try {
+            personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        } catch (Exception e) {
+            throw new UnLoginException("未登录");
+        }
+        /**
+         * 装载project
+         */
+        //根据传入对象id查询project对象
+        Project project = projectService.getById(updatePatentProjectDTO.getId());
+        BeanUtils.copyProperties(updatePatentProjectDTO, project);
+        //当委托方id不为空时
+        if (updatePatentProjectDTO.getEntrustId() != null) {
+            project.setEntrustId(updatePatentProjectDTO.getEntrustId());
+        } else {//若且租户类型为代理机构,并且委托方id为空,委托方名称不为空时,新增委托方
+            ClientDTO clientDTO = new ClientDTO();
+            clientDTO.setName(updatePatentProjectDTO.getEntrustName());
+            clientDTO.setTenantId(personnelVO.getTenantId());
+            try {
+                String res = permissionService.addClient(clientDTO);
+                JSONObject jsonObject = JSONObject.parseObject(res);
+                Integer clientId = Integer.parseInt(jsonObject.get("data").toString());
+                project.setEntrustId(clientId.toString());
+            } catch (Exception e) {
+                throw new XiaoShiException("网络异常");
+            }
 
-        return null;
+        }
+        project.updateById();
+        /**
+         * 装载patentProject
+         */
+        //根据projectId查询出patentProject
+        LambdaQueryWrapper<PatentProject> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(PatentProject::getProjectId, project.getId());
+        PatentProject patentProject = this.getOne(queryWrapper);
+        //赋值
+        BeanUtils.copyProperties(updatePatentProjectDTO, patentProject);
+        patentProject.updateById();
+
+        /**
+         * 装载事件与project关联
+         */
+        List<AssoProjectEvent> assoProjectEvents = new ArrayList<>();
+        LambdaQueryWrapper<AssoProjectEvent> updateEventWrapper = new LambdaQueryWrapper<>();
+        updateEventWrapper.eq(AssoProjectEvent::getProjectId, project.getId());
+        assoProjectEventService.remove(updateEventWrapper);
+        List<ProjectEventDTO> events = updatePatentProjectDTO.getEvents();
+        if (events != null && events.size() != 0) {
+            //遍历传入的事件集合
+            for (ProjectEventDTO projectEventDTO : events) {
+                AssoProjectEvent assoProjectEvent = new AssoProjectEvent();
+                //事件id和处理事项id
+                BeanUtils.copyProperties(projectEventDTO, assoProjectEvent);
+                //项目id
+                assoProjectEvent.setProjectId(project.getId());
+                //创建人
+                assoProjectEvent.setCreateId(personnelVO.getId());
+                //类型为专题库
+                assoProjectEvent.setProjectType(0);
+                assoProjectEvents.add(assoProjectEvent);
+            }
+        }
+
+        //装载应用场景和project关联
+        List<Integer> scenarios = updatePatentProjectDTO.getScenarioIds();
+        if (scenarios != null && scenarios.size() > 0) {
+            for (Integer item : scenarios) {
+                AssoProjectEvent assoProjectEvent = new AssoProjectEvent();
+                //项目id
+                assoProjectEvent.setProjectId(project.getId());
+                //创建人
+                assoProjectEvent.setCreateId(personnelVO.getId());
+                //类型为专题库
+                assoProjectEvent.setProjectType(0);
+                //装载场景id
+                assoProjectEvent.setScenarioId(item);
+                assoProjectEvents.add(assoProjectEvent);
+            }
+        }
+
+        //装载处理事项和project关联
+        List<Integer> matter = updatePatentProjectDTO.getMatterIds();
+        if (matter != null && matter.size() > 0) {
+            for (Integer item : matter) {
+                AssoProjectEvent assoProjectEvent = new AssoProjectEvent();
+                //项目id
+                assoProjectEvent.setProjectId(project.getId());
+                //创建人
+                assoProjectEvent.setCreateId(personnelVO.getId());
+                //类型为专题库
+                assoProjectEvent.setProjectType(0);
+                //装载处理事项id
+                assoProjectEvent.setMatterId(item);
+                assoProjectEvents.add(assoProjectEvent);
+            }
+        }
+
+        //统一进行保存
+        if (assoProjectEvents != null && assoProjectEvents.size() != 0) {
+            assoProjectEventService.saveBatch(assoProjectEvents);
+        }
+
+        /**
+         * 装载树结构和project关联
+         */
+        List<AssoProjectTreeNode> assoProjectTreeNodes = new ArrayList<>();
+        LambdaQueryWrapper<AssoProjectTreeNode> updateTreeWrapper = new LambdaQueryWrapper<>();
+        updateTreeWrapper.eq(AssoProjectTreeNode::getProjectId, project.getId());
+        assoProjectTreeNodeService.remove(updateTreeWrapper);
+
+        List<ProjectTreesDTO> trees = updatePatentProjectDTO.getTrees();
+        if (trees != null && trees.size() != 0) {
+            //遍历传入的树
+            for (ProjectTreesDTO projectTreesDTO : trees) {
+                List<Integer> valueIds = projectTreesDTO.getValueIds();
+                //遍历值id集合
+                for (Integer valueId : valueIds) {
+                    AssoProjectTreeNode assoProjectTreeNode = new AssoProjectTreeNode();
+                    BeanUtils.copyProperties(projectTreesDTO, assoProjectTreeNode);
+                    //专题库、报告id
+                    assoProjectTreeNode.setProjectId(project.getId());
+                    //值id
+                    assoProjectTreeNode.setValueId(valueId);
+                    assoProjectTreeNodes.add(assoProjectTreeNode);
+                }
+            }
+            if (assoProjectTreeNodes != null && assoProjectTreeNodes.size() != 0) {
+                assoProjectTreeNodeService.saveBatch(assoProjectTreeNodes);
+            }
+        }
+
+        /**
+         * 装载和附件关联
+         */
+        List<AssoProjectFile> assoProjectFiles = new ArrayList<>();
+        LambdaQueryWrapper<AssoProjectFile> updateFileWrapper = new LambdaQueryWrapper<>();
+        updateFileWrapper.eq(AssoProjectFile::getProjectId, project.getId());
+        assoProjectFileService.remove(updateFileWrapper);
+        List<String> fileGuids = updatePatentProjectDTO.getFileGuids();
+        if (fileGuids != null && fileGuids.size() != 0) {
+            for (String fileGuid : fileGuids) {
+                AssoProjectFile assoProjectFile = new AssoProjectFile();
+                assoProjectFile.setProjectId(project.getId());
+                assoProjectFile.setFileGuid(fileGuid);
+                assoProjectFile.setCreateId(personnelVO.getId());
+                assoProjectFiles.add(assoProjectFile);
+            }
+            if (assoProjectFiles != null && assoProjectFiles.size() != 0) {
+                assoProjectFileService.saveBatch(assoProjectFiles);
+            }
+        }
+        return project.getId();
     }
 
     /**