From d047a35e640a59e02a422d9a9a62c752c88b69b5 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 28 十月 2026 15:51:52 +0800
Subject: [PATCH] 【丽水】 同一 inhospid + taskid 已存在未删除的首次随访(upid 为空)时,不再插入,避免出现两条首次随访

---
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java |   56 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 53 insertions(+), 3 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 524a234..8c488f7 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
@@ -26,6 +26,7 @@
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -76,6 +77,11 @@
 
     @Autowired
     private RedisCache redisCache;
+
+    /**
+     * 鐢ㄦ埛鍚屾浠诲姟杩愯鏍囪锛岄伩鍏嶉噸澶嶇偣鍑�/閲嶅璋冪敤骞跺彂璺戝叏閲忓悓姝�
+     */
+    private final AtomicBoolean userSyncRunning = new AtomicBoolean(false);
 
     private static final long SHARDING_THRESHOLD = 5_000_000L;
     private static final String PAT_ARCHIVE_TABLE = "pat_archive";
@@ -454,8 +460,14 @@
         if(StringUtils.isNotEmpty(operation.getOpid())){
             PatMedOperationItem patMedOperationItem = new PatMedOperationItem();
             //patMedOperation.opReqid = patMedOperationItem.operationid
-            patMedOperationItem.setOperationid(operation.getOpreqid());
-            List<PatMedOperationItem> patMedOperationItems = chMapper.selectOperItemList(patMedOperationItem);
+            List<PatMedOperationItem> patMedOperationItems = new ArrayList<>();
+            if (ObjectUtils.isNotEmpty(operation.getOpreqid())){
+                patMedOperationItem.setOperationid(operation.getOpreqid());
+                patMedOperationItems = chMapper.selectOperItemList(patMedOperationItem);
+            }else {
+                log.info("鍚屾鎵嬫湳璇︽儏淇℃伅:鎵嬫湳鐢宠鍗旾D涓虹┖!");
+                return count;
+            }
 
             PatMedOperationItem operItem = new PatMedOperationItem();
             operItem.setOperationid(operation.getOpreqid());
@@ -697,6 +709,39 @@
         return size;
     }
 
+    /**
+     * 寮傛鍚屾鐢ㄦ埛淇℃伅锛氭帴鍙g珛鍗宠繑鍥烇紝瀹為檯鍚屾浜ょ粰绾跨▼姹犲悗鍙版墽琛屻��
+     * 浣跨敤 AtomicBoolean 闃叉閲嶅鎻愪氦瀵艰嚧澶氫釜鍏ㄩ噺鍚屾浠诲姟骞跺彂鎵ц銆�
+     */
+    @Override
+    public boolean selectUserListAsync(SysUser sysUser) {
+        if (!userSyncRunning.compareAndSet(false, true)) {
+            log.warn("鐢ㄦ埛淇℃伅鍚屾浠诲姟姝e湪鎵ц涓紝蹇界暐鏈鎻愪氦");
+            return false;
+        }
+        try {
+            taskExecutor.execute(() -> {
+                long start = System.currentTimeMillis();
+                log.info("鐢ㄦ埛淇℃伅寮傛鍚屾浠诲姟寮�濮嬫墽琛�");
+                try {
+                    Integer count = selectUserList(sysUser);
+                    log.info("鐢ㄦ埛淇℃伅寮傛鍚屾浠诲姟鎵ц瀹屾垚锛屽鐞嗘暟閲忥細{}锛岃�楁椂锛歿}ms",
+                            count, System.currentTimeMillis() - start);
+                } catch (Throwable e) {
+                    log.error("鐢ㄦ埛淇℃伅寮傛鍚屾浠诲姟鎵ц澶辫触锛岃�楁椂锛歿}ms",
+                            System.currentTimeMillis() - start, e);
+                } finally {
+                    userSyncRunning.set(false);
+                }
+            });
+            return true;
+        } catch (RuntimeException e) {
+            userSyncRunning.set(false);
+            log.error("鐢ㄦ埛淇℃伅寮傛鍚屾浠诲姟鎻愪氦澶辫触", e);
+            return false;
+        }
+    }
+
     @Override
     public Integer selectUserList(SysUser sysUser) {
         List<SysUser> sysUserList = chMapper.selectUserList(sysUser);
@@ -811,7 +856,12 @@
         log.info("selectDeptList鐨勯噰闆嗗埌鐨勬暟閲忎负锛歿}", sysDepts.size());
         // count = sysDept2Mapper.batchDept(sysDepts);
         for (SysDept row : sysDepts) {
-            SysDept sysDeptTemp = sysDept2Mapper.selectDeptByCode(row.getDeptCode(), null);
+            // 绉戝鍜岀梾鍖哄彲鑳藉叡鐢ㄥ悓涓�涓� dept_code锛屽繀椤绘寜 dept_type + orgid 绮剧‘瀹氫綅锛屽惁鍒� selectOne 浼氳繑鍥炲鏉�
+            if (StringUtils.isEmpty(row.getDeptCode())) {
+                log.warn("selectDeptList璺宠繃deptCode涓虹┖鐨勮褰曪細{}", row);
+                continue;
+            }
+            SysDept sysDeptTemp = sysDept2Mapper.selectDeptByCodeAndType(row.getDeptCode(), row.getOrgid(), row.getDeptType());
             if (sysDeptTemp != null && sysDeptTemp.getDeptName() != null) {
                 row.setDeptId(sysDeptTemp.getDeptId());
                 count += sysDept2Mapper.updateDept(row);

--
Gitblit v1.9.3