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