瀏覽代碼

任务部分接口 2022/11/17

lwhhszx 2 年之前
父節點
當前提交
f0de314403
共有 24 個文件被更改,包括 1319 次插入118 次删除
  1. 12 5
      RMS/src/main/java/cn/cslg/report/common/model/vo/AssignTaskVO.java
  2. 2 0
      RMS/src/main/java/cn/cslg/report/common/model/vo/TaskVO.java
  3. 1 1
      RMS/src/main/java/cn/cslg/report/controller/BaseController.java
  4. 19 0
      RMS/src/main/java/cn/cslg/report/controller/CompareController.java
  5. 12 6
      RMS/src/main/java/cn/cslg/report/controller/PatentFiledController.java
  6. 15 2
      RMS/src/main/java/cn/cslg/report/controller/TaskController.java
  7. 6 0
      RMS/src/main/java/cn/cslg/report/entity/CompareFiles.java
  8. 19 2
      RMS/src/main/java/cn/cslg/report/entity/ReportField.java
  9. 6 1
      RMS/src/main/java/cn/cslg/report/entity/ReportFieldOption.java
  10. 56 0
      RMS/src/main/java/cn/cslg/report/entity/ReportFieldPatentLink.java
  11. 33 0
      RMS/src/main/java/cn/cslg/report/entity/ReportFieldText.java
  12. 58 0
      RMS/src/main/java/cn/cslg/report/entity/ReportFieldTree.java
  13. 3 0
      RMS/src/main/java/cn/cslg/report/entity/asso/AssoTaskPersonel.java
  14. 17 0
      RMS/src/main/java/cn/cslg/report/mapper/ReportFieldOptionMapper.java
  15. 17 0
      RMS/src/main/java/cn/cslg/report/mapper/ReportFieldPatentLinkMapper.java
  16. 16 0
      RMS/src/main/java/cn/cslg/report/mapper/ReportFieldTextMapper.java
  17. 17 0
      RMS/src/main/java/cn/cslg/report/mapper/ReportFieldTreeMapper.java
  18. 62 39
      RMS/src/main/java/cn/cslg/report/service/business/CompareFilesService.java
  19. 123 0
      RMS/src/main/java/cn/cslg/report/service/business/ReportFieldOptionService.java
  20. 334 0
      RMS/src/main/java/cn/cslg/report/service/business/ReportFieldPatentLinkService.java
  21. 26 6
      RMS/src/main/java/cn/cslg/report/service/business/ReportFieldService.java
  22. 74 0
      RMS/src/main/java/cn/cslg/report/service/business/ReportFieldTextService.java
  23. 320 0
      RMS/src/main/java/cn/cslg/report/service/business/ReportFieldTreeService.java
  24. 71 56
      RMS/src/main/java/cn/cslg/report/service/business/TaskService.java

+ 12 - 5
RMS/src/main/java/cn/cslg/report/common/model/vo/AssignTaskVO.java

