From 6427886a12c3c6cd56c5dde2e3437d0d608da59c Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期一, 09 十一月 2026 14:23:48 +0800
Subject: [PATCH] 修复管理员科室病区为空与延续护理任务出院维度过滤
---
ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java | 299 ++++++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 212 insertions(+), 87 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java b/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
index bc3425e..5ddc7ab 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/component/RedisMqReceiver.java
@@ -18,14 +18,12 @@
import com.ruoyi.system.mapper.SysConfigMapper;
import com.ruoyi.system.service.ISysConfigService;
import com.smartor.domain.*;
-import com.smartor.domain.entity.ServiceSubtaskEntity;
import com.smartor.mapper.*;
import com.smartor.service.IBaseSmsaccountService;
-import com.smartor.service.IServiceOutPathService;
-import com.smartor.service.IServiceSubtaskRecordService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.connection.Message;
@@ -39,6 +37,22 @@
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
+import com.ruoyi.template.domain.HeLibrary;
+import com.ruoyi.template.api.TemplateFacade;
+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.domain.ServiceSubtaskRecord;
+import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.mapper.ServiceSubtaskMapper;
+import com.ruoyi.task.mapper.ServiceTaskMapper;
+import com.ruoyi.task.domain.ServiceOutPath;
+import com.ruoyi.task.service.IServiceOutPathService;
+import com.ruoyi.task.domain.ServiceSubtaskPreachform;
+import com.ruoyi.task.domain.SendMagParam;
+import com.ruoyi.task.service.IServiceSubtaskRecordService;
+import com.ruoyi.task.mapper.ServiceSubtaskPreachformMapper;
+import com.ruoyi.patarchive.mapper.PatArchiveMapper;
@Slf4j
@Component//鐩戝惉姝ら槦鍒�
public class RedisMqReceiver extends KeyExpirationEventMessageListener {
@@ -58,12 +72,26 @@
@Autowired
private IServiceOutPathService iServiceOutPathService;
+ /**
+ * 妯℃澘鏁版嵁涓�寰嬬粡 ruoyi-template 鐨勯棬闈㈠彇鐢紙璺ㄦā鍧楁暟鎹闂師鍒欙級銆�
+ */
+ @Autowired
+ private TemplateFacade templateFacade;
+
+ /**
+ * 瀹f暀妯″潡鐨�<b>甯搁┗闂ㄩ潰</b>锛岀敤浜庡垽 {@code sys_config: publicity.enabled}銆�
+ * <p>
+ * 鈿狅笍 2025 淇锛氭湰绫诲師鏈�<b>瀹屽叏娌¤瀹f暀寮�鍏�</b> 鈥斺��
+ * {@code tsakHandle} 鐨勫叕浼楀彿 {@code type == 3} 鍒嗘敮锛圠518銆�//瀹f暀銆嶏級
+ * 鐓у父鎷煎鏁欓摼鎺ュ苟鍙戦�侊紝鎵�浠ュ叧鎺� {@code publicity.enabled} 涔熸嫤涓嶄綇杩欐潯璺��
+ */
+ @Autowired
+ private com.ruoyi.publicity.api.PublicityFacade publicityFacade;
+
@Autowired
private ServiceSubtaskMapper ivrTaskcallMapper;
- @Autowired
- private HeLibraryMapper heLibraryMapper;
@Autowired
private ServiceTaskMapper ivrTaskMapper;
@@ -208,6 +236,22 @@
continue;
}
String descByCode = ServiceFromEnum.getDescByCode(Integer.valueOf(sendPreachform));
+
+ // 鈿狅笍 2025 淇锛堝鏁欏紑鍏冲け鏁堬級锛歵ype == 3 鏄�**瀹f暀/閫氱煡**锛堢函鍙戦�併�佹棤浣滅瓟锛�
+ // 瑙� setFailPreachForm 閲屻�屽鏁欐垨閫氱煡鈥︾洿鎺ユ敼鎴� 9銆嶇殑鍒ゅ畾锛夛紝鏁存潯娲惧彂鐨勬墍鏈夐�氶亾
+ // 锛堢數璇�/鐭俊/鍏紬鍙�/浜哄伐锛夊彂鐨勯兘鏄鏁欏唴瀹广�傛墍浠ュ叧鎺� publicity.enabled 鏃�
+ // 搴斿綋**涓�涓�氶亾閮戒笉鍙�**锛岃�屼笉鏄彧鎷﹀叾涓竴娈点��
+ //
+ // 鈿狅笍 鍒绘剰**涓嶆帹杩� subtask 鐘舵�併�佷篃涓嶈澶辫触**锛氬叧闂槸"鏆傛椂涓嶅彂"锛�
+ // 涓嶆槸"杩欎釜鎮h�呬笉闇�瑕佸鏁�"銆傝嫢鏍囨垚澶辫触/涓嶉渶瑕侊紝寮�鍏虫仮澶嶅悗杩欐潯瀹f暀灏辨案杩滀涪浜嗐��
+ // 淇濇寔 sendstate=2 涓嶅姩锛屽紑鍏虫墦寮�鍚庝笅涓�娆℃淳鍙戜細鐓у父鍙戝嚭銆�
+ // 锛堟湰鏂规硶鐨勮皟鐢ㄦ柟 onMessage 澶勭悊瀹屽嵆鍒� Redis 娑堟伅銆佷笉閲嶆姇锛屾墍浠ヤ笉浼氶�犳垚閲嶆姇椋庢毚銆傦級
+ if (type != null && type == 3 && !publicityFacade.isEnabled()) {
+ log.warn("銆愬鏁欍�戞ā鍧楁湭鍚敤锛堝弬鏁伴厤缃� publicity.enabled=false锛夛紝璺宠繃瀹f暀鍙戦�併�俿ubtaskId={}, patid={}",
+ serviceSubtask.getId(), serviceSubtask.getPatid());
+ continue;
+ }
+
if (descByCode.equals("鐢佃瘽")) {
try {
ServiceTask ivrTask = ivrTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
@@ -293,14 +337,14 @@
serviceOutPath.setParam6(subId);
serviceOutPath.setCreateTime(new Date());
serviceOutPath.setOrgid(serviceSubtask.getOrgid());
- serviceOutPath.setDeptCode(serviceSubtask.getDeptcode());
+ serviceOutPath.setDeptCode(serviceSubtask.getLeaveldeptcode());
serviceOutPath.setWardCode(serviceSubtask.getLeavehospitaldistrictcode());
- serviceOutPath.setDeptName(serviceSubtask.getDeptname());
+ serviceOutPath.setDeptName(serviceSubtask.getLeaveldeptname());
serviceOutPath.setWardName(serviceSubtask.getLeavehospitaldistrictname());
iServiceOutPathService.insertServiceOutPath(serviceOutPath);
// sendMagParam.setUrl(ip + ":" + req_path + "/followvisit/particty?param1=" + taskId + "¶m2=" + patid + "¶m5=false");
//杞垚16杩涘埗
- String format = String.format("%03X", serviceOutPath.getId());
+ String format = ShortCode.encode(serviceOutPath.getId());
serviceOutPath.setRadix(format);
serviceOutPath.setUpdateTime(new Date());
serviceOutPath.setUrl(ip + ":" + req_path + "/sf?p=" + format);
@@ -331,12 +375,12 @@
serviceOutPath.setParam3(ivrTask1.getTaskName());
serviceOutPath.setCreateTime(new Date());
serviceOutPath.setOrgid(serviceSubtask.getOrgid());
- serviceOutPath.setDeptCode(serviceSubtask.getDeptcode());
+ serviceOutPath.setDeptCode(serviceSubtask.getLeaveldeptcode());
serviceOutPath.setWardCode(serviceSubtask.getLeavehospitaldistrictcode());
- serviceOutPath.setDeptName(serviceSubtask.getDeptname());
+ serviceOutPath.setDeptName(serviceSubtask.getLeaveldeptname());
serviceOutPath.setWardName(serviceSubtask.getLeavehospitaldistrictname());
iServiceOutPathService.insertServiceOutPath(serviceOutPath);
- String format = String.format("%03X", serviceOutPath.getId());
+ String format = ShortCode.encode(serviceOutPath.getId());
serviceOutPath.setRadix(format);
serviceOutPath.setUpdateTime(new Date());
serviceOutPath.setUrl(StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format);
@@ -371,15 +415,18 @@
serviceOutPath.setParam3(ivrTask1.getTaskName());
serviceOutPath.setCreateTime(new Date());
serviceOutPath.setOrgid(serviceSubtask.getOrgid());
- serviceOutPath.setDeptCode(serviceSubtask.getDeptcode());
+ serviceOutPath.setDeptCode(serviceSubtask.getLeaveldeptcode());
serviceOutPath.setWardCode(serviceSubtask.getLeavehospitaldistrictcode());
- serviceOutPath.setDeptName(serviceSubtask.getDeptname());
+ serviceOutPath.setDeptName(serviceSubtask.getLeaveldeptname());
serviceOutPath.setWardName(serviceSubtask.getLeavehospitaldistrictname());
iServiceOutPathService.insertServiceOutPath(serviceOutPath);
String url = "";
- String format = String.format("%03X", serviceOutPath.getId());
+ String format = ShortCode.encode(serviceOutPath.getId());
//闇�瑕侀�氳繃妯℃澘ID鍘诲垽鏂鍙戠殑鍐呭鏄鏁欒繕鏄�氱煡
- HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(serviceSubtask.getLibtemplateid());
+ // 鈿狅笍 涓� RyTask 鍚屽彛寰勶細**鍒绘剰涓�**涓� TemplateModuleDisabledException 闄嶇骇 鈥斺��
+ // 妯℃澘妯″潡鍏抽棴鏃跺鏁欏唴瀹瑰彇涓嶅埌銆佺煭淇$‘瀹炲彂涓嶅嚭鍘伙紝澶栧眰 try-catch 濡傚疄璁板け璐�
+ // 骞惰蛋鏃㈡湁鐨勯�氶亾鍗囩骇鏈哄埗銆傜‖璁版垚鍔熺瓑浜庣敤鍋囪褰曟帺鐩�"娌″彂鍑哄幓"銆�
+ HeLibrary heLibrary = templateFacade.findHeLibraryById(serviceSubtask.getLibtemplateid());
if (heLibrary.getHetype().equals("1")) {
sendMagParam.setPhone(serviceSubtask.getPhone());
url = StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/xj?p=" + format : ip + "/xj?p=" + format;
@@ -470,12 +517,12 @@
serviceOutPath.setParam6(subId);
serviceOutPath.setCreateTime(new Date());
serviceOutPath.setOrgid(serviceSubtask.getOrgid());
- serviceOutPath.setDeptCode(serviceSubtask.getDeptcode());
+ serviceOutPath.setDeptCode(serviceSubtask.getLeaveldeptcode());
serviceOutPath.setWardCode(serviceSubtask.getLeavehospitaldistrictcode());
- serviceOutPath.setDeptName(serviceSubtask.getDeptname());
+ serviceOutPath.setDeptName(serviceSubtask.getLeaveldeptname());
serviceOutPath.setWardName(serviceSubtask.getLeavehospitaldistrictname());
iServiceOutPathService.insertServiceOutPath(serviceOutPath);
- String format = String.format("%03X", serviceOutPath.getId());
+ String format = ShortCode.encode(serviceOutPath.getId());
serviceOutPath.setRadix(format);
serviceOutPath.setUpdateTime(new Date());
url = ip + ":" + req_path + "/sf?p=" + format;
@@ -490,12 +537,12 @@
serviceOutPath.setParam6(subId);
serviceOutPath.setCreateTime(new Date());
serviceOutPath.setOrgid(serviceSubtask.getOrgid());
- serviceOutPath.setDeptCode(serviceSubtask.getDeptcode());
+ serviceOutPath.setDeptCode(serviceSubtask.getLeaveldeptcode());
serviceOutPath.setWardCode(serviceSubtask.getLeavehospitaldistrictcode());
- serviceOutPath.setDeptName(serviceSubtask.getDeptname());
+ serviceOutPath.setDeptName(serviceSubtask.getLeaveldeptname());
serviceOutPath.setWardName(serviceSubtask.getLeavehospitaldistrictname());
iServiceOutPathService.insertServiceOutPath(serviceOutPath);
- String format = String.format("%03X", serviceOutPath.getId());
+ String format = ShortCode.encode(serviceOutPath.getId());
url = StringUtils.isNotEmpty(req_path) ? ip + ":" + req_path + "/wt?p=" + format : ip + "/wt?p=" + format;
//濡傛灉type鏄闊抽殢璁跨殑璇濓紙璇存槑琛ュ伩鍙戦�佹柟寮忎腑鏈夌數璇濋殢璁跨殑鏂瑰紡锛岃繖閲岀殑澶栭摼灏卞湴鍧�鍙兘鐢�/sf锛�
@@ -514,16 +561,16 @@
serviceOutPath.setParam3(ivrTask1.getTaskName());
serviceOutPath.setParam6(subId);
serviceOutPath.setCreateTime(new Date());
- serviceOutPath.setDeptCode(serviceSubtask.getDeptcode());
+ serviceOutPath.setDeptCode(serviceSubtask.getLeaveldeptcode());
serviceOutPath.setWardCode(serviceSubtask.getLeavehospitaldistrictcode());
- serviceOutPath.setDeptName(serviceSubtask.getDeptname());
+ serviceOutPath.setDeptName(serviceSubtask.getLeaveldeptname());
serviceOutPath.setWardName(serviceSubtask.getLeavehospitaldistrictname());
serviceOutPath.setOrgid(serviceSubtask.getOrgid());
iServiceOutPathService.insertServiceOutPath(serviceOutPath);
- String format = String.format("%03X", serviceOutPath.getId());
+ String format = ShortCode.encode(serviceOutPath.getId());
//闇�瑕侀�氳繃妯℃澘ID鍘诲垽鏂鍙戠殑鍐呭鏄鏁欒繕鏄�氱煡
-// HeLibrary heLibrary = heLibraryMapper.selectHeLibraryById(serviceSubtask.getLibtemplateid());
+// HeLibrary heLibrary = templateFacade.findHeLibraryById(serviceSubtask.getLibtemplateid());
// if (heLibrary.getHetype().equals("1")) {
// sendMagParam.setPhone(serviceSubtask.getPhone());
// sendMagParam.setUrl(ip + ":" + req_path + "/xj?p=" + format);
@@ -586,10 +633,15 @@
continue;
}
//鍦ㄥ瓙浠诲姟琛ㄩ噷璁板綍涓�涓�
- setFailPreachForm(serviceSubtask, sendPreachform, "鍏紬鍙峰彂閫佹垚鍔�", "2");
+ Boolean stateUpdated = setFailPreachForm(serviceSubtask, sendPreachform, "鍏紬鍙峰彂閫佹垚鍔�", "2");
+ if (!Boolean.TRUE.equals(stateUpdated)) {
+ log.error("鍏紬鍙峰彂閫佹垚鍔熶絾鏇存柊瀛愪换鍔$姸鎬佸け璐ワ紝subid锛歿}锛宲reachform锛歿}", serviceSubtask.getId(), sendPreachform);
+ continue;
+ }
//浠诲姟鍙戦�佽褰�
ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord();
serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString());
+ serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId());
serviceSubtaskRecord.setUuid(UUID.randomUUID().toString());
serviceSubtaskRecord.setTasktype(serviceSubtask.getType());
serviceSubtaskRecord.setPreachform("5");
@@ -686,15 +738,15 @@
List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
- Optional<String> ct = serviceSubtaskPreachforms.stream().filter(item -> currentPreachform.equals(item.getPreachform())).map(ServiceSubtaskPreachform::getCompensateTime).findFirst();
- String compensateTime = "0";
- if (ct.isPresent()) compensateTime = ct.get();
- int hoursToAdd = Integer.valueOf(compensateTime) * 24;
+ Optional<String> ct = serviceSubtaskPreachforms.stream()
+ .filter(item -> Objects.equals(currentPreachform, item.getPreachform()))
+ .map(ServiceSubtaskPreachform::getCompensateTime)
+ .findFirst();
+ int daysToAdd = ct.map(value -> NumberUtils.toInt(value, 0)).orElse(0);
Calendar calendar = Calendar.getInstance();
- calendar.setTime(visitTime);
- calendar.add(Calendar.HOUR_OF_DAY, hoursToAdd);
- Date newDate = calendar.getTime();
- return newDate;
+ calendar.setTime(visitTime == null ? new Date() : visitTime);
+ calendar.add(Calendar.HOUR_OF_DAY, daysToAdd * 24);
+ return calendar.getTime();
}
return visitTime;
}
@@ -789,7 +841,7 @@
*/
public Boolean setFailPreachForm(ServiceSubtask serviceSubtask, String preachform, String remark, String failSendstate) {
log.info("^^^^^^^^^--------setFailPreachForm鐨勫叆鍙備负serviceSubtask锛歿} 锛宲reachform鍊间负锛歿}锛� failSendstate锛歿}", serviceSubtask, preachform, failSendstate);
- if (preachform.equals("-1")) {
+ if ("-1".equals(preachform)) {
//璇存槑閮戒笉闇�瑕佹墽琛屼簡
ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
@@ -797,73 +849,142 @@
serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
serviceSubtaskPreachform.setSendstate(failSendstate);
serviceSubtaskPreachform.setCurrentSendTime(new Date());
- if (serviceSubtask.getType().equals("3") || serviceSubtask.getType().equals("4")) {
+ if (isEducationOrNotice(serviceSubtask) && "2".equals(failSendstate)) {
//濡傛灉鏄鏁欐垨閫氱煡锛屽苟涓斿彂閫佹垚鍔燂紝鐩存帴灏嗗彂閫佺姸鎬佹敼鎴�9
- if (failSendstate.equals("2")) serviceSubtaskPreachform.setSendstate("9");
+ serviceSubtaskPreachform.setSendstate("9");
}
serviceSubtaskPreachformMapper.updateSSPByCondition(serviceSubtaskPreachform);
return true;
}
- //灏嗙姸鎬佽缃负澶辫触
- ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
- serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
- serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
- serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
- //鑾峰彇璇ユ偅鑰呯殑鍙戦�佹柟寮忔�绘暟
- List<ServiceSubtaskPreachform> spSize = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
- log.error("-------spSize鐨勫�间负锛歿}", spSize);
- serviceSubtaskPreachform.setPreachform(preachform);
- //1:鏈彂閫佺姸鎬�
- serviceSubtaskPreachform.setSendstate("1");
- log.info("---serviceSubtaskPreachform鍏ュ弬涓猴細{}", serviceSubtaskPreachform);
- List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
- log.info("---serviceSubtaskPreachform杩斿弬涓猴細{}", serviceSubtaskPreachforms);
- //鐢佃瘽鐨勬湭鍙戦�佺姸鎬侊紝闇�瑕佹煡2锛屽洜涓猴紝鏁版嵁鍙兘鍗″湪闃熷垪閲屼簡(涔熸湁鍙兘娌℃湁鎷夊彇锛宻endstate=1,鎵�浠ュ鏋滄槸鐢佃瘽鐘舵�佸垽鏂璼erviceSubtaskPreachforms鏄笉鏄负绌�)
- if (preachform.equals("3") && CollectionUtils.isEmpty(serviceSubtaskPreachforms)) {
- serviceSubtaskPreachform.setSendstate("2");
- serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
- }
- if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
- ServiceSubtaskPreachform serviceSubtaskPreachform1 = serviceSubtaskPreachforms.get(0);
- serviceSubtaskPreachform1.setSendstate(failSendstate);
- if (serviceSubtask.getType().equals("3") || serviceSubtask.getType().equals("4")) {
- //濡傛灉鏄鏁欐垨閫氱煡锛屽苟涓斿彂閫佹垚鍔燂紝鐩存帴灏嗗彂閫佺姸鎬佹敼鎴�9
- if (failSendstate.equals("2")) serviceSubtaskPreachform1.setSendstate("9");
- }
- serviceSubtaskPreachform1.setRemark(remark);
- serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform1);
- //濡傛灉褰撳墠鐨刾reachform宸茬粡鏄渶鍚庝竴涓簡,骞朵笖鏈杩樻槸鍙戦�佸け璐ワ紝閭g洿鎺ュ皢serviceSubtask鐨剆endstate鐘舵�佹敼鎴�5灏辫浜�(鍏ㄥけ璐ヤ簡)
- if (CollectionUtils.isNotEmpty(spSize) && serviceSubtaskPreachform1.getSort() == spSize.size()
- && isSubtaskDeadline(serviceSubtask, serviceSubtaskPreachforms)) {
- if (serviceSubtaskPreachform1.getSort() == spSize.size()) {
- if (failSendstate.equals("4") || failSendstate.equals("5")) {
- serviceSubtask.setCurrentPreachform(preachform);
- serviceSubtask.setSendstate(7L);
- serviceSubtask.setFinishtime(null);
- serviceSubtask.setRemark("澶勭悊琛ュ伩浠诲姟,褰撳墠澶勭悊鏈�鍚庤ˉ鍋匡紝鍏ㄩ儴鎵ц澶辫触(瓒呮椂)");
- serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
- return true;
- }
- }
- }
- } else {
+ // 鏌ヨ璇ュ瓙浠诲姟鐨勫叏閮ㄥ彂閫佹柟寮忥紝涓嶅啀鍙煡 sendstate=1銆�
+ // 绗竴娆″彂閫佸悗璇ヨ鍙兘宸茬粡鍙樻垚 sendstate=2锛岄噸璇曟椂浠嶉渶瑕佸畾浣嶅埌鍚屼竴琛屻��
+ ServiceSubtaskPreachform query = new ServiceSubtaskPreachform();
+ query.setSubid(serviceSubtask.getId());
+ query.setTaskid(serviceSubtask.getTaskid());
+ query.setOrgid(serviceSubtask.getOrgid());
+ List<ServiceSubtaskPreachform> allPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(query);
+ log.info("---serviceSubtaskPreachform杩斿弬涓猴細{}", allPreachforms);
+ if (CollectionUtils.isEmpty(allPreachforms)) {
log.error("銆怣Q涓鎮h�呮病鏈夋煡璇㈠埌灞炰簬浠栫殑鍙戦�佹柟寮忥紝subid锛歿},prechform:{},orgid:{}銆�", serviceSubtask.getId(), preachform, serviceSubtask.getOrgid());
return false;
}
- log.info("^^^^^^^^^--------preachform鐨勫�间负锛歿}", preachform);
+
+ // 鎸� getSendPreachform 鐨勯�夋嫨瑙勫垯瀹氫綅鏈瀹為檯澶勭悊鐨勫彂閫佹柟寮忚銆�
+ ServiceSubtaskPreachform currentPreachformRow = findCurrentPreachformRow(allPreachforms, serviceSubtask, preachform);
+ if (currentPreachformRow == null) {
+ log.error("銆怣Q涓鎮h�呮病鏈夋煡璇㈠埌褰撳墠鍙戦�佹柟寮忥紝subid锛歿},prechform:{},orgid:{}銆�", serviceSubtask.getId(), preachform, serviceSubtask.getOrgid());
+ return false;
+ }
+
+ // 鍏堣惤搴� service_subtask 鐘舵�侊紝鍐嶆洿鏂板彂閫佹柟寮忔槑缁嗐��
+ // 杩欐牱鍗充娇鍚庣画姝ラ寮傚父锛�60 绉掗噸璇曚篃涓嶄細鍐嶆閫変腑骞跺彂閫併��
serviceSubtask.setCurrentPreachform(preachform);
- serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime(), serviceSubtask.getCurrentPreachform()));
+ serviceSubtask.setVisitTime(getNextVisitTime(serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getVisitTime(), preachform));
serviceSubtask.setSendstate(3L);
- if (serviceSubtask.getType().equals("3") || serviceSubtask.getType().equals("4")) {
+ if (isEducationOrNotice(serviceSubtask) && "2".equals(failSendstate)) {
//濡傛灉鏄鏁欐垨閫氱煡锛屽苟涓斿彂閫佹垚鍔燂紝鍒欑洿鎺ュ皢serviceSubtask鐘舵�佹敼鎴�6L锛堣繖涓偅鑰呮槸娌℃湁棰樺仛鐨勶紝涓嶄細鍐嶈Е鍙戞帴鍙h繘琛岀姸鎬佷慨鏀癸級
- if (failSendstate.equals("2")) {
- serviceSubtask.setSendstate(6L);
- }
+ serviceSubtask.setSendstate(6L);
}
serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+
+ // 鏇存柊褰撳墠鍙戦�佹柟寮忔槑缁嗭紱鍙戦�佹垚鍔熸椂鍏佽褰撳墠琛屽凡缁忔槸 sendstate=2銆�
+ currentPreachformRow.setSendstate(failSendstate);
+ if (isEducationOrNotice(serviceSubtask) && "2".equals(failSendstate)) {
+ currentPreachformRow.setSendstate("9");
+ }
+ currentPreachformRow.setRemark(remark);
+ serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(currentPreachformRow);
+
+ // 鍙湁鏈�鍚庝竴姝ヤ笖鍙戦�佸け璐ワ紙4/5锛夋椂鎵嶉渶瑕佸垽鏂秴鏃跺苟缃负 7銆�
+ boolean lastStep = currentPreachformRow.getSort() != null
+ && currentPreachformRow.getSort() == allPreachforms.size();
+ if (lastStep && ("4".equals(failSendstate) || "5".equals(failSendstate))
+ && isSubtaskDeadline(serviceSubtask, allPreachforms)) {
+ serviceSubtask.setSendstate(7L);
+ serviceSubtask.setFinishtime(null);
+ serviceSubtask.setRemark("澶勭悊琛ュ伩浠诲姟,褰撳墠澶勭悊鏈�鍚庤ˉ鍋匡紝鍏ㄩ儴鎵ц澶辫触(瓒呮椂)");
+ serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
+ }
return true;
+ }
+
+ /**
+ * 鍒ゆ柇鏄惁涓哄鏁欐垨閫氱煡绫诲瀷銆�
+ */
+ private boolean isEducationOrNotice(ServiceSubtask serviceSubtask) {
+ return serviceSubtask != null
+ && ("3".equals(serviceSubtask.getType()) || "4".equals(serviceSubtask.getType()));
+ }
+
+ /**
+ * 瀹氫綅鏈瀹為檯澶勭悊鐨勫彂閫佹柟寮忚銆�
+ * 閫夋嫨瑙勫垯涓� getSendPreachform 淇濇寔涓�鑷达細
+ * 1. current_preachform 涓虹┖鏃跺彇 sort=1锛�
+ * 2. current_preachform 涓嶄负绌烘椂鍙� current_preachform 瀵瑰簲 sort 鐨勪笅涓�姝ワ紱
+ * 3. 鍏滃簳鎸夊彂閫佹柟寮忓尮閰嶏紝浼樺厛鍙� current_send_time 鏈�杩戠殑涓�琛岋紝鍐嶅彇 sort 杈冨皬鐨勪竴琛屻��
+ */
+ private ServiceSubtaskPreachform findCurrentPreachformRow(List<ServiceSubtaskPreachform> rows,
+ ServiceSubtask serviceSubtask,
+ String preachform) {
+ if (StringUtils.isEmpty(serviceSubtask.getCurrentPreachform())) {
+ for (ServiceSubtaskPreachform row : rows) {
+ if (Objects.equals(preachform, row.getPreachform())
+ && row.getSort() != null && row.getSort() == 1L) {
+ return row;
+ }
+ }
+ } else {
+ Long currentSort = null;
+ for (ServiceSubtaskPreachform row : rows) {
+ if (Objects.equals(serviceSubtask.getCurrentPreachform(), row.getPreachform())) {
+ currentSort = row.getSort();
+ break;
+ }
+ }
+ if (currentSort != null) {
+ Long nextSort = currentSort + 1;
+ for (ServiceSubtaskPreachform row : rows) {
+ if (Objects.equals(nextSort, row.getSort())
+ && Objects.equals(preachform, row.getPreachform())) {
+ return row;
+ }
+ }
+ }
+ }
+
+ ServiceSubtaskPreachform target = null;
+ for (ServiceSubtaskPreachform row : rows) {
+ if (!Objects.equals(preachform, row.getPreachform())) {
+ continue;
+ }
+ if (target == null) {
+ target = row;
+ continue;
+ }
+ Date rowTime = row.getCurrentSendTime();
+ Date targetTime = target.getCurrentSendTime();
+ if (rowTime != null && (targetTime == null || rowTime.after(targetTime))) {
+ target = row;
+ } else if (Objects.equals(rowTime, targetTime) && comparePreachformSort(row, target) < 0) {
+ target = row;
+ }
+ }
+ return target;
+ }
+
+ private int comparePreachformSort(ServiceSubtaskPreachform row, ServiceSubtaskPreachform target) {
+ if (row.getSort() == null && target.getSort() == null) {
+ return 0;
+ }
+ if (row.getSort() == null) {
+ return 1;
+ }
+ if (target.getSort() == null) {
+ return -1;
+ }
+ return row.getSort().compareTo(target.getSort());
}
private String getKey() {
@@ -913,11 +1034,15 @@
return false;
}
// 鍩哄噯鏃跺埢锛氬嚭闄㈡椂闂� + 鍙戦�佹棩锛坰endDay 缂虹渷鎸� 1锛夛紝骞跺厹搴曢伩鍏� NPE/鑴忔暟鎹�
+ if (serviceSubtask.getEndtime() == null) {
+ log.warn("銆恑sSubtaskDeadline銆憇ubid锛歿} endtime涓虹┖锛屾棤娉曡绠楄秴鏃讹紝鎸夋湭瓒呮椂澶勭悊", serviceSubtask.getId());
+ return false;
+ }
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()))
+ .mapToInt(x -> NumberUtils.toInt(x.getCompensateTime(), 0))
.sum();
sumCompensateTime = sumCompensateTime + 1;
// 鍙ˉ鍋挎渶鍚庝竴姝ヨ嚜韬殑琛ュ伩鏃堕棿锛堝ぉ锛夛紝鑴忓�间竴寰嬫寜 0 鍏滃簳
--
Gitblit v1.9.3