eight
2024-09-01 25ef09df68cd79b9c75bb88ee8ee039b58ce5690
update
已添加2个文件
已修改5个文件
179 ■■■■■ 文件已修改
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/config/MySpringEventListener.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/queueController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/config/EcgConfigService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/config/EcgConfigServiceImpl.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueService.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/room/RoomServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/config/MySpringEventListener.java
@@ -1,6 +1,7 @@
package cn.lihu.jh.module.ecg.config;
import cn.lihu.jh.module.ecg.Utils;
import cn.lihu.jh.module.ecg.service.config.EcgConfigService;
import cn.lihu.jh.module.ecg.service.queue.QueueService;
import cn.lihu.jh.module.infra.api.config.ConfigApi;
import org.springframework.boot.context.event.ApplicationStartedEvent;
@@ -21,7 +22,10 @@
    private ConfigApi configApi;
    @Resource
    private QueueService queueService;
    private EcgConfigService ecgConfigService;
    @Resource
    QueueService queueService;
    @EventListener
    public void onApplicationEvent(ApplicationStartedEvent event) {
@@ -45,6 +49,6 @@
            queueService.startBiz();
        }
        queueService.resetScheduler();
        ecgConfigService.resetScheduler();
    }
}
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/queueController.java
@@ -3,6 +3,8 @@
import cn.lihu.jh.framework.common.exception.ErrorCode;
import cn.lihu.jh.framework.security.core.util.SecurityFrameworkUtils;
import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomRespVO;
import cn.lihu.jh.module.ecg.service.config.EcgConfigService;
import cn.lihu.jh.module.ecg.service.config.EcgConfigServiceImpl;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
@@ -44,6 +46,9 @@
    @Resource
    private QueueService queueService;
    @Resource
    private EcgConfigService ecgConfigService;
    @PostMapping("/create")
    @Operation(summary = "创建排队")
@@ -154,7 +159,7 @@
    @Operation(summary = "重置调度器")
    @PreAuthorize("@ss.hasPermission('ecg:queue:setting')")
    public CommonResult<Integer> resetScheduler() {
        queueService.resetScheduler();
        ecgConfigService.resetScheduler();
        return success(0);
    }
}
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/config/EcgConfigService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
package cn.lihu.jh.module.ecg.service.config;
public interface EcgConfigService {
    void resetScheduler();
}
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/config/EcgConfigServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package cn.lihu.jh.module.ecg.service.config;
import cn.lihu.jh.module.ecg.Utils;
import cn.lihu.jh.module.ecg.config.DynamicSchedulingConfig;
import cn.lihu.jh.module.ecg.service.queue.QueueService;
import cn.lihu.jh.module.ecg.service.room.RoomService;
import cn.lihu.jh.module.infra.api.config.ConfigApi;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.config.CronTask;
import org.springframework.scheduling.config.ScheduledTask;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.time.LocalTime;
import java.util.List;
import static cn.lihu.jh.module.ecg.Constants.ECG_OPENING_TIME_KEY;
import static cn.lihu.jh.module.ecg.Constants.ECG_ROOM_RESET_TIME_KEY;
@Service
@Validated
@Slf4j
public class EcgConfigServiceImpl implements EcgConfigService{
    @Resource
    private ConfigApi configApi;
    @Resource
    private RoomService roomService;
    @Resource
    private QueueService queueService;
    @Override
    public void resetScheduler() {
        ScheduledTaskRegistrar taskRegistrar = DynamicSchedulingConfig.static_scheduledTaskRegistrar;
        taskRegistrar.getScheduledTasks().forEach(ScheduledTask::cancel);
        String strOpenCloseTime = configApi.getConfigValueByKey(ECG_OPENING_TIME_KEY);
        List<LocalTime> list = Utils.parseOpeningTime(strOpenCloseTime);
        LocalTime openingTime = list.get(0);
        LocalTime closeTime = list.get(1);
        String openCronExpression = String.format("0 %d %d  * * ?", openingTime.getMinute(), openingTime.getHour());
        String closeCronExpression = String.format("0 %d %d  * * ?", closeTime.getMinute(), closeTime.getHour());
        String strRoomResetTime = configApi.getConfigValueByKey(ECG_ROOM_RESET_TIME_KEY);
        LocalTime roomResetTime = Utils.parseTime(strRoomResetTime);
        String roomResetCronExpression = String.format("0 %d %d  * * ?", roomResetTime.getMinute(), roomResetTime.getHour());
        taskRegistrar.scheduleCronTask(new CronTask(() -> {
            System.out.println("Opening Task executed at: " + System.currentTimeMillis());
            queueService.startBiz();
        }, openCronExpression));
        taskRegistrar.scheduleCronTask(new CronTask(() -> {
            System.out.println("Close Task executed at: " + System.currentTimeMillis());
            queueService.closeBiz();
        }, closeCronExpression));
        taskRegistrar.scheduleCronTask(new CronTask(() -> {
            System.out.println("Room Reset Task executed at: " + System.currentTimeMillis());
            roomService.resetRoom();
        }, roomResetCronExpression));
        taskRegistrar.afterPropertiesSet();
    }
}
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueService.java
@@ -22,7 +22,7 @@
    void setQueueReadyMax(Integer max);
    void startBiz();
    void closeBiz();
    void resetScheduler();
    /**
     * åˆ›å»ºæŽ’队
@@ -49,6 +49,9 @@
    /**
     *
     */
    void startHurryUp();
    void startBedReload();
    ErrorCode startBedOpen(Long roomId, String bedNo);
    ErrorCode startBedClose(Long roomId, String bedNo);
    ErrorCode startBedDoctorPause(Long roomId, String bedNo, Long docId, String docName);
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java
@@ -51,12 +51,6 @@
public class QueueServiceImpl implements QueueService {
    @Resource
    private ConfigApi configApi;
    @Resource
    private RoomService roomService;
    @Resource
    private queueMapper queueMapper;
    @Resource
@@ -227,6 +221,20 @@
        return ECG_INNER_ERROR;
    }
    @Override
    public void startHurryUp() {
        singleThreadExecutor.execute( () -> {
            hurryup();
        });
    }
    @Override
    public void startBedReload() {
        singleThreadExecutor.execute( () -> {
            bedReload();
            hurryup();
        });
    }
    /**
     * å·²å…³é—­ æˆ–者 å…³é—­ä¸­ï¼Œå¯ä»¥å¼€é€šå·¥ä½
@@ -404,10 +412,21 @@
        // DB update
        List statusList = new ArrayList<BedStatusEnum>();
        statusList.add(BedStatusEnum.DOCTOR_ON);
        statusList.add(BedStatusEnum.PAUSE);
        Integer updateNum = roomMapper.setBedDoctorOff(roomId, bedNo, docId, BedStatusEnum.OPENING, statusList);
        if ( null==updateNum || 0 == updateNum ) {
            log.error("bedDoctorOff DB invalid status. " + roomId + " " + bedNo);
            return ROOM_INVALID_STATUS;
        }
        // å¦‚果是在 PAUSE çŠ¶æ€ç¦»åº§çš„ï¼Œéœ€è¦é‡æ–°åŠ å›ž ä¼˜å…ˆé˜Ÿåˆ—
        if (bedQueueBO.getStatus().equals(BedStatusEnum.PAUSE.getStatus())) {
            if (!priorityQueue.contains(bedQueueBO)) {
                priorityQueue.offer(bedQueueBO);
            } else {
                log.error("bedDoctorResume priorityQueue still exist!. " + roomId + " " + bedNo);
                return ECG_INNER_ERROR;
            }
        }
        bedQueueBO.setStatus(BedStatusEnum.OPENING.getStatus());
@@ -639,40 +658,6 @@
    }
    @Override
    public void resetScheduler() {
        ScheduledTaskRegistrar taskRegistrar = DynamicSchedulingConfig.static_scheduledTaskRegistrar;
        taskRegistrar.getScheduledTasks().forEach(ScheduledTask::cancel);
        String strOpenCloseTime = configApi.getConfigValueByKey(ECG_OPENING_TIME_KEY);
        List<LocalTime> list = Utils.parseOpeningTime(strOpenCloseTime);
        LocalTime openingTime = list.get(0);
        LocalTime closeTime = list.get(1);
        String openCronExpression = String.format("0 %d %d  * * ?", openingTime.getMinute(), openingTime.getHour());
        String closeCronExpression = String.format("0 %d %d  * * ?", closeTime.getMinute(), closeTime.getHour());
        String strRoomResetTime = configApi.getConfigValueByKey(ECG_ROOM_RESET_TIME_KEY);
        LocalTime roomResetTime = Utils.parseTime(strRoomResetTime);
        String roomResetCronExpression = String.format("0 %d %d  * * ?", roomResetTime.getMinute(), roomResetTime.getHour());
        taskRegistrar.scheduleCronTask(new CronTask(() -> {
            System.out.println("Opening Task executed at: " + System.currentTimeMillis());
            startBiz();
        }, openCronExpression));
        taskRegistrar.scheduleCronTask(new CronTask(() -> {
            System.out.println("Close Task executed at: " + System.currentTimeMillis());
            closeBiz();
        }, closeCronExpression));
        taskRegistrar.scheduleCronTask(new CronTask(() -> {
            System.out.println("Room Reset Task executed at: " + System.currentTimeMillis());
            roomService.resetRoom();
        }, roomResetCronExpression));
        taskRegistrar.afterPropertiesSet();
    }
    @Override
    public Integer recallPatient(Long roomId, String bedNo, String patId) {
        Integer updateNum = queueMapper.recallPassedPatient(roomId, bedNo, patId,
                QueueStatusEnum.PASSED.getStatus(), QueueStatusEnum.PASSED_RETURN.getStatus());
@@ -691,19 +676,6 @@
    public void monitorInfo() {
        log.info("map " + mapBedVsQueue.size() + " priority " + priorityQueue.size()
                 + " opening " + openingFlag.get());
    }
    private void startHurryUp() {
        singleThreadExecutor.execute( () -> {
            hurryup();
        });
    }
    private void startBedReload() {
        singleThreadExecutor.execute( () -> {
            bedReload();
            hurryup();
        });
    }
}
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/room/RoomServiceImpl.java
@@ -6,6 +6,7 @@
import cn.lihu.jh.framework.common.pojo.PageResult;
import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomRespVO;
import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomDO;
import cn.lihu.jh.module.ecg.service.queue.QueueService;
import cn.lihu.jh.module.system.api.oauth2.OAuth2TokenApi;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@@ -34,6 +35,9 @@
    @Resource
    private OAuth2TokenApi oAuth2TokenApi;
    @Resource
    QueueService queueService;
    @Override
    public Integer createRoom(RoomSaveReqVO createReqVO) {
@@ -103,5 +107,7 @@
        //
        List<Long> userIdList = roomDOList.stream().map(roomDO -> roomDO.getDocId()).toList();
        oAuth2TokenApi.tick(userIdList);
        queueService.startBedReload();
    }
}