lwhhszx 2 vuotta sitten
vanhempi
commit
de111b5a04

+ 29 - 0
RMS/src/main/java/cn/cslg/report/common/model/dto/ReportDTO.java

@@ -166,8 +166,37 @@ public class ReportDTO  {
      */
     @Schema(description = "核心结论")
     private String cronConclusion;
+    /*
+    无效应对报告字段
+     */
+    /**
+     * 案件编号
+     */
+    @Schema(description = "案件编号")
+    private String caseNumber;
+    /**
+     * 发文序号
+     */
+    @Schema(description = "发文序号")
+    private String issueNumber;
+
+    /**
+     * 发明创造名称
+     */
+    @Schema(description = "发明创造名称")
+    private String   inventionName;
 
     /**
+     * 专利权人
+     */
+    @Schema(description = "专利权人")
+    private String   currentApplication;
+    /**
+     * 专利权人
+     */
+    @Schema(description = "无效宣告请求人")
+    private String   invalidApplication;
+    /**
      * 文件
      */
 

+ 215 - 0
RMS/src/main/java/cn/cslg/report/common/model/dto/ReportDeDTO.java

@@ -0,0 +1,215 @@
+package cn.cslg.report.common.model.dto;
+
+import cn.cslg.report.entity.ReportFiles;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class ReportDeDTO extends ReportDTO {
+
+    /**
+     * 标的专利/产品号
+     */
+    @Schema(description = "标的专利号", required = true)
+    @TableField(value = "SIGN_PATENT_NO")
+    private String signPatentNo;
+
+    /**
+     * 报告名称
+     */
+    @Schema(description = "报告名称", required = true)
+    @TableField(value = "NAME")
+    private String name;
+
+    /**
+     * 产品/技术
+     */
+    @Schema(description = "产品/技术")
+    @TableField(value = "PRO_TEC")
+    private String proTec;
+
+    /**
+     * 报告类别
+     */
+    @Schema(description = "报告类别(0无效分析1第三方意见2稳定性分析3FTO调查4侵权分析5回避设计6图表分析)")
+    @TableField(value = "TYPE")
+    private Integer type;
+
+    /**
+     * 报告状态
+     */
+    @Schema(description = "报告状态")
+    @TableField(value = "STATUS")
+    private Integer status;
+
+    /**
+     * 报告生成时间
+     */
+    @Schema(description = "报告生成时间")
+    @TableField(value = "CREATE_TIME")
+    private Date createTime;
+
+    /**
+     * 报告生成文件ID
+     */
+    @Schema(description = "报告生成文件ID")
+    @TableField(value = "REPORT_FILE_ID")
+    private Integer reportFileId;
+
+    /**
+     * 负责人ID
+     */
+    @Schema(description = "负责人ID")
+    @TableField(value = "PERSON_ID")
+    private Integer personId;
+    /**
+     * 负责人ID
+     */
+    @Schema(description = "负责人姓名")
+    @TableField(value = "PERSON_NAME")
+    private String personName;
+
+    /**
+     * 委托人ID
+     */
+    @Schema(description = "委托人ID")
+    @TableField(value = "CLIENT_ID")
+    private Integer clientId;
+
+    /**
+     * 委托人姓名
+     */
+    @Schema(description = "委托人姓名")
+    @TableField(value = "CLIENT_NAME")
+    private String clientName;
+
+    /**
+     * 承担部门ID
+     */
+    @Schema(description = "承担部门ID")
+    @TableField(value = "DEPARTMENT_ID")
+    private Integer departmentId;
+
+    /**
+     * 承担部门名称
+     */
+    @Schema(description = "承担部门名称")
+    @TableField(value = "DEPARTMENT_NAME")
+    private String departmentName;
+
+    /**
+     * 关联报告ID
+     */
+    @Schema(description = "关联报告ID")
+    @TableField(value = "ASSOCIATE_REPORT_ID")
+    private Integer associateReportId;
+
+    /**
+     * 关联报告名称
+     */
+    @Schema(description = "关联报告名称")
+    @TableField(value = "ASSOCIATE_REPORT_NAME")
+    private String associateReportName;
+
+    /**
+     * 应用场景
+     */
+    @Schema(description = "应用场景")
+
+    @TableField("SCENARIO_ID")
+    private String scenarioId;
+    /**
+     * 调查类型
+     */
+    @Schema(description = "调查类型")
+    @TableField(value = "IT_FLAG")
+    private Integer itFlag;
+
+    /**
+     * 专题库ID
+     */
+    @Schema(description = "专题库ID")
+    @TableField(value = "PROJECT_ID")
+    private Integer projectId;
+
+    /**
+     * 卷号
+     */
+    @Schema(description = "卷号")
+    @TableField(value = "VOLUME_NUMBER")
+    private String volumeNumber;
+    /**
+     * 拆分根据
+     */
+    @Schema(description = "拆分根据")
+    @TableField(value = "SPLIT_BY")
+    private Integer splitBy;
+    /**
+     * 拆分类型
+     */
+    @Schema(description = "拆分类型")
+    @TableField(value = "SPLIT_TYPE")
+    private Integer splitType;
+
+    /**
+     * 创建人ID
+     */
+    @Schema(description = "创建人ID")
+    @TableField(value = "CREATE_PERSON_ID")
+    private Integer createPersonId;
+    /**
+     * 创建人姓名
+     */
+    @Schema(description = "创建人姓名")
+    @TableField(value = "CREATE_PERSON_NAME")
+    private String createPersonName;
+    /**
+     * 备注
+     */
+    @Schema(description = "REMARK")
+    @TableField(value = "REMARK")
+    private String remark;
+
+    /**
+     * 结论id
+     */
+    @Schema(description = "结论id")
+    @TableField(value = "CONCLUSION_ID")
+    private String conclusionId;
+
+
+    /**
+     * 核心结论
+     */
+    @Schema(description = "核心结论")
+    @TableField(value = "CRON_CONCLUSION")
+    private String cronConclusion;
+
+    @Schema(description = "登录人在报告中的角色 0创建人,1负责人,2分享人")
+    @TableField(exist = false)
+    private List<Integer> loginRole;
+    /**
+     * 文件
+     */
+    @TableField(exist = false)
+    private List<ReportFiles> reportFiles;
+    /**
+     * 场景列表
+     */
+    @TableField(exist = false)
+    private List<String> scenarioList;
+
+    @TableField(exist = false)
+    private List<String> scenarioNames;
+
+    @TableField(exist = false)
+    private List<String> conclusionIds;
+    @TableField(exist = false )
+    private List<String> conclusions;
+
+
+}

+ 7 - 0
RMS/src/main/java/cn/cslg/report/controller/CompareScenariosController.java

@@ -7,6 +7,7 @@ import cn.cslg.report.service.business.CompareScenariosService;
 
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.models.security.SecurityScheme;
 import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.web.bind.annotation.*;
@@ -45,4 +46,10 @@ public class CompareScenariosController {
         }
 
     }
