eight
2024-08-27 9b18e467d407c66ecc3c46a197aca45dcc3f8056
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java
@@ -4,6 +4,7 @@
import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueStatisticDO;
import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomDO;
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 org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@@ -32,8 +33,6 @@
@Service
@Validated
public class QueueServiceImpl implements QueueService {
    final static Integer MAX_QUEUE_NUM = 3;
    @Resource
    private queueMapper queueMapper;
@@ -78,28 +77,190 @@
    }
    @Override
    public Integer bedControl(Long roomId, String bedNo, Integer status) {
        // 营业期间不能关闭工位
        if ( status == 0 && openingFlag.get() == 1 )
            return 301;
    public Integer startBedOpen(Long roomId, String bedNo) {
        Future<Integer> future = singleThreadExecutor.submit( new BedOpenCallable(this, roomId, bedNo));
        // 当前状态
        roomMapper.select
        try {
            Integer ret = future.get();
            return ret;
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        return 100;
    }
    @Override
    public Integer startBedClose(Long roomId, String bedNo) {
        Future<Integer> future = singleThreadExecutor.submit( new BedCloseCallable(this, roomId, bedNo));
        try {
            Integer ret = future.get();
            return ret;
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        return 100;
    }
    @Override
    public Integer startBedDoctorPause(Long roomId, String bedNo, Long docId, String docName) {
        Future<Integer> future = singleThreadExecutor.submit(
            new BedDoctorPauseCallable(this, roomId, bedNo, docId, docName)
        );
        try {
            Integer ret = future.get();
            return ret;
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        return 100;
    }
    @Override
    public Integer startBedDoctorOn(Long roomId, String bedNo, Long docId, String docName) {
        Future<Integer> future = singleThreadExecutor.submit(
            new BedDoctorOnCallable(this, roomId, bedNo, docId, docName)
        );
        try {
            Integer ret = future.get();
            return ret;
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        return 100;
    }
    @Override
    public Integer startBedDoctorOff(Long roomId, String bedNo, Long docId, String docName) {
        Future<Integer> future = singleThreadExecutor.submit(
            new BedDoctorOffCallable(this, roomId, bedNo, docId, docName)
        );
        try {
            Integer ret = future.get();
            return ret;
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        return 100;
    }
    /**
     * 已关闭 或者 关闭中,可以开通工位
     * @param roomId
     * @param bedNo
     * @return
     */
    @Override
    public Integer bedOpen(Long roomId, String bedNo) {
        // DB update
        Integer updateNum = roomMapper.setBedStatus(roomId, bedNo, status);
        List statusList = new ArrayList<BedStatusEnum>();
        statusList.add(BedStatusEnum.CLOSED);
        statusList.add(BedStatusEnum.CLOSING);
        Integer updateNum = roomMapper.setBedStatus(roomId, bedNo,
                BedStatusEnum.OPENING, statusList);
        if ( null==updateNum || 0 == updateNum )
            return 310;
        if ( status == 10 ) {
            BedQueueBO bedQueueBO = new BedQueueBO();
            bedQueueBO.setRoomId(roomId);
            bedQueueBO.setBedNo(bedNo);
            bedQueueBO.setMaxQueueNum(MAX_QUEUE_NUM);
            bedQueueBO.setQueueNum(new AtomicInteger(0));
            priorityQueue.offer(bedQueueBO);
            mapBedVsQueue.put(String.format("%09d%s", bedQueueBO.roomId, bedQueueBO.bedNo), bedQueueBO);
        }
        List<Byte> queueStatusList = new ArrayList<>();
        queueStatusList.add(QueueStatusEnum.READY.getStatus());
        List<QueueDO> queueDOList = queueMapper.getDoctorQueueByStatus(roomId, bedNo, queueStatusList);
        // 新增工位 优先队列
        BedQueueBO bedQueueBO = new BedQueueBO();
        bedQueueBO.setRoomId(roomId);
        bedQueueBO.setBedNo(bedNo);
        bedQueueBO.setMaxQueueNum(MAX_QUEUE_NUM);
        bedQueueBO.setQueueNum(new AtomicInteger(queueDOList.size()));
        priorityQueue.offer(bedQueueBO);
        mapBedVsQueue.put(String.format("%09d%s", roomId, bedNo), bedQueueBO);
        return 0;
    }
    @Override
    public Integer bedClose(Long roomId, String bedNo) {
        BedQueueBO bedQueueBO = mapBedVsQueue.get(String.format("%09d%s", roomId, bedNo));
        if (null == bedQueueBO)
            return 320;
        // DB update
        List statusList = new ArrayList<BedStatusEnum>();
        statusList.add(BedStatusEnum.OPENING);
        statusList.add(BedStatusEnum.DOCTOR_ON);
        statusList.add(BedStatusEnum.PAUSE);
        Integer updateNum = roomMapper.setBedStatus(roomId, bedNo,
                BedStatusEnum.CLOSING, statusList);
        if ( null==updateNum || 0 == updateNum )
            return 321;
        return 0;
    }
    @Override
    public Integer bedDoctorPause(Long roomId, String bedNo, Long docId, String docName) {
        BedQueueBO bedQueueBO = mapBedVsQueue.get(String.format("%09d%s", roomId, bedNo));
        if (null == bedQueueBO)
            return 320;
        // DB update
        List statusList = new ArrayList<BedStatusEnum>();
        statusList.add(BedStatusEnum.DOCTOR_ON);
        Integer updateNum = roomMapper.setBedDoctorPause(roomId, bedNo, docId, docName,
                BedStatusEnum.PAUSE, statusList);
        if ( null==updateNum || 0 == updateNum )
            return 331;
        return 0;
    }
    @Override
    public Integer bedDoctorOn(Long roomId, String bedNo, Long docId, String docName) {
        BedQueueBO bedQueueBO = mapBedVsQueue.get(String.format("%09d%s", roomId, bedNo));
        if (null == bedQueueBO)
            return 320;
        // DB update
        List statusList = new ArrayList<BedStatusEnum>();
        statusList.add(BedStatusEnum.OPENING);
        Integer updateNum = roomMapper.setBedDoctorOn(roomId, bedNo, docId, docName,
                BedStatusEnum.DOCTOR_ON, statusList);
        if ( null==updateNum || 0 == updateNum )
            return 341;
        return 0;
    }
    @Override
    public Integer bedDoctorOff(Long roomId, String bedNo, Long docId, String docName) {
        BedQueueBO bedQueueBO = mapBedVsQueue.get(String.format("%09d%s", roomId, bedNo));
        if (null == bedQueueBO)
            return 320;
        // DB update
        List statusList = new ArrayList<BedStatusEnum>();
        statusList.add(BedStatusEnum.DOCTOR_ON);
        Integer updateNum = roomMapper.setBedDoctorOff(roomId, bedNo, docId, docName,
                BedStatusEnum.OPENING, statusList);
        if ( null==updateNum || 0 == updateNum )
            return 351;
        return 0;
    }
@@ -341,4 +502,3 @@
    }
}