宿舍、外校、
This commit is contained in:
parent
49dddc4aaf
commit
c90cc16c27
|
@ -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查询
|
||||
*
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue