研究生、本校老师新增数据,批量设置饭卡、部分如:删除研究生数据管理、本校老师删除数据关联

This commit is contained in:
Qi 2025-06-04 16:46:47 +08:00
parent 02c0c7b9fe
commit 69acfa4d17
12 changed files with 229 additions and 29 deletions

View File

@ -65,10 +65,6 @@ public class CeesDormitoryInfoController extends JeecgController<CeesDormitoryIn
HttpServletRequest req) { HttpServletRequest req) {
return Result.OK(ceesDormitoryInfoService.queryPageList(ceesDormitoryInfo,pageNo,pageSize,req)); return Result.OK(ceesDormitoryInfoService.queryPageList(ceesDormitoryInfo,pageNo,pageSize,req));
// QueryWrapper<CeesDormitoryInfo> queryWrapper = QueryGenerator.initQueryWrapper(ceesDormitoryInfo, req.getParameterMap());
// Page<CeesDormitoryInfo> page = new Page<CeesDormitoryInfo>(pageNo, pageSize);
// IPage<CeesDormitoryInfo> pageList = ceesDormitoryInfoService.page(page, queryWrapper);
// return Result.OK(pageList);
} }
/** /**

View File

@ -1,9 +1,9 @@
package org.jeecg.modules.contoller; package org.jeecg.modules.contoller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -11,10 +11,11 @@ import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.aspect.annotation.PermissionData; import org.jeecg.common.aspect.annotation.PermissionData;
import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.modules.entity.CeesGroup; import org.jeecg.modules.entity.CeesGroup;
import org.jeecg.modules.entity.CeesWaiTeacher;
import org.jeecg.modules.entity.dto.UpdateGroupUserDto; import org.jeecg.modules.entity.dto.UpdateGroupUserDto;
import org.jeecg.modules.entity.vo.CeesUserGroupVo; import org.jeecg.modules.entity.vo.CeesUserGroupVo;
import org.jeecg.modules.mapper.CeesWaiTeacherMapper;
import org.jeecg.modules.service.ICeesGroupService; import org.jeecg.modules.service.ICeesGroupService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -24,6 +25,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* @author Xubx * @author Xubx
@ -36,6 +39,8 @@ import java.util.Arrays;
public class CeesGroupController extends JeecgController<CeesGroup, ICeesGroupService> { public class CeesGroupController extends JeecgController<CeesGroup, ICeesGroupService> {
@Autowired @Autowired
private ICeesGroupService ceesGroupService; private ICeesGroupService ceesGroupService;
@Autowired
private CeesWaiTeacherMapper ceesWaiTeacherMapper;
/** /**
* 分页列表查询 * 分页列表查询
@ -56,10 +61,6 @@ public class CeesGroupController extends JeecgController<CeesGroup, ICeesGroupSe
HttpServletRequest req) { HttpServletRequest req) {
return Result.OK(ceesGroupService.queryPageList(ceesGroup,pageNo,pageSize,req)); return Result.OK(ceesGroupService.queryPageList(ceesGroup,pageNo,pageSize,req));
// QueryWrapper<CeesGroup> queryWrapper = QueryGenerator.initQueryWrapper(ceesGroup, req.getParameterMap());
// Page<CeesGroup> page = new Page<CeesGroup>(pageNo, pageSize);
// IPage<CeesGroup> pageList = ceesGroupService.page(page, queryWrapper);
// return Result.OK(pageList);
} }
/** /**
@ -124,8 +125,29 @@ public class CeesGroupController extends JeecgController<CeesGroup, ICeesGroupSe
@ApiOperation(value = "分组表-通过id删除", notes = "分组表-通过id删除") @ApiOperation(value = "分组表-通过id删除", notes = "分组表-通过id删除")
@DeleteMapping(value = "/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) {
try {
// 1. 查询所有关联该宿舍的用户
LambdaQueryWrapper<CeesWaiTeacher> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CeesWaiTeacher::getGroupId, id);
List<CeesWaiTeacher> teachers = ceesWaiTeacherMapper.selectList(queryWrapper);
// 2. 清空这些用户的宿舍信息
if (!teachers.isEmpty()) {
List<String> teacherIds = teachers.stream()
.map(CeesWaiTeacher::getId)
.collect(Collectors.toList());
LambdaUpdateWrapper<CeesWaiTeacher> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.in(CeesWaiTeacher::getId, teacherIds)
.set(CeesWaiTeacher::getGroupId, null);
ceesWaiTeacherMapper.update(null, updateWrapper);
}
// 3. 删除宿舍记录
ceesGroupService.removeById(id); ceesGroupService.removeById(id);
return Result.OK("删除成功!"); return Result.OK("删除成功!");
} catch (Exception e) {
log.error("删除宿舍失败", e);
return Result.error("删除宿舍失败: " + e.getMessage());
}
} }
/** /**
@ -138,8 +160,30 @@ public class CeesGroupController extends JeecgController<CeesGroup, ICeesGroupSe
@ApiOperation(value = "分组表-批量删除", notes = "分组表-批量删除") @ApiOperation(value = "分组表-批量删除", notes = "分组表-批量删除")
@DeleteMapping(value = "/deleteBatch") @DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) { public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
this.ceesGroupService.removeByIds(Arrays.asList(ids.split(","))); try {
return Result.OK("批量删除成功!"); // 1. 将逗号分隔的ID转换为列表
List<String> groupIds = Arrays.asList(ids.split(","));
// 2. 检查是否有无效的宿舍ID
List<CeesGroup> existingGroupes = ceesGroupService.listByIds(groupIds);
if (existingGroupes.size() != groupIds.size()) {
return Result.error("部分宿舍ID不存在");
}
// 3. 查询所有关联这些宿舍的用户并清空宿舍信息
LambdaUpdateWrapper<CeesWaiTeacher> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.in(CeesWaiTeacher::getGroupId, groupIds)
.set(CeesWaiTeacher::getGroupId, null);
int affectedUsers = ceesWaiTeacherMapper.update(null, updateWrapper);
log.info("清空了{}位用户的宿舍信息", affectedUsers);
// 4. 批量删除宿舍记录
boolean removeSuccess = ceesGroupService.removeByIds(groupIds);
if (!removeSuccess) {
throw new RuntimeException("批量删除宿舍记录失败");
}
return Result.OK("批量删除成功,并清空了" + affectedUsers + "位用户的宿舍信息");
} catch (Exception e) {
log.error("批量删除宿舍失败", e);
return Result.error("批量删除失败: " + e.getMessage());
}
} }
/** /**

View File

@ -109,8 +109,8 @@ public class CeesLocalTeacherController extends JeecgController<CeesLocalTeacher
@ApiOperation(value="本校教师表-添加", notes="本校教师表-添加") @ApiOperation(value="本校教师表-添加", notes="本校教师表-添加")
@PostMapping(value = "/add") @PostMapping(value = "/add")
public Result<String> add(@RequestBody CeesLocalTeacher ceesLocalTeacher) { public Result<String> add(@RequestBody CeesLocalTeacher ceesLocalTeacher) {
ceesLocalTeacherService.save(ceesLocalTeacher);
return Result.OK("添加成功!"); return ceesLocalTeacherService.addData(ceesLocalTeacher);
} }
/** /**

View File

@ -123,6 +123,16 @@ public class CeesWaiTeacherController extends JeecgController<CeesWaiTeacher, IC
return ceesWaiTeacherService.batchGroup(webData); return ceesWaiTeacherService.batchGroup(webData);
} }
/**
* 批量分配饭卡
* @return
*/
@PostMapping("/batchMealCard")
public Result<?> batchMealCard(@RequestBody Map<String, Object> webData){
log.info(webData.toString());
return ceesWaiTeacherService.batchMealCard(webData);
}
/** /**
* 添加 * 添加
@ -134,11 +144,6 @@ public class CeesWaiTeacherController extends JeecgController<CeesWaiTeacher, IC
@ApiOperation(value="外校老师管理-添加", notes="外校老师管理-添加") @ApiOperation(value="外校老师管理-添加", notes="外校老师管理-添加")
@PostMapping(value = "/add") @PostMapping(value = "/add")
public Result<String> add(@RequestBody CeesWaiTeacher ceesWaiTeacher) { public Result<String> add(@RequestBody CeesWaiTeacher ceesWaiTeacher) {
CreateAccountDto createAccountDto = new CreateAccountDto();
createAccountDto.setGroup(4);
createAccountDto.setMajorId(ceesWaiTeacher.getMajorId());
createAccountDto.setNum(1);
Result<?> account = ceesUserService.createAccount(createAccountDto);
return ceesWaiTeacherService.addData(ceesWaiTeacher); return ceesWaiTeacherService.addData(ceesWaiTeacher);
} }

View File

@ -92,8 +92,7 @@ public class StudentController extends JeecgController<Student, IStudentService>
@ApiOperation(value="研究生表-添加", notes="研究生表-添加") @ApiOperation(value="研究生表-添加", notes="研究生表-添加")
@PostMapping(value = "/add") @PostMapping(value = "/add")
public Result<String> add(@RequestBody Student student) { public Result<String> add(@RequestBody Student student) {
studentService.save(student); return studentService.addData(student);
return Result.OK("添加成功!");
} }
/** /**

View File

@ -42,23 +42,23 @@ public class CeesAdminInfo implements Serializable {
@ApiModelProperty(value = "姓名") @ApiModelProperty(value = "姓名")
private String userName; private String userName;
/**用户id*/ /**用户id*/
@Excel(name = "用户id", width = 15) @Excel(name = "身份码", width = 15)
@ApiModelProperty(value = "用户id") @ApiModelProperty(value = "用户id")
private String userId; private String userId;
/**用户专业id*/ /**用户专业id*/
@Excel(name = "用户专业id", width = 15) @Excel(name = "用户专业Id", width = 15)
@ApiModelProperty(value = "用户专业id") @ApiModelProperty(value = "用户专业id")
private String userMajorId; private String userMajorId;
/**专业id,0表示未选择*/ /**专业id,0表示未选择*/
@Excel(name = "专业id,0表示未选择", width = 15) @Excel(name = "专业id,0表示未选择", width = 15)
@ApiModelProperty(value = "专业id,0表示未选择") @ApiModelProperty(value = "专业id,0表示未选择 语文|政治|地理|历史")
private Integer majorId; private Integer majorId;
/**组别*/ /**组别*/
@Excel(name = "组别", width = 15) // @Excel(name = "分组组别", width = 15)
@ApiModelProperty(value = "组别") @ApiModelProperty(value = "组别")
private String groupId; private String groupId;
/**组级别*/ /**组级别*/
@Excel(name = "组级别", width = 15) @Excel(name = "之前组级别", width = 15)
@ApiModelProperty(value = "组级别") @ApiModelProperty(value = "组级别")
private String beforeGroupLevel; private String beforeGroupLevel;
/**组级别*/ /**组级别*/

