Bladeren bron

7/5 xiexiang

xiexiang 2 jaren geleden
bovenliggende
commit
f2eb717df1

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

@@ -0,0 +1,29 @@
+package cn.cslg.report.common.model.dto.invalidReReport;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/7/4
+ */
+@Data
+@Accessors(chain = true)
+public class CheckReFeaturesDTO {
+    /**
+     * 报告id
+     */
+    private Integer reportId;
+
+    /**
+     * 权要id
+     */
+    private Integer rightId;
+
+    /**
+     * 特征内容和位置集合
+     */
+    private List<InvalidReasonDTO.featuresIn> features;
+}

+ 4 - 10
RMS/src/main/java/cn/cslg/report/common/model/dto/invalidReReport/InvalidReasonDTO.java

@@ -18,29 +18,26 @@ public class InvalidReasonDTO {
     /**
      * 报告id
      */
-
     private Integer reportId;
 
     /**
      * 涉及内容(0为说明书,其他为权要id
      */
-
     private Integer content;
 
     /**
      * 选择特征
      */
     private List<featuresIn> features;
+
     /**
      * 相关证据
      */
-
     private String proofStr;
 
     /**
      * 陈述意见
      */
-
     private String argument_str;
 
     /**
@@ -59,9 +56,10 @@ public class InvalidReasonDTO {
     private List<proofGroupIn> proofGroups;
 
 
-       @Data
+    @Data
     public static class proofGroupIn{
-           private Integer id;
+
+        private Integer id;
         /**
          * 描述
          */
@@ -73,7 +71,6 @@ public class InvalidReasonDTO {
         private String argument_str;
 
         private List<Integer> proofIds;
-
     }
 
     @Data
@@ -87,8 +84,5 @@ public class InvalidReasonDTO {
          * 内容起始位置
          */
         private Integer position;
-
-
-
     }
 }

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

@@ -0,0 +1,22 @@
+package cn.cslg.report.common.model.vo.invalidReReport;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @Author xiexiang
+ * @Date 2023/7/4
+ */
+@Data
+@Accessors(chain = true)
+public class QueryAllFeaturesVO {
+    /**
+     * 位置
+     */
+    private Integer position;
+
+    /**
+     * 特征内容
+     */
+    private String featureStr;
+}

+ 23 - 5
RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/InvalidReasonController.java

@@ -2,6 +2,7 @@ package cn.cslg.report.controller.InvalidReReport;
 
 import cn.cslg.report.common.core.base.Constants;
 import cn.cslg.report.common.model.dto.ShareReportDTO;
+import cn.cslg.report.common.model.dto.invalidReReport.CheckReFeaturesDTO;
 import cn.cslg.report.common.model.dto.invalidReReport.InvalidReasonDTO;
 import cn.cslg.report.common.utils.Response;
 import cn.cslg.report.entity.invalidReReport.InvalidReason;
@@ -33,16 +34,24 @@ public class InvalidReasonController {
     @Operation(summary = "添加无效理由和证据")
     @PostMapping("/addInvalidReason")
     public String addInvalidReason(@RequestBody InvalidReasonDTO invalidReasonDTO) {
-       invalidReasonService.addInvalidReason(invalidReasonDTO);
-        return Response.success();
+        if(invalidReasonDTO != null) {
+            invalidReasonService.addInvalidReason(invalidReasonDTO);
+            return Response.success("新增成功");
+        } else {
+            return Response.error("参数不能为空");
+        }
     }
 
-
     @Operation(summary = "删除无效理由和证据")
     @PostMapping("/deleteInvalidReason")
     public String deleteInvalidReason(@RequestBody List<Integer> ids) {
-        invalidReasonService.deleteInvalidReason(ids);
-        return Response.success();
+        if(ids != null && ids.size() != 0){
+            invalidReasonService.deleteInvalidReason(ids);
+            return Response.success("删除成功");
+        } else {
+            return Response.error("参数不能为空");
+        }
+
     }
 
 
@@ -64,4 +73,13 @@ public class InvalidReasonController {
 
         return Response.success();
     }
+
+
+    @Operation(summary = "测试检测插入特征是否重复")
+    @PostMapping("/testCheckReFeature")
+    public String testCheckReFeature(@RequestBody CheckReFeaturesDTO checkReFeaturesDTO) throws IOException {
+        Boolean isFlag = invalidReasonService.checkReFeatures(checkReFeaturesDTO);
+        return Response.success(isFlag);
+    }
+
 }

