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

View File

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

View File

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

View File

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

View File

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