eight
2024-10-12 fc8492c1a1143ef2466c8dca219b82fc5bf6550c
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceImpl.java
@@ -2,7 +2,6 @@
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
import javax.annotation.Resource;
import cn.lihu.jh.module.ecg.controller.admin.room.vo.MonitorInfoVO;
@@ -14,24 +13,20 @@
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;
import cn.lihu.jh.framework.common.exception.enums.GlobalErrorCodeConstants;
import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomDO;
import cn.lihu.jh.framework.common.exception.ErrorCode;
import cn.lihu.jh.framework.common.pojo.CommonResult;
import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomRespVO;
import cn.lihu.jh.module.ecg.dal.dataobject.queue.BedQueueStatisticDO;
import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueStatisticDO;
import cn.lihu.jh.module.ecg.dal.mysql.room.RoomMapper;
import cn.lihu.jh.module.ecg.enums.BedStatusEnum;
import cn.lihu.jh.module.ecg.enums.QueueStatusEnum;
import cn.lihu.jh.module.ecg.controller.admin.queue.vo.*;
import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueDO;
import cn.lihu.jh.framework.common.pojo.PageResult;
import cn.lihu.jh.framework.common.util.object.BeanUtils;
import cn.lihu.jh.module.ecg.dal.mysql.queue.queueMapper;
import cn.lihu.jh.module.ecg.dal.mysql.queue.QueueMapper;
import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*;
import static cn.lihu.jh.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.lihu.jh.framework.common.pojo.CommonResult.error;
@@ -54,7 +49,7 @@
    private OAuth2TokenApi oAuth2TokenApi;
    @Resource
    private queueMapper queueMapper;
    private QueueMapper queueMapper;
    @Resource
    private RoomMapper roomMapper;
