From e56e937f0b78152cc607ade75b3a0e1b2c1c2c4c Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期六, 07 十一月 2026 14:40:10 +0800
Subject: [PATCH] fix: 完成时状态与超时判断区分任务组
---
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java | 347 +++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 311 insertions(+), 36 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 3760141..e6cfc76 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
@@ -4,12 +4,17 @@
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.entity.SysUserDept;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.ArrayListUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.quartz.mapper.CollectHISMapper;
import com.ruoyi.quartz.service.ICollectHISService;
+import com.smartor.common.SpecificArchiveConstants;
import com.smartor.domain.*;
+import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.*;
import com.smartor.service.IPatMedOuthospService;
+import com.smartor.service.IPatSpecificArchiveGenerateService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ArrayUtils;
@@ -19,10 +24,12 @@
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
+import java.text.SimpleDateFormat;
import java.time.LocalDate;
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;
@@ -37,6 +44,9 @@
@Autowired
private IPatMedOuthospService patMedOuthospService;
+
+ @Autowired
+ private IPatSpecificArchiveGenerateService patSpecificArchiveGenerateService;
@Autowired
private SysDept2Mapper sysDept2Mapper;
@@ -60,6 +70,9 @@
private PatArchiveMapper patArchiveMapper;
@Autowired
+ private ServiceSubtaskMapper serviceSubtaskMapper;
+
+ @Autowired
private ThreadPoolTaskExecutor taskExecutor;
@Autowired
@@ -67,6 +80,14 @@
@Autowired
private UtilsMapper utilsMapper;
+
+ @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";
@@ -262,13 +283,36 @@
* @return
*/
private Integer syncOuthosp(String startTime, String endTime) {
+ return syncOuthosp(startTime, endTime, null, false);
+ }
+
+ /**
+ * 鍚屾闂ㄨ瘖淇℃伅銆�
+ *
+ * @param startTime 寮�濮嬫椂闂�
+ * @param endTime 缁撴潫鏃堕棿
+ * @param orgid 鏈烘瀯ID锛屼负绌烘椂鍚屾鍏ㄩ儴鏈烘瀯
+ * @param byAdmitDate true=鎸夊氨璇婃棩鏈熻繃婊わ紙琛ラ噰锛夛紱false=鎸夋渶鍚庢洿鏂版椂闂村閲忓悓姝�
+ */
+ private Integer syncOuthosp(String startTime, String endTime, String orgid, boolean byAdmitDate) {
Integer count = 0;
PatMedOuthosp patMedOuthosp = new PatMedOuthosp();
- patMedOuthosp.setLastStartTime(startTime);
- patMedOuthosp.setLastEndTime(endTime);
+ if (byAdmitDate) {
+ patMedOuthosp.setBeginTime(parseDateTime(startTime));
+ patMedOuthosp.setEndTime(parseDateTime(endTime));
+ } else {
+ patMedOuthosp.setLastStartTime(startTime);
+ patMedOuthosp.setLastEndTime(endTime);
+ }
+ patMedOuthosp.setOrgid(orgid);
List<PatMedOuthosp> patMedOuthosps = chMapper.selectPatMedOuthospList(patMedOuthosp);
- log.info("鍚屾闂ㄨ瘖淇℃伅鏁伴噺" + patMedOuthosps.size());
+ log.info("鍚屾闂ㄨ瘖淇℃伅鏁伴噺锛歿}锛宱rgid={}锛宐yAdmitDate={}", patMedOuthosps.size(), orgid, byAdmitDate);
for (PatMedOuthosp patMedOuthosp1 : patMedOuthosps) {
+ // 鎸夋満鏋勮ˉ閲囨椂锛孒IS 瑙嗗浘鏈繑鍥� orgid 鐨勮褰曡ˉ涓婃煡璇㈡潯浠朵腑鐨勬満鏋�
+ if (StringUtils.isEmpty(patMedOuthosp1.getOrgid()) && StringUtils.isNotEmpty(orgid)) {
+ patMedOuthosp1.setOrgid(orgid);
+ }
+ PatArchive localArchive = null;
try {
//鎮h�呭熀鏈俊鎭�
PatArchive patArchive = new PatArchive();
@@ -279,26 +323,47 @@
pa1.setPatientno(patMedOuthosp1.getPatno());
List<PatArchive> patArchives1 = patArchiveMapper.selectPatArchiveList(pa1);
if (CollectionUtils.isNotEmpty(patArchives1)) {
- patArchives.get(0).setId(patArchives1.get(0).getId());
+ localArchive = patArchives1.get(0);
+ patArchives.get(0).setId(localArchive.getId());
patArchives.get(0).setUpdateTime(new Date());
count += patArchiveMapper.updatePatArchive(patArchives.get(0));
} else {
patArchives.get(0).setCreateTime(new Date());
count += patArchiveMapper.insertPatArchiveSingle(patArchives.get(0));
-
+ localArchive = patArchives.get(0);
}
}
} catch (Exception ex) {
log.info("鍚屾偅鑰呭熀鏈俊鎭�:" + ex.getMessage());
}
+ // HIS 鎮h�呬俊鎭己澶辨椂锛屼粛鎸夋偅鑰呯紪鍙峰洖鏌ユ湰鍦版。妗�
+ if (localArchive == null && StringUtils.isNotEmpty(patMedOuthosp1.getPatno())) {
+ try {
+ PatArchive localQuery = new PatArchive();
+ localQuery.setPatientno(patMedOuthosp1.getPatno());
+ List<PatArchive> localArchives = patArchiveMapper.selectPatArchiveList(localQuery);
+ if (CollectionUtils.isNotEmpty(localArchives)) {
+ localArchive = localArchives.get(0);
+ }
+ } catch (Exception ex) {
+ log.info("鍥炴煡鏈湴鎮h�呮。妗堝け璐�:" + ex.getMessage());
+ }
+ }
+
try {
- PatMedOuthosp patMedOuthospTemp = new PatMedOuthosp();
- patMedOuthospTemp.setSerialnum(patMedOuthosp1.getSerialnum());
- List<PatMedOuthosp> patMedOuthospsTemp = chMapper.selectPatMedOuthospList(patMedOuthosp);
- if (patMedOuthospsTemp.size() > 0) {
+ if (localArchive != null && localArchive.getId() != null) {
+ patMedOuthosp1.setPatid(localArchive.getId());
+ }
+ PatMedOuthosp localOuthosp = null;
+ try {
+ localOuthosp = findLocalOuthosp(patMedOuthosp1);
+ } catch (Exception e) {
+ log.warn("鍥炴煡鏈湴闂ㄨ瘖璁板綍澶辫触锛屾寜鏂板澶勭悊锛宻erialnum={}", patMedOuthosp1.getSerialnum(), e);
+ }
+ if (localOuthosp != null) {
patMedOuthosp1.setUpdateTime(new Date());
- patMedOuthosp1.setId(patMedOuthospsTemp.get(0).getId());
+ patMedOuthosp1.setId(localOuthosp.getId());
//甯備竴 闄㈠尯id瀵瑰簲orgid锛屾満鏋刬d涓洪粯璁ょ殑1
if(active.equals("hzszlyy")) {
patMedOuthosp1.setCampusid(patMedOuthosp1.getOrgid());
@@ -314,10 +379,91 @@
}
count += patMedOuthospService.insertPatMedOuthosp(patMedOuthosp1);
}
+ generateSpecificArchive(patMedOuthosp1, localArchive);
} catch (Exception ex) {
- log.info("鍚屾鍑哄叆闄�:" + ex.getMessage());
+ log.info("鍚屾闂ㄨ瘖淇℃伅:" + ex.getMessage());
}
}
+ return count;
+ }
+
+ /**
+ * 鍥炴煡鏈湴闂ㄨ瘖璁板綍锛岄伩鍏嶉噸澶嶉噰闆嗘椂鎻掑叆閲嶅鏁版嵁銆�
+ */
+ private PatMedOuthosp findLocalOuthosp(PatMedOuthosp record) {
+ if (StringUtils.isEmpty(record.getSerialnum()) && StringUtils.isEmpty(record.getOuthospno())) {
+ return null;
+ }
+ PatMedOuthospQueryReq req = new PatMedOuthospQueryReq();
+ req.setSerialnum(record.getSerialnum());
+ req.setOuthospno(record.getOuthospno());
+ req.setOrgid(record.getOrgid());
+ List<PatMedOuthosp> localList = patMedOuthospMapper.callSpQueryOuthosp(req);
+ return CollectionUtils.isNotEmpty(localList) ? localList.get(0) : null;
+ }
+
+ /**
+ * 闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍閲囬泦鍚庣敓鎴愪笓绉戞。妗堬紙浠呬附姘村競濡囧辜淇濆仴闄㈢敓鏁堬級銆�
+ */
+ private void generateSpecificArchive(PatMedOuthosp patMedOuthosp, PatArchive patArchive) {
+ if (!SpecificArchiveConstants.LISHUI_MCH_ORG_ID.equals(patMedOuthosp.getOrgid())) {
+ return;
+ }
+ try {
+ int generated = patSpecificArchiveGenerateService.generateByOuthosp(patMedOuthosp, patArchive);
+ if (generated > 0) {
+ log.info("闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍鐢熸垚涓撶妗f鎴愬姛锛宱uthospno={}锛岀敓鎴愭暟閲�={}",
+ patMedOuthosp.getOuthospno(), generated);
+ }
+ } catch (Exception e) {
+ log.error("闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍鐢熸垚涓撶妗f澶辫触锛宱uthospno={}", patMedOuthosp.getOuthospno(), e);
+ }
+ }
+
+ private Date parseDateTime(String value) {
+ if (StringUtils.isEmpty(value)) {
+ return null;
+ }
+ try {
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value);
+ } catch (Exception e) {
+ try {
+ return new SimpleDateFormat("yyyy-MM-dd").parse(value);
+ } catch (Exception ex) {
+ log.warn("瑙f瀽闂ㄨ瘖閲囬泦鏃堕棿澶辫触锛歿}", value);
+ return null;
+ }
+ }
+ }
+
+ /**
+ * 鍓嶇/瀹氭椂浠诲姟浼犲叆 yyyy-MM-dd 鏃讹紝缁撴潫鏃堕棿琛ラ綈鍒板綋澶� 23:59:59锛岄伩鍏嶆紡鎺夊綋澶╂暟鎹��
+ */
+ private Date normalizeEndTime(Date endTime) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(endTime);
+ if (calendar.get(Calendar.HOUR_OF_DAY) == 0 && calendar.get(Calendar.MINUTE) == 0
+ && calendar.get(Calendar.SECOND) == 0 && calendar.get(Calendar.MILLISECOND) == 0) {
+ calendar.add(Calendar.DAY_OF_MONTH, 1);
+ calendar.add(Calendar.SECOND, -1);
+ return calendar.getTime();
+ }
+ return endTime;
+ }
+
+ @Override
+ public Integer collectMchOuthospAndGenerateArchive(String orgid, Date startTime, Date endTime) {
+ if (!SpecificArchiveConstants.LISHUI_MCH_ORG_ID.equals(orgid)) {
+ log.warn("閲囬泦闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍浠呮敮鎸佷附姘村競濡囧辜淇濆仴闄紝orgid={}", orgid);
+ return 0;
+ }
+ Date end = endTime != null ? normalizeEndTime(endTime) : new Date();
+ Date start = startTime != null ? startTime : new Date(end.getTime() - 24 * 60 * 60 * 1000L);
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ log.info("寮�濮嬮噰闆嗕附姘村骞奸棬璇婃帴璇婂畬鎴愯褰曪紝鏃堕棿鑼冨洿锛歿} ~ {}", sdf.format(start), sdf.format(end));
+ int count = syncOuthosp(sdf.format(start), sdf.format(end), orgid, true);
+ log.info("涓芥按濡囧辜闂ㄨ瘖鎺ヨ瘖瀹屾垚璁板綍閲囬泦瀹屾垚锛屾椂闂磋寖鍥达細{} ~ {}锛屽鐞嗘暟閲忥細{}",
+ sdf.format(start), sdf.format(end), count);
return count;
}
@@ -339,6 +485,11 @@
log.info("鍚屾鎵嬫湳淇℃伅鏁伴噺" + patMedOperations.size());
for (PatMedOperation operation : patMedOperations) {
try {
+ if(ObjectUtils.isNotEmpty(operation.getCanceltime())){
+ //浣滃簾鍒犻櫎鎿嶄綔
+ cancelOper(operation);
+ continue;
+ }
Long patId = patIdHisMap.get(operation.getPatidHis());
if (patId == null) {
patId = syncSinglePatient(operation.getPatidHis());
@@ -351,12 +502,12 @@
operation.setPatid(patId);
}
PatMedOperation oper = new PatMedOperation();
- oper.setOpid(operation.getOpid());
+ oper.setOpreqid(operation.getOpreqid());
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));
+ count += patMedOperationMapper.updatePatMedOperation(operation);
syncOperItem(operation);
} else {
operation.setCreateTime(new Date());
@@ -370,6 +521,59 @@
return count;
}
+ private Integer cancelOper(PatMedOperation oper){
+ PatMedOperation operationVo = new PatMedOperation();
+ operationVo.setOpreqid(oper.getOpreqid());
+ List<PatMedOperation> operations = patMedOperationMapper.selectPatMedOperationList(operationVo);
+ PatMedOperation operation = new PatMedOperation();
+ if(CollectionUtils.isEmpty(operations)){
+ return 0;
+ }else {
+ operation = operations.get(0);
+ }
+ log.info("鎵嬫湳浣滃簾id=" + operation.getId());
+ PatMedOperationItem pmoi = new PatMedOperationItem();
+ //鑾峰彇闇�瑕佸嚭闄㈡墜鏈殢璁匡紝鏈鐞嗙殑鏁版嵁
+ pmoi.setOpid(operation.getId().toString());
+ List<PatMedOperationItem> patMedOperationItems
+ = patMedOperationItemMapper.selectOperationItemList(pmoi);
+ List<Long> operationItemIds = patMedOperationItems.stream()
+ .map(PatMedOperationItem::getId)
+ .filter(Objects::nonNull)
+ .distinct()
+ .collect(Collectors.toList());
+
+ //涓嶉渶瑕佹湇鍔′簡锛岄渶瑕侀�氳繃patid鍜宻endstate=1,2,3,5,7鍘绘煡璇竴涓嬶紝service_subtask閲屾槸鍚︽湁姝e湪鎵ц鐨勪换鍔★紝
+ //鏈夌殑璇濓紝绔嬪嵆鍋滀簡
+ List<Long> sendstates = Arrays.asList(1L, 2L, 3L, 5L, 7L);
+ List<ServiceSubtask> serviceSubtaskList = new ArrayList<>();
+ ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity();
+ serviceSubtaskVO.setOrgid(operation.getOrgid());
+ serviceSubtaskVO.setPatid(operation.getPatid());
+ serviceSubtaskVO.setSendstates(sendstates);
+ serviceSubtaskVO.setOperationItemIds(operationItemIds);
+ serviceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(serviceSubtaskVO);
+ //鍘籸edis涓紝鏌ヨ鏄惁鏈塻ubid锛屾湁鐨勮瘽绉婚櫎cache-exist
+ if (CollectionUtils.isNotEmpty(serviceSubtaskList)) {
+ for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
+ log.info("闇�瑕佺Щ闄ょ殑subId涓猴細{}", serviceSubtask.getId().toString());
+ serviceSubtask.setSendstate(4L);
+ serviceSubtask.setRemark("鎵嬫湳鎾ら攢");
+ serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+ redisCache.removeElementFromList("cache-exist", serviceSubtask.getId().toString());
+ redisCache.removeElementFromList("cache-0", serviceSubtask.getId().toString());
+ redisCache.removeElementFromList("cache-1", serviceSubtask.getId().toString());
+ redisCache.removeElementFromList("cache-2", serviceSubtask.getId().toString());
+ redisCache.removeElementFromList("cache-3", serviceSubtask.getId().toString());
+ redisCache.removeElementFromList("cache-4", serviceSubtask.getId().toString());
+ }
+ }
+ operation.setUpdateTime(new Date());
+ patMedOperationMapper.updatePatMedOperation(operation);
+ patMedOperationItemMapper.deleteSoftPatMedOperationItemByOpId(operation.getOpid());
+ return 1;
+ }
+
/**
* 鍚屾鎵嬫湳淇℃伅
*
@@ -377,34 +581,67 @@
* @return
*/
private Integer syncOperItem(PatMedOperation operation) {
+ if(ObjectUtils.isNotEmpty(operation.getId())){
+ operation.setOpid(operation.getId().toString());
+ }
+ operation.setUpdateTime(new Date());
+ patMedOperationMapper.updatePatMedOperation(operation);
+
Integer count = 0;
- PatMedOperationItem patMedOperationItem = new PatMedOperationItem();
- patMedOperationItem.setOrgid(operation.getOrgid());
if(StringUtils.isNotEmpty(operation.getOpid())){
- patMedOperationItem.setOpid(operation.getOpid());
- patMedOperationItem.setLastStartTime(operation.getLastStartTime());
- patMedOperationItem.setLastEndTime(operation.getLastEndTime());
- List<PatMedOperationItem> patMedOperationItems = chMapper.selectOperItemList(patMedOperationItem);
+ PatMedOperationItem patMedOperationItem = new PatMedOperationItem();
+ //patMedOperation.opReqid = patMedOperationItem.operationid
+ 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());
+ List<PatMedOperationItem> patMedOperationItems1 = patMedOperationItemMapper.selectPatMedOperationItemList(operItem);
+
+ Map<String, List<PatMedOperationItem>> maps = ArrayListUtils.splitListsById(patMedOperationItems,
+ patMedOperationItems1, PatMedOperationItem::getOperationid);
+ //鍙湪瑙嗗浘鐨勬暟鎹笉鍦ㄦ湰鍦扮殑鏁版嵁锛屾墽琛屾柊澧炴搷浣�
+ List<PatMedOperationItem> addItems = maps.get("onlyIn1");
+ //鍙湪鏈湴鐨勬暟鎹笉鍦ㄨ鍥剧殑鏁版嵁锛屾墽琛屽垹闄ゆ搷浣�
+ List<PatMedOperationItem> delItems = maps.get("onlyIn2");
+ //閲嶅彔鐨勬暟鎹紝鎵ц鏇存柊鎿嶄綔 patMedOperationItems鐨勬暟鎹�
+ List<PatMedOperationItem> editItems = maps.get("common");
+
log.info("鍚屾鎵嬫湳璇︽儏淇℃伅鏁伴噺" + patMedOperationItems.size());
- for (PatMedOperationItem operationItem : patMedOperationItems) {
- try {
+
+ try{
+ for (PatMedOperationItem operationItem : addItems) {
operationItem.setInhospstate(operation.getInhospstate());
operationItem.setSerialnum(operation.getSerialnum());
- 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());
+ operationItem.setOpid(operation.getId().toString());
+ operationItem.setOperationid(operation.getOpreqid());
+ operationItem.setOpercheckFlag("0");
+ operationItem.setCreateTime(new Date());
+ count += patMedOperationItemMapper.insertPatMedOperationItem(operationItem);
}
+
+ for (PatMedOperationItem operationItem : delItems) {
+ operationItem.setUpdateTime(new Date());
+ count += patMedOperationItemMapper.deletePatMedOperationItemByOperationid(operationItem.getOperationid());
+ }
+
+ for (PatMedOperationItem operationItem : editItems) {
+ operationItem.setInhospstate(operation.getInhospstate());
+ operationItem.setSerialnum(operation.getSerialnum());
+ operationItem.setOpid(operation.getId().toString());
+ operationItem.setOperationid(operation.getOpreqid());
+ operationItem.setUpdateTime(new Date());
+ count += patMedOperationItemMapper.updatePatMedOperationItemByOperationid(operationItem);
+ }
+ log.info("鍚屾鎵嬫湳id={}璇︽儏淇℃伅鏁伴噺, 鏂板{}鏉★紝鍒犻櫎{}鏉★紝淇敼{}鏉�", operation.getId(), addItems.size(), delItems.size(), editItems.size());
+ } catch (Exception ex) {
+ log.info("鍚屾鎵嬫湳璇︽儏淇℃伅:" + ex.getMessage());
}
// try {
@@ -603,6 +840,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);
@@ -717,7 +987,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