|
@@ -4,11 +4,17 @@ 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.PersonnelVO;
|
|
|
+import cn.cslg.report.common.model.vo.invalidReReport.ProofGroupVO;
|
|
|
import cn.cslg.report.common.model.vo.invalidReReport.QueryAllFeaturesVO;
|
|
|
+import cn.cslg.report.common.model.vo.invalidReReport.QueryInvalidReasonVO;
|
|
|
+import cn.cslg.report.common.utils.CacheUtils;
|
|
|
import cn.cslg.report.common.utils.Response;
|
|
|
+import cn.cslg.report.common.utils.SecurityUtils.LoginUtils;
|
|
|
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.AssoProofGroup;
|
|
|
import cn.cslg.report.entity.invalidReReport.InvalidReason;
|
|
|
import cn.cslg.report.entity.invalidReReport.ProofGroup;
|
|
|
import cn.cslg.report.exception.XiaoShiException;
|
|
@@ -36,8 +42,11 @@ import java.util.stream.Collectors;
|
|
|
public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, InvalidReason> {
|
|
|
private final ReportService reportService;
|
|
|
private final AssoPositionFeaturesService assoPositionFeaturesService;
|
|
|
+ private final AssoProofGroupService assoProofGroupService;
|
|
|
private final FeatureMapper featureMapper;
|
|
|
private final ProofGroupService proofGroupService;
|
|
|
+ private final CacheUtils cacheUtils;
|
|
|
+ private final LoginUtils loginUtils;
|
|
|
|
|
|
/**
|
|
|
* 判断特征是否有重复的方法
|
|
@@ -45,7 +54,7 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
|
|
|
*/
|
|
|
public Boolean checkReFeatures(CheckReFeaturesDTO checkReFeaturesDTO){
|
|
|
//查出表中制定报告和权要的全部特征内容和位置
|
|
|
- List<QueryAllFeaturesVO> queryAllFeaturesVOS = featureMapper.queryAllFeatures(checkReFeaturesDTO.getReportId(), checkReFeaturesDTO.getRightId());
|
|
|
+ List<QueryAllFeaturesVO> queryAllFeaturesVOS = featureMapper.queryAllFeatures(checkReFeaturesDTO.getReportId(), checkReFeaturesDTO.getRightSort());
|
|
|
//List<QueryAllFeaturesVO> list = queryAllFeaturesVOS.stream().sorted(Comparator.comparing(QueryAllFeaturesVO::getPosition)).collect(Collectors.toList());
|
|
|
//取出需要插入的特征内容和位置
|
|
|
List<InvalidReasonDTO.featuresIn> features = checkReFeaturesDTO.getFeatures();
|
|
@@ -65,7 +74,7 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
|
|
|
map.put(position, length);
|
|
|
}
|
|
|
} else {
|
|
|
- throw new XiaoShiException("未查询到位置");
|
|
|
+ return false;
|
|
|
}
|
|
|
}
|
|
|
//遍历装载需要插入的特征内容和位置
|
|
@@ -91,15 +100,15 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
|
|
|
//前面一个特征内容的初始位置
|
|
|
Integer preFeaInitialPos = index > 0 ? positions.get(index - 1) : -1;
|
|
|
//前面一个特征内容的长度
|
|
|
- Integer preLength = map.get(preFeaInitialPos);
|
|
|
+ Integer preLength = index > 0 ? map.get(preFeaInitialPos) : -1;
|
|
|
//前面一个特征的末尾位置
|
|
|
Integer preEndPosition = preFeaInitialPos + preLength -1;
|
|
|
//后面一个特征内容的初始位置
|
|
|
Integer nextFeaInitialPos = index < positions.size() - 1 ? positions.get(index + 1) : -1;
|
|
|
//判断是否与前面一个特征内容重复(前面一个特征内容的末尾位置如果比插入的特征内容的初始位置大,则重复了)
|
|
|
- if(preEndPosition > featuresIn.getPosition()){
|
|
|
+ if(index > 0 && preEndPosition > featuresIn.getPosition()){
|
|
|
return false;
|
|
|
- } else if(endPosition > nextFeaInitialPos){//判断是否与后面一个特征内容重复(如果插入的特征内容的末尾位置,比后面一个特征内容的初始位置大,则重复)
|
|
|
+ } else if( index < (positions.size() - 1) && endPosition > nextFeaInitialPos){//判断是否与后面一个特征内容重复(如果插入的特征内容的末尾位置,比后面一个特征内容的初始位置大,则重复)
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
@@ -117,88 +126,86 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
|
|
|
InvalidReason invalidReason = new InvalidReason();
|
|
|
//判断invalidName的类型
|
|
|
Integer invalidName = invalidReasonDTO.getInvalidName();
|
|
|
- //若类型为1,则为说明书公开不充分
|
|
|
- //涉及内容为说明书,手动输入无效证据
|
|
|
- if(invalidName.equals(1)) {
|
|
|
+ if(invalidName.equals(1)) {//若类型为1,则为说明书公开不充分,涉及内容为说明书,手动输入无效证据
|
|
|
BeanUtils.copyProperties(invalidReasonDTO, invalidReason);
|
|
|
+ //获取当前登陆人信息
|
|
|
+ PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
|
|
|
+ invalidReason.setCreateId(personnelVO.getId());
|
|
|
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(0)){//若类型为0,则为“权利要求不清楚”,需要选择涉及内容(content)并输入相关证据(proofStr)
|
|
|
+ if(invalidReasonDTO.getProofStr() != null && invalidReasonDTO.getProofStr() != ""){
|
|
|
+ //复制DTO类字段到InvalidReason实体类并保存入库
|
|
|
+ BeanUtils.copyProperties(invalidReasonDTO, invalidReason);
|
|
|
+ //获取当前登陆人信息
|
|
|
+ PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
|
|
|
+ invalidReason.setCreateId(personnelVO.getId());
|
|
|
+ invalidReason.insert();
|
|
|
+ //判断是否传入特征集合
|
|
|
+ if(invalidReasonDTO.getFeatures() != null && invalidReasonDTO.getFeatures().size() > 0) {
|
|
|
+ //若类型为0检查features是否有交集(根据位置和字符串长度判断)若有则返回
|
|
|
+ Features features = new Features();
|
|
|
+ //特征内容
|
|
|
+ List<InvalidReasonDTO.featuresIn> featuresIns = invalidReasonDTO.getFeatures();
|
|
|
+ //检查特征内容是否有交集(根据位置和字符串长度判断)若有则返回
|
|
|
+ CheckReFeaturesDTO checkReFeaturesDTO = new CheckReFeaturesDTO();
|
|
|
+ checkReFeaturesDTO.setReportId(invalidReasonDTO.getReportId());
|
|
|
+ checkReFeaturesDTO.setRightSort(invalidReasonDTO.getContent());
|
|
|
+ checkReFeaturesDTO.setFeatures(featuresIns);
|
|
|
+ Boolean isFlag = this.checkReFeatures(checkReFeaturesDTO);
|
|
|
+ if (isFlag == false) {
|
|
|
+ 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("证据组合不能为空");
|
|
|
+ //标的专利号,权要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)
|
|
|
+ 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();
|
|
|
}
|
|
|
}
|
|
|
- //若类型为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("相关证据不能为空");
|
|
|
+ }
|
|
|
+ } else if(invalidName.equals(2) || invalidName.equals(3)){//若类型为2,3则proofGroups不能为空
|
|
|
+ if(invalidReasonDTO.getProofGroups()!= null){
|
|
|
+ //复制DTO类字段到InvalidReason实体类并保存入库
|
|
|
+ BeanUtils.copyProperties(invalidReasonDTO, invalidReason);
|
|
|
+ //获取当前登陆人信息
|
|
|
+ PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
|
|
|
+ invalidReason.setCreateId(personnelVO.getId());
|
|
|
+ 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("选择特征不能为空");
|
|
|
+ return Response.error("证据组合不能为空");
|
|
|
}
|
|
|
- return Response.success("添加成功");
|
|
|
- } else {
|
|
|
- throw new XiaoShiException("未知无效理由类型");
|
|
|
}
|
|
|
+ return Response.success("添加成功");
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -244,18 +251,82 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 更新无效理由和证据
|
|
|
+ * 查找无效理由和证据列表
|
|
|
* @param
|
|
|
* @return
|
|
|
*/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public String queryInvalidReason(int reportId) {
|
|
|
+ public List<QueryInvalidReasonVO> queryInvalidReason(Integer reportId) {
|
|
|
+ List<QueryInvalidReasonVO> queryInvalidReasonVOS = new ArrayList<>();
|
|
|
//根据报告id查询无效理由
|
|
|
- ///若类型为2,3则查询证据组合和特征并装载
|
|
|
- return Response.success();
|
|
|
+ LambdaQueryWrapper<InvalidReason> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(InvalidReason::getReportId,reportId);
|
|
|
+ List<InvalidReason> invalidReasons = this.list(queryWrapper);
|
|
|
+ for(InvalidReason invalidReason:invalidReasons) {
|
|
|
+ QueryInvalidReasonVO queryInvalidReasonVO = new QueryInvalidReasonVO();
|
|
|
+ BeanUtils.copyProperties(invalidReason,queryInvalidReasonVO);
|
|
|
+ queryInvalidReasonVOS.add(queryInvalidReasonVO);
|
|
|
+ }
|
|
|
+ this.loadInvalidReason(queryInvalidReasonVOS);
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ return queryInvalidReasonVOS;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 把无效理由集合装载到要返回的列表集合中
|
|
|
+ * @param queryInvalidReasonVOS
|
|
|
+ */
|
|
|
+ public List<QueryInvalidReasonVO> loadInvalidReason(List<QueryInvalidReasonVO> queryInvalidReasonVOS){
|
|
|
+ //若类型为2,3,则查询证据组合
|
|
|
+ //查询出类型为2,3时的无效理由ids
|
|
|
+ List<Integer> invalidReasonsIds = queryInvalidReasonVOS.stream()
|
|
|
+ .filter(item -> item.getInvalidName() == 2 || item.getInvalidName() == 3)
|
|
|
+ .map(QueryInvalidReasonVO::getId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ //根据无效理由ids查询出所有的证据组合
|
|
|
+ LambdaQueryWrapper<ProofGroup> queryWrapper1 = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper1.in(ProofGroup::getInvalidReasonId, invalidReasonsIds);
|
|
|
+ List<ProofGroup> proofGroups = proofGroupService.list(queryWrapper1);
|
|
|
+ //由于查出来的proofGroups中没有proofIds这个字段,于是采用下面的方法装载成proofGroupVOS
|
|
|
+ List<QueryInvalidReasonVO.proofGroupIn> proofGroupIns = this.loadProofGroupVO(proofGroups);
|
|
|
+ for(QueryInvalidReasonVO queryInvalidReasonVO:queryInvalidReasonVOS){
|
|
|
+
|
|
|
+ }
|
|
|
+ return queryInvalidReasonVOS;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 把查出来的所有证据组合实体类集合转成VO类集合
|
|
|
+ * @param proofGroups
|
|
|
+ */
|
|
|
+ public List<QueryInvalidReasonVO.proofGroupIn> loadProofGroupVO(List<ProofGroup> proofGroups){
|
|
|
+ List<QueryInvalidReasonVO.proofGroupIn> proofGroupIns = new ArrayList<>();
|
|
|
+ //根据传入的proofGroups对象集合,过滤出所有的ids
|
|
|
+ List<Integer> proofGroupIds = proofGroups.stream()
|
|
|
+ .map(ProofGroup::getId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ //根据组合ids查询出每一个groupId对应的proofIds
|
|
|
+ //首先批量查出来所有的证据和证据组合关联对象
|
|
|
+ LambdaQueryWrapper<AssoProofGroup> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.in(AssoProofGroup::getGroupId, proofGroupIds);
|
|
|
+ List<AssoProofGroup> assoProofGroups = assoProofGroupService.list(queryWrapper);
|
|
|
+ //证据组合的装载
|
|
|
+ for (ProofGroup proofGroup : proofGroups) {
|
|
|
+ QueryInvalidReasonVO.proofGroupIn proofGroupIn = new QueryInvalidReasonVO.proofGroupIn();
|
|
|
+ //基本信息装载
|
|
|
+ proofGroupIn.setInvalidReasonId(proofGroup.getInvalidReasonId());
|
|
|
+ proofGroupIn.setDescription(proofGroup.getDescription());
|
|
|
+ proofGroupIn.setArgument_str(proofGroup.getArgument_str());
|
|
|
+ List<Integer> proofIds = assoProofGroups.stream().filter(item->item.getGroupId().equals(proofGroup.getId())).map(AssoProofGroup::getProofId).collect(Collectors.toList());
|
|
|
+ proofGroupIn.setProofIds(proofIds);
|
|
|
+ proofGroupIns.add(proofGroupIn);
|
|
|
+ }
|
|
|
+ return proofGroupIns;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
public String queryInvalidReasonDetail(@RequestBody ShareReportDTO shareReportDTO) throws IOException {
|
|
|
//根据报告id查询无效理由
|
|
|
///若类型为2,3则查询证据组合和特征并装载
|