xiexiang před 1 rokem
rodič
revize
8ac90251f7

+ 43 - 7
src/main/java/cn/cslg/pas/common/dto/business/ReportProjectDTO.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.business;
 
+import cn.hutool.core.date.DateTime;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -14,14 +15,49 @@ import java.util.List;
 public class ReportProjectDTO {
     @Schema(description = "名称")
     private String name;
-    @Schema(description = "事件集合")
-    List<ProjectEventDTO>  events;
-    @Schema(description = "处理人id")
-    private Integer headId;
-    @Schema(description = "负责部门id")
-    private Integer departmentId;
     @Schema(description = "委托类型1客户,2部门")
     private Integer entrustType;
-    @Schema(description = "委托id")
+    @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;
 }

+ 10 - 10
src/main/java/cn/cslg/pas/controller/ReportProjectController.java

@@ -2,6 +2,7 @@ package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.dto.business.EventDTO;
+import cn.cslg.pas.common.dto.business.ReportProjectDTO;
 import cn.cslg.pas.common.dto.business.UpdateEventDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.request.StringGroupRequest;
@@ -45,14 +46,13 @@ public class ReportProjectController {
 
 
     @Operation(summary = "添加报告")
-    @PostMapping("/addPatentProject")
-    public Response addPatentProject(String event, List<MultipartFile> files) throws Exception {
-        if (event != null) {
-            EventDTO eventDTO = JSONObject.parseObject(event, EventDTO.class);
-            Business business = businessFactory.getClass("eventService");
+    @PostMapping("/addReportProject")
+    public Response addReportProject(ReportProjectDTO reportProjectDTO, List<MultipartFile> files) throws Exception {
+        if (reportProjectDTO != null) {
+            Business business = businessFactory.getClass("reportProjectService");
             Integer id = null;
             try {
-                id = (Integer) business.addMessage(eventDTO, files);
+                id = (Integer) business.addMessage(reportProjectDTO, files);
             } catch (Exception e) {
                 if (e instanceof XiaoShiException) {
                     return Response.error(e.getMessage());
@@ -69,11 +69,11 @@ public class ReportProjectController {
     }
 
     @Operation(summary = "更新报告")
-    @PostMapping("/updatePatentProject")
+    @PostMapping("/updateReportProject")
     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 business = businessFactory.getClass("reportProjectService");
             business.updateMessage(updateEventDTO, files);
             return Response.success(1);
         }
@@ -83,7 +83,7 @@ public class ReportProjectController {
     }
 
     @Operation(summary = "删除专利数据库")
-    @PostMapping("/deletePatentProject")
+    @PostMapping("/deleteReportProject")
     public String deletePatentProject(@RequestBody List<Integer> ids) throws Exception {
         Business business = businessFactory.getClass("eventService");
         business.deleteMessage(ids);
@@ -91,7 +91,7 @@ public class ReportProjectController {
     }
 
     @Operation(summary = "分组专利数据库")
-    @PostMapping("/groupPatentProject")
+    @PostMapping("/groupReportProject")
     public Response groupPatentProject(@RequestBody StringGroupRequest stringGroupRequest) throws Exception {
         Business business = businessFactory.getClass("eventService");
         Records records = (Records)business.getGroup(stringGroupRequest,"event");

+ 22 - 0
src/main/java/cn/cslg/pas/domain/business/AssoReportCron.java

@@ -0,0 +1,22 @@
+package cn.cslg.pas.domain.business;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * 报告与核心结论关联表
+ * @Author xiexiang
+ * @Date 2023/11/6
+ */
+@Data
+@TableName("asso_report_cron")
+/*数据库中的表对应的类
+ */
+public class AssoReportCron extends BaseEntity<AssoReportCron> {
+    @TableField(value = "project_id")
+    private Integer projectId;
+    @TableField(value = "cron_id")
+    private Integer cronId;
+}

+ 13 - 0
src/main/java/cn/cslg/pas/mapper/AssoReportCronMapper.java

@@ -0,0 +1,13 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.business.AssoReportCron;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/11/6
+ */
+@Repository
+public interface AssoReportCronMapper extends BaseMapper<AssoReportCron> {
+}

+ 16 - 0
src/main/java/cn/cslg/pas/service/business/AssoReportCronService.java

@@ -0,0 +1,16 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.domain.business.AssoReportCron;
+import cn.cslg.pas.mapper.AssoReportCronMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/11/6
+ */
+@Service
+@Slf4j
+public class AssoReportCronService extends ServiceImpl<AssoReportCronMapper, AssoReportCron> {
+}

+ 110 - 31
src/main/java/cn/cslg/pas/service/business/ReportProjectService.java

@@ -1,6 +1,8 @@
 package cn.cslg.pas.service.business;
 
 import cn.cslg.pas.common.dto.business.PatentProjectDTO;
+import cn.cslg.pas.common.dto.business.ProjectEventDTO;
+import cn.cslg.pas.common.dto.business.ReportProjectDTO;
 import cn.cslg.pas.common.model.cronModel.*;
 import cn.cslg.pas.common.model.request.GroupRequest;
 import cn.cslg.pas.common.model.request.QueryRequest;
@@ -9,10 +11,8 @@ import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.common.vo.business.EventCountVO;
 import cn.cslg.pas.common.vo.business.EventVO;
-import cn.cslg.pas.domain.business.AssoEventFile;
-import cn.cslg.pas.domain.business.PatentProject;
-import cn.cslg.pas.domain.business.ReportProject;
-import cn.cslg.pas.domain.business.SystemDict;
+import cn.cslg.pas.domain.business.*;
+import cn.cslg.pas.exception.UnLoginException;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.factorys.businessFactory.Business;
 import cn.cslg.pas.factorys.reGroupFactory.QueryGroupFactory;
@@ -69,7 +69,17 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper,Report
     private AssoProjectEventMapper assoProjectEventMapper;
 
     @Autowired
+    private AssoProjectEventService assoProjectEventService;
+
+    @Autowired
+    private AssoProjectFileService assoProjectFileService;
+
+    @Autowired
+    private AssoReportCronService assoReportCronService;
+
+    @Autowired
     private CacheUtils cacheUtils;
+
     @Autowired
     private LoginUtils loginUtils;
 
@@ -98,31 +108,6 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper,Report
     @Transactional(rollbackFor = Exception.class)
     public Integer addMessage(Object object, List<MultipartFile> files) {
 
-        //校验参数
-
-        /**
-         * 装载project
-         */
-
-        /**
-         * 装载reportProject
-         */
-
-        /**
-         * 装载事件与project关联
-         */
-
-        /**
-         * 装载和附件关联
-         */
-
-
-        /**
-         * 装载核心结论
-         */
-
-
-
         return null;
     }
 
@@ -199,9 +184,103 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper,Report
 
     @Override
     public Object addMessage(Object object) {
-      //
+        //TODO 校验参数
+        //object to reportProjectDTO
+        ReportProjectDTO reportProjectDTO = (ReportProjectDTO) object;
+        /**
+         * 校验必传参数是否上传
+         */
+        //负责人id
+        if (reportProjectDTO.getHeadId() == null) {
+            throw new XiaoShiException("负责人id不能为空");
+        }
+        //报告类型
+        if (reportProjectDTO.getReportType().equals(null)) {
+            throw new XiaoShiException("报告类型不能为空");
+        }
+        //报告状态
+        if (reportProjectDTO.getStauts().equals(null)) {
+            throw new XiaoShiException("报告状态不能为空");
+        }
+        //获取登陆人信息 用于设置创建人
+        PersonnelVO personnelVO = new PersonnelVO();
+        try {
+            personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        } catch (Exception e) {
+            throw new UnLoginException("未登录");
+        }
+        /**
+         * 装载project
+         */
+        Project project = new Project();
+        BeanUtils.copyProperties(reportProjectDTO, project);
+        project.setCreateId(personnelVO.getId());
+        project.setTenantId(personnelVO.getTenantId());
+        project.insert();
+        /**
+         * 装载reportProject
+         */
+        ReportProject reportProject = new ReportProject();
+        BeanUtils.copyProperties(reportProjectDTO, reportProject);
+        reportProject.setProject_id(project.getId());
+        reportProject.insert();
+        /**
+         * 装载事件与project关联
+         */
+        List<AssoProjectEvent> assoProjectEvents = new ArrayList<>();
+        List<ProjectEventDTO> events = reportProjectDTO.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(1);
+                assoProjectEvents.add(assoProjectEvent);
+            }
+            if (assoProjectEvents != null && assoProjectEvents.size() != 0) {
+                assoProjectEventService.saveBatch(assoProjectEvents);
+            }
+        }
+        /**
+         * 装载和附件关联
+         */
+        List<AssoProjectFile> assoProjectFiles = new ArrayList<>();
+        List<String> fileGuids = reportProjectDTO.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 null;
+        /**
+         * 装载核心结论
+         */
+        List<Integer> cronIds = reportProjectDTO.getCronIds();
+        List<AssoReportCron> assoReportCrons = new ArrayList<>();
+        if (cronIds != null && cronIds.size() != 0) {
+            cronIds.forEach(item -> {
+                AssoReportCron assoReportCron = new AssoReportCron();
+                assoReportCron.setProjectId(project.getId());
+                assoReportCron.setCronId(item);
+                assoReportCrons.add(assoReportCron);
+            });
+            assoReportCronService.saveBatch(assoReportCrons);
+        }
+        //返回id
+        return project.getId();
     }
 
     @Override

+ 96 - 0
src/test/java/cn/cslg/pas/service/ReportProjectServiceTests.java

@@ -0,0 +1,96 @@
+package cn.cslg.pas.service;
+
+import cn.cslg.pas.common.dto.business.ProjectEventDTO;
+import cn.cslg.pas.common.dto.business.ReportProjectDTO;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.controller.ReportProjectController;
+import cn.cslg.pas.service.business.ReportProjectService;
+import org.apache.regexp.RE;
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/11/6
+ */
+@SpringBootTest
+public class ReportProjectServiceTests {
+    @Autowired
+    private ReportProjectService reportProjectService;
+
+    @Autowired
+    private ReportProjectController reportProjectController;
+
+    @Test
+    void addReportProject() throws Exception {
+//        ReportProjectDTO reportProjectDTO = new ReportProjectDTO();
+//        reportProjectDTO.setName("");
+//        //委托类型1客户,2部门
+//        reportProjectDTO.setEntrustType(1);
+//        //委托方id
+//        reportProjectDTO.setEntrustId();
+//        //负责人id
+//        reportProjectDTO.setHeadId(30);
+//        //负责部门id
+//        reportProjectDTO.setDepartmentId(null);
+//        //项目类型(1专题库 2报告 3专利挖掘项目)
+//        reportProjectDTO.setType(2);
+//        //合同号
+//        reportProjectDTO.setContractNo("合同号");
+//        //内部卷号
+//        reportProjectDTO.setVolumeNumber("内部卷号");
+//        //委案日
+//        SimpleDateFormat sdf = new SimpleDateFormat();
+//        sdf.applyPattern("yyyy-MM-dd");
+//        String dateString = "2023-11-01";
+//        Date date = sdf.parse(dateString);
+//        reportProjectDTO.setCommissionCaseDay(null);
+//        //描述
+//        reportProjectDTO.setDescription();
+//        //标的专利号
+//        reportProjectDTO.setSignPatentNo();
+//        //标的产品号
+//        reportProjectDTO.setSignProjectId();
+//        //报告类型
+//        reportProjectDTO.setReportType();
+//        //报告状态
+//        reportProjectDTO.setStauts();
+//        //案件编号
+//        reportProjectDTO.setCaseNumber();
+//        //发文序号
+//        reportProjectDTO.setIssueNumber();
+//        //发明创造名称
+//        reportProjectDTO.setInventionName();
+//        //专利权人
+//        reportProjectDTO.setCurrentApplication();
+//        //无效宣告请求人
+//        reportProjectDTO.setInvalidApplication();
+//        //结论论述
+//        reportProjectDTO.setCronDescription();
+//        //事件集合
+//        List<ProjectEventDTO> events = new ArrayList<>();
+//        ProjectEventDTO projectEventDTO = new ProjectEventDTO();
+//        //事件id
+//        projectEventDTO.setEventId();
+//        //处理事项id
+//        projectEventDTO.setMatterId();
+//        events.add(projectEventDTO);
+//        reportProjectDTO.setEvents(events);
+//        //文件guids
+//        List<String> guids = new ArrayList<>();
+//        reportProjectDTO.setFileGuids(guids);
+//        //核心结论
+//        List<Integer> cronIds = new ArrayList<>();
+//        reportProjectDTO.setCronIds(cronIds);
+//        List<MultipartFile> files = new ArrayList<>();
+//        Response response = reportProjectController.addReportProject(reportProjectDTO, files);
+//        Assert.assertEquals(200,Integer.parseInt(response.getCode().toString()));
+    }
+}