@@ -21,18 +21,25 @@ import java.util.List;
 @Schema(description="分配任务VO",required = true)
 public class AssignTaskVO extends BaseVO {
 
-    @Schema(description = "任务信息")
-    private Task task;
-
-    List<personPatents> assigns ;
+    @Schema(description = "任务名")
+    private String taskName;
 
+    @Schema(description = "报告Id")
+    private Integer reportId;
     @Schema(description = "人员专利号对象")
+    List<assignPatents> assigns ;
+    @Schema(description = "任务结束时间")
+    private Date endTime;
+    @Schema(description = "备注")
+    private String remark;
     @Data
-    public static class personPatents{
+    public static class assignPatents{
         @Schema(description = "人员Id")
             private Integer personId;
+
         @Schema(description = "专利号列表")
         private List<String> patentNos;
+
         @Schema(description = "分配数量")
         private Integer assignCount;
 

+ 2 - 0
RMS/src/main/java/cn/cslg/report/common/model/vo/TaskVO.java

@@ -31,6 +31,8 @@ public class TaskVO extends BaseVO {
     @Schema(description = "任务名称")
     private String taskName;
 
+    @Schema(description = "任务Id")
+    private String taskId;
 
     @Schema(description = "任务类型 0开卷审核任务")
     private Integer type;

+ 1 - 1
RMS/src/main/java/cn/cslg/report/controller/BaseController.java

@@ -149,7 +149,7 @@ public class BaseController {
     }
 
     @PostMapping("/getComPatentNos")
-    @Operation(summary = "根据报告Id获得对比专利号11")
+    @Operation(summary = "根据报告Id获得对比专利号")
     public String getComPatentNos(@RequestBody PatentVO patentVO) throws IOException {
         return  outInterfaceService.getComPatentNos(patentVO);
     }

+ 19 - 0
RMS/src/main/java/cn/cslg/report/controller/CompareController.java

@@ -4,6 +4,8 @@ import cn.cslg.report.common.model.vo.CompareFilesVO;
 import cn.cslg.report.common.model.vo.PatentVO;
 import cn.cslg.report.service.business.CompareFilesService;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Parameters;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Lazy;
@@ -40,6 +42,12 @@ public class CompareController {
         String res = compareFilesService.getCompareFile(patentVO);
         return res;
     }
+    @RequestMapping(value = "/getSureCompareFile", method = RequestMethod.POST)
+    @Operation(summary = "获得已确定的对比文件详情(分页)")
+    public String getSureCompareFile(@RequestBody PatentVO patentVO) throws IOException {
+        String res = compareFilesService.getSureCompareFile(patentVO);
+        return res;
+    }
 
     @RequestMapping(value = "/getCompareNos", method = RequestMethod.GET)
     @Operation(summary = "获得对比专利号")
@@ -47,4 +55,15 @@ public class CompareController {
         String res = compareFilesService.getCompareNos(reportId);
         return res;
     }
+    @RequestMapping(value = "/deleteCompareNo", method = RequestMethod.GET)
+    @Operation(summary = "删除单个对比专利")
+    @Parameters(value = {
+            @Parameter(name="reportId",description = "报告ID",required = true),
+            @Parameter(name="patentNo",description = "专利号",required = true)
+    }
+    )
+    public String deleteCompareNo(Integer reportId,String patentNo) throws IOException {
+        String res = compareFilesService.deletePatentNo(reportId,patentNo);
+        return res;
+    }
 }

+ 12 - 6
RMS/src/main/java/cn/cslg/report/controller/PatentFiledController.java

@@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;
 
-@Tag(name = "对比专利管理")
+@Tag(name = "自定义字段")
 @RestController
 @RequestMapping(Constants.REPORT_API + "/patentField")
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
@@ -25,11 +25,17 @@ public class PatentFiledController {
         return reportFieldService.add(reportFieldField);
     }
 
-//    @PostMapping("edit")
-//    @Operation(summary = "编辑自定义字段")
-//    public String edit(@RequestBody ReportField reportField) {
-//        return projectFieldService.edit(projectField);
-//    }
+    @PostMapping("edit")
+    @Operation(summary = "编辑自定义字段")
+    public String edit(@RequestBody ReportField reportField) {
+        return reportFieldService.edit(reportField);
+    }
+
+    @PostMapping("delete")
+    @Operation(summary = "删除自定义字段")
+    public String delete(Integer id) {
+        return reportFieldService.delete(id);
+    }
 
 
 }

+ 15 - 2
RMS/src/main/java/cn/cslg/report/controller/TaskController.java

@@ -3,6 +3,7 @@ package cn.cslg.report.controller;
 
 import cn.cslg.report.common.core.base.Constants;
 import cn.cslg.report.common.model.BaseVO;
+import cn.cslg.report.common.model.vo.AssignTaskVO;
 import cn.cslg.report.common.model.vo.AuditTaskVO;
 import cn.cslg.report.common.model.vo.TaskVO;
 import cn.cslg.report.common.utils.DataUtils;
@@ -57,8 +58,8 @@ public class TaskController {
     }
 
     @RequestMapping(value = "/addTask", method = RequestMethod.POST)
-    @Operation(summary = "新增任务")
-    public String addAuditTask(@RequestBody TaskVO taskVO) throws ParseException, IOException {
+    @Operation(summary = "新增审核任务")
+    public String addTask(@RequestBody TaskVO taskVO) throws ParseException, IOException {
         return taskService.addTask(taskVO);
     }
 
@@ -74,4 +75,16 @@ public class TaskController {
       float a=   DataUtils.getSimilarityRatio(text1,text2);
         return Response.success("相似度"+a);
     }
+
+    @RequestMapping(value = "/addAssTask", method = RequestMethod.POST)
+    @Operation(summary = "添加分配任务")
+    public String addAssTask(@RequestBody AssignTaskVO assignTaskVO) throws ParseException, IOException {
+        return taskService.addAssTask(assignTaskVO);
+    }
+    @RequestMapping(value = "/reTaskPatents", method = RequestMethod.POST)
+    @Operation(summary = "返回任务专利清单")
+    public String reTaskPatents(@RequestBody TaskVO taskVO) throws ParseException, IOException {
+        return taskService.reTaskPatents(taskVO);
+    }
+
 }

+ 6 - 0
RMS/src/main/java/cn/cslg/report/entity/CompareFiles.java

@@ -32,4 +32,10 @@ public class CompareFiles extends BaseEntity<CompareFiles> {
      */
     @TableField(value = "REMARK")
     private String remark;
+    /**
+     * 状态
+     */
+    @TableField(value = "STATE")
+    private String state;
+
 }

+ 19 - 2
RMS/src/main/java/cn/cslg/report/entity/ReportField.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.util.List;
@@ -25,54 +26,70 @@ public class ReportField extends BaseEntity<ReportField> {
     /**
      * 自定义字段名称
      */
+    @Schema(description ="自定义字段名称")
+    @TableField("name")
     private String name;
 
     /**
      * 1.是标引 2.是分类
      */
+    @Schema(description ="1.是标引 2.是分类")
+    @TableField("ptype")
     private Integer ptype;
 
     /**
      * 字段类型
      */
+    @TableField("type")
+    @Schema(description ="字段类型")
     private Integer type;
 
     /**
      * 状态(正常、关闭)
      */
+    @TableField("status")
+    @Schema(description ="状态(正常、关闭)")
     private Integer status;
 
     /**
      * 备注
      */
+    @TableField("remark")
+    @Schema(description ="备注")
     private String remark;
 
     /**
      * 创建人账户ID
      */
+    @Schema(description ="创建人账户ID")
     @TableField("cid")
     private Integer createBy;
 
     /**
      * 创建时间
      */
+    @Schema(description ="创建时间")
     @TableField("createtime")
     private Integer createTime;
 
     /**
-     * 专题库
+     * 报告Id
      */
-    private Integer projectId;
+    @TableField("report_id")
+    @Schema(description ="专题库")
+    private Integer reportId;
 
     /**
      * 拓展类型
      */
+    @Schema(description ="拓展类型")
     @TableField(exist = false)
     public List<ReportFieldExpand> expand;
 
     /**
      * 选项
      */
+    @Schema(description ="选项")
     @TableField(exist = false)
     private List<ReportFieldOption> option;
 

+ 6 - 1
RMS/src/main/java/cn/cslg/report/entity/ReportFieldOption.java

@@ -1,10 +1,13 @@
 package cn.cslg.report.entity;
 
+import cn.cslg.report.common.model.BaseEntity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
 
 import java.util.List;
 
@@ -17,8 +20,10 @@ import java.util.List;
  * @since 2021-12-17
  */
 @Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
 @TableName("OS_PATENT_FILED_MULTIPLE")
-public class ReportFieldOption  {
+public class ReportFieldOption extends BaseEntity<ReportFieldOption> {
 
     /**
      * 唯一ID

+ 56 - 0
RMS/src/main/java/cn/cslg/report/entity/ReportFieldPatentLink.java

@@ -0,0 +1,56 @@
+package cn.cslg.report.entity;
+
+
+import cn.cslg.report.common.model.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * <p>
+ * 标引内容关联专利
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-02-22
+ */
+@Data
+@TableName("os_patent_field_patent_link")
+public class ReportFieldPatentLink extends BaseEntity<ReportFieldPatentLink> {
+
+    /**
+     * 分类标引id
+     */
+    @TableField("fid")
+    private Integer optionId;
+
+    /**
+     * 字段ID
+     */
+    @TableField("cid")
+    private Integer fieldId;
+
+    /**
+     * 标引类型 0-6
+     */
+    private Integer type;
+
+    /**
+     * 专利id
+     */
+    @TableField("pid")
+    private Integer patentId;
+
+    /**
+     * 专题库id
+     */
+    @TableField("tid")
+    private Integer projectId;
+
+    /**
+     * 操作人
+     */
+    @TableField("uid")
+    private Integer createBy;
+
+}

+ 33 - 0
RMS/src/main/java/cn/cslg/report/entity/ReportFieldText.java

@@ -0,0 +1,33 @@
+package cn.cslg.report.entity;
+
+
+import cn.cslg.report.common.model.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * <p>
+ * 自定义字段文本关联表
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-02-22
+ */
+@Data
+@TableName("os_patent_field_text")
+public class ReportFieldText extends BaseEntity<ReportFieldText> {
+
+    /**
+     * 文本内容
+     */
+    @TableField("name")
+    private String text;
+
+    /**
+     * 自定义字段ID
+     */
+    @TableField("cid")
+    private Integer fieldId;
+
+}

+ 58 - 0
RMS/src/main/java/cn/cslg/report/entity/ReportFieldTree.java

@@ -0,0 +1,58 @@
+package cn.cslg.report.entity;
+
+import cn.cslg.report.common.model.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * <p>
+ * 自定义字段树类型关联表
+ * </p>
+ *
+ * @author 王岩
+ * @since 2021-12-17
+ */
+@Data
+@TableName("os_patent_field_tree")
+public class ReportFieldTree extends BaseEntity<ReportFieldTree> {
+
+    /**
+     * 文本内容
+     */
+    private String name;
+
+    /**
+     * 自定义字段ID
+     */
+    @TableField("cid")
+    private Integer fieldId;
+
+    /**
+     * 父级ID
+     */
+    @TableField("sid")
+    private Integer parentId;
+
+    /**
+     * 树真正的ID
+     */
+    @TableField("zid")
+    private Integer treeId;
+
+    /**
+     * 层级
+     */
+    private Integer level;
+
+    /**
+     * 节点顺序
+     */
+    @TableField("`order`")
+    private Integer order;
+
+    /**
+     * 路径
+     */
+    private String path;
+}

+ 3 - 0
RMS/src/main/java/cn/cslg/report/entity/asso/AssoTaskPersonel.java

@@ -40,5 +40,8 @@ public class AssoTaskPersonel extends BaseEntity<AssoTaskPersonel> {
     @Schema(description = "报告ID")
     @TableField(value = "PATENT_NO")
     private String patentNo;
+    @Schema(description = "是否完成(0未完成1已完成)")
+    @TableField(value = "STATE")
+    private int state;
 
 }

+ 17 - 0
RMS/src/main/java/cn/cslg/report/mapper/ReportFieldOptionMapper.java

@@ -0,0 +1,17 @@
+package cn.cslg.report.mapper;
+
+
+import cn.cslg.report.entity.ReportFieldOption;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 自定义字段多选关联表 Mapper 接口
+ * </p>
+ *
+ * @author 王岩
+ * @since 2021-12-17
+ */
+public interface ReportFieldOptionMapper extends BaseMapper<ReportFieldOption> {
+
+}

+ 17 - 0
RMS/src/main/java/cn/cslg/report/mapper/ReportFieldPatentLinkMapper.java

@@ -0,0 +1,17 @@
+package cn.cslg.report.mapper;
+
+
+import cn.cslg.report.entity.ReportFieldPatentLink;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 标引内容关联专利 Mapper 接口
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-02-22
+ */
+public interface ReportFieldPatentLinkMapper extends BaseMapper<ReportFieldPatentLink> {
+
+}

+ 16 - 0
RMS/src/main/java/cn/cslg/report/mapper/ReportFieldTextMapper.java

@@ -0,0 +1,16 @@
+package cn.cslg.report.mapper;
+
+import cn.cslg.report.entity.ReportFieldText;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 自定义字段文本关联表 Mapper 接口
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-02-22
+ */
+public interface ReportFieldTextMapper extends BaseMapper<ReportFieldText> {
+
+}

+ 17 - 0
RMS/src/main/java/cn/cslg/report/mapper/ReportFieldTreeMapper.java

@@ -0,0 +1,17 @@
+package cn.cslg.report.mapper;
+
+
+import cn.cslg.report.entity.ReportFieldTree;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 自定义字段树类型关联表 Mapper 接口
+ * </p>
+ *
+ * @author 王岩
+ * @since 2021-12-17
+ */
+public interface ReportFieldTreeMapper extends BaseMapper<ReportFieldTree> {
+
+}

+ 62 - 39
RMS/src/main/java/cn/cslg/report/service/business/CompareFilesService.java

@@ -30,8 +30,9 @@ import java.util.stream.Collectors;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class CompareFilesService extends ServiceImpl<CompareFilesMapper, CompareFiles> {
     private final CompareFilesMapper compareFilesMapper;
-      private final OutInterfaceService outInterfaceService;
-//    public String addCompareFile(CompareFilesVO compareFilesVO){
+    private final OutInterfaceService outInterfaceService;
+
+    //    public String addCompareFile(CompareFilesVO compareFilesVO){
 //     List<CompareFiles> compareFiles =new ArrayList<>();
 //     compareFilesVO.getPatentNos().forEach(item->{
 //         CompareFiles compareFiles1 =new CompareFiles();
@@ -42,63 +43,85 @@ public class CompareFilesService extends ServiceImpl<CompareFilesMapper, Compare
 //      this.saveBatch(compareFiles);
 //        return  Response.success();
 //    }
-     @Transactional(rollbackFor = Exception.class)
+    @Transactional(rollbackFor = Exception.class)
     public String addCompareFile(CompareFilesVO compareFilesVO) throws IOException {
-        LambdaQueryWrapper<CompareFiles> queryWrapper =new LambdaQueryWrapper<>();
-        queryWrapper.eq(CompareFiles::getReportId,compareFilesVO.getReportId());
-        List<CompareFiles> compareFile1 =this.list(queryWrapper);
-        List<String> patentNoList =compareFile1.stream().map(CompareFiles::getPatentNo).collect(Collectors.toList());
-        List<CompareFiles> compareFiles =new ArrayList<>();
-        PatentVO patentVO =new PatentVO();
-        patentVO.setStartNumber(compareFilesVO.getStartNumber()-1);
+        LambdaQueryWrapper<CompareFiles> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(CompareFiles::getReportId, compareFilesVO.getReportId());
+        List<CompareFiles> compareFile1 = this.list(queryWrapper);
+        List<String> patentNoList = compareFile1.stream().map(CompareFiles::getPatentNo).collect(Collectors.toList());
+        List<CompareFiles> compareFiles = new ArrayList<>();
+        PatentVO patentVO = new PatentVO();
+        patentVO.setStartNumber(compareFilesVO.getStartNumber() - 1);
         patentVO.setEndNumber(compareFilesVO.getEndNumber());
         patentVO.setReportId(compareFilesVO.getReportId());
-        patentVO.setPatentNos(patentNoList);String res = outInterfaceService.getComPatentNos(patentVO);
-       JSONObject jsonObject =JSONObject.parseObject(res);
-       List<String> patentNos =JSONArray.parseArray(jsonObject.get("data").toString(),String.class);
-       patentNos.removeAll(compareFilesVO.getIsDelete());
-       patentNos.addAll(compareFilesVO.getIsAdd());
-       patentNos.removeAll(patentNoList);
-        patentNos.forEach(item->{
-            CompareFiles compareFiles1 =new CompareFiles();
+        patentVO.setPatentNos(patentNoList);
+        String res = outInterfaceService.getComPatentNos(patentVO);
+        JSONObject jsonObject = JSONObject.parseObject(res);
+        List<String> patentNos = JSONArray.parseArray(jsonObject.get("data").toString(), String.class);
+        patentNos.removeAll(compareFilesVO.getIsDelete());
+        patentNos.addAll(compareFilesVO.getIsAdd());
+        patentNos.removeAll(patentNoList);
+        patentNos.forEach(item -> {
+            CompareFiles compareFiles1 = new CompareFiles();
             compareFiles1.setPatentNo(item);
             compareFiles1.setReportId(compareFilesVO.getReportId());
             compareFiles.add(compareFiles1);
         });
         this.saveBatch(compareFiles);
-        return  Response.success();
+        return Response.success();
     }
 
     public String getCompareFile(PatentVO patentVO) throws IOException {
+        LambdaQueryWrapper<CompareFiles> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(CompareFiles::getReportId, patentVO.getReportId());
+        List<CompareFiles> compareFiles = this.list(queryWrapper);
+        List<String> patentNos = compareFiles.stream().map(CompareFiles::getPatentNo).collect(Collectors.toList());
+        patentVO.setPatentNos(patentNos);
+        String res = outInterfaceService.getPatentFromPAS(patentVO, 0);
+        JSONObject jsonObject = JSONObject.parseObject(res);
+        JSONObject resData = JSONObject.parseObject(jsonObject.getString("data"));
+        List<JSONObject> list = JSONArray.parseArray(resData.getString("records"), JSONObject.class);
+        List<String> temNos = new ArrayList<>();
+        for (int i = 0; i < list.size(); i++) {
+            if (patentNos.contains(list.get(i).get("patentNo").toString())) {
+                temNos.add(list.get(i).get("patentNo").toString());
+            }
+
+        }
+        int i = compareFilesMapper.selectedTotal(patentVO.getReportId());
+        Map<String, Object> map = new HashMap<>();
+        map.put("datas", resData);
+        map.put("select", temNos);
+        map.put("selectedTotal", i);
+        return Response.success(map);
+    }
 
+    //获得已经确定的对比专利详情
+    public String getSureCompareFile(PatentVO patentVO) throws IOException {
         LambdaQueryWrapper<CompareFiles> queryWrapper =new LambdaQueryWrapper<>();
         queryWrapper.eq(CompareFiles::getReportId,patentVO.getReportId());
         List<CompareFiles> compareFiles =this.list(queryWrapper);
         List<String> patentNos =compareFiles.stream().map(CompareFiles::getPatentNo).collect(Collectors.toList());
         patentVO.setPatentNos(patentNos);
-        String res =outInterfaceService.getPatentFromPAS(patentVO,0);
-        JSONObject jsonObject = JSONObject.parseObject(res);
-        JSONObject resData = JSONObject.parseObject(jsonObject.getString("data"));
-       List<JSONObject>     list=   JSONArray.parseArray(resData.getString("records"),JSONObject.class);
-        List<String> temNos =new ArrayList<>();
-   for(int i=0;i<list.size(); i++){
-       if(patentNos.contains(list.get(i).get("patentNo").toString())){
-       temNos.add(list.get(i).get("patentNo").toString());}
-
-   }
-    int i = compareFilesMapper.selectedTotal(patentVO.getReportId());
-        Map<String,Object> map =new HashMap<>();
-           map.put("datas",resData);
-           map.put("select",temNos);
-           map.put("selectedTotal",i);
-        return Response.success(map) ;
+        String res =outInterfaceService.getPatentFromPAS(patentVO,1);
+        return res;
     }
 
     public String getCompareNos(Integer reportId) throws IOException {
+        LambdaQueryWrapper<CompareFiles> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(CompareFiles::getReportId, reportId);
+        List<CompareFiles> compareFiles = this.list(queryWrapper);
+        List<String> patentNos = compareFiles.stream().map(CompareFiles::getPatentNo).collect(Collectors.toList());
+        return Response.success(patentNos);
+    }
+
+    //删除单个对比专利
+    public String deletePatentNo(Integer reportId,String pantentNo) throws IOException {
         LambdaQueryWrapper<CompareFiles> queryWrapper =new LambdaQueryWrapper<>();
-        queryWrapper.eq(CompareFiles::getReportId,reportId);
-        List<CompareFiles> compareFiles =this.list(queryWrapper);
-        List<String> patentNos =compareFiles.stream().map(CompareFiles::getPatentNo).collect(Collectors.toList());
-        return  Response.success(patentNos);
+        queryWrapper.eq(CompareFiles::getReportId,reportId)
+                    .eq(CompareFiles::getPatentNo,pantentNo);
+       this.remove(queryWrapper);
+
+        return  Response.success();
     }
 }

+ 123 - 0
RMS/src/main/java/cn/cslg/report/service/business/ReportFieldOptionService.java

@@ -0,0 +1,123 @@
+package cn.cslg.report.service.business;
+
+
+import cn.cslg.report.common.utils.Response;
+import cn.cslg.report.entity.ReportFieldOption;
+import cn.cslg.report.mapper.ReportFieldOptionMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 自定义字段多选关联表 服务实现类
+ * </p>
+ *
+ * @author 王岩
+ * @since 2021-12-17
+ */
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class ReportFieldOptionService extends ServiceImpl<ReportFieldOptionMapper, ReportFieldOption> {
+
+    private final ReportFieldPatentLinkService projectFieldPatentLinkService;
+    private final ReportFieldTreeService reportFieldTreeService;
+
+    public List<ReportFieldOption> getListByFieldId(Integer fieldId) {
+        LambdaQueryWrapper<ReportFieldOption> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ReportFieldOption::getFieldId, fieldId);
+        return this.list(queryWrapper);
+    }
+
+    public List<ReportFieldOption> getFieldOptionList(List<Integer> fieldIds) {
+        if (fieldIds == null || fieldIds.size() == 0) {
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<ReportFieldOption> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ReportFieldOption::getFieldId, fieldIds);
+        return this.list(queryWrapper);
+    }
+
+    public List<ReportFieldOption> getFieldOptionListByIds(List<Integer> ids) {
+        if (ids == null || ids.size() == 0) {
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<ReportFieldOption> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ReportFieldOption::getId, ids);
+        return this.list(queryWrapper);
+    }
+
+    public ReportFieldOption getReportFieldOptionByNameAndFieldId(String name, Integer fieldId) {
+        LambdaQueryWrapper<ReportFieldOption> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ReportFieldOption::getFieldId, fieldId);
+        queryWrapper.eq(ReportFieldOption::getName, name);
+        return this.getOne(queryWrapper);
+    }
+
+    public Integer add(ReportFieldOption option) {
+        option.insert();
+        return option.getId();
+    }
+
+    @Transactional
+    public void addBatch(List<ReportFieldOption> optionList, Integer fieldId) {
+        if (optionList.size() != 0) {
+            optionList.forEach(item -> item.setFieldId(fieldId));
+            this.saveOrUpdateBatch(optionList);
+        }
+    }
+
+    public void edit(ReportFieldOption option) {
+        option.updateById();
+    }
+
+    @Transactional
+    public void editBatch(List<ReportFieldOption> optionList, Integer fieldId) {
+        if (optionList.size() != 0) {
+            List<ReportFieldOption> tempList = this.getListByFieldId(fieldId);
+            List<Integer> deleteIds = tempList.stream().map(ReportFieldOption::getId).filter(id -> !optionList.stream().map(ReportFieldOption::getId).collect(Collectors.toList()).contains(id)).collect(Collectors.toList());
+            this.deleteByIds(deleteIds);
+            this.addBatch(optionList, fieldId);
+        } else {
+            this.deleteByFieldId(fieldId);
+        }
+    }
+
+    public void deleteByFieldId(Integer fieldId) {
+        this.remove(Wrappers.<ReportFieldOption>lambdaQuery().eq(ReportFieldOption::getFieldId, fieldId));
+    }
+
+    @Transactional
+    public void delete(Integer id) {
+        projectFieldPatentLinkService.deleteByOptionId(id);
+        this.removeById(id);
+    }
+
+    public void deleteByIds(List<Integer> ids) {
+        if (ids.size() != 0) {
+            projectFieldPatentLinkService.deleteByOptionIds(ids);
+            this.removeByIds(ids);
+        }
+    }
+
+//    public String updateReportFieldOption(ReportFieldOption reportFieldOption) {
+//        if (reportFieldOption.getType().equals(6)) {
+//            return projectFieldTreeService.updateByProjectFieldTreeNode(reportFieldOption);
+//        } else {
+//            ReportFieldOption temp = this.getReportFieldOptionByNameAndFieldId(reportFieldOption.getName(), reportFieldOption.getFieldId());
+//            if (temp != null && !temp.getId().equals(reportFieldOption.getId())) {
+//                return Response.error("选项名称已存在");
+//            }
+//            reportFieldOption.insertOrUpdate();
+//            return Response.success(reportFieldOption.getId());
+//        }
+//    }
+}

+ 334 - 0
RMS/src/main/java/cn/cslg/report/service/business/ReportFieldPatentLinkService.java

@@ -0,0 +1,334 @@
+package cn.cslg.report.service.business;
+
+import cn.cslg.report.common.model.dto.LabelDTO;
+import cn.cslg.report.common.utils.SecurityUtils.LoginUtils;
+import cn.cslg.report.common.utils.StringUtils;
+import cn.cslg.report.entity.ReportField;
+import cn.cslg.report.entity.ReportFieldPatentLink;
+import cn.cslg.report.entity.ReportFieldText;
+import cn.cslg.report.mapper.ReportFieldPatentLinkMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 标引内容关联专利 服务类
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-02-22
+ */
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class ReportFieldPatentLinkService extends ServiceImpl<ReportFieldPatentLinkMapper, ReportFieldPatentLink> {
+
+    private final ReportFieldTextService reportFieldTextService;
+    private final ReportFieldOptionService projectFieldOptionService;
+    private final ReportFieldTreeService projectFieldTreeService;
+    private final ReportFieldService reportFieldService;
+    private final LoginUtils loginUtils;
+
+    public List<ReportFieldPatentLink> getProjectPatentLinkByPatentAndProId(Integer patentId, Integer projectId) {
+        LambdaQueryWrapper<ReportFieldPatentLink> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ReportFieldPatentLink::getPatentId, patentId);
+        queryWrapper.eq(ReportFieldPatentLink::getProjectId, projectId);
+        return this.list(queryWrapper);
+    }
+
+    public List<ReportFieldPatentLink> getProjectPatentLinkByPatentAndProjectIdAndFieldId(Integer patentId, Integer projectId, Integer fieldId) {
+        LambdaQueryWrapper<ReportFieldPatentLink> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ReportFieldPatentLink::getPatentId, patentId);
+        queryWrapper.eq(ReportFieldPatentLink::getProjectId, projectId);
+        queryWrapper.eq(ReportFieldPatentLink::getFieldId, fieldId);
+        return this.list(queryWrapper);
+    }
+
+    public ReportFieldPatentLink getProjectPatentLinkByPatentAndProjectIdAndFieldIdAndOptionId(Integer patentId, Integer projectId, Integer fieldId, Integer optionId) {
+        LambdaQueryWrapper<ReportFieldPatentLink> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ReportFieldPatentLink::getPatentId, patentId);
+        queryWrapper.eq(ReportFieldPatentLink::getProjectId, projectId);
+        queryWrapper.eq(ReportFieldPatentLink::getFieldId, fieldId);
+        queryWrapper.eq(ReportFieldPatentLink::getOptionId, optionId);
+        return this.getOne(queryWrapper);
+    }
+
+    public void updateProjectPatentLink(Integer patentId, Integer type, Integer fieldId, Integer optionId, Integer userId, Integer projectId) {
+        ReportFieldPatentLink reportFieldPatentLink = new ReportFieldPatentLink();
+        reportFieldPatentLink.setType(type);
+        reportFieldPatentLink.setPatentId(patentId);
+        reportFieldPatentLink.setOptionId(optionId);
+        reportFieldPatentLink.setFieldId(fieldId);
+        reportFieldPatentLink.setCreateBy(userId);
+        reportFieldPatentLink.setProjectId(projectId);
+        reportFieldPatentLink.insert();
+    }
+
+    public List<ReportFieldPatentLink> getProjectPatentLinkByPatentIdsAndProjectId(List<Integer> patentIds, Integer projectId) {
+        if (patentIds == null || patentIds.size() == 0) {
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<ReportFieldPatentLink> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ReportFieldPatentLink::getPatentId, patentIds);
+        queryWrapper.eq(ReportFieldPatentLink::getProjectId, projectId);
+        return this.list(queryWrapper);
+    }
+
+    public List<ReportFieldPatentLink> getProjectPatentLinkByPatentIdsAndFieldId(List<Integer> patentIds, Integer fieldId) {
+        if (patentIds == null || patentIds.size() == 0) {
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<ReportFieldPatentLink> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ReportFieldPatentLink::getPatentId, patentIds);
+        queryWrapper.eq(ReportFieldPatentLink::getFieldId, fieldId);
+        return this.list(queryWrapper);
+    }
+
+//    public void updatereportFieldPatentLink(ProjectImportPatentVO params, Integer patentId) {
+//        if (params.getFieldList() != null && params.getFieldList().size() != 0) {
+//            List<ReportFieldPatentLink> tempList = this.getProjectPatentLinkByPatentAndProId(patentId, params.getProjectId());
+//            List<ReportFieldPatentLink> dataList = new ArrayList<>();
+//            params.getFieldList().forEach(item -> {
+//                ReportFieldPatentLink reportFieldPatentLink = new ReportFieldPatentLink();
+//                reportFieldPatentLink.setPatentId(patentId);
+//                reportFieldPatentLink.setProjectId(params.getProjectId());
+//                reportFieldPatentLink.setType(item.getType());
+//                reportFieldPatentLink.setFieldId(item.getFieldId());
+//                reportFieldPatentLink.setCreateBy(0);
+//                if (item.getType() == 0 || item.getType() == 1 || item.getType() == 2) {
+//                    reportFieldPatentLink.setOptionId(reportFieldTextService.add(item.getFieldId(), item.getText()));
+//                } else {
+//                    reportFieldPatentLink.setOptionId(item.getOptionId());
+//                }
+//                long count = tempList.stream().filter(temp -> temp.getPatentId().equals(patentId) && temp.getFieldId().equals(ReportFieldPatentLink.getFieldId()) && temp.getOptionId().equals(reportFieldPatentLink.getOptionId())).count();
+//                if (count == 0) {
+//                    dataList.add(reportFieldPatentLink);
+//                }
+//            });
+//            if (dataList.size() != 0) {
+//                this.saveOrUpdateBatch(dataList);
+//            }
+//        }
+//    }
+
+    public void deleteByFieldId(Integer fieldId) {
+        this.remove(Wrappers.<ReportFieldPatentLink>lambdaQuery().eq(ReportFieldPatentLink::getFieldId, fieldId));
+    }
+
+    public void deleteByOptionId(Integer optionId) {
+        this.remove(Wrappers.<ReportFieldPatentLink>lambdaQuery().eq(ReportFieldPatentLink::getOptionId, optionId));
+    }
+
+    public void deleteByOptionIds(List<Integer> optionIds) {
+        if (optionIds != null && optionIds.size() != 0) {
+            this.remove(Wrappers.<ReportFieldPatentLink>lambdaQuery().in(ReportFieldPatentLink::getOptionId, optionIds));
+        }
+    }
+
+    public void deleteByPatentIdAndProjectIdAndFieldId(Integer patentId, Integer projectId, Integer fieldId) {
+        this.remove(Wrappers.<ReportFieldPatentLink>lambdaQuery().eq(ReportFieldPatentLink::getFieldId, fieldId).eq(ReportFieldPatentLink::getProjectId, projectId).eq(ReportFieldPatentLink::getPatentId, patentId));
+    }
+
+    public void deleteByPatentIdsAndProjectIdAndFieldId(List<Integer> patentIds, Integer projectId, Integer fieldId) {
+        LambdaQueryWrapper<ReportFieldPatentLink> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ReportFieldPatentLink::getPatentId, patentIds);
+        queryWrapper.eq(ReportFieldPatentLink::getProjectId, projectId);
+        queryWrapper.eq(ReportFieldPatentLink::getFieldId, fieldId);
+        this.remove(queryWrapper);
+    }
+
+//    @Transactional
+//    public void patentBatchIndex(PatentBatchIndexVO params) {
+//        List<ReportFieldPatentLink> tempList;
+//        List<ReportField> fieldList = params.getFieldList().stream().filter(ReportField::getEnabled).collect(Collectors.toList());
+//        List<ReportFieldPatentLink> reportFieldPatentLinkList = new ArrayList<>();
+//        for (ReportField field : fieldList) {
+//            switch (field.getType()) {
+//                case 0:
+//                case 1:
+//                case 2:
+//                    this.deleteByPatentIdsAndProjectIdAndFieldId(params.getPatentIds(), params.getProjectId(), field.getId());
+//                    tempList = this.getProjectPatentLinkByPatentIdsAndProjectId(params.getPatentIds(), params.getProjectId());
+//                    tempList = tempList.stream().filter(item -> fieldList.stream().map(ReportField::getId).collect(Collectors.toList()).contains(item.getFieldId())).collect(Collectors.toList());
+//                    ReportFieldText projectFieldText = reportFieldTextService.getReportFieldTextByNameAndFieldId(field.getText(), field.getId());
+//                    if (projectFieldText == null) {
+//                        projectFieldText = new ReportFieldText();
+//                        projectFieldText.setText(field.getText());
+//                        projectFieldText.setFieldId(field.getId());
+//                        projectFieldText.insert();
+//                    }
+//                    reportFieldPatentLinkList.addAll(this.setPatentBatchIndexDataList(tempList, params.getPatentIds(), field, projectFieldText.getId(), params.getProjectId()));
+//                    break;
+//                case 3:
+//                case 4:
+//                    this.deleteByPatentIdsAndProjectIdAndFieldId(params.getPatentIds(), params.getProjectId(), field.getId());
+//                case 5:
+//                case 6:
+//                    tempList = this.getProjectPatentLinkByPatentIdsAndProjectId(params.getPatentIds(), params.getProjectId());
+//                    tempList = tempList.stream().filter(item -> fieldList.stream().map(ReportField::getId).collect(Collectors.toList()).contains(item.getFieldId())).collect(Collectors.toList());
+//                    for (Integer optionId : field.getSelected()) {
+//                        reportFieldPatentLinkList.addAll(this.setPatentBatchIndexDataList(tempList, params.getPatentIds(), field, optionId, params.getProjectId()));
+//                    }
+//                    break;
+//            }
+//        }
+//        if (reportFieldPatentLinkList.size() != 0) {
+//            this.saveOrUpdateBatch(reportFieldPatentLinkList);
+//        }
+//    }
+    private List<ReportFieldPatentLink> setPatentBatchIndexDataList(List<ReportFieldPatentLink> tempList, List<Integer> patentIds, ReportField field, Integer optionId, Integer projectId) {
+        List<ReportFieldPatentLink> dataList = new ArrayList<>();
+        for (Integer patentId : patentIds) {
+            ReportFieldPatentLink temp = tempList.stream().filter(item -> item.getFieldId().equals(field.getId()) && item.getOptionId().equals(optionId) && item.getPatentId().equals(patentId)).findFirst().orElse(null);
+            if (temp == null) {
+                ReportFieldPatentLink reportFieldPatentLink = new ReportFieldPatentLink();
+                reportFieldPatentLink.setFieldId(field.getId());
+                reportFieldPatentLink.setProjectId(projectId);
+                reportFieldPatentLink.setType(field.getType());
+                reportFieldPatentLink.setCreateBy(loginUtils.getId());
+                reportFieldPatentLink.setOptionId(optionId);
+                reportFieldPatentLink.setPatentId(patentId);
+                dataList.add(reportFieldPatentLink);
+            }
+        }
+        return dataList;
+    }
+
+//    public List<CustomFieldLabelDTO> getPatentIndexSetting2(Integer patentId, Integer projectId) {
+//        List<CustomFieldLabelDTO> dataList = new ArrayList<>();
+//        List<ReportField> projectFieldList = projectFieldService.getReportFieldByProjectId(projectId);
+//        for (ReportField projectField : projectFieldList) {
+//            PatentIndexSettingVO params = new PatentIndexSettingVO();
+//            CustomFieldLabelDTO data = new CustomFieldLabelDTO();
+//            params.setId(patentId);
+//            params.setType(projectField.getType());
+//            params.setFieldId(projectField.getId());
+//            params.setProjectId(projectId);
+//            data.setName(projectField.getName());
+//            data.setId(projectField.getId());
+//            data.setType(projectField.getType());
+//            data.setSelected(this.getPatentIndexSetting(params));
+//            dataList.add(data);
+//        }
+//        return dataList;
+//    }
+
+//    public List<LabelDTO> getPatentIndexSetting(PatentIndexSettingVO params) {
+//        List<ReportFieldPatentLink> reportFieldPatentLinkList = this.getProjectPatentLinkByPatentAndProjectIdAndFieldId(params.getId(), params.getProjectId(), params.getFieldId());
+//        List<Integer> optionIds = reportFieldPatentLinkList.stream().map(ReportFieldPatentLink::getOptionId).collect(Collectors.toList());
+//        List<LabelDTO> mapList = new ArrayList<>();
+//        switch (params.getType()) {
+//            case 0:
+//            case 1:
+//            case 2:
+//                List<ReportFieldText> projectFieldTextList = reportFieldTextService.getReportFieldTextByIds(optionIds);
+//                for (ReportFieldText projectFieldText : projectFieldTextList) {
+//                    LabelDTO map = new LabelDTO();
+//                    map.setValue(projectFieldText.getId());
+//                    map.setLabel(projectFieldText.getText());
+//                    mapList.add(map);
+//                }
+//                break;
+//            case 3:
+//            case 4:
+//            case 5:
+//                List<ReportFieldOption> projectFieldOptionList = projectFieldOptionService.getFieldOptionListByIds(optionIds);
+//                for (ReportFieldOption projectFieldOption : projectFieldOptionList) {
+//                    LabelDTO map = new LabelDTO();
+//                    map.setValue(projectFieldOption.getId());
+//                    map.setLabel(projectFieldOption.getName());
+//                    mapList.add(map);
+//                }
+//                break;
+//            case 6:
+//                List<ReportFieldTree> projectFieldTreeList = projectFieldTreeService.getReportFieldTreeOptionByIds(optionIds);
+//                for (ReportFieldTree projectFieldTree : projectFieldTreeList) {
+//                    LabelDTO map = new LabelDTO();
+//                    map.setValue(projectFieldTree.getId());
+//                    map.setLabel(projectFieldTree.getName());
+//                    mapList.add(map);
+//                }
+//                break;
+//        }
+//        return mapList;
+//    }
+
+//    @Transactional
+//    public void updatePatentIndexSetting(PatentIndexSettingVO params) {
+//        this.deleteByPatentIdAndProjectIdAndFieldId(params.getId(), params.getProjectId(), params.getFieldId());
+//        List<Integer> optionIds = params.getSelected().stream().map(LabelDTO::getValue).distinct().collect(Collectors.toList());
+//        List<String> texts = params.getSelected().stream().map(LabelDTO::getLabel).distinct().collect(Collectors.toList());
+//        List<ReportFieldPatentLink> reportFieldPatentLinkList = new ArrayList<>();
+//        switch (params.getType()) {
+//            case 0:
+//            case 1:
+//            case 2:
+//                List<ReportFieldText> tempList = reportFieldTextService.getReportFieldTextByFieldId(params.getFieldId());
+//                for (String text : texts) {
+//                    if (StringUtils.isEmpty(text)) {
+//                        continue;
+//                    }
+//                    ReportFieldText projectFieldText = tempList.stream().filter(item -> item.getText().equals(text)).findFirst().orElse(null);
+//                    if (projectFieldText == null) {
+//                        projectFieldText = new ReportFieldText();
+//                        projectFieldText.setFieldId(params.getFieldId());
+//                        projectFieldText.setText(text);
+//                        projectFieldText.insert();
+//                    }
+//                    ReportFieldPatentLink reportFieldPatentLink = new ReportFieldPatentLink();
+//                    reportFieldPatentLink.setProjectId(params.getProjectId());
+//                    reportFieldPatentLink.setPatentId(params.getId());
+//                    reportFieldPatentLink.setType(params.getType());
+//                    reportFieldPatentLink.setFieldId(params.getFieldId());
+//                    reportFieldPatentLink.setCreateBy(loginUtils.getId());
+//                    reportFieldPatentLink.setOptionId(projectFieldText.getId());
+//                    reportFieldPatentLinkList.add(reportFieldPatentLink);
+//                }
+//                break;
+//            case 3:
+//            case 4:
+//            case 5:
+//            case 6:
+//                for (Integer optionId : optionIds) {
+//                    ReportFieldPatentLink reportFieldPatentLink = new ReportFieldPatentLink();
+//                    reportFieldPatentLink.setProjectId(params.getProjectId());
+//                    reportFieldPatentLink.setPatentId(params.getId());
+//                    reportFieldPatentLink.setType(params.getType());
+//                    reportFieldPatentLink.setFieldId(params.getFieldId());
+//                    reportFieldPatentLink.setCreateBy(loginUtils.getId());
+//                    reportFieldPatentLink.setOptionId(optionId);
+//                    reportFieldPatentLinkList.add(reportFieldPatentLink);
+//                }
+//                break;
+//        }
+//        if (reportFieldPatentLinkList.size() != 0) {
+//            this.saveOrUpdateBatch(reportFieldPatentLinkList);
+//        }
+//    }
+
+//    public void importreportFieldPatentLink(List<Patent> importPatentList, List<Patent> localPatentList, List<ReportFieldPatentLink> importProjectPatentLinkList, Integer projectId, Integer userId, Integer importReportFieldId, Integer importReportFieldOptionId, Integer localReportFieldId, Integer localReportFieldOptionId) {
+//        List<ReportFieldPatentLink> importreportFieldPatentLinkList = importProjectPatentLinkList.stream().filter(item -> item.getFieldId().equals(importReportFieldId) && item.getOptionId().equals(importReportFieldOptionId)).collect(Collectors.toList());
+//        for (ReportFieldPatentLink reportFieldPatentLink : importreportFieldPatentLinkList) {
+//            Patent importPatent = importPatentList.stream().filter(item -> item.getId().equals(reportFieldPatentLink.getPatentId())).findFirst().orElse(new Patent());
+//            Patent localPatent = localPatentList.stream().filter(item -> item.getPatentNo().equals(importPatent.getPatentNo())).findFirst().orElse(null);
+//            if (localPatent == null) {
+//                continue;
+//            }
+//            reportFieldPatentLink.setId(null);
+//            reportFieldPatentLink.setCreateBy(userId);
+//            reportFieldPatentLink.setProjectId(projectId);
+//            reportFieldPatentLink.setPatentId(localPatent.getId());
+//            reportFieldPatentLink.setFieldId(localReportFieldId);
+//            reportFieldPatentLink.setOptionId(localReportFieldOptionId);
+//        }
+//        this.saveOrUpdateBatch(importreportFieldPatentLinkList);
+//    }
+}

+ 26 - 6
RMS/src/main/java/cn/cslg/report/service/business/ReportFieldService.java

@@ -32,24 +32,44 @@ import java.util.stream.Collectors;
 public class ReportFieldService extends ServiceImpl<ReportFieldMapper, ReportField> {
 
  private  final LoginUtils loginUtils;
-
+ private  final ReportFieldTextService reportFieldTextService;
+ private  final ReportFieldOptionService reportFieldOptionService;
+ private  final ReportFieldTreeService reportFieldTreeService;
+ private  final ReportFieldPatentLinkService reportFieldPatentLinkService;
     public String add(ReportField reportField) {
-        ReportField temp = this.getProjectFieldByName(reportField.getName(), reportField.getProjectId());
+        ReportField temp = this.getProjectFieldByName(reportField.getName(), reportField.getReportId());
         if (temp != null) {
             return Response.error("字段名称已存在");
         }
         reportField.setPtype(reportField.getType() == 6 ? 2 : 1);
-        reportField.setCreateBy(loginUtils.getId());
-        reportField.setCreateTime(DateUtils.getDateTime());
-        reportField.setProjectId(reportField.getProjectId());
+//        reportField.setCreateBy(loginUtils.getId());
         reportField.insert();
         return Response.success(reportField.getId());
     }
+    public String edit(ReportField reportField) {
+        ReportField temp = this.getProjectFieldByName(reportField.getName(), reportField.getReportId());
+        if (temp != null && !temp.getId().equals(reportField.getId())) {
+            return Response.error("字段名称已存在");
+        }
+        reportField.setPtype(reportField.getType() == 6 ? 2 : 1);
+        reportField.updateById();
+        return Response.success(true);
+    }
+  @Transactional
+  public String delete(Integer id) {
+      this.removeById(id);
+      reportFieldTextService.deleteByFieldId(id);
+      reportFieldOptionService.deleteByFieldId(id);
+      reportFieldTreeService.deleteByFieldId(id);
+      reportFieldPatentLinkService.deleteByFieldId(id);
+        return Response.success(true);
+   }
+
 
     public ReportField getProjectFieldByName(String name, Integer projectId) {
         LambdaQueryWrapper<ReportField> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(ReportField::getName, name);
-        queryWrapper.eq(ReportField::getProjectId, projectId);
+        queryWrapper.eq(ReportField::getReportId, projectId);
         return this.getOne(queryWrapper);
     }
 

+ 74 - 0
RMS/src/main/java/cn/cslg/report/service/business/ReportFieldTextService.java

@@ -0,0 +1,74 @@
+package cn.cslg.report.service.business;
+
+
+
+import cn.cslg.report.entity.ReportFieldText;
+import cn.cslg.report.mapper.ReportFieldTextMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 自定义字段文本关联表 服务类
+ * </p>
+ *
+ * @author 王岩
+ * @since 2022-02-22
+ */
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class ReportFieldTextService extends ServiceImpl<ReportFieldTextMapper, ReportFieldText> {
+
+    public ReportFieldText getProjectFieldTextByNameAndFieldId(String text, Integer fieldId) {
+        LambdaQueryWrapper<ReportFieldText> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ReportFieldText::getFieldId, fieldId);
+        queryWrapper.eq(ReportFieldText::getText, text);
+        return this.getOne(queryWrapper);
+    }
+
+    public List<ReportFieldText> getProjectFieldTextByFieldIds(List<Integer> fieldIds) {
+        if (fieldIds == null || fieldIds.size() == 0) {
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<ReportFieldText> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ReportFieldText::getFieldId, fieldIds);
+        return this.list(queryWrapper);
+    }
+
+    public List<ReportFieldText> getProjectFieldTextByIds(List<Integer> ids) {
+        if (ids == null || ids.size() == 0) {
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<ReportFieldText> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ReportFieldText::getId, ids);
+        return this.list(queryWrapper);
+    }
+
+    public List<ReportFieldText> getProjectFieldTextByFieldId(Integer fieldId) {
+        LambdaQueryWrapper<ReportFieldText> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ReportFieldText::getFieldId, fieldId);
+        return this.list(queryWrapper);
+    }
+
+    public void deleteByFieldId(Integer fieldId) {
+        this.remove(Wrappers.<ReportFieldText>lambdaQuery().eq(ReportFieldText::getFieldId, fieldId));
+    }
+
+    public Integer add(Integer fieldId, String text) {
+        ReportFieldText temp = this.getProjectFieldTextByNameAndFieldId(text, fieldId);
+        if (temp == null) {
+            temp = new ReportFieldText();
+            temp.setText(text);
+            temp.setFieldId(fieldId);
+            temp.insert();
+        }
+        return temp.getId();
+    }
+}

