From fcb98e4558897945a316d04555923355b8e60605 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期二, 21 七月 2026 10:16:56 +0800
Subject: [PATCH] Merge branch 'master' into master-任务组

---
 smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java |  522 ++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 403 insertions(+), 119 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 6db6b15..2ada147 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -63,6 +63,12 @@
     private SysUserRole2Mapper sysUserRoleMapper;
 
     @Autowired
+    private MedicationItemMapper medicationItemMapper;
+
+    @Autowired
+    private MedicationDoseInfoMapper medicationDoseInfoMapper;
+
+    @Autowired
     private RedisTemplate<String, String> redisTemplate;
 
     @Value("${sltd_pub_path}")
@@ -74,12 +80,22 @@
     @Value("${lwl_app_key}")
     private String APP_KEY;
 
+
+    @Value("${spring.profiles.active}")
+    private String active;
+
     @Override
     public List<ServiceSLTDInhospResDTO> queryHealthcareRecordList(ServiceSLTDInhospReqVO reqVO) {
         try {
             Map<String, Object> requestParams = buildRequestParams(reqVO);
             Map<String, String> headers = buildRequestHeaders();
-            String result = HttpUtils.sendPostByHeader(sltdPubPath + "osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", new Gson().toJson(requestParams), headers);
+            log.info("璇锋眰鍙傛暟鍑洪櫌鏁版嵁鍦板潃锛歿},appKey:{}", sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/healthcareRecord/dtcQueryHealthcareRecordList", APP_KEY);
+            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);
@@ -88,8 +104,33 @@
             return serviceSLTDInhospResDTOS;
         } catch (Exception e) {
             log.error("銆恞ueryHealthcareRecordList銆戣皟鐢ㄧ渷绔嬪悓寰峰仴搴疯褰曟煡璇㈡帴鍙e紓甯革紝璇锋眰鍙傛暟锛歿}", reqVO, e);
-            throw new RuntimeException("璋冪敤鐪佺珛鍚屽痉鍋ュ悍璁板綍鏌ヨ鎺ュ彛澶辫触", e);
+            throw new RuntimeException("璋冪敤鐪佺珛鍚屽痉鍋ュ悍璁板綍鏌ヨ鎺ュ彛澶辫触:" + e.getMessage());
         }
+    }
+
+    @Override
+    public Boolean 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);
+            for (Map<String, Object> dataItem : dataList) {
+                MedicationItem medicationItem = convertToMedication(dataItem);
+                log.info("medicationItem鐨勫�间负锛歿}", medicationItem);
+                medicationItemMapper.insertMedicationItem(medicationItem);
+                List<MedicationDoseInfo> doseInfoList = medicationItem.getDoseInfoList();
+                for (MedicationDoseInfo doseInfo : doseInfoList) {
+                    doseInfo.setMedicationItemId(medicationItem.getId());
+                    medicationDoseInfoMapper.insertMedicationDoseInfo(doseInfo);
+                }
+            }
+        } catch (Exception e) {
+            log.error("銆恞ueryMedicationItemList銆戣皟鐢ㄧ渷绔嬪悓寰疯嵂鍝佷俊鎭煡璇㈡帴鍙e紓甯革紝璇锋眰鍙傛暟锛歿}", reqVO, e);
+            throw new RuntimeException(e);
+        }
+        return true;
     }
 
 
@@ -131,7 +172,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();
@@ -166,10 +207,15 @@
                 sysDept.setUpdateTime(new Date());
                 sysDept.setUpdateBy(null);
 
-                SysDept sysDept1 = sysDeptMapper.selectDeptByCode(sysDept.getDeptCode(), sysDept.getOrgid());
+                // 鎸� deptCode + orgid + campusid 鏌ラ噸锛岄伩鍏嶈法闄㈠尯绉戝閲嶅
+                SysDept sysDept1 = sysDeptMapper.selectDeptByCodeAndCampus(sysDept.getDeptCode(), sysDept.getOrgid(), sysDept.getCampusid());
                 if (Objects.isNull(sysDept1)) {
-                    int i = sysDeptMapper.insertDept(sysDept);
-                    log.info("ServiceExternalServiceImpl---addDeptInfo鏄惁鏂板鎴愬姛锛歿}", i);
+                    try {
+                        int i = sysDeptMapper.insertDept(sysDept);
+                        log.info("ServiceExternalServiceImpl---addDeptInfo鏄惁鏂板鎴愬姛锛歿}", i);
+                    } catch (org.springframework.dao.DuplicateKeyException e) {
+                        log.warn("銆恞ueryDeptWardAreaInfoList銆戠瀹ゅ凡瀛樺湪(骞跺彂鎻掑叆)锛岃烦杩囷細deptCode={}, orgid={}, campusid={}", sysDept.getDeptCode(), sysDept.getOrgid(), sysDept.getCampusid());
+                    }
                 } else {
                     sysDept.setDeptId(sysDept1.getDeptId());
                     int i = sysDeptMapper.updateDept(sysDept);
@@ -180,20 +226,6 @@
             e.printStackTrace();
         }
         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();