+ 3 - 3
RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/ProofGroupController.java

@@ -36,9 +36,9 @@ public class ProofGroupController {
 
     @Operation(summary = "添加证据组合")
     @PostMapping("/add")
-    public String add(@RequestBody ProofGroupDTO proofGroupDTO) {
-        if (proofGroupDTO != null) {
-            proofGroupService.addProofGroup(proofGroupDTO);
+    public String add(@RequestBody List<ProofGroupDTO> proofGroupDTOS) {
+        if (proofGroupDTOS != null && proofGroupDTOS.size() != 0) {
+            proofGroupService.addProofGroup(proofGroupDTOS);
             return Response.success("添加证据组合成功");
         } else {
             return Response.error("添加证据组合错误");

+ 3 - 12
RMS/src/main/java/cn/cslg/report/entity/invalidReReport/AssoInReasonFeatures.java

@@ -5,8 +5,6 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
-import java.util.Date;
-
 /**
  * 陈述意见表
  *
@@ -14,25 +12,18 @@ import java.util.Date;
  * @Date 2023/6/28
  */
 @Data
-@TableName(value = "ASSO_INREASON_FEATURES")
-public class AssoInReasonFeatures extends BaseEntity<AssoInReasonFeatures> {
+@TableName(value = "ASSO_POSITION_FEATURES")
+public class AssoPositionFeatures extends BaseEntity<AssoPositionFeatures> {
     /**
      * 特征id
      */
     @TableField("FEATURES_ID")
     private Integer featuresID;
 
-    /**
-     * 无效理由id
-     */
-    @TableField("INREASON_ID")
-    private Integer invalidReasonId;
 
     /**
-     * 创建人
+     * 位置
      */
     @TableField("POSITION")
     private Integer position;
-
-
 }

+ 9 - 0
RMS/src/main/java/cn/cslg/report/mapper/FeatureMapper.java

@@ -1,5 +1,6 @@
 package cn.cslg.report.mapper;
 
+import cn.cslg.report.common.model.vo.invalidReReport.QueryAllFeaturesVO;
 import cn.cslg.report.entity.Features;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
@@ -12,4 +13,12 @@ import java.util.List;
 public interface FeatureMapper extends BaseMapper<Features> {
     public List<Features> getSignPatentNo(@Param("contents") List<String> contents ,@Param("patentNos") String patentNos);
     Features find(@Param("id") int id);
+
+    /**
+     * 查询特征内容以及位置
+     * @param reportId
+     * @param rightId
+     * @return
+     */
+    List<QueryAllFeaturesVO> queryAllFeatures(Integer reportId, Integer rightId);
 }

+ 14 - 0
RMS/src/main/java/cn/cslg/report/mapper/InvalidReReport/AssoPositionFeaturesMapper.java

@@ -0,0 +1,14 @@
+package cn.cslg.report.mapper.InvalidReReport;
+
+import cn.cslg.report.entity.invalidReReport.AssoPositionFeatures;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 特征位置关联
+ * @Author xiexiang
+ * @Date 2023/7/4
+ */
+@Repository
+public interface AssoPositionFeaturesMapper extends BaseMapper<AssoPositionFeatures> {
+}

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

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

+ 0 - 6
RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/AssoProofGroupService.java

@@ -1,19 +1,13 @@
 package cn.cslg.report.service.business.InvalidReReport;
 
-import cn.cslg.report.common.model.dto.invalidReReport.ProofDetailDTO;
-import cn.cslg.report.common.utils.Response;
 import cn.cslg.report.entity.invalidReReport.AssoProofGroup;
-import cn.cslg.report.entity.invalidReReport.ProofDetail;
 import cn.cslg.report.mapper.InvalidReReport.AssoProofGroupMapper;
-import cn.cslg.report.mapper.InvalidReReport.ProofDetailMapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
-
 
 @Service
 @Slf4j

+ 178 - 21
RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/InvalidReasonService.java

@@ -1,33 +1,112 @@
 package cn.cslg.report.service.business.InvalidReReport;
 
 import cn.cslg.report.common.model.dto.ShareReportDTO;
+import cn.cslg.report.common.model.dto.invalidReReport.CheckReFeaturesDTO;
 import cn.cslg.report.common.model.dto.invalidReReport.InvalidReasonDTO;
+import cn.cslg.report.common.model.dto.invalidReReport.ProofGroupDTO;
+import cn.cslg.report.common.model.vo.invalidReReport.QueryAllFeaturesVO;
 import cn.cslg.report.common.utils.Response;
-import cn.cslg.report.entity.Template;
+import cn.cslg.report.entity.Features;
+import cn.cslg.report.entity.Report;
+import cn.cslg.report.entity.invalidReReport.AssoPositionFeatures;
 import cn.cslg.report.entity.invalidReReport.InvalidReason;
+import cn.cslg.report.entity.invalidReReport.ProofGroup;
+import cn.cslg.report.exception.XiaoShiException;
+import cn.cslg.report.mapper.FeatureMapper;
 import cn.cslg.report.mapper.InvalidReReport.InvalidReasonMapper;
-import cn.cslg.report.mapper.TemplateMapper;
+import cn.cslg.report.service.business.ReportService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import io.swagger.v3.oas.annotations.Operation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
 import java.io.IOException;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 @Service
 @Slf4j
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, InvalidReason> {
+    private final ReportService reportService;
+    private final AssoPositionFeaturesService assoPositionFeaturesService;
+    private final FeatureMapper featureMapper;
+    private final ProofGroupService proofGroupService;
+
+    /**
+     * 判断特征是否有重复的方法
+     * @param checkReFeaturesDTO
+     */
+    public Boolean checkReFeatures(CheckReFeaturesDTO checkReFeaturesDTO){
+        //查出表中制定报告和权要的全部特征内容和位置
+         List<QueryAllFeaturesVO> queryAllFeaturesVOS = featureMapper.queryAllFeatures(checkReFeaturesDTO.getReportId(), checkReFeaturesDTO.getRightId());
+        //List<QueryAllFeaturesVO> list = queryAllFeaturesVOS.stream().sorted(Comparator.comparing(QueryAllFeaturesVO::getPosition)).collect(Collectors.toList());
+        //取出需要插入的特征内容和位置
+        List<InvalidReasonDTO.featuresIn> features = checkReFeaturesDTO.getFeatures();
+        //定义一个map装载所有的特征内容和位置
+        Map<Integer, Integer> map = new HashMap<>();
+        //遍历装载查询出来的全部特征内容和位置
+        for(QueryAllFeaturesVO queryAllFeaturesVO:queryAllFeaturesVOS){
+            //位置
+            Integer position = queryAllFeaturesVO.getPosition();
+            //特征内容字符串的长度
+            Integer length = queryAllFeaturesVO.getFeatureStr().length();
+            if(position != null && length > 0) {
+                //如果map中已经有了初始位置,无论长度如何都重复
+                if (map.containsKey(position)) {
+                    return false;
+                } else {
+                    map.put(position, length);
+                }
+            } else {
+                throw new XiaoShiException("未查询到位置");
+            }
+        }
+        //遍历装载需要插入的特征内容和位置
+        for(InvalidReasonDTO.featuresIn featuresIn:features){
+            //如果map中已经有了初始位置,无论长度如何都重复
+            if(map.containsKey(featuresIn.getPosition())) {
+                return false;
+            } else {
+                map.put(featuresIn.getPosition(), featuresIn.getFeatureStr().length());
+            }
+        }
+        //set中没有重复元素
+        Set<Integer> keySet = map.keySet();
+        //获取到所有的初始位置,并排序
+        List<Integer> positions = new ArrayList<>(keySet);
+        Collections.sort(positions);
+        //遍历需要插入的特征内容和位置
+        for(InvalidReasonDTO.featuresIn featuresIn:features) {
+            //需检查是否重复的特征内容的初始位置 在集合中的位置
+            Integer index = positions.indexOf(featuresIn.getPosition());
+            //需检查是否重复的特征内容的末尾位置
+            Integer endPosition = featuresIn.getPosition() + featuresIn.getFeatureStr().length();
+            //前面一个特征内容的初始位置
+            Integer preFeaInitialPos = index > 0 ? positions.get(index - 1) : -1;
+            //前面一个特征内容的长度
+            Integer preLength = map.get(preFeaInitialPos);
+            //前面一个特征的末尾位置
+            Integer preEndPosition = preFeaInitialPos + preLength -1;
+            //后面一个特征内容的初始位置
+            Integer nextFeaInitialPos = index < positions.size() - 1 ? positions.get(index + 1) : -1;
+            //判断是否与前面一个特征内容重复(前面一个特征内容的末尾位置如果比插入的特征内容的初始位置大,则重复了)
+            if(preEndPosition > featuresIn.getPosition()){
+                return false;
+            } else if(endPosition > nextFeaInitialPos){//判断是否与后面一个特征内容重复(如果插入的特征内容的末尾位置,比后面一个特征内容的初始位置大,则重复)
+                return false;
+            }
+        }
+        return true;
+    }
+
+
     /**
      * 添加无效理由和证据
      * @param invalidReasonDTO 无效理由和证据Dto类
@@ -35,31 +114,109 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
      */
     @Transactional(rollbackFor = Exception.class)
     public String addInvalidReason(InvalidReasonDTO invalidReasonDTO) {
-      //判断invalidName的类型
-        // 若类型为2,3则proofGroups不能为空,features不能为空
-
-        //复制DTO类字段到InvalidReason实体类并保存入库
-        //若类型为2,3根据proofGroups保存 proofGroup
-        //若类型为2,3检查features是否有交集(根据位置和字符串长度判断)若有则返回
-        //若类型为2,3根据features保存 Feature(标的专利号(根据报告id查询标的专利号),权要id(DTO类的content字段),特征内容,报告id)
-        //若类型为2,3根据features保存 feature和 invalidReson关联表(特征id,invalidReasonId,位置)
-        return Response.success();
-
+        InvalidReason invalidReason = new InvalidReason();
+        //判断invalidName的类型
+        Integer invalidName = invalidReasonDTO.getInvalidName();
+        //若类型为1,则为说明书公开不充分
+        //涉及内容为说明书,手动输入无效证据
+        if(invalidName.equals(1)) {
+            BeanUtils.copyProperties(invalidReasonDTO, invalidReason);
+            invalidReason.insert();
+        }
+        //若类型为0、2、3
+        if(invalidReasonDTO.getInvalidName().equals(0) || invalidReasonDTO.getInvalidName().equals(2) || invalidReasonDTO.getInvalidName().equals(3)) {
+            //则选择特征不能为空
+            if (invalidReasonDTO.getFeatures() != null) {
+                //若类型为0,则为“权利要求不清楚”,需要选择涉及内容(content)并输入相关证据(proofStr)
+                if(invalidName.equals(0)){
+                    if(invalidReasonDTO.getProofStr() != null && invalidReasonDTO.getProofStr() != ""){
+                        //复制DTO类字段到InvalidReason实体类并保存入库
+                        BeanUtils.copyProperties(invalidReasonDTO, invalidReason);
+                        invalidReason.insert();
+                    } else {
+                        return Response.error("相关证据不能为空");
+                    }
+                } else if(invalidName.equals(2) || invalidName.equals(3)){//若类型为2,3则proofGroups不能为空
+                    if(invalidReasonDTO.getProofGroups()!= null){
+                        //复制DTO类字段到InvalidReason实体类并保存入库
+                        BeanUtils.copyProperties(invalidReasonDTO, invalidReason);
+                        invalidReason.insert();
+                        //根据proofGroups保存proofGroup
+                        List<ProofGroupDTO> proofGroupDTOS = new ArrayList<>();
+                        for(InvalidReasonDTO.proofGroupIn proofGroupIn:invalidReasonDTO.getProofGroups()){
+                            ProofGroupDTO proofGroupDTO = new ProofGroupDTO();
+                            proofGroupDTO.setInvalidReasonId(invalidReason.getId());//无效理由id
+                            proofGroupDTO.setDescription(proofGroupIn.getDescription());//描述
+                            proofGroupDTO.setArgument_str(proofGroupIn.getArgument_str());//陈述意见
+                            proofGroupDTO.setProofIds(proofGroupIn.getProofIds());//证据ids
+                        }
+                        proofGroupService.addProofGroup(proofGroupDTOS);
+                    } else {
+                        return Response.error("证据组合不能为空");
+                    }
+                }
+                //若类型为0,2,3检查features是否有交集(根据位置和字符串长度判断)若有则返回
+                Features features = new Features();
+                //特征内容
+                List<InvalidReasonDTO.featuresIn> featuresIns = invalidReasonDTO.getFeatures();
+                //检查特征内容是否有交集(根据位置和字符串长度判断)若有则返回
+                CheckReFeaturesDTO checkReFeaturesDTO = new CheckReFeaturesDTO();
+                checkReFeaturesDTO.setReportId(invalidReasonDTO.getReportId());
+                checkReFeaturesDTO.setRightId(invalidReasonDTO.getContent());
+                checkReFeaturesDTO.setFeatures(featuresIns);
+                Boolean isFlag = this.checkReFeatures(checkReFeaturesDTO);
+                if (isFlag == false) {
+                    return Response.error("特征内容重复");
+                }
+                //标的专利号,权要id,特征内容,报告id
+                //通过报告id查询标的专利号
+                Integer reportId = invalidReasonDTO.getReportId();
+                LambdaQueryWrapper<Report> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.select(Report::getSignPatentNo);
+                queryWrapper.eq(Report::getId, reportId);
+                Report report = reportService.getOne(queryWrapper);
+                features.setSignPatentNo(report.getSignPatentNo());
+                //权要id(DTO类的content字段)
+                features.setRightId(invalidReasonDTO.getContent());
+                //报告id
+                features.setReportId(reportId);
+                //遍历特征内容集合,保存到表(类型为0,2,3都可以)
+                for (int i = 0; i < featuresIns.size(); i++) {
+                    //若类型为0,2,3保存到特征表
+                    InvalidReasonDTO.featuresIn featuresIn = featuresIns.get(i);
+                    features.setContent(featuresIn.getFeatureStr());
+                    features.insert();
+                    //若类型为0,2,3保存到特征与位置关联表(特征id,位置)
+                    AssoPositionFeatures assoPositionFeatures = new AssoPositionFeatures();
+                    assoPositionFeatures.setFeaturesID(features.getId());
+                    assoPositionFeatures.setPosition(featuresIn.getPosition());
+                    assoPositionFeatures.insert();
+                }
+            } else {
+                return Response.error("选择特征不能为空");
+            }
+            return Response.success("添加成功");
+        } else {
+            throw new XiaoShiException("未知无效理由类型");
+        }
     }
 
     /**
-     *
+     * 删除无效理由
      * @param ids 无效理由id
      * @return
      * @throws IOException
      */
     @Transactional(rollbackFor = Exception.class)
     public String deleteInvalidReason(List<Integer> ids) {
-          //判断ids是否为空 ,为空则返回
-         //根据ids删除feature和 invalidReson关联表内容
         //根据ids删除proofGroup表内容
+        LambdaQueryWrapper<ProofGroup> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.select(ProofGroup::getId);
+        queryWrapper.in(ProofGroup::getInvalidReasonId, ids);
+        proofGroupService.remove(queryWrapper);
         //根据ids删除InvalidReason内容
-        return Response.success();
+        this.removeByIds(ids);
+        return Response.success("删除成功");
     }
 
     /**

+ 28 - 26
RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/ProofGroupService.java

@@ -37,34 +37,36 @@ public class ProofGroupService extends ServiceImpl<ProofGroupMapper,ProofGroup>
     private final AssoProofGroupService assoProofGroupService;
 
     /**
-     * 添加证据组合
-     * @param proofGroupDTO
+     * 批量添加证据组合
+     * @param proofGroupDTOS
      */
-    public void addProofGroup(ProofGroupDTO proofGroupDTO) {
-        //判断proofIds是否为空,若为空则返回
-        if (proofGroupDTO.getProofIds() != null && proofGroupDTO.getProofIds().size() != 0){
-            //添加证据组合
-            ProofGroup proofGroup = new ProofGroup();
-            BeanUtils.copyProperties(proofGroupDTO, proofGroup);
-            //获取当前登录人信息
-            PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
-            proofGroup.setCreateId(personnelVO.getId());
-//            proofGroup.setCreateId(1);
-            proofGroup.insert();
-            //添加证据组合和证据关联
-            //批量插入
-            List<AssoProofGroup> assoProofGroups = new ArrayList<>();
-            for(int i = 0; i < proofGroupDTO.getProofIds().size(); i++) {
-                AssoProofGroup assoProofGroup = new AssoProofGroup();
-                assoProofGroup.setGroupId(proofGroup.getId());
-                assoProofGroup.setProofId(proofGroupDTO.getProofIds().get(i));
-                assoProofGroup.setCreateId(personnelVO.getId());
-//                assoProofGroup.setCreateId(1);
-                assoProofGroups.add(assoProofGroup);
+    public void addProofGroup(List<ProofGroupDTO> proofGroupDTOS) {
+        for(ProofGroupDTO proofGroupDTO:proofGroupDTOS){
+            //判断proofIds是否为空,若为空则返回
+            if (proofGroupDTO.getProofIds() != null && proofGroupDTO.getProofIds().size() != 0) {
+                //添加证据组合
+                ProofGroup proofGroup = new ProofGroup();
+                BeanUtils.copyProperties(proofGroupDTO, proofGroup);
+                //获取当前登录人信息
+                PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+                proofGroup.setCreateId(personnelVO.getId());
+    //            proofGroup.setCreateId(1);
+                proofGroup.insert();
+                //添加证据组合和证据关联
+                //批量插入
+                List<AssoProofGroup> assoProofGroups = new ArrayList<>();
+                for (int i = 0; i < proofGroupDTO.getProofIds().size(); i++) {
+                    AssoProofGroup assoProofGroup = new AssoProofGroup();
+                    assoProofGroup.setGroupId(proofGroup.getId());
+                    assoProofGroup.setProofId(proofGroupDTO.getProofIds().get(i));
+                    assoProofGroup.setCreateId(personnelVO.getId());
+    //                assoProofGroup.setCreateId(1);
+                    assoProofGroups.add(assoProofGroup);
+                }
+                assoProofGroupService.saveBatch(assoProofGroups);
+            } else {
+                throw new XiaoShiException("传入数据不能为空");
             }
-            assoProofGroupService.saveBatch(assoProofGroups);
-        } else {
-            throw new XiaoShiException("传入数据不能为空");
         }
     }
 

+ 9 - 0
RMS/src/main/resources/mapper/FeatureMapper.xml

@@ -16,4 +16,13 @@
     <select id="find" resultType="cn.cslg.report.entity.Features">
         select * from FEATURES where ID=#{id}
     </select>
+
+    <resultMap id="queryAllFeaturesResultMap" type="cn.cslg.report.common.model.vo.invalidReReport.QueryAllFeaturesVO">
+        <result column="POSITION" property="position"/>
+        <result column="CONTENT" property="featureStr"/>
+    </resultMap>
+
+    <select id="queryAllFeatures" resultMap="queryAllFeaturesResultMap">
+        SELECT a.CONTENT, b.POSITION FROM FEATURES a LEFT JOIN ASSO_POSITION_FEATURES b ON a.ID = b.FEATURES_ID WHERE REPORT_ID = #{reportId} AND RIGHT_ID = #{rightId};
+    </select>
 </mapper>