调整检查项目

This commit is contained in:
Euni4U 2025-03-18 18:07:31 +08:00
parent 2e153843d8
commit 01598e8eee

View File

@ -530,162 +530,182 @@ public class InspectPatientController {
// 创建报告VO对象 // 创建报告VO对象
InspectPatientReportVO inspectPatientReportVO = new InspectPatientReportVO(); InspectPatientReportVO inspectPatientReportVO = new InspectPatientReportVO();
// 设置基本信息
if (patientDO != null) { if (patientDO != null) {
// 设置患者基本信息 // 设置基本信息
inspectPatientReportVO.setMedicalSn(patientDO.getMedicalSn()); BeanUtils.copyProperties(patientDO, inspectPatientReportVO);
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());
// 获取患者检查项目信息 // 获取所有检查项目信息包括基础检查项目
List<InspectPatientitemsDO> patientItems = patientitemsService.getPatientItemsOfMedicalSn(medicalSn); List<InspectPatientitemsDO> allItems = patientitemsService.GetPatientItemList(medicalSn);
// 获取PACS数据 // 获取PACS数据
List<InspectPacsDataDO> pacsDataList = pacsDataService.GetpacsData(medicalSn); List<InspectPacsDataDO> pacsDataList = pacsDataService.GetpacsData(medicalSn);
// 创建一个Map来存储已处理的类型用于合并相同类型的数据 List<InspectPatientReportDataVO> dataList = new ArrayList<>();
Map<String, InspectPatientReportDataVO> typeToDataMap = new HashMap<>();
// 处理检查项目数据 // 1. 首先处理所有基础检查项目
if (patientItems != null && !patientItems.isEmpty()) { if (allItems != null) {
for (InspectPatientitemsDO item : patientItems) { for (InspectPatientitemsDO item : allItems) {
String itemType = getItemType(item.getItemCode(), item.getItemName()); InspectPatientReportDataVO itemData = new InspectPatientReportDataVO();
// 检查是否已存在相同类型的数据 // 设置基本项目信息
InspectPatientReportDataVO itemData = typeToDataMap.get(itemType);
if (itemData == null) {
itemData = new InspectPatientReportDataVO();
itemData.setItemCode(item.getItemCode()); itemData.setItemCode(item.getItemCode());
itemData.setItemName(item.getItemName()); itemData.setItemName(item.getItemName());
itemData.setType(itemType);
typeToDataMap.put(itemType, itemData);
}
// 更新数据优先使用非空值
if (item.getExamDescription() != null) {
itemData.setExamDescription(item.getExamDescription()); itemData.setExamDescription(item.getExamDescription());
}
if (item.getItemResult() != null) {
itemData.setItemResult(item.getItemResult()); itemData.setItemResult(item.getItemResult());
// 尝试将结果转换为数值 itemData.setAnalyse(item.getAnalyse());
itemData.setInspectdoctor(item.getInspectdoctor());
itemData.setInspecttime(item.getInspecttime());
itemData.setType(item.getItemName());
// 尝试转换数值结果
if (item.getItemResult() != null) {
try { try {
itemData.setItemValue(Double.parseDouble(item.getItemResult())); itemData.setItemValue(Double.parseDouble(item.getItemResult()));
} catch (NumberFormatException e) { } catch (NumberFormatException ignored) {
// 如果无法转换为数值保持为null // 如果不是数值保持为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());
}
} }
} }
// 处理PACS数据并与项目数据整合 // 2. 查找并关联PACS数据
if (pacsDataList != null && !pacsDataList.isEmpty()) { if (pacsDataList != null) {
for (InspectPacsDataDO pacsData : pacsDataList) { for (InspectPacsDataDO pacsData : pacsDataList) {
String pacsType = pacsData.getType(); if (isPacsMatchingItem(pacsData.getType(), item.getItemCode(), item.getItemName())) {
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()); itemData.setData(pacsData.getData());
} itemData.setPacsDataType(pacsData.getType());
} else { break;
// 没有找到匹配的项目创建新的数据项
InspectPatientReportDataVO pacsDataVO = new InspectPatientReportDataVO();
pacsDataVO.setData(pacsData.getData());
pacsDataVO.setType(pacsType);
typeToDataMap.put(pacsType, pacsDataVO);
} }
} }
} }
// 将Map中的数据转换为List dataList.add(itemData);
List<InspectPatientReportDataVO> dataList = new ArrayList<>(typeToDataMap.values()); }
}
// 设置数据列表 // 3. 处理可能存在的独立PACS数据
inspectPatientReportVO.setData(dataList); if (pacsDataList != null) {
for (InspectPacsDataDO pacsData : pacsDataList) {
// 检查该PACS数据是否已经被关联
boolean alreadyLinked = false;
for (InspectPatientReportDataVO existingData : dataList) {
if (existingData.getPacsDataType() != null &&
existingData.getPacsDataType().equals(pacsData.getType())) {
alreadyLinked = true;
break;
}
}
// 如果未被关联创建新的数据项
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);
}
}
}
// 设置排序后的数据列表
inspectPatientReportVO.setData(sortReportData(dataList));
} }
return success(inspectPatientReportVO); return success(inspectPatientReportVO);
} }
/** /**
* 获取项目类型 * 对报告数据进行排序
*/ */
private String getItemType(String itemCode, String itemName) { private List<InspectPatientReportDataVO> sortReportData(List<InspectPatientReportDataVO> dataList) {
if (itemCode == null && itemName == null) { // 定义基础检查项目的顺序
return "未知"; 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) { dataList.sort((a, b) -> {
return itemName; String codeA = a.getItemCode();
} String codeB = b.getItemCode();
// 根据项目代码推断类型 // 获取排序值默认为100放在基础检查项目后面
if (itemCode != null) { int orderA = getOrderValue(codeA, orderMap);
if (itemCode.contains("XCG")) return "血常规"; int orderB = getOrderValue(codeB, orderMap);
if (itemCode.contains("NCG")) return "尿常规";
if (itemCode.contains("SHQX")) return "生化全项";
if(itemCode.contains("ECG")) return "心电图";
if (itemCode.contains("US")) return "超声";
}
return itemCode; return Integer.compare(orderA, orderB);
});
return dataList;
} }
/** /**
* 查找匹配的项目类型 * 获取项目的排序值
*/ */
private String findMatchingItemType(String pacsType, Set<String> itemTypes) { private int getOrderValue(String itemCode, Map<String, Integer> orderMap) {
if (pacsType == null) return null; if (itemCode == null) return 100;
// 直接匹配 for (Map.Entry<String, Integer> entry : orderMap.entrySet()) {
if (itemTypes.contains(pacsType)) { if (itemCode.startsWith(entry.getKey())) {
return pacsType; 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(); pacsType = pacsType.toUpperCase();
for (String itemType : itemTypes) {
if (itemType == null) continue;
String upperItemType = itemType.toUpperCase(); // 根据项目代码匹配
if (itemCode != null) {
// 根据类型匹配 String upperItemCode = itemCode.toUpperCase();
if (pacsType.equals("XC") && (upperItemType.contains("XC") || upperItemType.contains("血常规"))) { if (pacsType.equals("XC") && upperItemCode.contains("XCG")) return true;
return itemType; if (pacsType.equals("NC") && upperItemCode.contains("NCG")) return true;
} if ((pacsType.equals("EC") || pacsType.equals("ECG")) && upperItemCode.contains("ECG")) return true;
if (pacsType.equals("NC") && (upperItemType.contains("NC") || upperItemType.contains("尿常规"))) { if (pacsType.equals("US") && upperItemCode.contains("US")) return true;
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;
}
} }
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") @PutMapping("/GetApiYbjcInfo")