75修改还是提示“当前卫生机构下已存在该科室名称的诊室”。

This commit is contained in:
HuangXinQuan
2026-02-10 15:08:38 +08:00
parent b1c966f69f
commit f1bddf3fbe
4 changed files with 74 additions and 130 deletions

View File

@@ -26,11 +26,11 @@ public class ClinicRoomAppServiceImpl implements IClinicRoomAppService {
if (roomName != null && ObjectUtil.isNotEmpty(roomName)) {
clinicRoom.setRoomName(roomName);
}
// 分页查询
Page<ClinicRoom> page = new Page<>(pageNum, pageSize);
Page<ClinicRoom> 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) {

View File

@@ -51,4 +51,23 @@ public interface IClinicRoomService extends IService<ClinicRoom> {
* @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);
}

View File

@@ -44,4 +44,21 @@ public class ClinicRoomServiceImpl extends ServiceImpl<ClinicRoomMapper, ClinicR
public int deleteClinicRoomById(Long id) {
return baseMapper.deleteById(id);
}
@Override
public boolean existsByOrgNameAndRoomName(String orgName, String roomName) {
LambdaQueryWrapper<ClinicRoom> 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<ClinicRoom> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ClinicRoom::getOrgName, orgName)
.eq(ClinicRoom::getRoomName, roomName)
.ne(ClinicRoom::getId, id);
return count(queryWrapper) > 0;
}
}

View File

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