eight
2024-08-07 74bdfccc43ecc6cdb55898f48efb43aea8e9b324
update
已修改9个文件
475 ■■■■ 文件已修改
.gitignore 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/appointment/vo/AppointmentPageReqVO.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/appointment/vo/AppointmentRespVO.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/appointment/vo/AppointmentSaveReqVO.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/appointment/AppointmentDO.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/appointment/AppointmentMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-module-ecg/jh-module-ecg-biz/src/test/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentServiceImplTest.java 404 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-server/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -22,3 +22,7 @@
.flattened-pom.xml
/jh-module-ecg/jh-module-ecg-biz/target
/jh-module-ecg/jh-module-ecg-api/target
/jh-module-ecg/target
/jh-framework/target
/jh-module-infra/target
/jh-module-system/target
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/appointment/vo/AppointmentPageReqVO.java
@@ -57,11 +57,11 @@
    @Schema(description = "预约编号", example = "27849")
    private String bookId;
    @Schema(description = "预约检查时间段")
    private LocalDateTime bookPeriodStart;
    @Schema(description = "预约日期")
    private LocalDateTime bookDate;
    @Schema(description = "预约检查时间段")
    private LocalDateTime bookPeriodEnd;
    @Schema(description = "预约时间段")
    private Integer bookTimeslot;
    @Schema(description = "预约发生时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/appointment/vo/AppointmentRespVO.java
@@ -71,13 +71,13 @@
    @ExcelProperty("预约编号")
    private String bookId;
    @Schema(description = "预约检查时间段", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("预约检查时间段")
    private LocalDateTime bookPeriodStart;
    @Schema(description = "预约日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("预约日期")
    private LocalDateTime bookDate;
    @Schema(description = "预约检查时间段", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("预约检查时间段")
    private LocalDateTime bookPeriodEnd;
    @Schema(description = "预约时间段", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("预约时间段")
    private Integer bookTimeslot;
    @Schema(description = "预约发生时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("预约发生时间")
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/controller/admin/appointment/vo/AppointmentSaveReqVO.java
@@ -56,23 +56,23 @@
    private String patBedNo;
    @Schema(description = "预约编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "27849")
    @NotEmpty(message = "预约编号不能为空")
    //@NotEmpty(message = "预约编号不能为空")
    private String bookId;
    @Schema(description = "预约检查时间段", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "预约检查时间段不能为空")
    private LocalDateTime bookPeriodStart;
    @Schema(description = "预约日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "预约日期不能为空")
    private LocalDateTime bookDate;
    @Schema(description = "预约检查时间段", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "预约检查时间段不能为空")
    private LocalDateTime bookPeriodEnd;
    @Schema(description = "预约时间段", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "预约时间段不能为空")
    private Integer bookTimeslot;
    @Schema(description = "预约发生时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "预约发生时间不能为空")
    //@NotNull(message = "预约发生时间不能为空")
    private LocalDateTime bookTime;
    @Schema(description = "预约检查类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @NotNull(message = "预约检查类型不能为空")
    private Boolean bookCheckType;
    private Byte bookCheckType;
}
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/dataobject/appointment/AppointmentDO.java
@@ -90,13 +90,13 @@
     */
    private String bookId;
    /**
     * 预约检查时间段
     * 预约日期
     */
    private LocalDateTime bookPeriodStart;
    private LocalDateTime bookDate;
    /**
     * 预约检查时间段
     * 预约时间段
     */
    private LocalDateTime bookPeriodEnd;
    private Integer bookTimeslot;
    /**
     * 预约发生时间
     */
@@ -106,11 +106,11 @@
     *
     * 枚举 {@link TODO ecg_check_type 对应的类}
     */
    private Boolean bookCheckType;
    private Byte bookCheckType;
    /**
     * 预约来源:X系统、护士手动预约
     */
    private String bookSrc;
    private Byte bookSrc;
    /**
     * 从数据平台同步时间
     */
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/dal/mysql/appointment/AppointmentMapper.java
@@ -33,8 +33,8 @@
                .eqIfPresent(AppointmentDO::getPatWardDesc, reqVO.getPatWardDesc())
                .eqIfPresent(AppointmentDO::getPatBedNo, reqVO.getPatBedNo())
                .eqIfPresent(AppointmentDO::getBookId, reqVO.getBookId())
                .eqIfPresent(AppointmentDO::getBookPeriodStart, reqVO.getBookPeriodStart())
                .eqIfPresent(AppointmentDO::getBookPeriodEnd, reqVO.getBookPeriodEnd())
                .eqIfPresent(AppointmentDO::getBookDate, reqVO.getBookDate())
                .eqIfPresent(AppointmentDO::getBookTimeslot, reqVO.getBookTimeslot())
                .betweenIfPresent(AppointmentDO::getBookTime, reqVO.getBookTime())
                .eqIfPresent(AppointmentDO::getBookCheckType, reqVO.getBookCheckType())
                .eqIfPresent(AppointmentDO::getBookSrc, reqVO.getBookSrc())
jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentServiceImpl.java
@@ -13,6 +13,9 @@
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Date;
import static cn.lihu.jh.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*;
@@ -32,6 +35,10 @@
    public Integer createAppointment(AppointmentSaveReqVO createReqVO) {
        // 插入
        AppointmentDO appointment = BeanUtils.toBean(createReqVO, AppointmentDO.class);
        appointment.setBookTime( LocalDateTime.now() );
        appointment.setBookSrc((byte)0);
        appointmentMapper.insert(appointment);
        // 返回
        return appointment.getId();
jh-module-ecg/jh-module-ecg-biz/src/test/java/cn/lihu/jh/module/ecg/service/appointment/AppointmentServiceImplTest.java
@@ -1,202 +1,202 @@
package cn.lihu.jh.module.ecg.service.appointment;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import jakarta.annotation.Resource;
import cn.lihu.jh.framework.test.core.ut.BaseDbUnitTest;
import cn.lihu.jh.module.ecg.controller.admin.appointment.vo.*;
import cn.lihu.jh.module.ecg.dal.dataobject.appointment.AppointmentDO;
import cn.lihu.jh.module.ecg.dal.mysql.appointment.AppointmentMapper;
import cn.lihu.jh.framework.common.pojo.PageResult;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Import;
import java.util.*;
import java.time.LocalDateTime;
import static cn.hutool.core.util.RandomUtil.*;
import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*;
import static cn.lihu.jh.framework.test.core.util.AssertUtils.*;
import static cn.lihu.jh.framework.test.core.util.RandomUtils.*;
import static cn.lihu.jh.framework.common.util.date.LocalDateTimeUtils.*;
import static cn.lihu.jh.framework.common.util.object.ObjectUtils.*;
import static cn.lihu.jh.framework.common.util.date.DateUtils.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
/**
 * {@link AppointmentServiceImpl} 的单元测试类
 *
 * @author 马剑波
 */
@Import(AppointmentServiceImpl.class)
public class AppointmentServiceImplTest extends BaseDbUnitTest {
    @Resource
    private AppointmentServiceImpl appointmentService;
    @Resource
    private AppointmentMapper appointmentMapper;
    @Test
    public void testCreateAppointment_success() {
        // 准备参数
        AppointmentSaveReqVO createReqVO = randomPojo(AppointmentSaveReqVO.class).setId(null);
        // 调用
        Integer appointmentId = appointmentService.createAppointment(createReqVO);
        // 断言
        assertNotNull(appointmentId);
        // 校验记录的属性是否正确
        AppointmentDO appointment = appointmentMapper.selectById(appointmentId);
        assertPojoEquals(createReqVO, appointment, "id");
    }
    @Test
    public void testUpdateAppointment_success() {
        // mock 数据
        AppointmentDO dbAppointment = randomPojo(AppointmentDO.class);
        appointmentMapper.insert(dbAppointment);// @Sql: 先插入出一条存在的数据
        // 准备参数
        AppointmentSaveReqVO updateReqVO = randomPojo(AppointmentSaveReqVO.class, o -> {
            o.setId(dbAppointment.getId()); // 设置更新的 ID
        });
        // 调用
        appointmentService.updateAppointment(updateReqVO);
        // 校验是否更新正确
        AppointmentDO appointment = appointmentMapper.selectById(updateReqVO.getId()); // 获取最新的
        assertPojoEquals(updateReqVO, appointment);
    }
    @Test
    public void testUpdateAppointment_notExists() {
        // 准备参数
        AppointmentSaveReqVO updateReqVO = randomPojo(AppointmentSaveReqVO.class);
        // 调用, 并断言异常
        assertServiceException(() -> appointmentService.updateAppointment(updateReqVO), APPOINTMENT_NOT_EXISTS);
    }
    @Test
    public void testDeleteAppointment_success() {
        // mock 数据
        AppointmentDO dbAppointment = randomPojo(AppointmentDO.class);
        appointmentMapper.insert(dbAppointment);// @Sql: 先插入出一条存在的数据
        // 准备参数
        Integer id = dbAppointment.getId();
        // 调用
        appointmentService.deleteAppointment(id);
       // 校验数据不存在了
       assertNull(appointmentMapper.selectById(id));
    }
    @Test
    public void testDeleteAppointment_notExists() {
        // 准备参数
        Integer id = randomIntegerId();
        // 调用, 并断言异常
        assertServiceException(() -> appointmentService.deleteAppointment(id), APPOINTMENT_NOT_EXISTS);
    }
    @Test
    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
    public void testGetAppointmentPage() {
       // mock 数据
       AppointmentDO dbAppointment = randomPojo(AppointmentDO.class, o -> { // 等会查询到
           o.setPatId(null);
           o.setPatName(null);
           o.setPatGender(null);
           o.setPatBirthday(null);
           o.setPatMobile(null);
           o.setPatPhone(null);
           o.setPatIdentityId(null);
           o.setPatAddr(null);
           o.setPatDeptCode(null);
           o.setPatDeptDesc(null);
           o.setPatWardCode(null);
           o.setPatWardDesc(null);
           o.setPatBedNo(null);
           o.setBookId(null);
           o.setBookPeriodStart(null);
           o.setBookPeriodEnd(null);
           o.setBookTime(null);
           o.setBookCheckType(null);
           o.setBookSrc(null);
       });
       appointmentMapper.insert(dbAppointment);
       // 测试 patId 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatId(null)));
       // 测试 patName 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatName(null)));
       // 测试 patGender 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatGender(null)));
       // 测试 patBirthday 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatBirthday(null)));
       // 测试 patMobile 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatMobile(null)));
       // 测试 patPhone 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatPhone(null)));
       // 测试 patIdentityId 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatIdentityId(null)));
       // 测试 patAddr 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatAddr(null)));
       // 测试 patDeptCode 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatDeptCode(null)));
       // 测试 patDeptDesc 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatDeptDesc(null)));
       // 测试 patWardCode 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatWardCode(null)));
       // 测试 patWardDesc 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatWardDesc(null)));
       // 测试 patBedNo 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatBedNo(null)));
       // 测试 bookId 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookId(null)));
       // 测试 bookPeriodStart 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookPeriodStart(null)));
       // 测试 bookPeriodEnd 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookPeriodEnd(null)));
       // 测试 bookTime 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookTime(null)));
       // 测试 bookCheckType 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookCheckType(null)));
       // 测试 bookSrc 不匹配
       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookSrc(null)));
       // 准备参数
       AppointmentPageReqVO reqVO = new AppointmentPageReqVO();
       reqVO.setPatId(null);
       reqVO.setPatName(null);
       reqVO.setPatGender(null);
       reqVO.setPatBirthday(null);
       reqVO.setPatMobile(null);
       reqVO.setPatPhone(null);
       reqVO.setPatIdentityId(null);
       reqVO.setPatAddr(null);
       reqVO.setPatDeptCode(null);
       reqVO.setPatDeptDesc(null);
       reqVO.setPatWardCode(null);
       reqVO.setPatWardDesc(null);
       reqVO.setPatBedNo(null);
       reqVO.setBookId(null);
       reqVO.setBookPeriodStart(null);
       reqVO.setBookPeriodEnd(null);
       reqVO.setBookTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
       reqVO.setBookCheckType(null);
       reqVO.setBookSrc(null);
       // 调用
       PageResult<AppointmentDO> pageResult = appointmentService.getAppointmentPage(reqVO);
       // 断言
       assertEquals(1, pageResult.getTotal());
       assertEquals(1, pageResult.getList().size());
       assertPojoEquals(dbAppointment, pageResult.getList().get(0));
    }
}
//package cn.lihu.jh.module.ecg.service.appointment;
//
//import org.junit.jupiter.api.Disabled;
//import org.junit.jupiter.api.Test;
//import org.springframework.boot.test.mock.mockito.MockBean;
//
//import jakarta.annotation.Resource;
//
//import cn.lihu.jh.framework.test.core.ut.BaseDbUnitTest;
//
//import cn.lihu.jh.module.ecg.controller.admin.appointment.vo.*;
//import cn.lihu.jh.module.ecg.dal.dataobject.appointment.AppointmentDO;
//import cn.lihu.jh.module.ecg.dal.mysql.appointment.AppointmentMapper;
//import cn.lihu.jh.framework.common.pojo.PageResult;
//
//import jakarta.annotation.Resource;
//import org.springframework.context.annotation.Import;
//import java.util.*;
//import java.time.LocalDateTime;
//
//import static cn.hutool.core.util.RandomUtil.*;
//import static cn.lihu.jh.module.ecg.enums.ErrorCodeConstants.*;
//import static cn.lihu.jh.framework.test.core.util.AssertUtils.*;
//import static cn.lihu.jh.framework.test.core.util.RandomUtils.*;
//import static cn.lihu.jh.framework.common.util.date.LocalDateTimeUtils.*;
//import static cn.lihu.jh.framework.common.util.object.ObjectUtils.*;
//import static cn.lihu.jh.framework.common.util.date.DateUtils.*;
//import static org.junit.jupiter.api.Assertions.*;
//import static org.mockito.Mockito.*;
//
///**
// * {@link AppointmentServiceImpl} 的单元测试类
// *
// * @author 马剑波
// */
//@Import(AppointmentServiceImpl.class)
//public class AppointmentServiceImplTest extends BaseDbUnitTest {
//
//    @Resource
//    private AppointmentServiceImpl appointmentService;
//
//    @Resource
//    private AppointmentMapper appointmentMapper;
//
//    @Test
//    public void testCreateAppointment_success() {
//        // 准备参数
//        AppointmentSaveReqVO createReqVO = randomPojo(AppointmentSaveReqVO.class).setId(null);
//
//        // 调用
//        Integer appointmentId = appointmentService.createAppointment(createReqVO);
//        // 断言
//        assertNotNull(appointmentId);
//        // 校验记录的属性是否正确
//        AppointmentDO appointment = appointmentMapper.selectById(appointmentId);
//        assertPojoEquals(createReqVO, appointment, "id");
//    }
//
//    @Test
//    public void testUpdateAppointment_success() {
//        // mock 数据
//        AppointmentDO dbAppointment = randomPojo(AppointmentDO.class);
//        appointmentMapper.insert(dbAppointment);// @Sql: 先插入出一条存在的数据
//        // 准备参数
//        AppointmentSaveReqVO updateReqVO = randomPojo(AppointmentSaveReqVO.class, o -> {
//            o.setId(dbAppointment.getId()); // 设置更新的 ID
//        });
//
//        // 调用
//        appointmentService.updateAppointment(updateReqVO);
//        // 校验是否更新正确
//        AppointmentDO appointment = appointmentMapper.selectById(updateReqVO.getId()); // 获取最新的
//        assertPojoEquals(updateReqVO, appointment);
//    }
//
//    @Test
//    public void testUpdateAppointment_notExists() {
//        // 准备参数
//        AppointmentSaveReqVO updateReqVO = randomPojo(AppointmentSaveReqVO.class);
//
//        // 调用, 并断言异常
//        assertServiceException(() -> appointmentService.updateAppointment(updateReqVO), APPOINTMENT_NOT_EXISTS);
//    }
//
//    @Test
//    public void testDeleteAppointment_success() {
//        // mock 数据
//        AppointmentDO dbAppointment = randomPojo(AppointmentDO.class);
//        appointmentMapper.insert(dbAppointment);// @Sql: 先插入出一条存在的数据
//        // 准备参数
//        Integer id = dbAppointment.getId();
//
//        // 调用
//        appointmentService.deleteAppointment(id);
//       // 校验数据不存在了
//       assertNull(appointmentMapper.selectById(id));
//    }
//
//    @Test
//    public void testDeleteAppointment_notExists() {
//        // 准备参数
//        Integer id = randomIntegerId();
//
//        // 调用, 并断言异常
//        assertServiceException(() -> appointmentService.deleteAppointment(id), APPOINTMENT_NOT_EXISTS);
//    }
//
//    @Test
//    @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
//    public void testGetAppointmentPage() {
//       // mock 数据
//       AppointmentDO dbAppointment = randomPojo(AppointmentDO.class, o -> { // 等会查询到
//           o.setPatId(null);
//           o.setPatName(null);
//           o.setPatGender(null);
//           o.setPatBirthday(null);
//           o.setPatMobile(null);
//           o.setPatPhone(null);
//           o.setPatIdentityId(null);
//           o.setPatAddr(null);
//           o.setPatDeptCode(null);
//           o.setPatDeptDesc(null);
//           o.setPatWardCode(null);
//           o.setPatWardDesc(null);
//           o.setPatBedNo(null);
//           o.setBookId(null);
//           o.setBookPeriodStart(null);
//           o.setBookPeriodEnd(null);
//           o.setBookTime(null);
//           o.setBookCheckType(null);
//           o.setBookSrc(null);
//       });
//       appointmentMapper.insert(dbAppointment);
//       // 测试 patId 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatId(null)));
//       // 测试 patName 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatName(null)));
//       // 测试 patGender 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatGender(null)));
//       // 测试 patBirthday 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatBirthday(null)));
//       // 测试 patMobile 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatMobile(null)));
//       // 测试 patPhone 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatPhone(null)));
//       // 测试 patIdentityId 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatIdentityId(null)));
//       // 测试 patAddr 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatAddr(null)));
//       // 测试 patDeptCode 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatDeptCode(null)));
//       // 测试 patDeptDesc 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatDeptDesc(null)));
//       // 测试 patWardCode 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatWardCode(null)));
//       // 测试 patWardDesc 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatWardDesc(null)));
//       // 测试 patBedNo 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setPatBedNo(null)));
//       // 测试 bookId 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookId(null)));
//       // 测试 bookPeriodStart 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookPeriodStart(null)));
//       // 测试 bookPeriodEnd 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookPeriodEnd(null)));
//       // 测试 bookTime 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookTime(null)));
//       // 测试 bookCheckType 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookCheckType(null)));
//       // 测试 bookSrc 不匹配
//       appointmentMapper.insert(cloneIgnoreId(dbAppointment, o -> o.setBookSrc(null)));
//       // 准备参数
//       AppointmentPageReqVO reqVO = new AppointmentPageReqVO();
//       reqVO.setPatId(null);
//       reqVO.setPatName(null);
//       reqVO.setPatGender(null);
//       reqVO.setPatBirthday(null);
//       reqVO.setPatMobile(null);
//       reqVO.setPatPhone(null);
//       reqVO.setPatIdentityId(null);
//       reqVO.setPatAddr(null);
//       reqVO.setPatDeptCode(null);
//       reqVO.setPatDeptDesc(null);
//       reqVO.setPatWardCode(null);
//       reqVO.setPatWardDesc(null);
//       reqVO.setPatBedNo(null);
//       reqVO.setBookId(null);
//       reqVO.setBookPeriodStart(null);
//       reqVO.setBookPeriodEnd(null);
//       reqVO.setBookTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
//       reqVO.setBookCheckType(null);
//       reqVO.setBookSrc(null);
//
//       // 调用
//       PageResult<AppointmentDO> pageResult = appointmentService.getAppointmentPage(reqVO);
//       // 断言
//       assertEquals(1, pageResult.getTotal());
//       assertEquals(1, pageResult.getList().size());
//       assertPojoEquals(dbAppointment, pageResult.getList().get(0));
//    }
//
//}
jh-server/pom.xml
@@ -128,6 +128,12 @@
            <artifactId>jh-spring-boot-starter-protection</artifactId>
        </dependency>
<!--        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>-->
    </dependencies>
    <build>