eight
2024-08-27 9b18e467d407c66ecc3c46a197aca45dcc3f8056
update
已添加5个文件
已修改10个文件
537 ■■■■■ 文件已修改
jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/BedStatusEnum.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/queueController.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/room/vo/RoomRespVO.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/room/RoomDO.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/room/RoomMapper.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/listener/MySpringEventListener.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedCloseCallable.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedDoctorOffCallable.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedDoctorOnCallable.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedDoctorPauseCallable.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedOpenCallable.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedQueueBO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueServiceImpl.java 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/mysql/jh.sql 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/BedStatusEnum.java
@@ -14,18 +14,18 @@
@Getter
@AllArgsConstructor
public enum BedStatusEnum implements IntArrayValuable {
    CLOSED((byte)0, "已关闭"),
    CLOSING((byte)1, "关闭中"),
    OPENING((byte)10, "已开通"),
    DOCTOR_ON((byte)20, "有医生"),
    PAUSE((byte)30, "暂停");
    CLOSED(0, "已关闭"),
    CLOSING(1, "关闭中"),
    OPENING(10, "已开通"),
    DOCTOR_ON(20, "有医生"),
    PAUSE(30, "暂停");
    public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BedStatusEnum::getStatus).toArray();
    /**
     * çŠ¶æ€å€¼
     */
    private final Byte status;
    private final Integer status;
    /**
     * çŠ¶æ€å
     */
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/queueController.java
@@ -1,6 +1,7 @@
package cn.lihu.jh.module.ecg.controller.admin.queue;
import cn.lihu.jh.framework.common.exception.ErrorCode;
import cn.lihu.jh.framework.security.core.util.SecurityFrameworkUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -95,16 +96,85 @@
                        BeanUtils.toBean(list, QueueRespVO.class));
    }
    @GetMapping("/bed-control")
    @Operation(summary = "工位控制")
    @GetMapping("/bed-open")
    @Operation(summary = "工位开通")
    @PreAuthorize("@ss.hasPermission('ecg:queue:bedcontrol')")
    public CommonResult<Integer> bedControl(
    public CommonResult<Integer> bedOpen(
        @RequestParam("roomId") Long roomId,
        @RequestParam("bedNo") String bedNo)
    {
        Integer result = queueService.startBedOpen(roomId, bedNo);
        if (null == result || 0 == result)
            return success(0);
        return error(new ErrorCode(result, "出错了"));
    }
    @GetMapping("/bed-close")
    @Operation(summary = "工位关闭")
    @PreAuthorize("@ss.hasPermission('ecg:queue:bedcontrol')")
    public CommonResult<Integer> bedClose(
        @RequestParam("roomId") Long roomId,
        @RequestParam("bedNo") String bedNo)
    {
        Integer result = queueService.startBedClose(roomId, bedNo);
        if (null == result || 0 == result)
            return success(0);
        return error(new ErrorCode(result, "出错了"));
    }
    @GetMapping("/bed-doctor-pause")
    @Operation(summary = "医生暂停")
    @PreAuthorize("@ss.hasPermission('ecg:queue:bedcontrol')")
    public CommonResult<Integer> bedPause(
        @RequestParam("roomId") Long roomId,
        @RequestParam("bedNo") String bedNo,
        @RequestParam("status") Integer status)
        @RequestParam("docId") Long docId,
        @RequestParam("docName") String docName)
    {
        queueService.bedControl(roomId, bedNo, status);
        return success(0);
        Long userId = SecurityFrameworkUtils.getLoginUserId();
        String userNickname = SecurityFrameworkUtils.getLoginUserNickname();
        Integer result = queueService.startBedDoctorPause(roomId, bedNo, userId, userNickname);
        if (null == result || 0 == result)
            return success(0);
        return error(new ErrorCode(result, "出错了"));
    }
    @GetMapping("/bed-doctor-on")
    @Operation(summary = "医生入座")
    @PreAuthorize("@ss.hasPermission('ecg:queue:bedcontrol')")
    public CommonResult<Integer> bedDoctorOn(
        @RequestParam("roomId") Long roomId,
        @RequestParam("bedNo") String bedNo)
    {
        Long userId = SecurityFrameworkUtils.getLoginUserId();
        String userNickname = SecurityFrameworkUtils.getLoginUserNickname();
        Integer result = queueService.startBedDoctorOn(roomId, bedNo, userId, userNickname);
        if (null == result || 0 == result)
            return success(0);
        return error(new ErrorCode(result, "出错了"));
    }
    @GetMapping("/bed-doctor-off")
    @Operation(summary = "医生离座")
    @PreAuthorize("@ss.hasPermission('ecg:queue:bedcontrol')")
    public CommonResult<Integer> bedDoctorOff(
        @RequestParam("roomId") Long roomId,
        @RequestParam("bedNo") String bedNo)
    {
        Long userId = SecurityFrameworkUtils.getLoginUserId();
        String userNickname = SecurityFrameworkUtils.getLoginUserNickname();
        Integer result = queueService.startBedDoctorOff(roomId, bedNo, userId, userNickname);
        if (null == result || 0 == result)
            return success(0);
        return error(new ErrorCode(result, "出错了"));
    }
    @GetMapping("/startbiz")
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/room/vo/RoomRespVO.java
@@ -33,8 +33,12 @@
    private Integer status;
    @Schema(description = "医生名", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("医生Id")
    private Long docId;
    @Schema(description = "医生名", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("医生名")
    private String doctorName;
    private String docName;
    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("创建时间")
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/room/RoomDO.java
@@ -1,5 +1,6 @@
package cn.lihu.jh.module.ecg.dal.dataobject.room;
import cn.lihu.jh.module.ecg.enums.BedStatusEnum;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
@@ -41,11 +42,16 @@
    private String bedNo;
    /**
     * è¯Šç–—床状态  0:停诊 10:开诊 20:暂停
     * è¯Šç–—床状态
     * @see BedStatusEnum
     */
    private Integer status;
    /**
     * åŒ»ç”ŸID
     */
    private Long docId;
    /**
     * åŒ»ç”Ÿå
     */
    private String doctorName;
    private String docName;
}
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/room/RoomMapper.java
@@ -9,7 +9,9 @@
import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomPageReqVO;
import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomDO;
import cn.lihu.jh.module.ecg.dal.dataobject.room.RoomStatisticsDO;
import cn.lihu.jh.module.ecg.enums.BedStatusEnum;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
@@ -32,9 +34,45 @@
    @Select({ "SELECT room_id, room_name, count(1) as bed_num FROM lihu.clinic_room group by room_id;" })
    List<RoomStatisticsDO> roomStatistic();
    @Select({ "SELECT id, room_id, room_name, bed_no, status, doctor_name FROM lihu.clinic_room where status > 0;" })
    @Select({ "SELECT id, room_id, room_name, bed_no, status, doc_id, doc_name FROM lihu.clinic_room where status >= 10;" })
    List<RoomDO> simpleRoomList();
    @Update( "update lihu.clinic_room set status=#{status} where room_id=#{roomId} and bed_no=#{bedNo}" )
    Integer setBedStatus(Long roomId, String bedNo, Integer status);
    @Update("<script> " +
            "update lihu.clinic_room set status=#{newStatus.status} where room_id=#{roomId} and bed_no=#{bedNo} " +
            "and status=( " +
            " <foreach collection='curStatusList' separator=',' item='curStatus'>" +
            "  #{curStatus.status} " +
            " </foreach> );" +
            "</script>")
    Integer setBedStatus(@Param("roomId")Long roomId, @Param("bedNo")String bedNo, @Param("newStatus") BedStatusEnum newStatus, @Param("curStatusList") List<BedStatusEnum> curStatusList);
    @Update("<script> " +
            "update lihu.clinic_room set status=#{newStatus.status} " +
            "where room_id=#{roomId} and bed_no=#{bedNo} and doc_id=#{docId} and doc_name=#{docName}" +
            "and status=( " +
            " <foreach collection='curStatusList' separator=',' item='curStatus'>" +
            "  #{curStatus.status} " +
            " </foreach> );" +
            "</script>")
    Integer setBedDoctorPause(@Param("roomId")Long roomId, @Param("bedNo")String bedNo, @Param("docId")Long docId, @Param("docName")String docName, @Param("newStatus") BedStatusEnum newStatus, @Param("curStatusList") List<BedStatusEnum> curStatusList);
    @Update("<script> " +
            "update lihu.clinic_room set status=#{newStatus.status}, doc_id=#{docId}, doc_name=#{docName} " +
            "where room_id=#{roomId} and bed_no=#{bedNo} " +
            "and status=( " +
            " <foreach collection='curStatusList' separator=',' item='curStatus'>" +
            "  #{curStatus.status} " +
            " </foreach> );" +
            "</script>")
    Integer setBedDoctorOn(@Param("roomId")Long roomId, @Param("bedNo")String bedNo, @Param("docId")Long docId, @Param("docName")String docName, @Param("newStatus") BedStatusEnum newStatus, @Param("curStatusList") List<BedStatusEnum> curStatusList);
    @Update("<script> " +
            "update lihu.clinic_room set status=#{newStatus.status}, doc_id=null, doc_name='' " +
            "where room_id=#{roomId} and bed_no=#{bedNo} and doc_id=#{docId} and doc_name=#{docName}" +
            "and status=( " +
            " <foreach collection='curStatusList' separator=',' item='curStatus'>" +
            "  #{curStatus.status} " +
            " </foreach> );" +
            "</script>")
    Integer setBedDoctorOff(@Param("roomId")Long roomId, @Param("bedNo")String bedNo, @Param("docId")Long docId, @Param("docName")String docName, @Param("newStatus") BedStatusEnum newStatus, @Param("curStatusList") List<BedStatusEnum> curStatusList);
}
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/listener/MySpringEventListener.java
@@ -27,6 +27,7 @@
        System.out.println("应用启动完成,系统初始。。。");
        String strOpenCloseTime = configApi.getConfigValueByKey(ECG_OPENING_TIME_KEY);
        strOpenCloseTime = "0:00~23:59";
        List<LocalTime> list = Utils.parseOpeningTime(strOpenCloseTime);
        LocalTime openingTime = list.get(0);
        LocalTime closeTime = list.get(1);
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedCloseCallable.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package cn.lihu.jh.module.ecg.service.queue;
import java.util.concurrent.Callable;
public class BedCloseCallable implements Callable<Integer> {
    QueueService queueService;
    private Long roomId;
    private String bedNo;
    public BedCloseCallable(QueueService queueService, Long roomId, String bedNo)
    {
        super();
        this.roomId = roomId;
        this.bedNo = bedNo;
        this.queueService = queueService;
    }
    public Integer call() throws Exception {
        return queueService.bedClose(roomId, bedNo);
    }
}
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedDoctorOffCallable.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package cn.lihu.jh.module.ecg.service.queue;
import java.util.concurrent.Callable;
public class BedDoctorOffCallable implements Callable<Integer> {
    QueueService queueService;
    private Long roomId;
    private String bedNo;
    private Long docId;
    private String docName;
    public BedDoctorOffCallable(QueueService queueService, Long roomId, String bedNo, Long docId, String docName)
    {
        super();
        this.queueService = queueService;
        this.roomId = roomId;
        this.bedNo = bedNo;
        this.docId = docId;
        this.docName = docName;
    }
    public Integer call() throws Exception {
        return queueService.bedDoctorOff(roomId, bedNo, docId, docName);
    }
}
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedDoctorOnCallable.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package cn.lihu.jh.module.ecg.service.queue;
import java.util.concurrent.Callable;
public class BedDoctorOnCallable implements Callable<Integer> {
    QueueService queueService;
    private Long roomId;
    private String bedNo;
    private Long docId;
    private String docName;
    public BedDoctorOnCallable(QueueService queueService, Long roomId, String bedNo, Long docId, String docName)
    {
        super();
        this.queueService = queueService;
        this.roomId = roomId;
        this.bedNo = bedNo;
        this.docId = docId;
        this.docName = docName;
    }
    public Integer call() throws Exception {
        return queueService.bedDoctorOn(roomId, bedNo, docId, docName);
    }
}
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedDoctorPauseCallable.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package cn.lihu.jh.module.ecg.service.queue;
import java.util.concurrent.Callable;
public class BedDoctorPauseCallable implements Callable<Integer> {
    QueueService queueService;
    private Long roomId;
    private String bedNo;
    private Long docId;
    private String docName;
    public BedDoctorPauseCallable(QueueService queueService, Long roomId, String bedNo, Long docId, String docName)
    {
        super();
        this.queueService = queueService;
        this.roomId = roomId;
        this.bedNo = bedNo;
        this.docId = docId;
        this.docName = docName;
    }
    public Integer call() throws Exception {
        return queueService.bedDoctorPause(roomId, bedNo, docId, docName);
    }
}
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedOpenCallable.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package cn.lihu.jh.module.ecg.service.queue;
import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueDO;
import cn.lihu.jh.module.ecg.dal.mysql.queue.queueMapper;
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 java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.atomic.AtomicInteger;
import static cn.lihu.jh.module.ecg.service.queue.QueueService.MAX_QUEUE_NUM;
public class BedOpenCallable implements Callable<Integer> {
    QueueService queueService;
    private Long roomId;
    private String bedNo;
    public BedOpenCallable(QueueService queueService, Long roomId, String bedNo)
    {
        super();
        this.roomId = roomId;
        this.bedNo = bedNo;
        this.queueService = queueService;
    }
    public Integer call() throws Exception {
        return queueService.bedOpen(roomId, bedNo);
    }
}
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/BedQueueBO.java
@@ -1,5 +1,6 @@
package cn.lihu.jh.module.ecg.service.queue;
import cn.lihu.jh.module.ecg.enums.BedStatusEnum;
import lombok.Data;
import org.jetbrains.annotations.NotNull;
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/queueService.java
@@ -14,6 +14,8 @@
 */
