From a940b56e9781e2b4e56dbe05a896dba33a6905c6 Mon Sep 17 00:00:00 2001
From: eight <641137800@qq.com>
Date: 星期四, 19 九月 2024 17:13:25 +0800
Subject: [PATCH] 重叫功能 完成
---
jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/ErrorCodeConstants.java | 2
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/call/vo/CallSaveReqVO.java | 51 ++++
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/doctor/DoctorController.java | 56 +++++
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/call/CallController.java | 83 +++++++
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/call/CallMapper.java | 44 ++++
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/call/CallService.java | 70 ++++++
sql/mysql/jh.sql | 26 ++
jh-module-ecg/jh-module-ecg-biz/src/main/resources/mapper/call/CallMapper.xml | 12 +
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/call/vo/CallRespVO.java | 67 ++++++
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/call/vo/CallPageReqVO.java | 55 +++++
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/call/CallServiceImpl.java | 86 +++++++
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/call/CallDO.java | 75 ++++++
12 files changed, 627 insertions(+), 0 deletions(-)
diff --git a/jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/ErrorCodeConstants.java b/jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/ErrorCodeConstants.java
index 429bdf9..df34a44 100644
--- a/jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/ErrorCodeConstants.java
+++ b/jh-module-ecg/jh-module-ecg-api/src/main/java/cn/lihu/jh/module/ecg/enums/ErrorCodeConstants.java
@@ -34,4 +34,6 @@
ErrorCode DEV_DISMANTLE_EXIST = new ErrorCode(1_010_005_006, "褰撳ぉ宸叉湁鎷嗘満");
ErrorCode JOB_RECORD_NOT_EXISTS = new ErrorCode(1_010_006_000, "宸ヤ綔璁板綍涓嶅瓨鍦�");
+
+ ErrorCode CALL_NOT_EXISTS = new ErrorCode(1_010_007_000, "鍙彿涓嶅瓨鍦�");
}
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/call/CallController.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/call/CallController.java
new file mode 100644
index 0000000..3f238d7
--- /dev/null
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/call/CallController.java
@@ -0,0 +1,83 @@
+package cn.lihu.jh.module.ecg.controller.admin.call;
+
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import java.util.*;
+import java.io.IOException;
+
+import cn.lihu.jh.framework.common.pojo.PageParam;
+import cn.lihu.jh.framework.common.pojo.PageResult;
+import cn.lihu.jh.framework.common.pojo.CommonResult;
+import cn.lihu.jh.framework.common.util.object.BeanUtils;
+import static cn.lihu.jh.framework.common.pojo.CommonResult.success;
+
+import cn.lihu.jh.framework.excel.core.util.ExcelUtils;
+
+import cn.lihu.jh.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.lihu.jh.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import cn.lihu.jh.module.ecg.controller.admin.call.vo.*;
+import cn.lihu.jh.module.ecg.dal.dataobject.call.CallDO;
+import cn.lihu.jh.module.ecg.service.call.CallService;
+
+import javax.annotation.Resource;
+import javax.annotation.security.PermitAll;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+
+@Tag(name = "绠$悊鍚庡彴 - 鍙彿")
+@RestController
+@RequestMapping("/ecg/call")
+@Validated
+public class CallController {
+
+ @Resource
+ private CallService callService;
+
+ @PostMapping("/create")
+ @Operation(summary = "鍒涘缓鍙彿")
+ @PreAuthorize("@ss.hasPermission('ecg:call:create')")
+ public CommonResult<Integer> createCall(@Valid @RequestBody CallSaveReqVO createReqVO) {
+ return success(callService.createCall(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "鏇存柊鍙彿")
+ @PreAuthorize("@ss.hasPermission('ecg:call:update')")
+ public CommonResult<Boolean> updateCall(@Valid @RequestBody CallSaveReqVO updateReqVO) {
+ callService.updateCall(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "鍒犻櫎鍙彿")
+ @Parameter(name = "id", description = "缂栧彿", required = true)
+ @PreAuthorize("@ss.hasPermission('ecg:call:delete')")
+ public CommonResult<Boolean> deleteCall(@RequestParam("id") Integer id) {
+ callService.deleteCall(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "鑾峰緱鍙彿")
+ @Parameter(name = "id", description = "缂栧彿", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('ecg:call:query')")
+ public CommonResult<CallRespVO> getCall(@RequestParam("id") Integer id) {
+ CallDO call = callService.getCall(id);
+ return success(BeanUtils.toBean(call, CallRespVO.class));
+ }
+
+ @GetMapping("/next")
+ @Operation(summary = "鑾峰緱涓嬩竴涓彨鍙�")
+ @PermitAll
+ public CommonResult<CallRespVO> nextCall() {
+ CallDO call = callService.getNextCall();
+ return success(BeanUtils.toBean(call, CallRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/call/vo/CallPageReqVO.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/call/vo/CallPageReqVO.java
new file mode 100644
index 0000000..9eb7e52
--- /dev/null
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/call/vo/CallPageReqVO.java
@@ -0,0 +1,55 @@
+package cn.lihu.jh.module.ecg.controller.admin.call.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.lihu.jh.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.lihu.jh.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "绠$悊鍚庡彴 - 鍙彿鍒嗛〉 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class CallPageReqVO extends PageParam {
+
+ @Schema(description = "鎮h�呯紪鍙�", example = "1991")
+ private String patId;
+
+ @Schema(description = "鎮h�呭鍚�", example = "鏉庡洓")
+ private String patName;
+
+ @Schema(description = "鎮h�呮�у埆")
+ private Integer patGender;
+
+ @Schema(description = "鎺掗槦搴忓彿")
+ private Integer seqNum;
+
+ @Schema(description = "杩囧彿鏍囪")
+ private Integer passed;
+
+ @Schema(description = "棰勭害杩囨湡鏍囪")
+ private Integer expired;
+
+ @Schema(description = "鍙彿鐘舵�� 0 鏈挱 1 宸叉挱 ")
+ private Integer called;
+
+ @Schema(description = "鎻掗槦鏍囪")
+ private Integer jumpFlag;
+
+ @Schema(description = "璇婂缂栧彿", example = "30859")
+ private Long roomId;
+
+ @Schema(description = "璇婂鍚嶇О", example = "鏉庡洓")
+ private String roomName;
+
+ @Schema(description = "璇婄枟搴婄紪鍙�")
+ private String bedNo;
+
+ @Schema(description = "鍒涘缓鏃堕棿")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/call/vo/CallRespVO.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/call/vo/CallRespVO.java
new file mode 100644
index 0000000..ed0d51f
--- /dev/null
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/call/vo/CallRespVO.java
@@ -0,0 +1,67 @@
+package cn.lihu.jh.module.ecg.controller.admin.call.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "绠$悊鍚庡彴 - 鍙彿 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class CallRespVO {
+
+ @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20296")
+ @ExcelProperty("id")
+ private Integer id;
+
+ @Schema(description = "鎮h�呯紪鍙�", requiredMode = Schema.RequiredMode.REQUIRED, example = "1991")
+ @ExcelProperty("鎮h�呯紪鍙�")
+ private String patId;
+
+ @Schema(description = "鎮h�呭鍚�", requiredMode = Schema.RequiredMode.REQUIRED, example = "鏉庡洓")
+ @ExcelProperty("鎮h�呭鍚�")
+ private String patName;
+
+ @Schema(description = "鎮h�呮�у埆")
+ @ExcelProperty("鎮h�呮�у埆")
+ private Integer patGender;
+
+ @Schema(description = "鎺掗槦搴忓彿")
+ @ExcelProperty("鎺掗槦搴忓彿")
+ private Integer seqNum;
+
+ @Schema(description = "杩囧彿鏍囪")
+ @ExcelProperty("杩囧彿鏍囪")
+ private Integer passed;
+
+ @Schema(description = "棰勭害杩囨湡鏍囪")
+ @ExcelProperty("棰勭害杩囨湡鏍囪")
+ private Integer expired;
+
+ @Schema(description = "鍙彿鐘舵�� 0 鏈挱 1 宸叉挱 ")
+ @ExcelProperty("鍙彿鐘舵�� 0 鏈挱 1 宸叉挱 ")
+ private Integer called;
+
+ @Schema(description = "鎻掗槦鏍囪")
+ @ExcelProperty("鎻掗槦鏍囪")
+ private Integer jumpFlag;
+
+ @Schema(description = "璇婂缂栧彿", example = "30859")
+ @ExcelProperty("璇婂缂栧彿")
+ private Long roomId;
+
+ @Schema(description = "璇婂鍚嶇О", example = "鏉庡洓")
+ @ExcelProperty("璇婂鍚嶇О")
+ private String roomName;
+
+ @Schema(description = "璇婄枟搴婄紪鍙�")
+ @ExcelProperty("璇婄枟搴婄紪鍙�")
+ private String bedNo;
+
+ @Schema(description = "鍒涘缓鏃堕棿", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("鍒涘缓鏃堕棿")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/call/vo/CallSaveReqVO.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/call/vo/CallSaveReqVO.java
new file mode 100644
index 0000000..0320cb6
--- /dev/null
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/call/vo/CallSaveReqVO.java
@@ -0,0 +1,51 @@
+package cn.lihu.jh.module.ecg.controller.admin.call.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.*;
+
+@Schema(description = "绠$悊鍚庡彴 - 鍙彿鏂板/淇敼 Request VO")
+@Data
+public class CallSaveReqVO {
+
+ @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20296")
+ private Integer id;
+
+ @Schema(description = "鎮h�呯紪鍙�", requiredMode = Schema.RequiredMode.REQUIRED, example = "1991")
+ @NotEmpty(message = "鎮h�呯紪鍙蜂笉鑳戒负绌�")
+ private String patId;
+
+ @Schema(description = "鎮h�呭鍚�", requiredMode = Schema.RequiredMode.REQUIRED, example = "鏉庡洓")
+ @NotEmpty(message = "鎮h�呭鍚嶄笉鑳戒负绌�")
+ private String patName;
+
+ @Schema(description = "鎮h�呮�у埆")
+ private Integer patGender;
+
+ @Schema(description = "鎺掗槦搴忓彿")
+ private Integer seqNum;
+
+ @Schema(description = "杩囧彿鏍囪")
+ private Integer passed;
+
+ @Schema(description = "棰勭害杩囨湡鏍囪")
+ private Integer expired;
+
+ @Schema(description = "鍙彿鐘舵�� 0 鏈挱 1 宸叉挱 ")
+ private Integer called;
+
+ @Schema(description = "鎻掗槦鏍囪")
+ private Integer jumpFlag;
+
+ @Schema(description = "璇婂缂栧彿", example = "30859")
+ private Long roomId;
+
+ @Schema(description = "璇婂鍚嶇О", example = "鏉庡洓")
+ private String roomName;
+
+ @Schema(description = "璇婄枟搴婄紪鍙�")
+ private String bedNo;
+
+}
\ No newline at end of file
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/doctor/DoctorController.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/doctor/DoctorController.java
index 4036f2f..9bfa6fc 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/doctor/DoctorController.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/doctor/DoctorController.java
@@ -4,15 +4,18 @@
import cn.lihu.jh.framework.common.pojo.CommonResult;
import cn.lihu.jh.framework.common.util.object.BeanUtils;
import cn.lihu.jh.framework.security.core.util.SecurityFrameworkUtils;
+import cn.lihu.jh.module.ecg.controller.admin.call.vo.CallSaveReqVO;
import cn.lihu.jh.module.ecg.controller.admin.queue.vo.PatientStatisticVO;
import cn.lihu.jh.module.ecg.controller.admin.queue.vo.QueueRespVO;
import cn.lihu.jh.module.ecg.controller.admin.room.vo.RoomRespVO;
import cn.lihu.jh.module.ecg.dal.dataobject.queue.QueueDO;
import cn.lihu.jh.module.ecg.enums.QueueStatusEnum;
+import cn.lihu.jh.module.ecg.service.call.CallService;
import cn.lihu.jh.module.ecg.service.queue.QueueService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -20,19 +23,25 @@
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
import static cn.lihu.jh.framework.common.exception.enums.GlobalErrorCodeConstants.SUCCESS;
import static cn.lihu.jh.framework.common.pojo.CommonResult.error;
import static cn.lihu.jh.framework.common.pojo.CommonResult.success;
+import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.ECG_INNER_ERROR;
@Tag(name = "绠$悊鍚庡彴 - 鍖荤敓鍙彿")
@RestController
@RequestMapping("/ecg/doctor")
@Validated
+@Slf4j
public class DoctorController {
@Resource
private QueueService queueService;
+
+ @Resource
+ private CallService callService;
@GetMapping("/bed-doctor-pause")
@Operation(summary = "鍖荤敓鏆傚仠")
@@ -131,6 +140,15 @@
queueStatusList.add(QueueStatusEnum.ONSTAGE.getStatus());
queueStatusList.add(QueueStatusEnum.PASSED.getStatus());
List<QueueDO> queueDOList = queueService.getDoctorQueueByStatus(roomId, bedNo, queueStatusList);
+
+ // 杩囨护鍑� 灏辫瘖涓殑锛屽噯澶囧彨鍙�
+ QueueDO onStageItem = queueDOList.stream().filter(item -> Objects.equals(item.getStatus(), QueueStatusEnum.ONSTAGE.getStatus())).findFirst().orElse(null);
+ if (null != onStageItem) {
+ CallSaveReqVO callSaveReqVO = BeanUtils.toBean(onStageItem, CallSaveReqVO.class);
+ callSaveReqVO.setId(null);
+ callService.createCall(callSaveReqVO);
+ }
+
return success(BeanUtils.toBean(queueDOList, QueueRespVO.class));
}
@@ -150,9 +168,47 @@
queueStatusList.add(QueueStatusEnum.ONSTAGE.getStatus());
queueStatusList.add(QueueStatusEnum.PASSED.getStatus());
List<QueueDO> queueDOList = queueService.getDoctorQueueByStatus(roomId, bedNo, queueStatusList);
+
+ // 杩囨护鍑� 灏辫瘖涓殑锛屽噯澶囧彨鍙�
+ QueueDO onStageItem = queueDOList.stream().filter(item -> Objects.equals(item.getStatus(), QueueStatusEnum.ONSTAGE.getStatus())).findFirst().orElse(null);
+ if (null != onStageItem) {
+ CallSaveReqVO callSaveReqVO = BeanUtils.toBean(onStageItem, CallSaveReqVO.class);
+ callSaveReqVO.setId(null);
+ callService.createCall(callSaveReqVO);
+ }
+
return success(BeanUtils.toBean(queueDOList, QueueRespVO.class));
}
+ @GetMapping("/call-again")
+ @Operation(summary = "閲嶅彨銆佹偅鑰�")
+ @Parameter(name = "roomId", description = "璇婂缂栧彿", required = true, example = "116")
+ @Parameter(name = "bedNo", description = "宸ヤ綅缂栧彿", required = true, example = "B2")
+ @PreAuthorize("@ss.hasPermission('ecg:doctor:task')")
+ public CommonResult<String> callAgainPatient(
+ @RequestParam("roomId") Long roomId,
+ @RequestParam("bedNo") String bedNo)
+ {
+ List<Byte> queueStatusList = new ArrayList<>();
+ queueStatusList.add(QueueStatusEnum.ONSTAGE.getStatus());
+ List<QueueDO> queueDOList = queueService.getDoctorQueueByStatus(roomId, bedNo, queueStatusList);
+
+ if (queueDOList.isEmpty())
+ return success("鏃犲氨璇婁腑鎮h��");
+
+ if (queueDOList.size() > 1) {
+ log.error("room {} bed {} have {} 灏辫瘖涓偅鑰�", roomId, bedNo, queueDOList.size());
+ return error(ECG_INNER_ERROR);
+ }
+
+ QueueDO onStageItem = queueDOList.get(0);
+ CallSaveReqVO callSaveReqVO = BeanUtils.toBean(onStageItem, CallSaveReqVO.class);
+ callSaveReqVO.setId(null);
+ callService.callAgain(callSaveReqVO);
+
+ return success("鎿嶄綔鎴愬姛");
+ }
+
@GetMapping("/get-patient-list")
@Operation(summary = "鍙栨偅鑰呭垪琛�")
@Parameter(name = "roomId", description = "璇婂缂栧彿", required = true, example = "116")
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/call/CallDO.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/call/CallDO.java
new file mode 100644
index 0000000..b75619d
--- /dev/null
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/call/CallDO.java
@@ -0,0 +1,75 @@
+package cn.lihu.jh.module.ecg.dal.dataobject.call;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.lihu.jh.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 鍙彿 DO
+ *
+ * @author 椹墤娉�
+ */
+@TableName("call_patient")
+@KeySequence("call_seq") // 鐢ㄤ簬 Oracle銆丳ostgreSQL銆並ingbase銆丏B2銆丠2 鏁版嵁搴撶殑涓婚敭鑷銆傚鏋滄槸 MySQL 绛夋暟鎹簱锛屽彲涓嶅啓銆�
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class CallDO extends BaseDO {
+
+ /**
+ * id
+ */
+ @TableId
+ private Integer id;
+ /**
+ * 鎮h�呯紪鍙�
+ */
+ private String patId;
+ /**
+ * 鎮h�呭鍚�
+ */
+ private String patName;
+ /**
+ * 鎮h�呮�у埆
+ */
+ private Integer patGender;
+ /**
+ * 鎺掗槦搴忓彿
+ */
+ private Integer seqNum;
+ /**
+ * 杩囧彿鏍囪
+ */
+ private Integer passed;
+ /**
+ * 棰勭害杩囨湡鏍囪
+ */
+ private Integer expired;
+ /**
+ * 鍙彿鐘舵�� 0 鏈挱 1 宸叉挱
+ */
+ private Integer called;
+ /**
+ * 鎻掗槦鏍囪
+ */
+ private Integer jumpFlag;
+ /**
+ * 璇婂缂栧彿
+ */
+ private Long roomId;
+ /**
+ * 璇婂鍚嶇О
+ */
+ private String roomName;
+ /**
+ * 璇婄枟搴婄紪鍙�
+ */
+ private String bedNo;
+
+}
\ 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/call/CallMapper.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/call/CallMapper.java
new file mode 100644
index 0000000..952896d
--- /dev/null
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/call/CallMapper.java
@@ -0,0 +1,44 @@
+package cn.lihu.jh.module.ecg.dal.mysql.call;
+
+import java.util.*;
+
+import cn.lihu.jh.framework.common.pojo.PageResult;
+import cn.lihu.jh.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.lihu.jh.framework.mybatis.core.mapper.BaseMapperX;
+import cn.lihu.jh.module.ecg.dal.dataobject.call.CallDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.lihu.jh.module.ecg.controller.admin.call.vo.*;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+/**
+ * 鍙彿 Mapper
+ *
+ * @author 椹墤娉�
+ */
+@Mapper
+public interface CallMapper extends BaseMapperX<CallDO> {
+
+ default PageResult<CallDO> selectPage(CallPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX<CallDO>()
+ .eqIfPresent(CallDO::getPatId, reqVO.getPatId())
+ .likeIfPresent(CallDO::getPatName, reqVO.getPatName())
+ .eqIfPresent(CallDO::getPatGender, reqVO.getPatGender())
+ .eqIfPresent(CallDO::getSeqNum, reqVO.getSeqNum())
+ .eqIfPresent(CallDO::getPassed, reqVO.getPassed())
+ .eqIfPresent(CallDO::getExpired, reqVO.getExpired())
+ .eqIfPresent(CallDO::getCalled, reqVO.getCalled())
+ .eqIfPresent(CallDO::getJumpFlag, reqVO.getJumpFlag())
+ .eqIfPresent(CallDO::getRoomId, reqVO.getRoomId())
+ .likeIfPresent(CallDO::getRoomName, reqVO.getRoomName())
+ .eqIfPresent(CallDO::getBedNo, reqVO.getBedNo())
+ .betweenIfPresent(CallDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(CallDO::getId));
+ }
+
+ @Select("select * from lihu.call_patient where pat_id = #{patId} order by id desc limit 1")
+ CallDO getLatestPatientCall(@Param("patId") String patId);
+
+ @Select("select * from lihu.call_patient where called = 0 order by id limit 1")
+ CallDO getNextCall();
+}
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/call/CallService.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/call/CallService.java
new file mode 100644
index 0000000..119d4be
--- /dev/null
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/call/CallService.java
@@ -0,0 +1,70 @@
+package cn.lihu.jh.module.ecg.service.call;
+
+import java.util.*;
+import cn.lihu.jh.module.ecg.controller.admin.call.vo.*;
+import cn.lihu.jh.module.ecg.dal.dataobject.call.CallDO;
+import cn.lihu.jh.framework.common.pojo.PageResult;
+import cn.lihu.jh.framework.common.pojo.PageParam;
+
+import javax.validation.Valid;
+
+/**
+ * 鍙彿 Service 鎺ュ彛
+ *
+ * @author 椹墤娉�
+ */
+public interface CallService {
+
+ /**
+ * 鍒涘缓鍙彿
+ *
+ * @param createReqVO 鍒涘缓淇℃伅
+ * @return 缂栧彿
+ */
+ Integer createCall(@Valid CallSaveReqVO createReqVO);
+
+ /**
+ * 鏇存柊鍙彿
+ *
+ * @param updateReqVO 鏇存柊淇℃伅
+ */
+ void updateCall(@Valid CallSaveReqVO updateReqVO);
+
+ /**
+ * 鍒犻櫎鍙彿
+ *
+ * @param id 缂栧彿
+ */
+ void deleteCall(Integer id);
+
+ /**
+ * 鑾峰緱鍙彿
+ *
+ * @param id 缂栧彿
+ * @return 鍙彿
+ */
+ CallDO getCall(Integer id);
+
+ /**
+ * 鑾峰緱涓嬩竴涓彨鍙�
+ *
+ * @return 鍙彿
+ */
+ CallDO getNextCall();
+
+ /**
+ * 鑾峰緱鍙彿鍒嗛〉
+ *
+ * @param pageReqVO 鍒嗛〉鏌ヨ
+ * @return 鍙彿鍒嗛〉
+ */
+ PageResult<CallDO> getCallPage(CallPageReqVO pageReqVO);
+
+ /**
+ * 閲嶅彨
+ *
+ * @param createReqVO 鍒涘缓淇℃伅
+ * @return 缂栧彿
+ */
+ Integer callAgain(@Valid CallSaveReqVO createReqVO);
+}
\ No newline at end of file
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/call/CallServiceImpl.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/call/CallServiceImpl.java
new file mode 100644
index 0000000..08f348c
--- /dev/null
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/call/CallServiceImpl.java
@@ -0,0 +1,86 @@
+package cn.lihu.jh.module.ecg.service.call;
+
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import cn.lihu.jh.module.ecg.controller.admin.call.vo.*;
+import cn.lihu.jh.module.ecg.dal.dataobject.call.CallDO;
+import cn.lihu.jh.framework.common.pojo.PageResult;
+import cn.lihu.jh.framework.common.util.object.BeanUtils;
+
+import cn.lihu.jh.module.ecg.dal.mysql.call.CallMapper;
+
+import javax.annotation.Resource;
+
+import static cn.lihu.jh.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*;
+
+/**
+ * 鍙彿 Service 瀹炵幇绫�
+ *
+ * @author 椹墤娉�
+ */
+@Service
+@Validated
+public class CallServiceImpl implements CallService {
+
+ @Resource
+ private CallMapper callMapper;
+
+ @Override
+ public Integer createCall(CallSaveReqVO createReqVO) {
+ // 鎻掑叆
+ CallDO call = BeanUtils.toBean(createReqVO, CallDO.class);
+ callMapper.insert(call);
+ // 杩斿洖
+ return call.getId();
+ }
+
+ @Override
+ public void updateCall(CallSaveReqVO updateReqVO) {
+ // 鏍¢獙瀛樺湪
+ validateCallExists(updateReqVO.getId());
+ // 鏇存柊
+ CallDO updateObj = BeanUtils.toBean(updateReqVO, CallDO.class);
+ callMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteCall(Integer id) {
+ // 鏍¢獙瀛樺湪
+ validateCallExists(id);
+ // 鍒犻櫎
+ callMapper.deleteById(id);
+ }
+
+ private void validateCallExists(Integer id) {
+ if (callMapper.selectById(id) == null) {
+ throw exception(CALL_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public CallDO getCall(Integer id) {
+ return callMapper.selectById(id);
+ }
+
+ @Override
+ public CallDO getNextCall() {
+ CallDO callDO = callMapper.getNextCall();
+ return callDO;
+ }
+
+ @Override
+ public PageResult<CallDO> getCallPage(CallPageReqVO pageReqVO) {
+ return callMapper.selectPage(pageReqVO);
+ }
+
+ @Override
+ public Integer callAgain(CallSaveReqVO createReqVO) {
+ CallDO callDO = callMapper.getLatestPatientCall(createReqVO.getPatId());
+ if (null != callDO && callDO.getCalled() == 0)
+ return 0;
+
+ return createCall(createReqVO);
+ }
+}
diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/resources/mapper/call/CallMapper.xml b/jh-module-ecg/jh-module-ecg-biz/src/main/resources/mapper/call/CallMapper.xml
new file mode 100644
index 0000000..080faaf
--- /dev/null
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/resources/mapper/call/CallMapper.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.lihu.jh.module.ecg.dal.mysql.call.CallMapper">
+
+ <!--
+ 涓�鑸儏鍐典笅锛屽敖鍙兘浣跨敤 Mapper 杩涜 CRUD 澧炲垹鏀规煡鍗冲彲銆�
+ 鏃犳硶婊¤冻鐨勫満鏅紝渚嬪璇村琛ㄥ叧鑱旀煡璇紝鎵嶄娇鐢� XML 缂栧啓 SQL銆�
+ 浠g爜鐢熸垚鍣ㄦ殏鏃跺彧鐢熸垚 Mapper XML 鏂囦欢鏈韩锛屾洿澶氭帹鑽� MybatisX 蹇�熷紑鍙戞彃浠舵潵鐢熸垚鏌ヨ銆�
+ 鏂囨。鍙锛歨ttps://www.iocoder.cn/MyBatis/x-plugins/
+ -->
+
+</mapper>
\ No newline at end of file
diff --git a/sql/mysql/jh.sql b/sql/mysql/jh.sql
index 6c5e132..6ac4975 100644
--- a/sql/mysql/jh.sql
+++ b/sql/mysql/jh.sql
@@ -189,3 +189,29 @@
KEY `idx_rent_id` (`rent_id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='宸ヤ綔璁板綍琛�';
+-- ----------------------------
+-- Table structure for call
+-- ----------------------------
+DROP TABLE IF EXISTS `call_patient`;
+SELECT * FROM lihu.call_patient;CREATE TABLE `call_patient` (
+ `id` int NOT NULL AUTO_INCREMENT COMMENT 'id',
+ `pat_id` varchar(30) NOT NULL COMMENT '鎮h�呯紪鍙�',
+ `pat_name` varchar(10) NOT NULL COMMENT '鎮h�呭鍚�',
+ `pat_gender` int DEFAULT NULL COMMENT '鎮h�呮�у埆',
+ `seq_num` int DEFAULT NULL COMMENT '鎺掗槦搴忓彿',
+ `passed` int DEFAULT '0' COMMENT '杩囧彿鏍囪',
+ `expired` int DEFAULT '0' COMMENT '棰勭害杩囨湡鏍囪',
+ `called` int DEFAULT '0' COMMENT '鍙彿鐘舵�� 0 鏈挱 1 宸叉挱 ',
+ `jump_flag` int DEFAULT '0' COMMENT '鎻掗槦鏍囪',
+ `room_id` bigint DEFAULT '0' COMMENT '璇婂缂栧彿',
+ `room_name` varchar(10) DEFAULT '' COMMENT '璇婂鍚嶇О',
+ `bed_no` varchar(10) DEFAULT '' 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 b'0' COMMENT '鍒犻櫎鏍囪',
+ PRIMARY KEY (`id`),
+ KEY `idx_pat` (`pat_id`) USING BTREE,
+ KEY `idx_called` (`called`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='鍙彿琛�';
--
Gitblit v1.9.3