From c4dc6a5d66524d08b768046d9d2d5974bf96f45c Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 11 十一月 2026 14:06:23 +0800
Subject: [PATCH] Merge branch 'smartor_ls_261103' into smartor_ls_merge

---
 smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java |  547 ++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 469 insertions(+), 78 deletions(-)

diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
index e4fa9a8..859bd9c 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
@@ -1,6 +1,11 @@
 package com.smartor.service.impl;
 
+import com.ruoyi.othervisit.api.OtherVisitFacade;
+import com.ruoyi.inhospvisit.api.InhospVisitFacade;
 import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 import com.ruoyi.common.core.domain.entity.SysDept;
@@ -11,10 +16,11 @@
 import com.ruoyi.common.utils.DtoConversionUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.http.HttpUtils;
+import com.ruoyi.system.service.ISysConfigService;
 import com.smartor.domain.*;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
 import com.smartor.mapper.*;
 import com.smartor.service.IPatMedOuthospService;
+import com.smartor.service.IPatSpecificArchiveGenerateService;
 import com.smartor.service.IServiceExternalService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -35,6 +41,24 @@
 import java.util.*;
 import java.util.stream.Collectors;
 
+import com.ruoyi.outpatientvisit.domain.PatMedOuthospQueryReq;
+import com.ruoyi.othervisit.domain.PatMedOperationItem;
+import com.ruoyi.outpatientvisit.mapper.PatMedOuthospMapper;
+import com.ruoyi.othervisit.domain.PatMedOperation;
+import com.ruoyi.outpatientvisit.domain.PatMedOuthosp;
+import com.ruoyi.inhospvisit.domain.PatMedInhosp;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.common.core.domain.entity.PatArchivecontact;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.patarchive.mapper.PatArchiveMapper;
+import com.ruoyi.patarchive.mapper.PatArchivecontactMapper;
+import com.ruoyi.common.core.domain.entity.Icd10;
+import com.ruoyi.common.mapper.Icd10Mapper;
+import com.ruoyi.system.mapper.ext.SysUser2Mapper;
+import com.ruoyi.system.mapper.ext.SysDept2Mapper;
+import com.ruoyi.system.mapper.ext.SysUserDeptMapper;
 /**
  * 涓婚敭Service涓氬姟灞傚鐞�
  *
@@ -44,8 +68,19 @@
 @Slf4j
 @Service
 public class ServiceExternalServiceImpl implements IServiceExternalService {
+    /**
+     * 榫欐硥浜烘皯鍖婚櫌鏈烘瀯ID
+     */
+    private static final String LONGQUAN_PEOPLE_HOSPITAL_ORG_ID = "47240004533118111A1001";
+
     @Autowired
     private SysDept2Mapper sysDeptMapper;
+
+    /**
+     * 鎵嬫湳鏁版嵁涓�寰嬬粡 ruoyi-othervisit 鐨勯棬闈㈠彇鐢紙璺ㄦā鍧楁暟鎹闂師鍒欙級銆�
+     */
+    @Autowired
+    private OtherVisitFacade otherVisitFacade;
     @Autowired
     private SysUser2Mapper sysUserMapper;
     @Autowired
@@ -57,11 +92,7 @@
     @Autowired
     private PatArchivecontactMapper patArchivecontactMapper;
     @Autowired
-    private PatMedInhospMapper patMedInhospMapper;
-    @Autowired
-    private PatMedOperationMapper patMedOperationMapper;
-    @Autowired
-    private PatMedOperationItemMapper patMedOperationItemMapper;
+    private InhospVisitFacade inhospVisitFacade;
     @Autowired
     private PatMedInspectionMapper patMedInspectionMapper;
     @Autowired
@@ -70,6 +101,10 @@
     private Icd10Mapper icd10Mapper;
     @Autowired
     private IPatMedOuthospService patMedOuthospService;
+    @Autowired
+    private ISysConfigService configService;
+    @Autowired
+    private IPatSpecificArchiveGenerateService patSpecificArchiveGenerateService;
     @Autowired
     private PatMedOuthospMapper patMedOuthospMapper;
     @Autowired
@@ -483,9 +518,9 @@
         PatMedInhosp patMedInhosp = new PatMedInhosp();
         patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao());
         patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID());
-        List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
+        List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp);
         for (PatMedInhosp patMedInhosp1 : patMedInhospList) {
-            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
+            String tagname = inhospVisitFacade.getTagnameBypatid(patMedInhosp1.getPatid());
             patMedInhosp1.setTagname(tagname);
         }
         if (CollectionUtils.isNotEmpty(patMedInhospList)) {
@@ -498,7 +533,7 @@
                 patMedInhosp1.setOperatorId(ObjectUtils.isNotEmpty(JiuZhenXX.get("CaoZuoRID")) ? JiuZhenXX.get("CaoZuoRID").toString() : null);
             }
             patMedInhosp1.setUpdateTime(new Date());
-            int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+            int i = inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
             if (i != 1) return false;
         }
         return true;
@@ -577,9 +612,9 @@
         PatMedInhosp patMedInhosp = new PatMedInhosp();
         patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao());
         patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID());
-        List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
+        List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp);
         for (PatMedInhosp patMedInhosp1 : patMedInhospList) {
-            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
+            String tagname = inhospVisitFacade.getTagnameBypatid(patMedInhosp1.getPatid());
             patMedInhosp1.setTagname(tagname);
         }
         PatMedInhosp patMedInhosp1 = new PatMedInhosp();
@@ -647,6 +682,21 @@
             }).collect(Collectors.toList());
             patMedInhosp1.setLeaveicd10code(hospPatientDiagnoseInfos2.get(0).getIcd10());
             patMedInhosp1.setLeavediagname(hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
+            //鍙湁璇婃柇鍚嶇О娌℃湁璇婃柇鐮佺殑鏁版嵁
+            if(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname())
+                    && !StringUtils.isNotEmpty(patMedInhosp1.getLeaveicd10code())){
+                Icd10 icd10 = new Icd10();
+                icd10.setIcdname(patMedInhosp1.getLeavediagname());
+                icd10.setDelFlag("0");
+                icd10.setOrgid(ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null);
+                //涓芥按鏃犻櫌鍖猴紝榛樿鍊兼槸 1
+                icd10.setCampusid("1");
+                //閫氳繃icdCode鏌ヨ涓�涓嬶紝鏄惁瀛樺湪
+                List<Icd10> icd10s = icd10Mapper.exactQueryIcd10List(icd10);
+                if(CollectionUtils.isEmpty(icd10s)){
+                    patMedInhosp1.setLeaveicd10code(icd10s.get(0).getIcdcode());
+                }
+            }
             //patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() + "," + hospPatientDiagnoseInfos2.get(0).getZhenDuanMC() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
             patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
         }
