eight
2024-08-31 792e4d2e1cb8eb44ed9d4958858485c99dd0ba57
update
已添加1个文件
已修改3个文件
74 ■■■■ 文件已修改
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedQueueBO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedReloadCallable.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedQueueBO.java
@@ -13,7 +13,7 @@
    String roomName;
    AtomicInteger queueNum = new AtomicInteger(0);
    Integer maxQueueNum;
    BedStatusEnum statusEnum;
    Integer bedStatus;
    @Override
    public int compareTo(@NotNull BedQueueBO o) {
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedReloadCallable.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
package cn.lihu.jh.module.ecg.service.queue;
import cn.lihu.jh.framework.common.exception.ErrorCode;
import java.util.concurrent.Callable;
public class BedReloadCallable implements Callable<ErrorCode> {
    QueueService queueService;
    public BedReloadCallable(QueueService queueService)
    {
        super();
        this.queueService = queueService;
    }
    public ErrorCode call() throws Exception {
        return queueService.bedReload();
    }
}
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueService.java
@@ -65,6 +65,7 @@
    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);
    /**
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java
@@ -10,6 +10,7 @@
import cn.lihu.jh.module.ecg.config.DynamicSchedulingConfig;
import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomDO;
import cn.lihu.jh.module.ecg.service.room.RoomService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.config.CronTask;
import org.springframework.scheduling.config.ScheduledTask;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
@@ -46,6 +47,7 @@
 */
@Service
@Validated
@Slf4j
public class QueueServiceImpl implements QueueService {
    @Resource
@@ -252,7 +254,7 @@
        bedQueueBO.setBedNo(bedNo);
        bedQueueBO.setMaxQueueNum(queueReadyMax);
        bedQueueBO.setQueueNum(new AtomicInteger(queueDOList.size()));
        bedQueueBO.setStatusEnum(BedStatusEnum.OPENING);
        bedQueueBO.setBedStatus(BedStatusEnum.OPENING.getStatus());
        priorityQueue.offer(bedQueueBO);
        mapBedVsQueue.put(String.format("%09d%s", roomId, bedNo), bedQueueBO);
        return SUCCESS;
@@ -313,7 +315,7 @@
        if ( null==updateNum || 0 == updateNum )
            return ROOM_INVALID_STATUS;
        bedQueueBO.setStatusEnum(BedStatusEnum.PAUSE);
        bedQueueBO.setBedStatus(BedStatusEnum.PAUSE.getStatus());
        priorityQueue.remove(bedQueueBO);
        return SUCCESS;
    }
@@ -321,7 +323,7 @@
    @Override
    public ErrorCode bedDoctorResume(Long roomId, String bedNo, Long docId, String docName) {
        BedQueueBO bedQueueBO = mapBedVsQueue.get(String.format("%09d%s", roomId, bedNo));
        if (null == bedQueueBO)
        if (null == bedQueueBO || !bedQueueBO.getBedStatus().equals(BedStatusEnum.PAUSE))
            return QUEUE_BED_ABNORMAL;
        // DB update
@@ -332,8 +334,12 @@
        if ( null==updateNum || 0 == updateNum )
            return ROOM_INVALID_STATUS;
        bedQueueBO.setStatusEnum(BedStatusEnum.DOCTOR_ON);
        priorityQueue.offer(bedQueueBO);
        bedQueueBO.setBedStatus(BedStatusEnum.DOCTOR_ON.getStatus());
        if (!priorityQueue.contains(bedQueueBO)) {
            priorityQueue.offer(bedQueueBO);
        } else {
            log.error("bedDoctorResume HAVE EXCEPTION!");
        }
        hurryup();
        return SUCCESS;
@@ -353,7 +359,7 @@
        if ( null==updateNum || 0 == updateNum )
            return ROOM_INVALID_STATUS;
        bedQueueBO.setStatusEnum(BedStatusEnum.DOCTOR_ON);
        bedQueueBO.setBedStatus(BedStatusEnum.DOCTOR_ON.getStatus());
        return SUCCESS;
    }
@@ -372,7 +378,7 @@
        if ( null==updateNum || 0 == updateNum )
            return ROOM_INVALID_STATUS;
        bedQueueBO.setStatusEnum(BedStatusEnum.OPENING);
        bedQueueBO.setBedStatus(BedStatusEnum.OPENING.getStatus());
        return SUCCESS;
    }
@@ -398,9 +404,13 @@
     * 1. æ¯å¤©å¼€è¯Šå‰ ä»ŽDB同步工位的患者队列数据到 å·¥ä½ä¼˜å…ˆé˜Ÿåˆ—
     * 2. æœåŠ¡è¿ç»´é‡å¯æ—¶
     */
    public void initBedQueueAndSeqNumFromDB() {
    @Override
    public ErrorCode bedReload() {
        priorityQueue.clear();
        mapBedVsQueue.clear();
        // æ¸…除非当天的排队人员
        queueMapper.clearQueue();
        // ä»ŽDB èŽ·å– å·¥ä½åˆ—表
        List<BedStatusEnum> bedStatusEnumList = new ArrayList<BedStatusEnum>();
@@ -423,12 +433,16 @@
                throw new RuntimeException("init: exceed max queue number!");
            item.queueNum.set( queueNum );
            priorityQueue.offer(item);
            mapBedVsQueue.put(String.format("%09d%s", item.roomId, item.bedNo), item);
            if (BedStatusEnum.PAUSE.getStatus() != item.getBedStatus()) {
                priorityQueue.offer(item);
            }
        });
        Integer num = queueMapper.getMaxSeqNum();
        curSeqNum = new AtomicInteger(null == num ? 0 : num);
        return SUCCESS;
    }
    /**
@@ -438,6 +452,10 @@
    public void hurryup() {
        if (0 == openingFlag.get())
            return;
        if (mapBedVsQueue.size() != priorityQueue.size()) {
            log.error("map " + mapBedVsQueue.size() + " priority " + priorityQueue.size());
        }
        // å¤„理 è¿‡å·-回来 çš„人
        for (BedQueueBO bedQueueBO : mapBedVsQueue.values()) {
@@ -587,13 +605,8 @@
        if (1 == openingFlag.get())
            return;
        // æ¸…除非当天的排队人员
        queueMapper.clearQueue();
        initBedQueueAndSeqNumFromDB();
        openingFlag.set(1);
        hurryup();
        startBedReload();
    }
    public void closeBiz() {
@@ -655,4 +668,11 @@
        });
    }
    private void startBedReload() {
        singleThreadExecutor.execute( () -> {
            bedReload();
            hurryup();
        });
    }
}