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)) { if (roomName != null && ObjectUtil.isNotEmpty(roomName)) {
clinicRoom.setRoomName(roomName); clinicRoom.setRoomName(roomName);
} }
// 分页查询 // 分页查询
Page<ClinicRoom> page = new Page<>(pageNum, pageSize); Page<ClinicRoom> page = new Page<>(pageNum, pageSize);
Page<ClinicRoom> result = clinicRoomService.selectClinicRoomPage(page, clinicRoom); Page<ClinicRoom> result = clinicRoomService.selectClinicRoomPage(page, clinicRoom);
return R.ok(result); return R.ok(result);
} }
@@ -58,7 +58,12 @@ public class ClinicRoomAppServiceImpl implements IClinicRoomAppService {
if (clinicRoom.getRemarks() != null && clinicRoom.getRemarks().length() > 500) { if (clinicRoom.getRemarks() != null && clinicRoom.getRemarks().length() > 500) {
return R.fail(400, "备注长度不能超过500个字符"); return R.fail(400, "备注长度不能超过500个字符");
} }
// 检查诊室名称在同卫生机构下是否已存在
if (clinicRoomService.existsByOrgNameAndRoomName(clinicRoom.getOrgName(), clinicRoom.getRoomName())) {
return R.fail(400, "当前卫生机构下已存在该诊室名称");
}
// 新增诊室 // 新增诊室
int result = clinicRoomService.insertClinicRoom(clinicRoom); int result = clinicRoomService.insertClinicRoom(clinicRoom);
if (result > 0) { if (result > 0) {
@@ -86,13 +91,18 @@ public class ClinicRoomAppServiceImpl implements IClinicRoomAppService {
if (clinicRoom.getRemarks() != null && clinicRoom.getRemarks().length() > 500) { if (clinicRoom.getRemarks() != null && clinicRoom.getRemarks().length() > 500) {
return R.fail(400, "备注长度不能超过500个字符"); return R.fail(400, "备注长度不能超过500个字符");
} }
// 检查诊室是否存在 // 检查诊室是否存在
ClinicRoom existingClinicRoom = clinicRoomService.selectClinicRoomById(clinicRoom.getId()); ClinicRoom existingClinicRoom = clinicRoomService.selectClinicRoomById(clinicRoom.getId());
if (existingClinicRoom == null) { if (existingClinicRoom == null) {
return R.fail(404, "诊室不存在"); return R.fail(404, "诊室不存在");
} }
// 检查诊室名称在同卫生机构下是否已存在(排除当前记录)
if (clinicRoomService.existsByOrgNameAndRoomNameExcludeId(clinicRoom.getOrgName(), clinicRoom.getRoomName(), clinicRoom.getId())) {
return R.fail(400, "当前卫生机构下已存在该诊室名称");
}
// 更新诊室 // 更新诊室
int result = clinicRoomService.updateClinicRoom(clinicRoom); int result = clinicRoomService.updateClinicRoom(clinicRoom);
if (result > 0) { if (result > 0) {
@@ -109,7 +119,7 @@ public class ClinicRoomAppServiceImpl implements IClinicRoomAppService {
if (existingClinicRoom == null) { if (existingClinicRoom == null) {
return R.fail(404, "诊室不存在"); return R.fail(404, "诊室不存在");
} }
// 删除诊室 // 删除诊室
int result = clinicRoomService.deleteClinicRoomById(id); int result = clinicRoomService.deleteClinicRoomById(id);
if (result > 0) { if (result > 0) {

View File

@@ -51,4 +51,23 @@ public interface IClinicRoomService extends IService<ClinicRoom> {
* @return 结果 * @return 结果
*/ */
int deleteClinicRoomById(Long id); 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) { public int deleteClinicRoomById(Long id) {
return baseMapper.deleteById(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 = { const rules = {
roomName: [ roomName: [
{ required: true, message: '诊室名称不能为空', trigger: 'blur' }, { required: true, message: '诊室名称不能为空', trigger: 'blur' },
{ max: 20, message: '诊室名称长度不能超过20个字符', trigger: 'blur' }, { max: 20, message: '诊室名称长度不能超过20个字符', trigger: 'blur' }
{ ],
validator: (rule, value, callback) => { department: [
// console.log('Validating roomName:', { value, formId: form.id }); { required: true, message: '科室名称不能为空', trigger: 'change' }
if (!value) { ],
return callback() orgName: [
} { required: true, message: '卫生机构不能为空', trigger: 'change' }
// 检查诊室名称是否已存在(全局唯一性) ]
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'
}
]
} }
// 获取诊室列表 // 获取诊室列表
@@ -530,32 +440,10 @@ function handleEdit(row) {
dialogTitle.value = '编辑诊室' dialogTitle.value = '编辑诊室'
dialogVisible.value = true dialogVisible.value = true
// 为编辑模式修改诊室名称验证规则:检查同一租户下是否重复 // 为编辑模式设置基础验证规则
rules.roomName = [ rules.roomName = [
{ required: true, message: '诊室名称不能为空', trigger: 'blur' }, { required: true, message: '诊室名称不能为空', trigger: 'blur' },
{ max: 20, message: '诊室名称长度不能超过20个字符', 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'
}
] ]
} else { } else {
ElMessage.error(response.msg || '获取诊室详情失败') ElMessage.error(response.msg || '获取诊室详情失败')
@@ -633,7 +521,12 @@ function submitForm() {
dialogVisible.value = false dialogVisible.value = false
getList() getList()
} else { } else {
ElMessage.error(response.msg || '修改失败') // 特别处理唯一性验证错误
if (response.msg && response.msg.includes('当前卫生机构下已存在该诊室名称')) {
ElMessage.error('当前卫生机构下已存在该诊室名称,请更换诊室名称')
} else {
ElMessage.error(response.msg || '修改失败')
}
} }
}) })
.catch(error => { .catch(error => {
@@ -648,7 +541,12 @@ function submitForm() {
dialogVisible.value = false dialogVisible.value = false
getList() getList()
} else { } else {
ElMessage.error(response.msg || '新增失败') // 特别处理唯一性验证错误
if (response.msg && response.msg.includes('当前卫生机构下已存在该诊室名称')) {
ElMessage.error('当前卫生机构下已存在该诊室名称,请更换诊室名称')
} else {
ElMessage.error(response.msg || '新增失败')
}
} }
}) })
.catch(error => { .catch(error => {