调整检查项目
This commit is contained in:
parent
2e153843d8
commit
01598e8eee
@ -530,162 +530,182 @@ public class InspectPatientController {
|
||||
// 创建报告VO对象
|
||||
InspectPatientReportVO inspectPatientReportVO = new InspectPatientReportVO();
|
||||
|
||||
// 设置基本信息
|
||||
if (patientDO != null) {
|
||||
// 设置患者基本信息
|
||||
inspectPatientReportVO.setMedicalSn(patientDO.getMedicalSn());
|
||||
inspectPatientReportVO.setPName(patientDO.getPName());
|
||||
inspectPatientReportVO.setGender(patientDO.getGender());
|
||||
if (patientDO.getBirthday() != null) {
|
||||
inspectPatientReportVO.setBirthday(patientDO.getBirthday().toLocalDate());
|
||||
}
|
||||
inspectPatientReportVO.setPhoneNum(patientDO.getPhoneNum());
|
||||
inspectPatientReportVO.setHeadPicUrl(patientDO.getHeadPicUrl());
|
||||
inspectPatientReportVO.setDomicileaddress(patientDO.getDomicileaddress());
|
||||
inspectPatientReportVO.setSummaryResult(patientDO.getSummaryResult());
|
||||
// 设置基本信息
|
||||
BeanUtils.copyProperties(patientDO, inspectPatientReportVO);
|
||||
|
||||
// 获取患者检查项目信息
|
||||
List<InspectPatientitemsDO> patientItems = patientitemsService.getPatientItemsOfMedicalSn(medicalSn);
|
||||
// 获取所有检查项目信息(包括基础检查项目)
|
||||
List<InspectPatientitemsDO> allItems = patientitemsService.GetPatientItemList(medicalSn);
|
||||
// 获取PACS数据
|
||||
List<InspectPacsDataDO> pacsDataList = pacsDataService.GetpacsData(medicalSn);
|
||||
|
||||
// 创建一个Map来存储已处理的类型,用于合并相同类型的数据
|
||||
Map<String, InspectPatientReportDataVO> typeToDataMap = new HashMap<>();
|
||||
List<InspectPatientReportDataVO> dataList = new ArrayList<>();
|
||||
|
||||
// 处理检查项目数据
|
||||
if (patientItems != null && !patientItems.isEmpty()) {
|
||||
for (InspectPatientitemsDO item : patientItems) {
|
||||
String itemType = getItemType(item.getItemCode(), item.getItemName());
|
||||
// 1. 首先处理所有基础检查项目
|
||||
if (allItems != null) {
|
||||
for (InspectPatientitemsDO item : allItems) {
|
||||
InspectPatientReportDataVO itemData = new InspectPatientReportDataVO();
|
||||
|
||||
// 检查是否已存在相同类型的数据
|
||||
InspectPatientReportDataVO itemData = typeToDataMap.get(itemType);
|
||||
if (itemData == null) {
|
||||
itemData = new InspectPatientReportDataVO();
|
||||
itemData.setItemCode(item.getItemCode());
|
||||
itemData.setItemName(item.getItemName());
|
||||
itemData.setType(itemType);
|
||||
typeToDataMap.put(itemType, itemData);
|
||||
}
|
||||
// 设置基本项目信息
|
||||
itemData.setItemCode(item.getItemCode());
|
||||
itemData.setItemName(item.getItemName());
|
||||
itemData.setExamDescription(item.getExamDescription());
|
||||
itemData.setItemResult(item.getItemResult());
|
||||
itemData.setAnalyse(item.getAnalyse());
|
||||
itemData.setInspectdoctor(item.getInspectdoctor());
|
||||
itemData.setInspecttime(item.getInspecttime());
|
||||
itemData.setType(item.getItemName());
|
||||
|
||||
// 更新数据,优先使用非空值
|
||||
if (item.getExamDescription() != null) {
|
||||
itemData.setExamDescription(item.getExamDescription());
|
||||
}
|
||||
// 尝试转换数值结果
|
||||
if (item.getItemResult() != null) {
|
||||
itemData.setItemResult(item.getItemResult());
|
||||
// 尝试将结果转换为数值
|
||||
try {
|
||||
itemData.setItemValue(Double.parseDouble(item.getItemResult()));
|
||||
} catch (NumberFormatException e) {
|
||||
// 如果无法转换为数值,保持为null
|
||||
} catch (NumberFormatException ignored) {
|
||||
// 如果不是数值,保持为null
|
||||
}
|
||||
}
|
||||
if (item.getAnalyse() != null) {
|
||||
itemData.setAnalyse(item.getAnalyse());
|
||||
}
|
||||
if (item.getInspectdoctor() != null) {
|
||||
itemData.setInspectdoctor(item.getInspectdoctor());
|
||||
}
|
||||
if (item.getInspecttime() != null) {
|
||||
itemData.setInspecttime(item.getInspecttime());
|
||||
|
||||
// 2. 查找并关联PACS数据
|
||||
if (pacsDataList != null) {
|
||||
for (InspectPacsDataDO pacsData : pacsDataList) {
|
||||
if (isPacsMatchingItem(pacsData.getType(), item.getItemCode(), item.getItemName())) {
|
||||
itemData.setData(pacsData.getData());
|
||||
itemData.setPacsDataType(pacsData.getType());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dataList.add(itemData);
|
||||
}
|
||||
}
|
||||
|
||||
// 处理PACS数据并与项目数据整合
|
||||
if (pacsDataList != null && !pacsDataList.isEmpty()) {
|
||||
// 3. 处理可能存在的独立PACS数据
|
||||
if (pacsDataList != null) {
|
||||
for (InspectPacsDataDO pacsData : pacsDataList) {
|
||||
String pacsType = pacsData.getType();
|
||||
if (pacsType == null) continue;
|
||||
|
||||
// 尝试找到匹配的项目类型
|
||||
String matchedType = findMatchingItemType(pacsType, typeToDataMap.keySet());
|
||||
|
||||
if (matchedType != null) {
|
||||
// 找到匹配的项目,更新数据
|
||||
InspectPatientReportDataVO itemData = typeToDataMap.get(matchedType);
|
||||
if (pacsData.getData() != null) {
|
||||
itemData.setData(pacsData.getData());
|
||||
// 检查该PACS数据是否已经被关联
|
||||
boolean alreadyLinked = false;
|
||||
for (InspectPatientReportDataVO existingData : dataList) {
|
||||
if (existingData.getPacsDataType() != null &&
|
||||
existingData.getPacsDataType().equals(pacsData.getType())) {
|
||||
alreadyLinked = true;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
// 没有找到匹配的项目,创建新的数据项
|
||||
InspectPatientReportDataVO pacsDataVO = new InspectPatientReportDataVO();
|
||||
pacsDataVO.setData(pacsData.getData());
|
||||
pacsDataVO.setType(pacsType);
|
||||
typeToDataMap.put(pacsType, pacsDataVO);
|
||||
}
|
||||
|
||||
// 如果未被关联,创建新的数据项
|
||||
if (!alreadyLinked) {
|
||||
InspectPatientReportDataVO pacsOnlyData = new InspectPatientReportDataVO();
|
||||
pacsOnlyData.setItemName(getPacsItemName(pacsData.getType()));
|
||||
pacsOnlyData.setData(pacsData.getData());
|
||||
pacsOnlyData.setPacsDataType(pacsData.getType());
|
||||
pacsOnlyData.setType(pacsData.getType());
|
||||
dataList.add(pacsOnlyData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 将Map中的数据转换为List
|
||||
List<InspectPatientReportDataVO> dataList = new ArrayList<>(typeToDataMap.values());
|
||||
|
||||
// 设置数据列表
|
||||
inspectPatientReportVO.setData(dataList);
|
||||
// 设置排序后的数据列表
|
||||
inspectPatientReportVO.setData(sortReportData(dataList));
|
||||
}
|
||||
|
||||
return success(inspectPatientReportVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取项目类型
|
||||
* 对报告数据进行排序
|
||||
*/
|
||||
private String getItemType(String itemCode, String itemName) {
|
||||
if (itemCode == null && itemName == null) {
|
||||
return "未知";
|
||||
}
|
||||
private List<InspectPatientReportDataVO> sortReportData(List<InspectPatientReportDataVO> dataList) {
|
||||
// 定义基础检查项目的顺序
|
||||
Map<String, Integer> orderMap = new HashMap<>();
|
||||
orderMap.put("TW", 1); // 体温
|
||||
orderMap.put("ML", 2); // 脉率
|
||||
orderMap.put("HXPL", 3); // 呼吸频率
|
||||
orderMap.put("XY", 4); // 血压
|
||||
orderMap.put("SH", 5); // 身高
|
||||
orderMap.put("TZ", 6); // 体重
|
||||
orderMap.put("YW", 7); // 腰围
|
||||
orderMap.put("BMI", 8); // BMI
|
||||
|
||||
if (itemName != null) {
|
||||
return itemName;
|
||||
}
|
||||
dataList.sort((a, b) -> {
|
||||
String codeA = a.getItemCode();
|
||||
String codeB = b.getItemCode();
|
||||
|
||||
// 获取排序值,默认为100(放在基础检查项目后面)
|
||||
int orderA = getOrderValue(codeA, orderMap);
|
||||
int orderB = getOrderValue(codeB, orderMap);
|
||||
|
||||
return Integer.compare(orderA, orderB);
|
||||
});
|
||||
|
||||
// 根据项目代码推断类型
|
||||
if (itemCode != null) {
|
||||
if (itemCode.contains("XCG")) return "血常规";
|
||||
if (itemCode.contains("NCG")) return "尿常规";
|
||||
if (itemCode.contains("SHQX")) return "生化全项";
|
||||
if(itemCode.contains("ECG")) return "心电图";
|
||||
if (itemCode.contains("US")) return "超声";
|
||||
}
|
||||
|
||||
return itemCode;
|
||||
return dataList;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查找匹配的项目类型
|
||||
* 获取项目的排序值
|
||||
*/
|
||||
private String findMatchingItemType(String pacsType, Set<String> itemTypes) {
|
||||
if (pacsType == null) return null;
|
||||
private int getOrderValue(String itemCode, Map<String, Integer> orderMap) {
|
||||
if (itemCode == null) return 100;
|
||||
|
||||
// 直接匹配
|
||||
if (itemTypes.contains(pacsType)) {
|
||||
return pacsType;
|
||||
for (Map.Entry<String, Integer> entry : orderMap.entrySet()) {
|
||||
if (itemCode.startsWith(entry.getKey())) {
|
||||
return entry.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
return 100;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断PACS数据是否匹配检查项目
|
||||
*/
|
||||
private boolean isPacsMatchingItem(String pacsType, String itemCode, String itemName) {
|
||||
if (pacsType == null || (itemCode == null && itemName == null)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 模糊匹配
|
||||
pacsType = pacsType.toUpperCase();
|
||||
for (String itemType : itemTypes) {
|
||||
if (itemType == null) continue;
|
||||
|
||||
String upperItemType = itemType.toUpperCase();
|
||||
|
||||
// 根据类型匹配
|
||||
if (pacsType.equals("XC") && (upperItemType.contains("XC") || upperItemType.contains("血常规"))) {
|
||||
return itemType;
|
||||
}
|
||||
if (pacsType.equals("NC") && (upperItemType.contains("NC") || upperItemType.contains("尿常规"))) {
|
||||
return itemType;
|
||||
}
|
||||
if ((pacsType.equals("EC") || pacsType.equals("ECG")) &&
|
||||
(upperItemType.contains("EC") || upperItemType.contains("ECG") || upperItemType.contains("心电图"))) {
|
||||
return itemType;
|
||||
}
|
||||
if (pacsType.equals("US") && (upperItemType.contains("US") || upperItemType.contains("超声"))) {
|
||||
return itemType;
|
||||
}
|
||||
|
||||
// 根据项目代码匹配
|
||||
if (itemCode != null) {
|
||||
String upperItemCode = itemCode.toUpperCase();
|
||||
if (pacsType.equals("XC") && upperItemCode.contains("XCG")) return true;
|
||||
if (pacsType.equals("NC") && upperItemCode.contains("NCG")) return true;
|
||||
if ((pacsType.equals("EC") || pacsType.equals("ECG")) && upperItemCode.contains("ECG")) return true;
|
||||
if (pacsType.equals("US") && upperItemCode.contains("US")) return true;
|
||||
}
|
||||
|
||||
return null;
|
||||
// 根据项目名称匹配
|
||||
if (itemName != null) {
|
||||
String upperItemName = itemName.toUpperCase();
|
||||
if (pacsType.equals("XC") && upperItemName.contains("血常规")) return true;
|
||||
if (pacsType.equals("NC") && upperItemName.contains("尿常规")) return true;
|
||||
if ((pacsType.equals("EC") || pacsType.equals("ECG")) && upperItemName.contains("心电图")) return true;
|
||||
if (pacsType.equals("US") && upperItemName.contains("超声")) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取PACS项目名称
|
||||
*/
|
||||
private String getPacsItemName(String pacsType) {
|
||||
if (pacsType == null) return "未知检查";
|
||||
|
||||
switch (pacsType.toUpperCase()) {
|
||||
case "XC":
|
||||
case "XCG": return "血常规";
|
||||
case "NC":
|
||||
case "NCG": return "尿常规";
|
||||
case "EC":
|
||||
case "ECG": return "心电图";
|
||||
case "US": return "超声检查";
|
||||
case "BT": return "生化全项";
|
||||
case "RT": return "尿常规";
|
||||
case "CBC": return "血常规";
|
||||
default: return pacsType;
|
||||
}
|
||||
}
|
||||
|
||||
@PutMapping("/GetApiYbjcInfo")
|
||||
|
Loading…
Reference in New Issue
Block a user