From c2fa13de825236055daee8477df91aa33aaa5915 Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 25 Mar 2026 15:59:13 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(surgical):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=89=8B=E6=9C=AF=E5=AE=89=E6=8E=92=E9=87=8D=E5=A4=8D=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E5=8A=9F=E8=83=BD=20BUG=20#278?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在手术安排创建流程中增加重复校验逻辑 - 实现同一患者同一手术单号同一手术名称的唯一性约束 - 新增 existsDuplicateSchedule 数据库查询方法 - 添加 XML 映射文件中的重复校验 SQL 查询 - 防止相同手术安排的重复提交问题 ``` --- .../impl/SurgicalScheduleAppServiceImpl.java | 16 ++++++++++++++++ .../mapper/SurgicalScheduleAppMapper.java | 10 ++++++++++ .../clinicalmanage/SurgicalScheduleAppMapper.xml | 9 +++++++++ 3 files changed, 35 insertions(+) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/appservice/impl/SurgicalScheduleAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/appservice/impl/SurgicalScheduleAppServiceImpl.java index dd914033..42ef3211 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/appservice/impl/SurgicalScheduleAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/appservice/impl/SurgicalScheduleAppServiceImpl.java @@ -94,6 +94,22 @@ public class SurgicalScheduleAppServiceImpl implements ISurgicalScheduleAppServi return R.fail("患者信息不存在"); } } + + // 校验是否重复手术安排 + // 同一患者 + 同一手术单号 + 同一手术名称 只能有一条有效安排记录 + if (opCreateScheduleDto.getPatientId() != null + && opCreateScheduleDto.getOperCode() != null && !opCreateScheduleDto.getOperCode().isEmpty() + && opCreateScheduleDto.getOperName() != null && !opCreateScheduleDto.getOperName().isEmpty()) { + Boolean existsDuplicate = surgicalScheduleAppMapper.existsDuplicateSchedule( + opCreateScheduleDto.getPatientId(), + opCreateScheduleDto.getOperCode(), + opCreateScheduleDto.getOperName() + ); + if (existsDuplicate) { + return R.fail("该患者此手术单号已存在手术安排,请勿重复提交"); + } + } + //校验该时段内手术间是否被占用 LocalDateTime scheduleDate = opCreateScheduleDto.getEntryTime();//入室时间 String roomCode = opCreateScheduleDto.getRoomCode();//手术室编号 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/mapper/SurgicalScheduleAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/mapper/SurgicalScheduleAppMapper.java index 62356878..e8de099e 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/mapper/SurgicalScheduleAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/clinicalmanage/mapper/SurgicalScheduleAppMapper.java @@ -58,4 +58,14 @@ public interface SurgicalScheduleAppMapper { * @return 是否存在冲突的手术安排 */ Boolean isScheduleConflict(LocalDateTime startTime, LocalDateTime endTime, String surgeryRoomId); + + /** + * 检查是否存在重复的手术安排 + * + * @param patientId 患者ID + * @param operCode 手术单号 + * @param operName 手术名称 + * @return 是否存在重复记录 + */ + Boolean existsDuplicateSchedule(@Param("patientId") Long patientId, @Param("operCode") String operCode, @Param("operName") String operName); } diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/clinicalmanage/SurgicalScheduleAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/clinicalmanage/SurgicalScheduleAppMapper.xml index 088a7c42..830e0361 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/clinicalmanage/SurgicalScheduleAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/clinicalmanage/SurgicalScheduleAppMapper.xml @@ -144,4 +144,13 @@ AND entry_time >= #{startTime} AND end_time < #{endTime} + + +