RoomBedServiceImpl.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. package com.xjrsoft.module.room.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import cn.hutool.core.bean.BeanUtil;
  4. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.github.yulichang.base.MPJBaseServiceImpl;
  7. import com.github.yulichang.toolkit.MPJWrappers;
  8. import com.xjrsoft.common.enums.DeleteMark;
  9. import com.xjrsoft.common.utils.VoToColumnUtil;
  10. import com.xjrsoft.module.base.entity.BaseClass;
  11. import com.xjrsoft.module.base.mapper.BaseClassMapper;
  12. import com.xjrsoft.module.room.dto.DistributeClassPageDto;
  13. import com.xjrsoft.module.room.dto.DistributeRoomBedDto;
  14. import com.xjrsoft.module.room.dto.DistributeRoomBedPageDto;
  15. import com.xjrsoft.module.room.dto.RoomBedPageDto;
  16. import com.xjrsoft.module.room.entity.Room;
  17. import com.xjrsoft.module.room.entity.RoomBed;
  18. import com.xjrsoft.module.room.entity.RoomBedRecord;
  19. import com.xjrsoft.module.room.mapper.RoomBedMapper;
  20. import com.xjrsoft.module.room.mapper.RoomBedRecordMapper;
  21. import com.xjrsoft.module.room.mapper.RoomMapper;
  22. import com.xjrsoft.module.room.service.IRoomBedService;
  23. import com.xjrsoft.module.room.vo.DistributeClassPageVo;
  24. import com.xjrsoft.module.room.vo.DistributeResultClassVo;
  25. import com.xjrsoft.module.room.vo.DistributeResultListVo;
  26. import com.xjrsoft.module.room.vo.DistributeRoomBedPageVo;
  27. import com.xjrsoft.module.room.vo.RoomBedPageVo;
  28. import com.xjrsoft.module.room.vo.RoomBedVo;
  29. import com.xjrsoft.module.room.vo.RoomClassCountVo;
  30. import com.xjrsoft.module.student.entity.BaseStudent;
  31. import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
  32. import com.xjrsoft.module.student.mapper.BaseStudentMapper;
  33. import com.xjrsoft.module.teacher.entity.XjrUser;
  34. import lombok.AllArgsConstructor;
  35. import org.springframework.stereotype.Service;
  36. import java.util.ArrayList;
  37. import java.util.Date;
  38. import java.util.HashMap;
  39. import java.util.List;
  40. import java.util.Map;
  41. /**
  42. * @title: 寝室床位
  43. * @Author dzx
  44. * @Date: 2023-12-27
  45. * @Version 1.0
  46. */
  47. @Service
  48. @AllArgsConstructor
  49. public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBed> implements IRoomBedService {
  50. private final RoomMapper roomMapper;
  51. private final RoomBedMapper roomBedMapper;
  52. private final BaseStudentMapper baseStudentMapper;
  53. private final BaseClassMapper baseClassMapper;
  54. private final RoomBedRecordMapper roomBedRecordMapper;
  55. @Override
  56. public Page<RoomBedPageVo> getPage(Page<RoomBedPageVo> page, RoomBedPageDto dto) {
  57. Page<RoomBedPageVo> result = roomBedMapper.getPage(page, dto);
  58. return result;
  59. }
  60. @Override
  61. public Boolean clearStudentInfo(List<Long> ids) {
  62. for (Long id : ids) {
  63. RoomBed roomBed = roomBedMapper.selectById(id);
  64. roomBed.setStudentUserId(null);
  65. roomBedMapper.updateById(roomBed);
  66. }
  67. return true;
  68. }
  69. @Override
  70. public Page<DistributeClassPageVo> getDistributeClassInfo(Page<DistributeClassPageVo> page, DistributeClassPageDto dto) {
  71. return roomBedMapper.getDistributeClassInfo(page, dto);
  72. }
  73. @Override
  74. public Page<DistributeRoomBedPageVo> getDistributeRoomBedInfo(Page<DistributeRoomBedPageVo> page, DistributeRoomBedPageDto dto) {
  75. return roomBedMapper.getDistributeRoomBedInfo(page, dto);
  76. }
  77. @Override
  78. public Boolean distributeRoomBed(DistributeRoomBedDto dto) {
  79. //查询出所有床位信息
  80. List<RoomBedVo> bedInfoList = roomBedMapper.getBedInfo(dto.getRoomIds());
  81. Room room = roomMapper.selectById(dto.getRoomIds().get(0));
  82. String gender = room.getGender();
  83. Integer genderNumber = null;
  84. if("SB10001".equals(gender)){
  85. genderNumber = 1;
  86. }else if("SB10002".equals(gender)){
  87. genderNumber = 2;
  88. }
  89. Date modifyDate = new Date();
  90. Long modifyUserId = StpUtil.getLoginIdAsLong();
  91. //查询每个班的学生,修改床位信息
  92. int i = 0;
  93. Map<Long, Integer> classDistributeBedNumber = new HashMap<>();
  94. Map<Long, Integer> classStudent = new HashMap<>();
  95. for (Long classId : dto.getClassIds()) {
  96. List<BaseStudent> studentList = baseStudentMapper.selectList(
  97. MPJWrappers.<BaseStudent>lambdaJoin()
  98. .select(BaseStudent::getUserId)
  99. .eq(BaseClass::getId, classId)
  100. .eq(XjrUser::getGender, genderNumber)
  101. .eq(BaseStudentSchoolRoll::getStduyStatus, "FB3001")
  102. .eq(BaseStudent::getDeleteMark, DeleteMark.NODELETE.getCode())
  103. .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
  104. .innerJoin(XjrUser.class, XjrUser::getId, BaseStudent::getUserId)
  105. .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, BaseStudent::getUserId)
  106. .leftJoin(BaseClass.class, BaseClass::getId, BaseStudentSchoolRoll::getClassId)
  107. );
  108. //已分配床位数
  109. int distributeBedNumber = 0;
  110. for (BaseStudent studentInfoVo : studentList) {
  111. if(i >= bedInfoList.size()){
  112. continue;
  113. }
  114. RoomBedVo roomBedVo = bedInfoList.get(i);
  115. RoomBed roomBed = BeanUtil.toBean(roomBedVo, RoomBed.class);
  116. roomBed.setStudentUserId(studentInfoVo.getUserId());
  117. roomBed.setModifyDate(modifyDate);
  118. roomBed.setModifyUserId(modifyUserId);
  119. roomBedMapper.updateById(roomBed);
  120. i ++;
  121. distributeBedNumber ++;
  122. }
  123. classDistributeBedNumber.put(classId, distributeBedNumber);
  124. classStudent.put(classId, studentList.size());
  125. }
  126. //插入记录表 room_bed_record
  127. classStudent.forEach((classId, studentCount)->{
  128. RoomBedRecord record = new RoomBedRecord();
  129. // record.setClassId();
  130. // roomBedRecordMapper.insert();
  131. });
  132. //查询每个寝室住入的班级数量,大于2的设置为混合寝室
  133. List<RoomClassCountVo> classCountVoList = roomMapper.getRoomClassCount(dto.getRoomIds());
  134. for (RoomClassCountVo roomClassCountVo : classCountVoList) {
  135. if(roomClassCountVo.getClassCount() > 1){
  136. Room updRoom = roomMapper.selectById(roomClassCountVo.getId());
  137. updRoom.setIsMax(1);
  138. roomMapper.updateById(updRoom);
  139. }
  140. }
  141. return true;
  142. }
  143. @Override
  144. public List<DistributeResultClassVo> getDistributeResult(DistributeRoomBedDto dto) {
  145. List<DistributeResultListVo> list = roomBedMapper.getDistributeResult(dto);
  146. List<BaseClass> classList = baseClassMapper.selectList(
  147. Wrappers.lambdaQuery(BaseClass.class).in(BaseClass::getId, dto.getClassIds())
  148. .select(BaseClass.class, x -> VoToColumnUtil.fieldsToColumns(BaseClass.class).contains(x.getProperty()))
  149. );
  150. List<DistributeResultClassVo> result = new ArrayList<>();
  151. for (BaseClass baseClass : classList) {
  152. DistributeResultClassVo classVo = new DistributeResultClassVo();
  153. classVo.setClassName(baseClass.getName());
  154. List<DistributeResultListVo> studentList = new ArrayList<>();
  155. for (DistributeResultListVo listVo : list) {
  156. if(listVo.getClassId() == null || !listVo.getClassId().equals(baseClass.getId().toString())){
  157. continue;
  158. }
  159. studentList.add(listVo);
  160. }
  161. classVo.setStudentList(studentList);
  162. result.add(classVo);
  163. }
  164. return result;
  165. }
  166. }