-        }
-
     }
 
 
@@ -209,7 +241,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"))) {
@@ -225,17 +257,16 @@
                         String professionalTitleName = getStringValue(diagnosisMap, "professionalTitleName");
                         if (professionalTitleName.contains("鍖诲笀")) {
                             sysUser.setUserType("鍖荤敓");
-                            sysUser.setSearchscope("1");
                         }
                         if (professionalTitleName.contains("鎶�")) {
                             sysUser.setUserType("鎶ゅ+");
-                            sysUser.setSearchscope("2");
                         }
                         sysUser.setTitle(getStringValue(diagnosisMap, "professionalTitleName"));
                     }
                 }
             }
-
+            //濡傛灉鐢ㄦ埛鐨勬偅鑰呰寖鍥翠负绌猴紝鍒欓粯璁や负0
+            if (StringUtils.isEmpty(sysUser.getSearchscope())) sysUser.setSearchscope("0");
             sysUser.setPhonenumber(getStringValue(dataItem, "telephone"));
             sysUser.setUserCode(getStringValue(dataItem, "jobNumber"));
             //璁剧疆鎬у埆
@@ -248,85 +279,94 @@
             sysUser.setUpdateTime(new Date());
             sysUser.setUpdateBy("admin");
             sysUser.setCreateBy("admin");
-            sysUser.setCreateBy("admin");
             sysUser.setOrgid("" + getLongValue(dataItem, "orgId"));
-//            sysUser.setCampusid("" + getLongValue(dataItem, "cmpusId"));
             BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
             sysUser.setPassword(passwordEncoder.encode(userPwd));
-
             SysUser sysUser1 = sysUser2Mapper.selectUserByUserName(sysUser.getUserName());
             if (ObjectUtils.isNotEmpty(sysUser1)) {
+                //宸插瓨鍦細鐢变汉宸ョ淮鎶ょ殑瀛楁鏄笉闇�瑕佹洿鏂扮殑锛宱rgid/campusid淇濈暀鍘熷�间笉瑕嗙洊
+                sysUser.setSearchscope(null);
+                sysUser.setPassword(null);
                 sysUser.setUserId(sysUser1.getUserId());
+                sysUser.setOrgid(null);
+                sysUser.setCampusid(null);
                 sysUser2Mapper.updateUser(sysUser);
             } else {
-                sysUser2Mapper.insertUser(sysUser);
+                try {
+                    sysUser2Mapper.insertUser(sysUser);
+                } catch (org.springframework.dao.DuplicateKeyException e) {
+                    //骞跺彂鎻掑叆鍦烘櫙锛氶噸鏂版煡璇㈣幏鍙栧凡瀛樺湪璁板綍锛岄伩鍏嶉噸澶�
+                    log.warn("銆恞ueryHospUserInfoList銆戠敤鎴峰凡瀛樺湪(骞跺彂鎻掑叆)锛岃烦杩囷細userName={}", sysUser.getUserName());
+                    SysUser existingUser = sysUser2Mapper.selectUserByUserName(sysUser.getUserName());
+                    if (ObjectUtils.isNotEmpty(existingUser)) {
+                        sysUser.setUserId(existingUser.getUserId());
+                    }
+                }
             }
 
             // 澶勭悊鐢ㄦ埛涓庨儴闂ㄧ殑鍏崇郴
             List businessDepts = (List<?>) dataItem.get("businessDepts");
-            if (CollectionUtils.isEmpty(businessDepts)) {
-                continue;
-            }
+            if (CollectionUtils.isNotEmpty(businessDepts)) {
+                List<List<String>> deptInfoList = new ArrayList<>();
+                List<List<String>> hospInfoList = new ArrayList<>();
+                log.info("------businessDepts鏄惁鏈夊�硷細{}", businessDepts.size());
+                for (Object businessDept : businessDepts) {
+                    if (businessDept instanceof Map) {
+                        Map<String, Object> businessDeptMap = (Map<String, Object>) businessDept;
+                        log.info("------businessDeptMap鏄惁鏈夊�硷細{}", businessDeptMap);
+                        String hisDeptId = getStringValue(businessDeptMap, "deptId");
+                        log.info("------hisDeptId鏄惁鏈夊�硷細{}, reqVO.getOrgId()鐨勫�间负:{}", hisDeptId, reqVO.getCampusId());
+                        //鍦ㄨ繖閲岋紝hisDeptId灏辨槸deptCode锛屾寜闄㈠尯+鏈烘瀯鏌ョ瀹わ紝閬垮厤璺ㄩ櫌鍖烘煡閿�
+                        SysDept sysDept = sysDeptMapper.selectDeptByCodeAndCampus(hisDeptId, reqVO.getOrgId(), reqVO.getCampusId() != null ? reqVO.getCampusId().toString() : null);
+                        log.info("------hisDeptId鏄惁鏈夊�硷細{}, reqVO.getCampusId()鐨勫�间负:{}", hisDeptId, reqVO.getCampusId());
+                        if (Objects.isNull(sysDept)) continue;
+                        SysUserDept sysUserDept = new SysUserDept();
+                        sysUserDept.setUserId(sysUser.getUserId());
+                        sysUserDept.setDeptType(sysDept.getDeptType());
+                        sysUserDept.setDeptId(sysDept.getDeptId());
+                        sysUserDept.setDeptCode(sysDept.getDeptCode());
+                        sysUserDept.setDeptName(sysDept.getDeptName());
+                        sysUserDept.setOrgid(sysDept.getOrgid());
+                        sysUserDept.setCreateTime(new Date());
+                        sysUserDept.setDelFlag(0L);
 
-            List<List<String>> deptInfoList = new ArrayList<>();
-            List<List<String>> hospInfoList = new ArrayList<>();
-            log.info("------businessDepts鏄惁鏈夊�硷細{}", businessDepts.size());
-            for (Object businessDept : businessDepts) {
-                if (businessDept instanceof Map) {
-                    Map<String, Object> businessDeptMap = (Map<String, Object>) businessDept;
-                    log.info("------businessDeptMap鏄惁鏈夊�硷細{}", businessDeptMap);
-//                    Long hisDeptId = (Long) personnelDeptMap.get("deptId");
-                    String hisDeptId = getStringValue(businessDeptMap, "deptId");
-                    log.info("------hisDeptId鏄惁鏈夊�硷細{}, reqVO.getOrgId()鐨勫�间负:{}", hisDeptId, reqVO.getCampusId());
-                    //鍦ㄨ繖閲岋紝hisDeptId灏辨槸deptCode
-                    SysDept sysDept = sysDeptMapper.selectDeptByCode(hisDeptId, reqVO.getOrgId());
-                    log.info("------hisDeptId鏄惁鏈夊�硷細{}, reqVO.getCampusId()鐨勫�间负:{}", hisDeptId, reqVO.getCampusId());
-                    if (Objects.isNull(sysDept)) continue;
-                    SysUserDept sysUserDept = new SysUserDept();
-                    sysUserDept.setUserId(sysUser.getUserId());
-                    sysUserDept.setDeptType(sysDept.getDeptType());
-                    sysUserDept.setDeptId(sysDept.getDeptId());
-                    sysUserDept.setDeptCode(sysDept.getDeptCode());
-                    sysUserDept.setDeptName(sysDept.getDeptName());
-                    sysUserDept.setOrgid(sysDept.getOrgid());
-                    sysUserDept.setCreateTime(new Date());
-                    sysUserDept.setDelFlag(0L);
-
-                    //鍒ゆ柇涓�涓嬬敤鎴�-閮ㄩ棬鍏崇郴鏄笉鏄凡缁忓瓨鍦ㄤ簡锛堟棤璁烘柊鐢ㄦ埛杩樻槸鑰佺敤鎴烽兘闇�瑕佸幓閲嶏級
-                    if (ObjectUtils.isNotEmpty(sysUser.getUserId()) && ObjectUtils.isNotEmpty(sysDept)) {
-                        SysUserDept sud = new SysUserDept();
-                        sud.setUserId(sysUser.getUserId());
-                        sud.setDeptId(sysDept.getDeptId());
-                        List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sud);
-                        if (CollectionUtils.isNotEmpty(sysUserDepts)) {
-                            sysUserDept.setId(sysUserDepts.get(0).getId());
-                            sysUserDeptMapper.updateSysUserDept(sysUserDept);
-                        } else {
-                            sysUserDeptMapper.insertSysUserDept(sysUserDept);
+                        //鍒ゆ柇涓�涓嬬敤鎴�-閮ㄩ棬鍏崇郴鏄笉鏄凡缁忓瓨鍦ㄤ簡锛堟棤璁烘柊鐢ㄦ埛杩樻槸鑰佺敤鎴烽兘闇�瑕佸幓閲嶏級
+                        if (ObjectUtils.isNotEmpty(sysUser.getUserId()) && ObjectUtils.isNotEmpty(sysDept)) {
+                            SysUserDept sud = new SysUserDept();
+                            sud.setUserId(sysUser.getUserId());
+                            sud.setDeptId(sysDept.getDeptId());
+                            sud.setOrgid(sysDept.getOrgid());
+                            List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sud);
+                            if (CollectionUtils.isNotEmpty(sysUserDepts)) {
+                                sysUserDept.setId(sysUserDepts.get(0).getId());
+                                sysUserDeptMapper.updateSysUserDept(sysUserDept);
+                            } else {
+                                sysUserDeptMapper.insertSysUserDept(sysUserDept);
+                            }
+                        }
+                        if (StringUtils.isNotEmpty(sysDept.getDeptType()) && sysDept.getDeptType().equals("1")) {
+                            hospInfoList.add(Arrays.asList(sysDept.getDeptCode()));
+                        } else if (StringUtils.isNotEmpty(sysDept.getDeptType()) && sysDept.getDeptType().equals("2")) {
+                            deptInfoList.add(Arrays.asList(sysDept.getDeptCode()));
                         }
                     }
-                    if (StringUtils.isNotEmpty(sysDept.getDeptType()) && sysDept.getDeptType().equals("1")) {
-                        hospInfoList.add(Arrays.asList(sysDept.getDeptCode()));
-                    } else if (StringUtils.isNotEmpty(sysDept.getDeptType()) && sysDept.getDeptType().equals("2")) {
-                        deptInfoList.add(Arrays.asList(sysDept.getDeptCode()));
-                    }
                 }
+                //灏嗛儴闂ㄦ垜鐥呭尯鏀惧埌鎸囧畾瀛楁涓�
+                Gson gson = new Gson();
+                sysUser.setHospInfo(gson.toJson(hospInfoList));
+                sysUser.setDeptInfo(gson.toJson(deptInfoList));
+                sysUser2Mapper.updateUser(sysUser);
             }
-            //灏嗛儴闂ㄦ垜鐥呭尯鏀惧埌鎸囧畾瀛楁涓�
-            Gson gson = new Gson();
-            sysUser.setHospInfo(gson.toJson(hospInfoList));
-            sysUser.setDeptInfo(gson.toJson(deptInfoList));
-            sysUser2Mapper.updateUser(sysUser);
 
             //璁剧疆涓�涓粯璁よ鑹诧紙鍖荤敓瑙掕壊锛�
             List<SysUserRole> userRoleList = new ArrayList();
             SysUserRole sur = new SysUserRole();
             sur.setUserId(sysUser.getUserId());
-            sur.setRoleId(3L);
+            sur.setRoleId(4L);
             sur.setOrgid(sysUser.getOrgid());
 
             //鍏堟煡璇竴涓嬶紝鏄惁瀛樺湪
-            SysUserRole sysUserRole = sysUserRoleMapper.selectUserRoleByRoleIdAndUserId(3L, sysUser.getUserId());
+            SysUserRole sysUserRole = sysUserRoleMapper.selectUserRoleByRoleIdAndUserId(4L, sysUser.getUserId());
             if (ObjectUtils.isNotEmpty(sysUserRole)) continue;
 
             userRoleList.add(sur);
@@ -337,17 +377,25 @@
     }
 
     private String determineCry(ServiceSLTDInhospReqVO reqVO) {
-        if (CollectionUtils.isEmpty(reqVO.getStatusList())) return null;
-
-        if (reqVO.getStatusList().contains("FH0109.26")) {
-            //鍏ラ櫌
-            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;
     }
@@ -358,7 +406,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());
@@ -413,12 +461,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;
@@ -428,11 +477,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")) {
@@ -441,15 +499,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);
@@ -474,7 +547,7 @@
                         log.info("銆恜arseResponseData銆戦棬鎬ヨ瘖鏁版嵁宸插鐞嗭紝璺宠繃 type={}", type);
                     }
                     break;
