宿舍、外校、

This commit is contained in:
Qi 2025-06-06 18:51:06 +08:00
parent 49dddc4aaf
commit c90cc16c27
6 changed files with 122 additions and 25 deletions

View File

@ -28,6 +28,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@ -175,7 +176,16 @@ public class CeesDormitoryInfoController extends JeecgController<CeesDormitoryIn
return Result.error("批量删除失败: " + e.getMessage());
}
}
/**
* 批量分配饭卡
* @return
*/
@PostMapping("/setDormAndSubjectBatch")
public Result<?> setDormAndSubjectBatch(@RequestBody Map<String, Object> webData){
log.info(webData.toString());
return ceesDormitoryInfoService.setDormAndSubjectBatch(webData);
}
/**
* 通过id查询
*

View File

@ -133,6 +133,16 @@ public class CeesWaiTeacherController extends JeecgController<CeesWaiTeacher, IC
return ceesWaiTeacherService.batchMealCard(webData);
}
/**
* 批量清空饭卡数据
* @return
*/
@PostMapping("/clearMealCardData")
public Result<?> clearMealCardData(@RequestBody Map<String, Object> webData){
log.info(webData.toString());
return ceesWaiTeacherService.clearMealCardData(webData);
}
/**
* 添加

View File

@ -8,6 +8,7 @@ import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.entity.CeesDormitoryInfo;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
/**
* @Description: 宿舍信息表
@ -20,4 +21,6 @@ public interface ICeesDormitoryInfoService extends IService<CeesDormitoryInfo> {
Result<JSONArray> selectBySex(String sex, Integer majorId);
IPage<CeesDormitoryInfo> queryPageList(CeesDormitoryInfo ceesDormitoryInfo, Integer pageNo, Integer pageSize, HttpServletRequest req);
Result<?> setDormAndSubjectBatch(Map<String, Object> webData);
}

View File

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

View File

@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -27,10 +28,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -97,6 +95,42 @@ public class CeesDormitoryInfoServiceImpl extends ServiceImpl<CeesDormitoryInfoM
return pageList;
}
@Override
public Result<?> setDormAndSubjectBatch(Map<String, Object> webData) {
try {
// 1. 解析用户ID列表
Object idsObj = webData.get("ids");
if (idsObj == null) {
return Result.error("缺少用户ID列表");
}
List<String> userIds = JSONObject.parseArray(idsObj.toString(), String.class);
if (userIds.isEmpty()) {
return Result.error("用户ID列表为空");
}
// 2. 解析学科ID
Object majorIdObj = webData.get("majorId");
if (majorIdObj == null) {
return Result.error("缺少学科ID");
}
Integer majorId;
try {
majorId = Integer.valueOf(majorIdObj.toString());
} catch (Exception e) {
return Result.error("学科ID格式错误");
}
// 3. 批量更新
UpdateWrapper<CeesDormitoryInfo> updateWrapper = new UpdateWrapper<>();
updateWrapper.in("id", userIds);
CeesDormitoryInfo updateEntity = new CeesDormitoryInfo();
updateEntity.setMajorId(majorId);
int affectedRows = ceesDormitoryInfoMapper.update(updateEntity, updateWrapper);
return Result.ok("成功设置 " + affectedRows + " 位宿舍学科");
} catch (Exception e) {
log.error("批量设置宿舍学科失败", e);
return Result.error("操作失败:" + e.getMessage());
}
}
/**
* 根据宿舍ID查询住宿人员名称
* @param dormitoryId 宿舍ID

View File

@ -5,7 +5,9 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -79,20 +81,25 @@ public class CeesWaiTeacherServiceImpl extends ServiceImpl<CeesWaiTeacherMapper,
CeesDormitoryInfo ceesDormitoryInfo = null;
// 宿舍信息数据更新
if (result == 1 ) {
ceesDormitoryInfo = ceesDormitoryInfoMapper.selectById(dormitoryId);
if (ceesDormitoryInfo.getDormitoryNum() > 0) {
ceesDormitoryInfo.setDormitoryNum(ceesDormitoryInfo.getDormitoryNum() - 1);
ceesDormitoryInfoMapper.updateById(ceesDormitoryInfo);
// 4. 处理宿舍人数变更
if (oldDormitoryId != null) {
// 4.1 减少旧宿舍人数
LambdaUpdateWrapper<CeesDormitoryInfo> decreaseWrapper = new LambdaUpdateWrapper<>();
decreaseWrapper.eq(CeesDormitoryInfo::getId, oldDormitoryId)
.setSql("dormitory_num = dormitory_num + 1");
ceesDormitoryInfoMapper.update(null, decreaseWrapper);
// 处理新宿舍分配dormitoryId为"未分配"时设置为null
String actualDormitoryId = "不分配宿舍".equals(dormitoryId) ? null : dormitoryId;
if (actualDormitoryId != null) {
ceesDormitoryInfo = ceesDormitoryInfoMapper.selectById(actualDormitoryId);
if (ceesDormitoryInfo.getDormitoryNum() > 0) {
ceesDormitoryInfo.setDormitoryNum(ceesDormitoryInfo.getDormitoryNum() - 1);
ceesDormitoryInfoMapper.updateById(ceesDormitoryInfo);
} else {
return Result.error("宿舍人数已满");
}
} else {
return Result.error("宿舍人数已满");
}
// 处理旧宿舍释放oldDormitoryId为"未分配"时跳过
if (oldDormitoryId != null && !"未分配".equals(oldDormitoryId)) {
LambdaUpdateWrapper<CeesDormitoryInfo> decreaseWrapper = new LambdaUpdateWrapper<>();
decreaseWrapper.eq(CeesDormitoryInfo::getId, oldDormitoryId)
.setSql("dormitory_num = dormitory_num + 1");
ceesDormitoryInfoMapper.update(null, decreaseWrapper);
}
}
// 当宿舍人数为0,修改宿舍状态
@ -437,13 +444,12 @@ public class CeesWaiTeacherServiceImpl extends ServiceImpl<CeesWaiTeacherMapper,
while (currentCard <= max) {
String formattedCard = String.format("%03d", currentCard);
// 如果已被占用则从原用户手中夺取
// 如果该卡已被占用清空原用户卡号
if (usedCards.contains(formattedCard)) {
String previousHolderId = cardToTeacherId.get(formattedCard);
if (!Objects.equals(previousHolderId, id)) {
// 夺卡逻辑把旧用户的卡号置空
LambdaUpdateWrapper<CeesWaiTeacher> clearWrapper = new LambdaUpdateWrapper<>();
clearWrapper.eq(CeesWaiTeacher::getId, previousHolderId)
clearWrapper.eq(CeesWaiTeacher::getMealCard, formattedCard)
.set(CeesWaiTeacher::getMealCard, null);
ceesWaiTeacherMapper.update(null, clearWrapper);
usedCards.remove(formattedCard);
@ -456,7 +462,6 @@ public class CeesWaiTeacherServiceImpl extends ServiceImpl<CeesWaiTeacherMapper,
LambdaUpdateWrapper<CeesWaiTeacher> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(CeesWaiTeacher::getId, id)
.set(CeesWaiTeacher::getMealCard, formattedCard);
int affectedRows = ceesWaiTeacherMapper.update(null, updateWrapper);
if (affectedRows > 0) {
totalUpdatedLocal++;
@ -465,11 +470,11 @@ public class CeesWaiTeacherServiceImpl extends ServiceImpl<CeesWaiTeacherMapper,
assigned = true;
}
} catch (Exception e) {
// 异常处理
// 可加日志打印
}
currentCard++;
break; // 成功或失败后跳出当前循环
break; // 每个用户只分配一个卡号
}
if (!assigned) {
@ -477,7 +482,7 @@ public class CeesWaiTeacherServiceImpl extends ServiceImpl<CeesWaiTeacherMapper,
finalFailed = new JSONObject();
finalFailed.put("id", id);
finalFailed.put("attemptedMealCard", String.format("%03d", currentCard - 1));
break; // 只记录一条失败记录
break;
}
}
@ -489,8 +494,41 @@ public class CeesWaiTeacherServiceImpl extends ServiceImpl<CeesWaiTeacherMapper,
resultJson.put("lastFailedAssignment", finalFailed);
}
return Result.ok(resultJson);
// 添加成功提示 + 数据体
Result<JSONObject> result = Result.ok(resultJson);
result.setMessage("成功分配 " + totalUpdatedLocal + " 个饭卡数据");
return result;
}
@Override
public Result<?> clearMealCardData(Map<String, Object> webData) {
try {
// 1. 从请求参数中解析用户ID列表
Object idsObj = webData.get("ids");
if (idsObj == null) {
return Result.error("参数缺失ids");
}
List<String> Ids = JSONObject.parseArray(idsObj.toString(), String.class);
if (CollectionUtils.isEmpty(Ids)) {
return Result.error("用户ID列表为空");
}
// 2. 批量清空 meal_card 字段
UpdateWrapper<CeesWaiTeacher> updateWrapper = new UpdateWrapper<>();
updateWrapper.in("id", Ids).set("meal_card", null);
int affectedRows = ceesWaiTeacherMapper.update(null, updateWrapper);
// 3. 返回操作结果
return Result.ok("成功清空 " + affectedRows + " 位用户的饭卡数据");
} catch (Exception e) {
log.error("清空饭卡数据失败", e);
return Result.error("操作失败:" + e.getMessage());
}
}
}