@@ -223,9 +218,35 @@
    }
    @Override
    public void startHurryUp() {
    public ErrorCode startNextInstallPatient(Long roomId, String bedNo) {
        Future<ErrorCode> future = singleThreadExecutor.submit(
                new BedDoctorNextInstallPatientCallable(queueServiceTxFunctions, roomId, bedNo)
        );
        try {
            ErrorCode ret = future.get();
            return ret;
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        System.out.println("startNextInstallPatient ========");
        return ECG_INNER_ERROR;
    }
    @Override
    public void startHurryUpOneBed(Long roomId, String bedNo) {
        singleThreadExecutor.execute( () -> {
            queueServiceTxFunctions.hurryup();
            queueServiceTxFunctions.hurryupOneBed(roomId, bedNo);
        });
    }
    @Override
    public void startHurryUpOneCheckType(Integer checkType) {
        singleThreadExecutor.execute( () -> {
            queueServiceTxFunctions.hurryupOneCheckType( checkType );
        });
    }
@@ -233,7 +254,7 @@
    public void startBedReload() {
        singleThreadExecutor.execute( () -> {
            queueServiceTxFunctions.bedReload();
            queueServiceTxFunctions.hurryup();
            queueServiceTxFunctions.hurryupAllBed();
            queueServiceTxFunctions.monitorInfo();
        });
    }
@@ -254,7 +275,7 @@
    @Override
    public CommonResult<RoomRespVO> getRoom(Long roomId, String bedNo, Long docId) {
        RoomDO roomDO = roomMapper.getRoom(roomId, bedNo, docId);
        RoomDO roomDO = roomMapper.getRoomByRoomBedDoc(roomId, bedNo, docId);
        if (null == roomDO) {
            return error(ROOM_NOT_SIT);
        }
@@ -301,27 +322,69 @@
        devRent.setState( DevRentStateEnum.FREE.getState() );
        devRentMapper.insert(devRent);
        startHurryUp();
        startHurryUpOneCheckType( queue.getBookCheckType() );
    }
    // 常规检查 叫号
    @Override
    public void finishNextPatient(Long roomId, String bedNo) {
        // 从 DB 把 就诊中的人 设置为就诊完成
        Integer ret =  queueMapper.updateQueueStatus(roomId, bedNo,
        Integer ret =  queueMapper.updateBedQueueStatus(roomId, bedNo,
                QueueStatusEnum.ONSTAGE.getStatus(), QueueStatusEnum.FINISH.getStatus());
        startNextPatient(roomId, bedNo);
    }
    // 领用 叫号
    @Override
    public void finishReceiveNextPatient(Long roomId, String bedNo) {
        // 从 DB 把 [就诊中] 的人 设置为 【已领用】
        //Integer ret =  queueMapper.updateBedQueueStatus(roomId, bedNo,
        //        QueueStatusEnum.ONSTAGE.getStatus(), QueueStatusEnum.RECEIVED.getStatus());
        // 从 DB 检查 该工位 是否有 [就诊中] 人员,若有就.放弃.取下一位
        List<Byte> queueStatusList = new ArrayList<>();
        queueStatusList.add(QueueStatusEnum.ONSTAGE.getStatus());
        Integer num = queueMapper.bedQueueStatisticByStatus(roomId, bedNo, queueStatusList);
        if ( num != null && num > 0)
            return;
        startNextPatient(roomId, bedNo);
    }
    // 装机 叫号
    @Override
    public void finishInstallNextPatient(Long roomId, String bedNo) {
        // 从 DB 把 [安装中] 的人 设置为 [已就诊]
        //Integer ret =  queueMapper.updateBedQueueStatus(roomId, bedNo,
        //        QueueStatusEnum.INSTALLING.getStatus(), QueueStatusEnum.FINISH.getStatus());
        // 从 DB 检查 该工位 是否有 [就诊中] 人员,若有就.放弃.取下一位
        List<Byte> queueStatusList = new ArrayList<>();
        queueStatusList.add(QueueStatusEnum.INSTALLING.getStatus());
        Integer num = queueMapper.bedQueueStatisticByStatus(roomId, bedNo, queueStatusList);
        if ( num != null && num > 0)
            return;
        startNextInstallPatient(roomId, bedNo);
    }
    public void passNextPatient(Long roomId, String bedNo) {
        // 从 DB 把 就诊中的人 设置为过号
        Integer ret =  queueMapper.updateQueueStatus(roomId, bedNo,
        Integer ret =  queueMapper.updateBedQueueStatus(roomId, bedNo,
                QueueStatusEnum.ONSTAGE.getStatus(), QueueStatusEnum.PASSED.getStatus());
        startNextPatient(roomId, bedNo);
    }
    public List<QueueDO> getDoctorQueueByStatus(Long roomId, String bedNo, List<Byte> statusList) {
        List<QueueDO> queueDOList = queueMapper.getDoctorQueueByStatus(roomId, bedNo, statusList);
    public List<QueueDO> getBedQueueByStatus(Long roomId, String bedNo, List<Byte> statusList) {
        List<QueueDO> queueDOList = queueMapper.getBedQueueByStatus(roomId, bedNo, statusList);
        return queueDOList;
    }
    @Override
    public List<QueueDO> getRoomQueueByStatus(Long roomId, List<Byte> statusList) {
        List<QueueDO> queueDOList = queueMapper.getRoomQueueByStatus(roomId, statusList);
        return queueDOList;
    }
@@ -346,9 +409,8 @@
        return patientStatisticVO;
    }
    @Override
    public void setQueueReadyMax(Integer max) {
        queueServiceTxFunctions.setQueueReadyMax( max );
    public void initCheckType() {
        queueServiceTxFunctions.initCheckType( );
    }
    public void startBiz() {
@@ -368,14 +430,16 @@
    public Integer recallPatient(Long roomId, String bedNo, String patId) {
        Integer updateNum = queueMapper.recallPassedPatient(roomId, bedNo, patId,
                QueueStatusEnum.PASSED.getStatus(), QueueStatusEnum.RECALLED.getStatus());
        startHurryUp();
        startHurryUpOneBed(roomId, bedNo);
        return updateNum;
    }
    @Override
    public Integer patientJump(String patId, Byte jumped) {
        Integer updateNum = queueMapper.queueJump(patId, QueueStatusEnum.WAITING.getStatus(), jumped);
        startHurryUp();
        QueueDO queueDO = queueMapper.getQueueByPatId(patId);
        startHurryUpOneCheckType(Integer.valueOf(queueDO.getBookCheckType()));
        return updateNum;
    }