From 0bbbd746e8c39d91ad7b47a4e36e29ab972dc98c Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期二, 20 十月 2026 16:56:54 +0800
Subject: [PATCH] 处理长期任务发送问题
---
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/CollectHISServiceImpl.java | 194 ++++++++++++++++++++++++++++++++++++++---------
1 files changed, 155 insertions(+), 39 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 8884243..58d4d55 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,9 +1,13 @@
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;
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;
@@ -26,11 +30,26 @@
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;
@Slf4j
@Service
public class CollectHISServiceImpl implements ICollectHISService {
@Autowired
private CollectHISMapper chMapper;
+
+ /**
+ * 鎵嬫湳鏁版嵁涓�寰嬬粡 ruoyi-othervisit 鐨勯棬闈㈠彇鐢紙璺ㄦā鍧楁暟鎹闂師鍒欙級銆�
+ */
+ @Autowired
+ private OtherVisitFacade otherVisitFacade;
@Autowired
private SysUser2Mapper sysUser2Mapper;
@@ -54,10 +73,13 @@
private PatMedOuthospMapper patMedOuthospMapper;
@Autowired
- private PatMedInhospMapper patMedInhospMapper;
+ private InhospVisitFacade inhospVisitFacade;
@Autowired
private PatArchiveMapper patArchiveMapper;
+
+ @Autowired
+ private ServiceSubtaskMapper serviceSubtaskMapper;
@Autowired
private ThreadPoolTaskExecutor taskExecutor;
@@ -68,17 +90,16 @@
@Autowired
private UtilsMapper utilsMapper;
+ @Autowired
+ private RedisCache redisCache;
+
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) {
@@ -108,7 +129,7 @@
Integer count = 0;
List<Map<String, Object>> syncList = utilsMapper.getList("SELECT id,syncName,DATE_FORMAT(ADDDATE(startTime, INTERVAL -1 MINUTE), '%Y-%m-%d %H:%i:%s') startTime FROM sys_sync_time where state=0");
if (syncList.size() > 0) {
- String endTime = chMapper.getSqlString("select sysdate from healthy_inhosp where rownum=1");
+ String endTime = chMapper.getSqlString("select (sysdate-1) as endtime from healthy_inhosp where rownum=1");
//鍚屾鎮h�呭熀鏈俊鎭�
// List<Map<String, Object>> syncTemp = syncList.stream().filter(row -> row.get("syncName").equals("pat_archive")).collect(Collectors.toList());
// if (syncTemp.size() > 0) {
@@ -229,7 +250,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
@@ -237,7 +258,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());
@@ -246,7 +267,7 @@
pm.setCampusid(pm.getOrgid());
pm.setOrgid("1");
}
- count += patMedInhospMapper.updatePatMedInhosp(pm);
+ count += inhospVisitFacade.updatePatMedInhosp(pm);
}
} catch (Exception ex) {
log.info("鍚屾鍑哄叆闄�:" + ex.getMessage());
@@ -339,6 +360,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,16 +377,16 @@
operation.setPatid(patId);
}
PatMedOperation oper = new PatMedOperation();
- oper.setOpid(operation.getOpid());
- List<PatMedOperation> patMedOperations1 = patMedOperationMapper.selectPatMedOperationList(oper);
+ oper.setOpreqid(operation.getOpreqid());
+ List<PatMedOperation> patMedOperations1 = otherVisitFacade.selectOperationList(oper);
if (CollectionUtils.isNotEmpty(patMedOperations1)) {
operation.setId(patMedOperations1.get(0).getId());
operation.setUpdateTime(new Date());
- count += patMedOperationMapper.updatePatMedOperation(patMedOperations1.get(0));
+ count += otherVisitFacade.updateOperation(operation);
syncOperItem(operation);
} else {
operation.setCreateTime(new Date());
- count += patMedOperationMapper.insertPatMedOperation(operation);
+ count += otherVisitFacade.insertOperation(operation);
syncOperItem(operation);
}
} catch (Exception ex) {
@@ -370,6 +396,59 @@
return count;
}
+ private Integer cancelOper(PatMedOperation oper){
+ PatMedOperation operationVo = new PatMedOperation();
+ operationVo.setOpreqid(oper.getOpreqid());
+ List<PatMedOperation> operations = otherVisitFacade.selectOperationList(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
+ = otherVisitFacade.selectOperationItemListByCondition(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());
+ otherVisitFacade.updateOperation(operation);
+ otherVisitFacade.deleteSoftOperationItemByOpId(operation.getOpid());
+ return 1;
+ }
+
/**
* 鍚屾鎵嬫湳淇℃伅
*
@@ -377,35 +456,72 @@
* @return
*/
private Integer syncOperItem(PatMedOperation operation) {
+ if(ObjectUtils.isNotEmpty(operation.getId())){
+ operation.setOpid(operation.getId().toString());
+ }
+ operation.setUpdateTime(new Date());
+ otherVisitFacade.updateOperation(operation);
+
Integer count = 0;
- PatMedOperationItem patMedOperationItem = new PatMedOperationItem();
- patMedOperationItem.setOrgid(operation.getOrgid());
if(StringUtils.isNotEmpty(operation.getOpid())){
- patMedOperationItem.setOpid(Long.valueOf(operation.getOpid()));
- 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 = otherVisitFacade.selectOperationItemList(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 {
- 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());
+
+ try{
+ for (PatMedOperationItem operationItem : addItems) {
+ operationItem.setInhospstate(operation.getInhospstate());
+ operationItem.setSerialnum(operation.getSerialnum());
+ operationItem.setOpid(operation.getId().toString());
+ operationItem.setOperationid(operation.getOpreqid());
+ operationItem.setOpercheckFlag("0");
+ operationItem.setCreateTime(new Date());
+ count += otherVisitFacade.insertOperationItem(operationItem);
}
+
+ for (PatMedOperationItem operationItem : delItems) {
+ operationItem.setUpdateTime(new Date());
+ count += otherVisitFacade.deleteOperationItemByOperationid(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 += otherVisitFacade.updateOperationItemByOperationid(operationItem);
+ }
+ log.info("鍚屾鎵嬫湳id={}璇︽儏淇℃伅鏁伴噺, 鏂板{}鏉★紝鍒犻櫎{}鏉★紝淇敼{}鏉�", operation.getId(), addItems.size(), delItems.size(), editItems.size());
+ } catch (Exception ex) {
+ log.info("鍚屾鎵嬫湳璇︽儏淇℃伅:" + ex.getMessage());
}
// try {
-// patMedOperationItemMapper.deleteHardPatMedOperationItemByOpId(operation.getOpid());
-// count += patMedOperationItemMapper.insertPatMedOperationItems(patMedOperationItems);
+// otherVisitFacade.deleteHardOperationItemByOpId(operation.getOpid());
+// count += otherVisitFacade.insertOperationItems(patMedOperationItems);
// }catch (Exception ex) {
// log.info("鍚屾鎵嬫湳璇︽儏淇℃伅:" + ex.getMessage());
// }
@@ -489,20 +605,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);
}
}
--
Gitblit v1.9.3