From 6e397c664037b898b5e9d9955da1d953089e679e Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期二, 09 六月 2026 17:32:07 +0800
Subject: [PATCH] 【市一】手术随访对接

---
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java |  273 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 256 insertions(+), 17 deletions(-)

diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
index 444d91d..8884243 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ruoyi.quartz.service.impl;
 
+import com.google.gson.Gson;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.domain.entity.SysUserDept;
@@ -8,10 +9,13 @@
 import com.ruoyi.quartz.service.ICollectHISService;
 import com.smartor.domain.*;
 import com.smartor.mapper.*;
+import com.smartor.service.IPatMedOuthospService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
 
@@ -32,7 +36,7 @@
     private SysUser2Mapper sysUser2Mapper;
 
     @Autowired
-    private SysUserRole2Mapper sysUserRoleMapper;
+    private IPatMedOuthospService patMedOuthospService;
 
     @Autowired
     private SysDept2Mapper sysDept2Mapper;
@@ -68,6 +72,13 @@
     private static final String PAT_ARCHIVE_TABLE = "pat_archive";
     private static final String PAT_MED_INHOSP_TABLE = "pat_med_inhosp";
 
+    @Value("${spring.profiles.active}")
+    private String active;
+    @Autowired
+    private PatMedOperationMapper patMedOperationMapper;
+
+    @Autowired
+    private PatMedOperationItemMapper patMedOperationItemMapper;
 
     @Override
     public List<PatArchive> selectPatArchiveList(PatArchive patArchive) {
@@ -108,6 +119,7 @@
             //鍚屾浣忛櫌鐥呬汉淇℃伅
             List<Map<String, Object>> syncTemp = syncList.stream().filter(row -> row.get("syncName").equals("pat_med_inhosp")).collect(Collectors.toList());
             if (syncTemp.size() > 0) {
+                log.info("startTime:" + syncTemp.get(0).get("startTime") + ", endTime: ", endTime);
                 count += syncMedInhosp(syncTemp.get(0).get("startTime") + "", endTime);
                 utilsMapper.updateSql("update sys_sync_time set startTime='" + endTime + "' where syncName='pat_med_inhosp' ");
             }
@@ -119,6 +131,12 @@
                 utilsMapper.updateSql("update sys_sync_time set startTime='" + endTime + "' where syncName='pat_med_outhosp' ");
             }
 
+            //鍚屾鎵嬫湳淇℃伅
+            syncTemp = syncList.stream().filter(row -> row.get("syncName").equals("pat_med_operation")).collect(Collectors.toList());
+            if (syncTemp.size() > 0) {
+                count += syncOper(syncTemp.get(0).get("startTime") + "", endTime);
+                utilsMapper.updateSql("update sys_sync_time set startTime='" + endTime + "' where syncName='pat_med_operation' ");
+            }
 
         } else {
             log.info("鍚屾浠诲姟鏃堕棿sys_sync_time琛ㄤ腑娌℃湁闇�瑕佸悓姝ョ殑浠诲姟");
@@ -167,7 +185,8 @@
      * @param
      * @return
      */
-    private Integer syncMedInhosp(String startTime, String endTime) {
+    @Override
+    public Integer syncMedInhosp(String startTime, String endTime) {
         Integer count = 0;
         PatMedInhosp patMedInhosp = new PatMedInhosp();
         patMedInhosp.setLastStartTime(startTime);
@@ -213,10 +232,20 @@
                 List<PatMedInhosp> patMedInhospList1 = patMedInhospMapper.selectPatMedInhospListBySerialnum(pmi);
                 if (patMedInhospList1.size() == 0) {
                     pm.setCreateTime(new Date());
+                    //甯備竴 闄㈠尯id瀵瑰簲orgid锛屾満鏋刬d涓洪粯璁ょ殑1
+                    if(active.equals("hzszlyy")) {
+                        pm.setCampusid(pm.getOrgid());
+                        pm.setOrgid("1");
+                    }
                     count += patMedInhospMapper.insertPatMedInhosp(pm);
                 } else {
                     pm.setInhospid(patMedInhospList1.get(0).getInhospid());
                     pm.setUpdateTime(new Date());
+                    //甯備竴 闄㈠尯id瀵瑰簲orgid锛屾満鏋刬d涓洪粯璁ょ殑1
+                    if(active.equals("hzszlyy")) {
+                        pm.setCampusid(pm.getOrgid());
+                        pm.setOrgid("1");
+                    }
                     count += patMedInhospMapper.updatePatMedInhosp(pm);
                 }
             } catch (Exception ex) {
@@ -270,16 +299,169 @@
                 if (patMedOuthospsTemp.size() > 0) {
                     patMedOuthosp1.setUpdateTime(new Date());
                     patMedOuthosp1.setId(patMedOuthospsTemp.get(0).getId());
-                    count += patMedOuthospMapper.updatePatMedOuthosp(patMedOuthosp1);
+                    //甯備竴 闄㈠尯id瀵瑰簲orgid锛屾満鏋刬d涓洪粯璁ょ殑1
+                    if(active.equals("hzszlyy")) {
+                        patMedOuthosp1.setCampusid(patMedOuthosp1.getOrgid());
+                        patMedOuthosp1.setOrgid("1");
+                    }
+                    count += patMedOuthospService.updatePatMedOuthosp(patMedOuthosp1);
                 } else {
                     patMedOuthosp1.setCreateTime(new Date());
-                    count += patMedOuthospMapper.insertPatMedOuthosp(patMedOuthosp1);
+                    //甯備竴 闄㈠尯id瀵瑰簲orgid锛屾満鏋刬d涓洪粯璁ょ殑1
+                    if(active.equals("hzszlyy")) {
+                        patMedOuthosp1.setCampusid(patMedOuthosp1.getOrgid());
+                        patMedOuthosp1.setOrgid("1");
+                    }
+                    count += patMedOuthospService.insertPatMedOuthosp(patMedOuthosp1);
                 }
             } catch (Exception ex) {
                 log.info("鍚屾鍑哄叆闄�:" + ex.getMessage());
             }
         }
         return count;
+    }
+
+    /**
+     * 鍚屾鎵嬫湳淇℃伅
+     *
+     * @param
+     * @return
+     */
+    @Override
+    public Integer syncOper(String startTime, String endTime) {
+        Integer count = 0;
+        PatMedOperation patMedOperation = new PatMedOperation();
+        patMedOperation.setLastStartTime(startTime);
+        patMedOperation.setLastEndTime(endTime);
+        List<PatMedOperation> patMedOperations = chMapper.selectOperList(patMedOperation);
+        Map<String, Long> patIdHisMap = buildOperationPatIdHisMap(patMedOperations);
+
+        log.info("鍚屾鎵嬫湳淇℃伅鏁伴噺" + patMedOperations.size());
+        for (PatMedOperation operation : patMedOperations) {
+            try {
+                Long patId = patIdHisMap.get(operation.getPatidHis());
+                if (patId == null) {
+                    patId = syncSinglePatient(operation.getPatidHis());
+                    if (patId != null) {
+                        patIdHisMap.put(operation.getPatidHis(), patId);
+                    }
+                }
+
+                if (patId != null) {
+                    operation.setPatid(patId);
+                }
+                PatMedOperation oper = new PatMedOperation();
+                oper.setOpid(operation.getOpid());
+                List<PatMedOperation> patMedOperations1 = patMedOperationMapper.selectPatMedOperationList(oper);
+                if (CollectionUtils.isNotEmpty(patMedOperations1)) {
+                    operation.setId(patMedOperations1.get(0).getId());
+                    operation.setUpdateTime(new Date());
+                    count += patMedOperationMapper.updatePatMedOperation(patMedOperations1.get(0));
+                    syncOperItem(operation);
+                } else {
+                    operation.setCreateTime(new Date());
+                    count += patMedOperationMapper.insertPatMedOperation(operation);
+                    syncOperItem(operation);
+                }
+            } catch (Exception ex) {
+                log.info("鍚屾鎵嬫湳淇℃伅:" + ex.getMessage());
+            }
+        }
+        return count;
+    }
+
+    /**
+     * 鍚屾鎵嬫湳淇℃伅
+     *
+     * @param
+     * @return
+     */
+    private Integer syncOperItem(PatMedOperation operation) {
+        Integer count = 0;
+        PatMedOperationItem patMedOperationItem = new PatMedOperationItem();
+        patMedOperationItem.setOrgid(operation.getOrgid());
+        if(StringUtils.isNotEmpty(operation.getOpid())){
+            patMedOperationItem.setOpid(Long.valueOf(operation.getOpid()));
+            List<PatMedOperationItem> patMedOperationItems = chMapper.selectOperItemList(patMedOperationItem);
+            log.info("鍚屾鎵嬫湳璇︽儏淇℃伅鏁伴噺" + patMedOperationItems.size());
+            for (PatMedOperationItem operationItem : patMedOperationItems) {
+                try {
+                    PatMedOperationItem operItem = new PatMedOperationItem();
+                    operItem.setOpid(operationItem.getOpid());
+                    operItem.setOperationid(operationItem.getOperationid());
+                    List<PatMedOperationItem> patMedOperationItems1 = patMedOperationItemMapper.selectPatMedOperationItemList(operItem);
+                    if (CollectionUtils.isNotEmpty(patMedOperationItems1)) {
+                        operationItem.setId(patMedOperationItems1.get(0).getId());
+                        operationItem.setUpdateTime(new Date());
+                        count += patMedOperationItemMapper.updatePatMedOperationItem(operationItem);
+                    } else {
+                        operation.setCreateTime(new Date());
+                        count += patMedOperationItemMapper.insertPatMedOperationItem(operationItem);
+                    }
+                } catch (Exception ex) {
+                    log.info("鍚屾鎵嬫湳璇︽儏淇℃伅:" + ex.getMessage());
+                }
+            }
+
+//            try {
+//                patMedOperationItemMapper.deleteHardPatMedOperationItemByOpId(operation.getOpid());
+//                count += patMedOperationItemMapper.insertPatMedOperationItems(patMedOperationItems);
+//            }catch (Exception ex) {
+//                log.info("鍚屾鎵嬫湳璇︽儏淇℃伅:" + ex.getMessage());
+//            }
+        }
+        return count;
+    }
+
+    private Map<String, Long> buildOperationPatIdHisMap(List<PatMedOperation> operations) {
+        List<String> patidHiss = operations.stream()
+                .map(PatMedOperation::getPatidHis)
+                .filter(StringUtils::isNotEmpty)
+                .distinct()
+                .collect(Collectors.toList());
+
+        if (CollectionUtils.isEmpty(patidHiss)) {
+            return new HashMap<>();
+        }
+
+        return patArchiveMapper.selectPatArchiveByPatidHiss(patidHiss).stream()
+                .filter(item -> StringUtils.isNotEmpty(item.getPatidHis()) && item.getId() !=
+                        null)
+                .collect(Collectors.toMap(
+                        PatArchive::getPatidHis,
+                        PatArchive::getId,
+                        (a, b) -> a
+                ));
+    }
+
+    private Long syncSinglePatient(String patidHis) {
+        if (StringUtils.isEmpty(patidHis)) {
+            return null;
+        }
+
+        PatArchive hisQuery = new PatArchive();
+        hisQuery.setPatidHis(patidHis);
+        hisQuery.setPageSize(5);
+        List<PatArchive> hisArchives = chMapper.selectPatArchiveList(hisQuery);
+        if (CollectionUtils.isEmpty(hisArchives)) {
+            return null;
+        }
+
+        PatArchive localQuery = new PatArchive();
+        localQuery.setPatidHis(patidHis);
+        List<PatArchive> localArchives = patArchiveMapper.selectPatArchiveList(localQuery);
+
+        PatArchive hisArchive = hisArchives.get(0);
+        if (CollectionUtils.isNotEmpty(localArchives)) {
+            hisArchive.setId(localArchives.get(0).getId());
+            hisArchive.setUpdateTime(new Date());
+            patArchiveMapper.updatePatArchive(hisArchive);
+            return localArchives.get(0).getId();
+        } else {
+            hisArchive.setCreateTime(new Date());
+            patArchiveMapper.insertPatArchiveSingle(hisArchive);
+            return hisArchive.getId();
+        }
     }
 
     @Override