+ 320 - 0
RMS/src/main/java/cn/cslg/report/service/business/ReportFieldTreeService.java

@@ -0,0 +1,320 @@
+package cn.cslg.report.service.business;
+
+
+import cn.cslg.report.common.utils.Response;
+import cn.cslg.report.entity.ReportField;
+import cn.cslg.report.entity.ReportFieldOption;
+import cn.cslg.report.entity.ReportFieldTree;
+import cn.cslg.report.mapper.ReportFieldTreeMapper;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.core.lang.tree.TreeNode;
+import cn.hutool.core.lang.tree.TreeNodeConfig;
+import cn.hutool.core.lang.tree.TreeUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 自定义字段树类型关联表 服务实现类
+ * </p>
+ *
+ * @author 王岩
+ * @since 2021-12-17
+ */
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class ReportFieldTreeService extends ServiceImpl<ReportFieldTreeMapper, ReportFieldTree> {
+
+    private final ReportFieldPatentLinkService reportFieldPatentLinkService;
+    private final ReportFieldService reportFieldService;
+
+    public Integer getTreeNodeIdByPathNameAndUpdateTreeData(List<String> pathName, ReportField projectField) {
+        List<Integer> treeNode = new ArrayList<>();
+        for (int i = 0; i < pathName.size(); i++) {
+            ReportFieldTree projectFieldTree = this.getReportFieldTreeOptionByFieldIdAndNameAndLevel(projectField.getId(), (i == 0 ? 0 : treeNode.get(i - 1)), pathName.get(i), i + 1);
+            if (projectFieldTree == null) {
+                projectFieldTree = new ReportFieldTree();
+                projectFieldTree.setFieldId(projectField.getId());
+                projectFieldTree.setName(pathName.get(i));
+                projectFieldTree.setLevel(i + 1);
+                projectFieldTree.insert();
+            }
+            treeNode.add(projectFieldTree.getId());
+            projectFieldTree.setTreeId(projectFieldTree.getId());
+            projectFieldTree.setOrder(projectFieldTree.getId());
+            projectFieldTree.setPath(StringUtils.join(treeNode, "/"));
+            if (treeNode.size() == 1) {
+                projectFieldTree.setParentId(0);
+            } else {
+                projectFieldTree.setParentId(treeNode.get(i - 1));
+            }
+            projectFieldTree.updateById();
+        }
+        if (treeNode.size() == 0) {
+            return 0;
+        }
+        return treeNode.get(treeNode.size() - 1);
+    }
+
+    public List<ReportFieldTree> getReportFieldTreeOptionByFieldId(Integer fieldId) {
+        LambdaQueryWrapper<ReportFieldTree> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ReportFieldTree::getFieldId, fieldId);
+        queryWrapper.orderByAsc(ReportFieldTree::getOrder);
+        return this.list(queryWrapper);
+    }
+
+    public ReportFieldTree getReportFieldTreeNodeByFieldIdAndParentIdAndName(Integer fieldId, Integer parentId, String name) {
+        LambdaQueryWrapper<ReportFieldTree> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ReportFieldTree::getFieldId, fieldId);
+        queryWrapper.eq(ReportFieldTree::getParentId, parentId);
+        queryWrapper.eq(ReportFieldTree::getName, name);
+        return this.getOne(queryWrapper);
+    }
+
+    public ReportFieldTree getReportFieldTreeOptionByFieldIdAndNameAndLevel(Integer fieldId, Integer parentId, String name, Integer level) {
+        LambdaQueryWrapper<ReportFieldTree> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ReportFieldTree::getFieldId, fieldId);
+        queryWrapper.eq(ReportFieldTree::getName, name);
+        queryWrapper.eq(ReportFieldTree::getLevel, level);
+        queryWrapper.eq(ReportFieldTree::getParentId, parentId);
+        return this.getOne(queryWrapper);
+    }
+
+    public ReportFieldTree getReportFieldTreeOptionByFieldIdAndNameAndLevel(Integer fieldId, String name, Integer level) {
+        LambdaQueryWrapper<ReportFieldTree> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ReportFieldTree::getFieldId, fieldId);
+        queryWrapper.eq(ReportFieldTree::getName, name);
+        queryWrapper.eq(ReportFieldTree::getLevel, level);
+        return this.getOne(queryWrapper);
+    }
+
+    public List<ReportFieldTree> getReportFieldTreeOptionByFieldIds(List<Integer> fieldIds) {
+        if (fieldIds == null || fieldIds.size() == 0) {
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<ReportFieldTree> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ReportFieldTree::getFieldId, fieldIds);
+        queryWrapper.orderByAsc(ReportFieldTree::getOrder);
+        return this.list(queryWrapper);
+    }
+
+    public List<ReportFieldTree> getReportFieldTreeOptionByIds(List<Integer> ids) {
+        if (ids == null || ids.size() == 0) {
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<ReportFieldTree> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ReportFieldTree::getId, ids);
+        queryWrapper.orderByAsc(ReportFieldTree::getOrder);
+        return this.list(queryWrapper);
+    }
+
+    public List<Tree<Integer>> getReportFieldTreeNodeByFieldId(Integer fieldId) {
+        List<ReportFieldTree> dataList = this.getReportFieldTreeOptionByFieldId(fieldId);
+        for (ReportFieldTree tree : dataList) {
+            List<ReportFieldTree> tempList = dataList.stream().filter(item -> item.getParentId().equals(tree.getTreeId())).collect(Collectors.toList());
+            tempList.forEach(item -> item.setParentId(tree.getId()));
+        }
+        TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
+        treeNodeConfig.setWeightKey("order");
+        List<TreeNode<Integer>> nodeList = CollUtil.newArrayList();
+        for (ReportFieldTree data : dataList) {
+            nodeList.add(new TreeNode<>(data.getId(), data.getParentId(), data.getName(), data.getOrder()));
+        }
+        List<Tree<Integer>> treeNodes = TreeUtil.build(nodeList, 0, treeNodeConfig, (treeNode, tree) -> {
+            ReportFieldTree temp = dataList.stream().filter(item -> item.getId().equals(treeNode.getId())).findFirst().orElse(new ReportFieldTree());
+            tree.setId(treeNode.getId());
+            tree.setParentId(treeNode.getParentId());
+            tree.setWeight(treeNode.getWeight());
+            tree.setName(treeNode.getName());
+            tree.putExtra("level", temp.getLevel());
+            tree.putExtra("path", temp.getPath());
+            tree.putExtra("fieldId", temp.getFieldId());
+        });
+        return treeNodes;
+    }
+
+    public Integer getFieldTreeNodeTotal(Integer fieldId) {
+        return (int) this.count(Wrappers.<ReportFieldTree>lambdaQuery().eq(ReportFieldTree::getFieldId, fieldId));
+    }
+
+    public Integer getFieldTreeParentId(Integer id) {
+        ReportFieldTree tree = this.getById(id);
+        if (tree != null) {
+            return tree.getTreeId();
+        }
+        return 0;
+    }
+
+    public Integer[] getFieldTreeNodePath(Integer id, Integer parentId) {
+        ReportFieldTree parentNode = this.getById(parentId);
+        String[] nodePath = parentNode.getPath().split("/");
+        Integer[] nodeIds = new Integer[nodePath.length + 1];
+        for (int i = 0; i < nodeIds.length - 1; i++) {
+            nodeIds[i] = Integer.parseInt(nodePath[i]);
+        }
+        nodeIds[nodePath.length] = id;
+        return nodeIds;
+    }
+
+    @Transactional
+    public Integer add(ReportFieldTree tree) {
+//        Integer total = this.getFieldTreeNodeTotal(tree.getFieldId());
+        tree.setOrder(-1);
+        tree.insert();
+        this.edit(tree);
+        return tree.getId();
+    }
+
+    @Transactional
+    public void edit(ReportFieldTree tree) {
+        Integer[] path = tree.getParentId() == 0 ? new Integer[]{tree.getId()} : this.getFieldTreeNodePath(tree.getId(), tree.getParentId());
+        tree.setPath(StringUtils.join(path, "/"));
+        tree.setLevel(path.length);
+        tree.setParentId(this.getFieldTreeParentId(tree.getParentId()));
+        tree.setTreeId(tree.getId());
+        if (tree.getOrder() == -1) {
+            tree.setOrder(tree.getId());
+        }
+        tree.updateById();
+    }
+
+    @Transactional
+    public void addBatch(List<ReportFieldOption> optionList, Integer fieldId) {
+        this.saveOrUpdateOption(optionList, fieldId, 0);
+        this.updateNodePath(fieldId);
+    }
+
+    @Transactional
+    public void editBatch(List<ReportFieldOption> optionList, Integer fieldId) {
+        List<ReportFieldTree> tempList = this.getReportFieldTreeOptionByFieldId(fieldId);
+        List<Integer> nodeIds = this.getTreeNodeIds(optionList, new ArrayList<>());
+        List<Integer> deleteIds = tempList.stream().map(ReportFieldTree::getId).filter(id -> !nodeIds.contains(id)).collect(Collectors.toList());
+        this.deleteByIds(deleteIds);
+        this.saveOrUpdateOption(optionList, fieldId, 0);
+        this.updateNodePath(fieldId);
+    }
+
+    private List<Integer> getTreeNodeIds(List<ReportFieldOption> optionList, List<Integer> ids) {
+        for (ReportFieldOption option : optionList) {
+            if (option.getId() != null) {
+                ids.add(option.getId());
+            }
+            if (option.getChildren() != null && option.getChildren().size() != 0) {
+                this.getTreeNodeIds(option.getChildren(), ids);
+            }
+        }
+        return ids;
+    }
+
+    private void saveOrUpdateOption(List<ReportFieldOption> optionList, Integer fieldId, Integer parentId) {
+        for (ReportFieldOption option : optionList) {
+            option.setParentId(parentId);
+            option.setFieldId(fieldId);
+            Integer id = this.saveOption(option);
+            if (option.getChildren() != null && option.getChildren().size() != 0) {
+                this.saveOrUpdateOption(option.getChildren(), fieldId, id);
+            }
+        }
+    }
+
+    private Integer saveOption(ReportFieldOption option) {
+        ReportFieldTree tree = new ReportFieldTree();
+        tree.setId(option.getId());
+        tree.setName(option.getName());
+        tree.setFieldId(option.getFieldId());
+        tree.setOrder(option.getOrder());
+        tree.setParentId(option.getParentId());
+        if (tree.getId() == null) {
+            tree.insert();
+        }
+        tree.setTreeId(tree.getId());
+        tree.updateById();
+        return tree.getId();
+    }
+
+    private void updateNodePath(Integer fieldId) {
+        List<ReportFieldTree> treeList = this.getReportFieldTreeOptionByFieldId(fieldId);
+        treeList.forEach(tree -> {
+            Integer[] paths = this.findTreeNodePath(tree.getId());
+            tree.setLevel(paths.length);
+            tree.setPath(StringUtils.join(paths, "/"));
+        });
+        this.saveOrUpdateBatch(treeList);
+    }
+
+    public Integer[] findTreeNodePath(Integer id) {
+        List<Integer> paths = new ArrayList<>();
+        List<Integer> parentPath = this.findParentPath(id, paths);
+        Collections.reverse(parentPath);
+        return parentPath.toArray(new Integer[parentPath.size()]);
+    }
+
+    private List<Integer> findParentPath(Integer id, List<Integer> paths) {
+        paths.add(id);
+        ReportFieldTree tree = this.getById(id);
+        if (tree.getParentId() != 0) {
+            findParentPath(tree.getParentId(), paths);
+        }
+        return paths;
+    }
+
+    public void deleteByFieldId(Integer fieldId) {
+        this.remove(Wrappers.<ReportFieldTree>lambdaQuery().eq(ReportFieldTree::getFieldId, fieldId));
+    }
+
+    private List<Integer> findTreeNodes(Integer id, List<Integer> nodes) {
+        nodes.add(id);
+        List<ReportFieldTree> treeList = this.list(Wrappers.<ReportFieldTree>lambdaQuery().eq(ReportFieldTree::getParentId, id));
+        if (treeList != null && treeList.size() != 0) {
+            treeList.forEach(item -> {
+                nodes.add(item.getId());
+                this.findTreeNodes(item.getId(), nodes);
+            });
+        }
+        return nodes;
+    }
+
+    @Transactional
+    public void delete(Integer id) {
+        List<Integer> nodes = this.findTreeNodes(id, new ArrayList<>());
+        reportFieldPatentLinkService.deleteByOptionIds(nodes);
+        this.removeByIds(nodes);
+    }
+
+    @Transactional
+    public void deleteByIds(List<Integer> ids) {
+        if (ids != null && ids.size() != 0) {
+            reportFieldPatentLinkService.deleteByOptionIds(ids);
+            this.removeByIds(ids);
+        }
+    }
+
+    @Transactional
+    public String updateByReportFieldTreeNode(ReportFieldOption projectFieldOption) {
+        ReportFieldTree temp = this.getReportFieldTreeNodeByFieldIdAndParentIdAndName(projectFieldOption.getFieldId(), projectFieldOption.getParentId(), projectFieldOption.getName());
+        if (temp != null && !temp.getId().equals(projectFieldOption.getId())) {
+            return Response.error("选项名称已存在");
+        }
+        ReportFieldTree projectFieldTree = new ReportFieldTree();
+        projectFieldTree.setId(projectFieldOption.getId());
+        projectFieldTree.setFieldId(projectFieldOption.getFieldId());
+        projectFieldTree.setOrder(projectFieldOption.getOrder());
+        projectFieldTree.setParentId(projectFieldOption.getParentId());
+        projectFieldTree.setName(projectFieldOption.getName());
+        projectFieldTree.insertOrUpdate();
+        this.edit(projectFieldTree);
+        return Response.success(projectFieldTree.getId());
+    }
+}

