pad服务指令预览调整查询待执行指令逻辑

This commit is contained in:
1378012178@qq.com 2026-01-20 11:06:00 +08:00
parent 09c5eb857e
commit 930b24eacb
5 changed files with 114 additions and 125 deletions

View File

@ -262,7 +262,7 @@ public class CareDirectiveApi {
List<DirectiveOrderEntity> current = Lists.newArrayList();
List<DirectiveOrderEntity> future = Lists.newArrayList();
List<DirectiveOrderEntity> all = Lists.newArrayList();
if (StringUtils.isBlank(dto.getElderId()) || StringUtils.isBlank(dto.getNuId()) || dto.getQueryDate() == null) {
if (StringUtils.isBlank(dto.getNuId()) || dto.getQueryDate() == null || dto.getQueryFuture() == null) {
result.put("history", history);
result.put("current", current);
result.put("future", future);
@ -276,7 +276,9 @@ public class CareDirectiveApi {
//正在执行
current = directiveOrderApi.queryCurrent(dto);
//将来
dto.setQueryFuture(true);
future = careDirectivePlanApi.queryFuture(dto);
dto.setQueryFuture(null);
}
//给数据加标识

View File

@ -114,4 +114,6 @@ public class CareDirectiveEntity implements Serializable {
private Date queryDate;
private String orderTimeType;
private Boolean queryFuture;
}

View File

@ -106,6 +106,10 @@ public class DirectiveOrderEntity implements Serializable {
private Date startTime;
/**结束时间*/
private Date endTime;
/**开始时间字符串*/
private String startTimeStr;
/**结束时间字符串*/
private String endTimeStr;
/**实际开始员工*/
private String beginEmp;
/**实际开始时间*/

View File

@ -320,8 +320,6 @@
o.net_mp4_file,
o.service_duration,
o.service_content,
o.package_id,
o.package_name,
o.iz_package,
o.toll_price,
o.com_price,
@ -350,7 +348,6 @@
s.id as sub_id,
s.order_type as sub_order_type,
s.main_id as sub_main_id,
s.pool_sub_id as sub_pool_sub_id,
s.nu_id as sub_nu_id,
s.nu_name as sub_nu_name,
s.elder_id as sub_elder_id,
@ -419,16 +416,16 @@
<choose>
<when test="@cn.hutool.core.date.DateUtil@isSameDay(dto.queryDate, new java.util.Date())">
<![CDATA[
AND (
(DATE(o.start_time) = DATE(#{dto.queryDate}) AND DATE_ADD(o.end_time, INTERVAL CAST(o.service_duration AS UNSIGNED) MINUTE) < NOW())
)
]]>
AND DATE(o.start_time) = DATE(#{dto.queryDate})
AND DATE_ADD(
o.end_time,
INTERVAL
IF(o.timeout_duration REGEXP '^[0-9]+$', o.timeout_duration, 0)
MINUTE
) &lt; NOW()
</when>
<otherwise>
<![CDATA[
AND DATE(o.start_time) = DATE(#{dto.queryDate})
]]>
AND DATE(o.start_time) = DATE(#{dto.queryDate})
</otherwise>
</choose>
@ -440,7 +437,9 @@
<include refid="baseSelect"/>
<![CDATA[
AND (DATE(o.start_time) = DATE(now()) AND o.start_time <= now() AND now() <= DATE_ADD(o.end_time, INTERVAL CAST(o.service_duration AS UNSIGNED) MINUTE) )
AND (DATE(o.start_time) = DATE(now())
AND o.start_time <= NOW()
AND NOW() <= o.end_time + INTERVAL o.timeout_duration MINUTE)
]]>
<include refid="commonConditions"/>

View File

@ -39,6 +39,8 @@
<result column="real_com_price" property="realComPrice"/>
<result column="start_time" property="startTime"/>
<result column="end_time" property="endTime"/>
<result column="start_time_str" property="startTimeStr"/>
<result column="end_time_str" property="endTimeStr"/>
<result column="begin_emp" property="beginEmp"/>
<result column="begin_time" property="beginTime"/>
<result column="finish_emp" property="finishEmp"/>
@ -214,119 +216,99 @@
);
</select>
<select id="queryFuture" resultMap="DirectiveOrderMap">
select p.id,
p.nu_id,
p.nu_name,
p.elder_id,
p.elder_name,
p.category_id,
p.category_name,
p.type_id,
p.type_name,
CASE
WHEN p.iz_package = 'N' THEN p.directive_name
ELSE directive_name
END AS directive_name,
CASE
WHEN p.iz_package = 'Y' THEN p.directive_name
ELSE directive_name
END AS package_name,
p.preview_file,
p.net_preview_file,
p.preview_file_small,
p.net_preview_file_small,
p.mp3_file,
p.net_mp3_file,
p.mp4_file,
p.net_mp4_file,
p.immediate_file,
p.net_immediate_file,
p.immediate_file_focus,
p.net_immediate_file_focus,
p.cycle_type_id,
p.cycle_type,
p.cycle_value,
p.service_duration,
p.service_content,
p.positioning,
p.positioning_long,
p.tag_name,
STR_TO_DATE(CONCAT(DATE_FORMAT(CURDATE(), '%Y-%m-%d'), ' ', p.start_time),
'%Y-%m-%d %H:%i:%s') as start_time,
STR_TO_DATE(CONCAT(DATE_FORMAT(CURDATE(), '%Y-%m-%d'), ' ', p.end_time),
'%Y-%m-%d %H:%i:%s') as end_time,
p.create_by,
p.create_time,
p.update_by,
p.update_time,
p.sys_org_code,
p.iz_package,
pd.directive_id AS sub_id,
pd.directive_id AS sub_directive_id
SELECT
p.id,
p.nu_id,
base.nu_name,
CASE WHEN p.iz_package = 'N' THEN directive.category_id ELSE NULL END as category_id,
CASE WHEN p.iz_package = 'N' THEN category.category_name ELSE NULL END as category_name,
CASE WHEN p.iz_package = 'N' THEN directive.type_id ELSE NULL END as type_id,
CASE WHEN p.iz_package = 'N' THEN stype.type_name ELSE NULL END as type_name,
p.directive_id,
CASE
WHEN p.iz_package = 'N' THEN directive.directive_name
WHEN p.iz_package = 'Y' THEN package.package_name
END as directive_name,
p.cycle_type_id,
p.cycle_value,
CASE WHEN p.iz_package = 'N' THEN directive.immediate_file ELSE NULL END as immediate_file,
CASE WHEN p.iz_package = 'N' THEN directive.immediate_file_focus ELSE NULL END as immediate_file_focus,
CASE WHEN p.iz_package = 'N' THEN directive.preview_file ELSE NULL END as preview_file,
CASE WHEN p.iz_package = 'N' THEN directive.preview_file_small ELSE NULL END as preview_file_small,
CASE WHEN p.iz_package = 'N' THEN directive.mp3_file ELSE NULL END as mp3_file,
CASE WHEN p.iz_package = 'N' THEN directive.mp4_file ELSE NULL END as mp4_file,
CASE
WHEN p.iz_package = 'N' THEN directive.service_duration
WHEN p.iz_package = 'Y' THEN CAST(package.total_duration AS CHAR)
END as service_duration,
CASE
WHEN p.iz_package = 'N' THEN directive.service_content
WHEN p.iz_package = 'Y' THEN package.description
END as service_content,
p.positioning,
p.positioning_long,
p.tag_name,
p.start_time as start_time_str,
CASE
WHEN p.iz_package = 'N' AND directive.service_duration IS NOT NULL
THEN DATE_FORMAT(ADDTIME(STR_TO_DATE(p.start_time, '%H:%i'),
SEC_TO_TIME(directive.service_duration * 60)), '%H:%i')
WHEN p.iz_package = 'Y' AND package.total_duration IS NOT NULL
THEN DATE_FORMAT(ADDTIME(STR_TO_DATE(p.start_time, '%H:%i'),
SEC_TO_TIME(package.total_duration * 60)), '%H:%i')
ELSE NULL
END as end_time_str,
p.create_by,
p.create_time,
p.update_by,
p.update_time,
p.sys_org_code,
p.iz_package,
pd.directive_id AS sub_id,
pd.directive_id AS sub_directive_id
FROM nu_biz_nu_care_directive_plan p
LEFT JOIN
nu_config_package_directive pd ON p.directive_id = pd.package_id
LEFT JOIN nu_base_info base ON p.nu_id = base.nu_id
LEFT JOIN nu_config_service_directive directive ON p.iz_package = 'N' AND p.directive_id = directive.id
LEFT JOIN nu_config_directive_package package ON p.iz_package = 'Y' AND p.directive_id = package.id
LEFT JOIN nu_config_service_category category ON directive.category_id = category.id
LEFT JOIN nu_config_service_type stype ON directive.type_id = stype.id
LEFT JOIN nu_config_package_directive pd ON p.iz_package = 'Y' AND p.directive_id = pd.package_id
WHERE p.nu_id = #{dto.nuId}
AND p.elder_id = #{dto.elderId}
AND (
-- 条件1: 包数据 (cycle_type_id为空或空字符串)
(
(p.cycle_type_id IS NULL OR p.cycle_type_id = '')
AND (
-- 包数据按星期执行
(
pd.cycle_value IN ('0', '1', '2', '3', '4', '5', '6')
AND pd.cycle_value = (
CASE DAYOFWEEK(CURDATE())
WHEN 1 THEN '6' -- 星期天
WHEN 2 THEN '0' -- 星期一
WHEN 3 THEN '1' -- 星期二
WHEN 4 THEN '2' -- 星期三
WHEN 5 THEN '3' -- 星期四
WHEN 6 THEN '4' -- 星期五
WHEN 7 THEN '5' -- 星期六
END
)
)
OR
-- 包数据按日期执行
(
LENGTH(pd.cycle_value) = 2
AND pd.cycle_value = DATE_FORMAT(CURDATE(), '%d')
)
)
)
-- 条件2: 日常类型指令 (cycle_type_id = '1')
OR p.cycle_type_id = '1'
-- 条件3: 指令类型指令 (cycle_type_id = '2')
OR (
p.cycle_type_id = '2'
AND (
-- 周期指令按星期执行
(
p.cycle_value IN ('0', '1', '2', '3', '4', '5', '6')
AND p.cycle_value = (
CASE DAYOFWEEK(CURDATE())
WHEN 1 THEN '6' -- 星期天
WHEN 2 THEN '0' -- 星期一
WHEN 3 THEN '1' -- 星期二
WHEN 4 THEN '2' -- 星期三
WHEN 5 THEN '3' -- 星期四
WHEN 6 THEN '4' -- 星期五
WHEN 7 THEN '5' -- 星期六
END
)
)
OR
-- 周期指令按日期执行
(
LENGTH(p.cycle_value) = 2
AND p.cycle_value = DATE_FORMAT(CURDATE(), '%d')
)
)
)
)
AND STR_TO_DATE(CONCAT(DATE_FORMAT(CURDATE(), '%Y-%m-%d'), ' ', p.start_time), '%Y-%m-%d %H:%i:%s') > NOW()
ORDER BY STR_TO_DATE(CONCAT(DATE_FORMAT(CURDATE(), '%Y-%m-%d'), ' ', p.start_time), '%Y-%m-%d %H:%i:%s') ASC
AND (
-- 1: 每天执行
p.cycle_type_id = '1'
-- 3: 按星期执行
OR (p.cycle_type_id = '3' AND p.cycle_value = (
CASE DAYOFWEEK(#{dto.queryDate})
WHEN 1 THEN '6' WHEN 2 THEN '0' WHEN 3 THEN '1' WHEN 4 THEN '2'
WHEN 5 THEN '3' WHEN 6 THEN '4' WHEN 7 THEN '5'
END
))
-- 4: 按日期执行
OR (p.cycle_type_id = '4' AND p.cycle_value = DATE_FORMAT(#{dto.queryDate}, '%d'))
-- 5: 频次执行
OR (p.cycle_type_id = '5' AND (
-- 不限次数
(p.opt_count = 0
AND DATEDIFF(#{dto.queryDate}, DATE(p.opt_time)) >= 0
AND MOD(DATEDIFF(#{dto.queryDate}, DATE(p.opt_time)), (CAST(p.cycle_value AS UNSIGNED) + 1)) = 0)
-- 有限次数
OR (p.opt_count > 0
AND DATEDIFF(#{dto.queryDate}, DATE(p.opt_time)) >= 0
AND MOD(DATEDIFF(#{dto.queryDate}, DATE(p.opt_time)), (CAST(p.cycle_value AS UNSIGNED) + 1)) = 0
AND (DATEDIFF(#{dto.queryDate}, DATE(p.opt_time)) / (CAST(p.cycle_value AS UNSIGNED) + 1)) &lt; p.opt_count)
))
)
-- 是否查询未来指令
<if test="dto.queryFuture != null and dto.queryFuture">
AND #{dto.queryDate} = CURDATE() AND p.start_time > DATE_FORMAT(NOW(), '%H:%i')
</if>
ORDER BY p.start_time ASC
</select>
</mapper>