调整检查项目

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对象
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")