+ 71 - 56
RMS/src/main/java/cn/cslg/report/service/business/TaskService.java

@@ -1,23 +1,18 @@
 package cn.cslg.report.service.business;
 
 import cn.cslg.report.common.model.BaseVO;
-import cn.cslg.report.common.model.vo.AssignTaskVO;
-import cn.cslg.report.common.model.vo.AuditTaskVO;
-import cn.cslg.report.common.model.vo.PersonnelVO;
-import cn.cslg.report.common.model.vo.TaskVO;
+import cn.cslg.report.common.model.vo.*;
 import cn.cslg.report.common.utils.CacheUtils;
 import cn.cslg.report.common.utils.DataUtils;
 import cn.cslg.report.common.utils.LogExceptionUtil;
 import cn.cslg.report.common.utils.Response;
-import cn.cslg.report.entity.PatentRight;
-import cn.cslg.report.entity.Personnel;
-import cn.cslg.report.entity.Report;
-import cn.cslg.report.entity.Task;
+import cn.cslg.report.entity.*;
 import cn.cslg.report.entity.asso.AssoTaskPersonel;
 import cn.cslg.report.mapper.TaskMapper;
 import cn.cslg.report.service.OutInterfaceService;
 import cn.dev33.satoken.stp.StpUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -32,9 +27,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import java.io.IOException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -44,6 +37,7 @@ public class TaskService extends ServiceImpl<TaskMapper, Task> {
     private final ReportService reportService;
     private final OutInterfaceService outInterfaceService;
     private final CacheUtils cacheUtils;
+    private final CompareFilesService compareFilesService;
     private final AssoTaskPersonelService assoTaskPersonelService;
 
     @Transactional(rollbackFor = Exception.class)
@@ -182,56 +176,77 @@ public class TaskService extends ServiceImpl<TaskMapper, Task> {
 
     //添加分配任务
     @Transactional(rollbackFor = Exception.class)
-    public String addAuditTask(AssignTaskVO assignTaskVO) throws ParseException, IOException {
-
-        List<String> patentNos =new ArrayList<>();
-
-        // 往task表添加数据
-        List<AssignTaskVO.personPatents> personPatents = assignTaskVO.getAssigns();
-        List<Integer> ids = personPatents.stream().map(AssignTaskVO.personPatents::getPersonId).collect(Collectors.toList());
+    public String addAssTask(AssignTaskVO assignTaskVO) throws ParseException, IOException {
+        //遍历assignTaskVO的分配人员信息assigns,在任务表里插入分配任务
         List<Task> tasks = new ArrayList<>();
-        String resBody = outInterfaceService.getPersonnelByIdsFromPCS(ids);
-        JSONObject jsonObject = JSONObject.parseObject(resBody);
-        //解析jason获得标的专利的权要
-        List<Personnel> personnels = JSON.parseArray(jsonObject.getString("data"), Personnel.class);
-        //获得登录人的信息
-        PersonnelVO personnelVO = cacheUtils.getLoginUser(StpUtil.getLoginIdAsInt());
-        //填充task数据
-        for (int i = 0; i < ids.size(); i++) {
-            Integer handlePersonId = ids.get(i);
-            Personnel personnel = new Personnel();
-            personnel = personnels.stream().filter(item -> item.getId().equals(handlePersonId)).findFirst().orElse(new Personnel());
-            Task task = new Task();
-            task.setReportId(assignTaskVO.getTask().getReportId());
-            task.setTaskName(assignTaskVO.getTask().getTaskName());
-            task.setBeginTime(assignTaskVO.getTask().getBeginTime());
-            task.setEndTime(assignTaskVO.getTask().getBeginTime());
-            task.setHandlePersonId(handlePersonId);
-            task.setHandlePersonName(personnel.getPersonnelName());
-            task.setType(assignTaskVO.getTask().getType());
-            task.setCreateID(personnelVO.getId());
-            task.setCreateName(personnelVO.getName());
-            task.setTaskStatus(0);
-            tasks.add(task);
+        List<String> selectedNos = new ArrayList<>();
+        //记录总共专利号数量
+        int num = 0;
+        List<AssignTaskVO.assignPatents> personPatents = assignTaskVO.getAssigns();
+        for (int i = 0; i < personPatents.size(); i++) {
+            selectedNos.addAll(personPatents.get(i).getPatentNos());
+            num += personPatents.get(i).getAssignCount();
+        }
+        num += selectedNos.size();
+        // 根据报告Id获得待分配的专利号
+        LambdaQueryWrapper<CompareFiles> wrapper = new LambdaQueryWrapper<>();
+        wrapper.select(CompareFiles::getPatentNo)
+                .eq(CompareFiles::getReportId, assignTaskVO.getReportId())
+        .eq(CompareFiles::getState,0);
+        List<CompareFiles> compareFiles = compareFilesService.list(wrapper);
+        List<String> patentNos = compareFiles.stream().map(CompareFiles::getPatentNo).collect(Collectors.toList());
+        if (patentNos.size() > num) {
+            return Response.error("分配数量超过未分配总数");
         }
-        this.saveBatch(tasks);
+        //待分配的专利号列表剔除分配信息中已经存在的专利号
+        patentNos.removeAll(selectedNos);
         List<AssoTaskPersonel> assoTaskPersonels = new ArrayList<>();
-        for (int i = 0; i < tasks.size(); i++) {
-            Integer handleId = tasks.get(i).getId();
-            AssignTaskVO.personPatents assionPatents = personPatents.stream().filter(item -> item.getPersonId() == handleId).findFirst().orElse(null);
-            if (assionPatents.getPatentNos() != null) {
-                for (int t = 0; t < assionPatents.getPatentNos().size(); i++) {
-                    AssoTaskPersonel assoTaskPersonel = new AssoTaskPersonel();
-                    assoTaskPersonel.setTaskId(tasks.get(i).getId());
-                    assoTaskPersonel.setTaskType(tasks.get(i).getType());
-                    assoTaskPersonel.setReportId(tasks.get(i).getReportId());
-                    assoTaskPersonel.setPatentNo(assionPatents.getPatentNos().get(t));
-                    assoTaskPersonels.add(assoTaskPersonel);
-                }
+        //记录分配的位置
+        int flag = 0;
+        //遍历assignTaskVO的分配人员信息assigns,装配人员所被分配的专利信息
+        for (int i = 0; i < personPatents.size(); i++) {
+            Task task = new Task();
+            task.setTaskName(assignTaskVO.getTaskName());
+            task.setReportId(assignTaskVO.getReportId());
+            task.setType(2);
+            task.setTaskStatus(0);
+            task.setProgress(0.0);
+            task.setEndTime(assignTaskVO.getEndTime());
+            task.setRemark(assignTaskVO.getRemark());
+            //task.setCreateID();
+            task.insert();
+            //根据数量从分配的专利号列表中截取该数量的专利号,加上分配信息的专利号进行装配
+            List<String> partNos = patentNos.subList(flag, flag+personPatents.get(i).getAssignCount()-1);
+            flag += personPatents.get(i).getAssignCount();
+            partNos.addAll(personPatents.get(i).getPatentNos());
+            for (int t = 0; t < partNos.size(); t++) {
+                AssoTaskPersonel assoTaskPersonel = new AssoTaskPersonel();
+                assoTaskPersonel.setTaskId(task.getId());
+                assoTaskPersonel.setTaskType(2);
+                assoTaskPersonel.setPatentNo(partNos.get(t));
+                assoTaskPersonel.setPersonelId(personPatents.get(i).getPersonId());
+                assoTaskPersonel.setPersonelType(1);
+                assoTaskPersonel.setReportId(assignTaskVO.getReportId());
+                assoTaskPersonels.add(assoTaskPersonel);
             }
         }
-          assoTaskPersonelService.saveBatch(assoTaskPersonels);
-
+        // 分配信息入库
+        assoTaskPersonelService.saveBatch(assoTaskPersonels);
         return Response.success();
     }
+
+    //返回任务专利清单
+    @Transactional(rollbackFor = Exception.class)
+    public String  reTaskPatents(TaskVO taskVo) throws ParseException, IOException {
+        //根据任务Id和类型获得任务的清单
+        LambdaQueryWrapper<AssoTaskPersonel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoTaskPersonel::getTaskId, taskVo.getTaskId());
+        List<AssoTaskPersonel> assoTaskPersonels = assoTaskPersonelService.list(queryWrapper);
+        List<String> PatentNos =assoTaskPersonels.stream().filter(item->item.getState()==taskVo.getTaskStatus()).map(AssoTaskPersonel::getPatentNo).collect(Collectors.toList());
+        //根据清单获得获得专利详情
+        PatentVO patentVO =new PatentVO();
+        patentVO.setPatentNos(PatentNos);
+        String res = outInterfaceService.getPatentFromPAS(patentVO, 1);
+        return Response.success(res);
+    }
 }