- 修复了手术申请组件中 userStore 初始化问题,确保 applyDoctorName 和 applyDeptName 正确赋值 - 添加了 surgeryApplication 组件的 saved 事件发射,用于通知父组件刷新医嘱列表 - 修复了手术项目选择变更时 surgeryName 的正确设置和空值处理 - 添加了手术名称和编码的验证逻辑,防止提交时出现空值错误 - 修复了手术排班页面中就诊卡号字段的属性映射(visitId 改为 patientCardNo) - 在后端 DTO 中添加了 patientCardNo 字段支持 - 修复了数据库查询中就诊卡号的关联查询逻辑,通过患者标识表获取正确的就诊卡号 - 优化了手术医嘱的 contentJson 设置,确保手术名称和编码正确存储
349 lines
16 KiB
XML
349 lines
16 KiB
XML
<?xml version="1.0" encoding="UTF-8" ?>
|
||
<!DOCTYPE mapper
|
||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||
<mapper namespace="com.openhis.web.clinicalmanage.mapper.SurgeryAppMapper">
|
||
|
||
<resultMap type="com.openhis.web.clinicalmanage.dto.SurgeryDto" id="SurgeryResult">
|
||
<result property="id" column="id" />
|
||
<result property="surgeryNo" column="surgery_no" />
|
||
<result property="patientId" column="patient_id" />
|
||
<result property="patientName" column="patient_name" />
|
||
<result property="patientGender" column="patient_gender" />
|
||
<result property="patientAge" column="patient_age" />
|
||
<result property="encounterId" column="encounter_id" />
|
||
<result property="encounterNo" column="encounter_no" />
|
||
<result property="patientCardNo" column="patient_card_no" />
|
||
<result property="applyDoctorId" column="apply_doctor_id" />
|
||
<result property="applyDoctorName" column="apply_doctor_name" />
|
||
<result property="applyDeptId" column="apply_dept_id" />
|
||
<result property="applyDeptName" column="apply_dept_name" />
|
||
<result property="surgeryIndication" column="surgery_indication" />
|
||
<result property="surgeryName" column="surgery_name" />
|
||
<result property="surgeryCode" column="surgery_code" />
|
||
<result property="surgeryTypeEnum" column="surgery_type_enum" />
|
||
<result property="surgeryTypeEnum_dictText" column="surgery_type_enum_dictText" />
|
||
<result property="surgeryLevel" column="surgery_level" />
|
||
<result property="surgeryLevel_dictText" column="surgery_level_dictText" />
|
||
<result property="statusEnum" column="status_enum" />
|
||
<result property="statusEnum_dictText" column="status_enum_dictText" />
|
||
<result property="plannedTime" column="planned_time" />
|
||
<result property="actualStartTime" column="actual_start_time" />
|
||
<result property="actualEndTime" column="actual_end_time" />
|
||
<result property="mainSurgeonId" column="main_surgeon_id" />
|
||
<result property="mainSurgeonName" column="main_surgeon_name" />
|
||
<result property="assistant1Id" column="assistant_1_id" />
|
||
<result property="assistant1Name" column="assistant_1_name" />
|
||
<result property="assistant2Id" column="assistant_2_id" />
|
||
<result property="assistant2Name" column="assistant_2_name" />
|
||
<result property="anesthetistId" column="anesthetist_id" />
|
||
<result property="anesthetistName" column="anesthetist_name" />
|
||
<result property="scrubNurseId" column="scrub_nurse_id" />
|
||
<result property="scrubNurseName" column="scrub_nurse_name" />
|
||
<result property="anesthesiaTypeEnum" column="anesthesia_type_enum" />
|
||
<result property="anesthesiaTypeEnum_dictText" column="anesthesia_type_enum_dictText" />
|
||
<result property="bodySite" column="body_site" />
|
||
<result property="incisionLevel" column="incision_level" />
|
||
<result property="incisionLevel_dictText" column="incision_level_dictText" />
|
||
<result property="healingLevel" column="healing_level" />
|
||
<result property="healingLevel_dictText" column="healing_level_dictText" />
|
||
<result property="operatingRoomId" column="operating_room_id" />
|
||
<result property="operatingRoomName" column="operating_room_name" />
|
||
<result property="operatingRoomOrgId" column="operating_room_org_id" />
|
||
<result property="operatingRoomOrgName" column="operating_room_org_name" />
|
||
<result property="orgId" column="org_id" />
|
||
<result property="orgName" column="org_name" />
|
||
<result property="preoperativeDiagnosis" column="preoperative_diagnosis" />
|
||
<result property="postoperativeDiagnosis" column="postoperative_diagnosis" />
|
||
<result property="surgeryDescription" column="surgery_description" />
|
||
<result property="postoperativeAdvice" column="postoperative_advice" />
|
||
<result property="complications" column="complications" />
|
||
<result property="surgeryFee" column="surgery_fee" />
|
||
<result property="anesthesiaFee" column="anesthesia_fee" />
|
||
<result property="totalFee" column="total_fee" />
|
||
<result property="remark" column="remark" />
|
||
<result property="createTime" column="create_time" />
|
||
<result property="updateTime" column="update_time" />
|
||
<result property="emergencyFlag" column="emergency_flag" />
|
||
<result property="implantFlag" column="implant_flag" />
|
||
<result property="operatingRoomConfirmTime" column="operating_room_confirm_time" />
|
||
<result property="operatingRoomConfirmUser" column="operating_room_confirm_user" />
|
||
</resultMap>
|
||
|
||
<sql id="selectSurgeryVo">
|
||
SELECT
|
||
s.id,
|
||
s.surgery_no,
|
||
s.patient_id,
|
||
p.name as patient_name,
|
||
CASE p.gender_enum WHEN 0 THEN '男' WHEN 1 THEN '女' ELSE '未知' END as patient_gender,
|
||
EXTRACT(YEAR FROM AGE(p.birth_date)) as patient_age,
|
||
s.encounter_id,
|
||
e.bus_no as encounter_no,
|
||
pi.identifier_no as patient_card_no,
|
||
s.apply_doctor_id,
|
||
COALESCE(s.apply_doctor_name, apply_doc.name) as apply_doctor_name,
|
||
s.apply_dept_id,
|
||
COALESCE(s.apply_dept_name, apply_dept.name) as apply_dept_name,
|
||
s.surgery_name,
|
||
s.surgery_code,
|
||
s.surgery_type_enum,
|
||
CASE s.surgery_type_enum
|
||
WHEN 1 THEN '门诊手术'
|
||
WHEN 2 THEN '住院手术'
|
||
WHEN 3 THEN '急诊手术'
|
||
WHEN 4 THEN '择期手术'
|
||
ELSE '未知'
|
||
END as surgery_type_enum_dictText,
|
||
s.surgery_level,
|
||
CASE s.surgery_level
|
||
WHEN 1 THEN '一级手术'
|
||
WHEN 2 THEN '二级手术'
|
||
WHEN 3 THEN '三级手术'
|
||
WHEN 4 THEN '四级手术'
|
||
WHEN 5 THEN '特级手术'
|
||
ELSE '未知'
|
||
END as surgery_level_dictText,
|
||
s.status_enum,
|
||
CASE s.status_enum
|
||
WHEN 0 THEN '待排期'
|
||
WHEN 1 THEN '已排期'
|
||
WHEN 2 THEN '手术中'
|
||
WHEN 3 THEN '已完成'
|
||
WHEN 4 THEN '已取消'
|
||
WHEN 5 THEN '暂停'
|
||
ELSE '未知'
|
||
END as status_enum_dictText,
|
||
s.planned_time,
|
||
s.actual_start_time,
|
||
s.actual_end_time,
|
||
s.main_surgeon_id,
|
||
COALESCE(s.main_surgeon_name, main_surgeon.name) as main_surgeon_name,
|
||
s.assistant_1_id,
|
||
COALESCE(s.assistant_1_name, assistant1.name) as assistant_1_name,
|
||
s.assistant_2_id,
|
||
COALESCE(s.assistant_2_name, assistant2.name) as assistant_2_name,
|
||
s.anesthetist_id,
|
||
COALESCE(s.anesthetist_name, anesthetist.name) as anesthetist_name,
|
||
s.scrub_nurse_id,
|
||
COALESCE(s.scrub_nurse_name, scrub_nurse.name) as scrub_nurse_name,
|
||
s.anesthesia_type_enum,
|
||
CASE s.anesthesia_type_enum
|
||
WHEN 0 THEN '无麻醉'
|
||
WHEN 1 THEN '局部麻醉'
|
||
WHEN 2 THEN '区域麻醉'
|
||
WHEN 3 THEN '全身麻醉'
|
||
WHEN 4 THEN '脊椎麻醉'
|
||
WHEN 5 THEN '硬膜外麻醉'
|
||
WHEN 6 THEN '表面麻醉'
|
||
ELSE '未知'
|
||
END as anesthesia_type_enum_dictText,
|
||
s.body_site,
|
||
s.incision_level,
|
||
CASE s.incision_level
|
||
WHEN 1 THEN 'I级切口'
|
||
WHEN 2 THEN 'II级切口'
|
||
WHEN 3 THEN 'III级切口'
|
||
WHEN 4 THEN 'IV级切口'
|
||
ELSE '未知'
|
||
END as incision_level_dictText,
|
||
s.healing_level,
|
||
CASE s.healing_level
|
||
WHEN 1 THEN '甲级愈合'
|
||
WHEN 2 THEN '乙级愈合'
|
||
WHEN 3 THEN '丙级愈合'
|
||
ELSE '未知'
|
||
END as healing_level_dictText,
|
||
s.operating_room_id,
|
||
COALESCE(s.operating_room_name, r.name) as operating_room_name,
|
||
r.organization_id as operating_room_org_id,
|
||
ro.name as operating_room_org_name,
|
||
s.org_id,
|
||
COALESCE(s.org_name, o.name) as org_name,
|
||
s.surgery_indication,
|
||
s.preoperative_diagnosis,
|
||
s.postoperative_diagnosis,
|
||
s.surgery_description,
|
||
s.postoperative_advice,
|
||
s.complications,
|
||
s.surgery_fee,
|
||
s.anesthesia_fee,
|
||
s.total_fee,
|
||
s.remark,
|
||
s.create_time,
|
||
s.update_time,
|
||
s.emergency_flag,
|
||
s.implant_flag,
|
||
s.operating_room_confirm_time,
|
||
s.operating_room_confirm_user
|
||
FROM cli_surgery s
|
||
LEFT JOIN adm_patient p ON s.patient_id = p.id
|
||
LEFT JOIN adm_encounter e ON s.encounter_id = e.id
|
||
LEFT JOIN (
|
||
SELECT patient_id, identifier_no
|
||
FROM (
|
||
SELECT patient_id, identifier_no,
|
||
ROW_NUMBER() OVER (PARTITION BY patient_id ORDER BY create_time ASC) AS rn
|
||
FROM adm_patient_identifier
|
||
WHERE delete_flag = '0'
|
||
AND identifier_no IS NOT NULL
|
||
AND identifier_no != ''
|
||
) t
|
||
WHERE rn = 1
|
||
) pi ON s.patient_id = pi.patient_id
|
||
LEFT JOIN adm_operating_room r ON s.operating_room_id = r.id
|
||
LEFT JOIN adm_organization ro ON r.organization_id = ro.id
|
||
LEFT JOIN adm_organization o ON s.org_id = o.id
|
||
LEFT JOIN adm_practitioner main_surgeon ON s.main_surgeon_id = main_surgeon.id
|
||
LEFT JOIN adm_practitioner anesthetist ON s.anesthetist_id = anesthetist.id
|
||
LEFT JOIN adm_practitioner assistant1 ON s.assistant_1_id = assistant1.id
|
||
LEFT JOIN adm_practitioner assistant2 ON s.assistant_2_id = assistant2.id
|
||
LEFT JOIN adm_practitioner scrub_nurse ON s.scrub_nurse_id = scrub_nurse.id
|
||
LEFT JOIN adm_practitioner apply_doc ON s.apply_doctor_id = apply_doc.id
|
||
LEFT JOIN adm_organization apply_dept ON s.apply_dept_id = apply_dept.id
|
||
</sql>
|
||
|
||
<!-- 优化版分页查询:减少JOIN,使用子查询预加载关联数据 -->
|
||
<select id="getSurgeryPage" parameterType="com.baomidou.mybatisplus.core.conditions.query.QueryWrapper" resultMap="SurgeryResult">
|
||
SELECT
|
||
s.id,
|
||
s.surgery_no,
|
||
s.patient_id,
|
||
s.patient_name,
|
||
s.encounter_id,
|
||
s.apply_doctor_id,
|
||
s.apply_doctor_name,
|
||
s.apply_dept_id,
|
||
s.apply_dept_name,
|
||
s.surgery_name,
|
||
s.surgery_code,
|
||
s.surgery_type_enum,
|
||
s.surgery_level,
|
||
s.status_enum,
|
||
s.planned_time,
|
||
s.actual_start_time,
|
||
s.actual_end_time,
|
||
s.main_surgeon_id,
|
||
s.main_surgeon_name,
|
||
s.assistant_1_id,
|
||
s.assistant_1_name,
|
||
s.assistant_2_id,
|
||
s.assistant_2_name,
|
||
s.anesthetist_id,
|
||
s.anesthetist_name,
|
||
s.scrub_nurse_id,
|
||
s.scrub_nurse_name,
|
||
s.anesthesia_type_enum,
|
||
s.body_site,
|
||
s.incision_level,
|
||
s.healing_level,
|
||
s.operating_room_id,
|
||
s.operating_room_name,
|
||
s.org_id,
|
||
s.org_name,
|
||
s.surgery_indication,
|
||
s.preoperative_diagnosis,
|
||
s.postoperative_diagnosis,
|
||
s.surgery_description,
|
||
s.postoperative_advice,
|
||
s.complications,
|
||
s.surgery_fee,
|
||
s.anesthesia_fee,
|
||
s.total_fee,
|
||
s.remark,
|
||
s.create_time,
|
||
s.update_time,
|
||
s.emergency_flag,
|
||
s.implant_flag,
|
||
s.operating_room_confirm_time,
|
||
s.operating_room_confirm_user,
|
||
<!-- 患者信息:只查询必要字段 -->
|
||
p.gender_enum as patient_gender,
|
||
p.birth_date,
|
||
<!-- 就诊编号 -->
|
||
e.bus_no as encounter_no,
|
||
<!-- 就诊卡号 -->
|
||
pi.identifier_no as patient_card_no,
|
||
<!-- 字典文本:使用CASE WHEN避免额外JOIN -->
|
||
CASE s.surgery_type_enum
|
||
WHEN 1 THEN '门诊手术'
|
||
WHEN 2 THEN '住院手术'
|
||
WHEN 3 THEN '急诊手术'
|
||
WHEN 4 THEN '择期手术'
|
||
ELSE '未知'
|
||
END as surgery_type_enum_dictText,
|
||
CASE s.surgery_level
|
||
WHEN 1 THEN '一级手术'
|
||
WHEN 2 THEN '二级手术'
|
||
WHEN 3 THEN '三级手术'
|
||
WHEN 4 THEN '四级手术'
|
||
WHEN 5 THEN '特级手术'
|
||
ELSE '未知'
|
||
END as surgery_level_dictText,
|
||
CASE s.status_enum
|
||
WHEN 0 THEN '待排期'
|
||
WHEN 1 THEN '已排期'
|
||
WHEN 2 THEN '手术中'
|
||
WHEN 3 THEN '已完成'
|
||
WHEN 4 THEN '已取消'
|
||
WHEN 5 THEN '暂停'
|
||
ELSE '未知'
|
||
END as status_enum_dictText,
|
||
CASE s.anesthesia_type_enum
|
||
WHEN 0 THEN '无麻醉'
|
||
WHEN 1 THEN '局部麻醉'
|
||
WHEN 2 THEN '区域麻醉'
|
||
WHEN 3 THEN '全身麻醉'
|
||
WHEN 4 THEN '脊椎麻醉'
|
||
WHEN 5 THEN '硬膜外麻醉'
|
||
WHEN 6 THEN '表面麻醉'
|
||
ELSE '未知'
|
||
END as anesthesia_type_enum_dictText,
|
||
CASE s.incision_level
|
||
WHEN 1 THEN 'I级切口'
|
||
WHEN 2 THEN 'II级切口'
|
||
WHEN 3 THEN 'III级切口'
|
||
WHEN 4 THEN 'IV级切口'
|
||
ELSE '未知'
|
||
END as incision_level_dictText,
|
||
CASE s.healing_level
|
||
WHEN 1 THEN '甲级愈合'
|
||
WHEN 2 THEN '乙级愈合'
|
||
WHEN 3 THEN '丙级愈合'
|
||
ELSE '未知'
|
||
END as healing_level_dictText,
|
||
<!-- 计算年龄 -->
|
||
EXTRACT(YEAR FROM AGE(p.birth_date)) as patient_age
|
||
FROM cli_surgery s
|
||
<!-- 只JOIN必要的表:患者和就诊 -->
|
||
LEFT JOIN adm_patient p ON s.patient_id = p.id
|
||
LEFT JOIN adm_encounter e ON s.encounter_id = e.id
|
||
<!-- 关联患者标识表获取就诊卡号 -->
|
||
LEFT JOIN (
|
||
SELECT patient_id, identifier_no
|
||
FROM (
|
||
SELECT patient_id, identifier_no,
|
||
ROW_NUMBER() OVER (PARTITION BY patient_id ORDER BY create_time ASC) AS rn
|
||
FROM adm_patient_identifier
|
||
WHERE delete_flag = '0'
|
||
AND identifier_no IS NOT NULL
|
||
AND identifier_no != ''
|
||
) t
|
||
WHERE rn = 1
|
||
) pi ON s.patient_id = pi.patient_id
|
||
<where>
|
||
s.delete_flag = '0'
|
||
<if test="ew.sqlSegment != null and ew.sqlSegment != ''">
|
||
<![CDATA[
|
||
AND ${ew.sqlSegment.replace('tenant_id', 's.tenant_id').replace('create_time', 's.create_time').replace('surgery_no', 's.surgery_no').replace('surgery_name', 's.surgery_name').replace('patient_name', 's.patient_name').replace('main_surgeon_name', 's.main_surgeon_name').replace('anesthetist_name', 's.anesthetist_name').replace('org_name', 's.org_name').replace('status_enum', 's.status_enum').replace('planned_time', 's.planned_time')}
|
||
]]>
|
||
</if>
|
||
</where>
|
||
</select>
|
||
|
||
<select id="getSurgeryDetail" parameterType="Long" resultMap="SurgeryResult">
|
||
<include refid="selectSurgeryVo"/>
|
||
WHERE s.id = #{id} AND s.delete_flag = '0'
|
||
</select>
|
||
|
||
</mapper> |