+    @GetMapping(value = "/exportExcel")
+    @Operation(summary = "删除对比方案")
+    public String delete(Integer  reportId) throws IOException {
+        return  compareScenariosService.exportExcel(reportId,null);
+
+    }
 }

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

@@ -3,6 +3,7 @@ package cn.cslg.report.controller;
 import cn.cslg.report.common.core.base.Constants;
 import cn.cslg.report.common.model.dto.ConclusionDTO;
 import cn.cslg.report.common.model.dto.ReportDTO;
+import cn.cslg.report.common.model.dto.ReportDeDTO;
 import cn.cslg.report.common.model.vo.FileVO;
 import cn.cslg.report.common.model.vo.ReportVO;
 import cn.cslg.report.common.utils.Response;
@@ -150,4 +151,17 @@ public class ReportController {
         }
         return Response.error("添加失败");
     }
+
+
+    @GetMapping(value = "reReportDetail")
+    @Operation(summary = "返回报告详情")
+    @Transactional(rollbackFor = Exception.class)
+    public String addConclusions(int reportId) throws IOException {
+       ReportDeDTO reportDeDTO = reportService.reReportDetail(reportId);
+        if (reportDeDTO ==null) {
+            return Response.error("报告不存在");
+
+        }
+        return Response.success(reportDeDTO);
+    }
 }

