| | |
| | | <result property="diagType" column="diag_type"/> |
| | | <!-- 2026-11:重要性标记编码(日间手术/日间诊疗/无…),建任务时取自 pat_med_inhosp --> |
| | | <result property="importanceFlagCode" column="importance_flag_code"/> |
| | | <!-- 2026-11:点位编码,建子任务时原样拷自 service_task.point_location --> |
| | | <result property="pointLocation" column="point_location"/> |
| | | </resultMap> |
| | | |
| | | <resultMap type="com.ruoyi.task.domain.ServiceSubtaskCount" id="ServiceSubtaskResult2"> |
| | |
| | | deptcode, |
| | | deptname, |
| | | importance_flag_code, |
| | | point_location, |
| | | stop_state, |
| | | leavehospitaldistrictcode, |
| | | leavehospitaldistrictname, |
| | |
| | | <if test="hospType != null and hospType != ''">and hosp_type = #{hospType}</if> |
| | | <!-- |
| | | 2026-11:重要性标记筛选(对应 service_subtask.importance_flag_code,建任务时取自 |
| | | pat_med_inhosp.importance_flag_code)。两种写法: |
| | | ① 精确单值 importanceFlagCode = 'FH0165.01'(或描述口径 '日间手术') |
| | | ② 精确多值 importanceFlagCodes = ['FH0165.01','FH0165.02'] |
| | | pat_med_inhosp.importance_flag_code)。 |
| | | ① 模糊(/patItem 用这个) importanceFlagCode → LIKE '%值%' |
| | | 传「日间」即可命中「日间手术」「日间诊疗」「无,日间手术」多值行; |
| | | 传完整值(「日间手术」/「FH0165.01」)退化为精确匹配。 |
| | | ② 精确多值 importanceFlagCodes → IN |
| | | 该列采集时就被拼成**描述串**(ImportFlagEnum 的 desc),多值用英文逗号拼接, |
| | | 如 '无,日间手术'(见 ServiceSLTDHealthcareRecordServiceImpl#hospitalizedApply)—— |
| | | 等值/IN 只命中单值行;多值行(现场仅 7 条,都在出院记录上)要筛全需自行写 |
| | | find_in_set。两种口径并存(有库存枚举编码、有库存中文描述),传什么按什么精确比, |
| | | 所以「日间」这类跨取值查询只能靠模糊;描述与 FH0165.xx 编码两种口径都按原值比, |
| | | 不做值域归一。 |
| | | ⚠️ 同一条件必须同步加到 countByCondition(列表 total / 各状态统计走那条 SQL), |
| | | 否则会出现「列表筛出 N 行、总数还是全量」的错配。 |
| | | --> |
| | | <if test="importanceFlagCode != null and importanceFlagCode != ''"> |
| | | and importance_flag_code = #{importanceFlagCode} |
| | | and importance_flag_code like concat('%', #{importanceFlagCode}, '%') |
| | | </if> |
| | | <if test="importanceFlagCodes != null and importanceFlagCodes.size() > 0"> |
| | | AND importance_flag_code IN |
| | | <foreach collection="importanceFlagCodes" item="impFlagItem" open="(" separator="," close=")"> |
| | | #{impFlagItem} |
| | | </foreach> |
| | | </if> |
| | | <!-- |
| | | 2026-11:点位筛选(对应 service_subtask.point_location,建子任务时从 service_task 快照过来)。 |
| | | 只有一条 IN 条件:单选/多选都在 ServiceSubtaskEntity#getPointLocations() 里归一 |
| | | (只传 pointLocation 会自动包成单元素集合),所以不再写等值分支。 |
| | | ⚠️ 同一条件必须同步加到 countByCondition(列表 total / 各状态统计走那条 SQL), |
| | | 否则会出现「列表筛出 N 行、总数还是全量」的错配。 |
| | | --> |
| | | <if test="pointLocations != null and pointLocations.size() > 0"> |
| | | AND point_location IN |
| | | <foreach collection="pointLocations" item="pointLocItem" open="(" separator="," close=")"> |
| | | #{pointLocItem} |
| | | </foreach> |
| | | </if> |
| | | <if test="libtemplateid != null ">and libtemplateid = #{libtemplateid}</if> |
| | |
| | | <if test="deptname != null and deptname != ''">deptname,</if> |
| | | <!-- 2026-11:重要性标记编码(日间手术/日间诊疗…),建任务时从 pat_med_inhosp 同步 --> |
| | | <if test="importanceFlagCode != null and importanceFlagCode != ''">importance_flag_code,</if> |
| | | <!-- 2026-11:点位编码,建子任务时从 service_task.point_location 同步 --> |
| | | <if test="pointLocation != null and pointLocation != ''">point_location,</if> |
| | | <if test="labelstatus != null">labelstatus,</if> |
| | | <if test="updateBy != null">update_by,</if> |
| | | <if test="updateTime != null">update_time,</if> |
| | |
| | | <if test="deptcode != null and deptcode != ''">#{deptcode},</if> |
| | | <if test="deptname != null and deptname != ''">#{deptname},</if> |
| | | <if test="importanceFlagCode != null and importanceFlagCode != ''">#{importanceFlagCode},</if> |
| | | <if test="pointLocation != null and pointLocation != ''">#{pointLocation},</if> |
| | | <if test="labelstatus != null">#{labelstatus},</if> |
| | | <if test="updateBy != null">#{updateBy},</if> |
| | | <if test="updateTime != null">#{updateTime},</if> |
| | |
| | | <if test="openid != null ">openid = #{openid},</if> |
| | | <if test="longSendTime != null ">long_send_time = #{longSendTime},</if> |
| | | <if test="sendstate != null ">sendstate = #{sendstate},</if> |
| | | <!-- 完成时间不变量(2026-11):状态一旦不是"完成(6)",就显式清空完成时间与完成时状态。 |
| | | 上面 finishtime 那一段是 if(finishtime != null),传 null 会被整段跳过, |
| | | 所以"清空"必须在这里用 SQL 的 NULL 写出来;否则 3 已发送 / 5 发送失败 / 7 超时 |
| | | 的行会一直带着历史完成时间("超时却有完成时间、及时率虚高"就是这么来的)。 --> |
| | | <if test="sendstate != null and sendstate != 6">finishtime = NULL, finish_state = NULL,</if> |
| | | <if test="sendstate != null and sendstate == 6">finish_state = <include refid="finishStateExpr"/>,</if> |
| | | <if test="serviceType != null ">service_type = #{serviceType},</if> |
| | | <if test="score != null ">score = #{score},</if> |
| | |
| | | <if test="scheduleSeq != null ">schedule_seq = #{scheduleSeq},</if> |
| | | <if test="loopCount != null ">loop_count = #{loopCount},</if> |
| | | <if test="isManuallyCalled != null ">is_manually_called = #{isManuallyCalled},</if> |
| | | <!-- 2026-11:点位编码(建子任务时的快照;任务上改点位不会自动回写) --> |
| | | <if test="pointLocation != null and pointLocation != ''">point_location = #{pointLocation},</if> |
| | | </trim> |
| | | where id = #{id} |
| | | </update> |
| | |
| | | <if test="openid != null ">openid = #{openid},</if> |
| | | <if test="longSendTime != null ">long_send_time = #{longSendTime},</if> |
| | | <if test="sendstate != null ">sendstate = #{sendstate},</if> |
| | | <!-- 完成时间不变量(2026-11):状态一旦不是"完成(6)",就显式清空完成时间与完成时状态。 |
| | | 上面 finishtime 那一段是 if(finishtime != null),传 null 会被整段跳过, |
| | | 所以"清空"必须在这里用 SQL 的 NULL 写出来;否则 3 已发送 / 5 发送失败 / 7 超时 |
| | | 的行会一直带着历史完成时间("超时却有完成时间、及时率虚高"就是这么来的)。 --> |
| | | <if test="sendstate != null and sendstate != 6">finishtime = NULL, finish_state = NULL,</if> |
| | | <if test="sendstate != null and sendstate == 6">finish_state = <include refid="finishStateExpr"/>,</if> |
| | | <if test="serviceType != null ">service_type = #{serviceType},</if> |
| | | <if test="score != null ">score = #{score},</if> |
| | |
| | | <if test="sex != null">sex = #{sex},</if> |
| | | <if test="delFlag != null">del_flag = #{delFlag},</if> |
| | | <if test="sendstate != null ">sendstate = #{sendstate},</if> |
| | | <!-- 完成时间不变量(2026-11):状态一旦不是"完成(6)",就显式清空完成时间与完成时状态。 |
| | | 上面 finishtime 那一段是 if(finishtime != null),传 null 会被整段跳过, |
| | | 所以"清空"必须在这里用 SQL 的 NULL 写出来;否则 3 已发送 / 5 发送失败 / 7 超时 |
| | | 的行会一直带着历史完成时间("超时却有完成时间、及时率虚高"就是这么来的)。 --> |
| | | <if test="sendstate != null and sendstate != 6">finishtime = NULL, finish_state = NULL,</if> |
| | | <if test="sendstate != null and sendstate == 6">finish_state = <include refid="finishStateExpr"/>,</if> |
| | | <if test="age != null">age = #{age},</if> |
| | | <if test="sfzh != null">sfzh = #{sfzh},</if> |
| | |
| | | <if test="phone != null">phone = #{phone},</if> |
| | | <if test="sex != null">sex = #{sex},</if> |
| | | <if test="sendstate != null ">sendstate = #{sendstate},</if> |
| | | <!-- 完成时间不变量(2026-11):状态一旦不是"完成(6)",就显式清空完成时间与完成时状态。 |
| | | 上面 finishtime 那一段是 if(finishtime != null),传 null 会被整段跳过, |
| | | 所以"清空"必须在这里用 SQL 的 NULL 写出来;否则 3 已发送 / 5 发送失败 / 7 超时 |
| | | 的行会一直带着历史完成时间("超时却有完成时间、及时率虚高"就是这么来的)。 --> |
| | | <if test="sendstate != null and sendstate != 6">finishtime = NULL, finish_state = NULL,</if> |
| | | <if test="sendstate != null and sendstate == 6">finish_state = <include refid="finishStateExpr"/>,</if> |
| | | <if test="age != null">age = #{age},</if> |
| | | <if test="sfzh != null">sfzh = #{sfzh},</if> |
| | |
| | | <if test="sendname != null and sendname != ''"> |
| | | AND sendname LIKE CONCAT('%', #{sendname}, '%') |
| | | </if> |
| | | <!-- |
| | | 2026-11:重要性标记模糊筛选 —— 必须与 serviceSubtaskWhere 里的同名条件【完全一致】, |
| | | 否则 /patItem 的列表与 total/各状态统计会错配(列表筛了、总数没筛)。 |
| | | 口径见 serviceSubtaskWhere 处的注释。 |
| | | --> |
| | | <if test="importanceFlagCode != null and importanceFlagCode != ''"> |
| | | AND importance_flag_code LIKE CONCAT('%', #{importanceFlagCode}, '%') |
| | | </if> |
| | | <!-- |
| | | 2026-11:点位筛选 —— 必须与 serviceSubtaskWhere 里的同名条件【完全一致】, |
| | | 否则 /patItem 的列表与 total/各状态统计会错配(列表筛了、总数没筛)。 |
| | | 单选/多选归一在 ServiceSubtaskEntity#getPointLocations(),这里只有一条 IN。 |
| | | --> |
| | | <if test="pointLocations != null and pointLocations.size() > 0"> |
| | | AND point_location IN |
| | | <foreach collection="pointLocations" item="pointLocItem" open="(" separator="," close=")"> |
| | | #{pointLocItem} |
| | | </foreach> |
| | | </if> |
| | | <if test="phone != null and phone != ''"> |
| | | AND phone = #{phone} |
| | | </if> |