From abae517585ad7ff0038c31339d200712c9684556 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期五, 21 八月 2026 16:07:07 +0800
Subject: [PATCH] 修改市一同步时间范围(实时前1天,补救前5天)
---
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java | 204 +++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 183 insertions(+), 21 deletions(-)
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
index 714587a..0d636fa 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -6,6 +6,7 @@
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
+import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.dx.MessageSend;
@@ -48,6 +49,7 @@
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
+import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -150,6 +152,9 @@
IServiceSubtaskDetailTraceService serviceSubtaskDetailTraceService;
@Autowired
+ IPatMedOuthospService patMedOuthospService;
+
+ @Autowired
ISvyTaskTemplateService svyTaskTemplateService;
@Autowired
@@ -181,6 +186,21 @@
private String active;
@Autowired
private SysConfigMapper sysConfigMapper;
+
+ @Autowired
+ private IServiceTaskScheduleService serviceTaskScheduleService;
+
+ public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) {
+ System.out.println(StringUtils.format("鎵ц澶氬弬鏂规硶锛� 瀛楃涓茬被鍨媨}锛屽竷灏旂被鍨媨}锛岄暱鏁村瀷{}锛屾诞鐐瑰瀷{}锛屾暣褰}", s, b, l, d, i));
+ }
+
+ public void ryParams(String params) {
+ System.out.println("鎵ц鏈夊弬鏂规硶锛�" + params);
+ }
+
+ public void ryNoParams() {
+ System.out.println("鎵ц鏃犲弬鏂规硶");
+ }
public void importData() {
String filePath = "C:\\Users\\86176\\Desktop\\鏂板缓鏂囨湰鏂囨。 4.txt"; // 鏇挎崲涓轰綘鐨勬枃浠惰矾寰�
@@ -267,6 +287,17 @@
LocalDateTime tomorrowEnd = tomorrowStart.plusDays(1).minusSeconds(1); // 鏄庡ぉ 23:59:59
ixhGatherPatArchiveService.getAppointRecordInfo("2", tomorrowStart, tomorrowEnd);
}
+
+ /**
+ * 姣忔湀15鍙峰拰鏈堝簳锛屾煡璇㈠苟澶勭悊 HIS 鏁版嵁锛堝悓寰凤紝鍗楀崕锛�
+ */
+ public void dealHisDataHalfMonth() {
+ LocalDateTime now = LocalDateTime.now();
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ String formattedNow = now.format(formatter);
+ dealHisData(formattedNow);
+ }
+
/**
* HIS鏁版嵁閲囬泦
@@ -405,7 +436,7 @@
list.add("FH0109.23");
list.add("FH0109.53");
serviceSLTDInhospReqVO.setStatusList(list);
- log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滈鍏ラ櫌鈥濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
+// log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滈鍏ラ櫌鈥濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滈鍏ラ櫌鈥濈祼鏉熼噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
@@ -423,7 +454,7 @@
List<String> listStr = new ArrayList<>();
listStr.add("FH0109.24");
serviceSLTDInhospReqVO.setStatusList(listStr);
- log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃叆闄⑩�濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
+// log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃叆闄⑩�濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃叆闄⑩�濈祼鏉熼噰闆嗘暟鎹紝闄㈠尯锛歿}", cid);
@@ -446,7 +477,7 @@
//棰勫嚭闄�
list2.add("FH0109.25");
serviceSLTDInhospReqVO.setStatusList(list2);
- log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃嚭闄⑩�濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
+// log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃嚭闄⑩�濋噰闆嗘暟鎹叆鍙傦細{}", serviceSLTDInhospReqVO);
serviceSLTDHealthcareRecordService.queryHealthcareRecordList(serviceSLTDInhospReqVO);
log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滃嚭闄⑩�濇潫閲囬泦鏁版嵁锛岄櫌鍖猴細{}", cid);
}
@@ -467,7 +498,7 @@
* @param endDateStr 鏃ユ湡缁撴潫 yyyy-MM-dd
*/
private void collectSegmentData(Long cid, String startDateStr, String endDateStr) {
- // 棰勫叆闄�
+// // 棰勫叆闄�
log.info("銆恉ealHisData銆戦鍏ラ櫌寮�濮嬮噰闆嗘暟鎹紝闄㈠尯锛歿}锛屾椂闂存锛歿} ~ {}", cid, startDateStr, endDateStr);
ServiceSLTDInhospReqVO reqVO = new ServiceSLTDInhospReqVO();
reqVO.setOrgId("20001001");
@@ -617,13 +648,31 @@
ServiceSLTDInhospReqVO serviceSLTDInhospReqVO = new ServiceSLTDInhospReqVO();
serviceSLTDInhospReqVO.setOrgId("20001001");
Long outpPage = 1L;
+ int totalCount = 0; // 缁熻鎬诲叡閲囬泦鐨勮嵂鍝佹暟閲�
+
while (true) {
serviceSLTDInhospReqVO.setCurrent(outpPage);
serviceSLTDInhospReqVO.setSize(OUTP_PAGE_SIZE);
- log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滆嵂鍝佹暟鎹�濋噰闆嗙{}椤垫暟鎹�", outpPage);
- Boolean b = serviceSLTDHealthcareRecordService.queryMedicationItemList(serviceSLTDInhospReqVO);
- log.info("銆恉ealHisData銆戠渷绔嬪悓寰封�滆嵂鍝佹暟鎹�濋噰闆嗙粨鏋滐細{}", b);
- outpPage++;
+ log.info("銆恉ealHisData銆戠渷绔嬪悓寰穃"鑽搧鏁版嵁\"閲囬泦绗瑊}椤垫暟鎹�", outpPage);
+
+ try {
+ Integer fetchedCount = serviceSLTDHealthcareRecordService.queryMedicationItemList(serviceSLTDInhospReqVO);
+ log.info("銆恉ealHisData銆戠渷绔嬪悓寰穃"鑽搧鏁版嵁\"绗瑊}椤甸噰闆嗗埌{}鏉¤褰�", outpPage, fetchedCount);
+
+ totalCount += fetchedCount != null ? fetchedCount : 0;
+
+ // 濡傛灉杩斿洖鐨勬暟鎹噺灏忎簬 pageSize锛岃鏄庡凡缁忔槸鏈�鍚庝竴椤典簡锛岄��鍑哄惊鐜�
+ if (fetchedCount == null || fetchedCount < OUTP_PAGE_SIZE) {
+ log.info("銆恉ealHisData銆戠渷绔嬪悓寰穃"鑽搧鏁版嵁\"閲囬泦瀹屾垚锛屾�婚〉鏁�:{}, 鎬昏{}鏉¤褰�", outpPage, totalCount);
+ break;
+ }
+
+ outpPage++;
+ } catch (Exception e) {
+ log.error("銆恉ealHisData銆戠渷绔嬪悓寰穃"鑽搧鏁版嵁\"绗瑊}椤甸噰闆嗗け璐�", outpPage, e);
+ // 鍑洪敊鏃朵篃鍙互閫夋嫨閫�鍑烘垨缁х画锛岃繖閲岄�夋嫨閫�鍑洪伩鍏嶆棤闄愰噸璇�
+ break;
+ }
}
}
@@ -668,7 +717,7 @@
public void dealHisData2() {
//灏嗘偅鑰呬俊鎭�佸嚭鍏ラ櫌鏁版嵁鍏ㄩ儴閲囬泦
// 鎸囧畾鐨勫紑濮嬫棩鏈�
- LocalDate endDate = LocalDate.of(2025, 3, 3);
+ LocalDate endDate = LocalDate.of(2026, 7, 6);
// 褰撳墠鏃ユ湡
LocalDate currentDate = LocalDate.now();
// 瀹氫箟鏃ユ湡鏍煎紡
@@ -699,17 +748,17 @@
}
/**
- * 澶勭悊鎮h�呬俊鎭紝杩涘叆瀛愪换鍔¤〃
+ * 澶勭悊鎮h�呬俊鎭紝杩涘叆瀛愪换鍔¤〃(浠诲姟缁�)
*/
- public void dealOutHospInfoByDimension() {
+ public void dealOutHospInfoBySchedule() {
String config = configService.selectConfigByKey("visit.early.day");
if (port.equals("8095")) {
//鍑洪櫌琛�
- iPatMedInhospService.dealOutHospInfoByDimension(config);
+ iPatMedInhospService.dealOutHospInfoBySchedule(config);
//闂ㄨ瘖琛�(鏂板崕鐨勬殏鏃朵笉鍋氶棬璇婇殢璁�)
- if (!active.equals("xh")) {
- //iPatMedOuthospService.dealOutpatientInfo();
- }
+// if (!active.equals("xh")) {
+// //iPatMedOuthospService.dealOutpatientInfo();
+// }
}
}
@@ -811,7 +860,9 @@
//2鍒ゆ柇涓�涓嬶紝褰撳墠鐨剆ort鏄笉鏄瓑浜庨渶瑕佹墽琛岀殑鎬讳釜鏁帮紝濡傛灉绛変簬鐨勮瘽锛岃鏄庢槸鏈�鍚庝竴涓紝鐩存帴灏唖ervuce_subtask鐨勭姸鎬佹敼鎴�5锛屾墽琛屽け璐ュ氨琛屼簡
Long cs = currentSort.get();
- if (cs.equals(serviceSubtaskPreachforms.size())) {
+
+ if (cs.equals(serviceSubtaskPreachforms.size())
+ && isSubtaskDeadline(serviceSubtask, serviceSubtaskPreachforms)) {
serviceSubtask.setSendstate(7L);
serviceSubtask.setRemark("澶勭悊琛ュ伩浠诲姟,褰撳墠澶勭悊鏈�鍚庤ˉ鍋匡紝鍏ㄩ儴鎵ц澶辫触锛堣秴鏃讹級");
@@ -1326,15 +1377,15 @@
serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
return "-1";
}
-
// 褰搒ort绛変簬鍒楄〃size鏃讹紝骞朵笖鎵�鏈塻endstate閮戒笉绛変簬9锛屽垯杩斿洖-1
- if (currentSort.get().equals((long) serviceSubtaskPreachforms.size())) {
+ if (currentSort.get().equals((long) serviceSubtaskPreachforms.size())
+ && isSubtaskDeadline(serviceSubtask, serviceSubtaskPreachforms)) {
if (allSendStateNot1AndNot9) {
//璇存槑鍏ㄥ彂閫佸け璐ヤ簡
serviceSubtask.setSendstate(7L);
serviceSubtask.setFinishtime(null);
log.error("getSendPreachform鏂规硶 妫�鏌ユ槸鍚︽墍鏈塻endstate涓嶇瓑浜�9, 鍏ㄥけ璐ヤ簡");
- serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + "," + "鎵�鏈夊彂閫佹柟寮忓潎鏈幏鍙栫粨鏋滐紝浠诲姟澶辫触锛堣秴鏃讹級" : "鎵�鏈夊彂閫佹柟寮忓潎鏈幏鍙栫粨鏋滐紝浠诲姟澶辫触锛堣秴鏃讹級");
+ serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + "," + "鎵�鏈夋墽琛屾柟寮忓潎鏈幏鍙栫粨鏋滐紝浠诲姟澶辫触锛堣秴鏃讹級" : "鎵�鏈夋墽琛屾柟寮忓潎鏈幏鍙栫粨鏋滐紝浠诲姟澶辫触锛堣秴鏃讹級");
serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
//淇敼鍙戦�佺姸鎬�
setFail(serviceSubtaskPreachforms, serviceSubtask);
@@ -1484,6 +1535,46 @@
}
}
+ public void collectHISYesterday() {
+ try {
+ // 鑾峰彇鏄ㄥぉ0鐐瑰埌浠婂ぉ0鐐圭殑鏃堕棿鑼冨洿
+ LocalDateTime todayZero = LocalDateTime.now().with(LocalTime.MIN);
+ LocalDateTime yesterdayZero = todayZero.minusDays(1);
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ String startTime = yesterdayZero.format(formatter);
+ String endTime = todayZero.format(formatter);
+ // HIS鏁版嵁閲囬泦
+ log.info("銆恈ollectHISYesterday銆慔IS寮�濮嬮噰闆嗘暟鎹�");
+ // 绔嬪嵆杩斿洖锛屽悗鍙板紓姝ユ墽琛�
+ CompletableFuture.runAsync(() -> {
+ ichService.syncMedInhosp(startTime, endTime);
+ });
+ log.info("銆恈ollectHISYesterday銆慔IS缁撴潫閲囬泦鏁版嵁");
+ } catch (Exception e) {
+ log.error("銆恈ollectHISYesterday銆慔IS鏁版嵁閲囬泦寮傚父", e);
+ }
+ }
+
+ public void collectHISDaysBefore(Long daysBefore) {
+ try {
+ // 鑾峰彇鏄ㄥぉ0鐐瑰埌浠婂ぉ0鐐圭殑鏃堕棿鑼冨洿
+ LocalDateTime todayZero = LocalDateTime.now().with(LocalTime.MIN);
+ LocalDateTime daysBeforeZero = todayZero.minusDays(daysBefore);
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ String startTime = daysBeforeZero.format(formatter);
+ String endTime = todayZero.format(formatter);
+ // HIS鏁版嵁閲囬泦
+ log.info("銆恈ollectHISDaysBefore銆慔IS寮�濮嬮噰闆嗘暟鎹�");
+ // 绔嬪嵆杩斿洖锛屽悗鍙板紓姝ユ墽琛�
+ CompletableFuture.runAsync(() -> {
+ ichService.syncMedInhosp(startTime, endTime);
+ });
+ log.info("銆恈ollectHISDaysBefore銆慔IS缁撴潫閲囬泦鏁版嵁");
+ } catch (Exception e) {
+ log.error("銆恈ollectHISDaysBefore銆慔IS鏁版嵁閲囬泦寮傚父", e);
+ }
+ }
+
public Boolean setSuccessPreachForm(ServiceSubtask serviceSubtask, String preachform, String remark, String failSendstate) {
if (preachform.equals("-1")) {
//璇存槑閮戒笉闇�瑕佹墽琛屼簡
@@ -1512,7 +1603,7 @@
// //浜哄伐鐨勬湭鍙戦�佺姸鎬侊紝闇�瑕佹煡2
// if (preachform.equals("1") && StringUtils.isNotEmpty(failSendstate) && Long.valueOf(failSendstate) > 2)
// serviceSubtaskPreachform.setSendstate("2");
-
+ log.error("-----serviceSubtaskPreachform鐨勫叆鍙傛槸锛焮}", serviceSubtaskPreachform);
List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
ServiceSubtaskPreachform serviceSubtaskPreachform1 = serviceSubtaskPreachforms.get(0);
@@ -1525,7 +1616,8 @@
serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform1);
//濡傛灉褰撳墠鐨刾reachform宸茬粡鏄渶鍚庝竴涓簡锛岄偅鐩存帴灏唖erviceSubtask鐨剆endstate鐘舵�佹敼鎴�7灏辫浜�(鍏ㄨ秴鏃朵簡)
- if (serviceSubtaskPreachform1.getSort() == sspCount.size()) {
+ if (serviceSubtaskPreachform1.getSort() == sspCount.size()
+ && isSubtaskDeadline(serviceSubtask, serviceSubtaskPreachforms)) {
if (failSendstate.equals("4") || failSendstate.equals("5")) {
serviceSubtask.setCurrentPreachform(preachform);
serviceSubtask.setSendstate(7L);
@@ -1603,4 +1695,74 @@
int result = QwenLLMUtil.matchRegex(questionText, voiceText, value, regexText);
return result;
}
+
+ /**
+ * 浠诲姟缁勶紙appltype=5锛夐杞撼鍏ワ細鎵弿鏂板嚭闄㈡偅鑰咃紝鎸� schedule 缁戝畾鐨勭淮搴﹀尮閰嶄换鍔$粍锛�
+ * 涓哄懡涓殑鎮h�呮寜璁″垝鏄庣粏涓�娆℃�х敓鎴愮 0 杞� N 鏉� subtask锛屽苟缃� schedulecheck_flag=1銆�
+ * 鍚庣画杞鐢� {@link #rollTaskGroupCycle()} 璐熻矗銆�
+ * <p>
+ * 涓庝富鎵弿 dealOutHospInfo 鍒嗙锛屼簰涓嶅共鎵般�傚缓璁瘡 30 鍒嗛挓鎵ц涓�娆°��
+ */
+ public void dealTaskGroupOutHosp() {
+ log.info("銆恉ealTaskGroupOutHosp銆戝紑濮嬫壂鎻忎换鍔$粍鏂板嚭闄㈡偅鑰�");
+ if (!port.equals("8095")) {
+ return;
+ }
+ try {
+ String config = configService.selectConfigByKey("visit.early.day");
+ iPatMedInhospService.dealOutHospInfoBySchedule(config);
+ log.info("銆恉ealTaskGroupOutHosp銆戜换鍔$粍棣栬疆绾冲叆鎵弿瀹屾垚");
+ } catch (Exception e) {
+ log.error("銆恉ealTaskGroupOutHosp銆戜换鍔$粍鎵弿寮傚父", e);
+ }
+ }
+
+ /**
+ * 浠诲姟缁勶紙appltype=5锛夊惊鐜换鍔℃粴鍔ㄨ皟搴︺��
+ * <p>
+ * 鎵弿鎵�鏈� schedule_style=1 鐨勮鍒掞紝鑻ユ湰杞� subtask 鍏ㄩ儴 finalize锛坰endstate 鈭� 1/2/3锛夛紝
+ * 鍒欏厠闅嗘湰杞偅鑰呭埌涓嬩竴杞紝鎺ㄨ繘 current_loop_count 涓� visit_time銆�
+ * <p>
+ * 寤鸿姣忓皬鏃舵垨姣忓崐灏忔椂鎵ц涓�娆★紝閬垮厤杞绉帇銆�
+ */
+ public void rollTaskGroupCycle() {
+ log.info("銆恟ollTaskGroupCycle銆戝紑濮嬫壂鎻忓惊鐜换鍔$粍");
+ try {
+ int rolled = serviceTaskScheduleService.rollCycleTasks();
+ log.info("銆恟ollTaskGroupCycle銆戞湰娆℃帹杩� {} 涓鍒�", rolled);
+ } catch (Exception e) {
+ log.error("銆恟ollTaskGroupCycle銆戞粴鍔ㄨ皟搴﹀紓甯�", e);
+ }
+ }
+
+ /**
+ * 闅忚浠诲姟鏄惁瓒呮椂
+ * @param serviceSubtask
+ * @param serviceSubtaskPreachforms
+ * @return
+ */
+ public boolean isSubtaskDeadline(ServiceSubtask serviceSubtask, List<ServiceSubtaskPreachform> serviceSubtaskPreachforms){
+ if (ObjectUtils.isNotEmpty(serviceSubtask)) {
+ //鍙湁鍑洪櫌闅忚鍜屼笓鐥呴殢璁挎湁瓒呮椂
+ if(StringUtils.isNotEmpty(serviceSubtask.getServiceType()) &&
+ !serviceSubtask.getServiceType().equals("2") && !serviceSubtask.getServiceType().equals("13")){
+ return true;
+ }
+ }
+ if (Objects.isNull(serviceSubtask) || CollectionUtils.isEmpty(serviceSubtaskPreachforms)) {
+ return false;
+ }
+ // 鍩哄噯鏃跺埢锛氬嚭闄㈡椂闂� + 鍙戦�佹棩锛坰endDay 缂虹渷鎸� 1锛夛紝骞跺厹搴曢伩鍏� NPE/鑴忔暟鎹�
+ ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
+ int sendDay = serviceTask != null && serviceTask.getSendDay() != null ? serviceTask.getSendDay().intValue() : 1;
+ Date deadline = DateUtils.addDays(serviceSubtask.getEndtime(), sendDay);
+ int sumCompensateTime = CollectionUtils.isEmpty(serviceSubtaskPreachforms) ? 0 : serviceSubtaskPreachforms.stream()
+ .mapToInt(x -> x.getCompensateTime() == null ? 0 : Integer.parseInt(x.getCompensateTime()))
+ .sum();
+ sumCompensateTime = sumCompensateTime + 1;
+ // 鍙ˉ鍋挎渶鍚庝竴姝ヨ嚜韬殑琛ュ伩鏃堕棿锛堝ぉ锛夛紝鑴忓�间竴寰嬫寜 0 鍏滃簳
+ deadline = DateUtils.addDays(deadline, sumCompensateTime);
+ // 鍑洪櫌(鍙戦��)鏃堕棿 + 鏈琛ュ伩鏃堕棿 灏忎簬褰撳墠鏃堕棿 -> 瓒呮椂
+ return deadline.getTime() < new Date().getTime();
+ }
}
--
Gitblit v1.9.3