From 9f9e9be084ea03f7b7eb301f2f6e201c6c2589d7 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 05 八月 2026 17:10:31 +0800
Subject: [PATCH] 【景宁】手术随访增加出院科室、病区限制
---
smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java | 463 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 426 insertions(+), 37 deletions(-)
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
index fa8c0f0..1ad6fc5 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -9,6 +9,8 @@
import com.ruoyi.common.core.domain.entity.SysUserDept;
import com.ruoyi.common.core.domain.entity.SysUserRole;
import com.ruoyi.common.utils.StringUtils;
+import com.smartor.common.enums.EmergencyLevelEnum;
+import com.smartor.common.enums.ImportFlagEnum;
import com.ruoyi.common.utils.http.HttpUtils;
import com.smartor.common.DistinctByProperty;
import com.smartor.domain.*;
@@ -63,6 +65,12 @@
private SysUserRole2Mapper sysUserRoleMapper;
@Autowired
+ private MedicationItemMapper medicationItemMapper;
+
+ @Autowired
+ private MedicationDoseInfoMapper medicationDoseInfoMapper;
+
+ @Autowired
private RedisTemplate<String, String> redisTemplate;
@Value("${sltd_pub_path}")
@@ -84,7 +92,12 @@
Map<String, Object> requestParams = buildRequestParams(reqVO);
Map<String, String> headers = buildRequestHeaders();
log.info("璇锋眰鍙傛暟鍑洪櫌鏁版嵁鍦板潃锛歿},appKey:{}", sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", APP_KEY);
- String result = HttpUtils.sendPostByHeader(sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", new Gson().toJson(requestParams), headers);
+ String result = null;
+ if (reqVO.getSize() == null && reqVO.getCurrent() == null)
+ result = HttpUtils.sendPostByHeader(sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", new Gson().toJson(requestParams), headers);
+ else
+ result = HttpUtils.sendPostByHeader(sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcPageHealthcareRecordList", new Gson().toJson(requestParams), headers);
+ log.info("queryHealthcareRecordList--result杩斿洖鐨勭粨鏋滃�硷細{}", result == null ? "绌哄��" : "鏈夊��");
String cry = determineCry(reqVO);
log.info("cry鐨勫�间负锛歿}", cry);
@@ -94,6 +107,60 @@
} catch (Exception e) {
log.error("銆恞ueryHealthcareRecordList銆戣皟鐢ㄧ渷绔嬪悓寰峰仴搴疯褰曟煡璇㈡帴鍙e紓甯革紝璇锋眰鍙傛暟锛歿}", reqVO, e);
throw new RuntimeException("璋冪敤鐪佺珛鍚屽痉鍋ュ悍璁板綍鏌ヨ鎺ュ彛澶辫触:" + e.getMessage());
+ }
+ }
+
+ @Override
+ /**
+ * 鏌ヨ鑽搧淇℃伅鍒楄〃
+ * @return 杩斿洖瀹為檯鑾峰彇鍒扮殑鑽搧鏁版嵁鏉℃暟锛屽鏋滃嚭閿欏垯杩斿洖 null
+ */ public Integer queryMedicationItemList(ServiceSLTDInhospReqVO reqVO) {
+ try {
+ Map<String, Object> requestParams = buildRequestParams(reqVO);
+ Map<String, String> headers = buildRequestHeaders();
+ log.info("璇锋眰鍙傝嵂鍝佷俊鎭湴鍧�锛歿},appKey:{}", sltdPubPath + "/hbos-thirdparty-integration/standard/base/mc/service/medication/queryMedicationInfoPage", APP_KEY);
+ String result = HttpUtils.sendPostByHeader(sltdPubPath + "/hbos-thirdparty-integration/standard/base/mc/service/medication/queryMedicationInfoPage", new Gson().toJson(requestParams), headers);
+ List<Map<String, Object>> dataList = getDataList(result, 2);
+ log.info("銆恞ueryMedicationItemList銆戝叡鑾峰彇鍒皗}鏉¤嵂鍝佹暟鎹�", dataList.size());
+ int successCount = 0;
+ int failCount = 0;
+ for (Map<String, Object> dataItem : dataList) {
+ try {
+ MedicationItem medicationItem = convertToMedication(dataItem);
+ log.info("鍑嗗鎻掑叆鑽搧鏁版嵁锛歩temName={}, itemCode={}", medicationItem.getItemName(), medicationItem.getItemCode());
+ medicationItem.setCreateTime(new Date());
+ medicationItemMapper.insertMedicationItem(medicationItem);
+
+ // 濡傛灉鎻掑叆鎴愬姛涓旇繑鍥炰簡鑷 ID锛屽垯鎻掑叆瀛愯〃
+ if (medicationItem.getId() != null) {
+ List<MedicationDoseInfo> doseInfoList = medicationItem.getDoseInfoList();
+ if (CollectionUtils.isNotEmpty(doseInfoList)) {
+ for (MedicationDoseInfo doseInfo : doseInfoList) {
+ try {
+ doseInfo.setMedicationItemId(medicationItem.getId());
+ medicationDoseInfoMapper.insertMedicationDoseInfo(doseInfo);
+ log.debug("鎻掑叆鍓傞噺淇℃伅鎴愬姛锛歩temId={}, doseUnit={}", medicationItem.getId(), doseInfo.getDoseUnit());
+ } catch (Exception e) {
+ log.warn("鎻掑叆鍓傞噺淇℃伅澶辫触锛歩temId={}, doseUnit={}, 閿欒:{}", medicationItem.getId(), doseInfo.getDoseUnit(), e.getMessage(), e);
+ failCount++;
+ }
+ }
+ }
+ }
+ successCount++;
+ log.info("鉁� 鑽搧鏁版嵁鎻掑叆鎴愬姛锛歿}", medicationItem.getItemName());
+ } catch (Exception e) {
+ log.warn("銆恞ueryMedicationItemList銆戝崟鏉¤嵂鍝佹暟鎹彃鍏ュけ璐ワ細itemName={}, itemCode={}, 閿欒:{}", dataItem.get("itemName"), dataItem.get("itemCode"), e.getMessage(), e);
+ failCount++;
+ // 缁х画澶勭悊涓嬩竴鏉℃暟鎹紝涓嶄腑鏂暣涓惊鐜�
+ }
+ }
+ log.info("銆恞ueryMedicationItemList銆戞壒閲忔彃鍏ュ畬鎴愶紝鎬绘暟:{}, 鎴愬姛:{}, 澶辫触:{}", dataList.size(), successCount, failCount);
+ // 杩斿洖瀹為檯鑾峰彇鍒扮殑鑽搧鏁版嵁鏉℃暟锛岀敤浜庡垎椤靛垽鏂槸鍚﹁繕鏈夋洿澶氭暟鎹�
+ return dataList.size();
+ } catch (Exception e) {
+ log.error("銆恞ueryMedicationItemList銆戣皟鐢ㄧ渷绔嬪悓寰疯嵂鍝佷俊鎭煡璇㈡帴鍙e紓甯革紝璇锋眰鍙傛暟锛歿}", reqVO, e);
+ throw new RuntimeException(e);
}
}
@@ -136,7 +203,7 @@
Map<String, String> headers = buildRequestHeaders();
String result = HttpUtils.sendPostByHeader(sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/dept/queryDeptList", new Gson().toJson(params), headers);
log.info("銆恞ueryDeptWardAreaInfoList銆戞帴鍙e搷搴旂粨鏋滐細{}", StringUtils.isEmpty(result) ? "绌虹殑" : "涓嶇┖");
- List<Map<String, Object>> dataList = getDataList(result);
+ List<Map<String, Object>> dataList = getDataList(result, 1);
log.info("-----------dataList鎺ュ彛鍝嶅簲缁撴灉锛歿}", dataList.size());
for (Map<String, Object> dataItem : dataList) {
SysDept sysDept = new SysDept();
@@ -192,20 +259,6 @@
return true;
}
- @Override
- public void aa(Map<String, Object> map) {
- List<String> types = new ArrayList<>();
- types.add("FH0109.27");
- ObjectMapper objectMapper = new ObjectMapper();
- try {
- String jsonString = objectMapper.writeValueAsString(map);
- parseResponseData(jsonString, types, "1", "20001001");
- } catch (JsonProcessingException e) {
- e.printStackTrace();
- }
-
- }
-
/**
* 閲囬泦鍖婚櫌鐢ㄦ埛淇℃伅
@@ -219,7 +272,7 @@
Map<String, String> headers = buildRequestHeaders();
String result = HttpUtils.sendPostByHeader(sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/staff/queryStaffList", new Gson().toJson(requestParams), headers);
log.info("銆恞ueryHealthcareRecordList銆戞帴鍙e搷搴旂粨鏋滄槸鍚︽湁鍊硷細{}", StringUtils.isEmpty(result) ? "娌″��" : "鏈夊��");
- List<Map<String, Object>> dataList = getDataList(result);
+ List<Map<String, Object>> dataList = getDataList(result, 1);
for (Map<String, Object> dataItem : dataList) {
SysUser sysUser = new SysUser();
if (StringUtils.isEmpty(getStringValue(dataItem, "accountNo"))) {
@@ -355,17 +408,25 @@
}
private String determineCry(ServiceSLTDInhospReqVO reqVO) {
- if (CollectionUtils.isEmpty(reqVO.getStatusList())) return null;
-
- if (reqVO.getStatusList().contains("FH0109.24")) {
- //鍏ラ櫌
- return "0";
- } else if (reqVO.getStatusList().contains("FH0109.27")) {
- //鍑洪櫌
- return "1";
- } else if (reqVO.getStatusList().contains("FH0109.22") || reqVO.getStatusList().contains("FH0109.23") || reqVO.getStatusList().contains("FH0109.53")) {
- //棰勫叆闄�
- return "3";
+ if (CollectionUtils.isEmpty(reqVO.getStatusList()) && CollectionUtils.isEmpty(reqVO.getHealthcareRecordTypeList()))
+ return null;
+ if (reqVO.getStatusList() != null) {
+ if (reqVO.getStatusList().contains("FH0109.24")) {
+ //鍏ラ櫌
+ return "0";
+ } else if (reqVO.getStatusList().contains("FH0109.27")) {
+ //鍑洪櫌
+ return "1";
+ } else if (reqVO.getStatusList().contains("FH0109.22") || reqVO.getStatusList().contains("FH0109.23") || reqVO.getStatusList().contains("FH0109.53")) {
+ //棰勫叆闄�
+ return "3";
+ }
+ }
+ if (reqVO.getHealthcareRecordTypeList() != null) {
+ if (reqVO.getHealthcareRecordTypeList().contains("FH0108.03") || reqVO.getHealthcareRecordTypeList().contains("FH0108.01")) {
+ //闂ㄦ�ヨ瘖
+ return "4";
+ }
}
return null;
}
@@ -376,7 +437,7 @@
params.put("orgId", Long.parseLong(reqVO.getOrgId()));
}
if (reqVO.getCampusId() != null) {
- params.put("campusId", reqVO.getCampusId());
+ params.put("campusIds", reqVO.getCampusId());
}
if (reqVO.getStartHeadTime() != null) {
params.put("startHeadTime", reqVO.getStartHeadTime());
@@ -431,12 +492,13 @@
private List<ServiceSLTDInhospResDTO> parseResponseData(String result, List<String> types, String cry, String campusId) {
try {
- List<Map<String, Object>> dataList = getDataList(result);
+ List<Map<String, Object>> dataList = getDataList(result, cry.equals("4") ? 2 : 1);
+ log.info("銆恜arseResponseData銆戞垚鍔熻В鏋恉ataList:{}鏉″仴搴疯褰曟暟鎹�", dataList.size());
List<ServiceSLTDInhospResDTO> resultList = new ArrayList<>();
for (Map<String, Object> dataItem : dataList) {
resultList.add(convertToDTO(dataItem));
}
- log.info("銆恜arseResponseData銆戞垚鍔熻В鏋恵}鏉″仴搴疯褰曟暟鎹�", resultList.size());
+ log.info("銆恜arseResponseData銆戞垚鍔熻В鏋恟esultList:{}鏉″仴搴疯褰曟暟鎹�", resultList.size());
processResultList(resultList, types, cry, campusId);
return resultList;
@@ -446,11 +508,20 @@
}
}
- public List<Map<String, Object>> getDataList(String result) {
+ /**
+ * 瑙f瀽鎺ュ彛杩斿洖鏁版嵁
+ *
+ * @param result 鎺ュ彛杩斿洖鏁版嵁
+ * @param flag 1浠h〃锛屾暟缁勫湪data閲岋紝2浠h〃鏁扮粍鍦╠ata/records閲�
+ * @return 瑙f瀽鍚庣殑鏁版嵁鍒楄〃
+ */
+
+ public List<Map<String, Object>> getDataList(String result, Integer flag) {
Gson gson = new Gson();
Type mapType = new TypeToken<Map<String, Object>>() {
}.getType();
Map<String, Object> responseMap = gson.fromJson(result, mapType);
+ log.info("銆恜arseResponseData銆戞帴鍙h繑鍥炴暟鎹殑responseMap锛歿}", Objects.isNull(responseMap) ? "绌虹殑" : "鏈夊��");
Number codeNum = (Number) responseMap.get("code");
String code = BigDecimal.valueOf(codeNum.longValue()).toPlainString();
if (StringUtils.isEmpty(code) || !code.equals("200")) {
@@ -459,15 +530,30 @@
}
Object dataObj = responseMap.get("data");
+ if (flag == 1) {
+ dataObj = responseMap.get("data");
+ } else if (flag == 2) {
+ //闂ㄦ�ヨ瘖鐨勫垎椤垫暟鎹槸鍦╮ecords涓�
+ dataObj = ((Map<String, Object>) responseMap.get("data")).get("records");
+ log.info("銆恜arseResponseData銆戞帴鍙h繑鍥炴暟鎹殑dataObj锛歿}", Objects.isNull(dataObj) ? "绌虹殑" : "鏈夊��");
+ }
if (dataObj == null) {
log.info("銆恜arseResponseData銆戞帴鍙h繑鍥炴暟鎹负绌�");
return new ArrayList<>();
}
- String dataJson = gson.toJson(dataObj);
- Type listType = new TypeToken<List<Map<String, Object>>>() {
- }.getType();
- List<Map<String, Object>> dataList = gson.fromJson(dataJson, listType);
+ // 鍏煎data涓烘暟缁勬垨瀵硅薄涓ょ鎯呭喌锛氭帴鍙f甯告椂data涓篬{...}]鏁扮粍锛�
+ // 寮傚父鎴栫┖鏁版嵁鏃跺彲鑳借繑鍥瀧}瀵硅薄锛岀洿鎺ユ寜List瑙f瀽浼氭姏JsonSyntaxException
+ List<Map<String, Object>> dataList;
+ if (dataObj instanceof List) {
+ String dataJson = gson.toJson(dataObj);
+ Type listType = new TypeToken<List<Map<String, Object>>>() {
+ }.getType();
+ dataList = gson.fromJson(dataJson, listType);
+ } else {
+ log.info("銆恜arseResponseData銆戞帴鍙h繑鍥瀌ata涓嶆槸鏁扮粍锛岃�屾槸瀵硅薄绫诲瀷锛宒ata鍐呭锛歿}", gson.toJson(dataObj));
+ return new ArrayList<>();
+ }
// 浣跨敤 Set 鍘婚噸锛岀‘淇濇病鏈夐噸澶嶇殑鏁版嵁
Set<Map<String, Object>> uniqueDataSet = new HashSet<>(dataList);
@@ -699,6 +785,14 @@
List<PatMedInhosp> patMedInhospList3 = patMedInhospService.selectPatMedInhosp(queryInhosp);
if (CollectionUtils.isEmpty(patMedInhospList3)) {
try {
+ //鑾峰彇涓�涓嬪叆闄㈢敵璇峰崟
+ Map<String, String> headers = buildRequestHeaders();
+ Map<String, Object> requestParams = new HashMap<>();
+ requestParams.put("orgId", "20001001");
+ requestParams.put("20001001", patArchive.getPatidHis());
+ String result = HttpUtils.sendPostByHeader(sltdPubPath + "/hospitalizedApply/query", new Gson().toJson(requestParams), headers);
+
+
patMedInhospService.insertPatMedInhosp(patMedInhosp);
log.debug("鎴愬姛鎻掑叆棰勫叆闄㈣褰曪細serialnum={}", patMedInhosp.getSerialnum());
} catch (Exception e) {
@@ -731,7 +825,6 @@
patMedInhosp.setSerialnum(dto.getHealthcareRecordNo());
patMedInhosp.setInhospno(dto.getHealthcareRecordNo());
patMedInhosp.setFuflag("1");
-
if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1"))
patMedInhosp.setFuflag("0");
@@ -777,6 +870,13 @@
setDischargeInfo(patMedInhosp, dto);
} else {
setAdmissionInfo(patMedInhosp, dto);
+ patMedInhosp.setEncounterSourceId(dto.getEncounterSourceId() == null ? "" : dto.getEncounterSourceId());
+ if (StringUtils.isNotEmpty(dto.getEncounterSourceId())) {
+ //鏍规嵁 encounterSourceId 鑾峰彇 importanceFlagCode emergencyLevelCode
+ Map<String, String> applyInfo = hospitalizedApply(dto.getEncounterSourceId(), dto.getOrgId());
+ patMedInhosp.setImportanceFlagCode(applyInfo.get("importanceFlagCode"));
+ patMedInhosp.setEmergencyLevelCode(applyInfo.get("emergencyLevelCode"));
+ }
}
patMedInhosp.setDrname(dto.getDoctorName());
@@ -797,7 +897,160 @@
}
}
+ if (active.equals("nhfy") || active.equals("sltd")) {
+ Map<String, String> drugInfoMap = queryMedicalOrders(dto);
+ if (drugInfoMap != null && !drugInfoMap.isEmpty()) {
+ patMedInhosp.setMedicalName(drugInfoMap.get("drugItemNames"));
+ patMedInhosp.setMedicalCode(drugInfoMap.get("drugItemIds"));
+ patMedInhosp.setMedicalCompany(drugInfoMap.get("drugManufacturerNames"));
+
+ log.info("鑾峰彇鑽搧淇℃伅鎴愬姛锛氬悕绉�={}, 缂栫爜={}, 鍘傚={}", drugInfoMap.get("drugItemNames"), drugInfoMap.get("drugItemIds"), drugInfoMap.get("drugManufacturerNames"));
+ }
+ }
return patMedInhosp;
+ }
+
+ /**
+ * 鏌ヨ鍖诲槺淇℃伅骞舵嫾鎺ヨ嵂鍝佷俊鎭�
+ *
+ * @param dto 鍋ュ悍璁板綍璇锋眰瀵硅薄
+ * @return 杩斿洖鍖呭惈涓変釜瀛楁 Map锛�
+ * - drugItemNames: 鑽搧鍚嶇О鍒楄〃锛堥�楀彿鍒嗛殧锛�
+ * - drugItemIds: 鑽搧缂栫爜鍒楄〃锛堥�楀彿鍒嗛殧锛�
+ * - drugManufacturerNames: 鑽搧鍘傚鍒楄〃锛堥�楀彿鍒嗛殧锛�
+ * <p>
+ * 瑙勫垯锛�
+ * 1. 涓変釜瀛楁椤哄簭浣嶇疆淇濇寔涓�鑷�
+ * 2. 濡傛灉涓変釜瀛楁閮戒负绌猴紝鍒欒烦杩囪璁板綍
+ * 3. 濡傛灉鑷冲皯鏈変竴涓瓧娈垫湁鍊硷紝鍒欏叾浠栦袱涓负绌虹敤绌哄瓧绗︿覆浠f浛
+ */
+ private Map<String, String> queryMedicalOrders(ServiceSLTDInhospResDTO dto) {
+ Map<String, String> result = new HashMap<>();
+ List<String> itemNames = new ArrayList<>();
+ List<String> itemIds = new ArrayList<>();
+ List<String> manufacturerNames = new ArrayList<>();
+
+ try {
+ // 鑾峰彇鎮h�呯殑鍖诲槺淇℃伅
+ Map<String, Object> medicineInfoReq = new HashMap<>();
+ medicineInfoReq.put("orgId", dto.getOrgId());
+ medicineInfoReq.put("patientId", dto.getPatientId());
+ medicineInfoReq.put("campusId", dto.getCampusId());
+ medicineInfoReq.put("medicalRecordNo", dto.getMedicalRecordNo());
+ log.info("銆恞ueryMedicalOrders銆戣姹傚弬鏁帮細{}", medicineInfoReq);
+ Map<String, String> headers = buildRequestHeaders();
+ String resultStr = HttpUtils.sendPostByHeader(sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/doctorOrder/queryDoctorOrderList", new Gson().toJson(medicineInfoReq), headers);
+
+ if (StringUtils.isEmpty(resultStr)) {
+ log.warn("銆恞ueryMedicalOrders銆戞帴鍙h繑鍥炰负绌猴紝patientId={}", dto.getPatientId());
+ return result;
+ }
+
+ // 瑙f瀽杩斿洖鏁版嵁
+ Gson gson = new Gson();
+ Type mapType = new TypeToken<Map<String, Object>>() {
+ }.getType();
+ Map<String, Object> responseMap = gson.fromJson(resultStr, mapType);
+
+ // 妫�鏌ヨ繑鍥炵爜
+ Object codeObj = responseMap.get("code");
+ if (codeObj != null) {
+ String code = BigDecimal.valueOf(((Number) codeObj).longValue()).toPlainString();
+ if (!"200".equals(code)) {
+ log.error("銆恞ueryMedicalOrders銆戞帴鍙h繑鍥炲け璐ワ紝code={}, message={}", code, responseMap.get("message"));
+ return result;
+ }
+ }
+
+ // 鑾峰彇 data 鏁扮粍
+ Object dataObj = responseMap.get("data");
+ if (dataObj instanceof List) {
+ List<?> dataList = (List<?>) dataObj;
+
+ // 閬嶅巻鍖诲槺鍒楄〃锛屾彁鍙栬嵂鍝佷俊鎭�
+ Set<String> processedItemIds = new HashSet<>(); // 鐢ㄤ簬鍘婚噸锛堝彧鏍规嵁 itemId 鍘婚噸锛�
+
+ for (Object item : dataList) {
+ if (item instanceof Map) {
+ Map<String, Object> itemMap = (Map<String, Object>) item;
+
+ // 鍙鐞嗚嵂鍝佺浉鍏崇殑鍖诲槺锛坕temDomain 涓� FH0134.01 琛ㄧず鑽搧锛�
+ Object itemDomainObj = itemMap.get("itemDomain");
+ if (itemDomainObj == null || !"FH0134.01".equals(itemDomainObj.toString())) {
+ continue;
+ }
+
+ // 鑾峰彇涓変釜瀛楁
+ Object itemNameObj = itemMap.get("itemName");
+ Object itemIdObj = itemMap.get("itemId");
+ Object manufacturerNameObj = itemMap.get("manufacturerName");
+
+ // 鍒ゆ柇鏄惁閮戒负绌�
+ boolean allEmpty = (itemNameObj == null || StringUtils.isEmpty(itemNameObj.toString())) && (itemIdObj == null || StringUtils.isEmpty(itemIdObj.toString())) && (manufacturerNameObj == null || StringUtils.isEmpty(manufacturerNameObj.toString()));
+
+ // 濡傛灉涓変釜閮戒负绌猴紝鍒欒烦杩�
+ if (allEmpty) {
+ continue;
+ }
+
+ // 鑷冲皯鏈変竴涓湁鍊硷紝澶勭悊姣忎釜瀛楁
+ String itemName = (itemNameObj != null && StringUtils.isNotEmpty(itemNameObj.toString())) ? itemNameObj.toString() : "";
+
+ // itemId 鐗规畩澶勭悊锛氶伩鍏嶇瀛﹁鏁版硶锛圙son 鍙兘灏嗘暟瀛楄В鏋愪负 Double锛�
+ String itemId = "";
+ if (itemIdObj != null && StringUtils.isNotEmpty(itemIdObj.toString())) {
+ if (itemIdObj instanceof Number) {
+ // 濡傛灉鏄暟鍊肩被鍨嬶紝杞崲涓烘暣鏁板瓧绗︿覆锛岄伩鍏嶇瀛﹁鏁版硶
+ itemId = String.valueOf(((Number) itemIdObj).longValue());
+ } else {
+ itemId = itemIdObj.toString();
+ }
+ }
+
+ String manufacturerName = (manufacturerNameObj != null && StringUtils.isNotEmpty(manufacturerNameObj.toString())) ? manufacturerNameObj.toString() : "";
+
+ // 鍙牴鎹� itemId 鍘婚噸锛堝悓涓�缂栫爜鐨勮嵂鍝佸彧淇濈暀涓�涓級
+ if (StringUtils.isNotEmpty(itemId)) {
+ if (processedItemIds.contains(itemId)) {
+ log.info("銆恞ueryMedicalOrders銆戣烦杩囬噸澶嶈嵂鍝侊紙鐩稿悓缂栫爜锛夛細鍚嶇О={}, 缂栫爜={}", itemName, itemId);
+ continue;
+ }
+ processedItemIds.add(itemId);
+ } else {
+ // itemId 涓虹┖鏃讹紝浣跨敤 itemName 浣滀负鍘婚噸渚濇嵁
+ if (processedItemIds.contains(itemName)) {
+ log.info("銆恞ueryMedicalOrders銆戣烦杩囬噸澶嶈嵂鍝侊紙鐩稿悓鍚嶇О锛夛細鍚嶇О={}", itemName);
+ continue;
+ }
+ processedItemIds.add(itemName);
+ }
+
+ // 娣诲姞鍒板垪琛�
+ itemNames.add(itemName);
+ itemIds.add(itemId);
+ manufacturerNames.add(manufacturerName);
+
+ log.info("銆恞ueryMedicalOrders銆戞彁鍙栬嵂鍝佷俊鎭細鍚嶇О={}, 缂栫爜={}, 鍘傚={}", itemName, itemId, manufacturerName);
+ }
+ }
+ } else {
+ log.info("銆恞ueryMedicalOrders銆慸ata 涓嶆槸鏁扮粍绫诲瀷锛宲atientId={}", dto.getPatientId());
+ }
+
+ // 灏嗗垪琛ㄦ嫾鎺ユ垚閫楀彿鍒嗛殧鐨勫瓧绗︿覆
+ if (!itemNames.isEmpty()) {
+ result.put("drugItemNames", String.join(",", itemNames));
+ result.put("drugItemIds", String.join(",", itemIds));
+ result.put("drugManufacturerNames", String.join(",", manufacturerNames));
+ }
+
+ log.info("銆恞ueryMedicalOrders銆戞垚鍔熸彁鍙杮}鏉¤嵂鍝佷俊鎭紝patientId={}", itemNames.size(), dto.getPatientId());
+
+ } catch (Exception e) {
+ log.error("銆恞ueryMedicalOrders銆戞煡璇㈠尰鍢变俊鎭け璐ワ紝patientId={}", dto.getPatientId(), e);
+ }
+
+ return result;
}
private void setDischargeInfo(PatMedInhosp patMedInhosp, ServiceSLTDInhospResDTO dto) {
@@ -821,6 +1074,82 @@
patMedInhosp.setHospitaldistrictid("" + dto.getAreaId());
patMedInhosp.setHospitaldistrictcode("" + dto.getAreaId());
patMedInhosp.setHospitaldistrictname(dto.getAreaName());
+ }
+
+ /**
+ * 鏍规嵁鍏ラ櫌鐢宠鍗旾D鏌ヨ鍏ラ櫌鐢宠鍗曡鎯�
+ * 鍙彁鍙� importanceFlagCode锛坕mportanceFlagCodeList閫楀彿鎷兼帴锛夊拰 emergencyLevelCode 涓や釜鍊�
+ */
+ private Map<String, String> hospitalizedApply(String encounterSourceId, String orgid) {
+ Map<String, String> applyInfo = new HashMap<>();
+ Map<String, String> headers = buildRequestHeaders();
+ log.info("闄㈢敵璇峰崟ID鏌ヨ鍏ラ櫌鐢宠鍗曪細{},appKey:{}", sltdPubPath + "/sf/hospitalizedApply/query", APP_KEY);
+ //璁剧疆鍏ュ弬
+ Map<String, Object> requestParams = new HashMap<>();
+ requestParams.put("applyId", encounterSourceId);
+ requestParams.put("orgId", orgid);
+
+ String result = null;
+ if (StringUtils.isNotEmpty(encounterSourceId) && StringUtils.isNotEmpty(orgid))
+ result = HttpUtils.sendPostByHeader(sltdPubPath + "/sf/hospitalizedApply/query", new Gson().toJson(requestParams), headers);
+
+ if (StringUtils.isEmpty(result)) {
+ log.error("銆恏ospitalizedApply銆戞帴鍙h繑鍥炰负绌猴紝applyId={}", encounterSourceId);
+ return applyInfo;
+ }
+ try {
+ Gson gson = new Gson();
+ Type mapType = new TypeToken<Map<String, Object>>() {
+ }.getType();
+ Map<String, Object> responseMap = gson.fromJson(result, mapType);
+ Object dataObj = responseMap == null ? null : responseMap.get("data");
+ if (dataObj instanceof Map) {
+ Map<String, Object> data = (Map<String, Object>) dataObj;
+ //閲嶈鎬ф爣璁扮紪鐮侊紝鎺ュ彛杩斿洖鏄暟缁勶紝闇�瑕佽浆鎹负瀛楀吀鍚嶇О
+ Object importanceFlagCodeListObj = data.get("importanceFlagCodeList");
+ if (importanceFlagCodeListObj instanceof List) {
+ List<?> importanceFlagCodeList = (List<?>) importanceFlagCodeListObj;
+ // 杩囨护鎺� null 鍊�
+ List<String> nonNullList = importanceFlagCodeList.stream().filter(Objects::nonNull).map(Object::toString).filter(StringUtils::isNotEmpty).collect(Collectors.toList());
+
+ if (!nonNullList.isEmpty()) {
+ String importanceFlagLabel;
+ if (nonNullList.size() == 1) {
+ // 鍙湁涓�涓�硷紝鐩存帴閫氳繃鏋氫妇鑾峰彇鎻忚堪
+ importanceFlagLabel = ImportFlagEnum.getDescByCode(nonNullList.get(0));
+ } else {
+ // 澶氫釜鍊硷紝鐢ㄩ�楀彿鎷兼帴鏋氫妇鎻忚堪
+ StringBuilder labelBuilder = new StringBuilder();
+ for (String code : nonNullList) {
+ String label = ImportFlagEnum.getDescByCode(code);
+ if (StringUtils.isNotEmpty(label)) {
+ labelBuilder.append(label).append(",");
+ }
+ }
+ importanceFlagLabel = StringUtils.stripEnd(labelBuilder.toString(), ",");
+ }
+
+ if (StringUtils.isNotEmpty(importanceFlagLabel)) {
+ applyInfo.put("importanceFlagCode", importanceFlagLabel);
+ }
+ }
+ }
+ //绱ф�ョ▼搴︾紪鐮侊紝閫氳繃鏋氫妇杞崲鎻忚堪
+ Object emergencyLevelCodeObj = data.get("emergencyLevelCode");
+ if (emergencyLevelCodeObj != null) {
+ String emergencyLevelLabel = EmergencyLevelEnum.getDescByCode(emergencyLevelCodeObj.toString());
+ if (StringUtils.isNotEmpty(emergencyLevelLabel)) {
+ applyInfo.put("emergencyLevelCode", emergencyLevelLabel);
+ }
+ }
+ } else {
+ log.error("銆恏ospitalizedApply銆戞帴鍙h繑鍥瀌ata涓嶆槸瀵硅薄锛宎pplyId={}锛宺esult锛歿}", encounterSourceId, result);
+ }
+ } catch (Exception e) {
+ log.error("銆恏ospitalizedApply銆戣В鏋愬叆闄㈢敵璇峰崟璇︽儏澶辫触锛宎pplyId={}", encounterSourceId, e);
+ }
+ log.info("銆恏ospitalizedApply銆慳pplyId={}锛宨mportanceFlagCode={}锛宔mergencyLevelCode={}", encounterSourceId, applyInfo.get("importanceFlagCode"), applyInfo.get("emergencyLevelCode"));
+ return applyInfo;
}
/**
@@ -1013,6 +1342,7 @@
dto.setCostCategoryCode(getStringValue(dataItem, "costCategoryCode"));
dto.setCostNatureName(getStringValue(dataItem, "costNatureName"));
dto.setCostNatureCode(getStringValue(dataItem, "costNatureCode"));
+ dto.setEncounterSourceId(getStringValue(dataItem, "encounterSourceId"));
dto.setFurtherConsultationStatus(getIntegerValue(dataItem, "furtherConsultationStatus"));
Object mainDiagObj = dataItem.get("mainDischargeDiagnosis");
if (mainDiagObj instanceof Map) {
@@ -1037,6 +1367,55 @@
return dto;
}
+
+ private MedicationItem convertToMedication(Map<String, Object> dataItem) {
+ MedicationItem dto = new MedicationItem();
+ dto.setOrgId(getLongValue(dataItem, "orgId"));
+ dto.setIdentificationCode(getStringValue(dataItem, "identificationCode"));
+ dto.setWbm(getStringValue(dataItem, "wbm"));
+ dto.setMedicationCommonName(getStringValue(dataItem, "medicationCommonName"));
+ dto.setManufacturerName(getStringValue(dataItem, "manufacturerName"));
+ dto.setItemCode(getStringValue(dataItem, "itemCode"));
+ dto.setSmallLargePackageRatio(getLongValue(dataItem, "smallLargePackageRatio"));
+ dto.setRemark(getStringValue(dataItem, "remark"));
+ dto.setItemName(getStringValue(dataItem, "itemName"));
+ dto.setMedicationType(getStringValue(dataItem, "medicationType"));
+ Object mainDiagObj = dataItem.get("doseInfoList");
+ List<MedicationDoseInfo> doseInfoList = new ArrayList<>();
+ if (mainDiagObj instanceof List) {
+ List<Map<String, Object>> mainDiagList = (List<Map<String, Object>>) mainDiagObj;
+ for (Map<String, Object> mainDiagMap : mainDiagList) {
+ MedicationDoseInfo medicationDoseInfo = new MedicationDoseInfo();
+ medicationDoseInfo.setDoseSmallPackageRation(getBigDecimalValue(mainDiagMap, "doseSmallPackageRation"));
+ medicationDoseInfo.setDose(getLongValue(mainDiagMap, "dose"));
+ medicationDoseInfo.setDoseSmallPackageNum(getLongValue(mainDiagMap, "doseSmallPackageNum"));
+ medicationDoseInfo.setDoseUnit(getStringValue(mainDiagMap, "doseUnit"));
+ medicationDoseInfo.setDoseUnitType(getLongValue(mainDiagMap, "doseUnitType"));
+ doseInfoList.add(medicationDoseInfo);
+ }
+ }
+ dto.setDoseInfoList(doseInfoList);
+ dto.setAntimicrobialGradeCode(getStringValue(dataItem, "antimicrobialGradeCode"));
+ dto.setLicenseNumber(getStringValue(dataItem, "licenseNumber"));
+ dto.setDefaultUsageName(getStringValue(dataItem, "defaultUsageName"));
+ dto.setSpecialDrugsName(getStringValue(dataItem, "specialDrugsName"));
+ dto.setAntimicrobialGradeName(getStringValue(dataItem, "antimicrobialGradeName"));
+ dto.setCommonPinyin(getStringValue(dataItem, "commonPinyin"));
+ dto.setCommonWbm(getStringValue(dataItem, "commonWbm"));
+ dto.setManufacturerId(getLongValue(dataItem, "manufacturerId"));
+ dto.setDefaultUsageId(getLongValue(dataItem, "defaultUsageId"));
+ dto.setSpecification(getStringValue(dataItem, "specification"));
+ dto.setSmallPackageUnit(getStringValue(dataItem, "smallPackageUnit"));
+ dto.setItemId(getLongValue(dataItem, "itemId"));
+ dto.setSpecialDrugsCode(getStringValue(dataItem, "specialDrugsCode"));
+ dto.setPinyin(getStringValue(dataItem, "pinyin"));
+ dto.setDoseFormName(getStringValue(dataItem, "doseFormName"));
+ dto.setLargePackageUnit(getStringValue(dataItem, "largePackageUnit"));
+ dto.setRetailPrice(getBigDecimalValue(dataItem, "retailPrice"));
+ dto.setStatus(getLongValue(dataItem, "status"));
+ return dto;
+ }
+
private List<ServiceSLTDContactsResDTO> parseContacts(List<?> contactsList) {
List<ServiceSLTDContactsResDTO> contacts = new ArrayList<>();
@@ -1082,6 +1461,16 @@
return value instanceof Number ? new BigDecimal(value.toString()).toPlainString() : value.toString();
}
+ private BigDecimal getBigDecimalValue(Map<String, Object> map, String key) {
+ Object value = map.get(key);
+ if (value == null) {
+ return null;
+ }
+
+ // 鍙鐞嗘暟瀛楃被鍨嬶紝閬垮厤绉戝璁℃暟娉�
+ return new BigDecimal(value.toString());
+ }
+
private Long getLongValue(Map<String, Object> map, String key) {
Object value = map.get(key);
if (value == null) return null;
--
Gitblit v1.9.3