宿舍、外校、
This commit is contained in:
parent
49dddc4aaf
commit
c90cc16c27
|
@ -28,6 +28,7 @@ import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -175,7 +176,16 @@ public class CeesDormitoryInfoController extends JeecgController<CeesDormitoryIn
|
||||||
return Result.error("批量删除失败: " + e.getMessage());
|
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查询
|
* 通过id查询
|
||||||
*
|
*
|
||||||
|
|
|
@ -133,6 +133,16 @@ public class CeesWaiTeacherController extends JeecgController<CeesWaiTeacher, IC
|
||||||
return ceesWaiTeacherService.batchMealCard(webData);
|
return ceesWaiTeacherService.batchMealCard(webData);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 批量清空饭卡数据
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/clearMealCardData")
|
||||||
|
public Result<?> clearMealCardData(@RequestBody Map<String, Object> webData){
|
||||||
|
log.info(webData.toString());
|
||||||
|
return ceesWaiTeacherService.clearMealCardData(webData);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加
|
* 添加
|
||||||
|
|
|
@ -8,6 +8,7 @@ import org.jeecg.common.api.vo.Result;
|
||||||
import org.jeecg.modules.entity.CeesDormitoryInfo;
|
import org.jeecg.modules.entity.CeesDormitoryInfo;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Description: 宿舍信息表
|
* @Description: 宿舍信息表
|
||||||
|
@ -20,4 +21,6 @@ public interface ICeesDormitoryInfoService extends IService<CeesDormitoryInfo> {
|
||||||
Result<JSONArray> selectBySex(String sex, Integer majorId);
|
Result<JSONArray> selectBySex(String sex, Integer majorId);
|
||||||
|
|
||||||
IPage<CeesDormitoryInfo> queryPageList(CeesDormitoryInfo ceesDormitoryInfo, Integer pageNo, Integer pageSize, HttpServletRequest req);
|
IPage<CeesDormitoryInfo> queryPageList(CeesDormitoryInfo ceesDormitoryInfo, Integer pageNo, Integer pageSize, HttpServletRequest req);
|
||||||
|
|
||||||
|
Result<?> setDormAndSubjectBatch(Map<String, Object> webData);
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,4 +47,6 @@ public interface ICeesWaiTeacherService extends IService<CeesWaiTeacher> {
|
||||||
List<CeesWaiTeacher> listByUserIds(List<String> waiTeacherUserIds);
|
List<CeesWaiTeacher> listByUserIds(List<String> waiTeacherUserIds);
|
||||||
|
|
||||||
Result<?> batchMealCard(Map<String, Object> webData);
|
Result<?> batchMealCard(Map<String, Object> webData);
|
||||||
|
|
||||||
|
Result<?> clearMealCardData(Map<String, Object> webData);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
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.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
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.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.Collections;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -97,6 +95,42 @@ public class CeesDormitoryInfoServiceImpl extends ServiceImpl<CeesDormitoryInfoM
|
||||||
return pageList;
|
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查询住宿人员名称
|
* 根据宿舍ID查询住宿人员名称
|
||||||
* @param dormitoryId 宿舍ID
|
* @param dormitoryId 宿舍ID
|
||||||
|
|
|
@ -5,7 +5,9 @@ import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
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.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
@ -79,21 +81,26 @@ public class CeesWaiTeacherServiceImpl extends ServiceImpl<CeesWaiTeacherMapper,
|
||||||
CeesDormitoryInfo ceesDormitoryInfo = null;
|
CeesDormitoryInfo ceesDormitoryInfo = null;
|
||||||
// 宿舍信息数据更新
|
// 宿舍信息数据更新
|
||||||
if (result == 1 ) {
|
if (result == 1 ) {
|
||||||
ceesDormitoryInfo = ceesDormitoryInfoMapper.selectById(dormitoryId);
|
// 处理新宿舍分配(dormitoryId为"未分配"时设置为null)
|
||||||
|
String actualDormitoryId = "不分配宿舍".equals(dormitoryId) ? null : dormitoryId;
|
||||||
|
|
||||||
|
if (actualDormitoryId != null) {
|
||||||
|
ceesDormitoryInfo = ceesDormitoryInfoMapper.selectById(actualDormitoryId);
|
||||||
if (ceesDormitoryInfo.getDormitoryNum() > 0) {
|
if (ceesDormitoryInfo.getDormitoryNum() > 0) {
|
||||||
ceesDormitoryInfo.setDormitoryNum(ceesDormitoryInfo.getDormitoryNum() - 1);
|
ceesDormitoryInfo.setDormitoryNum(ceesDormitoryInfo.getDormitoryNum() - 1);
|
||||||
ceesDormitoryInfoMapper.updateById(ceesDormitoryInfo);
|
ceesDormitoryInfoMapper.updateById(ceesDormitoryInfo);
|
||||||
// 4. 处理宿舍人数变更
|
} else {
|
||||||
if (oldDormitoryId != null) {
|
return Result.error("宿舍人数已满");
|
||||||
// 4.1 减少旧宿舍人数
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理旧宿舍释放(oldDormitoryId为"未分配"时跳过)
|
||||||
|
if (oldDormitoryId != null && !"未分配".equals(oldDormitoryId)) {
|
||||||
LambdaUpdateWrapper<CeesDormitoryInfo> decreaseWrapper = new LambdaUpdateWrapper<>();
|
LambdaUpdateWrapper<CeesDormitoryInfo> decreaseWrapper = new LambdaUpdateWrapper<>();
|
||||||
decreaseWrapper.eq(CeesDormitoryInfo::getId, oldDormitoryId)
|
decreaseWrapper.eq(CeesDormitoryInfo::getId, oldDormitoryId)
|
||||||
.setSql("dormitory_num = dormitory_num + 1");
|
.setSql("dormitory_num = dormitory_num + 1");
|
||||||
ceesDormitoryInfoMapper.update(null, decreaseWrapper);
|
ceesDormitoryInfoMapper.update(null, decreaseWrapper);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
return Result.error("宿舍人数已满");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// 当宿舍人数为0,修改宿舍状态
|
// 当宿舍人数为0,修改宿舍状态
|
||||||
if (ceesDormitoryInfo != null) {
|
if (ceesDormitoryInfo != null) {
|
||||||
|
@ -437,13 +444,12 @@ public class CeesWaiTeacherServiceImpl extends ServiceImpl<CeesWaiTeacherMapper,
|
||||||
while (currentCard <= max) {
|
while (currentCard <= max) {
|
||||||
String formattedCard = String.format("%03d", currentCard);
|
String formattedCard = String.format("%03d", currentCard);
|
||||||
|
|
||||||
// 如果已被占用,则从原用户手中夺取
|
// 如果该卡已被占用,清空原用户卡号
|
||||||
if (usedCards.contains(formattedCard)) {
|
if (usedCards.contains(formattedCard)) {
|
||||||
String previousHolderId = cardToTeacherId.get(formattedCard);
|
String previousHolderId = cardToTeacherId.get(formattedCard);
|
||||||
if (!Objects.equals(previousHolderId, id)) {
|
if (!Objects.equals(previousHolderId, id)) {
|
||||||
// 夺卡逻辑:把旧用户的卡号置空
|
|
||||||
LambdaUpdateWrapper<CeesWaiTeacher> clearWrapper = new LambdaUpdateWrapper<>();
|
LambdaUpdateWrapper<CeesWaiTeacher> clearWrapper = new LambdaUpdateWrapper<>();
|
||||||
clearWrapper.eq(CeesWaiTeacher::getId, previousHolderId)
|
clearWrapper.eq(CeesWaiTeacher::getMealCard, formattedCard)
|
||||||
.set(CeesWaiTeacher::getMealCard, null);
|
.set(CeesWaiTeacher::getMealCard, null);
|
||||||
ceesWaiTeacherMapper.update(null, clearWrapper);
|
ceesWaiTeacherMapper.update(null, clearWrapper);
|
||||||
usedCards.remove(formattedCard);
|
usedCards.remove(formattedCard);
|
||||||
|
@ -456,7 +462,6 @@ public class CeesWaiTeacherServiceImpl extends ServiceImpl<CeesWaiTeacherMapper,
|
||||||
LambdaUpdateWrapper<CeesWaiTeacher> updateWrapper = new LambdaUpdateWrapper<>();
|
LambdaUpdateWrapper<CeesWaiTeacher> updateWrapper = new LambdaUpdateWrapper<>();
|
||||||
updateWrapper.eq(CeesWaiTeacher::getId, id)
|
updateWrapper.eq(CeesWaiTeacher::getId, id)
|
||||||
.set(CeesWaiTeacher::getMealCard, formattedCard);
|
.set(CeesWaiTeacher::getMealCard, formattedCard);
|
||||||
|
|
||||||
int affectedRows = ceesWaiTeacherMapper.update(null, updateWrapper);
|
int affectedRows = ceesWaiTeacherMapper.update(null, updateWrapper);
|
||||||
if (affectedRows > 0) {
|
if (affectedRows > 0) {
|
||||||
totalUpdatedLocal++;
|
totalUpdatedLocal++;
|
||||||
|
@ -465,11 +470,11 @@ public class CeesWaiTeacherServiceImpl extends ServiceImpl<CeesWaiTeacherMapper,
|
||||||
assigned = true;
|
assigned = true;
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// 异常处理
|
// 可加日志打印
|
||||||
}
|
}
|
||||||
|
|
||||||
currentCard++;
|
currentCard++;
|
||||||
break; // 成功或失败后跳出当前循环
|
break; // 每个用户只分配一个卡号
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!assigned) {
|
if (!assigned) {
|
||||||
|
@ -477,7 +482,7 @@ public class CeesWaiTeacherServiceImpl extends ServiceImpl<CeesWaiTeacherMapper,
|
||||||
finalFailed = new JSONObject();
|
finalFailed = new JSONObject();
|
||||||
finalFailed.put("id", id);
|
finalFailed.put("id", id);
|
||||||
finalFailed.put("attemptedMealCard", String.format("%03d", currentCard - 1));
|
finalFailed.put("attemptedMealCard", String.format("%03d", currentCard - 1));
|
||||||
break; // 只记录一条失败记录
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -489,8 +494,41 @@ public class CeesWaiTeacherServiceImpl extends ServiceImpl<CeesWaiTeacherMapper,
|
||||||
resultJson.put("lastFailedAssignment", finalFailed);
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue