diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/CetGroupController.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/CetGroupController.java index b3af4f3e..f5120bbd 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/CetGroupController.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/CetGroupController.java @@ -42,7 +42,17 @@ public class CetGroupController extends JeecgController batchHandleClassRooms(@RequestBody Map webData) { + return cetGroupService.batchHandleClassRooms(webData); + } + /** * 分页列表查询 * @@ -177,7 +187,6 @@ public class CetGroupController extends JeecgController queryById(@RequestParam(name="id",required=true) String id) { diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/ClassRoomController.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/ClassRoomController.java index 5e75511d..de9da974 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/ClassRoomController.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/ClassRoomController.java @@ -1,6 +1,7 @@ package org.jeecg.modules.controller; import java.util.Arrays; +import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jeecg.common.api.vo.Result; @@ -35,6 +36,10 @@ import org.apache.shiro.authz.annotation.RequiresPermissions; public class ClassRoomController extends JeecgController { @Autowired private IClassRoomService classRoomService; + + + + /** * 分页列表查询 diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/ClassRoom.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/ClassRoom.java index a343905e..df8133d0 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/ClassRoom.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/ClassRoom.java @@ -32,6 +32,9 @@ public class ClassRoom implements Serializable { @TableId(type = IdType.ASSIGN_ID) @ApiModelProperty(value = "主键") private String id; +// @Excel(name = "教学楼名", width = 15) + @ApiModelProperty(value = "分组ID") + private String groupId; /**教学楼名,如“理工一”、“崇师楼”*/ @Excel(name = "教学楼名", width = 15) @ApiModelProperty(value = "教学楼名,如“理工一”、“崇师楼”") @@ -79,4 +82,7 @@ public class ClassRoom implements Serializable { /**所属部门*/ @ApiModelProperty(value = "所属部门") private String sysOrgCode; + /**状态*/ + @ApiModelProperty(value = "状态") + private String status; } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICetGroupService.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICetGroupService.java index 7c03bc0e..4de457fc 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICetGroupService.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICetGroupService.java @@ -2,8 +2,11 @@ package org.jeecg.modules.service; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.common.api.vo.Result; import org.jeecg.modules.entity.CetGroup; +import java.util.Map; + /** * @Description: 分组数据表 * @Author: jeecg-boot @@ -12,4 +15,5 @@ import org.jeecg.modules.entity.CetGroup; */ public interface ICetGroupService extends IService { + Result batchHandleClassRooms(Map webData); } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/IClassRoomService.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/IClassRoomService.java index 9692a621..57f0f3f6 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/IClassRoomService.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/IClassRoomService.java @@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.entity.ClassRoom; +import java.util.Map; + /** * @Description: 教室表 * @Author: jeecg-boot @@ -14,4 +16,5 @@ import org.jeecg.modules.entity.ClassRoom; public interface IClassRoomService extends IService { Result add(ClassRoom classRoom); + } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CetGroupServiceImpl.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CetGroupServiceImpl.java index bcb97f22..7a2dd81e 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CetGroupServiceImpl.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CetGroupServiceImpl.java @@ -1,13 +1,24 @@ package org.jeecg.modules.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import org.jeecg.common.api.vo.Result; import org.jeecg.modules.entity.CetGroup; +import org.jeecg.modules.entity.ClassRoom; import org.jeecg.modules.mapper.CetGroupMapper; +import org.jeecg.modules.mapper.ClassRoomMapper; import org.jeecg.modules.service.ICetGroupService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import javax.transaction.Transactional; +import java.util.List; +import java.util.Map; + /** * @Description: 分组数据表 * @Author: jeecg-boot @@ -16,5 +27,62 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; */ @Service public class CetGroupServiceImpl extends ServiceImpl implements ICetGroupService { + @Autowired + private CetGroupMapper cetGroupMapper; + @Autowired + private ClassRoomMapper classRoomMapper; + + @Override + @Transactional + public Result batchHandleClassRooms(Map webData) { + Object idsObj = webData.get("ids"); + if (!(idsObj instanceof List)) { + return Result.error("参数错误:未找到班级 ID 列表"); + } + @SuppressWarnings("unchecked") + List groupIds = (List) idsObj; + + if (CollectionUtils.isEmpty(groupIds)) { + return Result.error("请选择需要分配教室的班级"); + } + + // 查询空闲教室(status = 0) + List freeRooms = classRoomMapper.selectList( + new LambdaQueryWrapper().eq(ClassRoom::getStatus, 0) + ); + + if (freeRooms.size() < groupIds.size()) { + return Result.error("空闲教室数量不足,请减少分配数量或释放教室"); + } + + for (int i = 0; i < groupIds.size(); i++) { + String groupId = groupIds.get(i); + ClassRoom room = freeRooms.get(i); + + // 使用 LambdaUpdateWrapper 更新教室状态和绑定班级 + boolean updated = classRoomMapper.update( + null, + new LambdaUpdateWrapper() + .eq(ClassRoom::getId, room.getId()) + .eq(ClassRoom::getStatus, 0) // 乐观锁保证未被其他线程占用 + .set(ClassRoom::getGroupId, groupId) + .set(ClassRoom::getStatus, 1) + ) > 0; + + if (!updated) { + throw new RuntimeException("教室 " + room.getFullName() + " 被占用,请稍后重试"); + } + + // 更新班级的教室字段(假设 classMapper 是使用 MyBatis Plus 的) + cetGroupMapper.update( + null, + new LambdaUpdateWrapper() + .eq(CetGroup::getId, groupId) + .set(CetGroup::getRoomId, room.getId()) + ); + } + + return Result.ok("成功为 " + groupIds.size() + " 个班级分配教室"); + } } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/ClassRoomServiceImpl.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/ClassRoomServiceImpl.java index 12c1a31b..ba908b7b 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/ClassRoomServiceImpl.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/ClassRoomServiceImpl.java @@ -1,17 +1,28 @@ package org.jeecg.modules.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import org.apache.shiro.SecurityUtils; +import org.checkerframework.checker.units.qual.A; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.vo.LoginUser; +import org.jeecg.modules.entity.CetGroup; import org.jeecg.modules.entity.ClassRoom; +import org.jeecg.modules.mapper.CetGroupMapper; import org.jeecg.modules.mapper.ClassRoomMapper; import org.jeecg.modules.service.IClassRoomService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import javax.transaction.Transactional; import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Optional; /** * @Description: 教室表 @@ -21,15 +32,42 @@ import java.util.Date; */ @Service public class ClassRoomServiceImpl extends ServiceImpl implements IClassRoomService { + @Autowired + private ClassRoomMapper classRoomMapper; + @Autowired + private CetGroupMapper cetGroupMapper; @Override public Result add(ClassRoom classRoom) { + if (classRoom == null) { + return Result.error("参数不能为空"); + } LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - //完善 - classRoom.setCreateTime(new Date()); - classRoom.setUpdateTime(new Date()); - classRoom.setUpdateBy(sysUser.getUsername()); - classRoom.setCreateBy(sysUser.getUsername()); - return null; + String username = sysUser.getUsername(); + Date now = new Date(); + + classRoom.setCreateTime(now); + classRoom.setUpdateTime(now); + classRoom.setCreateBy(username); + classRoom.setUpdateBy(username); + classRoom.setStatus("0"); + String building = Optional.ofNullable(classRoom.getBuilding()).orElse(""); + String area = Optional.ofNullable(classRoom.getArea()).orElse(""); + String roomNumber = Optional.ofNullable(classRoom.getRoomNumber()).orElse(""); + // 拼接逻辑:有 area 的话加上 area.toUpperCase() + "区" + String areaPart = area.isEmpty() ? "" : area.toUpperCase() + "区"; + // 最终 fullName + String fullName = building + areaPart + roomNumber; + classRoom.setArea(areaPart); + classRoom.setFullName(fullName); + + int rows = classRoomMapper.insert(classRoom); + if (rows > 0) { + return Result.ok("添加成功"); + } else { + return Result.error("添加失败"); + } } + + }