From 599beddc80e7e50b2099bacdbf7df2d89df00ef2 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期六, 07 十一月 2026 14:42:31 +0800
Subject: [PATCH] fix: 完成时状态与超时判断区分任务组
---
ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml | 73 +++++++++++++++++++++---------------
1 files changed, 42 insertions(+), 31 deletions(-)
diff --git a/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml
index 9b29291..789a25d 100644
--- a/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml
+++ b/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml
@@ -267,50 +267,61 @@
</sql>
<!-- 瓒呮椂瀹屾垚銆佸欢鏈熷畬鎴愰�昏緫 瀹屾垚鏃剁姸鎬�(finish_state)璁$畻锛氫粎褰撴湰娆℃洿鏂版妸 sendstate 缃负 6锛堥殢璁垮畬鎴愶級鏃朵娇鐢ㄣ��
- 鍩哄噯鎴鏃堕棿 base = endtime + send_day(缂虹渷1) + (危 service_subtask_preachform.compensate_time + 1) 澶╋紝
- 涓� RyTask/RedisMqReceiver 鐨� isSubtaskDeadline 鍙e緞淇濇寔涓�鑷达紱
+ 鍩哄噯鎴鏃堕棿 base锛�
+ 闈炰换鍔$粍(appltype != 5)锛歟ndtime + send_day(缂虹渷1) + (危 service_subtask_preachform.compensate_time + 1) 澶╋紱
+ 浠诲姟缁�(appltype = 5)锛氭寜 schedule_benchmark 瑙f瀽鍩哄噯鏃堕棿
+ (1-鍏ラ櫌 2-鍑洪櫌 3-灏辫瘖 4-鍏ョ粍 0/鍏跺畠-鑷畾涔夋椂闂�)
+ + day_offset + (危 compensate_time + 1) 澶╋紙涓嶅彔鍔� send_day锛夛紱
+ 涓� RyTask/RedisMqReceiver 鐨� isSubtaskDeadline銆乻electTimelyRateBatch 鍙e緞淇濇寔涓�鑷达紱
delay = COALESCE(service_task.delay_finish_days, 0)锛�
finish_time = COALESCE(鍏ュ弬 finishtime, 搴撲腑 finishtime, NOW())锛�
finish_time <= base -> 1 姝e父瀹屾垚
delay > 0 涓� finish_time <= base + delay -> 2 寤舵湡瀹屾垚
鍏朵綑锛堝惈 delay 涓� 0 鎴� NULL銆佹垨宸茶秴鍑哄欢鏈熺獥鍙o級 -> 3 瓒呮椂瀹屾垚
finishtime 涓虹┖鏃剁敤 NOW() 鍏滃簳锛屼繚璇佸畬鎴愭椂涓�瀹氬啓鍏ョ姸鎬侊紱
- 浠呭綋 endtime 涓虹┖瀵艰嚧鏃犳硶璁$畻鏃舵墠淇濇寔鍘熷�间笉瑕嗙洊銆� -->
- <sql id="finishStateExpr">
+ base 涓虹┖锛坋ndtime / schedule / day_offset 缂哄け锛夋椂淇濇寔鍘熷�间笉瑕嗙洊銆� -->
+ <sql id="finishDeadlineExpr">
+ DATE_ADD(
CASE
- WHEN service_subtask.endtime IS NULL THEN finish_state
+ WHEN COALESCE(st.appltype, '') = '5' THEN
+ DATE_ADD(
+ CASE sts.schedule_benchmark
+ WHEN 1 THEN service_subtask.starttime
+ WHEN 2 THEN service_subtask.endtime
+ WHEN 3 THEN service_subtask.admindate
+ WHEN 4 THEN service_subtask.create_time
+ ELSE sts.schedule_benchmark_custom_time
+ END,
+ INTERVAL std.day_offset DAY)
+ ELSE
+ DATE_ADD(service_subtask.endtime, INTERVAL COALESCE(st.send_day, 1) DAY)
+ END,
+ INTERVAL (COALESCE((SELECT SUM(CAST(COALESCE(NULLIF(TRIM(pf.compensate_time), ''), '0') AS SIGNED))
+ FROM service_subtask_preachform pf
+ WHERE pf.subid = service_subtask.id AND pf.del_flag = 0), 0) + 1) DAY)
+ </sql>
+
+ <sql id="finishStateExpr">
+ COALESCE((
+ SELECT
+ CASE
+ WHEN <include refid="finishDeadlineExpr"/> IS NULL THEN NULL
WHEN COALESCE(#{finishtime,jdbcType=TIMESTAMP}, service_subtask.finishtime, NOW())
- <= DATE_ADD(
- DATE_ADD(
- service_subtask.endtime,
- INTERVAL COALESCE((SELECT st.send_day FROM service_task st
- WHERE st.taskid = service_subtask.taskid AND st.del_flag = '0' LIMIT 1), 1) DAY
- ),
- INTERVAL (COALESCE((SELECT SUM(CAST(COALESCE(NULLIF(TRIM(pf.compensate_time), ''), '0') AS SIGNED))
- FROM service_subtask_preachform pf
- WHERE pf.subid = service_subtask.id AND pf.del_flag = 0), 0) + 1) DAY
- )
+ <= <include refid="finishDeadlineExpr"/>
THEN 1
- WHEN COALESCE((SELECT st.delay_finish_days FROM service_task st
- WHERE st.taskid = service_subtask.taskid AND st.del_flag = '0' LIMIT 1), 0) > 0
+ WHEN COALESCE(st.delay_finish_days, 0) > 0
AND COALESCE(#{finishtime,jdbcType=TIMESTAMP}, service_subtask.finishtime, NOW())
- <= DATE_ADD(
- DATE_ADD(
- DATE_ADD(
- service_subtask.endtime,
- INTERVAL COALESCE((SELECT st.send_day FROM service_task st
- WHERE st.taskid = service_subtask.taskid AND st.del_flag = '0' LIMIT 1), 1) DAY
- ),
- INTERVAL (COALESCE((SELECT SUM(CAST(COALESCE(NULLIF(TRIM(pf.compensate_time), ''), '0') AS SIGNED))
- FROM service_subtask_preachform pf
- WHERE pf.subid = service_subtask.id AND pf.del_flag = 0), 0) + 1) DAY
- ),
- INTERVAL COALESCE((SELECT st.delay_finish_days FROM service_task st
- WHERE st.taskid = service_subtask.taskid AND st.del_flag = '0' LIMIT 1), 0) DAY
- )
+ <= DATE_ADD(<include refid="finishDeadlineExpr"/>,
+ INTERVAL COALESCE(st.delay_finish_days, 0) DAY)
THEN 2
ELSE 3
END
+ FROM (SELECT 1) dummy
+ LEFT JOIN service_task st ON st.taskid = service_subtask.taskid
+ LEFT JOIN service_task_schedule sts ON sts.id = service_subtask.schedule_id
+ LEFT JOIN service_task_schedule_detail std ON std.id = service_subtask.schedule_detail_id
+ LIMIT 1
+ ), finish_state)
</sql>
<!-- 褰撳墠鎵ц鏂瑰紡锛氶娆¢殢璁� current_preachform 涓虹┖鏃讹紝鍙� preachform 鐨勭涓�涓墽琛屾柟寮忓厹搴� -->
--
Gitblit v1.9.3