From 2d3b575ed96eee7ccd5b324baa3135d2236934ac Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期五, 13 十一月 2026 16:39:37 +0800
Subject: [PATCH] 【市一】1、登录服务问题处理 2、电话挂断问题处理 3、查询报错问题处理
---
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java | 323 ++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 264 insertions(+), 59 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 768dc79..b5cafc8 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
@@ -69,8 +69,12 @@
import com.ruoyi.task.domain.ServiceSubtask;
import com.ruoyi.task.domain.ServiceSubtaskRecord;
import com.ruoyi.task.domain.ServiceTask;
+import com.ruoyi.task.domain.ServiceTaskSchedule;
+import com.ruoyi.task.domain.ServiceTaskScheduleDetail;
import com.ruoyi.task.mapper.ServiceSubtaskMapper;
import com.ruoyi.task.mapper.ServiceTaskMapper;
+import com.ruoyi.task.mapper.ServiceTaskScheduleMapper;
+import com.ruoyi.task.mapper.ServiceTaskScheduleDetailMapper;
import com.ruoyi.task.domain.ServiceSubtaskDetailTrace;
import com.ruoyi.task.domain.VO.ServiceSubtaskDetailTraceVO;
import com.ruoyi.task.service.IServiceSubtaskDetailTraceService;
@@ -167,6 +171,12 @@
@Autowired
private ServiceSubtaskMapper serviceSubtaskMapper;
+
+ @Autowired
+ private ServiceTaskScheduleMapper serviceTaskScheduleMapper;
+
+ @Autowired
+ private ServiceTaskScheduleDetailMapper serviceTaskScheduleDetailMapper;
@Autowired
private RedisCache redisCache;
@@ -1165,9 +1175,24 @@
serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
List<ServiceSubtaskPreachform> serviceSubtaskPreachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(serviceSubtaskPreachform);
+ if (CollectionUtils.isEmpty(serviceSubtaskPreachforms)) {
+ // current_preachform 鏈夊�间絾鍙戦�佹柟寮忔槑缁嗕竴鏉¢兘娌℃湁锛屽睘浜庝笉鍙慨澶嶇殑鑴忔暟鎹��
+ log.error("銆恈ompensateTask銆戝瓙浠诲姟鍙戦�佹柟寮忔槑缁嗕负绌猴紝subid锛歿}锛宑urrentPreachform锛歿}",
+ serviceSubtask.getId(), serviceSubtask.getCurrentPreachform());
+ closeSubtaskForMissingPreachform(serviceSubtask);
+ continue;
+ }
//鑾峰彇褰撳墠鎵ц鏂瑰紡鐨勫簭鍙�
- Optional<Long> currentSort = serviceSubtaskPreachforms.stream().filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform())).map(ServiceSubtaskPreachform::getSort).findFirst();
- Optional<Long> id = serviceSubtaskPreachforms.stream().filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform())).map(ServiceSubtaskPreachform::getId).findFirst();
+ Optional<Long> currentSort = serviceSubtaskPreachforms.stream()
+ .filter(Objects::nonNull)
+ .filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform()))
+ .map(ServiceSubtaskPreachform::getSort)
+ .findFirst();
+ Optional<Long> id = serviceSubtaskPreachforms.stream()
+ .filter(Objects::nonNull)
+ .filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform()))
+ .map(ServiceSubtaskPreachform::getId)
+ .findFirst();
if (currentSort.isPresent()) {
// 鏂规B锛氬彧澶勭悊褰撳墠瀛愪换鍔♀�斺�斿叕浼楀彿宸查鍙�(service_subtask.sendstate=1 + current_preachform=5)
// 涓旀湭濉啓鏃讹紝鎸夐粯璁ら�夐」瀹屾垚锛岄伩鍏嶈繘鍏ヤ笅涓�绉嶅彂閫佹柟寮忔垨鏈�鍚庝竴姝ヨ秴鏃躲��
@@ -1189,7 +1214,9 @@
}
//1鍏堟鏌ヤ竴涓嬶紝鏄笉鏄湁鎵ц鐘舵�佹槸瀹屾垚鐨勶紙鎬曚箣鍓嶅凡缁忔湁瀹岀殑浜嗭紝娌℃湁灏唖ervuce_subtask鐨勭姸鎬佹敼鎴愬姛锛岃繖閲屽啀妫�鏌ヤ竴涓嬶級
- boolean finishState = serviceSubtaskPreachforms.stream().allMatch(item -> item.getSendstate().equals("9"));
+ boolean finishState = serviceSubtaskPreachforms.stream()
+ .filter(Objects::nonNull)
+ .allMatch(item -> "9".equals(item.getSendstate()));
if (finishState) {
serviceSubtask.setSendstate(6L);
serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
@@ -1205,15 +1232,20 @@
serviceSubtaskMapper.updateServiceSubtask(serviceSubtask);
//淇敼鍙戦�佹柟寮忕殑鐘舵�佷负澶辫触
- serviceSubtaskPreachform.setSendstate("5");
- serviceSubtaskPreachform.setId(id.get());
-
- serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform);
+ if (id.isPresent()) {
+ serviceSubtaskPreachform.setSendstate("5");
+ serviceSubtaskPreachform.setId(id.get());
+ serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform);
+ }
continue;
}
//3.涓嶆槸鏈�鍚庝竴涓紝鑾峰彇鍒颁笅涓�涓墽琛屾柟寮�(鍥犱负閮芥槸鍦ㄤ粖澶╂墽琛岋紝閭e氨鐩存帴鍙戝嚭鍘诲氨瀹屼簡)
sfHandlle(serviceSubtask);
+ } else {
+ log.error("銆恈ompensateTask銆慶urrent_preachform 鍦ㄥ彂閫佹柟寮忔槑缁嗕腑涓嶅瓨鍦紝subid锛歿}锛宑urrentPreachform锛歿}",
+ serviceSubtask.getId(), serviceSubtask.getCurrentPreachform());
+ closeSubtaskForMissingPreachform(serviceSubtask);
}
}
}
@@ -1267,11 +1299,31 @@
}
/**
- * 闅忚-琛ュ伩澶勭悊
+ * 闅忚-琛ュ伩澶勭悊銆�
+ * <p>
+ * 鍗曟潯瀛愪换鍔″紓甯稿彧璁板綍鏃ュ織锛屼笉褰卞搷鍚屼竴鎵规鍏朵粬瀛愪换鍔°��
*
* @param serviceSubtask
*/
private void sfHandlle(ServiceSubtask serviceSubtask) {
+ try {
+ doSfHandlle(serviceSubtask);
+ } catch (Exception e) {
+ log.error("銆恠fHandlle銆戝鐞嗗瓙浠诲姟寮傚父锛宻ubid={}锛宼askid={}锛宱rgid={}",
+ serviceSubtask == null ? null : serviceSubtask.getId(),
+ serviceSubtask == null ? null : serviceSubtask.getTaskid(),
+ serviceSubtask == null ? null : serviceSubtask.getOrgid(), e);
+ }
+ }
+
+ /**
+ * 闅忚-琛ュ伩澶勭悊瀹為檯閫昏緫銆�
+ */
+ private void doSfHandlle(ServiceSubtask serviceSubtask) {
+ if (serviceSubtask == null) {
+ log.error("銆恠fHandlle銆戝瓙浠诲姟涓虹┖锛岃烦杩囧鐞�");
+ return;
+ }
//杩欓噷闇�瑕佹牴鎹韩浠借瘉鍘婚噸(缁欏井淇″皬绋嬪簭鐨勫浐瀹氫换鍔$敤鐨�)
List<ServiceSubtask> serviceSubtaskListFilter = new ArrayList<>();
ServiceTask ivrTask1 = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
@@ -1281,15 +1333,31 @@
//鑾峰彇鍙戦�佹柟寮�
String sendPreachform = getSendPreachform(serviceSubtaskPreachform, serviceSubtask);
log.info("sendPreachform鐨勫彂閫佹柟寮忔槸鍟ワ細{}", sendPreachform);
- if (sendPreachform.equals("-1") || serviceSubtask.getSendstate() == 6 || serviceSubtask.getSendstate() == 5 || serviceSubtask.getSendstate() == 4) {
- //璇存槑宸茬粡鍏ㄩ儴閬嶅巻瀹屼簡锛屽綋鍓嶇殑鎵ц鏂瑰紡搴忓彿鏄渶鍚庝竴涓簡 鎴栬�� 璇ユ偅鑰呭凡缁忛殢璁跨粨鏉燂紙鎴愬姛鎴栧け璐ヤ簡鎴栦笉鎵ц锛�
- log.error("璇存槑宸茬粡鍏ㄩ儴閬嶅巻瀹屼簡锛屽綋鍓嶇殑鎵ц鏂瑰紡搴忓彿鏄渶鍚庝竴涓簡 鎴栬�� 璇ユ偅鑰呭凡缁忛殢璁跨粨鏉燂紙鎴愬姛鎴栧け璐ヤ簡鎴栦笉鎵ц锛�");
+
+ Long sendstate = serviceSubtask.getSendstate();
+ if (Long.valueOf(6L).equals(sendstate)
+ || Long.valueOf(5L).equals(sendstate)
+ || Long.valueOf(4L).equals(sendstate)) {
+ //璇ユ偅鑰呭凡缁忛殢璁跨粨鏉燂紙鎴愬姛銆佸け璐ユ垨涓嶆墽琛岋級
+ log.error("璇ユ偅鑰呭凡缁忛殢璁跨粨鏉燂紙鎴愬姛銆佸け璐ユ垨涓嶆墽琛岋級锛宻ubid={}锛宻endstate={}", serviceSubtask.getId(), sendstate);
return;
}
+ if (StringUtils.isEmpty(sendPreachform)) {
+ // 鑰佹暟鎹彲鑳藉瓨鍦� service_subtask_preachform 缂哄け銆乻ervice_task.preachform_desc 涓虹┖銆�
+ // current_preachform 涓庢槑缁嗕笉涓�鑷寸瓑鎯呭喌銆傛鏃朵笉鑳界户缁紝鍚﹀垯 sendPreachform.equals(...) 浼� NPE銆�
+ closeSubtaskForMissingPreachform(serviceSubtask);
+ return;
+ }
+ if ("-1".equals(sendPreachform)) {
+ //璇存槑宸茬粡鍏ㄩ儴閬嶅巻瀹屼簡锛屽綋鍓嶇殑鎵ц鏂瑰紡搴忓彿鏄渶鍚庝竴涓簡
+ log.error("璇存槑宸茬粡鍏ㄩ儴閬嶅巻瀹屼簡锛屽綋鍓嶇殑鎵ц鏂瑰紡搴忓彿鏄渶鍚庝竴涓簡锛宻ubid={}", serviceSubtask.getId());
+ return;
+ }
+
//鍏堝垽鏂偅鑰呮槸涓嶆槸杩樿鍙戦��
PatArchive patArchive = patArchiveService.selectPatArchiveByPatid(serviceSubtask.getPatid());
log.info("patArchive鐨勫�间负锛歿}", patArchive);
- if (!Objects.isNull(patArchive) && patArchive.getNotrequiredFlag() == "1") {
+ if (!Objects.isNull(patArchive) && "1".equals(patArchive.getNotrequiredFlag())) {
//涓嶉渶瑕佸彂閫�
serviceSubtask.setResult("鎮h�呬笉闇�瑕侀殢璁�");
serviceSubtask.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark()) ? serviceSubtask.getRemark() + "," + "鎮h�呬笉闇�瑕侀殢璁�," + patArchive.getNotrequiredreason() : "鎮h�呬笉闇�瑕侀殢璁�," + patArchive.getNotrequiredreason());
@@ -1300,7 +1368,14 @@
return;
}
- String descByCode = ServiceFromEnum.getDescByCode(Integer.valueOf(sendPreachform));
+ int sendCode = NumberUtils.toInt(sendPreachform, -1);
+ String descByCode = ServiceFromEnum.getDescByCode(sendCode);
+ if (StringUtils.isEmpty(descByCode)) {
+ log.error("銆恠fHandlle銆戝彂閫佹柟寮忕紪鐮侀潪娉曪紝subid={}锛宼askid={}锛宻endPreachform={}",
+ serviceSubtask.getId(), serviceSubtask.getTaskid(), sendPreachform);
+ closeSubtaskForMissingPreachform(serviceSubtask);
+ return;
+ }
// 鈿狅笍 2025 淇锛堝鏁欏紑鍏冲け鏁堬級锛歵ype == 3 鏄�**瀹f暀/閫氱煡**锛堢函鍙戦�併�佹棤浣滅瓟 鈥斺��
// 瑙� setSuccessPreachForm 閲屻�屽鏁欐垨閫氱煡鈥︾洿鎺ユ敼鎴� 9銆嶃�佷互鍙婃湰鏂规硶鍚庨潰
@@ -1399,7 +1474,7 @@
serviceOutPath.setOrgid(serviceSubtask.getOrgid());
iServiceOutPathService.insertServiceOutPath(serviceOutPath);
String url = "";
- String format = String.format("%03X", serviceOutPath.getId());
+ String format = ShortCode.encode(serviceOutPath.getId());
//鍏堝垽鏂竴涓嬪彂鐨勬槸涓嶆槸瀹f暀
log.info("serviceSubtask.getType鐨勫�间负锛歿}", serviceSubtask.getType());
if (!"3".equals(serviceSubtask.getType())) {
@@ -1407,7 +1482,7 @@
url = StringUtils.isNotEmpty(req_path) ? localIP + ":" + req_path + "/wt?p=" + format : localIP + "/wt?p=" + format;
sendMagParam.setUrl(url);
//濡傛灉type鏄闊抽殢璁跨殑璇濓紙璇存槑琛ュ伩鍙戦�佹柟寮忎腑鏈夌數璇濋殢璁跨殑鏂瑰紡锛岃繖閲岀殑澶栭摼灏卞湴鍧�鍙兘鐢�/sf锛�
- if (serviceSubtask.getType().equals("1"))
+ if ("1".equals(serviceSubtask.getType()))
url = StringUtils.isNotEmpty(req_path) ? localIP + ":" + req_path + "/sf?p=" + format : localIP + "/sf?p=" + format;
sendMagParam.setUrl(url);
@@ -1542,7 +1617,7 @@
serviceOutPath.setCreateTime(new Date());
serviceOutPath.setOrgid(serviceSubtask.getOrgid());
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(url);
@@ -1584,6 +1659,46 @@
setSuccessPreachForm(serviceSubtask, sendPreachform, "浜哄伐鍙戦�佹垚鍔�", "2");
}
+ }
+
+ /**
+ * 鑰佹暟鎹厹搴曪細瀛愪换鍔℃病鏈夊彲鐢ㄥ彂閫佹柟寮忔椂锛屾爣璁颁负瓒呮椂骞跺啓娓呭師鍥犮��
+ * <p>
+ * 杩欑被鏁版嵁閫氬父鏉ヨ嚜 {@code service_subtask_preachform} 缂哄け銆亄@code service_task.preachform_desc}
+ * 涓虹┖/闈炴硶锛屾垨 {@code current_preachform} 涓庢槑缁嗕笉涓�鑷淬�傛爣璁颁负缁堟�佸悗涓嶄細鍐嶈
+ * {@code longTaskSend}/{@code compensateTask} 鍙嶅鎹炲彇锛屼篃涓嶄細鍥犱竴鏉¤剰鏁版嵁涓柇鏁存壒浠诲姟銆�
+ */
+ private void closeSubtaskForMissingPreachform(ServiceSubtask serviceSubtask) {
+ if (serviceSubtask == null || serviceSubtask.getId() == null) {
+ log.error("銆恠fHandlle銆戝瓙浠诲姟涓虹┖鎴栫己灏慖D锛屾棤娉曟爣璁版棤鍙戦�佹柟寮�");
+ return;
+ }
+ try {
+ Long currentSendstate = serviceSubtask.getSendstate();
+ if (Long.valueOf(4L).equals(currentSendstate)
+ || Long.valueOf(5L).equals(currentSendstate)
+ || Long.valueOf(6L).equals(currentSendstate)
+ || Long.valueOf(7L).equals(currentSendstate)) {
+ log.warn("銆恠fHandlle銆戝瓙浠诲姟宸叉槸缁堟�侊紝涓嶅啀閲嶅鏍囪銆俿ubid={}锛宻endstate={}",
+ serviceSubtask.getId(), currentSendstate);
+ return;
+ }
+ String reason = "鏈煡璇㈠埌鏈夋晥鍙戦�佹柟寮忥紝浠诲姟鑷姩缁堟锛堟暟鎹紓甯革紝璇锋鏌ervice_subtask_preachform涓巗ervice_task.preachform_desc锛�";
+ // 鍙洿鏂板繀瑕佸瓧娈碉紝閬垮厤鎶婃煡璇㈡椂鐨勬暣琛屽揩鐓ц鐩栧洖鏁版嵁搴撱��
+ ServiceSubtask update = new ServiceSubtask();
+ update.setId(serviceSubtask.getId());
+ update.setSendstate(7L);
+ update.setUpdateTime(new Date());
+ update.setRemark(StringUtils.isNotEmpty(serviceSubtask.getRemark())
+ ? serviceSubtask.getRemark() + "," + reason : reason);
+ serviceSubtaskMapper.updateServiceSubtask(update);
+ log.error("銆恠fHandlle銆戝瓙浠诲姟鏃犳湁鏁堝彂閫佹柟寮忥紝宸叉爣璁颁负瓒呮椂銆俿ubid={}锛宼askid={}锛宱rgid={}锛宑urrentPreachform={}",
+ serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getOrgid(),
+ serviceSubtask.getCurrentPreachform());
+ } catch (Exception e) {
+ log.error("銆恠fHandlle銆戞爣璁版棤鍙戦�佹柟寮忓瓙浠诲姟澶辫触锛宻ubid={}锛宼askid={}",
+ serviceSubtask.getId(), serviceSubtask.getTaskid(), e);
+ }
}
/**
@@ -1684,7 +1799,13 @@
// 鎯呭喌1锛歝urrentPreachform涓虹┖锛屽彇sort涓�1鐨刾reachform
if (StringUtils.isEmpty(serviceSubtask.getCurrentPreachform())) {
- String firstPreachform = serviceSubtaskPreachforms.stream().filter(item -> item.getSort() == 1L).map(ServiceSubtaskPreachform::getPreachform).findFirst().orElse(null);
+ String firstPreachform = serviceSubtaskPreachforms.stream()
+ .filter(Objects::nonNull)
+ .filter(item -> Long.valueOf(1L).equals(item.getSort()))
+ .map(ServiceSubtaskPreachform::getPreachform)
+ .filter(item -> StringUtils.isNotEmpty(item))
+ .findFirst()
+ .orElse(null);
//鏇存柊涓�涓嬪綋鍓嶅彂閫佹椂闂�
if (StringUtils.isNotEmpty(firstPreachform)) {
@@ -1696,11 +1817,17 @@
}
// 鎯呭喌2锛歝urrentPreachform涓嶄负绌猴紝鎵句笅涓�涓猻ort
- Optional<Long> currentSort = serviceSubtaskPreachforms.stream().filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform())).map(ServiceSubtaskPreachform::getSort).findFirst();
+ Optional<Long> currentSort = serviceSubtaskPreachforms.stream()
+ .filter(Objects::nonNull)
+ .filter(item -> serviceSubtask.getCurrentPreachform().equals(item.getPreachform()))
+ .map(ServiceSubtaskPreachform::getSort)
+ .findFirst();
if (currentSort.isPresent()) {
// 妫�鏌ユ槸鍚︽墍鏈塻endstate涓嶇瓑浜�9
- boolean allSendStateNot1AndNot9 = serviceSubtaskPreachforms.stream().allMatch(item -> !item.getSendstate().equals("9"));
+ boolean allSendStateNot1AndNot9 = serviceSubtaskPreachforms.stream()
+ .filter(Objects::nonNull)
+ .allMatch(item -> !"9".equals(item.getSendstate()));
if (!allSendStateNot1AndNot9) {
//璇存槑锛屽湪鏌愮鏂瑰紡鍙戦�佸け璐ュ悗锛屽張鎴愬姛浜嗭紙渚嬪鐭俊鎴栧叕浼楀彿锛屽湪瑙勫畾鏃堕棿澶栨偅鑰呭仛瀹屼簡锛岃繖涓椂鍊欙紝鐘舵�佹敼鎴愪簡9锛�
serviceSubtask.setSendstate(6L);
@@ -1730,7 +1857,13 @@
}
// 鎵惧埌涓嬩竴涓猻ort瀵瑰簲鐨刾reachform
- String nextPreachform = serviceSubtaskPreachforms.stream().filter(item -> nextSort.equals(item.getSort())).map(ServiceSubtaskPreachform::getPreachform).findFirst().orElse("-1");
+ String nextPreachform = serviceSubtaskPreachforms.stream()
+ .filter(Objects::nonNull)
+ .filter(item -> nextSort.equals(item.getSort()))
+ .map(ServiceSubtaskPreachform::getPreachform)
+ .filter(item -> StringUtils.isNotEmpty(item))
+ .findFirst()
+ .orElse("-1");
//鏇存柊涓�涓嬪綋鍓嶅彂閫佹椂闂�
if (StringUtils.isNotEmpty(nextPreachform)) {
@@ -1740,36 +1873,62 @@
}
return nextPreachform;
}
+
+ log.warn("銆恎etSendPreachform銆戞湭鎵惧埌鍙敤鐨勫彂閫佹柟寮忥紝subid={}锛宼askid={}锛宑urrentPreachform={}",
+ serviceSubtask.getId(), serviceSubtask.getTaskid(), serviceSubtask.getCurrentPreachform());
return null;
}
private List<ServiceSubtaskPreachform> addServiceSubtaskPreachform(ServiceSubtask serviceSubtask, String sendstate) {
//灏唒reachformDesc鐨刯son瀵硅薄锛屾斁鍒發ist闆嗗悎涓�
ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
+ if (serviceTask == null) {
+ log.error("ryTask--鍙戦�佹柟寮忓垵濮嬪寲澶辫触锛屼换鍔′笉瀛樺湪锛宼askid={}锛宻ubid={}",
+ serviceSubtask.getTaskid(), serviceSubtask.getId());
+ return Collections.emptyList();
+ }
String preachformDesc = serviceTask.getPreachformDesc();
-
- List<ServiceSubtaskPreachform> sspl = null;
- ObjectMapper objectMapper = new ObjectMapper();
- if (org.apache.commons.lang3.StringUtils.isNotEmpty(preachformDesc)) {
- try {
- sspl = objectMapper.readValue(preachformDesc, new TypeReference<List<ServiceSubtaskPreachform>>() {
- });
- } catch (JsonProcessingException e) {
- log.error("ryTask--preachform杞琇ist<ServiceSubtaskPreachform>鎶ラ敊浜嗭細{}", e.getMessage());
- }
- for (ServiceSubtaskPreachform serviceSubtaskPreachform : sspl) {
- serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
- serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
- //杩欎釜sendstate闇�瑕佸湪鏁版嵁搴撹缃竴涓粯璁ゅ�间负鈥�1鈥�
- serviceSubtaskPreachform.setSendstate("1");
- if (StringUtils.isNotEmpty(sendstate)) serviceSubtaskPreachform.setSendstate(sendstate);
- serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
- serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(serviceSubtaskPreachform);
- }
-
+ if (StringUtils.isEmpty(preachformDesc)) {
+ log.error("ryTask--鍙戦�佹柟寮忓垵濮嬪寲澶辫触锛宲reachform_desc涓虹┖锛宼askid={}锛宻ubid={}",
+ serviceSubtask.getTaskid(), serviceSubtask.getId());
+ return Collections.emptyList();
}
- return sspl;
+ List<ServiceSubtaskPreachform> sspl;
+ ObjectMapper objectMapper = new ObjectMapper();
+ try {
+ sspl = objectMapper.readValue(preachformDesc, new TypeReference<List<ServiceSubtaskPreachform>>() {
+ });
+ } catch (JsonProcessingException e) {
+ log.error("ryTask--preachform杞琇ist<ServiceSubtaskPreachform>鎶ラ敊浜嗭紝taskid={}锛宻ubid={}锛宲reachformDesc={}",
+ serviceSubtask.getTaskid(), serviceSubtask.getId(), preachformDesc, e);
+ return Collections.emptyList();
+ }
+ if (CollectionUtils.isEmpty(sspl)) {
+ log.error("ryTask--preachformDesc瑙f瀽鍚庝负绌猴紝taskid={}锛宻ubid={}锛宲reachformDesc={}",
+ serviceSubtask.getTaskid(), serviceSubtask.getId(), preachformDesc);
+ return Collections.emptyList();
+ }
+
+ List<ServiceSubtaskPreachform> inserted = new ArrayList<>();
+ for (ServiceSubtaskPreachform serviceSubtaskPreachform : sspl) {
+ if (serviceSubtaskPreachform == null) {
+ continue;
+ }
+ if (StringUtils.isEmpty(serviceSubtaskPreachform.getPreachform())) {
+ log.warn("ryTask--preachformDesc涓瓨鍦ㄧ┖鐨刾reachform锛岃烦杩囥�倀askid={}锛宻ubid={}",
+ serviceSubtask.getTaskid(), serviceSubtask.getId());
+ continue;
+ }
+ serviceSubtaskPreachform.setTaskid(serviceSubtask.getTaskid());
+ serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
+ //杩欎釜sendstate闇�瑕佸湪鏁版嵁搴撹缃竴涓粯璁ゅ�间负鈥�1鈥�
+ serviceSubtaskPreachform.setSendstate(StringUtils.isNotEmpty(sendstate) ? sendstate : "1");
+ serviceSubtaskPreachform.setOrgid(serviceSubtask.getOrgid());
+ serviceSubtaskPreachformMapper.insertServiceSubtaskPreachform(serviceSubtaskPreachform);
+ inserted.add(serviceSubtaskPreachform);
+ }
+ return inserted;
}
private Integer setFail(List<ServiceSubtaskPreachform> serviceSubtaskPreachforms, ServiceSubtask serviceSubtask) {
@@ -1862,7 +2021,7 @@
public Boolean setSuccessPreachForm(ServiceSubtask serviceSubtask, String preachform, String remark, String failSendstate) {
log.info("setSuccessPreachForm鐨勫叆鍙備负锛歴erviceSubtask = {}锛� preachform = {}锛� remark = {}锛� failSendstate = {}", serviceSubtask, preachform, remark, failSendstate);
- if (preachform.equals("-1")) {
+ if ("-1".equals(preachform)) {
//璇存槑閮戒笉闇�瑕佹墽琛屼簡
ServiceSubtaskPreachform serviceSubtaskPreachform = new ServiceSubtaskPreachform();
serviceSubtaskPreachform.setSubid(serviceSubtask.getId());
@@ -1884,7 +2043,7 @@
//1:鏈彂閫佺姸鎬�
serviceSubtaskPreachform.setSendstate("1");
//鐢佃瘽鐨勬湭鍙戦�佺姸鎬侊紝闇�瑕佹煡2锛屽洜涓猴紝鏁版嵁鍙兘鍗″湪闃熷垪閲屼簡; 锛堟病杩涢槦鍒楋紝鐢佃瘽鐘舵�佽繕鏄�1锛�
- if (preachform.equals("3") && StringUtils.isNotEmpty(failSendstate) && Long.valueOf(failSendstate) > 2)
+ if ("3".equals(preachform) && NumberUtils.toInt(failSendstate, 0) > 2)
serviceSubtaskPreachform.setSendstate("2");
// //浜哄伐鐨勬湭鍙戦�佺姸鎬侊紝闇�瑕佹煡2
// if (preachform.equals("1") && StringUtils.isNotEmpty(failSendstate) && Long.valueOf(failSendstate) > 2)
@@ -1894,16 +2053,18 @@
if (CollectionUtils.isNotEmpty(serviceSubtaskPreachforms)) {
ServiceSubtaskPreachform serviceSubtaskPreachform1 = serviceSubtaskPreachforms.get(0);
serviceSubtaskPreachform1.setSendstate(failSendstate);
- if (serviceSubtask.getType().equals("3") || serviceSubtask.getType().equals("4")) {
+ if ("3".equals(serviceSubtask.getType()) || "4".equals(serviceSubtask.getType())) {
//濡傛灉鏄鏁欐垨閫氱煡锛屽苟涓斿彂閫佹垚鍔燂紝鐩存帴灏嗗彂閫佺姸鎬佹敼鎴�9
- if (failSendstate.equals("2")) serviceSubtaskPreachform1.setSendstate("9");
+ if ("2".equals(failSendstate)) serviceSubtaskPreachform1.setSendstate("9");
}
serviceSubtaskPreachform1.setRemark(remark);
serviceSubtaskPreachformMapper.updateServiceSubtaskPreachform(serviceSubtaskPreachform1);
log.info("---------serviceSubtaskPreachform1鐨勫叆鍙傛槸 : {}", serviceSubtaskPreachform1);
//濡傛灉褰撳墠鐨刾reachform宸茬粡鏄渶鍚庝竴涓簡锛岄偅鐩存帴灏唖erviceSubtask鐨剆endstate鐘舵�佹敼鎴�7灏辫浜�(鍏ㄨ秴鏃朵簡)
- if (serviceSubtaskPreachform1.getSort() == sspCount.size() && isSubtaskDeadline(serviceSubtask, serviceSubtaskPreachforms)) {
- if (failSendstate.equals("4") || failSendstate.equals("5")) {
+ if (serviceSubtaskPreachform1.getSort() != null
+ && serviceSubtaskPreachform1.getSort() == sspCount.size()
+ && isSubtaskDeadline(serviceSubtask, serviceSubtaskPreachforms)) {
+ if ("4".equals(failSendstate) || "5".equals(failSendstate)) {
serviceSubtask.setCurrentPreachform(preachform);
serviceSubtask.setSendstate(7L);
log.error("setSuccessPreachForm鏂规硶锛屽綋鍓嶇殑preachform宸茬粡鏄渶鍚庝竴涓簡锛屽叏閮ㄦ墽琛屽け璐�");
@@ -1923,9 +2084,9 @@
serviceSubtask.setCurrentPreachform(preachform);
serviceSubtask.setSendstate(3L);
- if (serviceSubtask.getType().equals("3") || serviceSubtask.getType().equals("4")) {
+ if ("3".equals(serviceSubtask.getType()) || "4".equals(serviceSubtask.getType())) {
//濡傛灉鏄鏁欐垨閫氱煡锛屽苟涓斿彂閫佹垚鍔燂紝鍒欑洿鎺ュ皢serviceSubtask鐘舵�佹敼鎴�6L锛堣繖涓偅鑰呮槸娌℃湁棰樺仛鐨勶紝涓嶄細鍐嶈Е鍙戞帴鍙h繘琛岀姸鎬佷慨鏀癸級
- if (failSendstate.equals("2")) {
+ if ("2".equals(failSendstate)) {
serviceSubtask.setSendstate(6L);
}
}
@@ -2052,25 +2213,69 @@
if (Objects.isNull(serviceSubtask) || CollectionUtils.isEmpty(serviceSubtaskPreachforms)) {
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()
+ Date deadline;
+ if (serviceTask != null && "5".equals(serviceTask.getAppltype())) {
+ // 浠诲姟缁勶細鍩哄噯 = schedule_benchmark 瑙f瀽鍑虹殑鏃堕棿 + day_offset锛屼笉鍙犲姞 send_day
+ deadline = resolveTaskGroupDeadlineBase(serviceSubtask);
+ if (deadline == null) {
+ log.warn("銆恑sSubtaskDeadline銆憇ubid锛歿} 浠诲姟缁勫熀鍑嗘椂闂翠负绌猴紝鏃犳硶璁$畻瓒呮椂锛屾寜鏈秴鏃跺鐞�", serviceSubtask.getId());
+ return false;
+ }
+ } else {
+ // 闈炰换鍔$粍锛氬熀鍑� = 鍑洪櫌鏃堕棿 + 鍙戦�佹棩锛坰endDay 缂虹渷鎸� 1锛�
+ if (serviceSubtask.getEndtime() == null) {
+ log.warn("銆恑sSubtaskDeadline銆憇ubid锛歿} endtime涓虹┖锛屾棤娉曡绠楄秴鏃讹紝鎸夋湭瓒呮椂澶勭悊", serviceSubtask.getId());
+ return false;
+ }
+ int sendDay = serviceTask != null && serviceTask.getSendDay() != null ? serviceTask.getSendDay().intValue() : 1;
+ deadline = DateUtils.addDays(serviceSubtask.getEndtime(), sendDay);
+ }
+ int sumCompensateTime = serviceSubtaskPreachforms.stream()
.mapToInt(x -> NumberUtils.toInt(x.getCompensateTime(), 0))
.sum();
sumCompensateTime = sumCompensateTime + 1;
- // 鍙ˉ鍋挎渶鍚庝竴姝ヨ嚜韬殑琛ュ伩鏃堕棿锛堝ぉ锛夛紝鑴忓�间竴寰嬫寜 0 鍏滃簳
+ // 琛ュ伩鏃堕棿鑴忓�间竴寰嬫寜 0 鍏滃簳锛屾渶鍚庡啀鍔� 1 澶╁闄�
deadline = DateUtils.addDays(deadline, sumCompensateTime);
- // 鍑洪櫌(鍙戦��)鏃堕棿 + 鏈琛ュ伩鏃堕棿 灏忎簬褰撳墠鏃堕棿 -> 瓒呮椂
return deadline.getTime() < new Date().getTime();
}
/**
+ * 浠诲姟缁勫熀鍑嗘椂闂达細鎸� schedule_benchmark 瑙f瀽鍚庡姞 day_offset銆�
+ * 0/鍏跺畠-鑷畾涔夋椂闂� 1-鍏ラ櫌 2-鍑洪櫌 3-灏辫瘖 4-鍏ョ粍
+ */
+ private Date resolveTaskGroupDeadlineBase(ServiceSubtask serviceSubtask) {
+ if (serviceSubtask.getScheduleId() == null || serviceSubtask.getScheduleDetailId() == null) {
+ return null;
+ }
+ ServiceTaskSchedule schedule = serviceTaskScheduleMapper.selectServiceTaskScheduleById(serviceSubtask.getScheduleId());
+ ServiceTaskScheduleDetail detail = serviceTaskScheduleDetailMapper.selectServiceTaskScheduleDetailById(serviceSubtask.getScheduleDetailId());
+ if (schedule == null || detail == null || detail.getDayOffset() == null) {
+ return null;
+ }
+ Date base;
+ Integer benchmark = schedule.getScheduleBenchmark() == null ? 0 : schedule.getScheduleBenchmark();
+ switch (benchmark) {
+ case 1:
+ base = serviceSubtask.getStarttime();
+ break;
+ case 2:
+ base = serviceSubtask.getEndtime();
+ break;
+ case 3:
+ base = serviceSubtask.getAdmindate();
+ break;
+ case 4:
+ base = serviceSubtask.getCreateTime();
+ break;
+ default:
+ base = schedule.getScheduleBenchmarkCustomTime();
+ break;
+ }
+ return base == null ? null : DateUtils.addDays(base, detail.getDayOffset());
+ }
+
+ /**
* 澶勭悊瓒呮椂闅忚浠诲姟锛堥殢璁胯秴鏃� 鈫� 鐢熸垚"鍐嶆闅忚"锛�
* <p>
* 鎵弿銆屽嚭闄㈡弧 deadlineDay 澶╀粛鏈畬鎴愩�嶇殑棣栨闅忚浠诲姟锛坰endstate=7 + visit_count=1锛夛紝
--
Gitblit v1.9.3