From 1958e8bad428b94aa457734f7f047fe373eafd83 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 11 十一月 2026 14:06:11 +0800
Subject: [PATCH] Merge branch 'smartor_ls_261103' into smartor_ls_merge
---
ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml | 117 ++++++++++++++++++++++++++++++++++++++++------------------
1 files changed, 81 insertions(+), 36 deletions(-)
diff --git a/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml b/ruoyi-task/src/main/resources/mapper/task/ServiceSubtaskMapper.xml
index c28c13e..a6a536b 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 鐨勭涓�涓墽琛屾柟寮忓厹搴� -->
@@ -373,16 +384,34 @@
<sql id="filterLeaveDimAnd">
/* f-v3 */
<if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
- AND leavehospitaldistrictcode IN
+ AND (
+ leavehospitaldistrictcode IN
<foreach collection="leavehospitaldistrictcodes" item="lvWardCodeItem" open="(" separator="," close=")">
#{lvWardCodeItem}
</foreach>
+ <!-- 寤剁画鎶ょ悊浠诲姟锛坰ervice_type='99'锛夊彲浠ュ湪鎮h�呰繕娌″嚭闄㈡椂鐢熸垚锛�
+ 杩欑被璁板綍鍙湁銆屽湪闄㈢淮搴︺�嶏紙hospitaldistrictcode / deptcode锛夛紝鍑洪櫌缁村害鏄� NULL銆�
+ NULL 涓嶅尮閰嶄换浣� IN锛屼换鍔′細銆屾彁绀虹敓鎴愭垚鍔熴�佸垪琛ㄩ噷鍗存煡涓嶅埌銆嶏紝
+ 鎵�浠ュ嚭闄㈢淮搴︿负绌烘椂鐢ㄥ悓涓�濂楃紪鐮佷綋绯荤殑鍦ㄩ櫌缁村害鍏滃簳銆� -->
+ OR (service_type = '99' AND (leavehospitaldistrictcode IS NULL OR leavehospitaldistrictcode = '')
+ AND hospitaldistrictcode IN
+ <foreach collection="leavehospitaldistrictcodes" item="lvWardCodeItem" open="(" separator="," close=")">
+ #{lvWardCodeItem}
+ </foreach>)
+ )
</if>
<if test="leaveldeptcodes != null and leaveldeptcodes.size() > 0">
- AND leaveldeptcode IN
+ AND (
+ leaveldeptcode IN
<foreach collection="leaveldeptcodes" item="lvDeptCodeItem" open="(" separator="," close=")">
#{lvDeptCodeItem}
</foreach>
+ OR (service_type = '99' AND (leaveldeptcode IS NULL OR leaveldeptcode = '')
+ AND deptcode IN
+ <foreach collection="leaveldeptcodes" item="lvDeptCodeItem" open="(" separator="," close=")">
+ #{lvDeptCodeItem}
+ </foreach>)
+ )
</if>
</sql>
@@ -423,20 +452,38 @@
or (leaveldeptcodes != null and leaveldeptcodes.size() > 0)">
AND (
<if test="leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0">
+ (
leavehospitaldistrictcode IN
<foreach collection="leavehospitaldistrictcodes" item="lvWardCodeItem" open="(" separator="," close=")">
#{lvWardCodeItem}
</foreach>
+ <!-- 寤剁画鎶ょ悊浠诲姟锛坰ervice_type='99'锛夊彲浠ュ湪鎮h�呰繕娌″嚭闄㈡椂鐢熸垚锛�
+ 杩欑被璁板綍鍙湁銆屽湪闄㈢淮搴︺�嶏紙hospitaldistrictcode / deptcode锛夛紝鍑洪櫌缁村害鏄� NULL銆�
+ NULL 涓嶅尮閰嶄换浣� IN锛屼换鍔′細銆屾彁绀虹敓鎴愭垚鍔熴�佸垪琛ㄩ噷鍗存煡涓嶅埌銆嶏紝
+ 鎵�浠ュ嚭闄㈢淮搴︿负绌烘椂鐢ㄥ悓涓�濂楃紪鐮佷綋绯荤殑鍦ㄩ櫌缁村害鍏滃簳銆� -->
+ OR (service_type = '99' AND (leavehospitaldistrictcode IS NULL OR leavehospitaldistrictcode = '')
+ AND hospitaldistrictcode IN
+ <foreach collection="leavehospitaldistrictcodes" item="lvWardCodeItem" open="(" separator="," close=")">
+ #{lvWardCodeItem}
+ </foreach>)
+ )
</if>
<if test="(leavehospitaldistrictcodes != null and leavehospitaldistrictcodes.size() > 0)
and (leaveldeptcodes != null and leaveldeptcodes.size() > 0)">
OR
</if>
<if test="leaveldeptcodes != null and leaveldeptcodes.size() > 0">
+ (
leaveldeptcode IN
<foreach collection="leaveldeptcodes" item="lvDeptCodeItem" open="(" separator="," close=")">
#{lvDeptCodeItem}
</foreach>
+ OR (service_type = '99' AND (leaveldeptcode IS NULL OR leaveldeptcode = '')
+ AND deptcode IN
+ <foreach collection="leaveldeptcodes" item="lvDeptCodeItem" open="(" separator="," close=")">
+ #{lvDeptCodeItem}
+ </foreach>)
+ )
</if>
)
</if>
@@ -944,7 +991,7 @@
1) 闈炰换鍔$粍(appltype != 5)锛歟ndtime + send_day(缂虹渷1) + 危琛ュ伩澶╂暟 + 1 澶╋紱
2) 浠诲姟缁�(appltype = 5)锛氭寜 schedule_benchmark 瑙f瀽鍩哄噯鏃堕棿
(1-鍏ラ櫌鏃堕棿 2-鍑洪櫌鏃堕棿 3-灏辫瘖鏃堕棿 4-鍏ョ粍鏃堕棿 0/鍏跺畠-鑷畾涔夋椂闂�)
- + day_offset + send_day(缂虹渷1) + 危琛ュ伩澶╂暟 + 1 澶╋紱
+ + day_offset + 危琛ュ伩澶╂暟 + 1 澶╋紙涓嶅啀鍙犲姞 send_day锛夛紱
瀹屾垚鏃堕棿 finishtime <= 鍩哄噯鏃堕棿璁′负鍙婃椂锛屽垎姣嶄粛涓哄簲闅忚鏁般��
琛ュ伩澶╂暟鍙彇 service_subtask_preachform.compensate_time 鐨勬眹鎬诲�间竴娆★紝
閬垮厤涓庤ˉ鍋挎槑缁嗙浉鍔犻�犳垚閲嶅琛ュ伩鎴栦竴瀵瑰鏀惧ぇ鍒嗘瘝銆� -->
@@ -961,7 +1008,6 @@
AND std.day_offset IS NOT NULL
AND ss.finishtime <= DATE_ADD(
DATE_ADD(
- DATE_ADD(
CASE sts.schedule_benchmark
WHEN 1 THEN ss.starttime
WHEN 2 THEN ss.endtime
@@ -969,7 +1015,6 @@
WHEN 4 THEN ss.create_time
ELSE sts.schedule_benchmark_custom_time
END, INTERVAL std.day_offset DAY),
- INTERVAL COALESCE(st.send_day, 1) DAY),
INTERVAL (COALESCE(cp.compensate_days, 0) + 1) DAY)
THEN 1
ELSE 0
--
Gitblit v1.9.3