eight
2024-09-25 c3e27cb2e84782e99a30cc5a6e8caa67ca0cb72f
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceImpl.java
@@ -6,8 +6,13 @@
import javax.annotation.Resource;
import cn.lihu.jh.module.ecg.controller.admin.room.vo.MonitorInfoVO;
import cn.lihu.jh.module.ecg.dal.dataobject.devrent.DevRentDO;
import cn.lihu.jh.module.ecg.dal.mysql.call.CallMapper;
import cn.lihu.jh.module.ecg.dal.mysql.devrent.DevRentMapper;
import cn.lihu.jh.module.ecg.enums.DevRentStateEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
@@ -47,6 +52,12 @@
    @Resource
    private RoomMapper roomMapper;
    @Resource
    private CallMapper callMapper;
    @Resource
    private DevRentMapper devRentMapper;
    AtomicInteger openingFlag = new AtomicInteger(0);
    AtomicInteger curSeqNum = new AtomicInteger(0);
@@ -56,6 +67,11 @@
    ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
    Integer queueReadyMax = 0;
    Integer bigScrenWaitingSize = 5;
    Integer bigScrenPassedSize = 5;
    Integer bigScrenWaitingFrom = 0;
    Integer bigScrenPassedFrom = 0;
    @Override
    public Integer createqueue(QueueSaveReqVO createReqVO) {
@@ -84,8 +100,8 @@
    }
    @Override
    public ErrorCode startBedOpen(Long roomId, String bedNo) {
        Future<ErrorCode> future = singleThreadExecutor.submit( new BedOpenCallable(this, roomId, bedNo));
    public ErrorCode startBedOpen(Long roomId, String roomName, String bedNo) {
        Future<ErrorCode> future = singleThreadExecutor.submit( new BedOpenCallable(this, roomId, roomName, bedNo));
        try {
            ErrorCode ret = future.get();
@@ -244,7 +260,7 @@
     * @return
     */
    @Override
    public ErrorCode bedOpen(Long roomId, String bedNo) {
    public ErrorCode bedOpen(Long roomId, String roomName, String bedNo) {
        BedQueueBO bedQueueBO2 = mapBedVsQueue.get(String.format("%09d%s", roomId, bedNo));
        if (null != bedQueueBO2) {
            log.error("bedOpen mapBedVsQueue has existed. " + roomId + " " + bedNo);
@@ -267,6 +283,7 @@
        // 新增工位 优先队列
        BedQueueBO bedQueueBO = new BedQueueBO();
        bedQueueBO.setRoomId(roomId);
        bedQueueBO.setRoomName(roomName);
        bedQueueBO.setBedNo(bedNo);
        bedQueueBO.setMaxQueueNum(queueReadyMax);
        bedQueueBO.setQueueNum(new AtomicInteger(queueDOList.size()));
@@ -462,6 +479,8 @@
        // 清除非当天的排队人员
        queueMapper.clearQueue();
        // 清除非当天的语音叫号记录
        callMapper.clearCall();
        // 从DB 获取 工位列表
        List<BedStatusEnum> bedStatusEnumList = new ArrayList<BedStatusEnum>();
@@ -497,8 +516,7 @@
    }
    /**
     * TODO 新开队列时,需要把排队中的人 转到 就诊准备 状态
     * 等到取下一个 排队中人员 的逻辑完成后,再回来不错
     *
     */
    public void hurryup() {
        if (0 == openingFlag.get())
@@ -572,10 +590,15 @@
     * @param queueSaveReqVO
     */
    @Override
    @Transactional
    public void queue(QueueSaveReqVO queueSaveReqVO) {
        queueSaveReqVO.setStatus(QueueStatusEnum.WAITING.getStatus()); //排队中
        QueueDO queue = BeanUtils.toBean(queueSaveReqVO, QueueDO.class);
        queueMapper.insert(queue);
        DevRentDO devRent = BeanUtils.toBean(queueSaveReqVO, DevRentDO.class);
        devRent.setState( DevRentStateEnum.FREE.getState() );
        devRentMapper.insert(devRent);
        startHurryUp();
    }
@@ -681,22 +704,8 @@
    }
    @Override
    public List<QueueDO> callingData(Integer waitingNum, Integer passedNum) {
        //queueMapper.
        return null;
    }
    @Override
    public List<QueueDO> getRoomQueue(String ip, List<Byte> statusList) {
        List<RoomDO> roomDOList = roomMapper.queueByIp(ip);
        Optional<RoomDO> optionalQueueDO = roomDOList.stream().filter(item -> StringUtils.hasLength(item.getIp())).findFirst();
        if (!optionalQueueDO.isPresent()) {
            return  new ArrayList<QueueDO>();
        }
        Long roomId = optionalQueueDO.get().getRoomId();
        List<QueueDO> queueDOList = queueMapper.getRoomQueueByStatus(roomId, statusList);
        return queueDOList;
    public RoomDO getDocRoomInfo(Long docId) {
        return roomMapper.getRoomByDocId(docId);
    }
}