初始化数据分组规则、分组删除关联数据
This commit is contained in:
parent
47216f68fa
commit
4985133ea4
|
@ -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<CetGroup, ICetGroupService> {
|
||||
@Autowired
|
||||
private ICetGroupService cetGroupService;
|
||||
@Autowired
|
||||
private ICetInvigilateDataService cetInvigilateDataService;
|
||||
|
||||
/**
|
||||
* 分页列表查询
|
||||
|
@ -49,16 +56,45 @@ public class CetGroupController extends JeecgController<CetGroup, ICetGroupServi
|
|||
@ApiOperation(value="分组数据表-分页列表查询", notes="分组数据表-分页列表查询")
|
||||
@GetMapping(value = "/list")
|
||||
public Result<IPage<CetGroup>> 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<CetGroup> queryWrapper = QueryGenerator.initQueryWrapper(cetGroup, req.getParameterMap());
|
||||
Page<CetGroup> page = new Page<CetGroup>(pageNo, pageSize);
|
||||
Page<CetGroup> page = new Page<>(pageNo, pageSize);
|
||||
IPage<CetGroup> pageList = cetGroupService.page(page, queryWrapper);
|
||||
|
||||
// 取分页内所有分组id,类型保持一致(假设是Long)
|
||||
Set<String> groupIds = pageList.getRecords().stream()
|
||||
.map(CetGroup::getId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
if(!groupIds.isEmpty()){
|
||||
// 批量查询所有这些分组下的用户
|
||||
List<CetInvigilateData> userList = cetInvigilateDataService.list(
|
||||
new QueryWrapper<CetInvigilateData>().in("group_id", groupIds)
|
||||
);
|
||||
|
||||
// 按groupId分组用户名称列表,groupId类型保持一致
|
||||
Map<String, List<String>> 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<String> 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<CetGroup, ICetGroupServi
|
|||
@ApiOperation(value="分组数据表-通过id删除", notes="分组数据表-通过id删除")
|
||||
@RequiresPermissions("cet:cet_group:delete")
|
||||
@DeleteMapping(value = "/delete")
|
||||
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
|
||||
public Result<String> delete(@RequestParam(name="id", required=true) String id) {
|
||||
// 删除分组表中的分组
|
||||
cetGroupService.removeById(id);
|
||||
|
||||
// 将数据总表对应groupId置空
|
||||
UpdateWrapper<CetInvigilateData> 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<CetGroup, ICetGroupServi
|
|||
@ApiOperation(value="分组数据表-批量删除", notes="分组数据表-批量删除")
|
||||
@RequiresPermissions("cet:cet_group:deleteBatch")
|
||||
@DeleteMapping(value = "/deleteBatch")
|
||||
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
|
||||
this.cetGroupService.removeByIds(Arrays.asList(ids.split(",")));
|
||||
public Result<String> deleteBatch(@RequestParam(name="ids", required=true) String ids) {
|
||||
List<String> idList = Arrays.asList(ids.split(","));
|
||||
// 删除分组表中的分组
|
||||
cetGroupService.removeByIds(idList);
|
||||
|
||||
// 将数据总表对应groupId置空
|
||||
UpdateWrapper<CetInvigilateData> updateWrapper = new UpdateWrapper<>();
|
||||
updateWrapper.in("group_id", idList).set("group_id", null);
|
||||
cetInvigilateDataService.update(updateWrapper);
|
||||
|
||||
return Result.OK("批量删除成功!");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
/**
|
||||
* 通过id查询
|
||||
*
|
||||
* @param id
|
||||
|
|
|
@ -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,6 +42,24 @@ public class CetInvigilateDataController extends JeecgController<CetInvigilateDa
|
|||
private ICetGraduatesService cetGraduatesService;
|
||||
@Autowired
|
||||
private ICetNoTeachersService cetNoTeachersService;
|
||||
@Autowired
|
||||
private ICetGroupService cetGroupService;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 批量分组
|
||||
*
|
||||
* @param
|
||||
* @return
|
||||
*/
|
||||
@AutoLog(value = "分组")
|
||||
@ApiOperation(value="分组", notes="分组")
|
||||
@PostMapping(value = "/batchHandleGroup")
|
||||
public Result<String> batchHandleGroup(@RequestBody Map<String, Object> webData) {
|
||||
|
||||
return cetInvigilateDataService.batchHandleGroup(webData);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页列表查询
|
||||
|
@ -69,6 +80,28 @@ public class CetInvigilateDataController extends JeecgController<CetInvigilateDa
|
|||
QueryWrapper<CetInvigilateData> queryWrapper = QueryGenerator.initQueryWrapper(cetInvigilateData, req.getParameterMap());
|
||||
Page<CetInvigilateData> page = new Page<CetInvigilateData>(pageNo, pageSize);
|
||||
IPage<CetInvigilateData> pageList = cetInvigilateDataService.page(page, queryWrapper);
|
||||
// 取所有分组ID(假设 groupId 是 String 类型,如果是 Long 请对应修改)
|
||||
Set<String> groupIds = pageList.getRecords().stream()
|
||||
.map(CetInvigilateData::getGroupId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
if (!groupIds.isEmpty()) {
|
||||
// 批量查询分组信息
|
||||
List<CetGroup> groupList = cetGroupService.list(
|
||||
new QueryWrapper<CetGroup>().in("id", groupIds)
|
||||
);
|
||||
|
||||
// 转成 Map<groupId, groupName>
|
||||
Map<String, String> 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);
|
||||
}
|
||||
|
||||
|
|
|
@ -84,4 +84,8 @@ public class CetGraduates implements Serializable {
|
|||
/**类型*/
|
||||
@TableField(exist = false)
|
||||
private String type;
|
||||
/**类型*/
|
||||
@Excel(name = "分组", width = 15)
|
||||
@ApiModelProperty(value = "分组")
|
||||
private String groupId;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -76,4 +76,8 @@ public class CetNoTeachers implements Serializable {
|
|||
/**类型*/
|
||||
@TableField(exist = false)
|
||||
private String type;
|
||||
/**类型*/
|
||||
@Excel(name = "分组", width = 15)
|
||||
@ApiModelProperty(value = "分组")
|
||||
private String groupId;
|
||||
}
|
||||
|
|
|
@ -84,5 +84,9 @@ public class CetTeachers implements Serializable {
|
|||
/**类型*/
|
||||
@TableField(exist = false)
|
||||
private String type;
|
||||
/**类型*/
|
||||
@Excel(name = "分组", width = 15)
|
||||
@ApiModelProperty(value = "分组")
|
||||
private String groupId;
|
||||
|
||||
}
|
||||
|
|
|
@ -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<CetInvigilateData> {
|
|||
|
||||
Result<String> add(CetInvigilateData cetInvigilateData);
|
||||
|
||||
Result<String> batchHandleGroup(Map<String, Object> webData);
|
||||
}
|
||||
|
|
|
@ -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<CetInvigilateDataM
|
|||
private CetGraduatesMapper cetGraduatesMapper;
|
||||
@Autowired
|
||||
private CetNoTeachersMapper cetNoTeachersMapper;
|
||||
@Autowired
|
||||
private CetInvigilateDataMapper cetInvigilateDataMapper;
|
||||
@Autowired
|
||||
private ICetGroupService cetGroupService;
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
|
@ -93,4 +95,90 @@ public class CetInvigilateDataServiceImpl extends ServiceImpl<CetInvigilateDataM
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result<String> batchHandleGroup(Map<String, Object> webData) {
|
||||
List<String> ids = (List<String>) webData.get("ids");
|
||||
if (ids == null || ids.isEmpty()) {
|
||||
return Result.error("ID列表为空");
|
||||
}
|
||||
|
||||
List<CetInvigilateData> users = cetInvigilateDataMapper.selectBatchIds(ids);
|
||||
|
||||
List<CetInvigilateData> maleTeachers = new ArrayList<>();
|
||||
List<CetInvigilateData> femaleTeachers = new ArrayList<>();
|
||||
List<CetInvigilateData> maleOthers = new ArrayList<>();
|
||||
List<CetInvigilateData> femaleOthers = new ArrayList<>();
|
||||
List<CetInvigilateData> maleGraduates = new ArrayList<>();
|
||||
List<CetInvigilateData> 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<List<CetInvigilateData>> 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<CetInvigilateData> 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) + " 组");
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue