From f89e03e3c1f2d621e62b7521fa0112ea63ed10f5 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期一, 10 十一月 2025 15:59:16 +0800
Subject: [PATCH] 代码提交

---
 smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java |  378 +++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 315 insertions(+), 63 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 b087f29..ced4367 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -2,24 +2,30 @@
 
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
+import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.entity.SysUserDept;
+import com.ruoyi.common.core.domain.entity.SysUserRole;
+import com.ruoyi.common.utils.DtoConversionUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.http.HttpUtils;
 import com.smartor.domain.*;
-import com.smartor.mapper.PatMedOuthospMapper;
-import com.smartor.mapper.SysUser2Mapper;
-import com.smartor.mapper.SysUserImportMapper;
+import com.smartor.mapper.*;
 import com.smartor.service.IPatArchiveService;
 import com.smartor.service.IPatMedInhospService;
 import com.smartor.service.IServiceSLTDHealthcareRecordService;
+import com.sun.org.apache.bcel.internal.generic.NEW;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 
 import java.lang.reflect.Array;
 import java.lang.reflect.Type;
+import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -29,7 +35,7 @@
 public class ServiceSLTDHealthcareRecordServiceImpl implements IServiceSLTDHealthcareRecordService {
 
     private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
-    private static final String APP_KEY = "ak-zUMiOWhqXiJQWPB1pCbz0pjr";
+    public static final String APP_KEY = "ak-zUMiOWhqXiJQWPB1pCbz0pjr";
 
     @Autowired
     private IPatArchiveService patArchiveService;
@@ -43,25 +49,129 @@
     @Autowired
     private SysUser2Mapper sysUser2Mapper;
 
+    @Autowired
+    private SysDept2Mapper sysDeptMapper;
+
+    @Autowired
+    private SysUserDeptMapper sysUserDeptMapper;
+
+    @Autowired
+    private SysUserRole2Mapper sysUserRoleMapper;
+
     @Value("${sltd_pub_path}")
     private String sltdPubPath;
 
+    @Value("${userPwd}")
+    private String userPwd;
+
     @Override
     public List<ServiceSLTDInhospResDTO> queryHealthcareRecordList(ServiceSLTDInhospReqVO reqVO) {
-        log.info("銆恞ueryHealthcareRecordList銆戝紑濮嬭皟鐢ㄧ渷绔嬪悓寰峰仴搴疯褰曟煡璇㈡帴鍙o紝璇锋眰鍙傛暟锛歿}", reqVO);
         try {
+            log.info("銆恞ueryHealthcareRecordList銆戝紑濮嬭皟鐢ㄧ渷绔嬪悓寰峰仴搴疯褰曟煡璇㈡帴鍙o紝璇锋眰鍙傛暟锛歿}", reqVO);
             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("銆恞ueryHealthcareRecordList銆戞帴鍙e搷搴旂粨鏋滐細{}", result);
 
             String cry = determineCry(reqVO);
-            return parseResponseData(result, reqVO.getHealthcareRecordTypeList().get(0), cry);
+            return parseResponseData(result, reqVO.getHealthcareRecordTypeList(), cry, reqVO.getCampusId());
         } catch (Exception e) {
             log.error("銆恞ueryHealthcareRecordList銆戣皟鐢ㄧ渷绔嬪悓寰峰仴搴疯褰曟煡璇㈡帴鍙e紓甯革紝璇锋眰鍙傛暟锛歿}", reqVO, e);
             throw new RuntimeException("璋冪敤鐪佺珛鍚屽痉鍋ュ悍璁板綍鏌ヨ鎺ュ彛澶辫触", e);
         }
     }
+
+
+    /**
+     * 閲囬泦绉戝鐥呭尯淇℃伅
+     *
+     * @param serviceSLTDDeptReqVO
+     * @return 鍙傝��
+     * {
+     * "orgId": 20001001,
+     * "campusIds": 30001002,
+     * "unitIds": null,
+     * "relationType": null,
+     * "searchText": null,
+     * "status": 1
+     * }
+     */
+    @Override
+    public Boolean queryDeptWardAreaInfoList(ServiceSLTDDeptReqVO serviceSLTDDeptReqVO) {
+        log.info("銆恞ueryDeptWardAreaInfoList銆戝紑濮嬭皟鐢ㄧ渷绔嬪悓寰风瀹ょ梾鍖烘煡璇㈡帴鍙o紝璇锋眰鍙傛暟锛歿}", serviceSLTDDeptReqVO);
+        try {
+            Map<String, Object> params = new HashMap<>();
+            if (serviceSLTDDeptReqVO.getOrgId() != null) {
+                params.put("orgId", Long.parseLong(serviceSLTDDeptReqVO.getOrgId()));
+            }
+            if (serviceSLTDDeptReqVO.getCampusIds() != null) {
+                params.put("campusIds", serviceSLTDDeptReqVO.getCampusIds());
+            }
+            params.put("subjectCode", serviceSLTDDeptReqVO.getSubjectCode());
+            params.put("orgSubjectCode", serviceSLTDDeptReqVO.getOrgSubjectCode());
+
+            params.put("deptDimensions", serviceSLTDDeptReqVO.getDeptDimensions());
+
+            params.put("serviceScopes", serviceSLTDDeptReqVO.getServiceScopes());
+            params.put("inpatientArea", serviceSLTDDeptReqVO.getInpatientArea());
+            params.put("status", serviceSLTDDeptReqVO.getStatus());
+
+
+            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搷搴旂粨鏋滐細{}", result);
+            List<Map<String, Object>> dataList = getDataList(result);
+            log.info("-----------dataList鎺ュ彛鍝嶅簲缁撴灉锛歿}", dataList.size());
+            for (Map<String, Object> dataItem : dataList) {
+                SysDept sysDept = new SysDept();
+                sysDept.setOrgid("" + getLongValue(dataItem, "orgId"));
+                sysDept.setCampusid("" + getLongValue(dataItem, "campusId"));
+                sysDept.setHisDeptId("" + getLongValue(dataItem, "deptId"));
+                sysDept.setHisParentId(getStringValue(dataItem, "parentDeptId"));
+                //閫氳繃his鐨勭埗绉戝ID鍘绘壘鍒扮瀹D,濉厖parentId
+                if (StringUtils.isNotEmpty(getStringValue(dataItem, "parentDeptId"))) {
+                    SysDept sd = new SysDept();
+                    sd.setHisDeptId(getStringValue(dataItem, "parentDeptId"));
+                    sd.setOrgid(getStringValue(dataItem, "orgId"));
+                    List<SysDept> sysDepts = sysDeptMapper.selectDeptList(sd);
+                    if (CollectionUtils.isNotEmpty(sysDepts)) {
+                        SysDept sysDept1 = sysDepts.get(0);
+                        sysDept.setParentId(sysDept1.getDeptId());
+                        sysDept.setParentName(sysDept1.getDeptName());
+                    }
+                }
+                sysDept.setDeptName(getStringValue(dataItem, "deptName"));
+                Integer inpatientArea = getIntegerValue(dataItem, "inpatientArea");
+                if (inpatientArea != null && inpatientArea == 0) sysDept.setDeptType("1");
+                else if (inpatientArea != null && inpatientArea == 1) sysDept.setDeptType("2");
+                sysDept.setLeader("");
+                Integer status = getIntegerValue(dataItem, "status");
+                if (status != null & status == 0) sysDept.setStatus("1");
+                if (status != null & status == 1) sysDept.setStatus("0");
+                sysDept.setType("");
+                sysDept.setDeptCode("" + getLongValue(dataItem, "deptId"));
+                sysDept.setCreateBy(null);
+                sysDept.setCreateTime(new Date());
+                sysDept.setUpdateTime(new Date());
+                sysDept.setUpdateBy(null);
+
+                SysDept sysDept1 = sysDeptMapper.selectDeptByCode(sysDept.getDeptCode(), sysDept.getOrgid());
+                if (Objects.isNull(sysDept1)) {
+                    int i = sysDeptMapper.insertDept(sysDept);
+                    log.info("ServiceExternalServiceImpl---addDeptInfo鏄惁鏂板鎴愬姛锛歿}", i);
+                } else {
+                    sysDept.setDeptId(sysDept1.getDeptId());
+                    int i = sysDeptMapper.updateDept(sysDept);
+                    log.info("ServiceExternalServiceImpl---addDeptInfo鏄惁淇敼鎴愬姛04锛歿}", i);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return true;
+    }
+
 
     /**
      * 閲囬泦鍖婚櫌鐢ㄦ埛淇℃伅
@@ -73,11 +183,14 @@
     public Boolean queryHospUserInfoList(ServiceSLTDInhospReqVO reqVO) {
         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);
+        String result = HttpUtils.sendPostByHeader(sltdPubPath + "/osj/hbos-thirdparty-integration/standard/common/staff/queryStaffList", new Gson().toJson(requestParams), headers);
         log.info("銆恞ueryHealthcareRecordList銆戞帴鍙e搷搴旂粨鏋滐細{}", result);
         List<Map<String, Object>> dataList = getDataList(result);
         for (Map<String, Object> dataItem : dataList) {
             SysUser sysUser = new SysUser();
+            if (StringUtils.isEmpty(getStringValue(dataItem, "accountNo"))) {
+                continue;
+            }
             sysUser.setUserName(getStringValue(dataItem, "accountNo"));
             sysUser.setNickName(getStringValue(dataItem, "name"));
             List diagnosisObjList = (List<?>) dataItem.get("qualifications");
@@ -86,15 +199,21 @@
                     if (diagnosis instanceof Map) {
                         Map<String, Object> diagnosisMap = (Map<String, Object>) diagnosis;
                         String professionalTitleName = getStringValue(diagnosisMap, "professionalTitleName");
-                        if (professionalTitleName.contains("鍖诲笀")) sysUser.setUserType("鍖荤敓");
-                        if (professionalTitleName.contains("鎶�")) sysUser.setUserType("鎶ゅ+");
+                        if (professionalTitleName.contains("鍖诲笀")) {
+                            sysUser.setUserType("鍖荤敓");
+                            sysUser.setSearchscope("1");
+                        }
+                        if (professionalTitleName.contains("鎶�")) {
+                            sysUser.setUserType("鎶ゅ+");
+                            sysUser.setSearchscope("2");
+                        }
                         sysUser.setTitle(getStringValue(diagnosisMap, "professionalTitleName"));
                     }
                 }
             }
-            sysUser.setDeptCode(getStringValue(dataItem, "accountNo"));
-            sysUser.setDeptName(getStringValue(dataItem, "personnelDeptName"));
+
             sysUser.setPhonenumber(getStringValue(dataItem, "telephone"));
+            sysUser.setUserCode(getStringValue(dataItem, "jobNumber"));
             //璁剧疆鎬у埆
             String genderName = getStringValue(dataItem, "genderName");
             if ("鐢�".equals(genderName)) sysUser.setSex("0");
@@ -105,8 +224,90 @@
             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));
 
-            sysUser2Mapper.insertUser(sysUser);
+            SysUser sysUser1 = sysUser2Mapper.selectUserByUserName(sysUser.getUserName());
+            if (ObjectUtils.isNotEmpty(sysUser1)) {
+                sysUser.setUserId(sysUser1.getUserId());
+                sysUser2Mapper.updateUser(sysUser);
+            } else {
+                sysUser2Mapper.insertUser(sysUser);
+            }
+
+            // 澶勭悊鐢ㄦ埛涓庨儴闂ㄧ殑鍏崇郴
+            List businessDepts = (List<?>) dataItem.get("businessDepts");
+            if (CollectionUtils.isEmpty(businessDepts)) {
+                continue;
+            }
+
+            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(sysUser1) && ObjectUtils.isNotEmpty(sysDept)) {
+                        SysUserDept sud = new SysUserDept();
+                        sud.setUserId(sysUser1.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 (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);
+
+            //璁剧疆涓�涓粯璁よ鑹诧紙鍖荤敓瑙掕壊锛�
+            List<SysUserRole> userRoleList = new ArrayList();
+            SysUserRole sur = new SysUserRole();
+            sur.setUserId(sysUser.getUserId());
+            sur.setRoleId(3L);
+            sur.setOrgid(sysUser.getOrgid());
+
+            //鍏堟煡璇竴涓嬶紝鏄惁瀛樺湪
+            SysUserRole sysUserRole = sysUserRoleMapper.selectUserRoleByRoleIdAndUserId(sysUser.getUserId(), 3L);
+            if (ObjectUtils.isNotEmpty(sysUserRole)) continue;
+
+            userRoleList.add(sur);
+            sysUserRoleMapper.batchUserRole(userRoleList);
         }
 
         return true;
@@ -116,7 +317,7 @@
         if (reqVO.getHealthcareRecordTypeList().contains("FH0108.02")) {
             if (reqVO.getStartHeadTime() != null && reqVO.getStartTailTime() != null) {
                 return "0";
-            } else if (reqVO.getPreOutHospitalHeadDate() != null && reqVO.getPreOutHospitalTailDate() != null) {
+            } else if (StringUtils.isNotEmpty(reqVO.getPreOutHospitalHeadDate()) && StringUtils.isNotEmpty(reqVO.getPreOutHospitalTailDate())) {
                 return "1";
             }
         }
@@ -128,14 +329,26 @@
         if (reqVO.getOrgId() != null) {
             params.put("orgId", Long.parseLong(reqVO.getOrgId()));
         }
-        if (reqVO.getCampusIds() != null) {
-            params.put("campusIds", reqVO.getCampusIds());
+        if (reqVO.getCampusId() != null) {
+            params.put("campusId", reqVO.getCampusId());
         }
         if (reqVO.getStartHeadTime() != null) {
             params.put("startHeadTime", reqVO.getStartHeadTime());
         }
         if (reqVO.getStartTailTime() != null) {
             params.put("startTailTime", reqVO.getStartTailTime());
+        }
+        if (reqVO.getEncounterTimeStart() != null) {
+            params.put("encounterTimeStart", reqVO.getEncounterTimeStart());
+        }
+        if (reqVO.getEncounterTimeEnd() != null) {
+            params.put("encounterTimeEnd", reqVO.getEncounterTimeEnd());
+        }
+        if (reqVO.getPreOutHospitalHeadDate() != null) {
+            params.put("preOutHospitalHeadDate", reqVO.getPreOutHospitalHeadDate());
+        }
+        if (reqVO.getPreOutHospitalTailDate() != null) {
+            params.put("preOutHospitalTailDate", reqVO.getPreOutHospitalTailDate());
         }
         if (reqVO.getHealthcareRecordTypeList() != null && !reqVO.getHealthcareRecordTypeList().isEmpty()) {
             params.put("healthcareRecordTypeList", reqVO.getHealthcareRecordTypeList());
@@ -148,7 +361,7 @@
         }
         params.put("serviceScopes", null);
         params.put("inpatientArea", null);
-        params.put("status", reqVO.getStatusList() != null && !reqVO.getStatusList().isEmpty() ? reqVO.getStatusList() : null);
+        params.put("status", reqVO.getStatusList() != null && !reqVO.getStatusList().isEmpty() ? reqVO.getStatusList().get(0) : null);
         return params;
     }
 
@@ -159,7 +372,7 @@
         return headers;
     }
 
-    private List<ServiceSLTDInhospResDTO> parseResponseData(String result, String type, String cry) {
+    private List<ServiceSLTDInhospResDTO> parseResponseData(String result, List<String> types, String cry, Long orgid) {
         try {
 
             List<Map<String, Object>> dataList = getDataList(result);
@@ -169,7 +382,7 @@
             }
             log.info("銆恜arseResponseData銆戞垚鍔熻В鏋恵}鏉″仴搴疯褰曟暟鎹�", resultList.size());
 
-            processResultList(resultList, type, cry);
+            processResultList(resultList, types, cry, orgid);
             return resultList;
         } catch (Exception e) {
             log.error("銆恜arseResponseData銆戣В鏋愬搷搴旀暟鎹紓甯革紝鍝嶅簲鍐呭锛歿}", result, e);
@@ -182,16 +395,16 @@
         Type mapType = new TypeToken<Map<String, Object>>() {
         }.getType();
         Map<String, Object> responseMap = gson.fromJson(result, mapType);
-
-        Number codeObj = (Number) responseMap.get("code");
-        if (codeObj == null || codeObj.intValue() != 200) {
-            log.error("銆恜arseResponseData銆戞帴鍙h繑鍥炲け璐ワ紝鍝嶅簲鐮侊細{}锛屽搷搴斿唴瀹癸細{}", codeObj, result);
-            throw new RuntimeException("鎺ュ彛璋冪敤澶辫触锛屽搷搴旂爜锛�" + codeObj);
+        Number codeNum = (Number) responseMap.get("code");
+        String code = BigDecimal.valueOf(codeNum.longValue()).toPlainString();
+        if (StringUtils.isEmpty(code) || !code.equals("200")) {
+            log.error("銆恜arseResponseData銆戞帴鍙h繑鍥炲け璐ワ紝鍝嶅簲鐮侊細{}锛屽搷搴斿唴瀹癸細{}", code, result);
+            throw new RuntimeException("鎺ュ彛璋冪敤澶辫触锛屽搷搴旂爜锛�" + code);
         }
 
         Object dataObj = responseMap.get("data");
         if (dataObj == null) {
-            log.warn("銆恜arseResponseData銆戞帴鍙h繑鍥炴暟鎹负绌�");
+            log.info("銆恜arseResponseData銆戞帴鍙h繑鍥炴暟鎹负绌�");
             return new ArrayList<>();
         }
 
@@ -202,36 +415,45 @@
         return dataList;
     }
 
-    private void processResultList(List<ServiceSLTDInhospResDTO> resultList, String type, String cry) {
-        switch (type) {
-            case "FH0108.01":
-                log.info("銆恜arseResponseData銆戣В鏋愰棬璇婃暟鎹�");
-                outHospitalDate(resultList);
-                break;
-            case "FH0108.02":
-                log.info("銆恜arseResponseData銆戣В鏋愪綇闄㈡暟鎹�");
-                inHospitalDate(resultList, cry);
-                break;
-            case "FH0108.03":
-                log.info("銆恜arseResponseData銆戣В鏋愭�ヨ瘖鏁版嵁");
-                outHospitalDate(resultList);
-                break;
-            default:
-                log.warn("銆恜arseResponseData銆戞湭鐭ョ殑鏁版嵁绫诲瀷锛歿}", type);
-                break;
-        }
+    private void processResultList(List<ServiceSLTDInhospResDTO> resultList, List<String> types, String cry, Long orgid) {
+        for (String type : types)
+            switch (type) {
+                case "FH0108.01":
+                    log.info("銆恜arseResponseData銆戣В鏋愰棬璇婃暟鎹�");
+                    outHospitalDate(resultList, orgid);
+                    break;
+                case "FH0108.02":
+                    log.info("銆恜arseResponseData銆戣В鏋愪綇闄㈡暟鎹�");
+                    inHospitalDate(resultList, cry, orgid);
+                    break;
+                case "FH0108.03":
+                    log.info("銆恜arseResponseData銆戣В鏋愭�ヨ瘖鏁版嵁");
+                    outHospitalDate(resultList, orgid);
+                    break;
+                default:
+                    log.warn("銆恜arseResponseData銆戞湭鐭ョ殑鏁版嵁绫诲瀷锛歿}", type);
+                    break;
+            }
     }
 
-    private Boolean outHospitalDate(List<ServiceSLTDInhospResDTO> resultList) {
+    private Boolean outHospitalDate(List<ServiceSLTDInhospResDTO> resultList, Long orgid) {
         for (ServiceSLTDInhospResDTO dto : resultList) {
-            PatArchive patArchive = processPatientArchive(dto);
-            PatMedOuthosp patMedOuthosp = buildPatMedOuthosp(dto, patArchive);
-            patMedOuthospMapper.insertPatMedOuthosp(patMedOuthosp);
+            if (Objects.isNull(dto)) continue;
+            PatArchive patArchive = processPatientArchive(dto, orgid);
+            PatMedOuthosp patMedOuthosp = buildPatMedOuthosp(dto, patArchive, orgid);
+//            //鏌ヨ褰撳墠鏂板鐨勯棬鎬ヨ瘖鏁版嵁锛屾槸鍚﹀湪杩囨浮琛ㄤ腑鏄惁瀛樺湪锛屽鏋滃瓨鍦紝灏变笉寰�闂ㄦ�ヨ瘖琛ㄩ噷鏂板浜�(杩欎釜鍏堜笉鍐欎簡锛屾娊绌轰簡鍐嶅啓)
+//            PatMedOuthospProvisional pmop = DtoConversionUtils.sourceToTarget(patMedOuthosp, PatMedOuthospProvisional.class);
+
+            //鍏堟煡璇竴涓嬶紝鏄笉鏄凡缁忓瓨鍦ㄨ娴佹按鍙蜂簡锛屽鏋滃瓨鍦紝灏变笉鏂板浜�
+            PatMedOuthosp pmo2 = new PatMedOuthosp();
+            pmo2.setSerialnum(patMedOuthosp.getSerialnum());
+            List<PatMedOuthosp> patMedOuthosps = patMedOuthospMapper.selectPatMedOuthospList(pmo2);
+            if (CollectionUtils.isEmpty(patMedOuthosps)) patMedOuthospMapper.insertPatMedOuthosp(patMedOuthosp);
         }
         return true;
     }
 
-    private PatMedOuthosp buildPatMedOuthosp(ServiceSLTDInhospResDTO dto, PatArchive patArchive) {
+    private PatMedOuthosp buildPatMedOuthosp(ServiceSLTDInhospResDTO dto, PatArchive patArchive, Long orgid) {
         PatMedOuthosp patMedOuthosp = new PatMedOuthosp();
         patMedOuthosp.setOuthospno(dto.getHealthcareRecordNo());
         patMedOuthosp.setSerialnum(dto.getHealthcareRecordNo());
@@ -249,10 +471,15 @@
         patMedOuthosp.setMainsuit(dto.getDiagnosisName());
         patMedOuthosp.setHpi(null);
         patMedOuthosp.setCreateTime(new Date());
+        patMedOuthosp.setOrgid(dto.getOrgId());
+        patMedOuthosp.setCampusid(dto.getCampusId());
         return patMedOuthosp;
     }
 
     private Date parseDate(String dateStr) {
+        if (StringUtils.isEmpty(dateStr)) {
+            return null;
+        }
         try {
             return new SimpleDateFormat(DATE_FORMAT).parse(dateStr);
         } catch (ParseException e) {
@@ -261,21 +488,35 @@
         }
     }
 
-    private Boolean inHospitalDate(List<ServiceSLTDInhospResDTO> resultList, String cry) {
+    private Boolean inHospitalDate(List<ServiceSLTDInhospResDTO> resultList, String cry, Long orgid) {
         for (ServiceSLTDInhospResDTO dto : resultList) {
-            PatArchive patArchive = processPatientArchive(dto);
-            processPatientInhospInfo(dto, patArchive, cry);
+            if (Objects.isNull(dto)) continue;
+            PatArchive patArchive = processPatientArchive(dto, orgid);
+            processPatientInhospInfo(dto, patArchive, cry, orgid);
         }
         return true;
     }
 
-    private void processPatientInhospInfo(ServiceSLTDInhospResDTO dto, PatArchive patArchive, String cry) {
-        PatMedInhosp patMedInhosp = buildPatientInhospInfo(dto, patArchive, cry);
+    private void processPatientInhospInfo(ServiceSLTDInhospResDTO dto, PatArchive patArchive, String cry, Long orgid) {
+        PatMedInhosp patMedInhosp = buildPatientInhospInfo(dto, patArchive, cry, orgid);
         PatMedInhosp queryInhosp = new PatMedInhosp();
         queryInhosp.setPatno(patArchive.getPatientno());
         queryInhosp.setSerialnum(patMedInhosp.getSerialnum());
-        List<PatMedInhosp> existingInhosps = patMedInhospService.selectPatMedInhospList(queryInhosp);
+        queryInhosp.setOrgid(dto.getOrgId());
+        queryInhosp.setCampusid(dto.getCampusId());
+        queryInhosp.setInhospstate(cry);
+        log.info("----------------杩欓噷鐨勫叆鍙備负锛歿}", queryInhosp);
+        List<PatMedInhosp> existingInhosps = patMedInhospService.selectPatMedInhosp(queryInhosp);
 
+        if (cry.equals("0") && CollectionUtils.isNotEmpty(existingInhosps)) {
+            //鏂板杩囩殑鍏ラ櫌鏁版嵁锛屼笉鍐嶅鐞�
+            return;
+        } else if (cry.equals("1") && CollectionUtils.isNotEmpty(existingInhosps)) {
+            //鏂板杩囩殑鍑洪櫌鏁版嵁锛屼篃涓嶅啀澶勭悊
+            return;
+        }
+
+        log.info("----------------杩欓噷鐨勮繑鍙備负锛歿}", existingInhosps);
         if (CollectionUtils.isNotEmpty(existingInhosps)) {
             patMedInhosp.setInhospid(existingInhosps.get(0).getInhospid());
             patMedInhospService.updatePatMedInhosp(patMedInhosp);
@@ -286,7 +527,8 @@
         }
     }
 
-    private PatMedInhosp buildPatientInhospInfo(ServiceSLTDInhospResDTO dto, PatArchive patArchive, String cry) {
+    private PatMedInhosp buildPatientInhospInfo(ServiceSLTDInhospResDTO dto, PatArchive patArchive, String cry, Long orgid) {
+        log.info("----------------buildPatientInhospInfo杩欓噷杩涙潵浜嗗悧锛焮}", cry);
         PatMedInhosp patMedInhosp = new PatMedInhosp();
         patMedInhosp.setPatid(patArchive.getId());
         patMedInhosp.setPatno(patArchive.getPatientno());
@@ -295,7 +537,8 @@
         patMedInhosp.setNurseName(dto.getChiefNurseName());
         patMedInhosp.setSerialnum(dto.getHealthcareRecordNo());
         patMedInhosp.setFuflag("1");
-        patMedInhosp.setInhospstate("0".equals(cry) ? "0" : "1");
+        if ("0".equals(cry)) patMedInhosp.setInhospstate("0");
+        if ("1".equals(cry)) patMedInhosp.setInhospstate("1");
         patMedInhosp.setHospitalcode(dto.getOrgId());
         patMedInhosp.setBedNo(dto.getBedNumber());
         patMedInhosp.setStarttime(parseDate(dto.getStartTime()));
@@ -311,7 +554,8 @@
         patMedInhosp.setDrcode("" + dto.getDoctorId());
         patMedInhosp.setSchemestatus("0".equals(cry) ? 1L : 2L);
         patMedInhosp.setDelFlag("0");
-        patMedInhosp.setOrgid("1");
+        patMedInhosp.setOrgid(dto.getOrgId());
+        patMedInhosp.setCampusid(dto.getCampusId());
         return patMedInhosp;
     }
 
@@ -338,12 +582,12 @@
         patMedInhosp.setHospitaldistrictname(dto.getAreaName());
     }
 
-    private PatArchive processPatientArchive(ServiceSLTDInhospResDTO dto) {
+    private PatArchive processPatientArchive(ServiceSLTDInhospResDTO dto, Long orgid) {
         PatArchive queryArchive = new PatArchive();
-        queryArchive.setIdcardno(dto.getIdCardNo().trim());
+        queryArchive.setIdcardno(StringUtils.isEmpty(dto.getIdCardNo()) ? "" + dto.getMedicalCardId() : dto.getIdCardNo().trim());
         List<PatArchive> existingArchives = patArchiveService.selectPatArchiveList(queryArchive);
 
-        PatArchive patArchive = buildPatientArchive(dto);
+        PatArchive patArchive = buildPatientArchive(dto, orgid);
 
         if (CollectionUtils.isEmpty(existingArchives)) {
             patArchiveService.insertPatArchive(patArchive);
@@ -357,10 +601,10 @@
         return patArchive;
     }
 
-    private PatArchive buildPatientArchive(ServiceSLTDInhospResDTO dto) {
+    private PatArchive buildPatientArchive(ServiceSLTDInhospResDTO dto, Long orgid) {
         PatArchive patArchive = new PatArchive();
-        patArchive.setPatientno(dto.getMedicalRecordNo());
-        patArchive.setIdcardno(dto.getIdCardNo().trim());
+        patArchive.setPatientno("" + dto.getPatientId());
+        patArchive.setIdcardno(StringUtils.isEmpty(dto.getIdCardNo()) ? "" + dto.getMedicalCardId() : dto.getIdCardNo().trim());
         patArchive.setName(dto.getPatientName());
         patArchive.setSourcefrom(2);
         patArchive.setPattype("2");
@@ -376,12 +620,15 @@
         patArchive.setDelFlag("0");
         patArchive.setCreateTime(new Date());
         patArchive.setUpdateTime(new Date());
+        patArchive.setOrgid("" + dto.getOrgId());
+        patArchive.setCampusid(dto.getCampusId());
         return patArchive;
     }
 
     private ServiceSLTDInhospResDTO convertToDTO(Map<String, Object> dataItem) {
         ServiceSLTDInhospResDTO dto = new ServiceSLTDInhospResDTO();
         dto.setOrgId(getStringValue(dataItem, "orgId"));
+        dto.setCampusId(getStringValue(dataItem, "campusId"));
         dto.setHealthcareRecordId(getLongValue(dataItem, "healthcareRecordId"));
         dto.setHealthcareRecordNo(getStringValue(dataItem, "healthcareRecordNo"));
         dto.setPatientId(getLongValue(dataItem, "patientId"));
@@ -485,7 +732,12 @@
 
     private String getStringValue(Map<String, Object> map, String key) {
         Object value = map.get(key);
-        return value != null ? value.toString() : null;
+        if (value == null) {
+            return null;
+        }
+
+        // 鍙鐞嗘暟瀛楃被鍨嬶紝閬垮厤绉戝璁℃暟娉�
+        return value instanceof Number ? new BigDecimal(value.toString()).toPlainString() : value.toString();
     }
 
     private Long getLongValue(Map<String, Object> map, String key) {

--
Gitblit v1.9.3