xiexiang 2 éve
szülő
commit
3d850a6d22

+ 1 - 0
RMS/src/main/java/cn/cslg/report/common/model/vo/LoginVO.java

@@ -31,4 +31,5 @@ public class LoginVO {
      * 密码
      */
     private String password;
+
 }

+ 31 - 0
RMS/src/main/java/cn/cslg/report/common/model/vo/invalidReReport/ExportInvalidReasonVO.java

@@ -0,0 +1,31 @@
+package cn.cslg.report.common.model.vo.invalidReReport;
+
+import lombok.Data;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/7/26
+ */
+@Data
+public class ExportInvalidReasonVO {
+
+    /**
+     * 无效理由
+     */
+    private Integer invalidName;
+
+    /**
+     * 涉及内容
+     */
+    private Integer content;
+
+    /**
+     * 陈述意见
+     */
+    private String argumentStr;
+
+    /**
+     * 相关证据
+     */
+    private String proofStr;
+}

+ 14 - 0
RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/InvalidReasonController.java

@@ -4,9 +4,11 @@ import cn.cslg.report.common.core.base.Constants;
 import cn.cslg.report.common.model.dto.invalidReReport.CheckReFeaturesDTO;
 import cn.cslg.report.common.model.dto.invalidReReport.InvalidReasonDTO;
 import cn.cslg.report.common.model.dto.invalidReReport.QueryInvalidReasonDTO;
+import cn.cslg.report.common.model.vo.invalidReReport.ExportInvalidReasonVO;
 import cn.cslg.report.common.model.vo.invalidReReport.QueryInvalidReasonVO;
 import cn.cslg.report.common.utils.Response;
 import cn.cslg.report.entity.invalidReReport.InvalidReason;
+import cn.cslg.report.service.business.ExportArgumentsScenariosService;
 import cn.cslg.report.service.business.InvalidReReport.InvalidReasonService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -30,6 +32,7 @@ import java.util.List;
 @RequestMapping(Constants.REPORT_API + "/invalidReason")
 public class InvalidReasonController {
     private final InvalidReasonService invalidReasonService;
+    private final ExportArgumentsScenariosService exportArgumentsScenariosService;
 
     @Operation(summary = "添加无效理由和证据")
     @PostMapping("/addInvalidReason")
@@ -84,4 +87,15 @@ public class InvalidReasonController {
         Boolean isFlag = invalidReasonService.checkReFeatures(checkReFeaturesDTO);
         return Response.success(isFlag);
     }
+
+    @Operation(summary = "测试无效理由导出Excel是否有效")
+    @GetMapping("/testExport")
+    public String testExport(Integer reportId) throws IOException {
+        if(reportId != null && reportId > 0) {
+            exportArgumentsScenariosService.ExportToExcel(reportId);
+            return Response.success();
+        }else {
+            return Response.error("参数不能为空");
+        }
+    }
 }

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

@@ -77,6 +77,7 @@ public class OutInterfaceService {
         map.put("uuid", loginVO.getUuid());
         map.put("username", loginVO.getUsername());
         map.put("password", loginVO.getPassword());
+        map.put("loginSystem", 2);
         JSONObject json = new JSONObject(map);
         RequestBody requestBody = RequestBody.create(JSON, String.valueOf(json));
         OkHttpClient okHttpClient = new OkHttpClient();

+ 80 - 0
RMS/src/main/java/cn/cslg/report/service/business/ExportArgumentsScenariosService.java

@@ -0,0 +1,80 @@
+package cn.cslg.report.service.business;
+
+import cn.cslg.report.common.model.dto.UploadFileDTO;
+import cn.cslg.report.common.model.dto.invalidReReport.InvalidReasonDTO;
+import cn.cslg.report.common.model.vo.invalidReReport.ExportInvalidReasonVO;
+import cn.cslg.report.common.utils.FileUtils;
+import cn.cslg.report.service.business.InvalidReReport.InvalidReasonService;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.IdUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 导出陈述意见方案实现类
+ * @Author xiexiang
+ * @Date 2023/7/24
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class ExportArgumentsScenariosService {
+    private final InvalidReasonService invalidReasonService;
+    private final FileUtils fileUtils;
+
+    public UploadFileDTO ExportToExcel(Integer reportId) throws IOException {
+        List<ExportInvalidReasonVO> exportInvalidReasonVOS = invalidReasonService.exportInvalidReason(reportId);
+        //创建工作簿和工作表
+        Workbook workbook = new XSSFWorkbook();
+        Sheet sheet = workbook.createSheet("陈述意见方案");
+
+        //创建表头
+        Row headerRow = sheet.createRow(0);
+        headerRow.createCell(0).setCellValue("无效理由");
+        headerRow.createCell(1).setCellValue("涉及内容");
+        headerRow.createCell(2).setCellValue("相关证据");
+        headerRow.createCell(3).setCellValue("陈述意见");
+
+        //字体
+        Font headerFont = workbook.createFont();
+        headerFont.setBold(true);
+
+        CellStyle headerCellStyle = workbook.createCellStyle();
+        headerCellStyle.setFont(headerFont);
+        //填充数据
+        int rowNum = 1;
+        for(ExportInvalidReasonVO exportInvalidReasonVO : exportInvalidReasonVOS){
+            Row row = sheet.createRow(rowNum++);
+            row.createCell(0).setCellValue(exportInvalidReasonVO.getInvalidName());
+            row.createCell(1).setCellValue(exportInvalidReasonVO.getContent());
+            row.createCell(2).setCellValue(exportInvalidReasonVO.getProofStr());
+            row.createCell(3).setCellValue(exportInvalidReasonVO.getArgumentStr());
+        }
+        //调整列宽
+        for(int i = 0; i < 4; i++){
+            sheet.autoSizeColumn(i);
+        }
+        String fileName = IdUtil.simpleUUID() + ".xlsx";
+        String directoryName = fileUtils.createDirectory();
+        String outPath = fileUtils.getSavePath(directoryName) + fileName;
+        //导出文件
+        File excelFile = new File(fileName);
+        FileOutputStream outputStream = new FileOutputStream(excelFile);
+        workbook.write(outputStream);
+        MultipartFile multipartFile = new MockMultipartFile(fileName, new FileInputStream(outPath));
+        UploadFileDTO uploadFileDTO = fileUtils.uploadFile(multipartFile);
+        return uploadFileDTO;
+    }
+}

+ 121 - 8
RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/InvalidReasonService.java

@@ -5,6 +5,7 @@ import cn.cslg.report.common.model.dto.invalidReReport.InvalidReasonDTO;
 import cn.cslg.report.common.model.dto.invalidReReport.ProofGroupDTO;
 import cn.cslg.report.common.model.dto.invalidReReport.QueryInvalidReasonDTO;
 import cn.cslg.report.common.model.vo.PersonnelVO;
+import cn.cslg.report.common.model.vo.invalidReReport.ExportInvalidReasonVO;
 import cn.cslg.report.common.model.vo.invalidReReport.PagingVO;
 import cn.cslg.report.common.model.vo.invalidReReport.QueryAllFeaturesVO;
 import cn.cslg.report.common.model.vo.invalidReReport.QueryInvalidReasonVO;
@@ -47,12 +48,14 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
     private final ReportService reportService;
     private final AssoPositionFeaturesService assoPositionFeaturesService;
     private final AssoProofGroupService assoProofGroupService;
+    private final ProofService proofService;
     private final FeatureService featureService;
     private final FeatureMapper featureMapper;
     private final ProofGroupService proofGroupService;
     private final CacheUtils cacheUtils;
     private final LoginUtils loginUtils;
     private final CompareFilesService compareFilesService;
+
     /**
      * 判断特征是否有重复的方法
      * @param checkReFeaturesDTO
@@ -119,6 +122,7 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
         }
         return true;
     }
+
     /**
      * 添加无效理由和证据
      * @param invalidReasonDTO 无效理由和证据Dto类
@@ -130,6 +134,8 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
         //判断invalidName的类型
         Integer invalidName = invalidReasonDTO.getInvalidName();
         if(invalidName.equals(1)) {//若类型为1,则为说明书公开不充分,涉及内容为说明书,手动输入无效证据
+            //将涉及内容字段设置为-1
+            invalidReasonDTO.setContent(-1);
             BeanUtils.copyProperties(invalidReasonDTO, invalidReason);
             //获取当前登陆人信息
             PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
@@ -138,9 +144,6 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
             invalidReason.insert();
         } else if(invalidName.equals(0)){//若类型为0,则为“权利要求不清楚”,需要选择涉及内容(content)并输入相关证据(proofStr)
             if(invalidReasonDTO.getProofStr() != null && invalidReasonDTO.getProofStr() != ""){
-                if(invalidReasonDTO.getInvalidName()==1){
-                    invalidReasonDTO.setContent(-1);
-                }
                 //复制DTO类字段到InvalidReason实体类并保存入库
                 BeanUtils.copyProperties(invalidReasonDTO, invalidReason);
                 //获取当前登陆人信息
@@ -206,6 +209,8 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
             if(invalidReasonDTO.getProofGroups()!= null){
                 //复制DTO类字段到InvalidReason实体类并保存入库
                 BeanUtils.copyProperties(invalidReasonDTO, invalidReason);
+                //权要排序
+                invalidReason.setRightSort(invalidReasonDTO.getContent());
                 //获取当前登陆人信息
                 PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
                 invalidReason.setCreateId(personnelVO.getId());
@@ -254,7 +259,7 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
     @Transactional(rollbackFor = Exception.class)
     public  String updateInvalidReason(InvalidReasonDTO invalidReasonDTO) {
         if(invalidReasonDTO.getId() == null){
-            return  Response.error("请选择无效理由");
+            return Response.error("请选择无效理由");
         }
         Integer invalidName =invalidReasonDTO.getInvalidName();
         InvalidReason invalidReason = this.getById(invalidReasonDTO.getId());
@@ -439,15 +444,15 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
                             proofGroupIn.setArgument_str(proofGroup.getArgument_str());
                             List<Integer> proofIds = assoProofGroups.stream().filter(item->item.getGroupId().equals(proofGroup.getId())).map(AssoProofGroup::getProofId).collect(Collectors.toList());
                            //根据证据id查询证据
-                            List<CompareFiles> proofs =new ArrayList<>();
+                            List<CompareFiles> proofs = new ArrayList<>();
                             if(proofIds.size()>0) {
                                 LambdaQueryWrapper<CompareFiles> proofLambdaQueryWrapper = new LambdaQueryWrapper<CompareFiles>();
                                 proofLambdaQueryWrapper.in(CompareFiles::getId, proofIds);
-                               proofs =compareFilesService.list(proofLambdaQueryWrapper);
+                                proofs = compareFilesService.list(proofLambdaQueryWrapper);
                             }
-                            List<QueryInvalidReasonVO.proofIn> proofIns =new ArrayList<>();
+                            List<QueryInvalidReasonVO.proofIn> proofIns = new ArrayList<>();
                             proofs.forEach(item->{
-                                QueryInvalidReasonVO.proofIn proof=new QueryInvalidReasonVO.proofIn();
+                                QueryInvalidReasonVO.proofIn proof = new QueryInvalidReasonVO.proofIn();
                                 proof.setId(item.getId());
                                 proof.setSort(item.getSysOrder());
                                 proof.setPatentNo(item.getPatentNo());
@@ -513,6 +518,113 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
         }
     }
 
+    /**
+     * 导出无效理由所需的查询
+     * @param reportId
+     * @return
+     */
+    public List<ExportInvalidReasonVO> exportInvalidReason(Integer reportId){
+        List<ExportInvalidReasonVO> exportInvalidReasonVOS = new ArrayList<>();
+        //根据报告id查询出所有无效理由,无效理由(0权利要求不清楚 1说明书公开不充分 2不具备创造性 3不具备新颖性)
+        LambdaQueryWrapper<InvalidReason> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(InvalidReason::getReportId,reportId);
+        List<InvalidReason> invalidReasons = this.list(queryWrapper);
+        for(InvalidReason invalidReason : invalidReasons){
+            if(invalidReason != null){
+                ExportInvalidReasonVO exportInvalidReasonVO = this.invalidReasonToExport(invalidReason);
+                exportInvalidReasonVOS.add(exportInvalidReasonVO);
+            }
+        }
+        return exportInvalidReasonVOS;
+    }
+
+    /**
+     * 根据无效理由对象转换成返回的VO类
+     * @param invalidReason
+     * @return
+     */
+    public ExportInvalidReasonVO invalidReasonToExport(InvalidReason invalidReason){
+        ExportInvalidReasonVO exportInvalidReasonVO = new ExportInvalidReasonVO();
+        //陈述意见
+        exportInvalidReasonVO.setArgumentStr(invalidReason.getArgumentStr());
+        Integer invalidName = invalidReason.getInvalidName();
+        //无效理由类型为0,为权利要求不清楚
+        if(invalidName.equals(0)){
+            //无效理由
+            exportInvalidReasonVO.setInvalidName(invalidName);
+            //涉及内容(权要排序)
+            exportInvalidReasonVO.setContent(invalidReason.getRightSort());
+            //相关证据
+            exportInvalidReasonVO.setProofStr(invalidReason.getProofStr());
+
+            return exportInvalidReasonVO;
+        } else if(invalidName.equals(1)){//无效理由类型为1,为说明书公开不充分
+            //无效理由
+            exportInvalidReasonVO.setInvalidName(invalidName);
+            //涉及内容(说明书为-1)
+            exportInvalidReasonVO.setContent(-1);
+            //相关证据
+            exportInvalidReasonVO.setProofStr(invalidReason.getProofStr());
+            return exportInvalidReasonVO;
+        } else if(invalidName.equals(2) || invalidName.equals(3)){//无效理由类型为2,为不具备创造性;无效理由类型为3,为不具备新颖性
+            //无效理由
+            exportInvalidReasonVO.setInvalidName(invalidName);
+            //涉及内容(权要排序)
+            exportInvalidReasonVO.setContent(invalidReason.getRightSort());
+            //相关证据是证据组合字符串
+            Integer invalidReasonId = invalidReason.getId();
+            String proofStr = this.proofGroupToString(invalidReasonId);
+            exportInvalidReasonVO.setProofStr(proofStr);
+            return exportInvalidReasonVO;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * 根据无效理由id,返回相关证据的字符串
+     * @param invalidReasonId
+     * @return
+     */
+    public String proofGroupToString(Integer invalidReasonId){
+        //1.根据无效理由id查询出多个证据组合id
+        LambdaQueryWrapper<ProofGroup> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ProofGroup::getInvalidReasonId, invalidReasonId);
+        List<ProofGroup> proofGroups = proofGroupService.list(queryWrapper);
+        List<Integer> proofGroupIds = proofGroups.stream().map(ProofGroup::getId).collect(Collectors.toList());
+        //2.根据每个证据组合id到关联表中查询出所有的证据ids,并拼接成字符串
+        LambdaQueryWrapper<AssoProofGroup> queryWrapper1 = new LambdaQueryWrapper<>();
+        queryWrapper1.in(AssoProofGroup::getGroupId, proofGroupIds);
+        List<AssoProofGroup> assoProofGroups = assoProofGroupService.list(queryWrapper1);
+        List<String> results = new ArrayList<>();
+        StringBuilder SB = new StringBuilder();
+        for(Integer proofGroupId : proofGroupIds){
+            List<Integer> proofIds = assoProofGroups.stream().filter(item->item.getGroupId().equals(proofGroupId)).map(AssoProofGroup::getProofId).collect(Collectors.toList());
+            //3.根据证据ids,到证据表中查询出所有证据,并拼接成字符串
+            if(proofIds.size() > 0){
+                //根据证据ids查询证据排序字段
+                LambdaQueryWrapper<CompareFiles> queryWrapper2 = new LambdaQueryWrapper<CompareFiles>();
+                queryWrapper2.in(CompareFiles::getId, proofIds);
+                List<CompareFiles> proofs = compareFilesService.list(queryWrapper2);
+                List<Integer> sysorders = proofs.stream().map(CompareFiles::getSysOrder).collect(Collectors.toList());
+                StringBuilder sb = new StringBuilder();
+                for(Integer sysorder : sysorders){
+                    sb.append("证据").append(sysorder).append("+");
+                }
+                sb.deleteCharAt(sb.length() - 1);
+                sb.append("\n");
+                String result = sb.toString();
+                results.add(result);
+            }
+        }
+        for(String resultStr : results){
+            SB.append(resultStr);
+        }
+        String STR = SB.toString();
+        return STR;
+    }
+
+
                 /**
                  * 装载特征集合
                  * @param reportId
@@ -582,4 +694,5 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
                         return null;
                     }
                 }
+
 }