View File

@ -23,4 +23,6 @@ public interface ICeesLocalTeacherService extends IService<CeesLocalTeacher> {
String removeByUserId(String userId); String removeByUserId(String userId);
boolean removeBatchByUserIds(List<String> localTeacherUserIds); boolean removeBatchByUserIds(List<String> localTeacherUserIds);
Result<String> addData(CeesLocalTeacher ceesLocalTeacher);
} }

View File

@ -45,4 +45,6 @@ public interface ICeesWaiTeacherService extends IService<CeesWaiTeacher> {
CeesWaiTeacher getByUserId(String userId); CeesWaiTeacher getByUserId(String userId);
List<CeesWaiTeacher> listByUserIds(List<String> waiTeacherUserIds); List<CeesWaiTeacher> listByUserIds(List<String> waiTeacherUserIds);
Result<?> batchMealCard(Map<String, Object> webData);
} }

View File

@ -22,4 +22,6 @@ public interface IStudentService extends IService<Student> {
String removeByUserId(String userId); String removeByUserId(String userId);
boolean removeBatchByUserIds(List<String> studentUserIds); boolean removeBatchByUserIds(List<String> studentUserIds);
Result<String> addData(Student student);
} }

View File

@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.entity.CeesLocalTeacher; import org.jeecg.modules.entity.CeesLocalTeacher;
import org.jeecg.modules.entity.CeesUser; import org.jeecg.modules.entity.CeesUser;
import org.jeecg.modules.entity.dto.CreateAccountDto;
import org.jeecg.modules.entity.dto.UpdateGroupUserDto; import org.jeecg.modules.entity.dto.UpdateGroupUserDto;
import org.jeecg.modules.mapper.CeesGroupMapper; import org.jeecg.modules.mapper.CeesGroupMapper;
import org.jeecg.modules.mapper.CeesLocalTeacherMapper; import org.jeecg.modules.mapper.CeesLocalTeacherMapper;
@ -187,4 +188,29 @@ public class CeesLocalTeacherServiceImpl extends ServiceImpl<CeesLocalTeacherMap
wrapper.in(CeesLocalTeacher::getUserId, userIds); wrapper.in(CeesLocalTeacher::getUserId, userIds);
return this.remove(wrapper); return this.remove(wrapper);
} }
@Override
public Result<String> addData(CeesLocalTeacher ceesLocalTeacher) {
// 生成用户身份码
CreateAccountDto createAccountDto = new CreateAccountDto();
createAccountDto.setGroup(3);
createAccountDto.setMajorId(ceesLocalTeacher.getMajorId());
createAccountDto.setNum(1);
Result<?> result = ceesUserService.createAccount(createAccountDto);
// 补充数据与数据同步
if (result.isSuccess()) {
List<CeesUser> users = (List<CeesUser>) result.getResult();
if (!users.isEmpty()) {
CeesUser user = users.get(0);
ceesLocalTeacher.setUserId(user.getUserId());
ceesLocalTeacher.setUserMajorId(user.getUserMajorId());
user.setUserName(ceesLocalTeacher.getUserName());
ceesUserMapper.updateById(user);
this.save(ceesLocalTeacher);
return Result.ok("添加成功");
}
}
return Result.error("添加失败");
}
} }

View File

@ -127,6 +127,11 @@ public class CeesWaiTeacherServiceImpl extends ServiceImpl<CeesWaiTeacherMapper,
if (StringUtils.isNotBlank(teacher.getPyCard())) { if (StringUtils.isNotBlank(teacher.getPyCard())) {
teacher.setPyCard(JasyptUtil.decrypt(teacher.getPyCard(),passWord)); teacher.setPyCard(JasyptUtil.decrypt(teacher.getPyCard(),passWord));
} }
// 设置 groupName
if (StringUtils.isNotBlank(teacher.getGroupId())) {
CeesGroup group = ceesGroupMapper.selectById(teacher.getGroupId());
teacher.setGroupName(group.getName());
}
}); });
Set<String> dormitoryIdList = pageList.getRecords().stream().map(CeesWaiTeacher::getDormitoryId).collect(Collectors.toSet()); Set<String> dormitoryIdList = pageList.getRecords().stream().map(CeesWaiTeacher::getDormitoryId).collect(Collectors.toSet());
if (dormitoryIdList.size() > 0) { if (dormitoryIdList.size() > 0) {
@ -385,4 +390,98 @@ public class CeesWaiTeacherServiceImpl extends ServiceImpl<CeesWaiTeacherMapper,
query.in(CeesWaiTeacher::getUserId, userIds); query.in(CeesWaiTeacher::getUserId, userIds);
return list(query); return list(query);
} }
@Override
public Result<?> batchMealCard(Map<String, Object> webData) {
Object idsObj = webData.get("ids");
List<String> ids = JSONObject.parseArray(idsObj.toString(), String.class);
Object minObj = webData.get("min");
int min = 0;
if (minObj instanceof String) {
min = Integer.valueOf((String) minObj);
} else {
throw new IllegalArgumentException("min 参数类型错误");
}
Object maxObj = webData.get("max");
int max = 0;
if (maxObj instanceof String) {
max = Integer.valueOf((String) maxObj);
} else {
throw new IllegalArgumentException("max 参数类型错误");
}
// 获取所有已有的 mealCard构建占用集合
List<CeesWaiTeacher> allTeachers = ceesWaiTeacherMapper.selectList(null);
Set<String> usedCards = allTeachers.stream()
.map(CeesWaiTeacher::getMealCard)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
// 获取已存在 mealCard 的用户 ID
Set<String> alreadyHasCardIds = allTeachers.stream()
.filter(t -> t.getMealCard() != null && !t.getMealCard().trim().isEmpty())
.map(CeesWaiTeacher::getId)
.collect(Collectors.toSet());
int totalUpdatedLocal = 0;
List<String> failedIdsLocal = new ArrayList<>();
JSONObject finalFailed = null;
int currentCard = min;
for (String id : ids) {
// 如果用户已有 mealCard跳过
if (alreadyHasCardIds.contains(id)) {
continue;
}
boolean assigned = false;
// 查找下一个未被占用的卡号
while (currentCard <= max) {
String formattedCard = String.format("%03d", currentCard);
if (!usedCards.contains(formattedCard)) {
try {
LambdaUpdateWrapper<CeesWaiTeacher> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(CeesWaiTeacher::getId, id)
.set(CeesWaiTeacher::getMealCard, formattedCard);
int affectedRows = ceesWaiTeacherMapper.update(null, updateWrapper);
if (affectedRows > 0) {
totalUpdatedLocal++;
usedCards.add(formattedCard);
assigned = true;
}
} catch (Exception e) {
// 忽略异常进入失败处理
}
currentCard++;
break;
}
currentCard++;
}
if (!assigned) {
failedIdsLocal.add(id);
finalFailed = new JSONObject();
finalFailed.put("id", id);
finalFailed.put("attemptedMealCard", String.format("%03d", currentCard - 1));
break; // 只记录一条失败记录
}
}
JSONObject resultJson = new JSONObject();
resultJson.put("totalUpdated", totalUpdatedLocal);
resultJson.put("failedIds", failedIdsLocal);
resultJson.put("success", failedIdsLocal.isEmpty());
if (finalFailed != null) {
resultJson.put("lastFailedAssignment", finalFailed);
}
return Result.ok(resultJson);
}
} }

