From 7191c6d38f03f2e1baf39f959227ce9c038e4e96 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期二, 03 十一月 2026 14:39:52 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into smartor_ls_261012
---
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java | 120 ++++++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 92 insertions(+), 28 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 fc3499a..29f9a5a 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
@@ -1,5 +1,7 @@
package com.ruoyi.quartz.service.impl;
+import com.ruoyi.othervisit.api.OtherVisitFacade;
+import com.ruoyi.inhospvisit.api.InhospVisitFacade;
import com.google.gson.Gson;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
@@ -10,7 +12,6 @@
import com.ruoyi.quartz.mapper.CollectHISMapper;
import com.ruoyi.quartz.service.ICollectHISService;
import com.smartor.domain.*;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.*;
import com.smartor.service.IPatMedOuthospService;
import lombok.extern.slf4j.Slf4j;
@@ -26,14 +27,38 @@
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;
+import com.ruoyi.othervisit.domain.PatMedOperationItem;
+import com.ruoyi.outpatientvisit.mapper.PatMedOuthospMapper;
+import com.ruoyi.othervisit.domain.PatMedOperation;
+import com.ruoyi.outpatientvisit.domain.PatMedOuthosp;
+import com.ruoyi.inhospvisit.domain.PatMedInhosp;
+import com.ruoyi.common.core.domain.entity.PatArchive;
+import com.ruoyi.task.domain.entity.ServiceSubtaskEntity;
+import com.ruoyi.task.domain.ServiceSubtask;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.patarchive.mapper.PatArchiveMapper;
+import com.ruoyi.common.core.domain.entity.Icd10;
+import com.ruoyi.common.mapper.Icd10Mapper;
+import com.ruoyi.system.mapper.ext.SysUser2Mapper;
+import com.ruoyi.system.mapper.ext.SysDept2Mapper;
+import com.ruoyi.system.mapper.ext.SysUserDeptMapper;
+import com.ruoyi.patarchive.mapper.ShardingMapper;
+import com.ruoyi.datacollection.domain.HnDataGatherVO;
@Slf4j
@Service
public class CollectHISServiceImpl implements ICollectHISService {
@Autowired
private CollectHISMapper chMapper;
+
+ /**
+ * 鎵嬫湳鏁版嵁涓�寰嬬粡 ruoyi-othervisit 鐨勯棬闈㈠彇鐢紙璺ㄦā鍧楁暟鎹闂師鍒欙級銆�
+ */
+ @Autowired
+ private OtherVisitFacade otherVisitFacade;
@Autowired
private SysUser2Mapper sysUser2Mapper;
@@ -57,7 +82,7 @@
private PatMedOuthospMapper patMedOuthospMapper;
@Autowired
- private PatMedInhospMapper patMedInhospMapper;
+ private InhospVisitFacade inhospVisitFacade;
@Autowired
private PatArchiveMapper patArchiveMapper;
@@ -77,17 +102,18 @@
@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";
private static final String PAT_MED_INHOSP_TABLE = "pat_med_inhosp";
@Value("${spring.profiles.active}")
private String active;
- @Autowired
- private PatMedOperationMapper patMedOperationMapper;
- @Autowired
- private PatMedOperationItemMapper patMedOperationItemMapper;
@Override
public List<PatArchive> selectPatArchiveList(PatArchive patArchive) {
@@ -238,7 +264,7 @@
//鍚屾鍑哄叆闄�
PatMedInhosp pmi = new PatMedInhosp();
pmi.setSerialnum(pm.getSerialnum());
- List<PatMedInhosp> patMedInhospList1 = patMedInhospMapper.selectPatMedInhospListBySerialnum(pmi);
+ List<PatMedInhosp> patMedInhospList1 = inhospVisitFacade.selectPatMedInhospListBySerialnum(pmi);
if (patMedInhospList1.size() == 0) {
pm.setCreateTime(new Date());
//甯備竴 闄㈠尯id瀵瑰簲orgid锛屾満鏋刬d涓洪粯璁ょ殑1
@@ -246,7 +272,7 @@
pm.setCampusid(pm.getOrgid());
pm.setOrgid("1");
}
- count += patMedInhospMapper.insertPatMedInhosp(pm);
+ count += inhospVisitFacade.insertPatMedInhosp(pm);
} else {
pm.setInhospid(patMedInhospList1.get(0).getInhospid());
pm.setUpdateTime(new Date());
@@ -255,7 +281,7 @@
pm.setCampusid(pm.getOrgid());
pm.setOrgid("1");
}
- count += patMedInhospMapper.updatePatMedInhosp(pm);
+ count += inhospVisitFacade.updatePatMedInhosp(pm);
}
} catch (Exception ex) {
log.info("鍚屾鍑哄叆闄�:" + ex.getMessage());
@@ -366,15 +392,15 @@
}
PatMedOperation oper = new PatMedOperation();
oper.setOpreqid(operation.getOpreqid());
- List<PatMedOperation> patMedOperations1 = patMedOperationMapper.selectPatMedOperationList(oper);
+ List<PatMedOperation> patMedOperations1 = otherVisitFacade.selectOperationList(oper);
if (CollectionUtils.isNotEmpty(patMedOperations1)) {
operation.setId(patMedOperations1.get(0).getId());
operation.setUpdateTime(new Date());
- count += patMedOperationMapper.updatePatMedOperation(operation);
+ count += otherVisitFacade.updateOperation(operation);
syncOperItem(operation);
} else {
operation.setCreateTime(new Date());
- count += patMedOperationMapper.insertPatMedOperation(operation);
+ count += otherVisitFacade.insertOperation(operation);
syncOperItem(operation);
}
} catch (Exception ex) {
@@ -387,7 +413,7 @@
private Integer cancelOper(PatMedOperation oper){
PatMedOperation operationVo = new PatMedOperation();
operationVo.setOpreqid(oper.getOpreqid());
- List<PatMedOperation> operations = patMedOperationMapper.selectPatMedOperationList(operationVo);
+ List<PatMedOperation> operations = otherVisitFacade.selectOperationList(operationVo);
PatMedOperation operation = new PatMedOperation();
if(CollectionUtils.isEmpty(operations)){
return 0;
@@ -399,7 +425,7 @@
//鑾峰彇闇�瑕佸嚭闄㈡墜鏈殢璁匡紝鏈鐞嗙殑鏁版嵁
pmoi.setOpid(operation.getId().toString());
List<PatMedOperationItem> patMedOperationItems
- = patMedOperationItemMapper.selectOperationItemList(pmoi);
+ = otherVisitFacade.selectOperationItemListByCondition(pmoi);
List<Long> operationItemIds = patMedOperationItems.stream()
.map(PatMedOperationItem::getId)
.filter(Objects::nonNull)
@@ -432,8 +458,8 @@
}
}
operation.setUpdateTime(new Date());
- patMedOperationMapper.updatePatMedOperation(operation);
- patMedOperationItemMapper.deleteSoftPatMedOperationItemByOpId(operation.getOpid());
+ otherVisitFacade.updateOperation(operation);
+ otherVisitFacade.deleteSoftOperationItemByOpId(operation.getOpid());
return 1;
}
@@ -448,7 +474,7 @@
operation.setOpid(operation.getId().toString());
}
operation.setUpdateTime(new Date());
- patMedOperationMapper.updatePatMedOperation(operation);
+ otherVisitFacade.updateOperation(operation);
Integer count = 0;
if(StringUtils.isNotEmpty(operation.getOpid())){
@@ -465,7 +491,7 @@
PatMedOperationItem operItem = new PatMedOperationItem();
operItem.setOperationid(operation.getOpreqid());
- List<PatMedOperationItem> patMedOperationItems1 = patMedOperationItemMapper.selectPatMedOperationItemList(operItem);
+ List<PatMedOperationItem> patMedOperationItems1 = otherVisitFacade.selectOperationItemList(operItem);
Map<String, List<PatMedOperationItem>> maps = ArrayListUtils.splitListsById(patMedOperationItems,
patMedOperationItems1, PatMedOperationItem::getOperationid);
@@ -486,12 +512,12 @@
operationItem.setOperationid(operation.getOpreqid());
operationItem.setOpercheckFlag("0");
operationItem.setCreateTime(new Date());
- count += patMedOperationItemMapper.insertPatMedOperationItem(operationItem);
+ count += otherVisitFacade.insertOperationItem(operationItem);
}
for (PatMedOperationItem operationItem : delItems) {
operationItem.setUpdateTime(new Date());
- count += patMedOperationItemMapper.deletePatMedOperationItemByOperationid(operationItem.getOperationid());
+ count += otherVisitFacade.deleteOperationItemByOperationid(operationItem.getOperationid());
}
for (PatMedOperationItem operationItem : editItems) {
@@ -500,7 +526,7 @@
operationItem.setOpid(operation.getId().toString());
operationItem.setOperationid(operation.getOpreqid());
operationItem.setUpdateTime(new Date());
- count += patMedOperationItemMapper.updatePatMedOperationItemByOperationid(operationItem);
+ count += otherVisitFacade.updateOperationItemByOperationid(operationItem);
}
log.info("鍚屾鎵嬫湳id={}璇︽儏淇℃伅鏁伴噺, 鏂板{}鏉★紝鍒犻櫎{}鏉★紝淇敼{}鏉�", operation.getId(), addItems.size(), delItems.size(), editItems.size());
} catch (Exception ex) {
@@ -508,8 +534,8 @@
}
// try {
-// patMedOperationItemMapper.deleteHardPatMedOperationItemByOpId(operation.getOpid());
-// count += patMedOperationItemMapper.insertPatMedOperationItems(patMedOperationItems);
+// otherVisitFacade.deleteHardOperationItemByOpId(operation.getOpid());
+// count += otherVisitFacade.insertOperationItems(patMedOperationItems);
// }catch (Exception ex) {
// log.info("鍚屾鎵嬫湳璇︽儏淇℃伅:" + ex.getMessage());
// }
@@ -593,20 +619,20 @@
//鍏ラ櫌
pm.setInhospstate("0");
pm.setCreateTime(new Date());
- patMedInhospMapper.insertPatMedInhosp(pm);
+ inhospVisitFacade.insertPatMedInhosp(pm);
} else if (!Objects.isNull(patMedInhosp.getStartOutHospTime()) && !Objects.isNull(patMedInhosp.getEndOutHospTime())) {
//鍑洪櫌
pm.setInhospstate("1");
pm.setUpdateTime(new Date());
PatMedInhosp pmi = new PatMedInhosp();
pmi.setSerialnum(pm.getSerialnum());
- List<PatMedInhosp> patMedInhospList1 = patMedInhospMapper.selectPatMedInhospList(pmi);
+ List<PatMedInhosp> patMedInhospList1 = inhospVisitFacade.selectPatMedInhospList(pmi);
if (CollectionUtils.isEmpty(patMedInhospList1)) {
pm.setCreateTime(new Date());
- patMedInhospMapper.insertPatMedInhosp(pm);
+ inhospVisitFacade.insertPatMedInhosp(pm);
} else {
pm.setInhospid(patMedInhospList1.get(0).getInhospid());
- patMedInhospMapper.updatePatMedInhosp(pm);
+ inhospVisitFacade.updatePatMedInhosp(pm);
}
}
@@ -701,6 +727,39 @@
size += icd10Mapper.batchIcd10(icd10s);
}
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
@@ -817,7 +876,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