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 82e15525..b3af4f3e 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 @@ -1,8 +1,11 @@ package org.jeecg.modules.controller; -import java.util.Arrays; +import java.util.*; +import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; @@ -13,7 +16,9 @@ import lombok.extern.slf4j.Slf4j; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.modules.entity.CetGroup; +import org.jeecg.modules.entity.CetInvigilateData; import org.jeecg.modules.service.ICetGroupService; +import org.jeecg.modules.service.ICetInvigilateDataService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; @@ -35,6 +40,8 @@ import org.apache.shiro.authz.annotation.RequiresPermissions; public class CetGroupController extends JeecgController { @Autowired private ICetGroupService cetGroupService; + @Autowired + private ICetInvigilateDataService cetInvigilateDataService; /** * 分页列表查询 @@ -49,16 +56,45 @@ public class CetGroupController extends JeecgController> queryPageList(CetGroup cetGroup, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(cetGroup, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = cetGroupService.page(page, queryWrapper); + + // 取分页内所有分组id,类型保持一致(假设是Long) + Set groupIds = pageList.getRecords().stream() + .map(CetGroup::getId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + + if(!groupIds.isEmpty()){ + // 批量查询所有这些分组下的用户 + List userList = cetInvigilateDataService.list( + new QueryWrapper().in("group_id", groupIds) + ); + + // 按groupId分组用户名称列表,groupId类型保持一致 + Map> groupIdToUserNames = userList.stream() + .collect(Collectors.groupingBy(CetInvigilateData::getGroupId, + Collectors.mapping(CetInvigilateData::getName, Collectors.toList()))); + + // 设置每个分组的userNames字段 + pageList.getRecords().forEach(group -> { + String groupIdStr = String.valueOf(group.getId()); + List names = groupIdToUserNames.get(groupIdStr); + // 拼接为字符串,例如用逗号分隔 + String userNamesStr = (names != null && !names.isEmpty()) ? String.join(", ", names) : ""; + group.setRowUser(userNamesStr); + }); + + } return Result.OK(pageList); } - - /** + + + /** * 添加 * * @param cetGroup @@ -98,12 +134,20 @@ public class CetGroupController extends JeecgController delete(@RequestParam(name="id",required=true) String id) { + public Result delete(@RequestParam(name="id", required=true) String id) { + // 删除分组表中的分组 cetGroupService.removeById(id); + + // 将数据总表对应groupId置空 + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("group_id", id).set("group_id", null); + cetInvigilateDataService.update(updateWrapper); + return Result.OK("删除成功!"); } - - /** + + + /** * 批量删除 * * @param ids @@ -113,12 +157,21 @@ public class CetGroupController extends JeecgController deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.cetGroupService.removeByIds(Arrays.asList(ids.split(","))); + public Result deleteBatch(@RequestParam(name="ids", required=true) String ids) { + List idList = Arrays.asList(ids.split(",")); + // 删除分组表中的分组 + cetGroupService.removeByIds(idList); + + // 将数据总表对应groupId置空 + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.in("group_id", idList).set("group_id", null); + cetInvigilateDataService.update(updateWrapper); + return Result.OK("批量删除成功!"); } - - /** + + + /** * 通过id查询 * * @param id diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/CetInvigilateDataController.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/CetInvigilateDataController.java index d213a2b0..6f141bd1 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/CetInvigilateDataController.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/controller/CetInvigilateDataController.java @@ -1,8 +1,7 @@ package org.jeecg.modules.controller; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -11,17 +10,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; -import org.jeecg.modules.entity.CetGraduates; -import org.jeecg.modules.entity.CetTeachers; -import org.jeecg.modules.entity.CetNoTeachers; +import org.jeecg.modules.entity.*; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.system.base.controller.JeecgController; -import org.jeecg.modules.entity.CetInvigilateData; -import org.jeecg.modules.service.ICetGraduatesService; -import org.jeecg.modules.service.ICetInvigilateDataService; -import org.jeecg.modules.service.ICetNoTeachersService; -import org.jeecg.modules.service.ICetTeachersService; +import org.jeecg.modules.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; @@ -49,7 +42,25 @@ public class CetInvigilateDataController extends JeecgController batchHandleGroup(@RequestBody Map webData) { + + return cetInvigilateDataService.batchHandleGroup(webData); + } + /** * 分页列表查询 * @@ -69,6 +80,28 @@ public class CetInvigilateDataController extends JeecgController queryWrapper = QueryGenerator.initQueryWrapper(cetInvigilateData, req.getParameterMap()); Page page = new Page(pageNo, pageSize); IPage pageList = cetInvigilateDataService.page(page, queryWrapper); + // 取所有分组ID(假设 groupId 是 String 类型,如果是 Long 请对应修改) + Set groupIds = pageList.getRecords().stream() + .map(CetInvigilateData::getGroupId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + + if (!groupIds.isEmpty()) { + // 批量查询分组信息 + List groupList = cetGroupService.list( + new QueryWrapper().in("id", groupIds) + ); + + // 转成 Map + Map groupIdToName = groupList.stream() + .collect(Collectors.toMap(CetGroup::getId, CetGroup::getGroupName)); + + // 给每条数据设置 groupName 字段(需保证 CetInvigilateData 有对应字段及setter) + pageList.getRecords().forEach(item -> { + String name = groupIdToName.get(item.getGroupId()); + item.setGroupName(name != null ? name : ""); + }); + } return Result.OK(pageList); } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetGraduates.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetGraduates.java index f06be214..d5b08b02 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetGraduates.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetGraduates.java @@ -84,4 +84,8 @@ public class CetGraduates implements Serializable { /**类型*/ @TableField(exist = false) private String type; + /**类型*/ + @Excel(name = "分组", width = 15) + @ApiModelProperty(value = "分组") + private String groupId; } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetGroup.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetGroup.java index 2a5673a8..151cdad3 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetGroup.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetGroup.java @@ -3,6 +3,7 @@ package org.jeecg.modules.entity; import java.io.Serializable; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -31,18 +32,22 @@ public class CetGroup implements Serializable { /**主键*/ @TableId(type = IdType.ASSIGN_ID) @ApiModelProperty(value = "主键") - private java.lang.String id; - /**分组名称*/ - @Excel(name = "分组名称", width = 15) + private String id; + @Excel(name = "分组名称", width = 15) @ApiModelProperty(value = "分组名称") - private java.lang.String groupName; + private String groupName; + /**分组名称*/ + @Excel(name = "分组名称", width = 15) + @ApiModelProperty(value = "分组名称") + @TableField(exist = false) + private String rowUser; /**教室ID*/ @Excel(name = "教室ID", width = 15) @ApiModelProperty(value = "教室ID") - private java.lang.String roomId; + private String roomId; /**创建人*/ @ApiModelProperty(value = "创建人") - private java.lang.String createBy; + private String createBy; /**创建日期*/ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @@ -50,7 +55,7 @@ public class CetGroup implements Serializable { private java.util.Date createTime; /**更新人*/ @ApiModelProperty(value = "更新人") - private java.lang.String updateBy; + private String updateBy; /**更新日期*/ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @@ -58,5 +63,5 @@ public class CetGroup implements Serializable { private java.util.Date updateTime; /**所属部门*/ @ApiModelProperty(value = "所属部门") - private java.lang.String sysOrgCode; + private String sysOrgCode; } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetInvigilateData.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetInvigilateData.java index ae09ee1f..21d2eaa5 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetInvigilateData.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetInvigilateData.java @@ -4,6 +4,7 @@ import java.io.Serializable; import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -84,4 +85,13 @@ public class CetInvigilateData implements Serializable { @Excel(name = "类型", width = 15) @ApiModelProperty(value = "类型") private String type; + /**类型*/ +// @Excel(name = "分组", width = 15) + @ApiModelProperty(value = "分组") + private String groupId; + /**类型*/ + @Excel(name = "分组", width = 15) + @ApiModelProperty(value = "分组") + @TableField(exist = false) + private String groupName; } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetNoTeachers.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetNoTeachers.java index 2cd85171..e9b10e94 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetNoTeachers.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetNoTeachers.java @@ -76,4 +76,8 @@ public class CetNoTeachers implements Serializable { /**类型*/ @TableField(exist = false) private String type; + /**类型*/ + @Excel(name = "分组", width = 15) + @ApiModelProperty(value = "分组") + private String groupId; } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetTeachers.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetTeachers.java index aad0637e..f6b39a94 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetTeachers.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/entity/CetTeachers.java @@ -84,5 +84,9 @@ public class CetTeachers implements Serializable { /**类型*/ @TableField(exist = false) private String type; + /**类型*/ + @Excel(name = "分组", width = 15) + @ApiModelProperty(value = "分组") + private String groupId; } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICetInvigilateDataService.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICetInvigilateDataService.java index 9d1d8001..77724054 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICetInvigilateDataService.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/ICetInvigilateDataService.java @@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.entity.CetInvigilateData; +import java.util.Map; + /** * @Description: 数据总表 * @Author: jeecg-boot @@ -15,4 +17,5 @@ public interface ICetInvigilateDataService extends IService { Result add(CetInvigilateData cetInvigilateData); + Result batchHandleGroup(Map webData); } diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CetInvigilateDataServiceImpl.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CetInvigilateDataServiceImpl.java index 3c51fdcc..c8838993 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CetInvigilateDataServiceImpl.java +++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/modules/service/impl/CetInvigilateDataServiceImpl.java @@ -5,24 +5,20 @@ import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.extension.toolkit.Db; import lombok.RequiredArgsConstructor; import org.jeecg.common.api.vo.Result; -import org.jeecg.modules.entity.CetGraduates; -import org.jeecg.modules.entity.CetInvigilateData; -import org.jeecg.modules.entity.CetNoTeachers; -import org.jeecg.modules.entity.CetTeachers; +import org.jeecg.modules.entity.*; import org.jeecg.modules.mapper.CetGraduatesMapper; import org.jeecg.modules.mapper.CetInvigilateDataMapper; import org.jeecg.modules.mapper.CetNoTeachersMapper; import org.jeecg.modules.mapper.CetTeachersMapper; -import org.jeecg.modules.service.ICetGraduatesService; -import org.jeecg.modules.service.ICetInvigilateDataService; -import org.jeecg.modules.service.ICetNoTeachersService; -import org.jeecg.modules.service.ICetTeachersService; +import org.jeecg.modules.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.transaction.annotation.Transactional; +import java.util.*; + /** * @Description: 数据总表 * @Author: jeecg-boot @@ -40,6 +36,12 @@ public class CetInvigilateDataServiceImpl extends ServiceImpl batchHandleGroup(Map webData) { + List ids = (List) webData.get("ids"); + if (ids == null || ids.isEmpty()) { + return Result.error("ID列表为空"); + } + + List users = cetInvigilateDataMapper.selectBatchIds(ids); + + List maleTeachers = new ArrayList<>(); + List femaleTeachers = new ArrayList<>(); + List maleOthers = new ArrayList<>(); + List femaleOthers = new ArrayList<>(); + List maleGraduates = new ArrayList<>(); + List femaleGraduates = new ArrayList<>(); + + for (CetInvigilateData user : users) { + String type = user.getType(); + String sex = user.getSex(); + boolean isMale = "男".equals(sex); + + switch (type) { + case "教师": + if (isMale) maleTeachers.add(user); + else femaleTeachers.add(user); + break; + case "研究生": + if (isMale) maleGraduates.add(user); + else femaleGraduates.add(user); + break; + default: + if (isMale) maleOthers.add(user); + else femaleOthers.add(user); + break; + } + } + + List> groups = new ArrayList<>(); + + // 分组逻辑 + while (!maleTeachers.isEmpty() && !femaleOthers.isEmpty()) { + groups.add(Arrays.asList(maleTeachers.remove(0), femaleOthers.remove(0))); + } + while (!femaleTeachers.isEmpty() && !maleOthers.isEmpty()) { + groups.add(Arrays.asList(femaleTeachers.remove(0), maleOthers.remove(0))); + } + while (!maleTeachers.isEmpty() && !femaleTeachers.isEmpty()) { + groups.add(Arrays.asList(maleTeachers.remove(0), femaleTeachers.remove(0))); + } + while (!maleTeachers.isEmpty() && !femaleGraduates.isEmpty()) { + groups.add(Arrays.asList(maleTeachers.remove(0), femaleGraduates.remove(0))); + } + while (!femaleTeachers.isEmpty() && !maleGraduates.isEmpty()) { + groups.add(Arrays.asList(femaleTeachers.remove(0), maleGraduates.remove(0))); + } + + int index = 1; + for (List group : groups) { + // 创建组 + String groupName = "第" + index + "组"; + CetGroup cetGroup = new CetGroup() + .setGroupName(groupName) + .setRoomId("") // 可选 + .setCreateBy("system") // 建议改为当前用户 + .setCreateTime(new Date()) + .setSysOrgCode("default"); + + cetGroupService.save(cetGroup); // 保存组,自动生成 ID + String groupId = cetGroup.getId(); + + // 设置组ID并更新每位成员 + for (CetInvigilateData member : group) { + member.setGroupId(groupId); // 确保 entity 中有 groupId 字段 + cetInvigilateDataMapper.updateById(member); + } + + index++; + } + + int successCount = groups.size(); + int total = ids.size() / 2; + return Result.ok("共成功组队:" + successCount + " 组,失败:" + (total - successCount) + " 组"); + } + + + }