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 => {