Explorar o código

报告模板 2022/12/2

lwhhszx %!s(int64=2) %!d(string=hai) anos
pai
achega
97fb30c07a
Modificáronse 38 ficheiros con 9819 adicións e 8997 borrados
  1. 41 0
      RMS/src/main/java/cn/cslg/report/controller/DownloadController.java
  2. 7 2
      RMS/src/main/java/cn/cslg/report/controller/InvalidRecordController.java
  3. 4 2
      RMS/src/main/java/cn/cslg/report/controller/LitigationHistoryController.java
  4. 14 12
      RMS/src/main/java/cn/cslg/report/controller/ReportController.java
  5. 17 5
      RMS/src/main/java/cn/cslg/report/controller/ReportDocumentController.java
  6. 4 2
      RMS/src/main/java/cn/cslg/report/controller/ReviewHistoryController.java
  7. 8 244
      RMS/src/main/java/cn/cslg/report/controller/TaskController.java
  8. 0 2
      RMS/src/main/java/cn/cslg/report/controller/TempleController.java
  9. 3 4
      RMS/src/main/java/cn/cslg/report/entity/Report.java
  10. 32 4
      RMS/src/main/java/cn/cslg/report/entity/ReportDocument.java
  11. 6 4
      RMS/src/main/java/cn/cslg/report/entity/ReportFiles.java
  12. 23 2
      RMS/src/main/java/cn/cslg/report/entity/Template.java
  13. 5 9
      RMS/src/main/java/cn/cslg/report/entity/asso/AssoPatentFile.java
  14. 28 0
      RMS/src/main/java/cn/cslg/report/entity/asso/AssoLitigationHisFile.java
  15. 32 0
      RMS/src/main/java/cn/cslg/report/entity/asso/AssoReportFile.java
  16. 28 0
      RMS/src/main/java/cn/cslg/report/entity/asso/AssoReviewHisFile.java
  17. 12 0
      RMS/src/main/java/cn/cslg/report/mapper/AssoInvalidRecordFileMapper.java
  18. 11 0
      RMS/src/main/java/cn/cslg/report/mapper/AssoLitigationHisFileMapper.java
  19. 2 2
      RMS/src/main/java/cn/cslg/report/mapper/AssoPatentFileMapper.java
  20. 11 0
      RMS/src/main/java/cn/cslg/report/mapper/AssoReviewHisFileMapper.java
  21. 1 0
      RMS/src/main/java/cn/cslg/report/service/BaseService.java
  22. 3 1
      RMS/src/main/java/cn/cslg/report/service/OutInterfaceService.java
  23. 0 2
      RMS/src/main/java/cn/cslg/report/service/business/AssoComapareFielService.java
  24. 34 0
      RMS/src/main/java/cn/cslg/report/service/business/AssoInvalidRecordFileService.java
  25. 35 0
      RMS/src/main/java/cn/cslg/report/service/business/AssoLitigationHisFileService.java
  26. 0 17
      RMS/src/main/java/cn/cslg/report/service/business/AssoPatentFileService.java
  27. 45 0
      RMS/src/main/java/cn/cslg/report/service/business/AssoReportFileService.java
  28. 35 0
      RMS/src/main/java/cn/cslg/report/service/business/AssoReviewHisFileService.java
  29. 9 2
      RMS/src/main/java/cn/cslg/report/service/business/InvalidRecordService.java
  30. 13 6
      RMS/src/main/java/cn/cslg/report/service/business/LitigationHistoryService.java
  31. 289 4
      RMS/src/main/java/cn/cslg/report/service/business/ReportDocumentService.java
  32. 26 19
      RMS/src/main/java/cn/cslg/report/service/business/ReportFileService.java
  33. 29 3
      RMS/src/main/java/cn/cslg/report/service/business/ReportService.java
  34. 9 2
      RMS/src/main/java/cn/cslg/report/service/business/ReviewHistoryService.java
  35. 3 2
      RMS/src/main/java/cn/cslg/report/service/business/TaskService.java
  36. 2 1
      RMS/src/main/java/cn/cslg/report/service/business/TemplateService.java
  37. 5379 7651
      logs/rms/rms-debug.2022-12-01.0.log
  38. 3619 993
      logs/rms/rms-info.2022-12-01.0.log

+ 41 - 0
RMS/src/main/java/cn/cslg/report/controller/DownloadController.java