@@ -679,7 +729,7 @@
                 //涓嶉渶瑕侀暱鏈熶换鍔¢殢璁�
                 patMedInhosp1.setFuflag("0");
             }
-            int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+            int i = inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
             if (i != 1) return false;
         } else {
             if (ObjectUtils.isNotEmpty(BingRenXX)) {
@@ -703,7 +753,7 @@
                 patMedInhosp1.setFuflag("0");
             }
 
-            int i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp1);
+            int i = inhospVisitFacade.insertPatMedInhosp(patMedInhosp1);
             if (i != 1) return false;
         }
         return true;
@@ -761,9 +811,9 @@
         PatMedInhosp patMedInhosp = new PatMedInhosp();
         patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao());
         patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID());
-        List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
+        List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp);
         for (PatMedInhosp patMedInhosp1 : patMedInhospList) {
-            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
+            String tagname = inhospVisitFacade.getTagnameBypatid(patMedInhosp1.getPatid());
             patMedInhosp1.setTagname(tagname);
         }
         PatMedInhosp patMedInhosp1 = new PatMedInhosp();
@@ -812,16 +862,31 @@
             }).collect(Collectors.toList());
             patMedInhosp1.setLeaveicd10code(hospPatientDiagnoseInfos2.get(0).getIcd10());
             patMedInhosp1.setLeavediagname(hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
+            //鍙湁璇婃柇鍚嶇О娌℃湁璇婃柇鐮佺殑鏁版嵁
+            if(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname())
+                    && !StringUtils.isNotEmpty(patMedInhosp1.getLeaveicd10code())){
+                Icd10 icd10 = new Icd10();
+                icd10.setIcdname(patMedInhosp1.getLeavediagname());
+                icd10.setDelFlag("0");
+                icd10.setOrgid(ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null);
+                //涓芥按鏃犻櫌鍖猴紝榛樿鍊兼槸 1
+                icd10.setCampusid("1");
+                //閫氳繃icdCode鏌ヨ涓�涓嬶紝鏄惁瀛樺湪
+                List<Icd10> icd10s = icd10Mapper.exactQueryIcd10List(icd10);
+                if(CollectionUtils.isEmpty(icd10s)){
+                    patMedInhosp1.setLeaveicd10code(icd10s.get(0).getIcdcode());
+                }
+            }
             //patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() + "," + hospPatientDiagnoseInfos2.get(0).getZhenDuanMC() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
             patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
         }
 
         String orgid = ObjectUtils.isNotEmpty(BingRenXX) && ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null;
-        if(StringUtils.isNotEmpty(orgid) && orgid.equals("47246103233112211A1001")){
-            //缂欎簯浜岄櫌 浣忛櫌璁板綍涓嶆洿鏂扮姸鎬�
-        }else {
-            patMedInhosp1.setInhospstate("1");
-        }
+//        if(StringUtils.isNotEmpty(orgid) && orgid.equals("47246103233112211A1001")){
+//            //缂欎簯浜岄櫌 浣忛櫌璁板綍涓嶆洿鏂扮姸鎬�
+//        }else {
+//            patMedInhosp1.setInhospstate("1");
+//        }
 
         if (CollectionUtils.isNotEmpty(patMedInhospList)) {
             patMedInhosp1.setUpdateTime(new Date());
@@ -830,7 +895,7 @@
                 //涓嶉渶瑕侀暱鏈熶换鍔¢殢璁�
                 patMedInhosp1.setFuflag("0");
             }
-            int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+            int i = inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
             if (i != 1) return false;
         } else {
             if (ObjectUtils.isNotEmpty(BingRenXX)) {
@@ -853,7 +918,7 @@
                 //涓嶉渶瑕侀暱鏈熶换鍔¢殢璁�
                 patMedInhosp1.setFuflag("0");
             }
-            int i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp1);
+            int i = inhospVisitFacade.insertPatMedInhosp(patMedInhosp1);
             if (i != 1) return false;
         }
         return true;
@@ -868,9 +933,9 @@
         PatMedInhosp patMedInhosp = new PatMedInhosp();
         patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao());
         patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID());
-        List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
+        List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp);
         for (PatMedInhosp patMedInhosp1 : patMedInhospList) {
-            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
+            String tagname = inhospVisitFacade.getTagnameBypatid(patMedInhosp1.getPatid());
             patMedInhosp1.setTagname(tagname);
         }
         if (CollectionUtils.isNotEmpty(patMedInhospList)) {
@@ -884,7 +949,7 @@
                 patMedInhosp1.setOperatorId(ObjectUtils.isNotEmpty(JiuZhenXX.get("CaoZuoRXM")) ? JiuZhenXX.get("CaoZuoRID").toString() : null);
             }
             patMedInhosp1.setUpdateTime(new Date());
-            int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+            int i = inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
 
             //鍙栨秷鍑洪櫌锛屽氨涓嶉渶瑕佹湇鍔′簡锛岄渶瑕侀�氳繃patid鍜宻endstate=2鎴栬�卻endstate=1鍘绘煡璇竴涓嬶紝service_subtask閲屾槸鍚︽湁姝e湪鎵ц鐨勪换鍔★紝鏈夌殑璇濓紝绔嬪嵆鍋滀簡
             ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
@@ -968,9 +1033,9 @@
         PatMedInhosp patMedInhosp = new PatMedInhosp();
         patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao());
         patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID());
-        List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
+        List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp);
         for (PatMedInhosp patMedInhosp1 : patMedInhospList) {
-            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
+            String tagname = inhospVisitFacade.getTagnameBypatid(patMedInhosp1.getPatid());
             patMedInhosp1.setTagname(tagname);
         }
         Map<String, Object> JiuZhenXX = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("JiuZhenXX") : null;
