|
@@ -0,0 +1,236 @@
|
|
|
+package cn.cslg.pas.service.business;
|
|
|
+
|
|
|
+import cn.cslg.pas.common.dto.business.GetAvoidDesignDTO;
|
|
|
+import cn.cslg.pas.common.dto.business.TortCompareRecordDTO;
|
|
|
+import cn.cslg.pas.common.dto.business.TortDTO;
|
|
|
+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.vo.PatentRightVo;
|
|
|
+import cn.cslg.pas.common.vo.business.SplitVO;
|
|
|
+import cn.cslg.pas.common.vo.business.TortCompareRecordVO;
|
|
|
+import cn.cslg.pas.common.vo.business.TortRightVO;
|
|
|
+import cn.cslg.pas.common.vo.business.TortVO;
|
|
|
+import cn.cslg.pas.domain.business.AvoidDesign;
|
|
|
+import cn.cslg.pas.domain.business.FTOCompareRecord;
|
|
|
+import cn.cslg.pas.domain.business.Feature;
|
|
|
+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.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * FTO对比记录的Service层
|
|
|
+ * @Author xiexiang
|
|
|
+ * @Date 2023/12/8
|
|
|
+ */
|
|
|
+@Service
|
|
|
+@Slf4j
|
|
|
+public class FTOCompareRecordService extends ServiceImpl<FTOCompareRecordMapper, FTOCompareRecord> {
|
|
|
+ @Autowired
|
|
|
+ private CacheUtils cacheUtils;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private LoginUtils loginUtils;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private FeatureService featureService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ReportProjectService reportProjectService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增侵权对比结果
|
|
|
+ *
|
|
|
+ * @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("未传入特征集合");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public TortCompareRecordVO getTortCompareRecord(GetAvoidDesignDTO getAvoidDesignDTO){
|
|
|
+ //判断参数不能为空
|
|
|
+ Integer projectId = getAvoidDesignDTO.getProjectId();
|
|
|
+ if (projectId == null) {
|
|
|
+ throw new XiaoShiException("projectId为空");
|
|
|
+ }
|
|
|
+ if (getAvoidDesignDTO.getIfReSplit() == null) {
|
|
|
+ throw new XiaoShiException("ifReSplit不能为空");
|
|
|
+ }
|
|
|
+ if (getAvoidDesignDTO.getSplitBy() == null) {
|
|
|
+ throw new XiaoShiException("splitBy不能为空");
|
|
|
+ }
|
|
|
+ if (getAvoidDesignDTO.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(getAvoidDesignDTO, splitVO);
|
|
|
+ splitVO.setPatentNo(patentNo);
|
|
|
+ List<PatentRightVo> patentRightVos = new ArrayList<>();
|
|
|
+ //判断是否重拆
|
|
|
+ if (getAvoidDesignDTO.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();
|
|
|
+ tortVOS = this.loadTortVO(projectId, features);
|
|
|
+ tortRightVO.setTortVOS(tortVOS);
|
|
|
+ tortRightVOS.add(tortRightVO);
|
|
|
+ });
|
|
|
+ tortCompareRecordVO.setTortRightVOS(tortRightVOS);
|
|
|
+ } else {
|
|
|
+ throw new XiaoShiException("特征查询错误");
|
|
|
+ }
|
|
|
+ return tortCompareRecordVO;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public List<TortVO> loadTortVO(Integer projectId, List<Feature> features){
|
|
|
+ List<TortVO> tortVOS = new ArrayList<>();
|
|
|
+ LambdaQueryWrapper<FTOCompareRecord> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(FTOCompareRecord::getProjectId, projectId);
|
|
|
+ List<FTOCompareRecord> ftoCompareRecords = this.list(queryWrapper);
|
|
|
+ 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 ftoCompareRecord = ftoCompareRecords.stream().filter(item -> item.getFeatureId() != null && item.getFeatureId().equals(feature.getId())).findFirst().orElse(null);
|
|
|
+ if (ftoCompareRecord != null) {
|
|
|
+ tortVO.setId(ftoCompareRecord.getId());
|
|
|
+ tortVO.setCompareResult(ftoCompareRecord.getCompareResult());
|
|
|
+ tortVO.setCompareDescription(ftoCompareRecord.getCompareDescription());
|
|
|
+ tortVO.setTargetDescription(ftoCompareRecord.getTargetDescription());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ tortVOS.add(tortVO);
|
|
|
+ }
|
|
|
+ return tortVOS;
|
|
|
+ }
|
|
|
+}
|