|
|
@@ -496,7 +496,67 @@ public class XgDormBedStudentServiceImpl implements IXgDormBedStudentService {
|
|
|
LambdaUpdateWrapper<XgStudentMsg> updateStudent = Wrappers.lambdaUpdate();
|
|
|
updateStudent.in(XgStudentMsg::getId, affectedStudentIds)
|
|
|
.eq(XgStudentMsg::getDeleted, 0L)
|
|
|
- .set(XgStudentMsg::getStudentStatus, "1")
|
|
|
+ .eq(XgStudentMsg::getStudentStatus, "1")
|
|
|
+ .set(XgStudentMsg::getExtField1, null)
|
|
|
+ .set(XgStudentMsg::getDormitoryRoom, null)
|
|
|
+ .set(XgStudentMsg::getDormitoryBuilding, null)
|
|
|
+ .set(XgStudentMsg::getUpdateTime, now)
|
|
|
+ .set(XgStudentMsg::getUpdateBy, loginUserId);
|
|
|
+ xgStudentMsgMapper.update(null, updateStudent);
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量回收班级分配床位(保留学院分配)
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean batchRecallClassAllocation(XgDormBedBatchRecallBo bo) {
|
|
|
+ Date now = new Date();
|
|
|
+ Long loginUserId = LoginHelper.getUserId();
|
|
|
+
|
|
|
+ // 1) 查出这些床位当前有效的分配关系(status=0, deleted=0,并且已分配给班级)
|
|
|
+ LambdaQueryWrapper<XgDormBedStudent> activeAssignQuery = Wrappers.lambdaQuery();
|
|
|
+ activeAssignQuery.in(XgDormBedStudent::getBedId, bo.getBedIds())
|
|
|
+ .eq(XgDormBedStudent::getStatus, "0")
|
|
|
+ .eq(XgDormBedStudent::getDeleted, "0")
|
|
|
+ .isNotNull(XgDormBedStudent::getClassId); // 只处理已分配给班级的记录
|
|
|
+ List<XgDormBedStudent> activeAssignments = baseMapper.selectList(activeAssignQuery);
|
|
|
+
|
|
|
+ if (activeAssignments.isEmpty()) {
|
|
|
+ return true; // 没有需要处理的数据
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2) 更新分配关系:清空班级相关字段,但保留学院分配信息
|
|
|
+ LambdaUpdateWrapper<XgDormBedStudent> updateAssign = Wrappers.lambdaUpdate();
|
|
|
+ updateAssign.in(XgDormBedStudent::getBedId, bo.getBedIds())
|
|
|
+ .eq(XgDormBedStudent::getStatus, "0")
|
|
|
+ .eq(XgDormBedStudent::getDeleted, "0")
|
|
|
+ .isNotNull(XgDormBedStudent::getClassId)
|
|
|
+ .set(XgDormBedStudent::getMajorId, null)
|
|
|
+ .set(XgDormBedStudent::getClassId, null)
|
|
|
+ .set(XgDormBedStudent::getStudentId, null)
|
|
|
+ // .set(XgDormBedStudent::getAssignTime, null)
|
|
|
+ .set(XgDormBedStudent::getCheckoutTime, null)
|
|
|
+ .set(XgDormBedStudent::getUpdateTime, now)
|
|
|
+ .set(XgDormBedStudent::getUpdateBy, loginUserId);
|
|
|
+ baseMapper.update(null, updateAssign);
|
|
|
+
|
|
|
+ // 3) XgDormBed 状态保持不变(仍然是已分配给学院的状态)
|
|
|
+
|
|
|
+ // 4) 更新学生信息:找到受影响的studentId,设置 student_status=1,清空
|
|
|
+ // ext_field1/dormitory_room/dormitory_building
|
|
|
+ Set<Long> affectedStudentIds = activeAssignments.stream()
|
|
|
+ .map(XgDormBedStudent::getStudentId)
|
|
|
+ .filter(java.util.Objects::nonNull)
|
|
|
+ .collect(java.util.stream.Collectors.toSet());
|
|
|
+ if (!affectedStudentIds.isEmpty()) {
|
|
|
+ LambdaUpdateWrapper<XgStudentMsg> updateStudent = Wrappers.lambdaUpdate();
|
|
|
+ updateStudent.in(XgStudentMsg::getId, affectedStudentIds)
|
|
|
+ .eq(XgStudentMsg::getDeleted, 0L)
|
|
|
+ .eq(XgStudentMsg::getStudentStatus, "1")
|
|
|
.set(XgStudentMsg::getExtField1, null)
|
|
|
.set(XgStudentMsg::getDormitoryRoom, null)
|
|
|
.set(XgStudentMsg::getDormitoryBuilding, null)
|