@@ -1031,6 +1096,21 @@
             }).collect(Collectors.toList());
             patMedInhosp1.setLeaveicd10code(hospPatientDiagnoseInfos2.get(0).getIcd10());
             patMedInhosp1.setLeavediagname(hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
+            //鍙湁璇婃柇鍚嶇О娌℃湁璇婃柇鐮佺殑鏁版嵁
+            if(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname())
+                    && !StringUtils.isNotEmpty(patMedInhosp1.getLeaveicd10code())){
+                Icd10 icd10 = new Icd10();
+                icd10.setIcdname(patMedInhosp1.getLeavediagname());
+                icd10.setDelFlag("0");
+                icd10.setOrgid(ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null);
+                //涓芥按鏃犻櫌鍖猴紝榛樿鍊兼槸 1
+                icd10.setCampusid("1");
+                //閫氳繃icdCode鏌ヨ涓�涓嬶紝鏄惁瀛樺湪
+                List<Icd10> icd10s = icd10Mapper.exactQueryIcd10List(icd10);
+                if(CollectionUtils.isEmpty(icd10s)){
+                    patMedInhosp1.setLeaveicd10code(icd10s.get(0).getIcdcode());
+                }
+            }
             //patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() + "," + hospPatientDiagnoseInfos2.get(0).getZhenDuanMC() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
             patMedInhosp1.setDiagname(StringUtils.isNotEmpty(patMedInhosp1.getLeavediagname()) ? patMedInhosp1.getLeavediagname() : hospPatientDiagnoseInfos2.get(0).getZhenDuanMC());
         }
@@ -1039,7 +1119,7 @@
         if (CollectionUtils.isNotEmpty(patMedInhospList)) {
             patMedInhosp1.setUpdateTime(new Date());
             patMedInhosp1.setOrgid(ObjectUtils.isNotEmpty(BingRenXX) && ObjectUtils.isNotEmpty(BingRenXX.get("ZuZhiJGID")) ? BingRenXX.get("ZuZhiJGID").toString() : null);
-            int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+            int i = inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
             if (i != 1) return false;
         } else {
             if (ObjectUtils.isNotEmpty(BingRenXX)) {
@@ -1058,7 +1138,7 @@
             patMedInhosp1.setPatname(patArchive.getName());
 
             patMedInhosp1.setCreateTime(new Date());
-            int i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp1);
+            int i = inhospVisitFacade.insertPatMedInhosp(patMedInhosp1);
             if (i != 1) return false;
         }
 
@@ -1093,7 +1173,7 @@
         PatMedInhosp patMedInhosp = new PatMedInhosp();
         patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao());
         patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID());
-        List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
+        List<PatMedInhosp> patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp);
         PatMedInhosp patMedInhosp1 = null;
         if (CollectionUtils.isNotEmpty(patMedInhospList)) patMedInhosp1 = patMedInhospList.get(0);
         if (ObjectUtils.isNotEmpty(patMedInhosp1)) {
@@ -1104,7 +1184,7 @@
                     patMedInhosp1.setUpdateTime(new Date());
                     //鏇存柊鍑洪櫌鐘舵��
                     patMedInhosp1.setInhospstate("1");
-                    int i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp1);
+                    int i = inhospVisitFacade.updatePatMedInhosp(patMedInhosp1);
                     if (i != 1) return false;
                 } catch (ParseException e) {
                     e.printStackTrace();
@@ -1267,6 +1347,8 @@
             patMedOuthospService.dealPatMedOuthosp(patMedOuthosp, visitTimeNum);
         }
 
+        genePatSpecificArchive(patMedOuthosp, patArchive);
+
         if (i > 0) {
             return true;
         }
@@ -1373,7 +1455,7 @@
         patMedOperation.setPatid(patArchive.getId());
         patMedOperation.setOpreqcode(externalOperationInfo.getShenQingDID());
         //鏌ヨ涓�涓嬶紝璇ユ偅鑰呮槸鍚﹀凡缁忔湁杩欎簺鏁版嵁
-        List<PatMedOperation> patMedOperations = patMedOperationMapper.selectPatMedOperationList(patMedOperation);
+        List<PatMedOperation> patMedOperations = otherVisitFacade.selectOperationList(patMedOperation);
 
         patMedOperation.setOpsstatus(null);
         if (ObjectUtils.isNotEmpty(externalOperationInfo)) {
@@ -1450,10 +1532,10 @@
                 //鍚屾椂鍘绘煡璇紝鏄惁鍦╯ubtask涓敓鎴愪换鍔★紝濡傛灉鐢熸垚鍑哄緱绔嬮┈鍒犻櫎
             }
             patMedOperation.setUpdateTime(new Date());
-            patMedOperationMapper.updatePatMedOperation(patMedOperation);
+            otherVisitFacade.updateOperation(patMedOperation);
         } else {
             patMedOperation.setCreateTime(new Date());
-            patMedOperationMapper.insertPatMedOperation(patMedOperation);
+            otherVisitFacade.insertOperation(patMedOperation);
         }
         log.info("-----patMedOperation鐨勪富閿甶d涓猴細{}", patMedOperation.getId());
 
@@ -1477,7 +1559,7 @@
             }).collect(Collectors.toList()) : null;
 
             if(ObjectUtils.isNotEmpty(patMedOperation.getId())){
-                patMedOperationItemMapper.deleteHardPatMedOperationItemByOpId(patMedOperation.getId().toString());
+                otherVisitFacade.deleteHardOperationItemByOpId(patMedOperation.getId().toString());
             }
 
             //addMianTableFalg鏄惁闇�瑕佸皢涓绘墜鏈殑淇℃伅鏀惧埌PatMedOperation琛ㄤ腑锛堝彧鏈夌涓�涓富鎵嬫湳淇℃伅闇�瑕佹斁锛屽悗闈㈢殑閮戒笉闇�瑕佹斁浜嗭紝涔熷氨鏄锛岀涓�涓斁瀹屽悗锛屽氨瑕佹妸杩欎釜flag鏀规垚false锛�
@@ -1509,12 +1591,87 @@
                     }
 
                     patMedOperation.setUpdateTime(new Date());
-                    patMedOperationMapper.updatePatMedOperation(patMedOperation);
+                    otherVisitFacade.updateOperation(patMedOperation);
                     addMianTableFalg = false;
                 }
                 patMedOperationItem.setCreateTime(new Date());
                 patMedOperationItem.setUpdateTime(new Date());