@@ -387,7 +569,7 @@
                 patArchiveMapper.insertPatArchiveSingle(patArchives.get(0));
                 patMedOuthosp1.setPatid(patArchives.get(0).getId());
             }
-            i = patMedOuthospMapper.insertPatMedOuthosp(patMedOuthosp1);
+            i = patMedOuthospService.insertPatMedOuthosp(patMedOuthosp1);
         }
 
         return i;
@@ -421,44 +603,101 @@
     public Integer selectUserList(SysUser sysUser) {
         List<SysUser> sysUserList = chMapper.selectUserList(sysUser);
         SysUser suerTemp = new SysUser();
+        //鐢ㄦ埛-鏈烘瀯鍏崇郴-绉戝
         List<SysUserDept> sysUserDeptAll = chMapper.yhyksxx(suerTemp);
+        //鐢ㄦ埛-鏈烘瀯鍏崇郴-鐥呭尯
+        List<SysUserDept> sysUserDeptBfAll = chMapper.yhybfxx(suerTemp);
         //鐢ㄦ埛-闄㈠尯鍏崇郴
         List<SysUserOrg> sysUserOrgAll = chMapper.yhyyqxx(suerTemp);
 
         log.info("sysUserList鐨勯噰闆嗗埌鐨勬暟閲忎负锛歿}", sysUserList.size());
         int i = 0;// sysUser2Mapper.batchUser(sysUserList);
         for (SysUser sysUser1 : sysUserList) {
-//            log.info("sysUser1鐨処D涓猴細{}", sysUser1.getUserId());
-//            log.info("sysUser1鐨凥ISUSERID涓猴細{}", sysUser1.getHisUserId());
             if (StringUtils.isEmpty(sysUser1.getHisUserId())) continue;
             SysUser suTemp = new SysUser();
             suTemp.setHisUserId(sysUser1.getHisUserId());
             List<SysUser> usersTemp = sysUser2Mapper.selectUserList(suTemp);
+
+            //鏂板鐢ㄦ埛涓庣瀹�
+            List<SysUserDept> sysUserDept = sysUserDeptAll.stream().filter((SysUserDept b) ->
+                    b.getUserCode().equals(sysUser1.getHisUserId())).collect(Collectors.toList());
+            //鏂板鐢ㄦ埛涓庣梾鍖�
+            List<SysUserDept> sysUserDeptBf = sysUserDeptBfAll.stream().filter((SysUserDept b) ->
+                    b.getUserCode().equals(sysUser1.getHisUserId())).collect(Collectors.toList());
+            //鏂板鐢ㄦ埛涓庨櫌鍖�
+            List<SysUserOrg> sysUserOrg = sysUserOrgAll.stream().filter((SysUserOrg o) ->
+                    o.getUserId().equals(sysUser1.getHisUserId())).collect(Collectors.toList());
+
+            List<String> userDepts = sysUserDept.stream().map(SysUserDept::getDeptCode).
+                    distinct().collect(Collectors.toList());
+
+            List<String> userDeptBfs = sysUserDeptBf.stream().map(SysUserDept::getDeptCode).
+                    distinct().collect(Collectors.toList());
+
+            //鍜宷ueryHospUserInfoList閲囬泦鐨勬暟鎹牸寮忎繚鎸佷竴鑷�
+            List<List<String>> userDeptsList = new ArrayList<>();
+            if(!userDepts.isEmpty()){
+                for(String userDept: userDepts){
+                    List<String> uDept = new ArrayList<>();
+                    uDept.add(userDept);
+                    userDeptsList.add(uDept);
+                }
+            }
+            List<List<String>> userDeptBfsList = new ArrayList<>();
+            if(!userDeptBfs.isEmpty()){
+                for(String userBfDept: userDeptBfs){
+                    List<String> uBfDept = new ArrayList<>();
+                    uBfDept.add(userBfDept);
+                    userDeptBfsList.add(uBfDept);
+                }
+            }
+
             if (usersTemp.size() > 0) {
                 sysUser1.setUserId(usersTemp.get(0).getUserId());
                 sysUser1.setUserName(sysUser1.getHisUserId());
+                //瀵瑰簲 SysUserServiceImpl selectUserByUserName2 191琛�
+                if (!org.springframework.util.CollectionUtils.isEmpty(sysUserOrg)) {
+                    sysUser1.setOrgid(sysUserOrg.get(0).getOrgid());
+                    sysUser1.setCampusid(sysUserOrg.get(0).getCampusid());
+                }
+                //灏嗛儴闂ㄦ垜鐥呭尯鏀惧埌鎸囧畾瀛楁涓�
+                Gson gson = new Gson();
+                sysUser1.setHospInfo(gson.toJson(userDeptsList));
+                sysUser1.setDeptInfo(gson.toJson(userDeptBfsList));
+
                 sysUser2Mapper.updateUser(sysUser1);
             } else {
                 sysUser1.setUserName(sysUser1.getHisUserId());
+                //灏嗛儴闂ㄦ垜鐥呭尯鏀惧埌鎸囧畾瀛楁涓�
+                Gson gson = new Gson();
+                sysUser1.setHospInfo(gson.toJson(userDeptsList));
+                sysUser1.setDeptInfo(gson.toJson(userDeptBfsList));
+
                 sysUser2Mapper.insertUser(sysUser1);
+                //瀵瑰簲 SysUserServiceImpl selectUserByUserName2 191琛�
+                if (!org.springframework.util.CollectionUtils.isEmpty(sysUserOrg)) {
+                    sysUser1.setOrgid(sysUserOrg.get(0).getOrgid());
+                    sysUser1.setCampusid(sysUserOrg.get(0).getCampusid());
+                }
                 usersTemp = sysUser2Mapper.selectUserList(suTemp);
             }
-
-            //鏂板鐢ㄦ埛涓庨儴闂�
-            //List<SysUserDept> sysUserDept = chMapper.yhyksxx(sysUser1);
-            List<SysUserDept> sysUserDept = sysUserDeptAll.stream().filter((SysUserDept b) -> b.getUserCode().equals(sysUser1.getHisUserId())).collect(Collectors.toList());
-
             for (SysUserDept sud : sysUserDept) {
-                if (usersTemp.size() > 0) {
+                if (!usersTemp.isEmpty()) {
+                    sud.setDeptType("1");
                     sud.setUserId(usersTemp.get(0).getUserId());
                     sysUserDeptMapper.insertSysUserDept(sud);
                 }
             }
-            //鏂板鐢ㄦ埛涓庨櫌鍖�
-            List<SysUserOrg> sysUserOrg = sysUserOrgAll.stream().filter((SysUserOrg o) -> o.getUserId().equals(sysUser1.getHisUserId())).collect(Collectors.toList());
+            for (SysUserDept sudb : sysUserDeptBf) {
+                if (!usersTemp.isEmpty()) {
+                    sudb.setDeptType("2");
+                    sudb.setUserId(usersTemp.get(0).getUserId());
+                    sysUserDeptMapper.insertSysUserDept(sudb);
+                }
+            }
             for (SysUserOrg suo : sysUserOrg) {
-                if (usersTemp.size() > 0) {
-                    suo.setUserId(usersTemp.get(0).getUserId());
+                if (!usersTemp.isEmpty()) {
+                    suo.setUserId(usersTemp.get(0).getUserId().toString());
                     sysUserOrgMapper.insertSysUserOrg(suo);
                 }
             }

--
Gitblit v1.9.3