eight
2024-10-14 22881a1dd395aa0d83025842ed57764b4e15b5bf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
package cn.lihu.jh.module.ecg.dal.mysql.queue;
 
import cn.lihu.jh.framework.common.pojo.PageResult;
import cn.lihu.jh.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.lihu.jh.framework.mybatis.core.mapper.BaseMapperX;
import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueDO;
import cn.lihu.jh.module.ecg.dal.dataobject.queue.BedQueueStatisticDO;
import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueStatisticDO;
import org.apache.ibatis.annotations.*;
import cn.lihu.jh.module.ecg.controller.admin.queue.vo.*;
 
import java.util.List;
 
/**
 * 排队 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface QueueMapper extends BaseMapperX<QueueDO> {
 
    default PageResult<QueueDO> selectPage(QueuePageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<QueueDO>()
                .eqIfPresent(QueueDO::getPatId, reqVO.getPatId())
                .likeIfPresent(QueueDO::getPatName, reqVO.getPatName())
                .eqIfPresent(QueueDO::getPatGender, reqVO.getPatGender())
                .eqIfPresent(QueueDO::getBookTimeslot, reqVO.getBookTimeslot())
                .eqIfPresent(QueueDO::getBookCheckType, reqVO.getBookCheckType())
                .eqIfPresent(QueueDO::getSeqNum, reqVO.getSeqNum())
                .eqIfPresent(QueueDO::getStatus, reqVO.getStatus())
                .eqIfPresent(QueueDO::getPassed, reqVO.getPassed())
                .eqIfPresent(QueueDO::getExpired, reqVO.getExpired())
                .eqIfPresent(QueueDO::getRoomId, reqVO.getRoomId())
                .eqIfPresent(QueueDO::getBedNo, reqVO.getBedNo())
                .betweenIfPresent(QueueDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(QueueDO::getId));
    }
 
    @Select("SELECT max(seq_num) FROM lihu.queue")
    Integer getMaxSeqNum();
 
    @Select("SELECT * FROM lihu.queue where pat_id = #{patId}")
    QueueDO getQueueByPatId(@Param("patId")String patId);
 
    @Select("<script>" +
            "SELECT * FROM lihu.queue " +
            "where room_id = #{roomId} and status in (" +
            " <foreach collection='statusList' separator=',' item='status'>" +
            " #{status} " +
            " </foreach> )" +
            " order by status desc, seq_num" +
            "</script>")
    List<QueueDO> getRoomQueueByStatus(@Param("roomId")Long roomId, @Param("statusList")List<Byte> statusList);
 
    @Select("<script>" +
            "SELECT * FROM lihu.queue " +
            "where status in (" +
            " <foreach collection='statusList' separator=',' item='status'>" +
            "  #{status} " +
            " </foreach> )" +
            " order by status desc, seq_num" +
            "</script>")
    List<QueueDO> getQueueByStatus( @Param("statusList")List<Byte> statusList);
 
    @Select("<script>" +
            "SELECT * FROM lihu.queue " +
            "where id >= #{from} and status in (" +
            " <foreach collection='statusList' separator=',' item='status'>" +
            "  #{status} " +
            " </foreach> )" +
            " limit #{size} " +
            " order by id" +
            "</script>")
    List<QueueDO> getPartialQueueByStatus( @Param("statusList")List<Byte> statusList, @Param("from") Integer from, @Param("size") Integer size);
 
    @Select("<script>" +
            "SELECT count(1) as total_in_status FROM lihu.queue where status in (" +
            " <foreach collection='statusList' separator=',' item='status'>" +
            "  #{status} " +
            " </foreach> );" +
            "</script>")
    Integer statusStatistic(@Param("statusList")List<Byte> statusList);
 
    @Select("<script>" +
            "SELECT count(1) as total_in_status FROM lihu.queue where " +
            " status in ( " +
            " <foreach collection='statusList' separator=',' item='status'>" +
            "  #{status} " +
            " </foreach> ) " +
            " and book_check_type in ( " +
            " <foreach collection='checkTypes' separator=',' item='checkType'>" +
            "  #{checkType} " +
            " </foreach> ) " +
            "</script>")
    Integer checkTypeAndStatusStatistic( @Param("checkTypes")Integer[] checkTypes, @Param("statusList")List<Byte> statusList );
 
    @Select("<script>" +
            "SELECT room_id, bed_no, count(1) as total_in_status FROM lihu.queue where status in (" +
            " <foreach collection='statusList' separator=',' item='status'>" +
            " #{status} " +
            " </foreach> )" +
            " group by room_id, bed_no; "
            +"</script>")
    List<QueueStatisticDO> queueStatistic(@Param("statusList")List<Byte> statusList);
 
    @Select("<script>" +
            "SELECT status, count(1) as total_in_status FROM lihu.queue where " +
            " room_id = #{roomId} and bed_no = #{bedNo} " +
            " group by status " +
            "</script>")
    List<BedQueueStatisticDO> bedQueueStatistic(@Param("roomId")Long roomId, @Param("bedNo")String bedNo);
 
    @Select("<script>" +
            "SELECT status, count(1) as total_in_status FROM lihu.queue where " +
            " room_id = #{roomId} " +
            " group by status " +
            "</script>")
    List<BedQueueStatisticDO> roomQueueStatistic(@Param("roomId")Long roomId);
 
    @Select("<script>" +
            "SELECT count(1) FROM lihu.queue " +
            "where room_id = #{roomId} and bed_no = #{bedNo} and status in (" +
            " <foreach collection='statusList' separator=',' item='status'>" +
            "   #{status} " +
            " </foreach> )" +
            "</script>")
    Integer bedQueueStatisticByStatus(@Param("roomId")Long roomId, @Param("bedNo")String bedNo, @Param("statusList")List<Byte> statusList);
 
    @Select("<script>" +
            "SELECT * FROM lihu.queue " +
            "where room_id = #{roomId} and bed_no = #{bedNo} and status in (" +
            " <foreach collection='statusList' separator=',' item='status'>" +
            "   #{status} " +
            " </foreach> )" +
            " order by status desc, seq_num" +
            "</script>")
    List<QueueDO> getBedQueueByStatus(@Param("roomId")Long roomId, @Param("bedNo")String bedNo, @Param("statusList")List<Byte> statusList);
 
    @Update("update lihu.queue set status = #{newStatus} where seq_num = \n" +
            "(select a.min_seq_num from \n" +
            " (select min(seq_num) as min_seq_num from lihu.queue where room_id = #{roomId} and bed_no = #{bedNo} and status = #{curStatus}) a )")
    Integer updateBedQueueStatus(@Param("roomId")Long roomId, @Param("bedNo")String bedNo, @Param("curStatus")Byte curStatus, @Param("newStatus")Byte newStatus);
 
    // 某个诊室范围内 [已领用]人员 抢占
    @Update("update lihu.queue set status = #{newStatus}, bed_no = #{bedNo} where seq_num = \n" +
            "(select a.min_seq_num from \n" +
            " (select min(seq_num) as min_seq_num from lihu.queue where room_id = #{roomId} and status = #{curStatus}) a )")
    Integer preemptReceivedPatient(@Param("roomId")Long roomId, @Param("bedNo")String bedNo, @Param("curStatus")Byte curStatus, @Param("newStatus")Byte newStatus);
 
    @Update("update lihu.queue set status = #{newStatus} where pat_id = #{patId} and status = #{curStatus}")
    Integer updatePatientQueueStatus(@Param("patId")String patId, @Param("curStatus")Byte curStatus, @Param("newStatus")Byte newStatus);
 
    // 整个系统范围内 [排队中]人员 抢占
    @Update("update lihu.queue set status = #{newStatus}, room_id = #{roomId}, room_name = #{roomName}, \n" +
            " bed_no = #{bedNo}, seq_num = #{seqNum} where id = \n" +
            "  (select a.id from \n" +
            "    (select id from lihu.queue where status = #{curStatus} and book_check_type= #{checkType} order by jump_flag desc, book_timeslot, create_time limit 1) a)")
    Integer preemptWaitingPatient(@Param("roomId")Long roomId, @Param("roomName")String roomName, @Param("bedNo")String bedNo,
                                  @Param("seqNum")Integer seqNum, @Param("curStatus")Byte curStatus, @Param("newStatus")Byte newStatus,
                                  @Param("checkType")Integer checkType);
 
    @Update("update lihu.queue set status = #{newStatus}, seq_num = #{seqNum}, passed = 1 " +
            " where id = " +
            "  (select a.id from \n" +
            "    (select id from lihu.queue where room_id = #{roomId} and bed_no = #{bedNo} and status = #{curStatus} order by seq_num limit 1) a)")
    Integer queueRecalledPatient(@Param("roomId")Long roomId, @Param("roomName")String roomName, @Param("bedNo")String bedNo,
                                 @Param("seqNum")Integer seqNum, @Param("curStatus")Byte curStatus, @Param("newStatus")Byte newStatus);
 
    @Update("update lihu.queue set status = #{newStatus} " +
            " where room_id = #{roomId} and bed_no = #{bedNo} and status = #{curStatus} and pat_id = #{patId} ")
    Integer recallPassedPatient(@Param("roomId")Long roomId, @Param("bedNo")String bedNo, @Param("patId")String patId,
                                @Param("curStatus")Byte curStatus, @Param("newStatus")Byte newStatus);
 
    @Update("update lihu.queue set jump_flag = #{jumped} " +
            " where status = #{curStatus} and pat_id = #{patId}")
    Integer queueJump(@Param("patId")String patId, @Param("curStatus")Byte curStatus, @Param("jumped")Byte jumped );
 
    //@Update("TRUNCATE TABLE lihu.queue")
    @Delete("delete from lihu.queue where TO_DAYS(book_date) != TO_DAYS(NOW())")
    void clearQueue();
}