From adb4da3c83649d550b8674feb1eb0926fbace30e Mon Sep 17 00:00:00 2001 From: eight <641137800@qq.com> Date: 星期一, 11 十一月 2024 13:45:12 +0800 Subject: [PATCH] 排队&抢人时 亲和检查项目处理 --- jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/queue/QueueDO.java | 11 ++++- jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/QueueSaveReqVO.java | 8 +++ jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceImpl.java | 24 +++++++++++ jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/QueueMapper.java | 13 ++++++ jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/QueueStatusEnum.java | 1 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java | 18 +++++++++ jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentServiceImpl.java | 3 + 7 files changed, 74 insertions(+), 4 deletions(-) diff --git a/jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/QueueStatusEnum.java b/jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/QueueStatusEnum.java index cc41642..f6f998d 100644 --- a/jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/QueueStatusEnum.java +++ b/jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/QueueStatusEnum.java @@ -19,6 +19,7 @@ PASSED(5, "宸茶繃鍙�"), PASSED_INSTALL(7, "宸茶繃鍙�-瀹夎"), WAITING(10, "鎺掗槦涓�"), + AFFINITY_ALREADY(12, "宸蹭翰鍜�"), RECALLED(15, "宸插彫鍥�"), RECALLED_INSTALL(17, "宸插彫鍥�-瀹夎"), READY(20, "鍊欒瘖涓�"), diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/QueueSaveReqVO.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/QueueSaveReqVO.java index e8b7809..219c1a9 100644 --- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/QueueSaveReqVO.java +++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/queue/vo/QueueSaveReqVO.java @@ -1,11 +1,14 @@ package cn.lihu.jh.module.ecg.controller.admin.queue.vo; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.time.LocalDate; +import java.util.List; @Schema(description = "绠$悊鍚庡彴 - 鎺掗槦鏂板/淇敼 Request VO") @@ -73,4 +76,7 @@ @Schema(description = "璇婄枟搴婄紪鍙�") private String bedNo; -} \ No newline at end of file + @Schema(description = "浜插拰鐨勬鏌ラ」") + private List<Integer> affinityItems; +} + diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/queue/QueueDO.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/queue/QueueDO.java index 3fde382..527bf28 100644 --- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/queue/QueueDO.java +++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/queue/QueueDO.java @@ -1,17 +1,19 @@ package cn.lihu.jh.module.ecg.dal.dataobject.queue; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import lombok.*; import com.baomidou.mybatisplus.annotation.*; import cn.lihu.jh.framework.mybatis.core.dataobject.BaseDO; import java.time.LocalDate; +import java.util.List; /** * 鎺掗槦 DO * * @author 鑺嬮亾婧愮爜 */ -@TableName("queue") +@TableName( value="queue", autoResultMap = true ) @KeySequence("queue_seq") // 鐢ㄤ簬 Oracle銆丳ostgreSQL銆並ingbase銆丏B2銆丠2 鏁版嵁搴撶殑涓婚敭鑷銆傚鏋滄槸 MySQL 绛夋暟鎹簱锛屽彲涓嶅啓銆� @Data @EqualsAndHashCode(callSuper = true) @@ -94,5 +96,10 @@ * 璇婄枟搴婄紪鍙� */ private String bedNo; + /** + * 浜插拰椤� + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List<Integer> affinityItems; +} -} \ No newline at end of file diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/QueueMapper.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/QueueMapper.java index be4e8d3..f1a3728 100644 --- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/QueueMapper.java +++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/queue/QueueMapper.java @@ -39,6 +39,9 @@ @Select("SELECT max(seq_num) FROM lihu.queue") Integer getMaxSeqNum(); + @Select("SELECT * FROM lihu.queue where seq_num = #{seqNum}") + QueueDO getQueueItemBySeqNum(@Param("seqNum")Integer seqNum); + @Select("SELECT * FROM lihu.queue where pat_id = #{patId}") QueueDO getQueueByPatId(@Param("patId")String patId); @@ -64,6 +67,16 @@ @Select("<script>" + "SELECT * FROM lihu.queue " + + "where pat_id = #{patId} and book_check_type in (" + + " <foreach collection='arrCheckType' separator=',' item='checkType'>" + + " #{checkType} " + + " </foreach> )" + + " and TO_DAYS(book_date) = TO_DAYS(NOW()) " + + "</script>") + List<QueueDO> getCurPatGivenCheckItems(@Param("patId")String patId, @Param("checkTypeList")Integer[] arrCheckType); + + @Select("<script>" + + "SELECT * FROM lihu.queue " + "where id >= #{from} and status in (" + " <foreach collection='statusList' separator=',' item='status'>" + " #{status} " + diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentServiceImpl.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentServiceImpl.java index 3dedf51..a374f68 100644 --- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentServiceImpl.java +++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentServiceImpl.java @@ -3,12 +3,14 @@ import cn.lihu.jh.framework.common.util.date.DateUtils; import cn.lihu.jh.framework.common.util.date.LocalDateTimeUtils; import cn.lihu.jh.module.ecg.controller.admin.queue.vo.QueueSaveReqVO; +import cn.lihu.jh.module.ecg.dal.dataobject.checktype.CheckTypeDO; import cn.lihu.jh.module.ecg.feign.RemoteDataService; import cn.lihu.jh.module.ecg.feign.RestApiReqBodyVo; import cn.lihu.jh.module.ecg.feign.RestApiResult; import cn.lihu.jh.module.ecg.feign.dto.AppointmentExternal; import cn.lihu.jh.module.ecg.service.config.EcgConfigService; import cn.lihu.jh.module.ecg.service.queue.QueueService; +import cn.lihu.jh.module.ecg.service.queue.QueueServiceTxFunctions; import cn.lihu.jh.module.ecg.service.queuesequence.QueueSequenceService; import lombok.extern.slf4j.Slf4j; import org.springframework.dao.DuplicateKeyException; @@ -211,6 +213,7 @@ if (null == appointment) throw exception(PATIENT_NOT_EXISTS); + // 鎵嬪姩棰勭害锛岀洿鎺ヨ缃绾︽棩鏈熶负褰撳ぉ if (confirmReqVO.getIsVip() == 1) { appointment.setBookDate( LocalDate.now() ); } diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceImpl.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceImpl.java index 521e266..477871b 100644 --- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceImpl.java +++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceImpl.java @@ -6,6 +6,7 @@ import cn.lihu.jh.module.ecg.Utils; import cn.lihu.jh.module.ecg.controller.admin.room.vo.MonitorInfoVO; +import cn.lihu.jh.module.ecg.dal.dataobject.checktype.CheckTypeDO; import cn.lihu.jh.module.ecg.dal.dataobject.devrent.DevRentDO; import cn.lihu.jh.module.ecg.dal.mysql.call.CallMapper; import cn.lihu.jh.module.ecg.dal.mysql.devrent.DevRentMapper; @@ -317,7 +318,28 @@ @Override @Transactional public void queue(QueueSaveReqVO queueSaveReqVO) { - queueSaveReqVO.setStatus(QueueStatusEnum.WAITING.getStatus()); //鎺掗槦涓� + queueSaveReqVO.setStatus(QueueStatusEnum.WAITING.getStatus()); //榛樿鐘舵��: 鎺掗槦涓� + + // 澶勭悊 妫�鏌ラ」鐩�.浜插拰鎬� 閫昏緫 + CheckTypeDO checkTypeDO = queueServiceTxFunctions.getCheckTypeItem( queueSaveReqVO.getBookCheckType() ); + if ( checkTypeDO.getAffinityCheckTypes().length > 0) { + List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckItems(queueSaveReqVO.getPatId(), checkTypeDO.getAffinityCheckTypes()); + //List<Integer> affinityItemIDs = affinityItems.stream().map(queueItem -> queueItem.getId()).toList(); + //queueSaveReqVO.setAffinityItems(affinityItemIDs); + + for (int i=0; i < affinityItems.size(); i++) { + QueueDO queueItem = affinityItems.get(i); + if (QueueStatusEnum.READY.getStatus() == queueItem.getStatus() + || QueueStatusEnum.ONSTAGE.getStatus() == queueItem.getStatus()) { + queueSaveReqVO.setStatus(QueueStatusEnum.AFFINITY_ALREADY.getStatus()); //鏀瑰彉 鎺掗槦鐘舵�� + queueSaveReqVO.setRoomId(queueItem.getRoomId()); + queueSaveReqVO.setRoomName(queueItem.getRoomName()); + queueSaveReqVO.setBedNo(queueItem.getBedNo()); + break; + } + } + } + QueueDO queue = BeanUtils.toBean(queueSaveReqVO, QueueDO.class); queueMapper.insert(queue); diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java index 86f8b28..7fede40 100644 --- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java +++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/queue/QueueServiceTxFunctions.java @@ -418,6 +418,20 @@ return; } + // 鎶㈠埌鎺掗槦鎮h�呭悗锛屽鐞� 妫�鏌ラ」鐩�.浜插拰鎬� 閫昏緫 + QueueDO queueDO = queueMapper.getQueueItemBySeqNum(curSeqNum.get() + 1); + CheckTypeDO checkTypeDO = getCheckTypeItem( queueDO.getBookCheckType() ); + if ( checkTypeDO.getAffinityCheckTypes().length > 0) { + List<QueueDO> affinityItems = queueMapper.getCurPatGivenCheckItems(queueDO.getPatId(), checkTypeDO.getAffinityCheckTypes()); + for (int i = 0; i < affinityItems.size(); i++) { + QueueDO queueItem = affinityItems.get(i); + queueItem.setStatus(QueueStatusEnum.AFFINITY_ALREADY.getStatus()); //鏀瑰彉 鎺掗槦鐘舵�� + queueItem.setRoomId(queueItem.getRoomId()); + queueItem.setRoomName(queueItem.getRoomName()); + queueItem.setBedNo(queueItem.getBedNo()); + } + } + curSeqNum.getAndIncrement(); // 鍙兘宸茬粡銆愬苟鍙戠殑銆戝湪 nextPatient 涓敼鍙樹簡鍊� @@ -441,6 +455,10 @@ mapCheckTypeVsReadyMax = checkTypeDOList.stream().collect(Collectors.toMap(CheckTypeDO::getValue, checkType -> checkType)); } + public CheckTypeDO getCheckTypeItem(Integer checkType) { + return mapCheckTypeVsReadyMax.get( checkType ); + } + public BedQueueBO getBedQueueBO(Long roomId, String bedNo) { return mapBedVsQueue.get( Utils.formatRoomBed(roomId, bedNo) ); } -- Gitblit v1.9.3