-                case "FH0109.26":
+                case "FH0109.24":
                     log.info("銆恜arseResponseData銆戣В鏋愪綇闄㈡暟鎹�");
                     inHospitalDate(resultList, cry);
                     break;
@@ -552,6 +625,9 @@
         patMedOuthosp.setCreateTime(new Date());
         patMedOuthosp.setOrgid(dto.getOrgId());
         patMedOuthosp.setCampusid(dto.getCampusId());
+        patMedOuthosp.setFuflag("1");
+        if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1"))
+            patMedOuthosp.setFuflag("0");
         return patMedOuthosp;
     }
 
@@ -593,8 +669,10 @@
                 queryInhosp.setInhospstate("3");
                 List<PatMedInhosp> patMedInhospList = patMedInhospService.selectPatMedInhosp(queryInhosp);
                 if (CollectionUtils.isNotEmpty(patMedInhospList)) {
-                    //濡傛灉棰勫叆闄笉涓虹┖锛屽垯杩涜淇敼
+                    //濡傛灉棰勫叆闄笉涓虹┖锛屽垯杩涜淇敼锛堥鍏ラ櫌鈫掑叆闄級
+                    patMedInhosp.setInhospid(patMedInhospList.get(0).getInhospid());
                     patMedInhospService.updatePatMedInhosp(patMedInhosp);
+                    log.info("鐢遍鍏ラ櫌鏇存柊涓哄叆闄細serialnum={}", patMedInhosp.getSerialnum());
                 } else {
                     //濡傛灉鍑洪櫌涓嶄负绌猴紝鍒欎笉杩涜澶勭悊
                     queryInhosp.setInhospstate("1");
@@ -671,9 +749,19 @@
             if (locked == null || Boolean.TRUE.equals(locked)) {
                 try {
                     queryInhosp.setInhospstate(null);
+                    queryInhosp.setSchemestatus(null);
+                    queryInhosp.setPatno(null);
                     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) {
@@ -704,10 +792,45 @@
         patMedInhosp.setNurseId(dto.getChiefNurseId() == null ? "" : dto.getChiefNurseId().toString());
         patMedInhosp.setNurseName(dto.getChiefNurseName());
         patMedInhosp.setSerialnum(dto.getHealthcareRecordNo());
+        patMedInhosp.setInhospno(dto.getHealthcareRecordNo());
         patMedInhosp.setFuflag("1");
-        if ("0".equals(cry)) patMedInhosp.setInhospstate("0");
-        if ("1".equals(cry)) patMedInhosp.setInhospstate("1");
-        if ("3".equals(cry)) patMedInhosp.setInhospstate("3");
+
+
+        if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1"))
+            patMedInhosp.setFuflag("0");
+        if ("0".equals(cry)) {
+            patMedInhosp.setInhospstate("0");
+            if (CollectionUtils.isNotEmpty(dto.getDiagnosisList()) && dto.getDiagnosisList().size() > 0) {
+                for (ServiceSLTDDiagnosisResDTO diagnosis : dto.getDiagnosisList()) {
+                    if (diagnosis.getIsMainDiagnosis() == 1) {
+                        patMedInhosp.setDiagname(diagnosis.getDiagnosisDictName() == null ? "" : diagnosis.getDiagnosisDictName());
+                        patMedInhosp.setIcd10code(diagnosis.getDiagnosisDictCode() == null ? "" : diagnosis.getDiagnosisDictCode());
+                    }
+                }
+            }
+        }
+        if ("1".equals(cry)) {
+            patMedInhosp.setInhospstate("1");
+            ServiceSLTDDiagnosisResDTO mainDischargeDiagnosis = dto.getMainDischargeDiagnosis();
+            log.info("-----------mainDischargeDiagnosis鐨勫�兼湁浜嗗悧?{}", mainDischargeDiagnosis);
+            if (!Objects.isNull(mainDischargeDiagnosis)) {
+                if (mainDischargeDiagnosis.getIsMainDiagnosis() == 1) {
+                    patMedInhosp.setLeavediagname(StringUtils.defaultString(mainDischargeDiagnosis.getDiagnosisDictName(), ""));
+                    patMedInhosp.setLeaveicd10code(StringUtils.defaultString(mainDischargeDiagnosis.getDiagnosisDictCode(), ""));
+                }
+            }
+        }
+        if ("3".equals(cry)) {
+            patMedInhosp.setInhospstate("3");
+            if (CollectionUtils.isNotEmpty(dto.getDiagnosisList()) && dto.getDiagnosisList().size() > 0) {
+                for (ServiceSLTDDiagnosisResDTO diagnosis : dto.getDiagnosisList()) {
+                    if (diagnosis.getIsMainDiagnosis() == 1) {
+                        patMedInhosp.setDiagname(diagnosis.getDiagnosisDictName() == null ? "" : diagnosis.getDiagnosisDictName());
+                        patMedInhosp.setIcd10code(diagnosis.getDiagnosisDictCode() == null ? "" : diagnosis.getDiagnosisDictCode());
+                    }
+                }
+            }
+        }
         patMedInhosp.setHospitalcode(dto.getOrgId());
         patMedInhosp.setBedNo(dto.getBedNumber());
         patMedInhosp.setStarttime(parseDate(dto.getStartTime()));
@@ -725,6 +848,18 @@
         patMedInhosp.setDelFlag("0");
         patMedInhosp.setOrgid(dto.getOrgId());
         patMedInhosp.setCampusid(dto.getCampusId());
+        if (StringUtils.isNotEmpty(dto.getHealthcareRecordStatus()) && dto.getHealthcareRecordStatus().equals("FH0109.25"))
+            patMedInhosp.setRemark("棰勫嚭闄�");
+        if (active.equals("nhfy") && dto.getAreaId() != null && dto.getAreaId().toString().equals("40003483") && StringUtils.isNotEmpty(patMedInhosp.getPatname())) {
+            //鍗楀崕闄勪竴鐨勪骇绉戯紝瑕佹眰涓嶇敓鎴愨�滀箣瀛愩�佷箣濂炽�佷箣濠粹�濈殑闅忚浠诲姟
+            if (patMedInhosp.getPatname().contains("涔嬪瓙") || patMedInhosp.getPatname().contains("涔嬪コ") || patMedInhosp.getPatname().contains("涔嬪┐")) {
+                patMedInhosp.setDeptcheckFlag("3");
+                patMedInhosp.setWardcheckFlag("3");
+                patMedInhosp.setDiagcheckFlag("3");
+                patMedInhosp.setRemark(patMedInhosp.getRemark() + ";涓嶇敓鎴愪箣瀛愩�佷箣濂炽�佷箣濠撮棶鍗�");
+            }
+        }
+
         return patMedInhosp;
     }
 
@@ -751,31 +886,110 @@
         patMedInhosp.setHospitaldistrictname(dto.getAreaName());
     }
 
+    /**
+     * 澶勭悊鎮h�呮。妗堬紙鏂板鎴栨洿鏂帮級
+     * 浣跨敤 Redis 鍒嗗竷寮忛攣闃叉骞跺彂閲嶅鎻掑叆
+     */
     private PatArchive processPatientArchive(ServiceSLTDInhospResDTO dto) {
-        List<PatArchive> existingArchives = null;
+        // 鏋勫缓閿佺殑 key锛氬熀浜� patientno 鎴� idcardno
+        String lockKey = "pat_archive_lock:" + (StringUtils.isNotEmpty(dto.getMedicalRecordNo()) ? dto.getMedicalRecordNo() : dto.getIdCardNo());
 
-        // 浼樺厛鎸� patientno 绮剧‘鏌ラ噸锛屾煡涓嶅埌鍐嶆寜 idcardno 鏌ラ噸锛圓ND鏉′欢浼氭紡鏌ュ悓涓�浜轰笉鍚宲atientno鐨勬儏鍐碉級
-        if (dto.getPatientId() != null) {
-            PatArchive queryByPatientNo = new PatArchive();
-            queryByPatientNo.setPatientno(String.valueOf(dto.getPatientId()));
-            queryByPatientNo.setIdcardno(StringUtils.isNotEmpty(dto.getIdCardNo()) ? dto.getIdCardNo().trim() : null);
-            existingArchives = patArchiveService.selectPatArchiveList(queryByPatientNo);
+        // 灏濊瘯鑾峰彇鍒嗗竷寮忛攣锛屾渶澶氱瓑寰� 3 绉掞紝閿佸畾 10 绉掕嚜鍔ㄩ噴鏀�
+        Boolean lockAcquired = redisTemplate.opsForValue().setIfAbsent(lockKey, "1", 10, TimeUnit.SECONDS);
+
+        if (lockAcquired == null || !lockAcquired) {
+            log.warn("銆恜rocessPatientArchive銆戣幏鍙栧垎甯冨紡閿佸け璐ワ紝璺宠繃鏈澶勭悊锛堝叾浠栫嚎绋嬫鍦ㄥ鐞嗭級锛宲atientno={}", dto.getMedicalRecordNo());
+            // 绛夊緟涓�娈垫椂闂村悗閲嶈瘯鏌ヨ
+            try {
+                Thread.sleep(500);
+            } catch (InterruptedException e) {
+                Thread.currentThread().interrupt();
+            }
         }
-//        if (CollectionUtils.isEmpty(existingArchives) && !StringUtils.isEmpty(dto.getIdCardNo())) {
-//            PatArchive queryByIdCard = new PatArchive();
-//            queryByIdCard.setIdcardno(dto.getIdCardNo().trim());
-//            existingArchives = patArchiveService.selectPatArchiveList(queryByIdCard);
-//        }
+
+        try {
+            return doProcessPatientArchive(dto);
+        } finally {
+            // 閲婃斁閿�
+            if (lockAcquired != null && lockAcquired) {
+                redisTemplate.delete(lockKey);
+            }
+        }
+    }
+
+    /**
+     * 瀹為檯鎵ц鎮h�呮。妗堝鐞嗛�昏緫
+     */
+    private PatArchive doProcessPatientArchive(ServiceSLTDInhospResDTO dto) {
+        List<PatArchive> existingArchives = null;
+        log.info("銆恜rocessPatientArchive銆戞柊澧炴偅鑰呮。妗堬紝鏌ヨ鍏ュ弬淇℃伅patientno:{}锛宨dcardno:{}", dto.getMedicalRecordNo(), dto.getIdCardNo());
+        // 绗竴姝ワ細鎸� patientno 绮剧‘鏌ラ噸锛堜笌鎻掑叆鏃朵娇鐢ㄧ殑 medicalRecordNo 涓�鑷达級
+        String patientno = StringUtils.isEmpty(dto.getMedicalRecordNo()) ? null : dto.getMedicalRecordNo();
+        if (StringUtils.isNotEmpty(patientno)) {
+            PatArchive queryByPatientNo = new PatArchive();
+            queryByPatientNo.setPatientno(patientno);
+            existingArchives = patArchiveService.selectPatArchiveList(queryByPatientNo);
+            log.debug("銆恜rocessPatientArchive銆戞寜patientno鏌ヨ锛宲atientno={}, 缁撴灉鏁伴噺={}", patientno, existingArchives.size());
+        }
+
+        // 绗簩姝ワ細鎸� patientno 鏌ヤ笉鍒版椂锛屾寜 idcardno 鏌ラ噸锛堝垎姝R锛岄伩鍏岮ND鏉′欢婕忔煡锛�
+        if (CollectionUtils.isEmpty(existingArchives) && StringUtils.isNotEmpty(dto.getIdCardNo())) {
+            PatArchive queryByIdCard = new PatArchive();
+            queryByIdCard.setIdcardno(dto.getIdCardNo().trim());
+            existingArchives = patArchiveService.selectPatArchiveList(queryByIdCard);
+            log.debug("銆恜rocessPatientArchive銆戞寜idcardno鏌ヨ锛宨dcardno={}, 缁撴灉鏁伴噺={}", dto.getIdCardNo(), existingArchives.size());
+        }
 
         PatArchive patArchive = buildPatientArchive(dto);
+        log.info("銆恜rocessPatientArchive銆戞偅鑰呮。妗堟煡閲嶅畬鎴愶紝patientno={}, 鏄惁宸插瓨鍦�={}", patArchive.getPatientno(), CollectionUtils.isEmpty(existingArchives) ? "鍚�" : "鏄�(id=" + existingArchives.get(0).getId() + ")");
 
         if (CollectionUtils.isEmpty(existingArchives)) {
-            patArchiveService.insertPatArchive(patArchive);
-            log.debug("銆恜rocessPatientArchive銆戞柊澧炴偅鑰呮。妗堬紝鎮h�呯紪鍙凤細{}", patArchive.getPatientno());
+            try {
+                // 鏈�缁堢‘璁ゆ煡璇紙闃插尽鎬х紪绋嬶細闃叉Redis閿佸け鏁堢瓑鏋佺鎯呭喌锛�
+                PatArchive finalQuery = new PatArchive();
+                if (StringUtils.isNotEmpty(dto.getIdCardNo())) {
+                    finalQuery.setIdcardno(dto.getIdCardNo().trim());
+                }
+                if (StringUtils.isNotEmpty(dto.getMedicalRecordNo())) {
+                    finalQuery.setPatientno(dto.getMedicalRecordNo());
+                }
+
+                List<PatArchive> finalCheck = patArchiveService.selectPatArchiveList(finalQuery);
+                log.info("銆恜rocessPatientArchive銆戞渶缁堢‘璁ゆ煡璇紝patientno={}, idcardno={}, 缁撴灉鏁伴噺={}", dto.getMedicalRecordNo(), dto.getIdCardNo(), finalCheck.size());
+
+                if (CollectionUtils.isEmpty(finalCheck)) {
+                    patArchiveService.insertPatArchive(patArchive);
+                    log.info("銆恜rocessPatientArchive銆戔湏 鏂板鎮h�呮。妗堟垚鍔燂紝patientno={}, id={}", patArchive.getPatientno(), patArchive.getId());
+                } else {
+                    // 鍏朵粬绾跨▼宸茬粡鎻掑叆锛岀洿鎺ヤ娇鐢ㄥ凡鏈夎褰�
+                    existingArchives = finalCheck;
+                    patArchive.setId(existingArchives.get(0).getId());
+                    patArchive.setNotrequiredFlag(existingArchives.get(0).getNotrequiredFlag());
+                    patArchive.setNotrequiredreason(existingArchives.get(0).getNotrequiredreason());
+                    log.info("銆恜rocessPatientArchive銆戞。妗堝凡琚叾浠栫嚎绋嬪垱寤猴紝浣跨敤宸叉湁璁板綍锛宨d={}", patArchive.getId());
+                }
+            } catch (org.springframework.dao.DuplicateKeyException e) {
+                log.warn("銆恜rocessPatientArchive銆戞偅鑰呮。妗堝凡瀛樺湪(骞跺彂鎻掑叆寮傚父)锛岃烦杩囷細patientno={}, idcardno={}", patArchive.getPatientno(), patArchive.getIdcardno());
+                // 骞跺彂鎻掑叆鍦烘櫙锛岄噸鏂版煡璇㈣幏鍙栧凡瀛樺湪鐨勮褰�
+                PatArchive queryRetry = new PatArchive();
+                queryRetry.setPatientno(patArchive.getPatientno());
+                if (StringUtils.isNotEmpty(patArchive.getIdcardno())) {
+                    queryRetry.setIdcardno(patArchive.getIdcardno());
+                }
+                existingArchives = patArchiveService.selectPatArchiveList(queryRetry);
+                if (CollectionUtils.isNotEmpty(existingArchives)) {
+                    patArchive.setId(existingArchives.get(0).getId());
+                    patArchive.setNotrequiredFlag(existingArchives.get(0).getNotrequiredFlag());
+                    patArchive.setNotrequiredreason(existingArchives.get(0).getNotrequiredreason());
+                    log.info("銆恜rocessPatientArchive銆戜粠寮傚父鎭㈠锛岃幏鍙栧凡鏈夋。妗堬紝id={}", patArchive.getId());
+                }
+            }
         } else {
             patArchive.setId(existingArchives.get(0).getId());
+            patArchive.setNotrequiredFlag(existingArchives.get(0).getNotrequiredFlag());
+            patArchive.setNotrequiredreason(existingArchives.get(0).getNotrequiredreason());
             patArchiveService.updateArchive(patArchive);
-            log.debug("銆恜rocessPatientArchive銆戞洿鏂版偅鑰呮。妗堬紝鎮h�呯紪鍙凤細{}", patArchive.getPatientno());
+            log.info("銆恜rocessPatientArchive銆戔湏 鏇存柊鎮h�呮。妗堬紝patientno={}, id={}", patArchive.getPatientno(), patArchive.getId());
         }
 
         return patArchive;
@@ -783,7 +997,8 @@
 
     private PatArchive buildPatientArchive(ServiceSLTDInhospResDTO dto) {
         PatArchive patArchive = new PatArchive();
-        patArchive.setPatientno(dto.getPatientId() == null ? null : String.valueOf(dto.getPatientId()));
+        patArchive.setPatientno(StringUtils.isEmpty(dto.getMedicalRecordNo()) ? null : dto.getMedicalRecordNo());
+        patArchive.setPatidHis(dto.getPatientId() == null ? null : String.valueOf(dto.getPatientId()));
         patArchive.setIdcardno(StringUtils.isEmpty(dto.getIdCardNo()) ? "" + dto.getMedicalCardId() : dto.getIdCardNo().trim());
         patArchive.setName(dto.getPatientName());
         patArchive.setSourcefrom(2L);
@@ -862,7 +1077,17 @@
         dto.setCostNatureName(getStringValue(dataItem, "costNatureName"));
         dto.setCostNatureCode(getStringValue(dataItem, "costNatureCode"));
         dto.setFurtherConsultationStatus(getIntegerValue(dataItem, "furtherConsultationStatus"));
-
+        Object mainDiagObj = dataItem.get("mainDischargeDiagnosis");
+        if (mainDiagObj instanceof Map) {
+            Map<String, Object> mainDiagMap = (Map<String, Object>) mainDiagObj;
+            ServiceSLTDDiagnosisResDTO mainDiag = new ServiceSLTDDiagnosisResDTO();
+            mainDiag.setDiagnosisDictCode(getStringValue(mainDiagMap, "diagnosisDictCode"));
+            mainDiag.setDiagnosisDictName(getStringValue(mainDiagMap, "diagnosisDictName"));
+            mainDiag.setDiagnosisCategory(getStringValue(mainDiagMap, "diagnosisCategory"));
+            mainDiag.setRecordType(getIntegerValue(mainDiagMap, "recordType"));
+            mainDiag.setIsMainDiagnosis(getIntegerValue(mainDiagMap, "isMainDiagnosis"));
+            dto.setMainDischargeDiagnosis(mainDiag);
+        }
         Object contactsObj = dataItem.get("residentContactInfos");
         if (contactsObj instanceof List) {
             dto.setResidentContactInfos(parseContacts((List<?>) contactsObj));
@@ -875,6 +1100,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<>();
@@ -920,6 +1194,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