package cn.cslg.pas.service; import cn.cslg.pas.common.model.dto.CustomFieldLabelDTO; import cn.cslg.pas.common.model.dto.LabelDTO; import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils; import cn.cslg.pas.common.utils.StringUtils; import cn.cslg.pas.domain.*; import cn.cslg.pas.common.model.vo.PatentIndexSettingVO; import cn.cslg.pas.common.model.vo.ProjectImportPatentVO; import cn.cslg.pas.common.model.vo.PatentBatchIndexVO; import cn.cslg.pas.mapper.ProjectFieldPatentLinkMapper; import cn.dev33.satoken.stp.StpUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** *

* 标引内容关联专利 服务类 *

* * @author 王岩 * @since 2022-02-22 */ @Service @RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class ProjectFieldPatentLinkService extends ServiceImpl { private final ProjectFieldTextService projectFieldTextService; private final ProjectFieldOptionService projectFieldOptionService; private final ProjectFieldTreeService projectFieldTreeService; private final ProjectFieldService projectFieldService; private final LoginUtils loginUtils; public List getProjectPatentLinkByPatentAndProId(Integer patentId, Integer projectId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ProjectFieldPatentLink::getPatentId, patentId); queryWrapper.eq(ProjectFieldPatentLink::getProjectId, projectId); return this.list(queryWrapper); } public List getProjectPatentLinkByPatentAndProjectIdAndFieldId(Integer patentId, Integer projectId, Integer fieldId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ProjectFieldPatentLink::getPatentId, patentId); queryWrapper.eq(ProjectFieldPatentLink::getProjectId, projectId); queryWrapper.eq(ProjectFieldPatentLink::getFieldId, fieldId); return this.list(queryWrapper); } public ProjectFieldPatentLink getProjectPatentLinkByPatentAndProjectIdAndFieldIdAndOptionId(Integer patentId, Integer projectId, Integer fieldId, Integer optionId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ProjectFieldPatentLink::getPatentId, patentId); queryWrapper.eq(ProjectFieldPatentLink::getProjectId, projectId); queryWrapper.eq(ProjectFieldPatentLink::getFieldId, fieldId); queryWrapper.eq(ProjectFieldPatentLink::getOptionId, optionId); return this.getOne(queryWrapper); } public void updateProjectPatentLink(Integer patentId, Integer type, Integer fieldId, Integer optionId, Integer userId, Integer projectId) { ProjectFieldPatentLink projectFieldPatentLink = new ProjectFieldPatentLink(); projectFieldPatentLink.setType(type); projectFieldPatentLink.setPatentId(patentId); projectFieldPatentLink.setOptionId(optionId); projectFieldPatentLink.setFieldId(fieldId); projectFieldPatentLink.setCreateBy(userId); projectFieldPatentLink.setProjectId(projectId); projectFieldPatentLink.insert(); } public List getProjectPatentLinkByPatentIdsAndProjectId(List patentIds, Integer projectId) { if (patentIds == null || patentIds.size() == 0) { return new ArrayList<>(); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(ProjectFieldPatentLink::getPatentId, patentIds); queryWrapper.eq(ProjectFieldPatentLink::getProjectId, projectId); return this.list(queryWrapper); } public List getProjectPatentLinkByPatentIdsAndFieldId(List patentIds, Integer fieldId) { if (patentIds == null || patentIds.size() == 0) { return new ArrayList<>(); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(ProjectFieldPatentLink::getPatentId, patentIds); queryWrapper.eq(ProjectFieldPatentLink::getFieldId, fieldId); return this.list(queryWrapper); } public void updateProjectFieldPatentLink(ProjectImportPatentVO params, Integer patentId) { if (params.getFieldList() != null && params.getFieldList().size() != 0) { List tempList = this.getProjectPatentLinkByPatentAndProId(patentId, params.getProjectId()); List dataList = new ArrayList<>(); params.getFieldList().forEach(item -> { ProjectFieldPatentLink projectFieldPatentLink = new ProjectFieldPatentLink(); projectFieldPatentLink.setPatentId(patentId); projectFieldPatentLink.setProjectId(params.getProjectId()); projectFieldPatentLink.setType(item.getType()); projectFieldPatentLink.setFieldId(item.getFieldId()); projectFieldPatentLink.setCreateBy(0); if (item.getType() == 0 || item.getType() == 1 || item.getType() == 2) { projectFieldPatentLink.setOptionId(projectFieldTextService.add(item.getFieldId(), item.getText())); } else { projectFieldPatentLink.setOptionId(item.getOptionId()); } long count = tempList.stream().filter(temp -> temp.getPatentId().equals(patentId) && temp.getFieldId().equals(projectFieldPatentLink.getFieldId()) && temp.getOptionId().equals(projectFieldPatentLink.getOptionId())).count(); if (count == 0) { dataList.add(projectFieldPatentLink); } }); if (dataList.size() != 0) { this.saveOrUpdateBatch(dataList); } } } public void deleteByFieldId(Integer fieldId) { this.remove(Wrappers.lambdaQuery().eq(ProjectFieldPatentLink::getFieldId, fieldId)); } public void deleteByOptionId(Integer optionId) { this.remove(Wrappers.lambdaQuery().eq(ProjectFieldPatentLink::getOptionId, optionId)); } public void deleteByOptionIds(List optionIds) { if (optionIds != null && optionIds.size() != 0) { this.remove(Wrappers.lambdaQuery().in(ProjectFieldPatentLink::getOptionId, optionIds)); } } public void deleteByPatentIdAndProjectIdAndFieldId(Integer patentId, Integer projectId, Integer fieldId) { this.remove(Wrappers.lambdaQuery().eq(ProjectFieldPatentLink::getFieldId, fieldId).eq(ProjectFieldPatentLink::getProjectId, projectId).eq(ProjectFieldPatentLink::getPatentId, patentId)); } public void deleteByPatentIdsAndProjectIdAndFieldId(List patentIds, Integer projectId, Integer fieldId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(ProjectFieldPatentLink::getPatentId, patentIds); queryWrapper.eq(ProjectFieldPatentLink::getProjectId, projectId); queryWrapper.eq(ProjectFieldPatentLink::getFieldId, fieldId); this.remove(queryWrapper); } @Transactional public void patentBatchIndex(PatentBatchIndexVO params) { List tempList; List fieldList = params.getFieldList().stream().filter(ProjectField::getEnabled).collect(Collectors.toList()); List projectFieldPatentLinkList = new ArrayList<>(); for (ProjectField field : fieldList) { switch (field.getType()) { case 0: case 1: case 2: this.deleteByPatentIdsAndProjectIdAndFieldId(params.getPatentIds(), params.getProjectId(), field.getId()); tempList = this.getProjectPatentLinkByPatentIdsAndProjectId(params.getPatentIds(), params.getProjectId()); tempList = tempList.stream().filter(item -> fieldList.stream().map(ProjectField::getId).collect(Collectors.toList()).contains(item.getFieldId())).collect(Collectors.toList()); ProjectFieldText projectFieldText = projectFieldTextService.getProjectFieldTextByNameAndFieldId(field.getText(), field.getId()); if (projectFieldText == null) { projectFieldText = new ProjectFieldText(); projectFieldText.setText(field.getText()); projectFieldText.setFieldId(field.getId()); projectFieldText.insert(); } projectFieldPatentLinkList.addAll(this.setPatentBatchIndexDataList(tempList, params.getPatentIds(), field, projectFieldText.getId(), params.getProjectId())); break; case 3: case 4: this.deleteByPatentIdsAndProjectIdAndFieldId(params.getPatentIds(), params.getProjectId(), field.getId()); case 5: case 6: tempList = this.getProjectPatentLinkByPatentIdsAndProjectId(params.getPatentIds(), params.getProjectId()); tempList = tempList.stream().filter(item -> fieldList.stream().map(ProjectField::getId).collect(Collectors.toList()).contains(item.getFieldId())).collect(Collectors.toList()); for (Integer optionId : field.getSelected()) { projectFieldPatentLinkList.addAll(this.setPatentBatchIndexDataList(tempList, params.getPatentIds(), field, optionId, params.getProjectId())); } break; } } if (projectFieldPatentLinkList.size() != 0) { this.saveOrUpdateBatch(projectFieldPatentLinkList); } } private List setPatentBatchIndexDataList(List tempList, List patentIds, ProjectField field, Integer optionId, Integer projectId) { List dataList = new ArrayList<>(); for (Integer patentId : patentIds) { ProjectFieldPatentLink temp = tempList.stream().filter(item -> item.getFieldId().equals(field.getId()) && item.getOptionId().equals(optionId) && item.getPatentId().equals(patentId)).findFirst().orElse(null); if (temp == null) { ProjectFieldPatentLink projectFieldPatentLink = new ProjectFieldPatentLink(); projectFieldPatentLink.setFieldId(field.getId()); projectFieldPatentLink.setProjectId(projectId); projectFieldPatentLink.setType(field.getType()); projectFieldPatentLink.setCreateBy(loginUtils.getId()); projectFieldPatentLink.setOptionId(optionId); projectFieldPatentLink.setPatentId(patentId); dataList.add(projectFieldPatentLink); } } return dataList; } public List getPatentIndexSetting2(Integer patentId, Integer projectId) { List dataList = new ArrayList<>(); List projectFieldList = projectFieldService.getProjectFieldByProjectId(projectId); for (ProjectField projectField : projectFieldList) { PatentIndexSettingVO params = new PatentIndexSettingVO(); CustomFieldLabelDTO data = new CustomFieldLabelDTO(); params.setId(patentId); params.setType(projectField.getType()); params.setFieldId(projectField.getId()); params.setProjectId(projectId); data.setName(projectField.getName()); data.setId(projectField.getId()); data.setType(projectField.getType()); data.setSelected(this.getPatentIndexSetting(params)); dataList.add(data); } return dataList; } public List getPatentIndexSetting(PatentIndexSettingVO params) { List projectFieldPatentLinkList = this.getProjectPatentLinkByPatentAndProjectIdAndFieldId(params.getId(), params.getProjectId(), params.getFieldId()); List optionIds = projectFieldPatentLinkList.stream().map(ProjectFieldPatentLink::getOptionId).collect(Collectors.toList()); List mapList = new ArrayList<>(); switch (params.getType()) { case 0: case 1: case 2: List projectFieldTextList = projectFieldTextService.getProjectFieldTextByIds(optionIds); for (ProjectFieldText projectFieldText : projectFieldTextList) { LabelDTO map = new LabelDTO(); map.setValue(projectFieldText.getId()); map.setLabel(projectFieldText.getText()); mapList.add(map); } break; case 3: case 4: case 5: List projectFieldOptionList = projectFieldOptionService.getFieldOptionListByIds(optionIds); for (ProjectFieldOption projectFieldOption : projectFieldOptionList) { LabelDTO map = new LabelDTO(); map.setValue(projectFieldOption.getId()); map.setLabel(projectFieldOption.getName()); mapList.add(map); } break; case 6: List projectFieldTreeList = projectFieldTreeService.getProjectFieldTreeOptionByIds(optionIds); for (ProjectFieldTree projectFieldTree : projectFieldTreeList) { LabelDTO map = new LabelDTO(); map.setValue(projectFieldTree.getId()); map.setLabel(projectFieldTree.getName()); mapList.add(map); } break; } return mapList; } @Transactional public void updatePatentIndexSetting(PatentIndexSettingVO params) { this.deleteByPatentIdAndProjectIdAndFieldId(params.getId(), params.getProjectId(), params.getFieldId()); List optionIds = params.getSelected().stream().map(LabelDTO::getValue).distinct().collect(Collectors.toList()); List texts = params.getSelected().stream().map(LabelDTO::getLabel).distinct().collect(Collectors.toList()); List projectFieldPatentLinkList = new ArrayList<>(); switch (params.getType()) { case 0: case 1: case 2: List tempList = projectFieldTextService.getProjectFieldTextByFieldId(params.getFieldId()); for (String text : texts) { if (StringUtils.isEmpty(text)) { continue; } ProjectFieldText projectFieldText = tempList.stream().filter(item -> item.getText().equals(text)).findFirst().orElse(null); if (projectFieldText == null) { projectFieldText = new ProjectFieldText(); projectFieldText.setFieldId(params.getFieldId()); projectFieldText.setText(text); projectFieldText.insert(); } ProjectFieldPatentLink projectFieldPatentLink = new ProjectFieldPatentLink(); projectFieldPatentLink.setProjectId(params.getProjectId()); projectFieldPatentLink.setPatentId(params.getId()); projectFieldPatentLink.setType(params.getType()); projectFieldPatentLink.setFieldId(params.getFieldId()); projectFieldPatentLink.setCreateBy(loginUtils.getId()); projectFieldPatentLink.setOptionId(projectFieldText.getId()); projectFieldPatentLinkList.add(projectFieldPatentLink); } break; case 3: case 4: case 5: case 6: for (Integer optionId : optionIds) { ProjectFieldPatentLink projectFieldPatentLink = new ProjectFieldPatentLink(); projectFieldPatentLink.setProjectId(params.getProjectId()); projectFieldPatentLink.setPatentId(params.getId()); projectFieldPatentLink.setType(params.getType()); projectFieldPatentLink.setFieldId(params.getFieldId()); projectFieldPatentLink.setCreateBy(loginUtils.getId()); projectFieldPatentLink.setOptionId(optionId); projectFieldPatentLinkList.add(projectFieldPatentLink); } break; } if (projectFieldPatentLinkList.size() != 0) { this.saveOrUpdateBatch(projectFieldPatentLinkList); } } public void importProjectFieldPatentLink(List importPatentList, List localPatentList, List importProjectPatentLinkList, Integer projectId, Integer userId, Integer importProjectFieldId, Integer importProjectFieldOptionId, Integer localProjectFieldId, Integer localProjectFieldOptionId) { List importProjectFieldPatentLinkList = importProjectPatentLinkList.stream().filter(item -> item.getFieldId().equals(importProjectFieldId) && item.getOptionId().equals(importProjectFieldOptionId)).collect(Collectors.toList()); for (ProjectFieldPatentLink projectFieldPatentLink : importProjectFieldPatentLinkList) { Patent importPatent = importPatentList.stream().filter(item -> item.getId().equals(projectFieldPatentLink.getPatentId())).findFirst().orElse(new Patent()); Patent localPatent = localPatentList.stream().filter(item -> item.getPatentNo().equals(importPatent.getPatentNo())).findFirst().orElse(null); if (localPatent == null) { continue; } projectFieldPatentLink.setId(null); projectFieldPatentLink.setCreateBy(userId); projectFieldPatentLink.setProjectId(projectId); projectFieldPatentLink.setPatentId(localPatent.getId()); projectFieldPatentLink.setFieldId(localProjectFieldId); projectFieldPatentLink.setOptionId(localProjectFieldOptionId); } this.saveOrUpdateBatch(importProjectFieldPatentLinkList); } }