-                patMedOperationItemMapper.insertPatMedOperationItem(patMedOperationItem);
+                otherVisitFacade.insertOperationItem(patMedOperationItem);
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean cancelOperationInfo(Map dataMap) {
+        log.info("ServiceExternalServiceImpl---cancelOperationInfo鐨勬挙閿�鐨勫�间负锛歿}", dataMap);
+
+        Map yeWuXX = (Map) dataMap.get("YeWuXX");
+        Map<String, Object> BingRenXX = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("BingRenXX") : null;
+        ExternalInHospPatientInfo externalInHospPatientInfo = BeanUtil.mapToBean(BingRenXX, ExternalInHospPatientInfo.class, true);
+        PatArchive patArchive = addPatArchive(externalInHospPatientInfo, null, null);
+        //鎵嬫湳鎾ら攢
+        Map<String, Object> sscx = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("ShouShuCX") : null;
+        ExternalOperationInfo externalOperationInfo = null;
+        if (ObjectUtils.isNotEmpty(sscx))
+            externalOperationInfo = BeanUtil.mapToBean(sscx, ExternalOperationInfo.class, true);
+        PatMedOperation patMedOperation = new PatMedOperation();
+        patMedOperation.setPatid(patArchive.getId());
+        patMedOperation.setOrgid(patArchive.getOrgid());
+        patMedOperation.setOpreqcode(externalOperationInfo.getShenQingDID());
+        //鏌ヨ涓�涓嬶紝璇ユ偅鑰呮槸鍚﹀凡缁忔湁杩欎簺鏁版嵁
+        List<PatMedOperation> patMedOperations = otherVisitFacade.selectOperationList(patMedOperation);
+        if (CollectionUtils.isNotEmpty(patMedOperations)) {
+            for(PatMedOperation operation : patMedOperations){
+                Long id = operation.getId();
+                //濡傛灉鎵嬫湳鎾ら攢锛岀洿鎺ュ垹闄よ鏉℃墜鏈俊鎭�
+                if (ObjectUtils.isNotEmpty(sscx)) {
+                    operation.setId(id);
+                    operation.setCheckFlag("1");
+                    operation.setDelFlag("1");
+                    //鍚屾椂鍘绘煡璇紝鏄惁鍦╯ubtask涓敓鎴愪换鍔★紝濡傛灉鐢熸垚鍑哄緱绔嬮┈鍒犻櫎
+                    //            鎵嬫湳闅忚
+                    PatMedOperationItem pmoi = new PatMedOperationItem();
+                    //鑾峰彇闇�瑕佸嚭闄㈡墜鏈殢璁匡紝鏈鐞嗙殑鏁版嵁
+                    pmoi.setOpid(operation.getId().toString());
+                    List<PatMedOperationItem> patMedOperationItems
+                            = otherVisitFacade.selectOperationItemListByCondition(pmoi);
+                    List<Long> operationItemIds = patMedOperationItems.stream()
+                            .map(PatMedOperationItem::getId)
+                            .filter(Objects::nonNull)
+                            .distinct()
+                            .collect(Collectors.toList());
+
+
+                    //涓嶉渶瑕佹湇鍔′簡锛岄渶瑕侀�氳繃patid鍜宻endstate=1,2,3,5,7鍘绘煡璇竴涓嬶紝service_subtask閲屾槸鍚︽湁姝e湪鎵ц鐨勪换鍔★紝
+                    //鏈夌殑璇濓紝绔嬪嵆鍋滀簡
+                    List<Long> sendstates = Arrays.asList(1L, 2L, 3L, 5L, 7L);
+                    List<ServiceSubtask> serviceSubtaskList = new ArrayList<>();
+                    ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
+                    serviceSubtaskVO.setOrgid(patArchive.getOrgid());
+                    serviceSubtaskVO.setPatid(patArchive.getId());
+                    serviceSubtaskVO.setSendstates(sendstates);
+                    serviceSubtaskVO.setOperationItemIds(operationItemIds);
+                    serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
+                    //鍘籸edis涓紝鏌ヨ鏄惁鏈塻ubid锛屾湁鐨勮瘽绉婚櫎cache-exist
+                    if (CollectionUtils.isNotEmpty(serviceSubtaskList)) {
+                        for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
+                            log.info("闇�瑕佺Щ闄ょ殑subId涓猴細{}", serviceSubtask.getId().toString());
+                            serviceSubtask.setSendstate(4L);
+                            serviceSubtask.setRemark("鎵嬫湳鎾ら攢");
+                            serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+                            redisCache.removeElementFromList("cache-exist", serviceSubtask.getId().toString());
+                            redisCache.removeElementFromList("cache-0", serviceSubtask.getId().toString());
+                            redisCache.removeElementFromList("cache-1", serviceSubtask.getId().toString());
+                            redisCache.removeElementFromList("cache-2", serviceSubtask.getId().toString());
+                            redisCache.removeElementFromList("cache-3", serviceSubtask.getId().toString());
+                            redisCache.removeElementFromList("cache-4", serviceSubtask.getId().toString());
+                        }
+                    }
+                    operation.setUpdateTime(new Date());
+                    otherVisitFacade.updateOperation(operation);
+                    otherVisitFacade.deleteSoftOperationItemByOpId(operation.getOpid());
+                }
             }
         }
         return true;
@@ -1632,7 +1789,7 @@
             //鍖婚櫌閭h竟璇磋鐢ㄧ梾妗堝彿锛屼笉瑕佺敤浣忛櫌鍙�
             patMedInhosp.setInhospno(externalInHospPatientInfo.getBingAnHao());
             patMedInhosp.setSerialnum(externalInHospPatientInfo.getJiuZhenYWID());
-            patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
+            patMedInhospList = inhospVisitFacade.selectPatMedInhospList(patMedInhosp);
             patMedInhosp.setHospitalname(externalInHospPatientInfo.getZuZhiJGMC());
             patMedInhosp.setHospitalcode(externalInHospPatientInfo.getZuZhiJGID());
             patMedInhosp.setStarttime(externalInHospPatientInfo.getRuYuanSJ());