public interface QueueService {
    final static Integer MAX_QUEUE_NUM = 3;
    void startBiz();
    void closeBiz();
@@ -42,7 +44,17 @@
    /**
     *
     */
    Integer bedControl(Long roomId, String bedNo, Integer status);
    Integer startBedOpen(Long roomId, String bedNo);
    Integer startBedClose(Long roomId, String bedNo);
    Integer startBedDoctorPause(Long roomId, String bedNo, Long docId, String docName);
    Integer startBedDoctorOn(Long roomId, String bedNo, Long docId, String docName);
    Integer startBedDoctorOff(Long roomId, String bedNo, Long docId, String docName);
    Integer bedOpen(Long roomId, String bedNo);
    Integer bedClose(Long roomId, String bedNo);
    Integer bedDoctorPause(Long roomId, String bedNo, Long docId, String docName);
    Integer bedDoctorOn(Long roomId, String bedNo, Long docId, String docName);
    Integer bedDoctorOff(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
@@ -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 @@
    }
}
sql/mysql/jh.sql
@@ -76,21 +76,20 @@
-- ----------------------------
DROP TABLE IF EXISTS `clinic_room`;
CREATE TABLE `clinic_room` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT 'id',
  `room_id` BIGINT NOT NULL COMMENT '诊室编号',
  `room_name` varchar(10) NOT NULL COMMENT '诊室名称',
  `bed_no` varchar(10) NOT NULL COMMENT '诊疗床编号',
  `status` int 0 COMMENT '0:停诊 10:开诊 20:暂停',
  `doctor_name` varchar(10) NOT NULL COMMENT '医生名称',
  `tenant_id` int DEFAULT 1 COMMENT '租户编号',
  `creator` varchar(10) DEFAULT '' COMMENT '创建者',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `updater` varchar(10) DEFAULT '' COMMENT '更新者',
  `update_time` datetime NOT NULL COMMENT '更新时间',
  `deleted` bit(1) DEFAULT 0 COMMENT '删除标记',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='诊室和诊疗床表';
   `id` int NOT NULL AUTO_INCREMENT COMMENT 'id',
   `room_id` bigint NOT NULL COMMENT '诊室编号',
   `room_name` varchar(10) NOT NULL COMMENT '诊室名称',
   `bed_no` varchar(10) NOT NULL COMMENT '诊疗床编号',
   `status` int NOT NULL DEFAULT '0',
   `doc_id` bigint DEFAULT NULL,
   `doc_name` varchar(10) DEFAULT '',
   `creator` varchar(10) DEFAULT '' COMMENT '创建者',
   `create_time` datetime NOT NULL COMMENT '创建时间',
   `updater` varchar(10) DEFAULT '' COMMENT '更新者',
   `update_time` datetime NOT NULL COMMENT '更新时间',
   `deleted` bit(1) DEFAULT b'0' COMMENT '删除标记',
   PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='诊室和诊疗床表';
-- ----------------------------
-- Table structure for device_model