RoomBedServiceImpl.java 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541
  1. package com.xjrsoft.module.room.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import cn.hutool.core.bean.BeanUtil;
  4. import cn.hutool.core.util.ObjectUtil;
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  7. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  8. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  9. import com.github.yulichang.base.MPJBaseServiceImpl;
  10. import com.github.yulichang.toolkit.MPJWrappers;
  11. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  12. import com.xjrsoft.common.enums.DeleteMark;
  13. import com.xjrsoft.common.exception.MyException;
  14. import com.xjrsoft.common.utils.VoToColumnUtil;
  15. import com.xjrsoft.module.base.entity.BaseClass;
  16. import com.xjrsoft.module.base.mapper.BaseClassMapper;
  17. import com.xjrsoft.module.room.dto.AdjustBedPageDto;
  18. import com.xjrsoft.module.room.dto.AdjustClassPageDto;
  19. import com.xjrsoft.module.room.dto.AdjustStudentBedDto;
  20. import com.xjrsoft.module.room.dto.DistributeClassPageDto;
  21. import com.xjrsoft.module.room.dto.DistributeRoomBedDto;
  22. import com.xjrsoft.module.room.dto.DistributeRoomBedPageDto;
  23. import com.xjrsoft.module.room.dto.RoomBedPageDto;
  24. import com.xjrsoft.module.room.entity.Room;
  25. import com.xjrsoft.module.room.entity.RoomBed;
  26. import com.xjrsoft.module.room.entity.RoomBedRecord;
  27. import com.xjrsoft.module.room.mapper.RoomBedMapper;
  28. import com.xjrsoft.module.room.mapper.RoomBedRecordMapper;
  29. import com.xjrsoft.module.room.mapper.RoomMapper;
  30. import com.xjrsoft.module.room.service.IRoomBedService;
  31. import com.xjrsoft.module.room.vo.AdjustBedClassPageVo;
  32. import com.xjrsoft.module.room.vo.AdjustBedClassStudentPageVo;
  33. import com.xjrsoft.module.room.vo.AdjustBedStudentPageVo;
  34. import com.xjrsoft.module.room.vo.ClassStudentCountVo;
  35. import com.xjrsoft.module.room.vo.DistributeClassPageVo;
  36. import com.xjrsoft.module.room.vo.DistributeResultClassVo;
  37. import com.xjrsoft.module.room.vo.DistributeResultListVo;
  38. import com.xjrsoft.module.room.vo.DistributeRoomBedPageVo;
  39. import com.xjrsoft.module.room.vo.NoBedStudentPageVo;
  40. import com.xjrsoft.module.room.vo.RoomBedExcelVo;
  41. import com.xjrsoft.module.room.vo.RoomBedPageVo;
  42. import com.xjrsoft.module.room.vo.RoomClassCountVo;
  43. import com.xjrsoft.module.room.vo.StudentPayStatusVo;
  44. import com.xjrsoft.module.student.entity.BaseStudent;
  45. import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
  46. import com.xjrsoft.module.student.mapper.BaseStudentMapper;
  47. import com.xjrsoft.module.teacher.entity.XjrUser;
  48. import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
  49. import lombok.AllArgsConstructor;
  50. import org.springframework.stereotype.Service;
  51. import java.util.ArrayList;
  52. import java.util.Date;
  53. import java.util.HashMap;
  54. import java.util.HashSet;
  55. import java.util.List;
  56. import java.util.Map;
  57. import java.util.Set;
  58. /**
  59. * @title: 寝室床位
  60. * @Author dzx
  61. * @Date: 2023-12-27
  62. * @Version 1.0
  63. */
  64. @Service
  65. @AllArgsConstructor
  66. public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBed> implements IRoomBedService {
  67. private final RoomMapper roomMapper;
  68. private final RoomBedMapper roomBedMapper;
  69. private final BaseStudentMapper baseStudentMapper;
  70. private final BaseClassMapper baseClassMapper;
  71. private final XjrUserMapper xjrUserMapper;
  72. private final RoomBedRecordMapper roomBedRecordMapper;
  73. @Override
  74. public Page<RoomBedPageVo> getPage(Page<RoomBedPageVo> page, RoomBedPageDto dto) {
  75. Page<RoomBedPageVo> result = roomBedMapper.getPage(page, dto);
  76. return result;
  77. }
  78. @Override
  79. public List<RoomBedExcelVo> getList(RoomBedPageDto dto) {
  80. return roomBedMapper.getList(dto);
  81. }
  82. @Override
  83. public Boolean clearStudentInfo(List<Long> ids) {
  84. for (Long id : ids) {
  85. RoomBed roomBed = roomBedMapper.selectById(id);
  86. roomBed.setStudentUserId(null);
  87. // RoomBed roomBedData = BeanUtil.toBean(roomBed, RoomBed.class);
  88. // roomBedMapper.updateById(new RoomBed(){{
  89. // setId(id);
  90. // setStudentUserId(null);
  91. // }});
  92. UpdateWrapper<RoomBed> updateWrapper = new UpdateWrapper<>();
  93. updateWrapper.eq("id", id);
  94. updateWrapper.setSql("student_user_id = null");
  95. updateWrapper.setSql("is_check_in = 0");
  96. roomBedMapper.update(roomBed, updateWrapper);
  97. }
  98. return true;
  99. }
  100. @Override
  101. public Boolean clearStudentInfoByRoomId(Long id) {
  102. List<RoomBed> bedList = roomBedMapper.selectList(
  103. MPJWrappers.<RoomBed>lambdaJoin().eq(RoomBed::getRoomId, id)
  104. );
  105. for (RoomBed roomBed : bedList) {
  106. UpdateWrapper<RoomBed> updateWrapper = new UpdateWrapper<>();
  107. updateWrapper.eq("id", roomBed.getId());
  108. updateWrapper.setSql("student_user_id = null");
  109. updateWrapper.setSql("is_check_in = 0");
  110. roomBedMapper.update(roomBed, updateWrapper);
  111. }
  112. Room room = roomMapper.selectById(id);
  113. room.setIsMax(0);
  114. roomMapper.updateById(room);
  115. return true;
  116. }
  117. @Override
  118. public Boolean clearStudentInfoByBedId(Long id) {
  119. UpdateWrapper<RoomBed> updateWrapper = new UpdateWrapper<>();
  120. updateWrapper.eq("id", id);
  121. updateWrapper.setSql("student_user_id = null");
  122. updateWrapper.setSql("is_check_in = 0");
  123. RoomBed roomBed = roomBedMapper.selectById(id);
  124. roomBedMapper.update(roomBed, updateWrapper);
  125. //如果寝室的人只剩下一个班级,将混合寝室改为否
  126. List<Long> roomIds = new ArrayList<>();
  127. roomIds.add(roomBed.getRoomId());
  128. List<RoomClassCountVo> classCountVoList = roomMapper.getRoomClassCount(roomIds);
  129. for (RoomClassCountVo roomClassCountVo : classCountVoList) {
  130. if(roomClassCountVo.getClassCount() == 1){
  131. Room updRoom = roomMapper.selectById(roomClassCountVo.getId());
  132. updRoom.setIsMax(0);
  133. roomMapper.updateById(updRoom);
  134. }
  135. }
  136. return true;
  137. }
  138. @Override
  139. public Page<DistributeClassPageVo> getDistributeClassInfo(Page<DistributeClassPageDto> page, DistributeClassPageDto dto) {
  140. Page<DistributeClassPageVo> classInfo = roomBedMapper.getDistributeClassInfo(page, dto);
  141. List<DistributeClassPageVo> records = classInfo.getRecords();
  142. //查询所有班级需要安排住宿的人数,并组装成map备用
  143. List<ClassStudentCountVo> allStayCount = roomBedMapper.getAllStayCount();
  144. Map<String, Integer> allStayCountMap = new HashMap<>();
  145. for (ClassStudentCountVo classStudentCountVo : allStayCount) {
  146. allStayCountMap.put(classStudentCountVo.getClassId(), classStudentCountVo.getStudentCount());
  147. }
  148. //查询所有班级需要安排住宿的男生人数,并组装成map备用
  149. List<ClassStudentCountVo> allStayMaleCount = roomBedMapper.getAllStayMaleCount();
  150. Map<String, Integer> allStayMaleCountMap = new HashMap<>();
  151. for (ClassStudentCountVo classStudentCountVo : allStayMaleCount) {
  152. allStayMaleCountMap.put(classStudentCountVo.getClassId(), classStudentCountVo.getStudentCount());
  153. }
  154. //查询所有班级需要安排住宿的女生人数,并组装成map备用
  155. List<ClassStudentCountVo> allStayFemaleCount = roomBedMapper.getAllStayFemaleCount();
  156. Map<String, Integer> allStayFemaleCountMap = new HashMap<>();
  157. for (ClassStudentCountVo classStudentCountVo : allStayFemaleCount) {
  158. allStayFemaleCountMap.put(classStudentCountVo.getClassId(), classStudentCountVo.getStudentCount());
  159. }
  160. //查询所有班级已经安排住宿的总人数,并组装成map备用
  161. List<ClassStudentCountVo> allArrangedCount = roomBedMapper.getAllArrangedCount();
  162. Map<String, Integer> allArrangedCountMap = new HashMap<>();
  163. for (ClassStudentCountVo classStudentCountVo : allArrangedCount) {
  164. allArrangedCountMap.put(classStudentCountVo.getClassId(), classStudentCountVo.getStudentCount());
  165. }
  166. //查询所有班级已经安排住宿的男生人数,并组装成map备用
  167. List<ClassStudentCountVo> allArrangedMaleCount = roomBedMapper.getAllArrangedMaleCount();
  168. Map<String, Integer> allArrangedMaleCountMap = new HashMap<>();
  169. for (ClassStudentCountVo classStudentCountVo : allArrangedMaleCount) {
  170. allArrangedMaleCountMap.put(classStudentCountVo.getClassId(), classStudentCountVo.getStudentCount());
  171. }
  172. //查询所有班级已经安排住宿的女生人数,并组装成map备用
  173. List<ClassStudentCountVo> allArrangedFemaleCount = roomBedMapper.getAllArrangedFemaleCount();
  174. Map<String, Integer> allArrangedFemaleCountMap = new HashMap<>();
  175. for (ClassStudentCountVo classStudentCountVo : allArrangedFemaleCount) {
  176. allArrangedFemaleCountMap.put(classStudentCountVo.getClassId(), classStudentCountVo.getStudentCount());
  177. }
  178. for (DistributeClassPageVo record : records) {
  179. Integer needCout = 0;
  180. Integer distributeCount = 0;
  181. Integer maleCount = 0, femaleCount = 0;
  182. record.setMaleCount(maleCount);
  183. record.setFemaleCount(femaleCount);
  184. if("SB10001".equals(dto.getGender()) && allStayMaleCountMap.get(record.getId()) != null){
  185. if(allStayMaleCountMap.get(record.getId()) != null){
  186. maleCount = allStayMaleCountMap.get(record.getId()) - (allArrangedMaleCountMap.get(record.getId()) == null ? 0 : allArrangedMaleCountMap.get(record.getId()));
  187. }
  188. if(maleCount < 0){
  189. maleCount = 0;
  190. }
  191. record.setMaleCount(maleCount);
  192. needCout = allStayMaleCountMap.get(record.getId());
  193. if(allArrangedMaleCountMap.get(record.getId()) != null){
  194. distributeCount = (allArrangedMaleCountMap.get(record.getId()) == null ? 0 : allArrangedMaleCountMap.get(record.getId()));
  195. }
  196. }else if("SB10002".equals(dto.getGender())){
  197. if(allStayFemaleCountMap.get(record.getId()) != null){
  198. femaleCount = allStayFemaleCountMap.get(record.getId()) - (allArrangedFemaleCountMap.get(record.getId()) == null ? 0 : allArrangedFemaleCountMap.get(record.getId()));
  199. }
  200. if(femaleCount < 0){
  201. femaleCount = 0;
  202. }
  203. record.setFemaleCount(femaleCount);
  204. needCout = femaleCount;
  205. if(allArrangedFemaleCountMap.get(record.getId()) != null){
  206. distributeCount = (allArrangedFemaleCountMap.get(record.getId()) == null ? 0 : allArrangedFemaleCountMap.get(record.getId()));
  207. }
  208. }else{
  209. needCout = allStayCountMap.get(record.getId());
  210. if(allArrangedCountMap.get(record.getId()) != null){
  211. distributeCount = (allArrangedCountMap.get(record.getId()) == null ? 0 : allArrangedCountMap.get(record.getId()));
  212. }
  213. if(allStayMaleCountMap.get(record.getId()) != null){
  214. maleCount = allStayMaleCountMap.get(record.getId()) - (allArrangedMaleCountMap.get(record.getId()) == null ? 0 : allArrangedMaleCountMap.get(record.getId()));
  215. }
  216. if(maleCount < 0){
  217. maleCount = 0;
  218. }
  219. record.setMaleCount(maleCount);
  220. if(allStayFemaleCountMap.get(record.getId()) != null){
  221. femaleCount = allStayFemaleCountMap.get(record.getId()) - (allArrangedFemaleCountMap.get(record.getId()) == null ? 0 : allArrangedFemaleCountMap.get(record.getId()));
  222. }
  223. if(femaleCount < 0){
  224. femaleCount = 0;
  225. }
  226. record.setFemaleCount(femaleCount);
  227. }
  228. if(needCout == null){
  229. needCout = 0;
  230. }
  231. if(distributeCount == null){
  232. distributeCount = 0;
  233. }
  234. record.setNeedCount(needCout);
  235. record.setDistributeCount(distributeCount);
  236. }
  237. return classInfo;
  238. }
  239. @Override
  240. public Page<DistributeRoomBedPageVo> getDistributeRoomBedInfo(Page<DistributeRoomBedPageDto> page, DistributeRoomBedPageDto dto) {
  241. return roomBedMapper.getDistributeRoomBedInfo(page, dto);
  242. }
  243. /**
  244. * 分配床位
  245. * @param dto
  246. * @return
  247. */
  248. @Override
  249. public Boolean distributeRoomBed(DistributeRoomBedDto dto) {
  250. List<Room> roomList = roomMapper.selectList(new QueryWrapper<Room>().lambda().in(Room::getId, dto.getRoomIds()));
  251. Set<String> genderSet = new HashSet<>();
  252. //存入每个寝室已经入住的班级id
  253. Map<Long, Long> roomClassMaps = new HashMap<>();
  254. for (Room room : roomList) {
  255. genderSet.add(room.getGender());
  256. roomClassMaps.put(room.getId(), null);
  257. }
  258. Date modifyDate = new Date();
  259. Long modifyUserId = StpUtil.getLoginIdAsLong();
  260. //查询每个班的学生,修改床位信息
  261. Map<Long, Integer> classDistributeBedNumber = new HashMap<>();
  262. Map<Long, Integer> classStudent = new HashMap<>();
  263. //查询学生住宿费缴费状态
  264. List<StudentPayStatusVo> studentPayStatus = roomBedMapper.getStudentPayStatus(dto);
  265. Map<Long, Integer> payStatusMap = new HashMap<>();
  266. for (StudentPayStatusVo payStatus : studentPayStatus) {
  267. payStatusMap.put(payStatus.getId(), (payStatus.getPayStatus() == null?0:payStatus.getPayStatus()));
  268. }
  269. //按照性别分组分配
  270. for (String genderNumber : genderSet) {
  271. int i = 0;
  272. //根据性别查询出所有空床位信息
  273. List<RoomBed> bedInfoList = roomBedMapper.selectList(
  274. new MPJLambdaWrapper<RoomBed>()
  275. .select(RoomBed::getId)
  276. .select(RoomBed.class, x -> VoToColumnUtil.fieldsToColumns(RoomBed.class).contains(x.getProperty()))
  277. .innerJoin(Room.class, Room::getId, RoomBed::getRoomId)
  278. .eq(Room::getGender, genderNumber)
  279. .isNull(RoomBed::getStudentUserId)
  280. .eq(RoomBed::getIsCheckIn, 0)
  281. .in(RoomBed::getRoomId, dto.getRoomIds())
  282. );
  283. //按照班级分配
  284. for (Long classId : dto.getClassIds()) {
  285. //先查询出班上的在读住校生
  286. List<BaseStudent> studentList = baseStudentMapper.selectList(
  287. MPJWrappers.<BaseStudent>lambdaJoin()
  288. .select(BaseStudent::getUserId)
  289. .eq(BaseClass::getId, classId)
  290. .eq(XjrUser::getGender, genderNumber)
  291. .eq(BaseStudentSchoolRoll::getStduyStatus, "FB3002")
  292. .eq(BaseStudentSchoolRoll::getArchivesStatus, "FB2901")//只查询在读学生
  293. .eq(BaseStudent::getDeleteMark, DeleteMark.NODELETE.getCode())
  294. .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
  295. .innerJoin(XjrUser.class, XjrUser::getId, BaseStudent::getUserId)
  296. .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, BaseStudent::getUserId)
  297. .leftJoin(BaseClass.class, BaseClass::getId, BaseStudentSchoolRoll::getClassId)
  298. );
  299. //已分配床位数
  300. int distributeBedNumber = 0;
  301. //先分配已缴费的,再分配未交费的,把已缴费的学生排序到一起
  302. List<BaseStudent> studentOrderList = new ArrayList<>();
  303. for (BaseStudent baseStudent : studentList) {
  304. if(payStatusMap.get(baseStudent.getUserId()) != null && payStatusMap.get(baseStudent.getUserId()) == 1){
  305. studentOrderList.add(baseStudent);
  306. }
  307. }
  308. for (BaseStudent baseStudent : studentList) {
  309. if(payStatusMap.get(baseStudent.getUserId()) == null || payStatusMap.get(baseStudent.getUserId()) == 0){
  310. studentOrderList.add(baseStudent);
  311. }
  312. }
  313. //判断生成策略,是否需要混合寝室
  314. if(dto.getIsNeedMaxRoom() == 0 && i <= bedInfoList.size()){
  315. //预先查看下一个床位所属寝室是否已经有其他班级入住,有就直接跳过
  316. for (int j = i; j < bedInfoList.size(); j ++) {
  317. if(roomClassMaps.get(bedInfoList.get(j).getRoomId()) != null && !classId.equals(roomClassMaps.get(bedInfoList.get(j).getRoomId())) ){
  318. i ++;
  319. }
  320. }
  321. }
  322. //执行床位分配
  323. for (BaseStudent studentInfoVo : studentOrderList) {
  324. if(i >= bedInfoList.size()){
  325. continue;
  326. }
  327. RoomBed roomBed = bedInfoList.get(i);
  328. roomBed.setStudentUserId(studentInfoVo.getUserId());
  329. roomBed.setModifyDate(modifyDate);
  330. roomBed.setModifyUserId(modifyUserId);
  331. roomBedMapper.updateById(roomBed);
  332. i ++;
  333. distributeBedNumber ++;
  334. //分配好一个学生之后,将这个寝室已入住的班级存入
  335. roomClassMaps.putIfAbsent(roomBed.getRoomId(), classId);
  336. }
  337. classDistributeBedNumber.put(classId, distributeBedNumber);
  338. classStudent.put(classId, studentList.size());
  339. }
  340. }
  341. Map<Long, Long> classGradeMap = new HashMap<>();
  342. baseClassMapper.selectList(
  343. MPJWrappers.<BaseClass>lambdaJoin().in(BaseClass::getId, dto.getClassIds())
  344. ).forEach((baseClass)->{
  345. classGradeMap.put(baseClass.getId(), baseClass.getGradeId());
  346. });
  347. //插入记录表 room_bed_record
  348. Integer maxSortCode = roomBedRecordMapper.getMaxSortCode();
  349. for (Long classId : classGradeMap.keySet()) {
  350. maxSortCode ++;
  351. // Integer studentCount = classStudent.get(classId);
  352. RoomBedRecord record = new RoomBedRecord();
  353. record.setClassId(classId);
  354. record.setGradeId(classGradeMap.get(classId));
  355. record.setCreateDate(modifyDate);
  356. record.setSortCode(maxSortCode);
  357. record.setNeedBedNumber(classStudent.get(classId));
  358. record.setDistributeBedNumber(classDistributeBedNumber.get(classId));
  359. record.setDeleteMark(DeleteMark.NODELETE.getCode());
  360. roomBedRecordMapper.insert(record);
  361. }
  362. //查询每个寝室住入的班级数量,大于2的设置为混合寝室
  363. List<RoomClassCountVo> classCountVoList = roomMapper.getRoomClassCount(dto.getRoomIds());
  364. for (RoomClassCountVo roomClassCountVo : classCountVoList) {
  365. if(roomClassCountVo.getClassCount() > 1){
  366. Room updRoom = roomMapper.selectById(roomClassCountVo.getId());
  367. updRoom.setIsMax(1);
  368. roomMapper.updateById(updRoom);
  369. }
  370. }
  371. return true;
  372. }
  373. @Override
  374. public List<DistributeResultClassVo> getDistributeResult(DistributeRoomBedDto dto) {
  375. List<DistributeResultListVo> list = roomBedMapper.getDistributeResult(dto);
  376. List<BaseClass> classList = baseClassMapper.selectList(
  377. Wrappers.lambdaQuery(BaseClass.class).in(BaseClass::getId, dto.getClassIds())
  378. .select(BaseClass.class, x -> VoToColumnUtil.fieldsToColumns(BaseClass.class).contains(x.getProperty()))
  379. );
  380. List<DistributeResultClassVo> result = new ArrayList<>();
  381. for (BaseClass baseClass : classList) {
  382. DistributeResultClassVo classVo = new DistributeResultClassVo();
  383. classVo.setClassName(baseClass.getName());
  384. List<DistributeResultListVo> studentList = new ArrayList<>();
  385. for (DistributeResultListVo listVo : list) {
  386. if(listVo.getClassId() == null || !listVo.getClassId().equals(baseClass.getId().toString())){
  387. continue;
  388. }
  389. studentList.add(listVo);
  390. }
  391. classVo.setStudentList(studentList);
  392. result.add(classVo);
  393. }
  394. return result;
  395. }
  396. @Override
  397. public List<AdjustBedClassPageVo> getClassStudetBed(AdjustClassPageDto dto) {
  398. List<BaseClass> classList = baseClassMapper.selectList(
  399. new QueryWrapper<BaseClass>().lambda()
  400. .eq(BaseClass::getDeleteMark, DeleteMark.NODELETE.getCode())
  401. .eq(ObjectUtil.isNotNull(dto.getClassId()), BaseClass::getId, dto.getClassId())
  402. .eq(ObjectUtil.isNotNull(dto.getGradeId()), BaseClass::getGradeId, dto.getGradeId())
  403. );
  404. List<AdjustBedClassPageVo> result = new ArrayList<>();
  405. List<AdjustBedClassStudentPageVo> allStudent = roomBedMapper.getClassStudetBed(dto);
  406. //查询缴费状态
  407. DistributeRoomBedDto distributeRoomBedDto = new DistributeRoomBedDto();
  408. List<Long> classIds = new ArrayList<>();
  409. for (BaseClass baseClass : classList) {
  410. classIds.add(baseClass.getId());
  411. }
  412. distributeRoomBedDto.setClassIds(classIds);
  413. List<StudentPayStatusVo> studentPayStatusVoList = roomBedMapper.getStudentPayStatus(distributeRoomBedDto);
  414. Map<Long, Integer> payStatusMap = new HashMap<>();
  415. for (StudentPayStatusVo statusVo : studentPayStatusVoList) {
  416. Integer payStatus = 0;
  417. if(statusVo.getPayStatus() != null){
  418. payStatus = statusVo.getPayStatus();
  419. }
  420. payStatusMap.put(statusVo.getId(), payStatus);
  421. }
  422. for (BaseClass classOne : classList) {
  423. List<AdjustBedClassStudentPageVo> studentList = new ArrayList<>();
  424. for (AdjustBedClassStudentPageVo adjustBedClassStudentPageVo : allStudent) {
  425. if(!classOne.getId().toString().equals(adjustBedClassStudentPageVo.getClassId())){
  426. continue;
  427. }
  428. Integer payStatus = payStatusMap.get(Long.valueOf(adjustBedClassStudentPageVo.getUserId()));
  429. if(payStatus == null){
  430. payStatus = 0;
  431. }
  432. adjustBedClassStudentPageVo.setPayStatus(payStatus);
  433. studentList.add(adjustBedClassStudentPageVo);
  434. }
  435. if(studentList.isEmpty()){
  436. continue;
  437. }
  438. AdjustBedClassPageVo adjustBedClassPageVo = BeanUtil.toBean(classOne, AdjustBedClassPageVo.class);
  439. adjustBedClassPageVo.setStudentList(studentList);
  440. result.add(adjustBedClassPageVo);
  441. }
  442. return result;
  443. }
  444. @Override
  445. public List<AdjustBedStudentPageVo> getBedStudetInfo(AdjustBedPageDto dto) {
  446. return roomBedMapper.getBedStudentInfo(dto);
  447. }
  448. @Override
  449. public Page<NoBedStudentPageVo> getNoBedStudent(Page<AdjustBedPageDto> page, AdjustBedPageDto dto) {
  450. return roomBedMapper.getNoBedStudent(page, dto);
  451. }
  452. @Override
  453. public Boolean adjustBed(AdjustStudentBedDto dto) {
  454. //查询学生的性别
  455. XjrUser xjrUser = xjrUserMapper.selectById(dto.getStudentUserId());
  456. String studentGender = xjrUser.getGender();
  457. // if(1 == xjrUser.getGender()){
  458. // studentGender = "SB10001";
  459. // }else if(2 == xjrUser.getGender()){
  460. // studentGender = "SB10002";
  461. // }
  462. RoomBed roomBedInfo = roomBedMapper.selectById(dto.getBedId());
  463. Room room = roomMapper.selectById(roomBedInfo.getRoomId());
  464. if(room == null){
  465. throw new MyException("为查询到该床位");
  466. }
  467. if(!room.getGender().equals(studentGender)){
  468. String genderStr = "";
  469. if("SB10001".equals(room.getGender())){
  470. genderStr = "男";
  471. }else if("SB10002".equals(room.getGender())){
  472. genderStr = "女";
  473. }
  474. throw new MyException("该学生无法入住" + genderStr + "寝室");
  475. }
  476. //先清空学生原来的床位
  477. UpdateWrapper<RoomBed> updateWrapper = new UpdateWrapper<>();
  478. updateWrapper.eq("student_user_id", dto.getStudentUserId());
  479. updateWrapper.setSql("student_user_id = null");
  480. updateWrapper.setSql("is_check_in = 0");
  481. List<Long> roomIds = new ArrayList<>();
  482. List<RoomBed> roomBedList = roomBedMapper.selectList(new QueryWrapper<RoomBed>().lambda().eq(RoomBed::getStudentUserId, dto.getStudentUserId()));
  483. for (RoomBed roomBed : roomBedList) {
  484. roomBedMapper.update(roomBed, updateWrapper);
  485. roomIds.add(roomBed.getRoomId());
  486. }
  487. //再把学生保存到新的床位
  488. roomBedMapper.updateById(new RoomBed(){{
  489. setId(dto.getBedId());
  490. setStudentUserId(dto.getStudentUserId());
  491. }});
  492. if(roomIds.isEmpty()){
  493. return true;
  494. }
  495. //如果寝室的人是多个班级,将混合寝室改为是
  496. List<RoomClassCountVo> classCountVoList = roomMapper.getRoomClassCount(roomIds);
  497. for (RoomClassCountVo roomClassCountVo : classCountVoList) {
  498. if(roomClassCountVo.getClassCount() > 1){
  499. Room updRoom = roomMapper.selectById(roomClassCountVo.getId());
  500. updRoom.setIsMax(1);
  501. roomMapper.updateById(updRoom);
  502. }
  503. }
  504. return true;
  505. }
  506. }