@@ -0,0 +1,41 @@
+package cn.cslg.report.controller;
+
+import cn.cslg.report.common.core.base.Constants;
+import cn.cslg.report.common.utils.DateUtils;
+import cn.cslg.report.common.utils.FileUtils;
+import cn.cslg.report.entity.Template;
+import cn.cslg.report.service.business.TemplateService;
+import cn.hutool.core.io.FileUtil;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URLEncoder;
+
+@Tag(name = "下载")
+@RestController
+@RequestMapping(Constants.REPORT_API + "/download")
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class DownloadController {
+    private final FileUtils fileUtils;
+
+    @GetMapping("downloadFile")
+    @Operation(summary = "下载文件")
+    public ResponseEntity<FileSystemResource> downloadSystemFile2(String url) throws IOException {
+        File file = new File(fileUtils.getSystemPath() + url);
+        HttpHeaders headers = new HttpHeaders();
+        String fileName = DateUtils.getNowTimeFormat(DateUtils.YYYYMMDDHHMMSS) + "." + FileUtil.extName(file.getName());
+        headers.add("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
+        HttpStatus status = HttpStatus.OK;
+        return new ResponseEntity<>(new FileSystemResource(file), headers, status);
+    }
+
+}

+ 7 - 2
RMS/src/main/java/cn/cslg/report/controller/InvalidRecordController.java

@@ -4,14 +4,17 @@ import cn.cslg.report.common.core.base.Constants;
 import cn.cslg.report.entity.InvalidRecord;
 import cn.cslg.report.entity.LitigationHistory;
 import cn.cslg.report.service.business.InvalidRecordService;
+import cn.cslg.report.service.business.ReportFileService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.util.List;
 
 @Tag(name = "无效记录")
 @RestController
@@ -21,8 +24,9 @@ public class InvalidRecordController {
     public final InvalidRecordService invalidRecordService;
     @RequestMapping(value = "/addInvalidRecord", method = RequestMethod.POST)
     @Operation(summary = "增加无效记录")
-    public  String addInvalidRecord(@RequestBody InvalidRecord invalidRecord) throws IOException{
-        return invalidRecordService.addInvalidRecord(invalidRecord);
+    public  String addInvalidRecord(InvalidRecord invalidRecord, List<MultipartFile> file) throws IOException{
+
+        return invalidRecordService.addInvalidRecord(invalidRecord,file);
     }
     @RequestMapping(value = "/updateInvalidRecord", method = RequestMethod.POST)
     @Operation(summary = "修改无效记录")
@@ -36,6 +40,7 @@ public class InvalidRecordController {
     public String deleInvalidRecord(int id)throws IOException{
         return invalidRecordService.deleteInvalidRecord(id);
     }
+
     @PostMapping(value = "/queryInvalidRecord")
     @Operation(summary = "查询无效记录")
     @Transactional(rollbackFor = Exception.class)

+ 4 - 2
RMS/src/main/java/cn/cslg/report/controller/LitigationHistoryController.java

@@ -9,8 +9,10 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.util.List;
 
 @Tag(name = "诉讼历史")
 @RestController
@@ -25,8 +27,8 @@ public class LitigationHistoryController {
     }
     @PostMapping(value = "/addLitigationHistory")
     @Operation(summary = "增加诉讼历史")
-    public String addLitigationHistory(@RequestBody LitigationHistory litigationHistory)throws IOException{
-        return litigationHistoryService.addLitigationHistory(litigationHistory);
+    public String addLitigationHistory( LitigationHistory litigationHistory, List<MultipartFile> file)throws IOException{
+        return litigationHistoryService.addLitigationHistory(litigationHistory,file);
     }
     @PostMapping(value = "/updateLitigationHistory")
     @Operation(summary = "修改诉讼历史")

+ 14 - 12
RMS/src/main/java/cn/cslg/report/controller/ReportController.java

@@ -10,6 +10,7 @@ import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Lazy;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -25,8 +26,9 @@ import java.util.List;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class ReportController {
     private final ReportService reportService;
-   private final AssoTaskPersonelService assoTaskPersonelService;
-   private final ReportFileService reportFileService;
+    private final AssoTaskPersonelService assoTaskPersonelService;
+    private final ReportFileService reportFileService;
+    private final AssoReportFileService assoReportFileService;
 
     /**
      * @param report 报告类
@@ -36,7 +38,8 @@ public class ReportController {
      */
     @RequestMapping(value = "/addReport", method = RequestMethod.POST)
     @Operation(summary = "新增报告")
-    public String addReport(Report report , List<MultipartFile> file) {
+    @Transactional(rollbackFor = Exception.class)
+    public String addReport(Report report, List<MultipartFile> file) {
         // TODO: 2022/11/4 关于错误提示与对应的错误码还需要制定 避免前台看到失败字样 用网络异常来代替说明
         // 目前的错误说明有
         //  添加成功 是正常添加成功
@@ -45,11 +48,9 @@ public class ReportController {
         //  服务器无响应 是未知情况 需要重点查看
         //  网络异常 是传入参数出现了问题
         // 以上的说明可以参考或者改变,按照实际情况使用,另外这些说明我没有设置CODE码,建议加上
-
         if (report != null) {
-          Integer fileId =  reportFileService.uploadFiles(file.get(0));
-          report.setFileID(fileId);
-            Integer flag = reportService.addReport(report);
+            //新建报告并返回报告Id
+            Integer reportId = reportService.addReport(report,file);
 
             return Response.success("添加成功");
 
@@ -64,10 +65,11 @@ public class ReportController {
         if (report != null) {
             report.setScenarioId(StringUtils.join(report.getScenarioList(), ","));
             Boolean flag = reportService.updateById(report);
-            if(flag){
+            if (flag) {
                 return Response.success("添加成功");
+            } else {
+                return Response.error("添加失败");
             }
-         else{ return Response.error("添加失败");}
 
         } else {
             return Response.error("未检测到报告信息");
@@ -77,15 +79,15 @@ public class ReportController {
     @RequestMapping(value = "/queryReport", method = RequestMethod.POST)
     @Operation(summary = "查找报告")
     public String queryReport(@RequestBody ReportVO reportVO) throws IOException {
-     return reportService.queryReport(reportVO);
+        return reportService.queryReport(reportVO);
     }
+
     @RequestMapping(value = "/deleReport", method = RequestMethod.GET)
     @Operation(summary = "删除报告")
-    public String deleReport(Integer id)throws IOException {
+    public String deleReport(Integer id) throws IOException {
         assoTaskPersonelService.deleAssoTaskPersonel(id);
         return reportService.reportDele(id);
     }
 
 
-
 }

+ 17 - 5
RMS/src/main/java/cn/cslg/report/controller/ReportDocumentController.java

@@ -16,16 +16,28 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.io.IOException;
 
-@Tag(name = "报告模板")
+@Tag(name = "文件导出")
 @RestController
 @RequestMapping(Constants.REPORT_API + "/reportDocument")
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class ReportDocumentController {
     public final ReportDocumentService reportDocumentService;
-    @RequestMapping(value = "/document", method = RequestMethod.POST)
-    @Operation(summary = "根据报告类型获得模板")
-    public  String reportDocument(@RequestBody ReportDocument reportDocument) throws IOException{
-        return reportDocumentService.reportDocument(reportDocument);
+    @RequestMapping(value = "/exportReport", method = RequestMethod.GET)
+    @Operation(summary = "导出报告")
+    public  String exportReport(Integer reportId,Integer templeId) throws IOException {
+        return reportDocumentService.exportReport(reportId,templeId);
+    }
+
+    @RequestMapping(value = "/getExportList", method = RequestMethod.POST)
+    @Operation(summary = "获得导出记录")
+    public  String getExportList(@RequestBody ReportDocument reportDocument) throws IOException {
+        return reportDocumentService.getExportList(reportDocument);
+    }
+
+    @RequestMapping(value = "/deleteExport", method = RequestMethod.GET)
+    @Operation(summary = "删除导出记录")
+    public  String deleteExport(Integer id) throws IOException {
+        return reportDocumentService.deleteExport(id);
     }
     
 }

+ 4 - 2
RMS/src/main/java/cn/cslg/report/controller/ReviewHistoryController.java

@@ -11,8 +11,10 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.util.List;
 
 @Tag(name = "审查历史")
 @RestController
@@ -22,8 +24,8 @@ public class ReviewHistoryController {
     public final ReviewHistoryService reviewHistoryService;
     @RequestMapping(value = "/addReviewHistory", method = RequestMethod.POST)
     @Operation(summary = "增加审查历史")
-    public  String addInvalidRecord(@RequestBody ReviewHistory reviewHistory) throws IOException{
-        return reviewHistoryService.addReviewHistory(reviewHistory);
+    public  String addInvalidRecord(ReviewHistory reviewHistory,List<MultipartFile> files) throws IOException{
+        return reviewHistoryService.addReviewHistory(reviewHistory,files);
     }
     @RequestMapping(value = "/updateReviewHistory", method = RequestMethod.POST)
     @Operation(summary = "修改审查历史")

+ 8 - 244
RMS/src/main/java/cn/cslg/report/controller/TaskController.java

@@ -51,14 +51,6 @@ public class TaskController {
     private final TaskService taskService;
     private final BaseService baseService;
 
-    private final OutInterfaceService outInterfaceService;
-    private final CompareScenariosService compareScenariosService;
-    private final CompareScenariosAndRecordsService scenariosRecordsService;
-    private final CompareRecordsService compareRecordsService;
-    private final AssoRecordsFeatureService assoRecordsFeatureService;
-    private final FeatureService featureService;
-    private final ReportService reportService;
-
     @RequestMapping(value = "/deleteTask", method = RequestMethod.POST)
     @Operation(summary = "删除任务")
     public String deleteTask(Integer id) {
@@ -85,8 +77,8 @@ public class TaskController {
 
     @RequestMapping(value = "/addTask", method = RequestMethod.POST)
     @Operation(summary = "新增审核任务")
-    public String addTask(@RequestBody TaskVO taskVO) throws ParseException, IOException {
-        return taskService.addTask(taskVO);
+    public String addTask( TaskVO taskVO,List<MultipartFile> file) throws ParseException, IOException {
+        return taskService.addTask(taskVO,file);
     }
 
     @RequestMapping(value = "/auditTask", method = RequestMethod.POST)
@@ -95,12 +87,12 @@ public class TaskController {
         return taskService.auditTask(auditTaskVO);
     }
 
-    @RequestMapping(value = "/test", method = RequestMethod.GET)
-    @Operation(summary = "测试")
-    public String test(String text1, String text2) throws ParseException, IOException {
-        float a = DataUtils.getSimilarityRatio(text1, text2);
-        return Response.success("相似度" + a);
-    }
+//    @RequestMapping(value = "/test", method = RequestMethod.GET)
+//    @Operation(summary = "测试")
+//    public String test(String text1, String text2) throws ParseException, IOException {
+//        float a = DataUtils.getSimilarityRatio(text1, text2);
+//        return Response.success("相似度" + a);
+//    }
 
     @RequestMapping(value = "/addAssTask", method = RequestMethod.POST)
     @Operation(summary = "添加分配任务")
@@ -121,232 +113,4 @@ public class TaskController {
         TaskParams taskParams = baseService.getImportPatentTaskParamsBro(file, reportId);
         return Response.success();
     }
-
-    @RequestMapping(value = "/temple", method = RequestMethod.GET)
-    @Operation(summary = "测试")
-    public String temple(Integer reportId) throws ParseException, IOException {
-        String filePath = "C:\\Users\\admin\\Desktop\\3.docx";
-        // 读取模板后保存生成word的地址
-        String outPath = "C:\\Users\\admin\\Desktop\\4.docx";
-        //根据报告Id获得报告信息
-        Report report = reportService.getById(reportId);
-        // 根据拆分人(报告的创建人)Id和报告ID获得所有特征
-        LambdaQueryWrapper<Features> allFeaturesWrapper = new LambdaQueryWrapper<>();
-        allFeaturesWrapper.eq(Features::getPartnerId, report.getPersonId())
-                .eq(Features::getReportId, report.getId());
-        List<Features> allFeatures = featureService.list(allFeaturesWrapper);
-        //查询所有的对比方案并获得Id
-        LambdaQueryWrapper<CompareScenarios> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(CompareScenarios::getReportId, reportId);
-        List<CompareScenarios> compareScenarios = compareScenariosService.list(queryWrapper);
-        List<Integer> scenarioIds = compareScenarios.stream().map(CompareScenarios::getId).collect(Collectors.toList());
-        //根据对比方案Id 从关联表里获得对比记录特征关联ID
-        LambdaQueryWrapper<AssoScenarIOS> queryRecordsByIDs = new LambdaQueryWrapper<>();
-        queryRecordsByIDs.in(AssoScenarIOS::getScenariosID, scenarioIds);
-        List<AssoScenarIOS> scenariosRecords = scenariosRecordsService.list(queryRecordsByIDs);
-        List<Integer> recordfeatureRecordIds = scenariosRecords.stream().map(AssoScenarIOS::getFeatureRecordID).collect(Collectors.toList());
-        //根据关联ID查出报告Id和特征Id
-        LambdaQueryWrapper<AssoRecordsFeature> wrapper =new LambdaQueryWrapper<>();
-        wrapper.in(AssoRecordsFeature::getId,recordfeatureRecordIds);
-        List<AssoRecordsFeature> assoRecordsFeatures =assoRecordsFeatureService.list(wrapper);
-        List<Integer> recordIds =assoRecordsFeatures.stream().map(AssoRecordsFeature::getRecordsId).collect(Collectors.toList());
-        //根据对比记录ID查询对比记录
-        LambdaQueryWrapper<CompareRecords> queryPatentByIDs = new LambdaQueryWrapper<>();
-        queryPatentByIDs.in(CompareRecords::getId, recordIds);
-        List<CompareRecords> compareRecords = compareRecordsService.list(queryPatentByIDs);
-        //根据对比记录ID获得专利号
-        List<String> PatentNos = compareRecords.stream().map(CompareRecords::getPatentNo).collect(Collectors.toList());
-        PatentVO patentVO = new PatentVO();
-        patentVO.setPatentNos(PatentNos);
-        //根据专利号查询专利详细信息
-        String resBody = outInterfaceService.getPatentDTOListForRMS(patentVO);
-        JSONObject jsonObject = JSONObject.parseObject(resBody);
-        List<JSONObject> patentDTOS = JSON.parseArray(jsonObject.get("data").toString(), JSONObject.class);
-        //存放专利信息的map集合
-        List<Map<String, Object>> patentListMaps = new ArrayList<>();
-        //专利号别名的map
-        Map<String, Object> OtherName = new HashMap<>();
-        //填充专利数据到patentListMap
-        for (int i = 0; i < patentDTOS.size(); i++) {
-            JSONObject item = patentDTOS.get(i);
-            Map<String, Object> patentListMap = new HashMap<>();
-            List<JSONObject> applicantJSONs = JSON.parseArray(item.get("applicant").toString(), JSONObject.class);
-            ;
-            StringBuilder applicants = new StringBuilder();
-            applicantJSONs.forEach(tem -> {
-                applicants.append(tem.get("name") + "\r");
-            });
-            patentListMap.put("name", item.get("name"));
-            patentListMap.put("fileName", "D" + (i + 1));
-            patentListMap.put("publicDate", item.get("publicDate"));
-            patentListMap.put("publicNo", item.get("publicNo"));
-            patentListMap.put("SSIM", "");
-            patentListMap.put("applicant", applicants);
-            patentListMap.put("patentNo", item.get("publicNo"));
-            patentListMap.put("abstractStr", item.get("abstractStr"));
-            patentListMap.put("compareFileName", "对比文件" + (i + 1));
-            patentListMap.put("applicationDate", item.get("applicationDate"));
-            patentListMap.put("abstractPath", item.get("abstractPath"));
-            patentListMaps.add(patentListMap);
-            OtherName.put(item.get("publicNo").toString(), ("D" + (i + 1)));
-        }
-
-        //存放对比方案信息的map集合
-        List<Map<String, Object>> scenariosMaps = new ArrayList<>();
-        //存放所有对比方案所有不重复的rightId
-        List<Integer> rightIds = new ArrayList<>();
-        for (int i = 0; i < compareScenarios.size(); i++) {
-            CompareScenarios item1 = compareScenarios.get(i);
-            //获得单个对比方案的
-            List<AssoScenarIOS> partScenariosRecords = scenariosRecords.stream().filter(item -> item.getScenariosID().equals(item1.getId())).collect(Collectors.toList());
-            List<Integer> featureRecordsIds = partScenariosRecords.stream().map(AssoScenarIOS::getFeatureRecordID).collect(Collectors.toList());
-            List<AssoRecordsFeature> assoRecordsFeatures1 =   assoRecordsFeatures.stream().filter(item->featureRecordsIds.contains(item.getId())).collect(Collectors.toList());
-            List<Integer> partRecordIds=assoRecordsFeatures1.stream().map(AssoRecordsFeature::getRecordsId).collect(Collectors.toList());
-            List<Integer> partFetIds =assoRecordsFeatures1.stream().map(AssoRecordsFeature::getFeatureId).collect(Collectors.toList());
-            //获得单个对比方案的权要的所有特征
-            List<Features> partFeatures = allFeatures.stream().filter(item -> partFetIds.contains(item.getId())).collect(Collectors.toList());
-            List<Integer> partFeatureIds = partFeatures.stream().map(Features::getId).collect(Collectors.toList());
-            List<CompareRecords> records = compareRecords.stream().filter(item -> partRecordIds.contains(item.getId())).collect(Collectors.toList());
-            //存放单条对比结果的map
-            Map<String, Object> temMap = new HashMap<>();
-            if (partFeatures.get(0).getRightType().equals(1)) {
-                temMap.put("rightName", "独立" + partFeatures.get(0).getRightName());
-            } else {
-                temMap.put("rightName", "附属" + partFeatures.get(0).getRightName());
-            }
-            temMap.put("rightId", item1.getRightId());
-            temMap.put("remark",item1.getContrastResult());
-            // 从关联数据里获得特征id
-            if (!rightIds.contains(item1.getRightId())) {
-                rightIds.add(item1.getRightId());
-            }
-            //存放对比方案每一个特征记录
-            List<Map<String, Object>> maps = new ArrayList<>();
-            partFeatures.forEach(tem -> {
-                Map<String, Object> map = new HashMap<>();
-                map.put("featureContent", tem.getContent());
-                AssoRecordsFeature assoRecordsFeature = assoRecordsFeatures.stream().filter(item -> item.getFeatureId().equals(tem.getId())).findFirst().orElse(new AssoRecordsFeature());
-                map.put("compareResult", assoRecordsFeature.getComResult()!=null?assoRecordsFeature.getComResult():"");
-                CompareRecords record = records.stream().filter(item -> item.getId().equals(assoRecordsFeature.getRecordsId())).findFirst().orElse(new CompareRecords());
-                map.put("compareContent", record.getContent()!=null?record.getContent():"");
-                maps.add(map);
-            });
-            //方案内容
-            temMap.put("fileDetails", maps);
-            //新颖性模块
-            //获得本方案所有的专利号
-            List<String> patentNOs = new ArrayList<>();
-            records.forEach(item -> {
-                if (!patentNOs.contains(item.getPatentNo())) {
-                    patentNOs.add(item.getPatentNo());
-                }
-            });
-            //比较所有专利号和权要所有权要的大小,如果相等则将该专利加入到新颖性列表中
-
-            List<String> noveltyFiles = new ArrayList<>();
-            patentNOs.forEach(
-                    item -> {
-                        List<Integer> temRecordIds = records.stream().filter(tm -> tm.getPatentNo().equals(item)).map(CompareRecords::getId).collect(Collectors.toList());
-                        List<Integer> temFIds = assoRecordsFeatures.stream().filter(tm -> temRecordIds.contains(tm.getRecordsId())).map(AssoRecordsFeature::getFeatureId).collect(Collectors.toList());
-                        String tmName = item;
-                        if (OtherName.containsKey(item)) {
-                            tmName = OtherName.get(item).toString();
-                        }
-                        if (temFIds.size() == partFeatures.size()) {
-                            noveltyFiles.add(tmName);
-                        }
-                    }
-            );
-
-            //创造性列表
-            List<String> creativeFiles = new ArrayList<>();
-            //当前方案所有的特征Id
-            partFeatures.forEach(
-                    item -> {
-                        String tmName = item.getSignPatentNo();
-                        if (OtherName.containsKey(tmName)) {
-                        tmName = OtherName.get(tmName).toString();
-                    }
-                        if(!creativeFiles.contains(tmName)){
-                        creativeFiles.add(tmName);}
-                    }
-            );
-            List<AssoScenarIOS> andRecords = partScenariosRecords.stream().filter(tm -> tm.getScenariosID().equals(item1.getId())).collect(Collectors.toList());
-            if (andRecords.size() != 0) {
-                creativeFiles.add("C");
-            }
-            String creative =creativeFiles.size()==0?"": StringUtils.join(creativeFiles, "+");
-            String novelty =noveltyFiles.size()==0?"": StringUtils.join(noveltyFiles, "-");
-            //新颖性
-            temMap.put("novelty", novelty);
-            //创造性
-            temMap.put("creative", creative);
-            scenariosMaps.add(temMap);
-
-        }
-        List<Map<String,Object>> allRightScenarios=new ArrayList<>();
-        List<Map<String,Object>> resultMaps =new ArrayList<>();
-        rightIds.forEach(tem -> {
-            Map<String,Object> map =new HashMap<>();
-            Map<String,Object> resultMap =new HashMap<>();
-            List<Map<String, Object>> rightScenarios = new ArrayList<>();
-            //存放新颖性信息
-            List<String> noveList=new ArrayList<>();
-            List<String> creaList=new ArrayList<>();
-                    //存放创造性信息
-            for (int t=0;t<scenariosMaps.size();t++){
-                Map<String,Object> item =scenariosMaps.get(t);
-                if (item.get("rightId").equals(tem)) {
-                    item.put("scenariosName","对比组合"+(t+1));
-                    rightScenarios.add(item);
-                  if(item.get("novelty").toString()!="") {
-                      if(!noveList.contains(item.get("novelty").toString())){
-                    noveList.add(item.get("novelty").toString());}
-                  }
-                  if(item.get("creative").toString()!=""){
-                      if(!creaList.contains(item.get("creative").toString())){
-                    creaList.add(item.get("creative").toString());}
-                  }
-                }
-
-            }
-            map.put("rightScenrios",rightScenarios);
-            map.put("rightName",rightScenarios.get(0).get("rightName"));
-            String creative =creaList.size()==0?"": StringUtils.join(creaList, "、");
-            String novelty =noveList.size()==0?"": StringUtils.join(noveList, "-");
-            resultMap.put("rightName",rightScenarios.get(0).get("rightName"));
-            resultMap.put("rightNovelty",novelty);
-            resultMap.put("rightCreative",creative);
-            allRightScenarios.add(map);
-            resultMaps.add(resultMap);
-        });
-
-
-        // 为表格的显示绑定行循环
-        LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
-        // 将bz设置为行循环绑定的数据源的key,即key是bz的value会在模板中的{{bz}}处进行解析
-        Configure configure = Configure.builder().bind("patentList", policy).bind("fileDetails", policy).bind("allResults", policy).build();
-        Map<String, Object> map = new HashMap<>();
-
-        //1.系统数据
-        String date = DateUtils.formatDate(new Date(), DateUtils.YYYY_MM_DD);
-        String[] ds = date.split("-");
-        map.put("sys", new SystemMO(ds[0], ds[1], ds[2], "", "reportName"));
-        map.put("sss", "saeqeq");
-        map.put("patentList", patentListMaps);
-        map.put("combinations", allRightScenarios);
-        map.put("allResults",resultMaps);
-        // 读取模板、数据并渲染
-        XWPFTemplate template = XWPFTemplate.compile(filePath, configure).render(map);
-//         文件是否已存在,则删除
-        File file = new File(outPath);
-        if (file.exists()) {
-            file.delete();
-        }
-//         生成word保存在指定目录
-        template.writeToFile(outPath);
-        template.close();
-
-        return Response.success();
-    }
 }

+ 0 - 2
RMS/src/main/java/cn/cslg/report/controller/TempleController.java

@@ -3,13 +3,11 @@ package cn.cslg.report.controller;
 import cn.cslg.report.common.core.base.Constants;
 
 import cn.cslg.report.entity.Template;
-import cn.cslg.report.service.business.ReviewHistoryService;
 import cn.cslg.report.service.business.TemplateService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;

+ 3 - 4
RMS/src/main/java/cn/cslg/report/entity/Report.java

@@ -175,11 +175,10 @@ public class Report extends BaseEntity<Report> {
     private String createPersonName;
 
     /**
-     * 文件ID
+     * 文件
      */
-    @Schema(description="文件Id")
-    @TableField(value = "FILE_ID")
-    private Integer fileID;
+    @TableField(exist = false)
+    private List<ReportFiles> reportFiles;
     /**
      * 场景列表
      */

+ 32 - 4
RMS/src/main/java/cn/cslg/report/entity/ReportDocument.java

@@ -22,7 +22,7 @@ public class ReportDocument extends BaseEntity<ReportDocument> {
      */
     @Schema(description = "报告ID")
     @TableField(value = "REPORT_ID")
-    private String reportId;
+    private Integer reportId;
 
     /**
      * 文件名称
@@ -34,11 +34,17 @@ public class ReportDocument extends BaseEntity<ReportDocument> {
     /**
      * 导出人
      */
-    @Schema(description = "导出人")
+    @Schema(description = "导出人Id")
     @TableField(value = "PERSON_ID")
-    private String personId;
+    private Integer personId;
 
     /**
+     * 导出人名
+     */
+    @Schema(description = "导出人")
+    @TableField(value = "PERSON_NAME")
+    private String personName;
+    /**
      * 模板名称
      */
     @Schema(description = "模板名称")
@@ -50,5 +56,27 @@ public class ReportDocument extends BaseEntity<ReportDocument> {
      */
     @Schema(description = "模板")
     @TableField(value = "TEMPLATE_ID")
-    private String templateId;
+    private Integer templateId;
+
+    @Schema(description = "文件路径")
+    @TableField(value = "FILE_PATH")
+    private String filePath;
+
+    @Schema(description = "导出时间")
+    @TableField(value = "CREATE_TIME")
+    private String createTime;
+
+    /**
+     * 每页条数
+     */
+    @Schema(description = "每页条数")
+    @TableField(exist = false)
+    private Integer size;
+
+    /**
+     * 当前页数
+     */
+    @Schema(description = "当前页数")
+    @TableField(exist = false)
+    private Integer current;
 }

+ 6 - 4
RMS/src/main/java/cn/cslg/report/entity/ReportFiles.java

@@ -9,6 +9,8 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.Date;
+
 /**
  * 文件表
  */
@@ -27,21 +29,21 @@ public class ReportFiles extends BaseEntity<ReportFiles> {
     /**
      * 文件名称
      */
-    @Schema(description = "件名称")
+    @Schema(description = "件名称")
     @TableField("FILE_NAME")
     private String fileName;
 
     /**
      * 附件上传地址
      */
-    @Schema(description = "附件名称")
+    @Schema(description = "附件上传地址")
     @TableField("ADDRESS")
     private String url;
 
     /**
      * 报告ID
      */
-    @Schema(description = "附件名称")
+    @Schema(description = "报告ID")
     @TableField("ZID")
     private Integer reportId;
 
@@ -54,7 +56,7 @@ public class ReportFiles extends BaseEntity<ReportFiles> {
      */
     @Schema(description = "上传时间")
     @TableField("UPDATE_TIME")
-    private Integer createTime;
+    private Date createTime;
 
     /**
      * 上传人

+ 23 - 2
RMS/src/main/java/cn/cslg/report/entity/Template.java

@@ -46,7 +46,28 @@ public class Template extends BaseEntity<Template> {
     /**
      * 报告类型
      */
-    @Schema(description = "报告类型")
+    @Schema(description = "报告类型 ")
     @TableField(value = "REPORT_TYPE")
-    private String reportType;
+    private Integer reportType;
+
+    /**
+     * 模板创建时间
+     */
+    @Schema(description = "模板创建时间")
+    @TableField(value = "CREATE_TIME")
+    private String createTime;
+
+    /**
+     * 每页条数
+     */
+    @Schema(description = "每页条数")
+    @TableField(exist = false)
+    private Integer size;
+
+    /**
+     * 当前页数
+     */
+    @Schema(description = "当前页数")
+    @TableField(exist = false)
+    private Integer current;
 }

+ 5 - 9
RMS/src/main/java/cn/cslg/report/entity/asso/AssoPatentFile.java

@@ -14,16 +14,12 @@ import lombok.experimental.Accessors;
 @Data
 @Accessors(chain = true)
 @EqualsAndHashCode(callSuper = true)
-@TableName(value = "ASSO_PATENET_FILE")
-public class AssoPatentFile extends BaseEntity<AssoPatentFile> {
-    @Schema(description = "实体表ID")
-    @TableField(value = "ASSO_ID")
-    private Integer assoID;
+@TableName(value = "ASSO_INVALID_RECORD_FILE")
+public class AssoInvalidRecordFile extends BaseEntity<AssoInvalidRecordFile> {
 
-
-    @Schema(description = "实体表类型")
-    @TableField(value = "TYPE")
-    private Integer type;
+    @Schema(description = "无效记录Id")
+    @TableField(value = "INVALID_RECORD_ID")
+    private Integer invalidId;
 
     @Schema(description = "文件ID")
     @TableField(value = "FILE_ID")

+ 28 - 0
RMS/src/main/java/cn/cslg/report/entity/asso/AssoLitigationHisFile.java

@@ -0,0 +1,28 @@
+package cn.cslg.report.entity.asso;
+
+import cn.cslg.report.common.model.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 对比方案与对比记录关联表
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "ASSO_LITIGATION_HIS_FILE")
+public class AssoLitigationHisFile extends BaseEntity<AssoLitigationHisFile> {
+
+    @Schema(description = "无效记录Id")
+    @TableField(value = "LITIGATION_HISTORY_ID")
+    private Integer LitiHisId;
+    
+    @Schema(description = "文件ID")
+    @TableField(value = "FILE_ID")
+    private Integer fileId;
+
+}

+ 32 - 0
RMS/src/main/java/cn/cslg/report/entity/asso/AssoReportFile.java

@@ -0,0 +1,32 @@
+package cn.cslg.report.entity.asso;
+
+import cn.cslg.report.common.model.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 对比方案与对比记录关联表
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "ASSO_REPORT_FILE")
+public class AssoReportFile extends BaseEntity<AssoReportFile> {
+
+    @Schema(description = "报告ID")
+    @TableField(value = "REPORT_ID")
+    private Integer reportId;
+
+    @Schema(description = "文件类型")
+    @TableField(value = "FILE_TYPE")
+    private Integer fileType;
+
+    @Schema(description = "文件ID")
+    @TableField(value = "FILE_ID")
+    private Integer fileId;
+
+}

+ 28 - 0
RMS/src/main/java/cn/cslg/report/entity/asso/AssoReviewHisFile.java

@@ -0,0 +1,28 @@
+package cn.cslg.report.entity.asso;
+
+import cn.cslg.report.common.model.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 对比方案与对比记录关联表
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "ASSO_REVIEW_HIS_FILE")
+public class AssoReviewHisFile extends BaseEntity<AssoReviewHisFile> {
+
+    @Schema(description = "审查历史Id")
+    @TableField(value = "REVIEW_HISTORY_ID")
+    private Integer reviewHistoryId;
+
+    @Schema(description = "文件ID")
+    @TableField(value = "FILE_ID")
+    private Integer fileId;
+
+}

+ 12 - 0
RMS/src/main/java/cn/cslg/report/mapper/AssoInvalidRecordFileMapper.java

@@ -0,0 +1,12 @@
+package cn.cslg.report.mapper;
+
+
+import cn.cslg.report.entity.asso.AssoInvalidRecordFile;
+import cn.cslg.report.entity.asso.AssoReportFile;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AssoInvalidRecordFileMapper extends BaseMapper<AssoInvalidRecordFile> {
+
+}

+ 11 - 0
RMS/src/main/java/cn/cslg/report/mapper/AssoLitigationHisFileMapper.java

@@ -0,0 +1,11 @@
+package cn.cslg.report.mapper;
+
+
+import cn.cslg.report.entity.asso.AssoLitigationHisFile;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AssoLitigationHisFileMapper extends BaseMapper<AssoLitigationHisFile> {
+
+}

+ 2 - 2
RMS/src/main/java/cn/cslg/report/mapper/AssoPatentFileMapper.java

@@ -1,11 +1,11 @@
 package cn.cslg.report.mapper;
 
 
-import cn.cslg.report.entity.asso.AssoPatentFile;
+import cn.cslg.report.entity.asso.AssoReportFile;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 
 @Mapper
-public interface AssoPatentFileMapper extends BaseMapper<AssoPatentFile> {
+public interface AssoReportFileMapper extends BaseMapper<AssoReportFile> {
 
 }

+ 11 - 0
RMS/src/main/java/cn/cslg/report/mapper/AssoReviewHisFileMapper.java

@@ -0,0 +1,11 @@
+package cn.cslg.report.mapper;
+
+
+import cn.cslg.report.entity.asso.AssoReviewHisFile;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AssoReviewHisFileMapper extends BaseMapper<AssoReviewHisFile> {
+
+}

+ 1 - 0
RMS/src/main/java/cn/cslg/report/service/BaseService.java

@@ -281,6 +281,7 @@ public class BaseService {
                     taskParams.setOldName(file.getOriginalFilename());
                     taskParams.setTotal(total);
                     taskParams.setIndex((int) rowIndex);
+                    taskParams.setTaskId(importTask.getId());
                     try {
                     outInterfaceService.importPatents(taskParams);
                         WebSocketServer.sendInfo(Response.websocket(new TaskWebSocketDTO()

+ 3 - 1
RMS/src/main/java/cn/cslg/report/service/OutInterfaceService.java

@@ -394,7 +394,9 @@ public class OutInterfaceService {
 
     public String importPatents(TaskParams taskParams) throws IOException {
         OkHttpClient httpClient = new OkHttpClient.Builder()
-                .pingInterval(40, TimeUnit.SECONDS) // 设置 PING 帧发送间隔
+                .pingInterval(400, TimeUnit.SECONDS) // 设置 PING 帧发送间隔
+                .connectTimeout(30, TimeUnit.SECONDS)//设置连接超时时间
+                .readTimeout(30, TimeUnit.SECONDS)//设置读取超时时间
                 .build();
             String param = new Gson().toJson(taskParams);
         RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);

+ 0 - 2
RMS/src/main/java/cn/cslg/report/service/business/AssoComapareFielService.java

@@ -1,10 +1,8 @@
 package cn.cslg.report.service.business;
 
 import cn.cslg.report.entity.AssoComapareFiel;
-import cn.cslg.report.entity.CompareFiles;
 import cn.cslg.report.mapper.AssoComapareFielMapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 

+ 34 - 0
RMS/src/main/java/cn/cslg/report/service/business/AssoInvalidRecordFileService.java

@@ -0,0 +1,34 @@
+package cn.cslg.report.service.business;
+
+import cn.cslg.report.common.utils.Response;
+import cn.cslg.report.entity.asso.AssoInvalidRecordFile;
+import cn.cslg.report.entity.asso.AssoReportFile;
+import cn.cslg.report.mapper.AssoInvalidRecordFileMapper;
+import cn.cslg.report.mapper.AssoReportFileMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+@Slf4j
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class AssoInvalidRecordFileService extends ServiceImpl<AssoInvalidRecordFileMapper, AssoInvalidRecordFile> {
+
+    //添加
+    public String addAsso(Integer id, List<Integer> fileIds) {
+        List<AssoInvalidRecordFile> tems = new ArrayList<>();
+        fileIds.forEach(item -> {
+            AssoInvalidRecordFile tem = new AssoInvalidRecordFile();
+            tem.setInvalidId(id);
+            tem.setFileId(item);
+            tems.add(tem);
+        });
+        this.saveBatch(tems);
+        return Response.success();
+    }
+}

+ 35 - 0
RMS/src/main/java/cn/cslg/report/service/business/AssoLitigationHisFileService.java

@@ -0,0 +1,35 @@
+package cn.cslg.report.service.business;
+
+import cn.cslg.report.common.utils.Response;
+import cn.cslg.report.entity.asso.AssoInvalidRecordFile;
+import cn.cslg.report.entity.asso.AssoLitigationHisFile;
+import cn.cslg.report.entity.asso.AssoReportFile;
+import cn.cslg.report.mapper.AssoLitigationHisFileMapper;
+import cn.cslg.report.mapper.AssoReportFileMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+@Slf4j
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class AssoLitigationHisFileService extends ServiceImpl<AssoLitigationHisFileMapper, AssoLitigationHisFile> {
+
+    //添加
+    public String addAsso(Integer id, List<Integer> fileIds) {
+        List<AssoLitigationHisFile> tems = new ArrayList<>();
+        fileIds.forEach(item -> {
+            AssoLitigationHisFile tem = new AssoLitigationHisFile();
+            tem.setLitiHisId(id);
+            tem.setFileId(item);
+            tems.add(tem);
+        });
+        this.saveBatch(tems);
+        return Response.success();
+    }
+}

+ 0 - 17
RMS/src/main/java/cn/cslg/report/service/business/AssoPatentFileService.java

@@ -1,17 +0,0 @@
-package cn.cslg.report.service.business;
-
-import cn.cslg.report.entity.asso.AssoPatentFile;
-import cn.cslg.report.mapper.AssoPatentFileMapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.stereotype.Service;
-
-@Service
-@Slf4j
-@RequiredArgsConstructor(onConstructor_ = {@Lazy})
-public class AssoPatentFileService extends ServiceImpl<AssoPatentFileMapper, AssoPatentFile> {
-
-
-}

+ 45 - 0
RMS/src/main/java/cn/cslg/report/service/business/AssoReportFileService.java

@@ -0,0 +1,45 @@
+package cn.cslg.report.service.business;
+
+import cn.cslg.report.common.utils.Response;
+import cn.cslg.report.entity.asso.AssoReportFile;
+
+import cn.cslg.report.mapper.AssoReportFileMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+@Slf4j
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class AssoReportFileService extends ServiceImpl<AssoReportFileMapper, AssoReportFile> {
+
+
+    //添加
+    public String addAsso(Integer reportId, List<Integer> fileIds) {
+        List<AssoReportFile> assoReportFiles = new ArrayList<>();
+        fileIds.forEach(item -> {
+            AssoReportFile assoReportFile = new AssoReportFile();
+            assoReportFile.setReportId(reportId);
+            assoReportFile.setFileId(item);
+            assoReportFile.setFileType(0);
+            assoReportFiles.add(assoReportFile);
+        });
+           this.saveBatch(assoReportFiles);
+        return Response.success();
+    }
+
+    //根据报告Id查询文件Id
+    public List<AssoReportFile> queryFileByReportId(List<Integer> reportIds){
+        LambdaQueryWrapper<AssoReportFile> wrapper =new LambdaQueryWrapper<>();
+        wrapper.in(AssoReportFile::getReportId,reportIds);
+        List<AssoReportFile> assoReportFiles =this.list(wrapper);
+        return assoReportFiles;
+    }
+}

+ 35 - 0
RMS/src/main/java/cn/cslg/report/service/business/AssoReviewHisFileService.java

@@ -0,0 +1,35 @@
+package cn.cslg.report.service.business;
+
+import cn.cslg.report.common.utils.Response;
+import cn.cslg.report.entity.asso.AssoLitigationHisFile;
+import cn.cslg.report.entity.asso.AssoReportFile;
+import cn.cslg.report.entity.asso.AssoReviewHisFile;
+import cn.cslg.report.mapper.AssoReportFileMapper;
+import cn.cslg.report.mapper.AssoReviewHisFileMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+@Slf4j
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class AssoReviewHisFileService extends ServiceImpl<AssoReviewHisFileMapper, AssoReviewHisFile> {
+
+    //添加
+    public String addAsso(Integer id, List<Integer> fileIds) {
+        List<AssoReviewHisFile> tems = new ArrayList<>();
+        fileIds.forEach(item -> {
+            AssoReviewHisFile tem = new AssoReviewHisFile();
+            tem.setReviewHistoryId(id);
+            tem.setFileId(item);
+            tems.add(tem);
+        });
+        this.saveBatch(tems);
+        return Response.success();
+    }
+}

+ 9 - 2
RMS/src/main/java/cn/cslg/report/service/business/InvalidRecordService.java

@@ -14,6 +14,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.util.List;
@@ -23,7 +24,8 @@ import java.util.List;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class InvalidRecordService extends ServiceImpl<InvalidRecordMapper, InvalidRecord> {
     public final InvalidRecordMapper invalidRecordMapper;
-
+    private final ReportFileService reportFileService;
+    private final  AssoInvalidRecordFileService assoInvalidRecordFileService;
     public String deleteInvalidRecord(int id) throws IOException {
         this.removeById(id);
         return Response.success();
@@ -34,8 +36,13 @@ public class InvalidRecordService extends ServiceImpl<InvalidRecordMapper, Inval
         return Response.success();
     }
 
-    public String addInvalidRecord(InvalidRecord invalidRecord) throws IOException {
+    public String addInvalidRecord(InvalidRecord invalidRecord,List<MultipartFile> files) throws IOException {
         invalidRecord.insert();
+        if (files==null&&files.size() != 0) {
+            //将文档上传并返回文件入库的Id
+            List<Integer> fileIds = reportFileService.uploadFiles(files);
+            assoInvalidRecordFileService.addAsso(invalidRecord.getId(),fileIds);
+        }
         return Response.success();
     }
 

+ 13 - 6
RMS/src/main/java/cn/cslg/report/service/business/LitigationHistoryService.java

@@ -15,6 +15,8 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
 import java.io.IOException;
 import java.util.List;
 
@@ -22,24 +24,29 @@ import java.util.List;
 @Slf4j
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class LitigationHistoryService extends ServiceImpl<LitigationHistoryMapper, LitigationHistory> {
-    public final LitigationHistoryMapper litigationHistoryMapper;
+    private final ReportFileService reportFileService;
+    private final AssoLitigationHisFileService  assoLitigationHisFileService;
     public String deleteLitigationHistory(int id){
         this.removeById(id);
        return Response.success();
 
     }
-    public String addLitigationHistory(LitigationHistory litigationHistory){
+
+    public String addLitigationHistory(LitigationHistory litigationHistory,List<MultipartFile> files){
         litigationHistory.insert();
+        if (files==null&&files.size() != 0) {
+            //将文档上传并返回文件入库的Id
+            List<Integer> fileIds = reportFileService.uploadFiles(files);
+            assoLitigationHisFileService.addAsso(litigationHistory.getId(),fileIds);
+        }
         return Response.success();
-
-
-
     }
+
     public String updateLitigationHistory(LitigationHistory litigationHistory){
         litigationHistory.updateById();
         return Response.success();
-
     }
+
     public String queryLitigationHistory(LitigationHistory litigationHistory){
         LambdaQueryWrapper<LitigationHistory> wrapper =new LambdaQueryWrapper<>();
                wrapper.eq(LitigationHistory::getPatentNo,litigationHistory.getPatentNo());

+ 289 - 4
RMS/src/main/java/cn/cslg/report/service/business/ReportDocumentService.java

@@ -1,27 +1,312 @@
 package cn.cslg.report.service.business;
 
-import cn.cslg.report.common.utils.Response;
-import cn.cslg.report.entity.ReportDocument;
-import cn.cslg.report.entity.Template;
+import cn.cslg.report.common.model.SystemMO;
+import cn.cslg.report.common.model.vo.PatentVO;
+import cn.cslg.report.common.model.vo.PersonnelVO;
+import cn.cslg.report.common.utils.*;
+import cn.cslg.report.common.utils.SecurityUtils.LoginUtils;
+import cn.cslg.report.entity.*;
+import cn.cslg.report.entity.asso.AssoRecordsFeature;
 import cn.cslg.report.mapper.ReportDocumentMapper;
 import cn.cslg.report.mapper.TemplateMapper;
+import cn.cslg.report.service.OutInterfaceService;
+import cn.hutool.core.util.IdUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
+import java.io.File;
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
+
 @Service
 @Slf4j
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class ReportDocumentService extends ServiceImpl<ReportDocumentMapper, ReportDocument> {
 
+    private final OutInterfaceService outInterfaceService;
+    private final CompareScenariosService compareScenariosService;
+    private final CompareScenariosAndRecordsService scenariosRecordsService;
+    private final CompareRecordsService compareRecordsService;
+    private final AssoRecordsFeatureService assoRecordsFeatureService;
+    private final FeatureService featureService;
+    private final ReportService reportService;
+    private final TemplateService templateService;
+    private final FileUtils fileUtils;
+    private final LoginUtils loginUtils;
+    private final CacheUtils cacheUtils;
+
      public String reportDocument(ReportDocument reportDocument) {
 
        return  Response.success();
 
      }
 
+     //根据报告Id获得报告的导出记录
+    public String getExportList(ReportDocument reportDocument){
+         LambdaQueryWrapper<ReportDocument> wrapper =new LambdaQueryWrapper<>();
+         wrapper.eq(ReportDocument::getReportId,reportDocument.getReportId());
+        IPage<ReportDocument> pages =this.page(new Page<>(reportDocument.getCurrent(),reportDocument.getSize()),wrapper);
+         return  Response.success(pages);
+    }
+
+    public String deleteExport(Integer id) {
+         this.removeById(id);
+         return Response.success();
+    }
+    //导出报告
+    public String exportReport(Integer reportId,Integer templeId) throws IOException {
+          //根据模板ID获得模板
+        Template reportTemplate=  templateService.getById(templeId);
+        //获得模板路径
+        String filePath =fileUtils.getPath(reportTemplate.getTemplatePath());
+        // 读取模板后保存生成word的地址
+        String fileName = IdUtil.simpleUUID() + ".docx";
+        String directoryName = fileUtils.createDirectory();
+        String outPath = fileUtils.getSavePath(directoryName)+fileName;
+        //根据报告Id获得报告信息
+        Report report = reportService.getById(reportId);
+        // 根据拆分人(报告的创建人)Id和报告ID获得所有特征
+        LambdaQueryWrapper<Features> allFeaturesWrapper = new LambdaQueryWrapper<>();
+        allFeaturesWrapper.eq(Features::getPartnerId, report.getPersonId())
+                .eq(Features::getReportId, report.getId());
+        List<Features> allFeatures = featureService.list(allFeaturesWrapper);
+        //查询所有的对比方案并获得Id
+        LambdaQueryWrapper<CompareScenarios> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(CompareScenarios::getReportId, reportId);
+        List<CompareScenarios> compareScenarios = compareScenariosService.list(queryWrapper);
+        List<Integer> scenarioIds = compareScenarios.stream().map(CompareScenarios::getId).collect(Collectors.toList());
+        //根据对比方案Id 从关联表里获得对比记录特征关联ID
+        LambdaQueryWrapper<AssoScenarIOS> queryRecordsByIDs = new LambdaQueryWrapper<>();
+        queryRecordsByIDs.in(AssoScenarIOS::getScenariosID, scenarioIds);
+        List<AssoScenarIOS> scenariosRecords = scenariosRecordsService.list(queryRecordsByIDs);
+        List<Integer> recordfeatureRecordIds = scenariosRecords.stream().map(AssoScenarIOS::getFeatureRecordID).collect(Collectors.toList());
+        //根据关联ID查出报告Id和特征Id
+        LambdaQueryWrapper<AssoRecordsFeature> wrapper =new LambdaQueryWrapper<>();
+        wrapper.in(AssoRecordsFeature::getId,recordfeatureRecordIds);
+        List<AssoRecordsFeature> assoRecordsFeatures =assoRecordsFeatureService.list(wrapper);
+        List<Integer> recordIds =assoRecordsFeatures.stream().map(AssoRecordsFeature::getRecordsId).collect(Collectors.toList());
+        //根据对比记录ID查询对比记录
+        LambdaQueryWrapper<CompareRecords> queryPatentByIDs = new LambdaQueryWrapper<>();
+        queryPatentByIDs.in(CompareRecords::getId, recordIds);
+        List<CompareRecords> compareRecords = compareRecordsService.list(queryPatentByIDs);
+        //根据对比记录ID获得专利号
+        List<String> PatentNos = compareRecords.stream().map(CompareRecords::getPatentNo).collect(Collectors.toList());
+        PatentVO patentVO = new PatentVO();
+        patentVO.setPatentNos(PatentNos);
+        //根据专利号查询专利详细信息
+        String resBody = outInterfaceService.getPatentDTOListForRMS(patentVO);
+        JSONObject jsonObject = JSONObject.parseObject(resBody);
+        List<JSONObject> patentDTOS = JSON.parseArray(jsonObject.get("data").toString(), JSONObject.class);
+        //存放专利信息的map集合
+        List<Map<String, Object>> patentListMaps = new ArrayList<>();
+        //专利号别名的map
+        Map<String, Object> OtherName = new HashMap<>();
+        //填充专利数据到patentListMap
+        for (int i = 0; i < patentDTOS.size(); i++) {
+            JSONObject item = patentDTOS.get(i);
+            Map<String, Object> patentListMap = new HashMap<>();
+            List<JSONObject> applicantJSONs = JSON.parseArray(item.get("applicant").toString(), JSONObject.class);
+            ;
+            StringBuilder applicants = new StringBuilder();
+            applicantJSONs.forEach(tem -> {
+                applicants.append(tem.get("name") + "\r");
+            });
+            patentListMap.put("name", item.get("name"));
+            patentListMap.put("fileName", "D" + (i + 1));
+            patentListMap.put("publicDate", item.get("publicDate"));
+            patentListMap.put("publicNo", item.get("publicNo"));
+            patentListMap.put("SSIM", "");
+            patentListMap.put("applicant", applicants);
+            patentListMap.put("patentNo", item.get("publicNo"));
+            patentListMap.put("abstractStr", item.get("abstractStr"));
+            patentListMap.put("compareFileName", "对比文件" + (i + 1));
+            patentListMap.put("applicationDate", item.get("applicationDate"));
+            patentListMap.put("abstractPath", item.get("abstractPath"));
+            patentListMaps.add(patentListMap);
+            OtherName.put(item.get("publicNo").toString(), ("D" + (i + 1)));
+        }
+
+        //存放对比方案信息的map集合
+        List<Map<String, Object>> scenariosMaps = new ArrayList<>();
+        //存放所有对比方案所有不重复的rightId
+        List<Integer> rightIds = new ArrayList<>();
+        for (int i = 0; i < compareScenarios.size(); i++) {
+            CompareScenarios item1 = compareScenarios.get(i);
+            //获得单个对比方案的
+            List<AssoScenarIOS> partScenariosRecords = scenariosRecords.stream().filter(item -> item.getScenariosID().equals(item1.getId())).collect(Collectors.toList());
+            List<Integer> featureRecordsIds = partScenariosRecords.stream().map(AssoScenarIOS::getFeatureRecordID).collect(Collectors.toList());
+            List<AssoRecordsFeature> assoRecordsFeatures1 =   assoRecordsFeatures.stream().filter(item->featureRecordsIds.contains(item.getId())).collect(Collectors.toList());
+            List<Integer> partRecordIds=assoRecordsFeatures1.stream().map(AssoRecordsFeature::getRecordsId).collect(Collectors.toList());
+            List<Integer> partFetIds =assoRecordsFeatures1.stream().map(AssoRecordsFeature::getFeatureId).collect(Collectors.toList());
+            //获得单个对比方案的权要的所有特征
+            List<Features> partFeatures = allFeatures.stream().filter(item -> partFetIds.contains(item.getId())).collect(Collectors.toList());
+            List<CompareRecords> records = compareRecords.stream().filter(item -> partRecordIds.contains(item.getId())).collect(Collectors.toList());
+            //存放单条对比结果的map
+            Map<String, Object> temMap = new HashMap<>();
+            if (partFeatures.get(0).getRightType().equals(1)) {
+                temMap.put("rightName", "独立" + partFeatures.get(0).getRightName());
+            } else {
+                temMap.put("rightName", "附属" + partFeatures.get(0).getRightName());
+            }
+            temMap.put("rightId", item1.getRightId());
+            temMap.put("remark",item1.getContrastResult());
+            // 从关联数据里获得特征id
+            if (!rightIds.contains(item1.getRightId())) {
+                rightIds.add(item1.getRightId());
+            }
+            //存放对比方案每一个特征记录
+            List<Map<String, Object>> maps = new ArrayList<>();
+            partFeatures.forEach(tem -> {
+                Map<String, Object> map = new HashMap<>();
+                map.put("featureContent", tem.getContent());
+                AssoRecordsFeature assoRecordsFeature = assoRecordsFeatures.stream().filter(item -> item.getFeatureId().equals(tem.getId())).findFirst().orElse(new AssoRecordsFeature());
+                map.put("compareResult", assoRecordsFeature.getComResult()!=null?assoRecordsFeature.getComResult():"");
+                CompareRecords record = records.stream().filter(item -> item.getId().equals(assoRecordsFeature.getRecordsId())).findFirst().orElse(new CompareRecords());
+                map.put("compareContent", record.getContent()!=null?record.getContent():"");
+                maps.add(map);
+            });
+            //方案内容
+            temMap.put("fileDetails", maps);
+            //新颖性模块
+            //获得本方案所有的专利号
+            List<String> patentNOs = new ArrayList<>();
+            records.forEach(item -> {
+                if (!patentNOs.contains(item.getPatentNo())) {
+                    patentNOs.add(item.getPatentNo());
+                }
+            });
+            //比较所有专利号和权要所有权要的大小,如果相等则将该专利加入到新颖性列表中
+
+            List<String> noveltyFiles = new ArrayList<>();
+            patentNOs.forEach(
+                    item -> {
+                        List<Integer> temRecordIds = records.stream().filter(tm -> tm.getPatentNo().equals(item)).map(CompareRecords::getId).collect(Collectors.toList());
+                        List<Integer> temFIds = assoRecordsFeatures.stream().filter(tm -> temRecordIds.contains(tm.getRecordsId())).map(AssoRecordsFeature::getFeatureId).collect(Collectors.toList());
+                        String tmName = item;
+                        if (OtherName.containsKey(item)) {
+                            tmName = OtherName.get(item).toString();
+                        }
+                        if (temFIds.size() == partFeatures.size()) {
+                            noveltyFiles.add(tmName);
+                        }
+                    }
+            );
+
+            //创造性列表
+            List<String> creativeFiles = new ArrayList<>();
+            //当前方案所有的特征Id
+            partFeatures.forEach(
+                    item -> {
+                        String tmName = item.getSignPatentNo();
+                        if (OtherName.containsKey(tmName)) {
+                            tmName = OtherName.get(tmName).toString();
+                        }
+                        if(!creativeFiles.contains(tmName)){
+                            creativeFiles.add(tmName);}
+                    }
+            );
+            List<AssoScenarIOS> andRecords = partScenariosRecords.stream().filter(tm -> tm.getScenariosID().equals(item1.getId())).collect(Collectors.toList());
+            if (andRecords.size() != 0) {
+                creativeFiles.add("C");
+            }
+            String creative =creativeFiles.size()==0?"": StringUtils.join(creativeFiles, "+");
+            String novelty =noveltyFiles.size()==0?"": StringUtils.join(noveltyFiles, "-");
+            //新颖性
+            temMap.put("novelty", novelty);
+            //创造性
+            temMap.put("creative", creative);
+            scenariosMaps.add(temMap);
+
+        }
+        List<Map<String,Object>> allRightScenarios=new ArrayList<>();
+        List<Map<String,Object>> resultMaps =new ArrayList<>();
+        rightIds.forEach(tem -> {
+            Map<String,Object> map =new HashMap<>();
+            Map<String,Object> resultMap =new HashMap<>();
+            List<Map<String, Object>> rightScenarios = new ArrayList<>();
+            //存放新颖性信息
+            List<String> noveList=new ArrayList<>();
+            List<String> creaList=new ArrayList<>();
+            //存放创造性信息
+            for (int t=0;t<scenariosMaps.size();t++){
+                Map<String,Object> item =scenariosMaps.get(t);
+                if (item.get("rightId").equals(tem)) {
+                    item.put("scenariosName","对比组合"+(t+1));
+                    rightScenarios.add(item);
+                    if(item.get("novelty").toString()!="") {
+                        if(!noveList.contains(item.get("novelty").toString())){
+                            noveList.add(item.get("novelty").toString());}
+                    }
+                    if(item.get("creative").toString()!=""){
+                        if(!creaList.contains(item.get("creative").toString())){
+                            creaList.add(item.get("creative").toString());}
+                    }
+                }
+
+            }
+            map.put("rightScenrios",rightScenarios);
+            map.put("rightName",rightScenarios.get(0).get("rightName"));
+            String creative =creaList.size()==0?"": StringUtils.join(creaList, "、");
+            String novelty =noveList.size()==0?"": StringUtils.join(noveList, "-");
+            resultMap.put("rightName",rightScenarios.get(0).get("rightName"));
+            resultMap.put("rightNovelty",novelty);
+            resultMap.put("rightCreative",creative);
+            allRightScenarios.add(map);
+            resultMaps.add(resultMap);
+        });
+
+
+        // 为表格的显示绑定行循环
+        LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
+        // 将bz设置为行循环绑定的数据源的key,即key是bz的value会在模板中的{{bz}}处进行解析
+        Configure configure = Configure.builder().bind("patentList", policy).bind("fileDetails", policy).bind("allResults", policy).build();
+        Map<String, Object> map = new HashMap<>();
+
+        //1.系统数据
+        String date = DateUtils.formatDate(new Date(), DateUtils.YYYY_MM_DD);
+        String[] ds = date.split("-");
+        map.put("sys", new SystemMO(ds[0], ds[1], ds[2], "", "reportName"));
+        map.put("sss", "saeqeq");
+        map.put("patentList", patentListMaps);
+        map.put("combinations", allRightScenarios);
+        map.put("allResults",resultMaps);
+        // 读取模板、数据并渲染
+        XWPFTemplate template = XWPFTemplate.compile(filePath, configure).render(map);
+//         文件是否已存在,则删除
+        File file = new File(outPath);
+        if (file.exists()) {
+            file.delete();
+        }
+//         生成word保存在指定目录
+        template.writeToFile(outPath);
+        template.close();
+        //导出成功后,导出报告记录入库
+        String url = fileUtils.getDirectory2(directoryName) + fileName;
+        PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
+        ReportDocument reportDocument =new ReportDocument();
+        reportDocument.setReportId(reportId);
+        reportDocument.setFileName(fileName);
+        reportDocument.setFilePath(url);
+        reportDocument.setPersonId(personnelVO.getId());
+        reportDocument.setTemplateId(reportTemplate.getId());
+        reportDocument.setTemplateName(reportTemplate.getTemplateName());
+        reportDocument.setPersonName(personnelVO.getName());
+        reportDocument.insert();
+        return Response.success();
+    }
+
+    }
+
 
-}

+ 26 - 19
RMS/src/main/java/cn/cslg/report/service/business/ReportFileService.java

@@ -16,7 +16,9 @@ import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 @Slf4j
@@ -24,25 +26,27 @@ import java.util.List;
 public class ReportFileService extends ServiceImpl<ReportFileMapper, ReportFiles> {
     private  final FileUtils fileUtils;
     private final LoginUtils loginUtils;
-    public Integer uploadFiles(MultipartFile file){
-//        ReportFiles temp = this.getProjectFileByName(projectFile.getName(), projectFile.getProjectId(), projectFile.getType(), FileUtil.extName(file.getOriginalFilename()));
-//        if (temp != null) {
-//            return -1;
-//        }
-        UploadFileDTO fileDTO = fileUtils.uploadFile(file);
-        ReportFiles reportFiles =new ReportFiles();
-        reportFiles.setSize((int) file.getSize());
-        reportFiles.setUrl(fileDTO.getPath());
-        reportFiles.setFileName(fileDTO.getFileName());
-        reportFiles.setCreateTime(DateUtils.getDateTime());
-        reportFiles.setCreateBy(loginUtils.getId());
-        reportFiles.setSuffix(fileDTO.getExtName());
-        reportFiles.insert();
-        return reportFiles.getId();
+    public List<Integer> uploadFiles(List<MultipartFile> file){
+        List<ReportFiles> reportFiles =new ArrayList<>();
+        file.forEach(item->{
+            UploadFileDTO fileDTO = fileUtils.uploadFile(item);
+            ReportFiles reportFile =new ReportFiles();
+            reportFile.setSize((int) item.getSize());
+            reportFile.setUrl(fileDTO.getPath());
+            reportFile.setFileName(fileDTO.getFileName());
+            reportFile.setName(fileDTO.getName());
+            reportFile.setCreateBy(loginUtils.getId());
+            reportFile.setSuffix(fileDTO.getExtName());
+            reportFiles.add(reportFile);
+        });
+       this.saveBatch(reportFiles);
+       List<Integer> reportIds= reportFiles.stream().map(ReportFiles::getId).collect(Collectors.toList());
+        return reportIds;
 
 
     }
 
+    //删除文件
     public void deleteFiles(List<Integer> fileIds)
     {
         this.removeByIds(fileIds);
@@ -57,10 +61,13 @@ public class ReportFileService extends ServiceImpl<ReportFileMapper, ReportFiles
         queryWrapper.eq(ReportFiles::getSuffix, suffix);
         return this.getOne(queryWrapper);
     }
-    public void getFiles(Integer FileId)
-    {
-    ReportFiles file =  this.getById(FileId);
-      String fileName =file.getFileName();
+
+    //根据文件Id获得文件
+    public List<ReportFiles> getFiles(List<Integer> FileIds)
+    {LambdaQueryWrapper<ReportFiles> queryWrapper =new LambdaQueryWrapper<>();
+      queryWrapper.in(ReportFiles::getId,FileIds);
+   List<ReportFiles> file =  this.list(queryWrapper);
+   return file;
     }
 
 }

+ 29 - 3
RMS/src/main/java/cn/cslg/report/service/business/ReportService.java

@@ -8,6 +8,8 @@ import cn.cslg.report.common.utils.*;
 import cn.cslg.report.common.utils.SecurityUtils.LoginUtils;
 import cn.cslg.report.entity.Report;
 import cn.cslg.report.entity.ReportField;
+import cn.cslg.report.entity.ReportFiles;
+import cn.cslg.report.entity.asso.AssoReportFile;
 import cn.cslg.report.mapper.ReportMapper;
 import cn.cslg.report.service.OutInterfaceService;
 import com.alibaba.fastjson.JSONArray;
@@ -22,9 +24,11 @@ import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -39,13 +43,15 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
     private final ReportFieldService reportFieldService;
     private final CacheUtils cacheUtils;
     private final LoginUtils loginUtils;
+    private final AssoReportFileService assoReportFileService;
+    private final ReportFileService reportFileService;
 
     /**
      * @param report 报告类
      * @author 沈永艺
      */
     @Transactional(rollbackFor = Exception.class)
-    public Integer addReport(Report report) {
+    public Integer addReport(Report report ,List<MultipartFile> file) {
         try {
             report.getScenarioList();
             report.setScenarioId(StringUtils.join(report.getScenarioList(), ","));
@@ -68,6 +74,13 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
             report.setCreatePersonId(personnelVO.getId());
             report.setCreatePersonName(personnelVO.getName());
             boolean addFlag = this.save(report);
+
+            if (file!=null&&file.size() != 0) {
+                //将文档上传并返回文件入库的Id
+                List<Integer> fileIds = reportFileService.uploadFiles(file);
+                assoReportFileService.addAsso(report.getId(), fileIds);
+
+            }
             if (addFlag) {
               reportFieldService.addDefaultField(report.getId(),report.getType());
                 return report.getId();
@@ -111,9 +124,17 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
     }
 
     public List<Report> reportData(List<Report> reports) throws IOException {
+        List<Integer> reportIds =reports.stream().map(Report::getId).collect(Collectors.toList());
+        List<AssoReportFile> assoReportFiles=assoReportFileService.queryFileByReportId(reportIds);
+        List<ReportFiles> reportFilesList =new ArrayList<>();
+        if(assoReportFiles.size()!=0){
+        List<Integer> fileIds =assoReportFiles.stream().map(AssoReportFile::getFileId).collect(Collectors.toList());
+         reportFilesList =reportFileService.getFiles(fileIds);}
+
         String res = outInterfaceService.getDictsFromPAS();
         JSONObject jsonObject = JSONObject.parseObject(res);
         List<SystemDictVO> list = JSONArray.parseArray(jsonObject.getString("data"),SystemDictVO.class);
+        List<ReportFiles> temList=reportFilesList;
         reports.forEach(
                 item -> {
                     if (StringUtils.isNotEmpty(item.getScenarioId())) {
@@ -121,7 +142,13 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
                         item.setScenarioNames(list.stream().filter(systemDict -> systemDict.getType().equals(Constants.ENTERPRISE_APPLICATION_SCENARIO) && item.getScenarioList().contains(systemDict.getValue())).map(SystemDictVO::getLabel).collect(Collectors.toList()));
                         item.setScenarioId(null);
                     }
-
+                  List<AssoReportFile> partReportFiles =assoReportFiles.stream().filter(tem->tem.getReportId().equals(item.getId())).collect(Collectors.toList());
+                    if(partReportFiles.size()==0){ item.setReportFiles(null);}
+                    else {
+                        List<Integer> partFileIds = partReportFiles.stream().map(AssoReportFile::getFileId).collect(Collectors.toList());
+                        List<ReportFiles> partFiles = temList.stream().filter(tem -> partFileIds.contains(tem.getId())).collect(Collectors.toList());
+                        item.setReportFiles(partFiles);
+                    }
                 });
 
         return reports;
@@ -136,5 +163,4 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
     }
 
 
-
 }

+ 9 - 2
RMS/src/main/java/cn/cslg/report/service/business/ReviewHistoryService.java

@@ -13,6 +13,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.util.List;
@@ -21,7 +22,8 @@ import java.util.List;
 @Slf4j
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class ReviewHistoryService extends ServiceImpl<ReviewHistoryMapper, ReviewHistory> {
-
+private final   ReportFileService reportFileService;
+private final AssoReviewHisFileService assoReviewHisFileService;
     public String deleteReviewHistory(int id) throws IOException {
         this.removeById(id);
         return Response.success();
@@ -32,8 +34,13 @@ public class ReviewHistoryService extends ServiceImpl<ReviewHistoryMapper, Revie
         return Response.success();
     }
 
-    public String addReviewHistory(ReviewHistory reviewHistory) throws IOException {
+    public String addReviewHistory(ReviewHistory reviewHistory,List<MultipartFile> files) throws IOException {
         reviewHistory.insert();
+        if (files==null&&files.size() != 0) {
+            //将文档上传并返回文件入库的Id
+            List<Integer> fileIds = reportFileService.uploadFiles(files);
+            assoReviewHisFileService.addAsso(reviewHistory.getId(),fileIds);
+        }
         return Response.success();
     }
 

+ 3 - 2
RMS/src/main/java/cn/cslg/report/service/business/TaskService.java

@@ -23,6 +23,7 @@ import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.text.ParseException;
@@ -109,9 +110,9 @@ public class TaskService extends ServiceImpl<TaskMapper, Task> {
 
     //添加审核任务
     @Transactional(rollbackFor = Exception.class)
-    public String addTask(TaskVO taskVO) throws ParseException, IOException {
+    public String addTask(TaskVO taskVO,List<MultipartFile> file) throws ParseException, IOException {
         //先添加一个报告
-        Integer reportId = reportService.addReport(taskVO.getReport());
+        Integer reportId = reportService.addReport(taskVO.getReport(),file);
         //数据库导入task
 
         //任务人员关联表导入数据

+ 2 - 1
RMS/src/main/java/cn/cslg/report/service/business/TemplateService.java

@@ -25,7 +25,8 @@ public class TemplateService extends ServiceImpl<TemplateMapper, Template> {
      public String getTemplateByType(Template template) {
          LambdaQueryWrapper<Template> wrapper =new LambdaQueryWrapper<>();
          wrapper.eq(Template::getReportType,template.getReportType());
-       return  Response.success(this.list(wrapper));
+         IPage<Template> templateIPage =this.page(new Page<>(template.getCurrent(), template.getSize()),wrapper);
+       return  Response.success(templateIPage);
 
      }
 

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 5379 - 7651
logs/rms/rms-debug.2022-12-01.0.log


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 3619 - 993
logs/rms/rms-info.2022-12-01.0.log