From 4e58601b2c52ebef83659432f9b3ae25c1c37eea Mon Sep 17 00:00:00 2001 From: HuangXinQuan Date: Tue, 24 Mar 2026 11:51:17 +0800 Subject: [PATCH] =?UTF-8?q?260=20=E9=A2=84=E7=BA=A6=E7=AE=A1=E7=90=86-?= =?UTF-8?q?=E3=80=8B=E5=8C=BB=E7=94=9F=E6=8E=92=E7=8F=AD=E7=AE=A1=E7=90=86?= =?UTF-8?q?=EF=BC=9A=E7=B3=BB=E7=BB=9F=E6=9C=AA=E6=AD=A3=E7=A1=AE=E9=99=90?= =?UTF-8?q?=E5=88=B6=E5=90=8C=E4=B8=80=E5=A4=A9=E5=90=8C=E4=B8=80=E6=97=B6?= =?UTF-8?q?=E6=AE=B5=EF=BC=88=E4=B8=8A=E5=8D=88/=E4=B8=8B=E5=8D=88?= =?UTF-8?q?=EF=BC=89=E7=9A=84=E9=87=8D=E5=A4=8D=E6=8E=92=E7=8F=AD=EF=BC=8C?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E5=90=8C=E4=B8=80=E5=8C=BB=E7=94=9F=E5=9C=A8?= =?UTF-8?q?=E5=90=8C=E4=B8=80=E6=97=B6=E9=97=B4=E6=AE=B5=E5=8F=AF=E8=A2=AB?= =?UTF-8?q?=E5=A4=9A=E6=AC=A1=E6=8E=92=E7=8F=AD=EF=BC=8C=E4=BA=A7=E7=94=9F?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=86=B2=E7=AA=81=E5=92=8C=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E8=B0=83=E5=BA=A6=E6=B7=B7=E4=B9=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DoctorScheduleAppServiceImpl.java | 60 ++++++++++++++ .../appoinmentmanage/deptManage/index.vue | 79 ++++++++++++++++--- 2 files changed, 128 insertions(+), 11 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/DoctorScheduleAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/DoctorScheduleAppServiceImpl.java index 68e313a7..eaf514ef 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/DoctorScheduleAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/DoctorScheduleAppServiceImpl.java @@ -163,6 +163,30 @@ public class DoctorScheduleAppServiceImpl implements IDoctorScheduleAppService { return R.fail("限号数量必须大于0"); } + // 检查结束时间必须大于开始时间 + if (doctorSchedule.getStartTime() != null && doctorSchedule.getEndTime() != null) { + if (!doctorSchedule.getStartTime().isBefore(doctorSchedule.getEndTime())) { + return R.fail("结束时间必须大于开始时间"); + } + } + + // 检查时间重叠(同一医生、同一天时间段有重叠) + if (doctorSchedule.getDoctorId() != null && scheduledDate != null + && doctorSchedule.getStartTime() != null && doctorSchedule.getEndTime() != null) { + LocalDate scheduleDate = LocalDate.parse(scheduledDate); + boolean hasOverlap = checkTimeOverlap( + doctorSchedule.getDoctorId(), + scheduleDate, + doctorSchedule.getStartTime(), + doctorSchedule.getEndTime() + ); + if (hasOverlap) { + return R.fail("该医生在 " + scheduledDate + " 的 " + + doctorSchedule.getStartTime() + "-" + doctorSchedule.getEndTime() + + " 时间段与已有排班重叠,不能重复添加"); + } + } + // 创建新对象,排除id字段(数据库id列是GENERATED ALWAYS,由数据库自动生成) DoctorSchedule newSchedule = new DoctorSchedule(); newSchedule.setWeekday(doctorSchedule.getWeekday()); @@ -381,6 +405,42 @@ public class DoctorScheduleAppServiceImpl implements IDoctorScheduleAppService { return slots; } + /** + * 检查同一医生、同一天、同时段是否已存在排班 + * + * @param doctorId 医生ID + * @param scheduleDate 出诊日期 + * @param timePeriod 时段(上午/下午) + * @return true表示存在重复排班,false表示不存在 + */ + // private boolean checkDuplicateSchedule(Long doctorId, LocalDate scheduleDate, String timePeriod) { + // return schedulePoolService.lambdaQuery() + // .eq(SchedulePool::getDoctorId, doctorId) + // .eq(SchedulePool::getScheduleDate, scheduleDate) + // .eq(SchedulePool::getShift, timePeriod) + // .exists(); + // } + + /** + * 检查同一医生、同一天是否有时间重叠的排班 + * 重叠判断:startA < endB AND startB < endA(即时间段有交集) + * + * @param doctorId 医生ID + * @param scheduleDate 出诊日期 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @return true表示存在时间重叠,false表示不重叠 + */ + private boolean checkTimeOverlap(Long doctorId, LocalDate scheduleDate, + LocalTime startTime, LocalTime endTime) { + return schedulePoolService.lambdaQuery() + .eq(SchedulePool::getDoctorId, doctorId) + .eq(SchedulePool::getScheduleDate, scheduleDate) + .lt(SchedulePool::getStartTime, endTime) // 已有开始时间 < 新结束时间 + .gt(SchedulePool::getEndTime, startTime) // 已有结束时间 > 新开始时间 + .exists(); + } + /** * 根据星期几计算具体日期(下周的对应星期) */ diff --git a/openhis-ui-vue3/src/views/appoinmentmanage/deptManage/index.vue b/openhis-ui-vue3/src/views/appoinmentmanage/deptManage/index.vue index 468275e4..535e10a0 100644 --- a/openhis-ui-vue3/src/views/appoinmentmanage/deptManage/index.vue +++ b/openhis-ui-vue3/src/views/appoinmentmanage/deptManage/index.vue @@ -166,7 +166,19 @@ {{ dateGroup.weekday }} - + + +