From c462811cd33e81a80bc089e3677975c069d9cda5 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期六, 09 五月 2026 17:50:06 +0800
Subject: [PATCH] 代码提交

---
 smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java |  102 +++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 79 insertions(+), 23 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 9644504..fe2ceb1 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -167,10 +167,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);
@@ -248,19 +253,29 @@
             sysUser.setUpdateTime(new Date());
             sysUser.setUpdateBy("admin");
             sysUser.setCreateBy("admin");
-            sysUser.setCreateBy("admin");
             sysUser.setOrgid("" + getLongValue(dataItem, "orgId"));
             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());
+                    }
+                }
             }
 
             // 澶勭悊鐢ㄦ埛涓庨儴闂ㄧ殑鍏崇郴
@@ -275,8 +290,8 @@
                         log.info("------businessDeptMap鏄惁鏈夊�硷細{}", businessDeptMap);
                         String hisDeptId = getStringValue(businessDeptMap, "deptId");
                         log.info("------hisDeptId鏄惁鏈夊�硷細{}, reqVO.getOrgId()鐨勫�间负:{}", hisDeptId, reqVO.getCampusId());
-                        //鍦ㄨ繖閲岋紝hisDeptId灏辨槸deptCode
-                        SysDept sysDept = sysDeptMapper.selectDeptByCode(hisDeptId, reqVO.getOrgId());
+                        //鍦ㄨ繖閲岋紝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();
@@ -585,7 +600,6 @@
         queryInhosp.setSerialnum(StringUtils.trim(patMedInhosp.getSerialnum()));
         queryInhosp.setOrgid(StringUtils.trim(dto.getOrgId()));
         queryInhosp.setInhospstate(cry);
-        queryInhosp.setSchemestatus(0L);
         log.info("----------------杩欓噷鐨勫叆鍙備负锛歿},{}", queryInhosp.getPatno(), queryInhosp.getSerialnum());
         List<PatMedInhosp> existingInhosps = patMedInhospService.selectPatMedInhosp(queryInhosp);
 
@@ -596,8 +610,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");
@@ -674,6 +690,8 @@
             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 {
@@ -726,12 +744,12 @@
         }
         if ("1".equals(cry)) {
             patMedInhosp.setInhospstate("1");
-            if (CollectionUtils.isNotEmpty(dto.getDiagnosisList()) && dto.getDiagnosisList().size() > 0) {
-                for (ServiceSLTDDiagnosisResDTO diagnosis : dto.getDiagnosisList()) {
-                    if (diagnosis.getIsMainDiagnosis() == 1) {
-                        patMedInhosp.setLeavediagname(diagnosis.getDiagnosisDictName() == null ? "" : diagnosis.getDiagnosisDictName());
-                        patMedInhosp.setLeaveicd10code(diagnosis.getDiagnosisDictCode() == null ? "" : diagnosis.getDiagnosisDictCode());
-                    }
+            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(), ""));
                 }
             }
         }
@@ -792,18 +810,46 @@
     private PatArchive processPatientArchive(ServiceSLTDInhospResDTO dto) {
         List<PatArchive> existingArchives = null;
 
-        // 浼樺厛鎸� patientno 绮剧‘鏌ラ噸锛屾煡涓嶅埌鍐嶆寜 idcardno 鏌ラ噸锛圓ND鏉′欢浼氭紡鏌ュ悓涓�浜轰笉鍚宲atientno鐨勬儏鍐碉級
-        if (dto.getPatientId() != null) {
+        // 绗竴姝ワ細鎸� patientno 绮剧‘鏌ラ噸锛堜笌鎻掑叆鏃朵娇鐢ㄧ殑 medicalRecordNo 涓�鑷达級
+        String patientno = dto.getMedicalRecordNo() == null ? null : String.valueOf(dto.getMedicalRecordNo());
+        if (StringUtils.isNotEmpty(patientno)) {
             PatArchive queryByPatientNo = new PatArchive();
-            queryByPatientNo.setPatientno(String.valueOf(dto.getPatientId()));
-            queryByPatientNo.setIdcardno(StringUtils.isNotEmpty(dto.getIdCardNo()) ? dto.getIdCardNo().trim() : null);
+            queryByPatientNo.setPatientno(patientno);
             existingArchives = patArchiveService.selectPatArchiveList(queryByPatientNo);
         }
+
+        // 绗簩姝ワ細鎸� 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);
+        }
+
+        // 绗笁姝ワ細鎸� patidHis 鏌ラ噸锛堝吋瀹规棫鏁版嵁锛屾棫鏁版嵁鍙兘浠� patientId 瀛樹负 patientno锛�
+        if (CollectionUtils.isEmpty(existingArchives) && dto.getPatientId() != null) {
+            PatArchive queryByPatidHis = new PatArchive();
+            queryByPatidHis.setPatientno(String.valueOf(dto.getPatientId()));
+            existingArchives = patArchiveService.selectPatArchiveList(queryByPatidHis);
+        }
+
         PatArchive patArchive = buildPatientArchive(dto);
 
         if (CollectionUtils.isEmpty(existingArchives)) {
-            patArchiveService.insertPatArchive(patArchive);
-            log.debug("銆恜rocessPatientArchive銆戞柊澧炴偅鑰呮。妗堬紝鎮h�呯紪鍙凤細{}", patArchive.getPatientno());
+            try {
+                patArchiveService.insertPatArchive(patArchive);
+                log.debug("銆恜rocessPatientArchive銆戞柊澧炴偅鑰呮。妗堬紝鎮h�呯紪鍙凤細{}", patArchive.getPatientno());
+            } catch (org.springframework.dao.DuplicateKeyException e) {
+                log.warn("銆恜rocessPatientArchive銆戞偅鑰呮。妗堝凡瀛樺湪(骞跺彂鎻掑叆)锛岃烦杩囷細patientno={}, idcardno={}", patArchive.getPatientno(), patArchive.getIdcardno());
+                // 骞跺彂鎻掑叆鍦烘櫙锛岄噸鏂版煡璇㈣幏鍙栧凡瀛樺湪鐨勮褰�
+                PatArchive queryRetry = new PatArchive();
+                queryRetry.setPatientno(patArchive.getPatientno());
+                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());
+                }
+            }
         } else {
             patArchive.setId(existingArchives.get(0).getId());
             patArchive.setNotrequiredFlag(existingArchives.get(0).getNotrequiredFlag());
@@ -897,7 +943,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));

--
Gitblit v1.9.3