|
@@ -0,0 +1,493 @@
|
|
|
|
+package cn.cslg.pas.service.business;
|
|
|
|
+
|
|
|
|
+import cn.cslg.pas.common.dto.business.GetFeatureSplitDTO;
|
|
|
|
+import cn.cslg.pas.common.dto.business.TortCompareRecordDTO;
|
|
|
|
+import cn.cslg.pas.common.dto.business.TortDTO;
|
|
|
|
+import cn.cslg.pas.common.dto.business.TortTaskResultDTO;
|
|
|
|
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
|
|
|
|
+import cn.cslg.pas.common.utils.CacheUtils;
|
|
|
|
+import cn.cslg.pas.common.utils.LoginUtils;
|
|
|
|
+import cn.cslg.pas.common.utils.StringUtils;
|
|
|
|
+import cn.cslg.pas.common.vo.PatentRightVo;
|
|
|
|
+import cn.cslg.pas.common.vo.RePatentClaim;
|
|
|
|
+import cn.cslg.pas.common.vo.business.*;
|
|
|
|
+import cn.cslg.pas.domain.business.FTOCompareRecord;
|
|
|
|
+import cn.cslg.pas.domain.business.Feature;
|
|
|
|
+import cn.cslg.pas.domain.business.ProjectTask;
|
|
|
|
+import cn.cslg.pas.domain.business.ReportProject;
|
|
|
|
+import cn.cslg.pas.exception.UnLoginException;
|
|
|
|
+import cn.cslg.pas.exception.XiaoShiException;
|
|
|
|
+import cn.cslg.pas.mapper.FTOCompareRecordMapper;
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.context.annotation.Lazy;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.web.bind.annotation.RequestBody;
|
|
|
|
+
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * FTO对比记录的Service层
|
|
|
|
+ * @Author xiexiang
|
|
|
|
+ * @Date 2023/12/8
|
|
|
|
+ */
|
|
|
|
+@Service
|
|
|
|
+@Slf4j
|
|
|
|
+public class TortCompareRecordService extends ServiceImpl<FTOCompareRecordMapper, FTOCompareRecord> {
|
|
|
|
+ @Autowired
|
|
|
|
+ private CacheUtils cacheUtils;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private LoginUtils loginUtils;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private FeatureService featureService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ReportProjectService reportProjectService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ @Lazy
|
|
|
|
+ private ProjectTaskService projectTaskService;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 新增侵权对比结果
|
|
|
|
+ *
|
|
|
|
+ * @param tortCompareRecordDTO
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public List<Integer> addTortCompareRecord(TortCompareRecordDTO tortCompareRecordDTO) {
|
|
|
|
+ //获取登录人信息
|
|
|
|
+ PersonnelVO personnelVO = new PersonnelVO();
|
|
|
|
+ try {
|
|
|
|
+ personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ throw new UnLoginException("未登录");
|
|
|
|
+ }
|
|
|
|
+ Integer projectId = tortCompareRecordDTO.getProjectId();
|
|
|
|
+ if (projectId == null) {
|
|
|
|
+ throw new XiaoShiException("projectId不能为空");
|
|
|
|
+ }
|
|
|
|
+ //根据projctId查询出专利号
|
|
|
|
+ LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ queryWrapper.eq(ReportProject::getProjectId, projectId);
|
|
|
|
+ List<ReportProject> reportProjects = reportProjectService.list(queryWrapper);
|
|
|
|
+ String patentNo = "";
|
|
|
|
+ if (!reportProjects.isEmpty()) {
|
|
|
|
+ ReportProject reportProject = reportProjects.get(0);
|
|
|
|
+ patentNo = reportProject.getSignPatentNo();
|
|
|
|
+ } else {
|
|
|
|
+ throw new XiaoShiException("未查询到报告专利号");
|
|
|
|
+ }
|
|
|
|
+ List<TortDTO> tortDTOS = tortCompareRecordDTO.getTortDTOS();
|
|
|
|
+ //根据专利号和projectId,删除特征
|
|
|
|
+ LambdaQueryWrapper<Feature> deleteWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ deleteWrapper.eq(Feature::getPatentNo, patentNo)
|
|
|
|
+ .eq(Feature::getProjectId, projectId);
|
|
|
|
+ featureService.remove(deleteWrapper);
|
|
|
|
+ //根据报告id删除侵权对比结果数据
|
|
|
|
+ LambdaQueryWrapper<FTOCompareRecord> deleteWrapper2 = new LambdaQueryWrapper<>();
|
|
|
|
+ deleteWrapper2.eq(FTOCompareRecord::getProjectId, projectId);
|
|
|
|
+ this.remove(deleteWrapper2);
|
|
|
|
+ //新增侵权对比结果集合
|
|
|
|
+ List<FTOCompareRecord> ftoCompareRecords = new ArrayList<>();
|
|
|
|
+ //遍历传入集合
|
|
|
|
+ if (!tortDTOS.isEmpty()) {
|
|
|
|
+ for (TortDTO tortDTO : tortDTOS) {
|
|
|
|
+ Feature feature = new Feature();
|
|
|
|
+ feature.setRightSort(tortDTO.getRightSort());
|
|
|
|
+ feature.setPatentNo(patentNo);
|
|
|
|
+ feature.setProjectId(projectId);
|
|
|
|
+ feature.setContent(tortDTO.getContent());
|
|
|
|
+ feature.setExplainText(tortDTO.getExplainText());
|
|
|
|
+ feature.setCreateId(personnelVO.getId());
|
|
|
|
+ feature.setRightType(tortDTO.getRightType());
|
|
|
|
+ feature.insert();
|
|
|
|
+ //获取特征id
|
|
|
|
+ Integer featureId = feature.getId();
|
|
|
|
+ if (tortDTO.getCompareResult() != null || tortDTO.getCompareDescription() != null || tortDTO.getTargetDescription() != null) {
|
|
|
|
+ //插入侵权分析对比结果
|
|
|
|
+ FTOCompareRecord ftoCompareRecord = new FTOCompareRecord();
|
|
|
|
+ ftoCompareRecord.setProjectId(projectId);
|
|
|
|
+ ftoCompareRecord.setFeatureId(featureId);
|
|
|
|
+ ftoCompareRecord.setCompareResult(tortDTO.getCompareResult());
|
|
|
|
+ ftoCompareRecord.setCompareDescription(tortDTO.getCompareDescription());
|
|
|
|
+ ftoCompareRecord.setTargetDescription(tortDTO.getTargetDescription());
|
|
|
|
+ ftoCompareRecord.setCreateId(personnelVO.getId());
|
|
|
|
+ ftoCompareRecords.add(ftoCompareRecord);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ List<Integer> ids = new ArrayList<>();
|
|
|
|
+ if (!ftoCompareRecords.isEmpty()) {
|
|
|
|
+ this.saveBatch(ftoCompareRecords);
|
|
|
|
+ ids = ftoCompareRecords.stream().map(FTOCompareRecord::getId).collect(Collectors.toList());
|
|
|
|
+ }
|
|
|
|
+ return ids;
|
|
|
|
+ } else {
|
|
|
|
+ throw new XiaoShiException("未传入特征集合");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 查询侵权分析对比结果VO
|
|
|
|
+ * @param getFeatureSplitDTO
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public TortCompareRecordVO getTortCompareRecord(GetFeatureSplitDTO getFeatureSplitDTO){
|
|
|
|
+ //判断参数不能为空
|
|
|
|
+ Integer projectId = getFeatureSplitDTO.getProjectId();
|
|
|
|
+ if (projectId == null) {
|
|
|
|
+ throw new XiaoShiException("projectId为空");
|
|
|
|
+ }
|
|
|
|
+ if (getFeatureSplitDTO.getIfReSplit() == null) {
|
|
|
|
+ throw new XiaoShiException("ifReSplit不能为空");
|
|
|
|
+ }
|
|
|
|
+ if (getFeatureSplitDTO.getSplitBy() == null) {
|
|
|
|
+ throw new XiaoShiException("splitBy不能为空");
|
|
|
|
+ }
|
|
|
|
+ if (getFeatureSplitDTO.getSplitType() == null) {
|
|
|
|
+ throw new XiaoShiException("splitType不能为空");
|
|
|
|
+ }
|
|
|
|
+ //返回的VO类
|
|
|
|
+ TortCompareRecordVO tortCompareRecordVO = new TortCompareRecordVO();
|
|
|
|
+ tortCompareRecordVO.setProjectId(projectId);
|
|
|
|
+ //根据projectId查询专利号
|
|
|
|
+ LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ queryWrapper.eq(ReportProject::getProjectId, projectId);
|
|
|
|
+ ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
|
|
|
|
+ String patentNo = reportProject.getSignPatentNo();
|
|
|
|
+ //新建查询拆分特征DTO
|
|
|
|
+ SplitVO splitVO = new SplitVO();
|
|
|
|
+ BeanUtils.copyProperties(getFeatureSplitDTO, splitVO);
|
|
|
|
+ splitVO.setPatentNo(patentNo);
|
|
|
|
+ List<PatentRightVo> patentRightVos = new ArrayList<>();
|
|
|
|
+ //判断是否重拆
|
|
|
|
+ if (getFeatureSplitDTO.getIfReSplit() == true) {//重拆
|
|
|
|
+ //重拆需要清空原有特征表、对比结果表
|
|
|
|
+ LambdaQueryWrapper<FTOCompareRecord> deleteWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ deleteWrapper.eq(FTOCompareRecord::getProjectId, projectId);
|
|
|
|
+ this.remove(deleteWrapper);
|
|
|
|
+ //清空特征表
|
|
|
|
+ //根据重拆条件拆分权要保存到特征表
|
|
|
|
+ try {
|
|
|
|
+ patentRightVos = featureService.splitPatentFeature(splitVO);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ throw new XiaoShiException("查询特征出错");
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ //不重拆
|
|
|
|
+ try {
|
|
|
|
+ patentRightVos = featureService.splitPatentFeature(splitVO);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ throw new XiaoShiException("查询特征出错");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (!patentRightVos.isEmpty()) {
|
|
|
|
+ //根据projectId查询
|
|
|
|
+ //新建权要层信息
|
|
|
|
+ List<TortRightVO> tortRightVOS = new ArrayList<>();
|
|
|
|
+ //遍历装载权要层信息
|
|
|
|
+ patentRightVos.forEach(item -> {
|
|
|
|
+ TortRightVO tortRightVO = new TortRightVO();
|
|
|
|
+ BeanUtils.copyProperties(item, tortRightVO);
|
|
|
|
+ //新建特征与侵权分析对比结果VOS
|
|
|
|
+ List<TortVO> tortVOS = new ArrayList<>();
|
|
|
|
+ //特征信息
|
|
|
|
+ List<Feature> features = item.getFeatures();
|
|
|
|
+ LambdaQueryWrapper<FTOCompareRecord> queryWrapper2 = new LambdaQueryWrapper<>();
|
|
|
|
+ queryWrapper2.eq(FTOCompareRecord::getProjectId, projectId);
|
|
|
|
+ List<FTOCompareRecord> ftoCompareRecords = this.list(queryWrapper2);
|
|
|
|
+ tortVOS = this.loadTortVO(features, ftoCompareRecords);
|
|
|
|
+ tortRightVO.setTortVOS(tortVOS);
|
|
|
|
+ tortRightVOS.add(tortRightVO);
|
|
|
|
+ });
|
|
|
|
+ tortCompareRecordVO.setTortRightVOS(tortRightVOS);
|
|
|
|
+ } else {
|
|
|
|
+ throw new XiaoShiException("特征查询错误");
|
|
|
|
+ }
|
|
|
|
+ return tortCompareRecordVO;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 从侵权分析中获得对比结果,并复制保存
|
|
|
|
+ * @param projectId
|
|
|
|
+ * @param taskId
|
|
|
|
+ * @param createId
|
|
|
|
+ */
|
|
|
|
+ public void copyTortCompareRecords(Integer projectId, Integer taskId, String createId){
|
|
|
|
+ if (projectId != null && taskId != null) {
|
|
|
|
+ LambdaQueryWrapper<FTOCompareRecord> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ queryWrapper.eq(FTOCompareRecord::getProjectId, projectId);
|
|
|
|
+ List<FTOCompareRecord> ftoCompareRecords = this.list(queryWrapper);
|
|
|
|
+ if (!ftoCompareRecords.isEmpty()) {
|
|
|
|
+ List<FTOCompareRecord> newTorts = new ArrayList<>();
|
|
|
|
+ ftoCompareRecords.forEach(item -> {
|
|
|
|
+ FTOCompareRecord newTort = new FTOCompareRecord();
|
|
|
|
+ newTort.setCompareResult(item.getCompareResult());
|
|
|
|
+ newTort.setCompareDescription(item.getCompareDescription());
|
|
|
|
+ newTort.setProjectId(projectId);
|
|
|
|
+ newTort.setProjectTaskId(taskId);
|
|
|
|
+ newTort.setFeatureId(item.getFeatureId());
|
|
|
|
+ newTort.setTargetDescription(item.getTargetDescription());
|
|
|
|
+ newTort.setIfOriginal(true);
|
|
|
|
+ newTort.setIfFinal(false);
|
|
|
|
+ newTort.setCreateId(createId);
|
|
|
|
+ newTorts.add(newTort);
|
|
|
|
+ });
|
|
|
|
+ this.saveBatch(newTorts);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ throw new XiaoShiException("projectId不能为空");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 保存侵权分析协同任务结果
|
|
|
|
+ * @param tortTaskResultDTO
|
|
|
|
+ */
|
|
|
|
+ public List<Integer> addTortTaskResult(TortTaskResultDTO tortTaskResultDTO){
|
|
|
|
+ if (tortTaskResultDTO == null) {
|
|
|
|
+ throw new XiaoShiException("入参不能为空");
|
|
|
|
+ }
|
|
|
|
+ Integer projectId = null;
|
|
|
|
+ if (tortTaskResultDTO.getTaskId() != null) {
|
|
|
|
+ LambdaQueryWrapper<ProjectTask> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ queryWrapper.eq(ProjectTask::getId, tortTaskResultDTO.getTaskId());
|
|
|
|
+ ProjectTask projectTask = projectTaskService.getOne(queryWrapper, false);
|
|
|
|
+ projectId = projectTask.getProjectId();
|
|
|
|
+ } else {
|
|
|
|
+ throw new XiaoShiException("任务id不能为空");
|
|
|
|
+ }
|
|
|
|
+ //获取登录人信息
|
|
|
|
+ PersonnelVO personnelVO = new PersonnelVO();
|
|
|
|
+ try {
|
|
|
|
+ personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ throw new UnLoginException("未登录");
|
|
|
|
+ }
|
|
|
|
+ List<TortDTO> tortDTOS = tortTaskResultDTO.getTortDTOS();
|
|
|
|
+ List<Integer> ids = new ArrayList<>();
|
|
|
|
+ if (tortDTOS != null && !tortDTOS.isEmpty()) {
|
|
|
|
+ List<FTOCompareRecord> ftoCompareRecords = new ArrayList<>();
|
|
|
|
+ for (TortDTO item : tortDTOS) {
|
|
|
|
+ if (item.getCompareResult() != null || StringUtils.isNotBlank(item.getCompareDescription()) || StringUtils.isNotBlank(item.getTargetDescription())) {
|
|
|
|
+ FTOCompareRecord ftoCompareRecord = new FTOCompareRecord();
|
|
|
|
+ ftoCompareRecord.setCompareResult(item.getCompareResult());
|
|
|
|
+ ftoCompareRecord.setCompareDescription(item.getCompareDescription());
|
|
|
|
+ ftoCompareRecord.setTargetDescription(item.getTargetDescription());
|
|
|
|
+ ftoCompareRecord.setFeatureId(item.getFeatureId());
|
|
|
|
+ ftoCompareRecord.setProjectId(projectId);
|
|
|
|
+ ftoCompareRecord.setProjectTaskId(tortTaskResultDTO.getTaskId());
|
|
|
|
+ ftoCompareRecord.setCreateId(personnelVO.getId());
|
|
|
|
+ ftoCompareRecord.setIfOriginal(false);
|
|
|
|
+ ftoCompareRecord.setIfFinal(false);
|
|
|
|
+ ftoCompareRecords.add(ftoCompareRecord);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (!ftoCompareRecords.isEmpty()) {
|
|
|
|
+ //先删除表中原来的
|
|
|
|
+ LambdaQueryWrapper<FTOCompareRecord> deleteWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ deleteWrapper.eq(FTOCompareRecord::getIfOriginal, false)
|
|
|
|
+ .eq(FTOCompareRecord::getCreateId, personnelVO.getId())
|
|
|
|
+ .eq(FTOCompareRecord::getProjectTaskId, tortTaskResultDTO.getTaskId());
|
|
|
|
+ this.remove(deleteWrapper);
|
|
|
|
+ //再更新
|
|
|
|
+ this.saveBatch(ftoCompareRecords);
|
|
|
|
+ ids = ftoCompareRecords.stream().map(FTOCompareRecord::getId).collect(Collectors.toList());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return ids;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 查询侵权分析协同前后对比结果
|
|
|
|
+ * @param taskId
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public TortCompareRecordVO getAllTortTaskResult(Integer taskId) {
|
|
|
|
+ //新建返回VO
|
|
|
|
+ TortCompareRecordVO tortCompareRecordVO = new TortCompareRecordVO();
|
|
|
|
+ //根据任务id查询报告id
|
|
|
|
+ LambdaQueryWrapper<ProjectTask> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ queryWrapper.eq(ProjectTask::getId, taskId);
|
|
|
|
+ ProjectTask projectTask = projectTaskService.getOne(queryWrapper, false);
|
|
|
|
+ if (projectTask != null) {
|
|
|
|
+ Integer projectId = projectTask.getProjectId();
|
|
|
|
+ tortCompareRecordVO.setProjectId(projectId);
|
|
|
|
+ //根据报告id查询专利号
|
|
|
|
+ LambdaQueryWrapper<ReportProject> queryWrapper1 = new LambdaQueryWrapper<>();
|
|
|
|
+ queryWrapper1.eq(ReportProject::getProjectId, projectId);
|
|
|
|
+ ReportProject reportProject = reportProjectService.getOne(queryWrapper1, false);
|
|
|
|
+ if (reportProject != null) {
|
|
|
|
+ String patentNo = reportProject.getSignPatentNo();
|
|
|
|
+ //根据专利号查询权要
|
|
|
|
+ try {
|
|
|
|
+ List<PatentRightVo> patentRightVos = new ArrayList<>();
|
|
|
|
+ List<RePatentClaim> patentRights = featureService.getRightListByNo(patentNo);
|
|
|
|
+ LambdaQueryWrapper<Feature> wrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ wrapper.eq(Feature::getProjectId, projectId)
|
|
|
|
+ .eq(Feature::getPatentNo, patentNo);
|
|
|
|
+ List<Feature> allFeatures = featureService.list(wrapper);
|
|
|
|
+ patentRightVos = featureService.loadPatentRightVO(patentRights, allFeatures, projectId, patentNo);
|
|
|
|
+ List<TortRightVO> tortRightVOS = this.loadTortRightVOS(taskId, projectId, patentRightVos);
|
|
|
|
+ tortCompareRecordVO.setTortRightVOS(tortRightVOS);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ throw new XiaoShiException("未查询到拆分下的权要");
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ throw new XiaoShiException("未查询到报告");
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ throw new XiaoShiException("未查询到协同任务");
|
|
|
|
+ }
|
|
|
|
+ return tortCompareRecordVO;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 根据projectId和权要集合装载返回侵权分析对比结果页面VO
|
|
|
|
+ * @param projectId
|
|
|
|
+ * @param taskId
|
|
|
|
+ * @param patentRightVos
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public List<TortRightVO> loadTortRightVOS(Integer taskId, Integer projectId, List<PatentRightVo> patentRightVos){
|
|
|
|
+ if (patentRightVos != null && !patentRightVos.isEmpty()) {
|
|
|
|
+ //新建权要层信息
|
|
|
|
+ List<TortRightVO> tortRightVOS = new ArrayList<>();
|
|
|
|
+ //遍历装载权要层信息
|
|
|
|
+ patentRightVos.forEach(item -> {
|
|
|
|
+ TortRightVO tortRightVO = new TortRightVO();
|
|
|
|
+ BeanUtils.copyProperties(item, tortRightVO);
|
|
|
|
+ //新建特征与侵权分析对比结果VOS
|
|
|
|
+ List<Feature> features = item.getFeatures();
|
|
|
|
+ LambdaQueryWrapper<FTOCompareRecord> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ queryWrapper.eq(FTOCompareRecord::getProjectId, projectId)
|
|
|
|
+ .eq(FTOCompareRecord::getProjectTaskId, taskId)
|
|
|
|
+ .eq(FTOCompareRecord::getIfFinal, false);
|
|
|
|
+ List<FTOCompareRecord> ftoCompareRecords = this.list(queryWrapper);
|
|
|
|
+ List<TortVO> tortVOS = this.loadTortVO(features, ftoCompareRecords);
|
|
|
|
+ tortRightVO.setTortVOS(tortVOS);
|
|
|
|
+ tortRightVOS.add(tortRightVO);
|
|
|
|
+ });
|
|
|
|
+ return tortRightVOS;
|
|
|
|
+ } else {
|
|
|
|
+ throw new XiaoShiException("传入权要为空");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 装载特征与对比结果
|
|
|
|
+ * @param features
|
|
|
|
+ * @param ftoCompareRecords
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public List<TortVO> loadTortVO(List<Feature> features, List<FTOCompareRecord> ftoCompareRecords){
|
|
|
|
+ List<TortVO> tortVOS = new ArrayList<>();
|
|
|
|
+ for (Feature feature : features) {
|
|
|
|
+ //新建特征与侵权分析对比结果VO
|
|
|
|
+ TortVO tortVO = new TortVO();
|
|
|
|
+ //装载特征部分的信息
|
|
|
|
+ tortVO.setFeatureId(feature.getId());
|
|
|
|
+ tortVO.setContent(feature.getContent());
|
|
|
|
+ tortVO.setPatentNo(feature.getPatentNo());
|
|
|
|
+ tortVO.setRightSort(feature.getRightSort());
|
|
|
|
+ tortVO.setRightType(feature.getRightType());
|
|
|
|
+ tortVO.setExplainText(feature.getExplainText());
|
|
|
|
+ tortVO.setFormId(feature.getFromId());
|
|
|
|
+ tortVO.setSysOrder(feature.getSysOrder());
|
|
|
|
+ //装载侵权分析对比结果的部分(可能为空)
|
|
|
|
+ if (!ftoCompareRecords.isEmpty()) {
|
|
|
|
+ FTOCompareRecord originalRecord = ftoCompareRecords.stream().filter(item -> item.getFeatureId() != null && item.getFeatureId().equals(feature.getId()) && item.getIfOriginal() == true).findFirst().orElse(null);
|
|
|
|
+ if (originalRecord != null) {
|
|
|
|
+ FTOCompareRecordVO originalRecordVO = new FTOCompareRecordVO();
|
|
|
|
+ originalRecordVO.setId(originalRecord.getId());
|
|
|
|
+ originalRecordVO.setCompareResult(originalRecord.getCompareResult());
|
|
|
|
+ originalRecordVO.setCompareDescription(originalRecord.getCompareDescription());
|
|
|
|
+ originalRecordVO.setTargetDescription(originalRecord.getTargetDescription());
|
|
|
|
+ tortVO.setOriginalRecordVO(originalRecordVO);
|
|
|
|
+ //过滤
|
|
|
|
+ FTOCompareRecord currentRecord = ftoCompareRecords.stream().filter(item -> item.getFeatureId() != null && item.getFeatureId().equals(feature.getId()) && item.getIfOriginal() == false).findFirst().orElse(null);
|
|
|
|
+ if (currentRecord != null) {
|
|
|
|
+ FTOCompareRecordVO currentRecordVO = new FTOCompareRecordVO();
|
|
|
|
+ currentRecordVO.setId(currentRecord.getId());
|
|
|
|
+ currentRecordVO.setCompareResult(currentRecord.getCompareResult());
|
|
|
|
+ currentRecordVO.setCompareDescription(currentRecord.getCompareDescription());
|
|
|
|
+ currentRecordVO.setTargetDescription(currentRecord.getTargetDescription());
|
|
|
|
+ tortVO.setCurrentRecordVO(currentRecordVO);
|
|
|
|
+ } else {
|
|
|
|
+ tortVO.setCurrentRecordVO(originalRecordVO);
|
|
|
|
+ }
|
|
|
|
+ } else {//没有查出来ifOriginal为true的就说明没有新建协同任务,则查询原来的数据
|
|
|
|
+ FTOCompareRecord finalRecord = ftoCompareRecords.stream().filter(item -> item.getFeatureId().equals(feature.getId()) && item.getProjectTaskId() == null && item.getIfOriginal() == false && item.getIfFinal() == true).findFirst().orElse(null);
|
|
|
|
+ if (finalRecord != null) {
|
|
|
|
+ FTOCompareRecordVO originalRecordVO = new FTOCompareRecordVO();
|
|
|
|
+ originalRecordVO.setId(finalRecord.getId());
|
|
|
|
+ originalRecordVO.setCompareResult(finalRecord.getCompareResult());
|
|
|
|
+ originalRecordVO.setCompareDescription(finalRecord.getCompareDescription());
|
|
|
|
+ originalRecordVO.setTargetDescription(finalRecord.getTargetDescription());
|
|
|
|
+ tortVO.setOriginalRecordVO(originalRecordVO);
|
|
|
|
+ tortVO.setCurrentRecordVO(originalRecordVO);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ tortVOS.add(tortVO);
|
|
|
|
+ }
|
|
|
|
+ return tortVOS;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 保存最终对比结果接口
|
|
|
|
+ * @param tortCompareRecordDTO
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public List<Integer> addFinalTortResult(TortCompareRecordDTO tortCompareRecordDTO){
|
|
|
|
+ List<Integer> ids = new ArrayList<>();
|
|
|
|
+ //判空
|
|
|
|
+ Integer projectId = tortCompareRecordDTO.getProjectId();
|
|
|
|
+ if (projectId == null) {
|
|
|
|
+ throw new XiaoShiException("projectId不能为空");
|
|
|
|
+ }
|
|
|
|
+ //首先是根据projectId,以及任务id为空,以及ifOriginal为false,ifFinal为true这几个条件删除表中的数据
|
|
|
|
+ LambdaQueryWrapper<FTOCompareRecord> removeWrapper = new LambdaQueryWrapper<>();
|
|
|
|
+ removeWrapper.eq(FTOCompareRecord::getProjectId, projectId)
|
|
|
|
+ .eq(FTOCompareRecord::getProjectTaskId, null)
|
|
|
|
+ .eq(FTOCompareRecord::getIfOriginal, false)
|
|
|
|
+ .eq(FTOCompareRecord::getIfFinal, true);
|
|
|
|
+ this.remove(removeWrapper);
|
|
|
|
+ //其次是添加一批新的数据
|
|
|
|
+ List<FTOCompareRecord> ftoCompareRecords = new ArrayList<>();
|
|
|
|
+ List<TortDTO> tortDTOS = tortCompareRecordDTO.getTortDTOS();
|
|
|
|
+ //获取登录人信息
|
|
|
|
+ PersonnelVO personnelVO = new PersonnelVO();
|
|
|
|
+ try {
|
|
|
|
+ personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ throw new UnLoginException("未登录");
|
|
|
|
+ }
|
|
|
|
+ if (tortDTOS != null && !tortDTOS.isEmpty()) {
|
|
|
|
+ for (TortDTO item : tortDTOS) {
|
|
|
|
+ FTOCompareRecord tortFinal = new FTOCompareRecord();
|
|
|
|
+ tortFinal.setFeatureId(item.getFeatureId());
|
|
|
|
+ tortFinal.setProjectId(projectId);
|
|
|
|
+ tortFinal.setCompareResult(item.getCompareResult());
|
|
|
|
+ tortFinal.setCompareDescription(item.getCompareDescription());
|
|
|
|
+ tortFinal.setTargetDescription(item.getTargetDescription());
|
|
|
|
+ tortFinal.setCreateId(personnelVO.getId());
|
|
|
|
+ ftoCompareRecords.add(tortFinal);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (!ftoCompareRecords.isEmpty()) {
|
|
|
|
+ this.saveBatch(ftoCompareRecords);
|
|
|
|
+ ids = ftoCompareRecords.stream().map(FTOCompareRecord::getId).collect(Collectors.toList());
|
|
|
|
+ }
|
|
|
|
+ return ids;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|