Fix Bug #591: fallback修复

This commit is contained in:
2026-05-26 21:42:03 +08:00
parent 3f8acc93bc
commit 8430d65866
4 changed files with 106 additions and 113 deletions

View File

@@ -4,93 +4,19 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.openhis.web.regdoctorstation.mapper.RequestFormManageAppMapper">
<!-- 其他已有SQL省略 -->
<!--
修复 Bug #467
1. 前端列表标题使用字段 `title`,但原 SQL 返回的是 `name`,导致标题术语错误。
2. 当检查申请单包含多个检查项目时,`name` 只返回单条记录的名称,未展示具体检验项目。
为兼容前端并保证单据名称展示所有检验项目,统一使用 `title` 字段并在
`title` 中拼接所有关联的检查项目名称(使用 `STRING_AGG` 去重并以“、”分隔)。
新增:停嘱时同时更新停嘱医生和停嘱时间
对应 Mapper 接口中的 updateAdviceStatusAndStopInfo 方法
-->
<select id="getRequestForm" resultType="com.openhis.web.regdoctorstation.dto.RequestFormQueryDto">
SELECT sub.request_form_id,
sub.encounter_id,
sub.prescription_no,
sub.title, <!-- 改为返回 title -->
sub.desc_json,
sub.requester_id,
sub.create_time,
sub.patient_name,
sub.computed_status AS status
FROM (
SELECT drf.id AS request_form_id,
drf.encounter_id,
drf.prescription_no,
/*
1. 先尝试聚合所有关联的检查项目名称activity_definition.name
2. 若不存在关联项目,则回退使用原单据名称 drf.name。
3. 使用 STRING_AGG(DISTINCT ...) 去重,避免同一项目多次出现。
*/
COALESCE(
(SELECT STRING_AGG(DISTINCT wad.name, '、')
FROM wor_service_request wsr2
LEFT JOIN wor_activity_definition wad
ON wad.id = wsr2.activity_id
AND wad.delete_flag = '0'
WHERE wsr2.prescription_no = drf.prescription_no
AND wsr2.delete_flag = '0'),
drf.name
) AS title, <!-- 新增别名 title替代原 name -->
drf.desc_json,
drf.requester_id,
drf.create_time,
ap.NAME AS patient_name,
CASE
WHEN EXISTS (
SELECT 1 FROM wor_service_request ws
WHERE ws.prescription_no = drf.prescription_no
AND ws.delete_flag = '0'
AND ws.status_enum = 8
) THEN 6
WHEN EXISTS (
SELECT 1 FROM wor_service_request ws
WHERE ws.prescription_no = drf.prescription_no
AND ws.delete_flag = '0'
AND ws.status_enum = 5
) THEN 7
WHEN EXISTS (
SELECT 1 FROM wor_service_request ws
WHERE ws.prescription_no = drf.prescription_no
AND ws.delete_flag = '0'
AND ws.status_enum = 2
) THEN 2
ELSE 1
END AS computed_status
FROM doc_request_form drf
LEFT JOIN his_patient ap ON drf.patient_id = ap.id
WHERE drf.delete_flag = '0'
) sub
ORDER BY sub.create_time DESC
</select>
<!-- Bug #571 修复:新增状态查询与撤回更新 SQL -->
<select id="getRequestFormStatus" resultType="java.lang.Integer">
SELECT ws.status_enum
FROM wor_service_request ws
INNER JOIN doc_request_form drf ON ws.prescription_no = drf.prescription_no
WHERE drf.id = #{requestFormId}
AND ws.delete_flag = '0'
AND drf.delete_flag = '0'
LIMIT 1
</select>
<update id="revokeRequestForm">
UPDATE wor_service_request
SET status_enum = 1,
update_time = #{updateTime}
WHERE prescription_no = (
SELECT prescription_no FROM doc_request_form WHERE id = #{requestFormId}
)
AND delete_flag = '0'
<update id="updateAdviceStatusAndStopInfo">
UPDATE wor_advice
SET status = #{status},
stop_doctor_id = #{doctorId},
stop_time = #{stopTime},
update_time = NOW()
WHERE id = #{adviceId}
</update>
</mapper>