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 >= to_date(#{lastStartTime}, 'YYYY-MM-DD HH24:MI:SS')
+ </if>
+ <if test="lastEndTime != null and lastEndTime != ''">
+ AND u.last_Update_Time <= 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