@@ -1683,13 +1840,70 @@
         int i = 1;
         if (CollectionUtils.isNotEmpty(patMedInhospList)) {
             patMedInhosp.setInhospid(patMedInhospList.get(0).getInhospid());
-            i = patMedInhospMapper.updatePatMedInhosp(patMedInhosp);
+            i = inhospVisitFacade.updatePatMedInhosp(patMedInhosp);
         } else {
             patMedInhosp.setCreateTime(new Date());
-            i = patMedInhospMapper.insertPatMedInhosp(patMedInhosp);
+            i = inhospVisitFacade.insertPatMedInhosp(patMedInhosp);
+            if (i == 1) {
+                //榫欐硥浜烘皯鍖婚櫌锛氭柊澧炰綇闄俊鎭椂澶勭悊鎮h�呭啀鍏ラ櫌
+                stopReadmissionFollowUpTasks(patMedInhosp);
+            }
         }
         if (i == 1) return true;
         return false;
+    }
+
+    /**
+     * 鎮h�呭啀鍏ラ櫌澶勭悊锛氭偅鑰呭啀娆″叆闄㈠悗锛屼笂涓�娆″嚭闄㈢敓鎴愮殑寰呮墽琛岄暱鏈熼殢璁夸换鍔′笉鍐嶆墽琛屻��
+     * 鐩墠浠呭榫欐硥浜烘皯鍖婚櫌鐢熸晥锛岄伩鍏嶅奖鍝嶅叾浠栨満鏋勩��
+     *
+     * @param patMedInhosp 鏈鏂板鐨勪綇闄俊鎭�
+     */
+    private void stopReadmissionFollowUpTasks(PatMedInhosp patMedInhosp) {
+        if (!LONGQUAN_PEOPLE_HOSPITAL_ORG_ID.equals(patMedInhosp.getOrgid())) {
+            return;
+        }
+        if (Objects.isNull(patMedInhosp.getPatid()) || Objects.isNull(patMedInhosp.getStarttime())) {
+            log.warn("榫欐硥浜烘皯鍖婚櫌鎮h�呭啀鍏ラ櫌澶勭悊璺宠繃锛宲atid鎴栧叆闄㈡椂闂翠负绌猴紝inhospno={}", patMedInhosp.getInhospno());
+            return;
+        }
+        try {
+            ServiceSubtaskEntity subtask = new ServiceSubtaskEntity();
+            subtask.setPatid(patMedInhosp.getPatid());
+            subtask.setOrgid(LONGQUAN_PEOPLE_HOSPITAL_ORG_ID);
+            subtask.setSendstate(2L);
+            List<ServiceSubtask> serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(subtask);
+            if (CollectionUtils.isEmpty(serviceSubtaskList)) {
+                return;
+            }
+            int stopCount = 0;
+            for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
+                //涓嶆槸闀挎湡浠诲姟锛屼笉澶勭悊
+                if (Objects.isNull(serviceSubtask.getLongSendTime())) {
+                    continue;
+                }
+                //鍑洪櫌鏃堕棿鏅氫簬鎴栫瓑浜庢湰娆″叆闄㈡椂闂寸殑浠诲姟锛屼笉灞炰簬鏈鍏ラ櫌鍓嶇殑寰呴殢璁夸换鍔�
+                if (Objects.isNull(serviceSubtask.getEndtime())
+                        || !serviceSubtask.getEndtime().before(patMedInhosp.getStarttime())) {
+                    continue;
+                }
+                serviceSubtask.setSendstate(4L);
+                serviceSubtask.setIsVisitAgain(2);
+                serviceSubtask.setResult("error");
+                serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark())
+                        ? serviceSubtask.getRemark() + ";鎮h�呭啀鍏ラ櫌" : "鎮h�呭啀鍏ラ櫌");
+                serviceSubtask.setUpdateTime(new Date());
+                if (Boolean.TRUE.equals(serviceSubtaskMapper.updateServiceSubtask(serviceSubtask))) {
+                    stopCount++;
+                }
+            }
+            log.info("榫欐硥浜烘皯鍖婚櫌鎮h�呭啀鍏ラ櫌澶勭悊瀹屾垚锛宲atid={}锛屾湰娆″叆闄㈡椂闂�={}锛屽仠姝㈠緟鎵ц闀挎湡浠诲姟{}鏉�",
+                    patMedInhosp.getPatid(), patMedInhosp.getStarttime(), stopCount);
+        } catch (Exception e) {
+            //鍐嶅叆闄换鍔″鐞嗗け璐ヤ笉褰卞搷鏈浣忛櫌淇℃伅鍏ュ簱
+            log.error("榫欐硥浜烘皯鍖婚櫌鎮h�呭啀鍏ラ櫌澶勭悊寮傚父锛宲atid={}锛宨nhospno={}",
+                    patMedInhosp.getPatid(), patMedInhosp.getInhospno(), e);
+        }
     }
 
     //鏂板闅忚浠诲姟鍚屾
@@ -1722,6 +1936,7 @@
         Map yeWuXX = (Map) dataMap.get("YeWuXX");
         Map<String, Object> BingRenXX = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("BingRenXX") : null;
         Map<String, Object> JianChaSQ = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("JianChaSQ") : null;
+        Map<String, Object> JianChaBG = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("JianChaBG") : null;
         List<HashMap<String, Object>> JianChaBWList = ObjectUtils.isNotEmpty(JianChaSQ) ? (List<HashMap<String, Object>>) JianChaSQ.get("JianChaBWList") : null;
         List<HashMap<String, Object>> ZhenDuanList = ObjectUtils.isNotEmpty(JianChaSQ) ? (List<HashMap<String, Object>>) JianChaSQ.get("ZhenDuanList") : null;
         List<HashMap<String, Object>> epai = ObjectUtils.isNotEmpty(BingRenXX) ? (List<HashMap<String, Object>>) BingRenXX.get("DiZhiXXList") : null;
@@ -1816,6 +2031,9 @@
                 }
             }
         }
