232 预约管理-》门诊预约挂号:打开界面报错且无医生排班预约号源数据
This commit is contained in:
@@ -0,0 +1,309 @@
|
||||
<?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.appointmentmanage.mapper.ScheduleSlotMapper">
|
||||
|
||||
<!-- 注意这里的 resultType 指向了您刚建好的 DTO 实体类 -->
|
||||
<select id="selectAllTicketSlots" resultType="com.openhis.appointmentmanage.domain.TicketSlotDTO">
|
||||
SELECT
|
||||
s.id AS slotId,
|
||||
p.schedule_id AS scheduleId,
|
||||
p.doctor_name AS doctor,
|
||||
p.dept_id AS departmentId,
|
||||
p.fee AS fee,
|
||||
o.patient_id AS patientId,
|
||||
o.patient_name AS patientName,
|
||||
o.medical_card AS medicalCard,
|
||||
o.phone AS phone,
|
||||
o.status AS orderStatus,
|
||||
s.status AS slotStatus,
|
||||
s.expect_time AS expectTime,
|
||||
p.schedule_date AS scheduleDate,
|
||||
d.reg_type AS regType,
|
||||
p.status AS poolStatus,
|
||||
p.stop_reason AS stopReason,
|
||||
d.is_stopped AS isStopped
|
||||
FROM
|
||||
adm_schedule_slot s
|
||||
INNER JOIN adm_schedule_pool p ON s.pool_id = p.id
|
||||
LEFT JOIN adm_doctor_schedule d ON p.schedule_id = d.id
|
||||
LEFT JOIN (
|
||||
SELECT DISTINCT
|
||||
ON (slot_id) slot_id,
|
||||
patient_id,
|
||||
patient_name,
|
||||
medical_card,
|
||||
phone,
|
||||
status
|
||||
FROM
|
||||
order_main
|
||||
WHERE
|
||||
status IN (1, 2)
|
||||
ORDER BY
|
||||
slot_id,
|
||||
create_time DESC
|
||||
) o ON o.slot_id = s.id
|
||||
WHERE
|
||||
p.delete_flag = '0'
|
||||
AND s.delete_flag = '0'
|
||||
ORDER BY
|
||||
p.schedule_date,
|
||||
p.doctor_id,
|
||||
s.expect_time
|
||||
</select>
|
||||
|
||||
<select id="selectTicketSlotById" resultType="com.openhis.appointmentmanage.domain.TicketSlotDTO">
|
||||
SELECT
|
||||
s.id AS slotId,
|
||||
p.schedule_id AS scheduleId,
|
||||
p.doctor_name AS doctor,
|
||||
p.doctor_id AS doctorId,
|
||||
p.dept_id AS departmentId,
|
||||
org.name AS departmentName,
|
||||
p.fee AS fee,
|
||||
o.patient_id AS patientId,
|
||||
o.patient_name AS patientName,
|
||||
o.medical_card AS medicalCard,
|
||||
o.phone AS phone,
|
||||
o.status AS orderStatus,
|
||||
s.status AS slotStatus,
|
||||
s.expect_time AS expectTime,
|
||||
p.schedule_date AS scheduleDate,
|
||||
d.reg_type AS regType,
|
||||
p.status AS poolStatus,
|
||||
p.stop_reason AS stopReason,
|
||||
d.is_stopped AS isStopped
|
||||
FROM
|
||||
adm_schedule_slot s
|
||||
INNER JOIN adm_schedule_pool p ON s.pool_id = p.id
|
||||
LEFT JOIN adm_doctor_schedule d ON p.schedule_id = d.id
|
||||
LEFT JOIN adm_organization org ON p.dept_id = org.id
|
||||
AND org.delete_flag = '0'
|
||||
LEFT JOIN (
|
||||
SELECT DISTINCT
|
||||
ON (slot_id) slot_id,
|
||||
patient_id,
|
||||
patient_name,
|
||||
medical_card,
|
||||
phone,
|
||||
status
|
||||
FROM
|
||||
order_main
|
||||
WHERE
|
||||
status IN (1, 2)
|
||||
ORDER BY
|
||||
slot_id,
|
||||
create_time DESC
|
||||
) o ON o.slot_id = s.id
|
||||
WHERE
|
||||
s.id = #{id}
|
||||
</select>
|
||||
|
||||
<update id="lockSlotForBooking">
|
||||
UPDATE adm_schedule_slot
|
||||
SET
|
||||
status = 1,
|
||||
update_time = now()
|
||||
WHERE
|
||||
id = #{slotId}
|
||||
AND status = 0
|
||||
AND delete_flag = '0'
|
||||
</update>
|
||||
|
||||
<update id="updateSlotStatus">
|
||||
UPDATE adm_schedule_slot
|
||||
SET
|
||||
status = #{status},
|
||||
<if test="status == 0">
|
||||
order_id = NULL,
|
||||
</if>
|
||||
update_time = now()
|
||||
WHERE
|
||||
id = #{slotId}
|
||||
AND delete_flag = '0'
|
||||
</update>
|
||||
|
||||
<select id="selectPoolIdBySlotId" resultType="java.lang.Long">
|
||||
SELECT pool_id
|
||||
FROM adm_schedule_slot
|
||||
WHERE id = #{slotId}
|
||||
AND delete_flag = '0'
|
||||
</select>
|
||||
|
||||
<update id="bindOrderToSlot">
|
||||
UPDATE adm_schedule_slot
|
||||
SET
|
||||
order_id = #{orderId},
|
||||
update_time = now()
|
||||
WHERE
|
||||
id = #{slotId}
|
||||
AND status = 1
|
||||
AND delete_flag = '0'
|
||||
</update>
|
||||
|
||||
<select id="selectTicketSlotsPage" resultType="com.openhis.appointmentmanage.domain.TicketSlotDTO">
|
||||
SELECT
|
||||
s.id AS slotId,
|
||||
p.schedule_id AS scheduleId,
|
||||
p.doctor_name AS doctor,
|
||||
p.doctor_id AS doctorId,
|
||||
p.dept_id AS departmentId,
|
||||
org.name AS departmentName,
|
||||
p.fee AS fee,
|
||||
o.patient_id AS patientId,
|
||||
o.patient_name AS patientName,
|
||||
o.medical_card AS medicalCard,
|
||||
o.phone AS phone,
|
||||
o.status AS orderStatus,
|
||||
s.status AS slotStatus,
|
||||
s.expect_time AS expectTime,
|
||||
p.schedule_date AS scheduleDate,
|
||||
d.reg_type AS regType,
|
||||
p.status AS poolStatus,
|
||||
p.stop_reason AS stopReason,
|
||||
d.is_stopped AS isStopped
|
||||
FROM
|
||||
adm_schedule_slot s
|
||||
INNER JOIN adm_schedule_pool p ON s.pool_id = p.id
|
||||
LEFT JOIN adm_doctor_schedule d ON p.schedule_id = d.id
|
||||
LEFT JOIN adm_organization org ON p.dept_id = org.id
|
||||
AND org.delete_flag = '0'
|
||||
LEFT JOIN (
|
||||
SELECT DISTINCT
|
||||
ON (slot_id) slot_id,
|
||||
patient_id,
|
||||
patient_name,
|
||||
medical_card,
|
||||
phone,
|
||||
status
|
||||
FROM
|
||||
order_main
|
||||
WHERE
|
||||
status IN (1, 2)
|
||||
ORDER BY
|
||||
slot_id,
|
||||
create_time DESC
|
||||
) o ON o.slot_id = s.id
|
||||
<where>
|
||||
p.delete_flag = '0'
|
||||
AND s.delete_flag = '0' <!-- 1. 按日期查 -->
|
||||
<if test="query.date != null and query.date != ''">
|
||||
AND p.schedule_date = CAST(#{query.date} AS DATE)
|
||||
</if>
|
||||
<!-- 2. 按科室查 -->
|
||||
<if test="query.department != null and query.department != '' and query.department != 'all'">
|
||||
AND org.name = #{query.department}
|
||||
</if>
|
||||
<if test="query.doctorId != null">
|
||||
AND p.doctor_id = #{query.doctorId}
|
||||
</if>
|
||||
<!-- 3. 按号源类型查 (专家/普通) -->
|
||||
<if test="query.type != null and query.type != ''">
|
||||
<choose>
|
||||
<when test="query.type == 'expert'">
|
||||
AND d.reg_type = 1
|
||||
</when>
|
||||
<when test="query.type == 'general'">
|
||||
AND (
|
||||
d.reg_type != 1
|
||||
OR d.reg_type IS NULL
|
||||
)
|
||||
</when>
|
||||
</choose>
|
||||
</if>
|
||||
<!-- 4. 模糊搜索患者信息 -->
|
||||
<if test="query.name != null and query.name != ''">
|
||||
AND o.patient_name LIKE CONCAT('%', #{query.name}, '%')
|
||||
</if>
|
||||
<if test="query.card != null and query.card != ''">
|
||||
AND o.medical_card LIKE CONCAT('%', #{query.card}, '%')
|
||||
</if>
|
||||
<if test="query.phone != null and query.phone != ''">
|
||||
AND o.phone LIKE CONCAT('%', #{query.phone}, '%')
|
||||
</if>
|
||||
<!-- 5. 核心:解答您疑问的 4 种业务状态的复合查询! -->
|
||||
<if test="query.status != null and query.status != '' and query.status != 'all'">
|
||||
<choose>
|
||||
<when test="query.status == 'unbooked'">
|
||||
AND s.status = 0
|
||||
AND (
|
||||
d.is_stopped IS NULL
|
||||
OR d.is_stopped = FALSE
|
||||
)
|
||||
</when>
|
||||
<when test="query.status == 'booked'">
|
||||
AND s.status = 1
|
||||
AND o.status = 1
|
||||
AND (
|
||||
d.is_stopped IS NULL
|
||||
OR d.is_stopped = FALSE
|
||||
)
|
||||
</when>
|
||||
<when test="query.status == 'checked'">
|
||||
AND s.status = 1
|
||||
AND o.status = 2
|
||||
AND (
|
||||
d.is_stopped IS NULL
|
||||
OR d.is_stopped = FALSE
|
||||
)
|
||||
</when>
|
||||
<when test="query.status == 'cancelled'">
|
||||
AND (
|
||||
s.status = 2
|
||||
OR d.is_stopped = TRUE
|
||||
)
|
||||
</when>
|
||||
</choose>
|
||||
</if>
|
||||
</where>
|
||||
ORDER BY
|
||||
p.schedule_date DESC,
|
||||
s.expect_time ASC
|
||||
</select>
|
||||
|
||||
<select id="selectDoctorAvailabilitySummary" resultType="com.openhis.appointmentmanage.domain.DoctorAvailabilityDTO">
|
||||
SELECT
|
||||
p.doctor_id AS doctorId,
|
||||
p.doctor_name AS doctorName,
|
||||
COALESCE(SUM(GREATEST(COALESCE(p.total_quota, 0) - COALESCE(p.booked_num, 0) - COALESCE(p.locked_num, 0), 0)), 0) AS available,
|
||||
CASE
|
||||
WHEN MAX(CASE WHEN d.reg_type = 1 THEN 1 ELSE 0 END) = 1 THEN 'expert'
|
||||
ELSE 'general'
|
||||
END AS ticketType
|
||||
FROM
|
||||
adm_schedule_pool p
|
||||
LEFT JOIN adm_doctor_schedule d ON p.schedule_id = d.id
|
||||
LEFT JOIN adm_organization org ON p.dept_id = org.id
|
||||
AND org.delete_flag = '0'
|
||||
<where>
|
||||
p.delete_flag = '0'
|
||||
<if test="query.date != null and query.date != ''">
|
||||
AND p.schedule_date = CAST(#{query.date} AS DATE)
|
||||
</if>
|
||||
<if test="query.department != null and query.department != '' and query.department != 'all'">
|
||||
AND org.name = #{query.department}
|
||||
</if>
|
||||
<if test="query.type != null and query.type != '' and query.type != 'all'">
|
||||
<choose>
|
||||
<when test="query.type == 'expert'">
|
||||
AND d.reg_type = 1
|
||||
</when>
|
||||
<when test="query.type == 'general'">
|
||||
AND (d.reg_type != 1 OR d.reg_type IS NULL)
|
||||
</when>
|
||||
</choose>
|
||||
</if>
|
||||
<if test="query.doctorId != null">
|
||||
AND p.doctor_id = #{query.doctorId}
|
||||
</if>
|
||||
</where>
|
||||
GROUP BY
|
||||
p.doctor_id,
|
||||
p.doctor_name
|
||||
ORDER BY
|
||||
p.doctor_name ASC
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user