From f1bddf3fbeaf489b33d141679d941cc321f8e51e Mon Sep 17 00:00:00 2001 From: HuangXinQuan Date: Tue, 10 Feb 2026 15:08:38 +0800 Subject: [PATCH] =?UTF-8?q?75=E4=BF=AE=E6=94=B9=E8=BF=98=E6=98=AF=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E2=80=9C=E5=BD=93=E5=89=8D=E5=8D=AB=E7=94=9F=E6=9C=BA?= =?UTF-8?q?=E6=9E=84=E4=B8=8B=E5=B7=B2=E5=AD=98=E5=9C=A8=E8=AF=A5=E7=A7=91?= =?UTF-8?q?=E5=AE=A4=E5=90=8D=E7=A7=B0=E7=9A=84=E8=AF=8A=E5=AE=A4=E2=80=9D?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ClinicRoomAppServiceImpl.java | 22 ++- .../service/IClinicRoomService.java | 19 +++ .../service/impl/ClinicRoomServiceImpl.java | 17 ++ .../appoinmentmanage/clinicRoom/index.vue | 146 +++--------------- 4 files changed, 74 insertions(+), 130 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/ClinicRoomAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/ClinicRoomAppServiceImpl.java index a35199cc..a6869d5b 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/ClinicRoomAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/ClinicRoomAppServiceImpl.java @@ -26,11 +26,11 @@ public class ClinicRoomAppServiceImpl implements IClinicRoomAppService { if (roomName != null && ObjectUtil.isNotEmpty(roomName)) { clinicRoom.setRoomName(roomName); } - + // 分页查询 Page page = new Page<>(pageNum, pageSize); Page result = clinicRoomService.selectClinicRoomPage(page, clinicRoom); - + return R.ok(result); } @@ -58,7 +58,12 @@ public class ClinicRoomAppServiceImpl implements IClinicRoomAppService { if (clinicRoom.getRemarks() != null && clinicRoom.getRemarks().length() > 500) { return R.fail(400, "备注长度不能超过500个字符"); } - + + // 检查诊室名称在同卫生机构下是否已存在 + if (clinicRoomService.existsByOrgNameAndRoomName(clinicRoom.getOrgName(), clinicRoom.getRoomName())) { + return R.fail(400, "当前卫生机构下已存在该诊室名称"); + } + // 新增诊室 int result = clinicRoomService.insertClinicRoom(clinicRoom); if (result > 0) { @@ -86,13 +91,18 @@ public class ClinicRoomAppServiceImpl implements IClinicRoomAppService { if (clinicRoom.getRemarks() != null && clinicRoom.getRemarks().length() > 500) { return R.fail(400, "备注长度不能超过500个字符"); } - + // 检查诊室是否存在 ClinicRoom existingClinicRoom = clinicRoomService.selectClinicRoomById(clinicRoom.getId()); if (existingClinicRoom == null) { return R.fail(404, "诊室不存在"); } - + + // 检查诊室名称在同卫生机构下是否已存在(排除当前记录) + if (clinicRoomService.existsByOrgNameAndRoomNameExcludeId(clinicRoom.getOrgName(), clinicRoom.getRoomName(), clinicRoom.getId())) { + return R.fail(400, "当前卫生机构下已存在该诊室名称"); + } + // 更新诊室 int result = clinicRoomService.updateClinicRoom(clinicRoom); if (result > 0) { @@ -109,7 +119,7 @@ public class ClinicRoomAppServiceImpl implements IClinicRoomAppService { if (existingClinicRoom == null) { return R.fail(404, "诊室不存在"); } - + // 删除诊室 int result = clinicRoomService.deleteClinicRoomById(id); if (result > 0) { diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/appointmentmanage/service/IClinicRoomService.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/appointmentmanage/service/IClinicRoomService.java index 58808be9..b40c24b9 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/appointmentmanage/service/IClinicRoomService.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/appointmentmanage/service/IClinicRoomService.java @@ -51,4 +51,23 @@ public interface IClinicRoomService extends IService { * @return 结果 */ int deleteClinicRoomById(Long id); + + /** + * 检查指定卫生机构下是否已存在相同诊室名称(新增时使用) + * + * @param orgName 卫生机构名称 + * @param roomName 诊室名称 + * @return 是否存在 + */ + boolean existsByOrgNameAndRoomName(String orgName, String roomName); + + /** + * 检查指定卫生机构下是否已存在相同诊室名称(编辑时使用,排除当前记录) + * + * @param orgName 卫生机构名称 + * @param roomName 诊室名称 + * @param id 当前记录ID + * @return 是否存在 + */ + boolean existsByOrgNameAndRoomNameExcludeId(String orgName, String roomName, Long id); } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/appointmentmanage/service/impl/ClinicRoomServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/appointmentmanage/service/impl/ClinicRoomServiceImpl.java index cc66e875..802e9dd4 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/appointmentmanage/service/impl/ClinicRoomServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/appointmentmanage/service/impl/ClinicRoomServiceImpl.java @@ -44,4 +44,21 @@ public class ClinicRoomServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ClinicRoom::getOrgName, orgName) + .eq(ClinicRoom::getRoomName, roomName); + return count(queryWrapper) > 0; + } + + @Override + public boolean existsByOrgNameAndRoomNameExcludeId(String orgName, String roomName, Long id) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ClinicRoom::getOrgName, orgName) + .eq(ClinicRoom::getRoomName, roomName) + .ne(ClinicRoom::getId, id); + return count(queryWrapper) > 0; + } } diff --git a/openhis-ui-vue3/src/views/appoinmentmanage/clinicRoom/index.vue b/openhis-ui-vue3/src/views/appoinmentmanage/clinicRoom/index.vue index b98d02ac..d69d538e 100644 --- a/openhis-ui-vue3/src/views/appoinmentmanage/clinicRoom/index.vue +++ b/openhis-ui-vue3/src/views/appoinmentmanage/clinicRoom/index.vue @@ -276,104 +276,14 @@ const form = reactive({ const rules = { roomName: [ { required: true, message: '诊室名称不能为空', trigger: 'blur' }, - { max: 20, message: '诊室名称长度不能超过20个字符', trigger: 'blur' }, - { - validator: (rule, value, callback) => { - // console.log('Validating roomName:', { value, formId: form.id }); - if (!value) { - return callback() - } - // 检查诊室名称是否已存在(全局唯一性) - const isExist = clinicRoomList.value.some(item => { - const checkRoomName = String(item.roomName) === String(value); // Ensure type consistency - const checkId = item.id !== form.id; - - // console.log('Comparing item for roomName:', { - // itemId: item.id, - // itemRoomName: item.roomName, - // checkRoomName, - // checkId, - // allConditions: checkRoomName && checkId - // }); - - return checkRoomName && checkId - }) - if (isExist) { - callback(new Error('诊室名称已存在')) - } else { - callback() - } - }, - trigger: 'blur' - } ], department: [ - { required: true, message: '', trigger: 'change' }, - { - validator: (rule, value, callback) => { - // console.log('Validating department:', { value, formOrgName: form.orgName, formId: form.id }); - if (!value) { - return callback() - } - if (!form.orgName) { - // console.log('Department validation: form.orgName is missing, skipping uniqueness check.'); - return callback() - } - // 检查当前卫生机构下科室名称是否已存在 - const isExist = clinicRoomList.value.some(item => { - const checkDepartment = String(item.department) === String(value); - const checkOrgName = String(item.orgName) === String(form.orgName); // Ensure type consistency - const checkId = item.id !== form.id; // Check against other items - - // console.log('Comparing item:', { - // itemId: item.id, - // itemDepartment: item.department, - // itemOrgName: item.orgName, - // checkDepartment, - // checkOrgName, - // checkId, - // allConditions: checkDepartment && checkOrgName && checkId - // }); - - return checkDepartment && checkOrgName && checkId - }) - if (isExist) { - // 不在此处直接报错,而是依赖orgName的校验来显示错误 - callback() - } else { - callback() - } - // 触发对orgName字段的重新验证,以实现联动校验 - proxy.formRef.validateField('orgName') - }, - trigger: 'change' - } - ], - orgName: [ - { required: true, message: '卫生机构不能为空', trigger: 'change' }, - { - validator: (rule, value, callback) => { - // 如果卫生机构为空或科室名称为空,则不进行组合唯一性校验 - if (!value || !form.department) { - return callback() - } - // 检查当前卫生机构下科室名称是否已存在 - const isExist = clinicRoomList.value.some(item => { - const checkDepartment = String(item.department) === String(form.department); - const checkOrgName = String(item.orgName) === String(value); // 这里使用当前的value (orgName) - const checkId = item.id !== form.id; - - return checkDepartment && checkOrgName && checkId - }) - if (isExist) { - callback(new Error('当前卫生机构下已存在该科室名称的诊室')) - } else { - callback() - } - // 触发对department字段的重新验证,以实现联动校验 - proxy.formRef.validateField('department') - }, - trigger: 'change' - } - ] + { max: 20, message: '诊室名称长度不能超过20个字符', trigger: 'blur' } + ], + department: [ + { required: true, message: '科室名称不能为空', trigger: 'change' } + ], + orgName: [ + { required: true, message: '卫生机构不能为空', trigger: 'change' } + ] } // 获取诊室列表 @@ -530,32 +440,10 @@ function handleEdit(row) { dialogTitle.value = '编辑诊室' dialogVisible.value = true - // 为编辑模式修改诊室名称验证规则:检查同一租户下是否重复 + // 为编辑模式设置基础验证规则 rules.roomName = [ { required: true, message: '诊室名称不能为空', trigger: 'blur' }, - { max: 20, message: '诊室名称长度不能超过20个字符', trigger: 'blur' }, - { - validator: (rule, value, callback) => { - if (!value) { - return callback() - } - if (!form.orgName) { - return callback() - } - // 编辑时检查当前租户下是否已存在相同的诊室名称(排除当前记录) - const isExist = clinicRoomList.value.some(item => { - return item.roomName === value && - item.orgName === form.orgName && - item.id !== form.id - }) - if (isExist) { - callback(new Error('诊室名称已存在')) - } else { - callback() - } - }, - trigger: 'blur' - } + { max: 20, message: '诊室名称长度不能超过20个字符', trigger: 'blur' } ] } else { ElMessage.error(response.msg || '获取诊室详情失败') @@ -633,7 +521,12 @@ function submitForm() { dialogVisible.value = false getList() } else { - ElMessage.error(response.msg || '修改失败') + // 特别处理唯一性验证错误 + if (response.msg && response.msg.includes('当前卫生机构下已存在该诊室名称')) { + ElMessage.error('当前卫生机构下已存在该诊室名称,请更换诊室名称') + } else { + ElMessage.error(response.msg || '修改失败') + } } }) .catch(error => { @@ -648,7 +541,12 @@ function submitForm() { dialogVisible.value = false getList() } else { - ElMessage.error(response.msg || '新增失败') + // 特别处理唯一性验证错误 + if (response.msg && response.msg.includes('当前卫生机构下已存在该诊室名称')) { + ElMessage.error('当前卫生机构下已存在该诊室名称,请更换诊室名称') + } else { + ElMessage.error(response.msg || '新增失败') + } } }) .catch(error => {