yxh
昨天 fce96ef468291fb9a0e6a4d34ab371315e9485d4
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueService.java
@@ -10,6 +10,7 @@
import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomRespVO;
import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueDO;
import cn.lihu.jh.framework.common.pojo.PageResult;
import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomDO;
/**
 * 排队 Service 接口
@@ -18,7 +19,7 @@
 */
public interface QueueService {
    void setQueueReadyMax(Integer max);
    void initCheckType();
    void startBiz();
    void closeBiz();
@@ -39,6 +40,13 @@
    void updatequeue(@Valid QueueSaveReqVO updateReqVO);
    /**
     * 更新停诊
     *
     * @param
     */
    void updateStop(long roomId,String bedNo);
    /**
     * 删除排队
     *
     * @param id 编号
@@ -46,10 +54,13 @@
    void deletequeue(Integer id);
    /**
     *
     * 一个工位 可能支持多个检查类型,
     */
    void startHurryUp();
    void startHurryUpOneBed(Long roomId, String bedNo);
    void startHurryUpOneCheckType(Integer checkType);
    void startBedReload();
    void startResetRoom(Boolean needCloseBed);
    MonitorInfoVO getMonitorInfo();
    ErrorCode startBedOpen(Long roomId, String roomName, String bedNo);
@@ -59,16 +70,8 @@
    ErrorCode startBedDoctorOn(Long roomId, String bedNo, Long docId, String docName);
    ErrorCode startBedDoctorOff(Long roomId, String bedNo, Long docId, String docName);
    ErrorCode startNextPatient(Long roomId, String bedNo);
    ErrorCode startNextInstallPatient(Long roomId, String bedNo);
    ErrorCode bedOpen(Long roomId, String roomName, String bedNo);
    ErrorCode bedClose(Long roomId, String bedNo);
    ErrorCode bedDoctorPause(Long roomId, String bedNo, Long docId, String docName);
    ErrorCode bedDoctorResume(Long roomId, String bedNo, Long docId, String docName);
    ErrorCode bedDoctorOn(Long roomId, String bedNo, Long docId, String docName);
    ErrorCode bedDoctorOff(Long roomId, String bedNo, Long docId, String docName);
    ErrorCode nextPatient(Long roomId, String bedNo);
    ErrorCode bedReload();
    CommonResult<RoomRespVO> getRoom(Long roomId, String bedNo, Long docId);
    /**
@@ -93,29 +96,114 @@
     */
    void queue(QueueSaveReqVO queueSaveReqVO);
    List<QueueDO> selectBookSeqNumByAppointIdList(List<Long> appointIdList);
    /**
     * 把医生候诊的队列塞满
     */
    void hurryup();
    /**
     * 医生叫下一位患者
     * 常规检查 医生叫下一位患者
     */
    void finishNextPatient(Long roomId, String bedNo);
    /**
     * 医生看完患者
     * 领用 医生叫下一位患者
     */
    void finishReceiveNextPatient(Long roomId, String bedNo);
    /**
     * 装机 医生叫下一位患者
     */
    void finishInstallNextPatient(Long roomId, String bedNo);
    /**
     * 过号排队中患者
     */
    void passWaitingPatient( String patId, Integer bookCheckType );
    /**
     * 常规过号、领用过号
     */
    void passNextPatient(Long roomId, String bedNo);
    List<QueueDO> getDoctorQueueByStatus(Long roomId, String bedNo, List<Byte> statusList);
    /**
     * 装机过号
     */
    void passInstallNextPatient(Long roomId, String bedNo);
    List<QueueDO> getBedQueueByStatus(Long roomId, String bedNo, List<Integer> statusList);
    List<QueueDO> getRoomQueueByStatus(Long roomId, List<Integer> statusList);
    PatientStatisticVO getPatientStatistic(Long roomId, String bedNo);
    Integer recallPatient(Long roomId, String bedNo, String patId);
    PatientStatisticVO getBedDevReadyStatistic(Long roomId, String bedNo);
    Integer patientJump(String patId, Byte jumped );
    PatientStatisticVO getBedDevInstallStatistic(Long roomId, String bedNo);
    void monitorInfo();
    Integer recallPassWaitingPatient(String patId, Integer checkType);
    Integer recallPatient(Long roomId, String bedNo, String patId, Integer checkType);
    Integer recallInstallPatient(Long roomId, String bedNo, String patId, Integer checkType, Long roomId_operator, String bedNo_operator);
    // ==================== 需求2:撤销「叫号 / 检查完成」 ====================
    /**
     * 撤销「检查完成」:把本工位今日的指定患者从 已就诊(40) 退回 候诊中(20)。
     * <p>
     * 必须提供 patId + checkType 做精确定位,避免误改其他患者。
     *
     * @return 受影响行数;0 表示未找到该患者今日的已完成记录
     */
    Integer undoFinishPatient(Long roomId, String bedNo, String patId, Integer checkType);
    /**
     * 撤销「误点叫号」:把本工位当前 就诊中(30) 的患者退回 候诊中(20)。
     *
     * @return 受影响行数;0 表示当前无就诊中患者
     */
    Integer undoCallPatient(Long roomId, String bedNo);
    /**
     * 取本工位今日**最近一位已完成**的患者(供界面提示可撤销对象)。
     */
    QueueDO getBedLastFinishedQueueItem(Long roomId, String bedNo);
    // ==================== 需求3:停止候诊开关 ====================
    /**
     * 设置「停止候诊」开关(持久化到 {@code clinic_room.stop_ready})。
     * <p>
     * 开启后:**已有候诊病人继续叫号,但不再新增候诊病人**;
     * 关闭后恢复正常接收。
     *
     * @param stop true=停止候诊;false=恢复
     * @return 成功返回 SUCCESS
     */
    ErrorCode setStopReady(Long roomId, String bedNo, boolean stop);
    /** 查询「停止候诊」状态;工位不存在返回 null */
    Boolean getStopReady(Long roomId, String bedNo);
    Integer patientJump(String patId, Integer bookCheckType, Byte jumped );
    List<RoomDO> getDocRoomInfo(Long docId);
    List<QueueDO> getCheckRelatedPatient(Long roomId, String bedNo);
    List<QueueDO> getInstallRelatedPatient(Long roomId, String bedNo);
    // ==================== 需求1:患者信息回填 ====================
    /**
     * 按 {@code applyNo} 从预约单(appointment)回填队列对象的患者信息。
     * <p>
     * queue 表只存了患者编号/姓名,其余(性别、出生日期、病区、床号、电话、来源、
     * 就诊卡号、登记时间、开单医师、开单日期、多耐药)都在 appointment 表。
     * <p>
     * 之所以对外暴露:大屏/诊间屏({@code CallingScreenServiceImpl})直接查
     * {@code queueMapper},不经过本 Service 的查询方法,需要显式调用本方法补齐。
     * 不补齐则大屏/诊间屏的患者信息只有姓名(性别/病区/床号等全为空)。
     *
     * @param queueDOList 队列对象列表(空/null 安全)
     */
    void fillAppointmentInfo(List<QueueDO> queueDOList);
}