|
@@ -0,0 +1,334 @@
|
|
|
+package cn.cslg.pas.service.business.invalidReport;
|
|
|
+
|
|
|
+import cn.cslg.pas.common.dto.invalidDTO.AddEvidenceReasonDTO;
|
|
|
+import cn.cslg.pas.common.dto.invalidDTO.AddEvidenceReasonsDTO;
|
|
|
+import cn.cslg.pas.common.dto.invalidDTO.QueryEvidenceReasonDTO;
|
|
|
+import cn.cslg.pas.common.dto.invalidDTO.QueryInvalidHistoryDTO;
|
|
|
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
|
|
|
+import cn.cslg.pas.common.model.cronModel.Records;
|
|
|
+import cn.cslg.pas.common.utils.CacheUtils;
|
|
|
+import cn.cslg.pas.common.utils.LoginUtils;
|
|
|
+import cn.cslg.pas.common.vo.invalidVO.QueryEvidenceReasonVO;
|
|
|
+import cn.cslg.pas.common.vo.invalidVO.QueryInvalidHistoryVO;
|
|
|
+import cn.cslg.pas.domain.business.*;
|
|
|
+import cn.cslg.pas.mapper.InvalidReport.EvidenceReasonMapper;
|
|
|
+import cn.cslg.pas.service.business.CompareLiteratureService;
|
|
|
+import cn.cslg.pas.service.business.FeatureService;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Repository;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.web.bind.annotation.RequestBody;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author lrj
|
|
|
+ * @date 2023/12/25
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, EvidenceReason> {
|
|
|
+ @Autowired
|
|
|
+ private CacheUtils cacheUtils;
|
|
|
+ @Autowired
|
|
|
+ private LoginUtils loginUtils;
|
|
|
+ @Autowired
|
|
|
+ private AssoGroupFeatureService assoGroupFeatureService;
|
|
|
+ @Autowired
|
|
|
+ private AssoFeatureReasonService assoFeatureReasonService;
|
|
|
+ @Autowired
|
|
|
+ private AssoReasonLiteratureService assoReasonLiteratureService;
|
|
|
+ @Autowired
|
|
|
+ private FeatureService featureService;
|
|
|
+ @Autowired
|
|
|
+ private CompareLiteratureService compareLiteratureService;
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean addEvidenceReason(AddEvidenceReasonDTO addEvidenceReasonDTO) {
|
|
|
+ PersonnelVO personnelVO = new PersonnelVO();
|
|
|
+ personnelVO.setId("1");
|
|
|
+ Integer groupId = addEvidenceReasonDTO.getGroupId();
|
|
|
+ List<AddEvidenceReasonsDTO> addEvidenceReasonsDTOs = addEvidenceReasonDTO.getEvidenceReasonList();
|
|
|
+ // 遍历装载
|
|
|
+ List<AddEvidenceReasonsDTO> addEvidenceReasonsDTOList = new ArrayList<>();
|
|
|
+ addEvidenceReasonsDTOs.forEach(item -> {
|
|
|
+ AddEvidenceReasonsDTO tem = addEvidenceReasonsDTOList.stream().filter(i -> i.getFeatureOrder().equals(item.getFeatureOrder())).findFirst().orElse(null);
|
|
|
+ if (tem == null) {
|
|
|
+ addEvidenceReasonsDTOList.add(item);
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+ //获得所有的特征id
|
|
|
+ List<Integer> featureIds = addEvidenceReasonsDTOs.stream()
|
|
|
+ .filter(item -> item.getFeatureId() != null)
|
|
|
+ .map(AddEvidenceReasonsDTO::getFeatureId).collect(Collectors.toList());
|
|
|
+ this.deleteAssoByFeatureIds(featureIds,groupId);
|
|
|
+
|
|
|
+
|
|
|
+ for (AddEvidenceReasonsDTO addEvidenceReasonsDTO : addEvidenceReasonsDTOs) {
|
|
|
+ //获得特征信息
|
|
|
+ Integer featureId = addEvidenceReasonsDTO.getFeatureId();
|
|
|
+ Integer featureOrder = addEvidenceReasonsDTO.getFeatureOrder();
|
|
|
+ if (featureId == null) {
|
|
|
+ //判断
|
|
|
+ AddEvidenceReasonsDTO tem = addEvidenceReasonsDTOList.stream()
|
|
|
+ .filter(item -> addEvidenceReasonsDTO.equals(item.getFeatureOrder())).findFirst().orElse(null);
|
|
|
+ if (tem == null) {
|
|
|
+ //添加特征
|
|
|
+ Feature feature = new Feature();
|
|
|
+ feature.setContent(addEvidenceReasonsDTO.getFeatureText());
|
|
|
+ feature.insert();
|
|
|
+ featureId = feature.getId();
|
|
|
+ //添加特征和证据组合关联
|
|
|
+ addEvidenceReasonsDTOList.add(addEvidenceReasonsDTO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //添加无效理由
|
|
|
+ Integer reasonId = this.addEvidenceReason(addEvidenceReasonsDTO, personnelVO.getId());
|
|
|
+ //添加无效理由和特征关联
|
|
|
+ AssoFeatureReason assoFeatureReason = new AssoFeatureReason();
|
|
|
+ assoFeatureReason.setReasonId(reasonId);
|
|
|
+ assoFeatureReason.setFeatureId(featureId);
|
|
|
+ assoFeatureReason.insert();
|
|
|
+
|
|
|
+ //添加特征和证据组合关联
|
|
|
+ AssoGroupFeature assoGroupFeature = new AssoGroupFeature();
|
|
|
+ assoGroupFeature.setFeatureId(featureId);
|
|
|
+ assoGroupFeature.setFeatureOrder(featureOrder);
|
|
|
+ assoGroupFeature.setGroupId(groupId);
|
|
|
+ assoGroupFeature.insert();
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public Boolean deleteAssoByFeatureIds(List<Integer> featureIds, Integer groupId) {
|
|
|
+ //根据groupId 删除特征和group关联
|
|
|
+ LambdaQueryWrapper<AssoGroupFeature> assoWrapper =new LambdaQueryWrapper<>();
|
|
|
+ assoWrapper.eq(AssoGroupFeature::getGroupId,groupId);
|
|
|
+ List<AssoGroupFeature> assoGroupFeatures=assoGroupFeatureService.list(assoWrapper);
|
|
|
+ List<Integer> inFeatureIds =assoGroupFeatures.stream().map(AssoGroupFeature::getFeatureId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ if(inFeatureIds!=null&&inFeatureIds.size()>0){
|
|
|
+
|
|
|
+
|
|
|
+ //根据特征id 查询无效理由
|
|
|
+ LambdaQueryWrapper<AssoFeatureReason> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.in(AssoFeatureReason::getFeatureId, inFeatureIds);
|
|
|
+
|
|
|
+ List<AssoFeatureReason> assoFeatureReasons = assoFeatureReasonService.list(queryWrapper);
|
|
|
+ //获得无效理由id
|
|
|
+ if (assoFeatureReasons.size() > 0) {
|
|
|
+ //删除无效理由和证据文献关联
|
|
|
+ List<Integer> reasonIds = assoFeatureReasons.stream().map(AssoFeatureReason::getReasonId).collect(Collectors.toList());
|
|
|
+ //根据无效理由id删除和证据文献关联
|
|
|
+ LambdaQueryWrapper<AssoReasonLiterature> queryWrapper1 = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper1.in(AssoReasonLiterature::getReasonId, reasonIds);
|
|
|
+ assoReasonLiteratureService.remove(queryWrapper1);
|
|
|
+
|
|
|
+ //删除无效理由和特征关联
|
|
|
+ assoFeatureReasonService.remove(queryWrapper);
|
|
|
+
|
|
|
+ this.removeBatchByIds(reasonIds);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //删除证据组合和特征关联
|
|
|
+ LambdaQueryWrapper<AssoGroupFeature> queryWrapper3 = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper3.eq(AssoGroupFeature::getGroupId, groupId)
|
|
|
+ .in(AssoGroupFeature::getFeatureId, inFeatureIds);
|
|
|
+ assoGroupFeatureService.remove(queryWrapper3);
|
|
|
+
|
|
|
+
|
|
|
+ //删除关联关系
|
|
|
+ assoGroupFeatures.remove(assoWrapper);
|
|
|
+ LambdaQueryWrapper<AssoGroupFeature> temWrapper =new LambdaQueryWrapper<>();
|
|
|
+ assoWrapper.ne(AssoGroupFeature::getGroupId,groupId)
|
|
|
+ .in(AssoGroupFeature::getFeatureId,inFeatureIds);
|
|
|
+ List<AssoGroupFeature> tem=assoGroupFeatureService.list(temWrapper);
|
|
|
+ List<Integer> temIds =tem.stream().map(AssoGroupFeature::getFeatureId).collect(Collectors.toList());
|
|
|
+ inFeatureIds.remove(temIds);
|
|
|
+ if(featureIds.size()>0){
|
|
|
+ inFeatureIds.remove(featureIds);
|
|
|
+ }
|
|
|
+ //删除特征
|
|
|
+ if(inFeatureIds.size()>0){
|
|
|
+ featureService.removeBatchByIds(inFeatureIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return true;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private Integer addEvidenceReason(AddEvidenceReasonsDTO addEvidenceReasonsDTO, String createId) {
|
|
|
+ //添加无效理由
|
|
|
+ EvidenceReason evidenceReason = new EvidenceReason();
|
|
|
+ evidenceReason.setEvidenceText(addEvidenceReasonsDTO.getEvidenceText());
|
|
|
+ evidenceReason.setCreateId(createId);
|
|
|
+ evidenceReason.setDescription(addEvidenceReasonsDTO.getEvidenceDescription());
|
|
|
+ evidenceReason.insert();
|
|
|
+ Integer id = evidenceReason.getId();
|
|
|
+ //添加无效理由和证据关联
|
|
|
+ this.addAssoReasonLiterature(addEvidenceReasonsDTO.getLiteratureId(), id);
|
|
|
+ return id;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void addAssoReasonLiterature(List<Integer> literatureIds, Integer reasonId) {
|
|
|
+ List<AssoReasonLiterature> assoReasonLiteratures = new ArrayList<>();
|
|
|
+ if (literatureIds == null || literatureIds.size() == 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ literatureIds.forEach(item -> {
|
|
|
+ AssoReasonLiterature assoReasonLiterature = new AssoReasonLiterature();
|
|
|
+ assoReasonLiterature.setLiteratureId(item);
|
|
|
+ assoReasonLiterature.setReasonId(reasonId);
|
|
|
+ assoReasonLiteratures.add(assoReasonLiterature);
|
|
|
+ });
|
|
|
+ if (assoReasonLiteratures.size() != 0) {
|
|
|
+ assoReasonLiteratureService.saveBatch(assoReasonLiteratures);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询无效理由
|
|
|
+ public List<QueryEvidenceReasonVO> queryEvidenceReason(@RequestBody QueryEvidenceReasonDTO queryEvidenceReasonDTO) {
|
|
|
+ Integer groupId = queryEvidenceReasonDTO.getGroupId();
|
|
|
+ //根据证据组合id 查询特征
|
|
|
+ LambdaQueryWrapper<AssoGroupFeature> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(AssoGroupFeature::getGroupId, groupId);
|
|
|
+ List<AssoGroupFeature> assoGroupFeatures = assoGroupFeatureService.list(queryWrapper);
|
|
|
+ List<QueryEvidenceReasonVO> queryEvidenceReasonVOS = new ArrayList<>();
|
|
|
+ if (assoGroupFeatures != null && assoGroupFeatures.size() != 0) {
|
|
|
+ assoGroupFeatures.forEach(item -> {
|
|
|
+ //查询特征
|
|
|
+ Integer featureId = item.getFeatureId();
|
|
|
+ //根据特征id查询特征
|
|
|
+ Feature feature = featureService.getById(featureId);
|
|
|
+
|
|
|
+ //根据特征id 查询无效理由
|
|
|
+ LambdaQueryWrapper<AssoFeatureReason> queryWrapper1 = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper1.eq(AssoFeatureReason::getFeatureId, featureId);
|
|
|
+ List<AssoFeatureReason> assoFeatureReasons = assoFeatureReasonService.list(queryWrapper1);
|
|
|
+
|
|
|
+ if (assoFeatureReasons.size() != 0) {
|
|
|
+ for (AssoFeatureReason assoFeatureReason : assoFeatureReasons) {
|
|
|
+
|
|
|
+ //装载特征信息
|
|
|
+ QueryEvidenceReasonVO queryEvidenceReasonVO = new QueryEvidenceReasonVO();
|
|
|
+ queryEvidenceReasonVO.setFeatureId(featureId);
|
|
|
+ queryEvidenceReasonVO.setFeatureOrder(item.getFeatureOrder());
|
|
|
+ queryEvidenceReasonVO.setFeatureText(feature.getContent());
|
|
|
+ queryEvidenceReasonVO.setGroupId(groupId);
|
|
|
+ //根据无效理由id 查询无效理由
|
|
|
+ EvidenceReason evidenceReason = this.getById(assoFeatureReason.getReasonId());
|
|
|
+ queryEvidenceReasonVO.setEvidenceText(evidenceReason.getEvidenceText());
|
|
|
+ queryEvidenceReasonVO.setEvidenceDescription(evidenceReason.getDescription());
|
|
|
+
|
|
|
+ //根据无效理由id查询对比文献
|
|
|
+ LambdaQueryWrapper<AssoReasonLiterature> queryWrapper2 = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper2.eq(AssoReasonLiterature::getReasonId, assoFeatureReason.getReasonId());
|
|
|
+ List<AssoReasonLiterature> assoReasonLiteratures = assoReasonLiteratureService.list(queryWrapper2);
|
|
|
+ if (assoReasonLiteratures.size() > 0) {
|
|
|
+ List<Integer> literatureIds = assoReasonLiteratures.stream().map(AssoReasonLiterature::getLiteratureId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ //根据证据文献id 查询文献
|
|
|
+ LambdaQueryWrapper<CompareLiterature> queryWrapper3 = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper3.in(CompareLiterature::getId, literatureIds);
|
|
|
+ List<CompareLiterature> compareLiteratures = compareLiteratureService.list(queryWrapper3);
|
|
|
+ if (literatureIds.contains(0)) {
|
|
|
+ CompareLiterature compareLiterature = new CompareLiterature();
|
|
|
+ compareLiterature.setName("公知常识");
|
|
|
+ compareLiterature.setId(0);
|
|
|
+ compareLiteratures.add(compareLiterature);
|
|
|
+ }
|
|
|
+ if (literatureIds.contains(-1)) {
|
|
|
+ CompareLiterature compareLiterature = new CompareLiterature();
|
|
|
+ compareLiterature.setName("惯用技术手段");
|
|
|
+ compareLiterature.setId(-1);
|
|
|
+ compareLiteratures.add(compareLiterature);
|
|
|
+ }
|
|
|
+ queryEvidenceReasonVO.setLiteratures(compareLiteratures);
|
|
|
+ }
|
|
|
+
|
|
|
+ queryEvidenceReasonVOS.add(queryEvidenceReasonVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ return queryEvidenceReasonVOS;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询无效历史
|
|
|
+ public Records queryInvalidHistory( QueryInvalidHistoryDTO queryInvalidHistoryDTO) {
|
|
|
+ List<QueryInvalidHistoryVO> queryInvalidHistoryVOS = new ArrayList<>();
|
|
|
+ Integer featureId = queryInvalidHistoryDTO.getFeatureId();
|
|
|
+ Long current = queryInvalidHistoryDTO.getCurrent();
|
|
|
+ Long size = queryInvalidHistoryDTO.getSize();
|
|
|
+ //根据featureId 查询无效理由
|
|
|
+ LambdaQueryWrapper<AssoFeatureReason> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(AssoFeatureReason::getFeatureId, featureId);
|
|
|
+ Page<AssoFeatureReason> page = assoFeatureReasonService.page(new Page<>(current, size), queryWrapper);
|
|
|
+ Long total = page.getTotal();
|
|
|
+ List<AssoFeatureReason> assoFeatureReasons = page.getRecords();
|
|
|
+
|
|
|
+ if (assoFeatureReasons.size() > 0) {
|
|
|
+ //根据无效理由id 查询无效理由
|
|
|
+ assoFeatureReasons.forEach(item -> {
|
|
|
+ QueryInvalidHistoryVO reVo = new QueryInvalidHistoryVO();
|
|
|
+ Integer reasonId = item.getReasonId();
|
|
|
+ EvidenceReason evidenceReason = this.getById(item.getReasonId());
|
|
|
+ reVo.setEvidenceText(evidenceReason.getEvidenceText());
|
|
|
+ reVo.setEvidenceDescription(evidenceReason.getDescription());
|
|
|
+ //根据无效理由id查询对比文献
|
|
|
+ LambdaQueryWrapper<AssoReasonLiterature> queryWrapper2 = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper2.eq(AssoReasonLiterature::getReasonId, reasonId);
|
|
|
+ List<AssoReasonLiterature> assoReasonLiteratures = assoReasonLiteratureService.list(queryWrapper2);
|
|
|
+ if (assoReasonLiteratures.size() > 0) {
|
|
|
+ List<Integer> literatureIds = assoReasonLiteratures.stream().map(AssoReasonLiterature::getLiteratureId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ //根据证据文献id 查询文献
|
|
|
+ LambdaQueryWrapper<CompareLiterature> queryWrapper3 = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper3.in(CompareLiterature::getId, literatureIds);
|
|
|
+ List<CompareLiterature> compareLiteratures = compareLiteratureService.list(queryWrapper3);
|
|
|
+ if (literatureIds.contains(0)) {
|
|
|
+ CompareLiterature compareLiterature = new CompareLiterature();
|
|
|
+ compareLiterature.setName("公知常识");
|
|
|
+ compareLiterature.setId(0);
|
|
|
+ compareLiteratures.add(compareLiterature);
|
|
|
+ }
|
|
|
+ if (literatureIds.contains(-1)) {
|
|
|
+ CompareLiterature compareLiterature = new CompareLiterature();
|
|
|
+ compareLiterature.setName("惯用技术手段");
|
|
|
+ compareLiterature.setId(-1);
|
|
|
+ compareLiteratures.add(compareLiterature);
|
|
|
+ }
|
|
|
+ reVo.setLiteratures(compareLiteratures);
|
|
|
+ queryInvalidHistoryVOS.add(reVo);
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ Records records = new Records();
|
|
|
+ records.setTotal(total);
|
|
|
+ records.setCurrent(current);
|
|
|
+ records.setSize(size);
|
|
|
+ records.setData(queryInvalidHistoryVOS);
|
|
|
+ return records;
|
|
|
+
|
|
|
+ }
|
|
|
+}
|