package cn.lihu.jh.module.ecg.service.queue;
|
|
import javax.validation.Valid;
|
import java.util.List;
|
|
import cn.lihu.jh.framework.common.exception.ErrorCode;
|
import cn.lihu.jh.framework.common.pojo.CommonResult;
|
import cn.lihu.jh.module.ecg.controller.admin.queue.vo.*;
|
import cn.lihu.jh.module.ecg.controller.admin.room.vo.MonitorInfoVO;
|
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 接口
|
*
|
* @author 芋道源码
|
*/
|
public interface QueueService {
|
|
void initCheckType();
|
void startBiz();
|
void closeBiz();
|
|
|
/**
|
* 创建排队
|
*
|
* @param createReqVO 创建信息
|
* @return 编号
|
*/
|
Integer createqueue(@Valid QueueSaveReqVO createReqVO);
|
|
/**
|
* 更新排队
|
*
|
* @param updateReqVO 更新信息
|
*/
|
void updatequeue(@Valid QueueSaveReqVO updateReqVO);
|
|
/**
|
* 更新停诊
|
*
|
* @param
|
*/
|
void updateStop(long roomId,String bedNo);
|
|
/**
|
* 删除排队
|
*
|
* @param id 编号
|
*/
|
void deletequeue(Integer id);
|
|
/**
|
* 一个工位 可能支持多个检查类型,
|
*/
|
void startHurryUpOneBed(Long roomId, String bedNo);
|
|
/**
|
* 立即补人(现场自救 + 自助诊断):手动触发一次该工位的自动分流,
|
* 并返回「系统开诊状态 / 是否停止候诊 / 候诊上限 / 补人前后人数 / 结论」。
|
*
|
* <p>调用方必须保证"当前登录人是该工位主人"(Controller 上用 {@code @RequireBedOwner})。
|
*/
|
java.util.Map<String, Object> hurryUpNow(Long roomId, String bedNo);
|
void startHurryUpOneCheckType(Integer checkType);
|
|
void startBedReload();
|
void startResetRoom(Boolean needCloseBed);
|
MonitorInfoVO getMonitorInfo();
|
|
ErrorCode startBedOpen(Long roomId, String roomName, String bedNo);
|
ErrorCode startBedClose(Long roomId, String bedNo);
|
ErrorCode startBedDoctorPause(Long roomId, String bedNo, Long docId, String docName);
|
ErrorCode startBedDoctorResume(Long roomId, String bedNo, Long docId, String docName);
|
/**
|
* 医生入座(把工位主人设为该医生)。
|
*
|
* @param bedId 工位主键(可选):传入时**优先按它定位**,避免 bed_no 与请求值存在
|
* 肉眼难辨差异(结尾空格/大小写/全角)导致"明明空闲却入座失败"
|
*/
|
ErrorCode startBedDoctorOn(Long roomId, String bedNo, Long docId, String docName, Integer bedId);
|
|
/**
|
* 「本诊室排队中(未分配工位)」的患者列表(工作台"本诊室排队中(未分配)"分区用)。
|
*
|
* <p>候诊列表按 {@code room_id + bed_no} 查,只含**已分流到本工位**的患者;
|
* 排队中(10) 的患者 {@code bed_no} 为空(大屏会显示、工作台看不到),这里按本工位
|
* 开展的检查项目单独查出来,供医生手工拉入。
|
*/
|
List<cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueDO> getUnassignedWaitingPatient(Long roomId, String bedNo);
|
|
/**
|
* 手工把某位「排队中」患者拉入本工位(→ 准备中)。
|
*
|
* <p>调用方必须保证"当前登录人是该工位主人"(Controller 上用 {@code @RequireBedOwner})。
|
*/
|
ErrorCode pullWaitingPatient(Long roomId, String bedNo, Integer queueId);
|
ErrorCode startBedDoctorOff(Long roomId, String bedNo, Long docId, String docName);
|
|
/**
|
* 【本次需求】管理员强制清空工位(不要求是本人)—— 医生下班忘离座 / 换人使用同一工位时用。
|
*/
|
ErrorCode startBedDoctorOffByAdmin(Long roomId, String bedNo);
|
ErrorCode startNextPatient(Long roomId, String bedNo);
|
ErrorCode startNextInstallPatient(Long roomId, String bedNo);
|
|
CommonResult<RoomRespVO> getRoom(Long roomId, String bedNo, Long docId);
|
|
/**
|
* 获得排队
|
*
|
* @param id 编号
|
* @return 排队
|
*/
|
QueueDO getqueue(Integer id);
|
|
/**
|
* 获得排队分页
|
*
|
* @param pageReqVO 分页查询
|
* @return 排队分页
|
*/
|
PageResult<QueueDO> getqueuePage(QueuePageReqVO pageReqVO);
|
|
/**
|
* 患者排队
|
* @param queueSaveReqVO
|
*/
|
void queue(QueueSaveReqVO queueSaveReqVO);
|
|
/**
|
* 按预约单 id 批量取 queue 行(预约签到前回填「已排队 + 排队号 seq_num」用)。
|
* <p>原方法名为 {@code selectBookSeqNumByAppointIdList},号统一到 seq_num 后改名。
|
*/
|
List<QueueDO> selectQueueByAppointIdList(List<Long> appointIdList);
|
|
/**
|
* 常规检查 医生叫下一位患者
|
*/
|
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);
|
|
/**
|
* 装机过号
|
*/
|
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);
|
|
PatientStatisticVO getBedDevReadyStatistic(Long roomId, String bedNo);
|
|
PatientStatisticVO getBedDevInstallStatistic(Long roomId, String bedNo);
|
|
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);
|
}
|