*
* @author 王岩
* @since 2021-12-16
*/
@Service
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
public class ProjectFieldService extends ServiceImpl {
private final ProjectFieldOptionService projectFieldOptionService;
private final ProjectFieldTreeService projectFieldTreeService;
private final ProjectFolderService projectFolderService;
private final ProjectFieldTextService projectFieldTextService;
private final ProjectFieldPatentLinkService projectFieldPatentLinkService;
private final PatentService patentService;
private final FileUtils fileUtils;
private final LoginUtils loginUtils;
private final OutInterfaceService outInterfaceService;
private final CacheUtils cacheUtils;
public List getPatentFieldByPatentIdAndProjectId(Integer projectId, Integer patentId) {
List dataList = new ArrayList<>();
List linkList = projectFieldPatentLinkService.getProjectPatentLinkByPatentAndProId(patentId, projectId);
List fieldIds = linkList.stream().map(ProjectFieldPatentLink::getFieldId).distinct().collect(Collectors.toList());
List optionIds = linkList.stream().map(ProjectFieldPatentLink::getOptionId).distinct().collect(Collectors.toList());
List fieldList = this.getFieldListByIds(fieldIds);
List textList = projectFieldTextService.getProjectFieldTextByFieldIds(fieldIds);
List optionList = projectFieldOptionService.getFieldOptionList(fieldIds);
List treeList = projectFieldTreeService.getProjectFieldTreeOptionByFieldIds(fieldIds);
fieldList.forEach(field -> {
PatentDTO.Field data = new PatentDTO.Field();
data.setId(field.getId());
data.setName(field.getName());
data.setType(field.getType());
switch (field.getType()) {
case 0:
case 1:
case 2:
data.setSelected(textList.stream().filter(item -> item.getFieldId().equals(field.getId()) && optionIds.contains(item.getId())).map(ProjectFieldText::getText).distinct().collect(Collectors.toList()));
break;
case 3:
case 4:
case 5:
data.setSelected(optionList.stream().filter(item -> item.getFieldId().equals(field.getId()) && optionIds.contains(item.getId())).map(ProjectFieldOption::getName).distinct().collect(Collectors.toList()));
break;
case 6:
List trees = treeList.stream().filter(item -> item.getFieldId().equals(field.getId())).collect(Collectors.toList());
List optionTree = trees.stream().filter(item -> optionIds.contains(item.getId())).collect(Collectors.toList());
List selected = new ArrayList<>();
optionTree.forEach(item -> selected.add(PatentUtils.getTreeNodeFullName(trees, item.getPath())));
data.setSelected(selected);
break;
}
dataList.add(data);
});
return dataList;
}
public Map> getPatentFieldByPatentIdAndProjectId2(Integer projectId, List patentIds) {
Map> map = new HashMap<>();
List linkList = new ArrayList<>();
//根据专利号和专题库id获得所有自定义字段关联数据
if (patentIds.size() > 0) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(ProjectFieldPatentLink::getPatentId, patentIds);
queryWrapper.eq(ProjectFieldPatentLink::getProjectId, projectId);
linkList = projectFieldPatentLinkService.list(queryWrapper);
}
List fieldIds = linkList.stream().map(ProjectFieldPatentLink::getFieldId).distinct().collect(Collectors.toList());
List fieldList = this.getFieldListByIds(fieldIds);
List textList = projectFieldTextService.getProjectFieldTextByFieldIds(fieldIds);
List optionList = projectFieldOptionService.getFieldOptionList(fieldIds);
List treeList = projectFieldTreeService.getProjectFieldTreeOptionByFieldIds(fieldIds);
//遍历专利
for (Integer patentId : patentIds) {
List dataList = new ArrayList<>();
//获得当前专利的关联信息
List temLinkList = linkList.stream().filter(item -> item.getPatentId().equals(patentId)).collect(Collectors.toList());
//过滤出当前专利的自定义栏位
List temFieldIds = linkList.stream().filter(item -> item.getPatentId().equals(patentId)).map(ProjectFieldPatentLink::getFieldId).distinct().collect(Collectors.toList());
List temFieldList = fieldList.stream().filter(item -> temFieldIds.contains(item.getId())).collect(Collectors.toList());
temFieldList.forEach(field -> {
List valueIds = temLinkList.stream().filter(item -> item.getFieldId().equals(field.getId())).map(ProjectFieldPatentLink::getOptionId).collect(Collectors.toList());
PatentDTO.Field data = new PatentDTO.Field();
data.setId(field.getId());
data.setName(field.getName());
data.setType(field.getType());
switch (field.getType()) {
case 0:
case 1:
case 2:
data.setSelected(textList.stream().filter(item -> item.getFieldId().equals(field.getId()) && valueIds.contains(item.getId())).map(ProjectFieldText::getText).distinct().collect(Collectors.toList()));
break;
case 3:
case 4:
case 5:
data.setSelected(optionList.stream().filter(item -> item.getFieldId().equals(field.getId()) && valueIds.contains(item.getId())).map(ProjectFieldOption::getName).distinct().collect(Collectors.toList()));
break;
case 6:
List trees = treeList.stream().filter(item -> item.getFieldId().equals(field.getId())).collect(Collectors.toList());
List optionTree = trees.stream().filter(item -> valueIds.contains(item.getId())).collect(Collectors.toList());
List selected = new ArrayList<>();
optionTree.forEach(item -> selected.add(PatentUtils.getTreeNodeFullName(trees, item.getPath())));
data.setSelected(selected);
break;
}
dataList.add(data);
});
map.put(patentId, dataList);
}
return map;
}
public List getProjectFieldByProjectId(Integer projectId) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProjectField::getProjectId, projectId);
return this.list(queryWrapper);
}
public List getSystemField(Integer projectId) {
List fieldList = new ArrayList<>();
List systemField = this.getProjectSystemField();
List customField = this.getProjectCustomField(projectId);
List expandList = this.getProjectFieldExpand();
List systemExpands = this.getProjectFieldSystemExpand();
for (ProjectField item : systemField) {
if (!item.getType().equals(96)) {
List eid = systemExpands.stream().filter(e -> e.getFieldId().equals(item.getId())).map(ProjectFieldSystemExpand::getExpandId).collect(Collectors.toList());
if (eid.size() != 0) {
item.setExpand(expandList.stream().filter(expand -> eid.contains(expand.getId())).collect(Collectors.toList()));
}
fieldList.add(item);
} else {
customField.add(item);
}
}
for (ProjectField item : customField) {
ProjectField field = new ProjectField();
field.setName(item.getName());
field.setId(item.getId());
field.setType(item.getType());
field.setPtype(this.getCustomFieldPtype(item, field, expandList));
fieldList.add(field);
}
return fieldList;
}
public Integer getCustomFieldPtype(ProjectField item, ProjectField field, List expandList) {
switch (item.getType()) {
case 0:
return 3;
case 1:
field.setExpand(expandList.stream().filter(e -> e.getPtype().equals(2) || e.getPtype().equals(4)).collect(Collectors.toList()));
return 0;
case 2:
case 3:
case 4:
case 5:
case 6:
return 1;
}
return item.getPtype();
}
public List getFieldListByIds(List ids) {
if (ids == null || ids.size() == 0) {
return new ArrayList<>();
}
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(ProjectField::getId, ids);
return this.list(queryWrapper);
}
public List getTreeOptionList(Integer projectId) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProjectField::getProjectId, projectId);
queryWrapper.eq(ProjectField::getType, 6);
List fieldList = this.list(queryWrapper);
for (ProjectField field : fieldList) {
List> treeList = projectFieldTreeService.getProjectFieldTreeNodeByFieldId(field.getId());
field.setOption(JsonUtils.jsonToList(JsonUtils.objectToJson(treeList), ProjectFieldOption.class));
}
return fieldList;
}
public List getProjectCustomField(Integer projectId) {
List fieldList = this.getProjectFieldByProjectId(projectId);
List optionList = projectFieldOptionService.getFieldOptionList(fieldList.stream().map(ProjectField::getId).collect(Collectors.toList()));
for (ProjectField item : fieldList) {
if (item.getType() != 6) {
item.setOption(optionList.stream().filter(option -> option.getFieldId().equals(item.getId())).collect(Collectors.toList()));
} else {
item.setOption(JsonUtils.jsonToList(JsonUtils.objectToJson(projectFieldTreeService.getProjectFieldTreeNodeByFieldId(item.getId())), ProjectFieldOption.class));
}
}
return fieldList;
}
public Map getCustomField(Integer projectId) {
Map result = new HashMap<>();
List indexs = new ArrayList<>();
List