From 6ca5681ce55056d2a298ea9917d3ffedb97a50e7 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 28 十月 2026 13:46:05 +0800
Subject: [PATCH] 【丽水】collectUser\collectDept 同步调整

---
 ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml                  |   66 +++++++++++++++++----
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java |   39 +++++++++++++
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/CollectHISController.java    |    9 ++-
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java         |   12 ++++
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java         |    8 ++
 5 files changed, 117 insertions(+), 17 deletions(-)

diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
index e06e99f..905ee0d 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -258,6 +258,18 @@
     @ApiModelProperty("婊℃剰搴﹀垎绫伙紙闂嵎/璇煶锛�")
     private Map<String, Object> satisfactionCategories = new HashMap<>();
 
+    /**
+     * HIS澧為噺鍚屾寮�濮嬫椂闂达紙瀵瑰簲 healthy_user.last_Update_Time锛�
+     */
+    @ApiModelProperty("鍚屾寮�濮嬫椂闂达紝鏍煎紡锛歽yyy-MM-dd HH:mm:ss")
+    private String lastStartTime;
+
+    /**
+     * HIS澧為噺鍚屾缁撴潫鏃堕棿锛堝搴� healthy_user.last_Update_Time锛�
+     */
+    @ApiModelProperty("鍚屾缁撴潫鏃堕棿锛屾牸寮忥細yyyy-MM-dd HH:mm:ss")
+    private String lastEndTime;
+
 
     public SysUser() {
 
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/CollectHISController.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/CollectHISController.java
index 27e4cfd..b8bd5e0 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/CollectHISController.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/CollectHISController.java
@@ -51,13 +51,16 @@
     }
 
     /**
-     * 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅鏁版嵁閲囬泦
+     * 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅鏁版嵁閲囬泦锛堝紓姝ユ墽琛岋紝鎺ュ彛绔嬪嵆杩斿洖锛�
      */
     @PostMapping("/collectUser")
     @ApiOperation("鍚屾鐢ㄦ埛淇℃伅")
     public AjaxResult selectUserList(@RequestBody SysUser sysUser) {
-        Integer integer = ichService.selectUserList(sysUser);
-        return AjaxResult.success(integer);
+        boolean submitted = ichService.selectUserListAsync(sysUser);
+        if (!submitted) {
+            return AjaxResult.warn("鐢ㄦ埛淇℃伅鍚屾浠诲姟姝e湪鎵ц涓紝璇峰嬁閲嶅鎻愪氦");
+        }
+        return AjaxResult.success("鐢ㄦ埛淇℃伅鍚屾浠诲姟宸叉彁浜わ紝鍚庡彴鎵ц涓紝璇烽�氳繃鏃ュ織鏌ョ湅杩涘害");
     }
 
     /**
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java
index f5b2c05..c722a94 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ICollectHISService.java
@@ -66,6 +66,14 @@
     public Integer selectUserList(SysUser sysUser);
 
     /**
+     * 寮傛鍚屾鐢ㄦ埛淇℃伅锛堟彁浜ゅ悗绔嬪嵆杩斿洖锛岀敱鍚庡彴绾跨▼鎵ц锛�
+     *
+     * @param sysUser 鐢ㄦ埛淇℃伅
+     * @return true=宸叉彁浜わ紱false=宸叉湁鍚屾浠诲姟鍦ㄦ墽琛�
+     */
+    public boolean selectUserListAsync(SysUser sysUser);
+
+    /**
      * 鏌ヨ閮ㄩ棬绠$悊鏁版嵁
      *
      * @param dept 閮ㄩ棬淇℃伅
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 0651dd0..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";
@@ -703,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);
diff --git a/ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml b/ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml
index 89b18cf..ab800a8 100644
--- a/ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml
+++ b/ruoyi-quartz/src/main/resources/mapper/quartz/CollectHISMapper.xml
@@ -488,27 +488,41 @@
     </select>
 
     <select id="yhyksxx" parameterType="com.ruoyi.common.core.domain.entity.SysUser" resultMap="SysUserDeptResult">
-        select user_id , user_code , dept_type ,dept_code,dept_name,deptparent,del_flag,orgid
-        FROM healthy_user_dept
+        select ud.user_id , ud.user_code , ud.dept_type ,ud.dept_code,ud.dept_name,ud.deptparent,ud.del_flag,ud.orgid
+        FROM healthy_user_dept ud
         where 1=1
-        and user_id != 'admin'
-        and dept_type = '1'
+        and ud.user_id != 'admin'
+        and ud.dept_type = '1'
         <if test="orgid != null and orgid != ''">
-            AND orgid = #{orgid}
+            AND ud.orgid = #{orgid}
         </if>
-        <if test="hisUserId != null ">and user_id = #{hisUserId}</if>
+        <if test="hisUserId != null ">and ud.user_id = #{hisUserId}</if>
+        <if test="campusid != null and campusid != ''">
+            AND EXISTS (
+                SELECT 1 FROM healthy_dept d
+                WHERE d.his_dept_id = ud.dept_code
+                  AND d.orgid = #{campusid}
+            )
+        </if>
     </select>
 
     <select id="yhybfxx" parameterType="com.ruoyi.common.core.domain.entity.SysUser" resultMap="SysUserDeptResult">
-        select user_id , user_code , dept_type ,dept_code,dept_name,deptparent,del_flag,orgid
-        FROM healthy_user_dept
+        select ud.user_id , ud.user_code , ud.dept_type ,ud.dept_code,ud.dept_name,ud.deptparent,ud.del_flag,ud.orgid
+        FROM healthy_user_dept ud
         where 1=1
-        and user_id != 'admin'
-        and dept_type = '2'
+        and ud.user_id != 'admin'
+        and ud.dept_type = '2'
         <if test="orgid != null and orgid != ''">
-            AND orgid = #{orgid}
+            AND ud.orgid = #{orgid}
         </if>
-        <if test="hisUserId != null ">and user_id = #{hisUserId}</if>
+        <if test="hisUserId != null ">and ud.user_id = #{hisUserId}</if>
+        <if test="campusid != null and campusid != ''">
+            AND EXISTS (
+                SELECT 1 FROM healthy_dept d
+                WHERE d.his_dept_id = ud.dept_code
+                  AND d.orgid = #{campusid}
+            )
+        </if>
     </select>
 
     <select id="yhyyqxx" parameterType="com.ruoyi.common.core.domain.entity.SysUser" resultMap="SysUserOrgResult">
@@ -526,7 +540,7 @@
         <if test="hisUserId != null ">
             AND ud.user_id = #{hisUserId}
         </if>
-        <if test="campusid != null">
+        <if test="campusid != null and campusid != ''">
             AND d.orgid = #{campusid}
         </if>
         union all
@@ -544,7 +558,7 @@
         <if test="hisUserId != null ">
             AND udb.user_id = #{hisUserId}
         </if>
-        <if test="campusid != null">
+        <if test="campusid != null and campusid != ''">
             AND d.orgid = #{campusid}
         </if>
     </select>
@@ -769,6 +783,30 @@
             <if test="orgid != null and orgid != ''">
                 AND u.orgid = #{orgid}
             </if>
+            <if test="lastStartTime != null and lastStartTime != ''">
+                AND u.last_Update_Time &gt;= to_date(#{lastStartTime}, 'YYYY-MM-DD HH24:MI:SS')
+            </if>
+            <if test="lastEndTime != null and lastEndTime != ''">
+                AND u.last_Update_Time &lt;= to_date(#{lastEndTime}, 'YYYY-MM-DD HH24:MI:SS')
+            </if>
+            <if test="campusid != null and campusid != ''">
+                AND (
+                    EXISTS (
+                        SELECT 1
+                        FROM healthy_user_dept ud
+                        JOIN healthy_dept d ON d.his_dept_id = ud.dept_code
+                        WHERE ud.user_id = u.his_user_id
+                          AND d.orgid = #{campusid}
+                    )
+                    OR EXISTS (
+                        SELECT 1
+                        FROM healthy_user_dept_bf udb
+                        JOIN healthy_dept d2 ON d2.his_dept_id = udb.dept_code
+                        WHERE udb.user_id = u.his_user_id
+                          AND d2.orgid = #{campusid}
+                    )
+                )
+            </if>
             <if test="userId != null and userId != 0">
                 AND u.user_id = #{userId}
             </if>

--
Gitblit v1.9.3