manage: fix查询疾病身体部位树

dev_2.1.0
xueqingkun 1 year ago
parent ad3a265fb6
commit 67756e9947

@ -15,7 +15,7 @@ import java.util.List;
@Api(tags = "疾病体格检查管理")
@RestController
@RequestMapping("diseasePhysical")
@RequestMapping("/diseasePhysical")
@RequiredArgsConstructor
public class DiseasePhysicalManageController {

@ -1,14 +1,15 @@
package com.supervision.manage.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.supervision.manage.service.DiseasePhysicalManageService;
import com.supervision.manage.service.PhysicalLocationManageService;
import com.supervision.model.ConfigPhysicalLocation;
import com.supervision.model.DefaultPhysicalIndicator;
import com.supervision.model.DiseasePhysical;
import com.supervision.service.ConfigPhysicalLocationService;
import com.supervision.service.DefaultPhysicalIndicatorService;
import com.supervision.service.DiseasePhysicalService;
import com.supervision.vo.manage.DiseasePhysicalLocationNodeVo;
@ -30,6 +31,8 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe
private final PhysicalLocationManageService physicalToolManageService;
private final ConfigPhysicalLocationService configPhysicalLocationService;
private final DefaultPhysicalIndicatorService defaultPhysicalIndicatorService;
@ -88,24 +91,32 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe
DiseasePhysicalLocationNodeVo bean = BeanUtil.toBean(physicalLocationNode, DiseasePhysicalLocationNodeVo.class);
if (StrUtil.isEmpty(toolId)){
// 工具id为空全部设置为禁用标识
bean.getChild().forEach(vo->vo.setFlag(true));
return bean.getChild();
}
// 2. 根据疾病id查询疾病体格检查项
List<DiseasePhysicalResVo> diseasePhysicalResVos = diseasePhysicalService.queryListByDiseaseId(diseaseId);
if (CollectionUtil.isEmpty(diseasePhysicalResVos)){
// 在体格检查配置身体位置时,只能配置一级部位,此时默认下级的部位也已经被配置。如果工具没有设置,应该子节点设置为禁用
List<DefaultPhysicalIndicator> defaultPhysicalIndicatorList = defaultPhysicalIndicatorService.lambdaQuery().eq(DefaultPhysicalIndicator::getItemId, toolId).list();
if (CollectionUtil.isEmpty(defaultPhysicalIndicatorList)){
// 如果未配置,所有子节点设置为禁用
bean.getChild().forEach(vo->vo.setFlag(true));
return bean.getChild();
}
// 2. 根据疾病id查询疾病体格检查项
List<DiseasePhysicalResVo> diseasePhysicalResVos = diseasePhysicalService.queryListByDiseaseId(diseaseId);
List<String> locationIds = diseasePhysicalResVos.stream().filter(vo->toolId.equals(vo.getToolId()))
.map(DiseasePhysical::getLocationId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
// 3. 填充疾病体格检查树中的flag属性
// 3.1 检查该位置是否已经配置
// 3.2检查工具没有配置检查位,设置禁用标识
List<String> locationIds = diseasePhysicalResVos.stream().filter(vo->toolId.equals(vo.getToolId()))
.map(DiseasePhysical::getLocationId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
List<DefaultPhysicalIndicator> defaultPhysicalIndicatorList = defaultPhysicalIndicatorService.lambdaQuery().eq(DefaultPhysicalIndicator::getItemId, toolId).list();
if (CollectionUtil.isEmpty(defaultPhysicalIndicatorList)){
return bean.getChild();
}
// node: 现在认为一个检查项目和一个位置组成一条唯一数据
// 二次子集查询身体部位
List<String> parentIds = defaultPhysicalIndicatorList.stream().map(DefaultPhysicalIndicator::getLocationId).distinct().collect(Collectors.toList());
List<String> childLocationIds = configPhysicalLocationService.lambdaQuery().in(ConfigPhysicalLocation::getParentId, parentIds)
.list().stream().map(ConfigPhysicalLocation::getId).collect(Collectors.toList());
// note: 现在认为一个检查项目和一个位置组成一条唯一数据
Map<String, DefaultPhysicalIndicator> indicatorMap = defaultPhysicalIndicatorList.stream()
.collect(Collectors.toMap(DefaultPhysicalIndicator::getLocationId, p -> p, (v1, v2) -> v1));
for (DiseasePhysicalLocationNodeVo diseasePhysicalLocationNodeVo : bean.getChild()) {
@ -116,8 +127,11 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe
}
for (DiseasePhysicalLocationNodeVo physicalLocationNodeVo : child) {
String nodeId = physicalLocationNodeVo.getId();
// 1. 该位置是否已经配置 结果为禁用
// 2. 该身体部位(下级部位)配置了默认检查结果,结果为可用
physicalLocationNodeVo.setFlag(
locationIds.contains(nodeId) || !indicatorMap.containsKey(nodeId));
locationIds.contains(nodeId) ||
!(indicatorMap.containsKey(nodeId) || childLocationIds.contains(nodeId)));
if (Objects.nonNull(indicatorMap.get(nodeId))) {
physicalLocationNodeVo.setIndicatorValue(indicatorMap.get(nodeId).getIndicatorValue());
}
@ -126,18 +140,6 @@ public class DiseasePhysicalManageServiceImpl implements DiseasePhysicalManageSe
return bean.getChild();
}
private void populateDiseasePhysicalLocationNodeFlag(DiseasePhysicalLocationNodeVo node,List<String> locationIds) {
if (StrUtil.isNotEmpty(node.getId())){
node.setFlag(locationIds.contains(node.getId()));
}
if (CollectionUtil.isNotEmpty(node.getChild())){
for (DiseasePhysicalLocationNodeVo childNode : node.getChild()) {
populateDiseasePhysicalLocationNodeFlag(childNode,locationIds);
}
}
}
private void assertDiseasePhysical(DiseasePhysical diseasePhysical){
Assert.isTrue(StrUtil.isNotEmpty(diseasePhysical.getDiseaseId()),"疾病id不能为空");

Loading…
Cancel
Save