View File

@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.entity.CeesUser; import org.jeecg.modules.entity.CeesUser;
import org.jeecg.modules.entity.Student; import org.jeecg.modules.entity.Student;
import org.jeecg.modules.entity.dto.CreateAccountDto;
import org.jeecg.modules.entity.dto.UpdateGroupUserDto; import org.jeecg.modules.entity.dto.UpdateGroupUserDto;
import org.jeecg.modules.mapper.CeesGroupMapper; import org.jeecg.modules.mapper.CeesGroupMapper;
import org.jeecg.modules.mapper.CeesUserMapper; import org.jeecg.modules.mapper.CeesUserMapper;
@ -181,4 +182,28 @@ public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> impl
wrapper.in(Student::getUserId, userIds); wrapper.in(Student::getUserId, userIds);
return this.remove(wrapper); return this.remove(wrapper);
} }
@Override
public Result<String> addData(Student student) {
// 生成用户身份码
CreateAccountDto createAccountDto = new CreateAccountDto();
createAccountDto.setGroup(2);
createAccountDto.setMajorId(student.getMajorId());
createAccountDto.setNum(1);
Result<?> result = ceesUserService.createAccount(createAccountDto);
// 补充数据与数据同步
if (result.isSuccess()) {
List<CeesUser> users = (List<CeesUser>) result.getResult();
if (!users.isEmpty()) {
CeesUser user = users.get(0);
student.setUserId(user.getUserId());
student.setUserMajorId(user.getUserMajorId());
user.setUserName(student.getUserName());
ceesUserMapper.updateById(user);
this.save(student);
return Result.ok("添加成功");
}
}
return Result.error("添加失败");
}
} }