+ 150 - 1
RMS/src/main/java/cn/cslg/report/service/business/CompareScenariosService.java

@@ -4,20 +4,29 @@ import cn.cslg.report.common.model.vo.CompareScenariosVO;
 import cn.cslg.report.common.utils.Response;
 import cn.cslg.report.common.utils.SecurityUtils.LoginUtils;
 import cn.cslg.report.entity.*;
+import cn.cslg.report.entity.Picture;
 import cn.cslg.report.entity.asso.AssoRecordsFeature;
 import cn.cslg.report.mapper.CompareScenariosMapper;
+import cn.hutool.core.util.IdUtil;
 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.apache.commons.compress.utils.IOUtils;
+import org.apache.poi.hssf.usermodel.*;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.*;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.io.IOException;
+import java.io.*;
 
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Base64;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -153,7 +162,147 @@ public class CompareScenariosService extends ServiceImpl<CompareScenariosMapper,
         return Response.success(list);
 
     }
+    /**
+     * @function:根据报告id查询对比方案
+     * @param reportID
+     * @return:对比方案 对应实体:CompareScenariosVO
+     * @throws IOException
+     */
+    public String exportExcel (int reportID,List<Integer> scenariosIds)throws IOException, FileNotFoundException {
+        String fileName = IdUtil.simpleUUID() + ".xls";
+        XSSFWorkbook hssfWorkbook = new XSSFWorkbook();
+        XSSFSheet sheet = hssfWorkbook.createSheet();
+        sheet.setDefaultColumnWidth(30);
+        XSSFRow headerRow = sheet.createRow(0);
+        headerRow.setHeight((short) 500);
+        List<String> listExcel = Arrays.asList("权要", "对比组合", "特征", "公识", "对比专利", "对比内容", "对比结论/理由");
+        for (int i = 0; i < listExcel.size(); i++) {
+            XSSFCell cell = headerRow.createCell(i);
+            cell.setCellValue(listExcel.get(i));
+        }
+        List<CompareScenariosVO> list=new ArrayList<>();
+        //根据报告ID查询对比方案
+        LambdaQueryWrapper<CompareScenarios> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CompareScenarios::getReportId, reportID);
+        if(scenariosIds!=null&&scenariosIds.size()>0) {
+            wrapper.eq(CompareScenarios::getId,scenariosIds);
+        }
+        List<CompareScenarios> compareScenarios = this.list(wrapper);
+        //根据报告ID和权要id获得特征
+        LambdaQueryWrapper<Features> featuresWrapper =new LambdaQueryWrapper<>();
+        featuresWrapper.eq(Features::getReportId,reportID);
+        List<Features> allFeatures =featureService.list(featuresWrapper);
+        //获得所有对比方案id进而获得所有对比方案和特征-对比记录关联id
+        List<Integer> scenarioIds =compareScenarios.stream().map(CompareScenarios::getId).collect(Collectors.toList());
+        List<AssoScenarIOS> selects = assoScenarIOSService.select(scenarioIds);
+        int rowIndex =1;
+        //遍历对比方案
+        for ( int c=0;c<compareScenarios.size();c++ ){
+            CompareScenarios a =compareScenarios.get(c);
+            CompareScenariosVO compareScenariosVO=new CompareScenariosVO();
+            compareScenariosVO.setRightId(a.getRightId());
+            compareScenariosVO.setContrastResult( a.getContrastResult());
+            compareScenariosVO.setReportId(a.getReportId());
+            compareScenariosVO.setSignPatentNo(  a.getSignPatentNo());
+            compareScenariosVO.setRight(a.getRightName());
+            compareScenariosVO.setId(a.getId());
+            //获得对比方案的特征列表
+            List<Features> featuresLists =allFeatures.stream().filter(item->item.getRightId().equals(a.getRightId())).collect(Collectors.toList());
+            //根据对比方案ID获得所有对比方案和对比记录关联信息
+            List<AssoScenarIOS> select = selects.stream().filter(item->item.getScenariosID()==a.getId()).collect(Collectors.toList());
+            //获得特征-记录关联Id不为0的对比记录和特征关联Id
+            List<Integer> featureRecordIds = select.stream().filter(item->item.getFeatureRecordID()!=0).map(AssoScenarIOS::getFeatureRecordID).collect(Collectors.toList());
+            //获得特征-记录关联Id为0的对比记录和特征关联Id
+            List<Integer> commonFeatureIds = select.stream().filter(item->item.getFeatureRecordID()==0).map(AssoScenarIOS::getFeaturesID).collect(Collectors.toList());
+            //根据关联Id获得特征Id和对比记录ID
+            List<AssoRecordsFeature> assoRecordsFeatures =new ArrayList<>();
+            if(featureRecordIds.size()!=0) {
+                LambdaQueryWrapper<AssoRecordsFeature> wrapper1 = new LambdaQueryWrapper<>();
+                wrapper1.in(AssoRecordsFeature::getId, featureRecordIds);
+                assoRecordsFeatures = assoRecordsFeatureService.list(wrapper1);
+            }
+            //获取特征Id
+            List<Integer> featureIds= assoRecordsFeatures.stream().map(AssoRecordsFeature::getFeatureId).collect(Collectors.toList());
+            //对比记录Id
+            List<Integer> recordId  =assoRecordsFeatures.stream().map(AssoRecordsFeature::getRecordsId).collect(Collectors.toList());
+            //根据特征Id查询特征
+            List<Features> features = allFeatures.stream().filter(item->featureIds.contains(item.getId())).collect(Collectors.toList());
+            List<CompareRecords> compareRecords =new ArrayList<>();
+            if(recordId!=null&&recordId.size()>0) {
+                LambdaQueryWrapper<CompareRecords> wrapper3 = new LambdaQueryWrapper<>();
+                wrapper3.in(CompareRecords::getId, recordId);
+                compareRecords = compareRecordsService.list(wrapper3);
+            }
+            XSSFCellStyle style = hssfWorkbook.createCellStyle();
+            style.setWrapText(true);
+            style.setAlignment(HorizontalAlignment.CENTER);
+            style.setVerticalAlignment(VerticalAlignment.CENTER);
+            for(Features item : featuresLists) {
+                AssoRecordsFeature assoRecordsFeature = assoRecordsFeatures.stream().filter(te->te.getFeatureId().equals(item.getId())).findFirst().orElse(new AssoRecordsFeature());
+                //筛选对比文件
+                CompareRecords compareRecords1 = compareRecords.stream().filter(tem -> tem.getId().equals(assoRecordsFeature.getRecordsId())).findFirst().orElse(new CompareRecords());
+                int rowNum=sheet.getLastRowNum();
+                XSSFRow row = sheet.createRow(rowNum+1);
+                XSSFRow lastrow= sheet.getRow(rowNum);
+                XSSFCell cell =lastrow.getCell(0);
+                row.createCell(0).setCellValue(a.getRightName());
+                row.createCell(1).setCellValue("对比组合"+(c+1));
+                row.createCell(2).setCellValue(item.getContent());
+              if(commonFeatureIds.contains(item.getId())) {
+                  row.createCell(3).setCellValue("是");
+              }
+                if(compareRecords1!=null){
+                    row.createCell(4).setCellValue(compareRecords1.getPatentNo());
+                    row.createCell(5).setCellValue(compareRecords1.getContent());
 
+                }
+                String htmlString = a.getContrastResult();
+
+                if(htmlString!=null) {
+                    String base64EncodedImage = htmlString.substring(htmlString.indexOf("base64,") + 7, htmlString.lastIndexOf("\" style="));
+
+                    byte[] decodedBytes = Base64.getDecoder().decode(base64EncodedImage);
+                    int pictureIdx = hssfWorkbook.addPicture(decodedBytes, Workbook.PICTURE_TYPE_PNG);
+// 创建绘图对象和锚点
+                    XSSFDrawing drawing = sheet.createDrawingPatriarch();
+                    XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, 0, 0, 5, 10);
+
+// 插入图像
+                    XSSFPicture picture = drawing.createPicture(anchor, pictureIdx);
+                    picture.resize();
+                    // 在单元格中写入HTML语句
+                    XSSFRichTextString richString = new XSSFRichTextString();
+                    richString.append("<html><head></head><body><h1>Hello World!</h1><img src='cid:image1'></body></html> ", new XSSFFont());
+                    XSSFCell cell1 =row.createCell(6);
+                    cell1.setCellValue(richString);
+                    cell1.setCellStyle(style);
+                }
+
+              rowIndex++;
+            }
+            //过滤拿到特征id
+            List<Integer> featuresIds =select.stream().filter(item->item.getFeatureRecordID().equals(0)).map(AssoScenarIOS::getFeaturesID).collect(Collectors.toList());
+            //根据特征Id查询特征
+            List<Features> featuresList =new ArrayList<>();
+            if(featuresIds!=null&&featuresIds.size()>0) {
+                featuresList= allFeatures.stream().filter(item->featuresIds.contains(item.getId())).collect(Collectors.toList());
+            }
+            compareScenariosVO.setFeaturesList(featuresList);
+            compareScenariosVO.setFeaturesIDList(featuresIds);
+            list.add(compareScenariosVO);
+        }
+
+        FileOutputStream fos = new FileOutputStream("savePath" + fileName);
+        try {
+            hssfWorkbook.write(fos);
+            fos.flush();
+            fos.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+
+        }
+        return Response.success("savePath" + fileName);
+    }
     /**
      * @DESCRIPTION 根据报告ID删除对比方案
      * @param reportId 报告ID

+ 17 - 4
RMS/src/main/java/cn/cslg/report/service/business/ReportService.java

@@ -1,10 +1,7 @@
 package cn.cslg.report.service.business;
 
 import cn.cslg.report.common.core.base.Constants;
-import cn.cslg.report.common.model.dto.ConclusionDTO;
-import cn.cslg.report.common.model.dto.EventAddNewDTO;
-import cn.cslg.report.common.model.dto.FollowUpDTO;
-import cn.cslg.report.common.model.dto.ReportDTO;
+import cn.cslg.report.common.model.dto.*;
 import cn.cslg.report.common.model.vo.*;
 import cn.cslg.report.common.utils.*;
 import cn.cslg.report.common.utils.SecurityUtils.LoginUtils;
@@ -138,6 +135,7 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
             report.setConclusionId(null);
         }
         report.insert();
+        //TODO 当是无效应对报告时,在无效应对报告里插入信息
         if (files != null && files.size() != 0) {
             //当
             if (report.getStatus() != 3) {
@@ -468,6 +466,7 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
         reportReferencesService.deleteByReportId(id);
         //删除对比信息
         compareMessageService.deleteByreportID(id);
+        //TODO 当时无效应对报告时
 
 
         Boolean dele = this.removeById(id);
@@ -701,4 +700,18 @@ public class ReportService extends ServiceImpl<ReportMapper, Report> {
         return report.updateById();
 
     }
+
+    /**
+     * @autor 谢翔
+     * @param ReportId
+     * @return
+     */
+    public ReportDeDTO reReportDetail(int ReportId) {
+        ReportDeDTO reportDeDTO =null;
+      //根据报告id获得报告
+        //若根据报告id未获取到报告返回空
+        //若报告为无效应对报告则从无效应对报告表中获得无效对应报告拓展信息
+        //装载报告信息,无效对应报告拓展信息到ReportDeDTO并返回
+        return  reportDeDTO;
+    }
 }