+        if (ObjectUtils.isNotEmpty(JianChaBG)) {
+            patMedInspection.setAppliyid(ObjectUtils.isNotEmpty(JianChaBG.get("ShenQingDID")) ? JianChaBG.get("ShenQingDID").toString() : null);
+        }
         if (CollectionUtils.isNotEmpty(JianChaBWList)) {
             List<ExternalInspectionJC> externalInspectionJC = JianChaBWList.stream().map(map -> {
                 ExternalInspectionJC info = new ExternalInspectionJC();
@@ -1861,75 +2079,192 @@
     }
 
     //妫�鏌ヨ鎯呮坊鍔�
+    @SuppressWarnings("unchecked")
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean addInspectBGService(Map dataMap) {
         log.info("ServiceExternalServiceImpl---addInspectBGService鐨勬柊澧炵殑鍊间负锛歿}", dataMap);
         Map xiaoXiTou = (Map) dataMap.get("XiaoXiTou");
         Map yeWuXX = (Map) dataMap.get("YeWuXX");
         Map<String, Object> BingRenXX = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("BingRenXX") : null;
         Map<String, Object> JianChaBG = ObjectUtils.isNotEmpty(yeWuXX) ? (Map<String, Object>) yeWuXX.get("JianChaBG") : null;
-        List<HashMap<String, Object>> JianChaBWList = ObjectUtils.isNotEmpty(JianChaBG) ? (List<HashMap<String, Object>>) JianChaBG.get("JianChaBWList") : null;
+        if (ObjectUtils.isEmpty(BingRenXX)) {
+            throw new BaseException("妫�鏌ユ姤鍛婂悓姝ュけ璐ワ細BingRenXX涓嶈兘涓虹┖");
+        }
+        if (ObjectUtils.isEmpty(JianChaBG)) {
+            throw new BaseException("妫�鏌ユ姤鍛婂悓姝ュけ璐ワ細JianChaBG涓嶈兘涓虹┖");
+        }
+
+        // 鏈烘瀯浼樺厛鍙栨秷鎭ご锛屽叾娆″彇鎮h�呬俊鎭紝鍜屾鏌ョ敵璇疯ˉ寤洪�昏緫淇濇寔涓�鑷�
+        String orgid = ObjectUtils.isNotEmpty(xiaoXiTou) ? getMapValue(xiaoXiTou, "FaSongJGID") : null;
+        if (StringUtils.isBlank(orgid)) {
+            orgid = getMapValue(BingRenXX, "ZuZhiJGID");
+        }
+        String bingAnHao = getMapValue(BingRenXX, "BingAnHao");
+        String bingRenID = getMapValue(BingRenXX, "BingRenID");
+        String xingMing = getMapValue(BingRenXX, "XingMing");
+        String shenQingDID = getMapValue(JianChaBG, "ShenQingDID");
+        if (StringUtils.isBlank(orgid) || StringUtils.isBlank(bingAnHao) || StringUtils.isBlank(bingRenID)
+                || StringUtils.isBlank(xingMing) || StringUtils.isBlank(shenQingDID)) {
+            throw new BaseException("妫�鏌ユ姤鍛婂悓姝ュけ璐ワ細BingRenXX.ZuZhiJGID/BingAnHao/BingRenID/XingMing銆丣ianChaBG.ShenQingDID涓嶈兘涓虹┖");
+        }
+
         PatMedInspection patMedInspection = new PatMedInspection();
         PatMedInspectionItem patMedInspectionItem = new PatMedInspectionItem();
-        patMedInspection.setOrgid(BingRenXX.get("ZuZhiJGID").toString());
+        patMedInspection.setOrgid(orgid);
         //涓芥按鏃犻櫌鍖猴紝榛樿鍊兼槸 1
         patMedInspection.setCampusid("1");
-        patMedInspection.setInhospno(BingRenXX.get("BingAnHao").toString());
-        patMedInspection.setPatidHis(BingRenXX.get("BingRenID").toString());
-        patMedInspection.setPatname(BingRenXX.get("XingMing").toString());
-        patMedInspection.setAppliyid(JianChaBG.get("ShenQingDID").toString());
+        patMedInspection.setInhospno(bingAnHao);
+        patMedInspection.setPatidHis(bingRenID);
+        patMedInspection.setPatname(xingMing);
+        patMedInspection.setAppliyid(shenQingDID);
         //鏌ユ壘鎮h�呮鏌ユ楠屼俊鎭紝濡傛灉鏃狅紝杩涜鏂板姞
         List<PatMedInspection> patMedInspections = patMedInspectionMapper.selectPatMedInspectionList(patMedInspection);
-        if (CollectionUtils.isNotEmpty(patMedInspections)) {
-            patMedInspectionItem.setInspectionid(patMedInspections.get(0).getId().intValue());
-        } else {
+        if (CollectionUtils.isEmpty(patMedInspections)) {
             addInspectService(dataMap);
-            List<PatMedInspection> patMedInspections2 = patMedInspectionMapper.selectPatMedInspectionList(patMedInspection);
-            patMedInspectionItem.setInspectionid(patMedInspections2.get(0).getId().intValue());
+            patMedInspections = patMedInspectionMapper.selectPatMedInspectionList(patMedInspection);
+            if (CollectionUtils.isEmpty(patMedInspections)) {
+                throw new BaseException("妫�鏌ユ姤鍛婂悓姝ュけ璐ワ細鏈壘鍒版垨鍒涘缓妫�鏌ヤ富璁板綍锛孲henQingDID=" + shenQingDID);
+            }
         }
+        patMedInspectionItem.setInspectionid(patMedInspections.get(0).getId().intValue());
         //妫�鏌ユ楠屾姤鍛婃暟鎹鐞�
-        patMedInspectionItem.setOrgid(BingRenXX.get("ZuZhiJGID").toString());
+        patMedInspectionItem.setOrgid(orgid);
         //涓芥按鏃犻櫌鍖猴紝榛樿鍊兼槸 1
         patMedInspectionItem.setCampusid("1");
         List<PatMedInspectionItem> patMedInspectionItems = patMedInspectionItemMapper.selectPatMedInspectionItemList(patMedInspectionItem);
-        if (ObjectUtils.isNotEmpty(JianChaBG)) {
-            patMedInspectionItem.setInspectionName(JianChaBG.get("JianChaHao").toString());
-            patMedInspectionItem.setReportid(JianChaBG.get("JianChaHao").toString());
-            patMedInspectionItem.setStatuscode(JianChaBG.get("DangQianZTDM").toString());
-            patMedInspectionItem.setStatusname(JianChaBG.get("DangQianZTMC").toString());
-            patMedInspectionItem.setReportid(JianChaBG.get("BaoGaoRID").toString());
-            patMedInspectionItem.setReportername(JianChaBG.get("BaoGaoRXM").toString());
-            patMedInspectionItem.setDiagimpression(JianChaBG.get("ZhenDuanYX").toString());
-            patMedInspectionItem.setDiagfindings(JianChaBG.get("ZhenDuanSJ").toString());
-            patMedInspectionItem.setDiagsuggestion(JianChaBG.get("ZhenDuanJY").toString());
-            patMedInspectionItem.setReporturl(JianChaBG.get("BaoGaoYXDZ").toString());
-            patMedInspectionItem.setCriticalFlag(Integer.valueOf(JianChaBG.get("WeiJiZBZ").toString()));
-            patMedInspectionItem.setCriticalContent(JianChaBG.get("WeiJiZNR").toString());
-            patMedInspectionItem.setReportdeptid(JianChaBG.get("BaoGaoKSID").toString());
-            patMedInspectionItem.setReportdeptname(JianChaBG.get("BaoGaoKSMC").toString());
-            patMedInspectionItem.setResultcode(JianChaBG.get("JianChaJGDM").toString());
-            patMedInspectionItem.setResultname(JianChaBG.get("JianChaJGMC").toString());
-            if (ObjectUtils.isNotEmpty(JianChaBG.get("BaoGaoSJ"))) {
-                try {
-                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                    patMedInspection.setOpendate(simpleDateFormat.parse(JianChaBG.get("BaoGaoSJ").toString()));
-                } catch (ParseException e) {
-                    e.printStackTrace();
+
+        // 鍏煎 PACS 瀹為檯鎶ユ枃锛氭姤鍛婁汉銆佹姤鍛婃椂闂淬�佹姤鍛婂湴鍧�绛夊瓧娈靛悕涓庢爣鍑嗘姤鏂囧瓨鍦ㄥ樊寮�
+        String jianChaHao = getMapValue(JianChaBG, "JianChaHao");
+        String reportId = getMapValue(JianChaBG, "BaoGaoID");
+        if (StringUtils.isBlank(reportId)) {
+            reportId = getMapValue(JianChaBG, "BaoGaoRID");
+        }
+        if (StringUtils.isBlank(reportId)) {
+            reportId = jianChaHao;
+        }
+        String inspectionName = StringUtils.isNotBlank(jianChaHao) ? jianChaHao : reportId;
+        if (StringUtils.isBlank(inspectionName)) {
+            inspectionName = shenQingDID;
+        }
+        String reporterId = getMapValue(JianChaBG, "BaoGaoRID", "ZhiXingRID", "KaiDanRID");
+        String reporterName = getMapValue(JianChaBG, "BaoGaoRXM", "ZhiXingRXM", "KaiDanRXM");
+        String reportUrl = getMapValue(JianChaBG, "BaoGaoYXDZ", "TuWenBGXZDZ", "PDFurl");
+        String reportDateStr = getMapValue(JianChaBG, "BaoGaoSJ", "ZhiXingSJ");
+
+        patMedInspectionItem.setInspectionName(inspectionName);
+        patMedInspectionItem.setReportid(reportId);
+        patMedInspectionItem.setStatuscode(getMapValue(JianChaBG, "DangQianZTDM"));
+        patMedInspectionItem.setStatusname(getMapValue(JianChaBG, "DangQianZTMC"));
+        patMedInspectionItem.setReporterid(reporterId);
+        patMedInspectionItem.setReportername(reporterName);
+        patMedInspectionItem.setDiagimpression(getMapValue(JianChaBG, "ZhenDuanYX"));
+        patMedInspectionItem.setDiagfindings(getMapValue(JianChaBG, "ZhenDuanSJ"));
+        patMedInspectionItem.setDiagsuggestion(getMapValue(JianChaBG, "ZhenDuanJY"));
+        patMedInspectionItem.setReporturl(reportUrl);
+        patMedInspectionItem.setCriticalFlag(parseInteger(getMapValue(JianChaBG, "WeiJiZBZ")));
+        patMedInspectionItem.setCriticalContent(getMapValue(JianChaBG, "WeiJiZNR"));
+        patMedInspectionItem.setReportdeptid(getMapValue(JianChaBG, "BaoGaoKSID"));
+        patMedInspectionItem.setReportdeptname(getMapValue(JianChaBG, "BaoGaoKSMC"));
+        patMedInspectionItem.setResultcode(getMapValue(JianChaBG, "JianChaJGDM"));
+        patMedInspectionItem.setResultname(getMapValue(JianChaBG, "JianChaJGMC"));
+        Date reportDate = parseDateTime(reportDateStr);
+        if (reportDate != null) {
+            patMedInspectionItem.setReportdate(reportDate);
+        }
+
+        // 鍚屼竴妫�鏌ヤ笅鍙兘瀛樺湪澶氭潯鎶ュ憡鏄庣粏锛屼紭鍏堟寜鎶ュ憡ID銆佹鏌ュ彿鍖归厤锛岄伩鍏嶆洿鏂伴敊琛�
+        PatMedInspectionItem existingItem = null;
+        if (CollectionUtils.isNotEmpty(patMedInspectionItems)) {
+            for (PatMedInspectionItem item : patMedInspectionItems) {
+                if (StringUtils.isNotBlank(reportId) && reportId.equals(item.getReportid())) {
+                    existingItem = item;
+                    break;
                 }
             }
+            if (existingItem == null) {
+                for (PatMedInspectionItem item : patMedInspectionItems) {
+                    if (StringUtils.isNotBlank(inspectionName) && inspectionName.equals(item.getInspectionName())) {
+                        existingItem = item;
+                        break;
+                    }
+                }
+            }
+            if (existingItem == null) {
+                existingItem = patMedInspectionItems.get(0);
+            }
         }
-        if (ObjectUtils.isNotEmpty(patMedInspectionItems)) {
+
+        if (existingItem != null) {
+            // 鏇存柊蹇呴』甯︿笂涓婚敭锛屽惁鍒� update ... where id = null 浼氬奖鍝� 0 琛岋紝鎺ュ彛杩斿洖澶辫触
+            patMedInspectionItem.setId(existingItem.getId());
             patMedInspectionItem.setUpdateTime(new Date());
             int i = patMedInspectionItemMapper.updatePatMedInspectionItem(patMedInspectionItem);
-            if (i != 1) return false;
+            if (i < 1) {
+                throw new BaseException("妫�鏌ユ姤鍛婃槑缁嗘洿鏂板け璐ワ紝id=" + existingItem.getId());
+            }
         } else {
             patMedInspectionItem.setDelFlag("0");
             patMedInspectionItem.setCreateTime(new Date());
             int i = patMedInspectionItemMapper.insertPatMedInspectionItem(patMedInspectionItem);
-            if (i != 1) return false;
+            if (i != 1) {
+                throw new BaseException("妫�鏌ユ姤鍛婃槑缁嗘柊澧炲け璐ワ紝ShenQingDID=" + shenQingDID);
+            }
         }
 
         return true;
+    }
+
+    /**
+     * 浠庢姤鏂囦腑鎸夐『搴忚幏鍙栫涓�涓潪绌哄瓧娈碉紝鍏煎涓嶅悓鍘傚晢鐨勫瓧娈靛懡鍚�
+     */
+    private String getMapValue(Map<String, Object> source, String... keys) {
+        if (source == null || keys == null) {
+            return null;
+        }
+        for (String key : keys) {
+            Object value = source.get(key);
+            if (value != null && StringUtils.isNotBlank(String.valueOf(value))) {
+                return String.valueOf(value);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 瑙f瀽妫�鏌ユ姤鍛婃椂闂达紝鍏煎甯歌鏃ユ湡鏃堕棿鏍煎紡
+     */
+    private Date parseDateTime(String dateTime) {
+        if (StringUtils.isBlank(dateTime)) {
+            return null;
+        }
+        String[] patterns = {"yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd'T'HH:mm:ss", "yyyy-MM-dd"};
+        for (String pattern : patterns) {
+            try {
+                SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+                simpleDateFormat.setLenient(false);
+                return simpleDateFormat.parse(dateTime);
+            } catch (ParseException ignored) {
+                // 灏濊瘯涓嬩竴绉嶆牸寮�
+            }
+        }
+        log.warn("妫�鏌ユ姤鍛婃椂闂存牸寮忔棤娉曡В鏋愶細{}", dateTime);
+        return null;
+    }
+
+    /**
+     * 瑙f瀽妫�鏌ユ姤鍛婃暟瀛楀瓧娈碉紝閬垮厤闈炴暟瀛楀唴瀹瑰鑷存帴鍙f姤閿�
+     */
+    private Integer parseInteger(String value) {
+        if (StringUtils.isBlank(value)) {
+            return null;
+        }
+        try {
+            return Integer.valueOf(value.trim());
+        } catch (NumberFormatException e) {
+            log.warn("妫�鏌ユ姤鍛婃暟瀛楀瓧娈垫棤娉曡浆鎹細{}", value);
+            return null;
+        }
     }
 
     @Override
@@ -2013,6 +2348,7 @@
                 return true;
             case "SM_SQ_CheXiao":
                 log.info("鎵嬫湳鎾ら攢鍏ュ弬绫诲瀷涓猴細{}", type);
+                cancelOperationInfo(dataMap);
                 return true;
             case "TJ_YW_BaoGaoXX":
                 log.info("浣撴鎶ュ憡鍏ュ弬绫诲瀷涓猴細{}", type);
@@ -2202,4 +2538,59 @@
         }
         return 1;
     }
+
+    /**
+     * 瀹屾垚鎺ヨ瘖鏃舵寜涓撶妗f鐢熸垚閰嶇疆鐢熸垚濡囩/鍎跨妗f銆�
+     *
+     * <p>鐢熸垚閫昏緫鍐呴儴鍙鎸囧畾鏈烘瀯鐢熸晥锛屾湭鍛戒腑閰嶇疆鎴栫敓鎴愬け璐ュ潎涓嶅奖鍝嶆帴璇婁富娴佺▼銆�</p>
+     */
+    private void genePatSpecificArchive(PatMedOuthosp patMedOuthosp, PatArchive patArchive) {
+        try {
+            int generated = patSpecificArchiveGenerateService.generateByOuthosp(patMedOuthosp, patArchive);
+            if (generated > 0) {
+                log.info("瀹屾垚鎺ヨ瘖鑷姩鐢熸垚涓撶妗f鎴愬姛锛宱uthospno={}锛岀敓鎴愭暟閲�={}",
+                        patMedOuthosp.getOuthospno(), generated);
+            }
+        } catch (Exception e) {
+            log.error("瀹屾垚鎺ヨ瘖鑷姩鐢熸垚涓撶妗f澶辫触锛宱uthospno={}", patMedOuthosp.getOuthospno(), e);
+        }
+    }
+
+    /**
+     * 鍒ゆ柇褰撳墠绉戝灞炰簬濡囩杩樻槸鍎跨
+     *
+     * @param deptCode 褰撳墠绉戝/鐥呭尯 Code锛屽 "D004"
+     * @param orgid    鍖婚櫌鏈烘瀯ID
+     * @return deptCategory锛�1-濡囩 2-鍎跨锛沶ull-鏈厤缃垨鏈懡涓�
+     */
+    public String judgeDeptCategory(String deptCode, String orgid) {
+        if (StringUtils.isEmpty(deptCode)) {
+            return null;
+        }
+
+        // 浼樺厛鍙栨満鏋勭骇閰嶇疆锛屽彇涓嶅埌鍐嶅彇鍏ㄥ眬閰嶇疆
+        String configValue = configService.selectConfigByKey("sys.dept.category",
+                orgid);
+        if (StringUtils.isEmpty(configValue)) {
+            configValue = configService.selectConfigByKey("sys.dept.category");
+        }
+        if (StringUtils.isEmpty(configValue)) {
+            return null;
+        }
+
+        JSONArray configs = JSON.parseArray(configValue);
+        if (configs == null || configs.isEmpty()) {
+            return null;
+        }
+
+        for (int i = 0; i < configs.size(); i++) {
+            JSONObject cfg = configs.getJSONObject(i);
+            JSONArray deptCodes = cfg.getJSONArray("deptCodes");
+            if (deptCodes != null && deptCodes.contains(deptCode)) {
+                return cfg.getString("deptCategory");
+            }
+        }
+        return null;
+    }
+
 }

--
Gitblit v1.9.3