diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/ClassRoomServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/ClassRoomServiceImpl.java index 386525833..3bafb1920 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/ClassRoomServiceImpl.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/ClassRoomServiceImpl.java @@ -6,6 +6,7 @@ import com.roomroot.common.utils.StringUtils; import com.roomroot.jwgl.entity.JSB; import com.roomroot.jwgl.mapper.ClassRoomMapper; import com.roomroot.jwgl.service.ClassRoomService; +import com.roomroot.jwgl.unit.BusinessException; import com.roomroot.jwgl.unit.PageQuery; import com.roomroot.jwgl.unit.PageResult; import com.roomroot.jwgl.utils.UuidUtil; @@ -27,11 +28,17 @@ public class ClassRoomServiceImpl implements ClassRoomService { public void add(JSB jsb) { jsb.setId(UuidUtil.getUUID()); jsb.setDelFlag(0); - // 教室编号为非空列:留空时按现有最大数字编号 +1 自动生成 + // 教室编号为非空列:留空时按现有最大数字编号 +1 自动生成;手填时校验唯一,避免按编号查询出现多行 if (StringUtils.isEmpty(jsb.getJsbh())) { jsb.setJsbh(nextJsbh()); } else { jsb.setJsbh(jsb.getJsbh().trim()); + Long dup = jsbMapper.selectCount(new LambdaQueryWrapper() + .eq(JSB::getJsbh, jsb.getJsbh()) + .eq(JSB::getDelFlag, 0)); + if (dup != null && dup > 0) { + throw new BusinessException("教室编号已存在:" + jsb.getJsbh()); + } } jsbMapper.insert(jsb); } diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/ElectiveServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/ElectiveServiceImpl.java index b4eaf3243..39e825e10 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/ElectiveServiceImpl.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/ElectiveServiceImpl.java @@ -407,7 +407,12 @@ public class ElectiveServiceImpl implements ElectiveService { } JSB room = classRoomMapper.selectById(zyjsbh); if (room == null) { - room = classRoomMapper.selectOne(new LambdaQueryWrapper().eq(JSB::getJsbh, zyjsbh)); + // 教室编号历史上可能出现重复行,取第一条避免 selectOne 多结果异常 + List rooms = classRoomMapper.selectList(new LambdaQueryWrapper() + .eq(JSB::getJsbh, zyjsbh) + .eq(JSB::getDelFlag, 0) + .last("LIMIT 1")); + room = rooms.isEmpty() ? null : rooms.get(0); } return room == null ? null : room.getJsmc(); }