RoomBedServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  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.xjrsoft.common.enums.DeleteMark;
  12. import com.xjrsoft.common.utils.VoToColumnUtil;
  13. import com.xjrsoft.module.base.entity.BaseClass;
  14. import com.xjrsoft.module.base.mapper.BaseClassMapper;
  15. import com.xjrsoft.module.room.dto.AdjustBedPageDto;
  16. import com.xjrsoft.module.room.dto.AdjustClassPageDto;
  17. import com.xjrsoft.module.room.dto.AdjustStudentBedDto;
  18. import com.xjrsoft.module.room.dto.DistributeClassPageDto;
  19. import com.xjrsoft.module.room.dto.DistributeRoomBedDto;
  20. import com.xjrsoft.module.room.dto.DistributeRoomBedPageDto;
  21. import com.xjrsoft.module.room.dto.RoomBedPageDto;
  22. import com.xjrsoft.module.room.entity.Room;
  23. import com.xjrsoft.module.room.entity.RoomBed;
  24. import com.xjrsoft.module.room.entity.RoomBedRecord;
  25. import com.xjrsoft.module.room.mapper.RoomBedMapper;
  26. import com.xjrsoft.module.room.mapper.RoomBedRecordMapper;
  27. import com.xjrsoft.module.room.mapper.RoomMapper;
  28. import com.xjrsoft.module.room.service.IRoomBedService;
  29. import com.xjrsoft.module.room.vo.AdjustBedClassPageVo;
  30. import com.xjrsoft.module.room.vo.AdjustBedClassStudentPageVo;
  31. import com.xjrsoft.module.room.vo.AdjustBedStudentPageVo;
  32. import com.xjrsoft.module.room.vo.DistributeClassPageVo;
  33. import com.xjrsoft.module.room.vo.DistributeResultClassVo;
  34. import com.xjrsoft.module.room.vo.DistributeResultListVo;
  35. import com.xjrsoft.module.room.vo.DistributeRoomBedPageVo;
  36. import com.xjrsoft.module.room.vo.NoBedStudentPageVo;
  37. import com.xjrsoft.module.room.vo.RoomBedPageVo;
  38. import com.xjrsoft.module.room.vo.RoomBedVo;
  39. import com.xjrsoft.module.room.vo.RoomClassCountVo;
  40. import com.xjrsoft.module.student.entity.BaseStudent;
  41. import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
  42. import com.xjrsoft.module.student.mapper.BaseStudentMapper;
  43. import com.xjrsoft.module.teacher.entity.XjrUser;
  44. import lombok.AllArgsConstructor;
  45. import org.springframework.stereotype.Service;
  46. import java.util.ArrayList;
  47. import java.util.Date;
  48. import java.util.HashMap;
  49. import java.util.List;
  50. import java.util.Map;
  51. /**
  52. * @title: 寝室床位
  53. * @Author dzx
  54. * @Date: 2023-12-27
  55. * @Version 1.0
  56. */
  57. @Service
  58. @AllArgsConstructor
  59. public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBed> implements IRoomBedService {
  60. private final RoomMapper roomMapper;
  61. private final RoomBedMapper roomBedMapper;
  62. private final BaseStudentMapper baseStudentMapper;
  63. private final BaseClassMapper baseClassMapper;
  64. private final RoomBedRecordMapper roomBedRecordMapper;
  65. @Override
  66. public Page<RoomBedPageVo> getPage(Page<RoomBedPageVo> page, RoomBedPageDto dto) {
  67. Page<RoomBedPageVo> result = roomBedMapper.getPage(page, dto);
  68. return result;
  69. }
  70. @Override
  71. public Boolean clearStudentInfo(List<Long> ids) {
  72. for (Long id : ids) {
  73. RoomBed roomBed = roomBedMapper.selectById(id);
  74. roomBed.setStudentUserId(null);
  75. // RoomBed roomBedData = BeanUtil.toBean(roomBed, RoomBed.class);
  76. // roomBedMapper.updateById(new RoomBed(){{
  77. // setId(id);
  78. // setStudentUserId(null);
  79. // }});
  80. UpdateWrapper<RoomBed> updateWrapper = new UpdateWrapper<>();
  81. updateWrapper.eq("id", id);
  82. updateWrapper.setSql("student_user_id = null");
  83. updateWrapper.setSql("is_check_in = 0");
  84. roomBedMapper.update(roomBed, updateWrapper);
  85. }
  86. return true;
  87. }
  88. @Override
  89. public Boolean clearStudentInfoByRoomId(Long id) {
  90. List<RoomBed> bedList = roomBedMapper.selectList(
  91. MPJWrappers.<RoomBed>lambdaJoin().eq(RoomBed::getRoomId, id)
  92. );
  93. for (RoomBed roomBed : bedList) {
  94. UpdateWrapper<RoomBed> updateWrapper = new UpdateWrapper<>();
  95. updateWrapper.eq("id", roomBed.getId());
  96. updateWrapper.setSql("student_user_id = null");
  97. updateWrapper.setSql("is_check_in = 0");
  98. roomBedMapper.update(roomBed, updateWrapper);
  99. }
  100. return true;
  101. }
  102. @Override
  103. public Boolean clearStudentInfoByBedId(Long id) {
  104. UpdateWrapper<RoomBed> updateWrapper = new UpdateWrapper<>();
  105. updateWrapper.eq("id", id);
  106. updateWrapper.setSql("student_user_id = null");
  107. updateWrapper.setSql("is_check_in = 0");
  108. RoomBed roomBed = roomBedMapper.selectById(id);
  109. roomBedMapper.update(roomBed, updateWrapper);
  110. return true;
  111. }
  112. @Override
  113. public Page<DistributeClassPageVo> getDistributeClassInfo(Page<DistributeClassPageDto> page, DistributeClassPageDto dto) {
  114. return roomBedMapper.getDistributeClassInfo(page, dto);
  115. }
  116. @Override
  117. public Page<DistributeRoomBedPageVo> getDistributeRoomBedInfo(Page<DistributeRoomBedPageDto> page, DistributeRoomBedPageDto dto) {
  118. return roomBedMapper.getDistributeRoomBedInfo(page, dto);
  119. }
  120. @Override
  121. public Boolean distributeRoomBed(DistributeRoomBedDto dto) {
  122. //查询出所有床位信息
  123. List<RoomBedVo> bedInfoList = roomBedMapper.getBedInfo(dto.getRoomIds());
  124. Room room = roomMapper.selectById(dto.getRoomIds().get(0));
  125. String gender = room.getGender();
  126. Integer genderNumber = null;
  127. if("SB10001".equals(gender)){
  128. genderNumber = 1;
  129. }else if("SB10002".equals(gender)){
  130. genderNumber = 2;
  131. }
  132. Date modifyDate = new Date();
  133. Long modifyUserId = StpUtil.getLoginIdAsLong();
  134. //查询每个班的学生,修改床位信息
  135. int i = 0;
  136. Map<Long, Integer> classDistributeBedNumber = new HashMap<>();
  137. Map<Long, Integer> classStudent = new HashMap<>();
  138. for (Long classId : dto.getClassIds()) {
  139. List<BaseStudent> studentList = baseStudentMapper.selectList(
  140. MPJWrappers.<BaseStudent>lambdaJoin()
  141. .select(BaseStudent::getUserId)
  142. .eq(BaseClass::getId, classId)
  143. .eq(XjrUser::getGender, genderNumber)
  144. .eq(BaseStudentSchoolRoll::getStduyStatus, "FB3001")
  145. .eq(BaseStudent::getDeleteMark, DeleteMark.NODELETE.getCode())
  146. .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
  147. .innerJoin(XjrUser.class, XjrUser::getId, BaseStudent::getUserId)
  148. .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, BaseStudent::getUserId)
  149. .leftJoin(BaseClass.class, BaseClass::getId, BaseStudentSchoolRoll::getClassId)
  150. );
  151. //已分配床位数
  152. int distributeBedNumber = 0;
  153. for (BaseStudent studentInfoVo : studentList) {
  154. if(i >= bedInfoList.size()){
  155. continue;
  156. }
  157. RoomBedVo roomBedVo = bedInfoList.get(i);
  158. RoomBed roomBed = BeanUtil.toBean(roomBedVo, RoomBed.class);
  159. roomBed.setStudentUserId(studentInfoVo.getUserId());
  160. roomBed.setModifyDate(modifyDate);
  161. roomBed.setModifyUserId(modifyUserId);
  162. roomBedMapper.updateById(roomBed);
  163. i ++;
  164. distributeBedNumber ++;
  165. }
  166. classDistributeBedNumber.put(classId, distributeBedNumber);
  167. classStudent.put(classId, studentList.size());
  168. }
  169. Map<Long, Long> classGradeMap = new HashMap<>();
  170. baseClassMapper.selectList(
  171. MPJWrappers.<BaseClass>lambdaJoin().in(BaseClass::getId, dto.getClassIds())
  172. ).forEach((baseClass)->{
  173. classGradeMap.put(baseClass.getId(), baseClass.getGradeId());
  174. });
  175. //插入记录表 room_bed_record
  176. Integer maxSortCode = roomBedRecordMapper.getMaxSortCode();
  177. for (Long classId : classGradeMap.keySet()) {
  178. maxSortCode ++;
  179. Integer studentCount = classStudent.get(classId);
  180. RoomBedRecord record = new RoomBedRecord();
  181. record.setClassId(classId);
  182. record.setGradeId(classGradeMap.get(classId));
  183. record.setCreateDate(modifyDate);
  184. record.setSortCode(maxSortCode);
  185. record.setNeedBedNumber(classStudent.get(classId));
  186. record.setDistributeBedNumber(classDistributeBedNumber.get(classId));
  187. record.setDeleteMark(DeleteMark.NODELETE.getCode());
  188. roomBedRecordMapper.insert(record);
  189. }
  190. //查询每个寝室住入的班级数量,大于2的设置为混合寝室
  191. List<RoomClassCountVo> classCountVoList = roomMapper.getRoomClassCount(dto.getRoomIds());
  192. for (RoomClassCountVo roomClassCountVo : classCountVoList) {
  193. if(roomClassCountVo.getClassCount() > 1){
  194. Room updRoom = roomMapper.selectById(roomClassCountVo.getId());
  195. updRoom.setIsMax(1);
  196. roomMapper.updateById(updRoom);
  197. }
  198. }
  199. return true;
  200. }
  201. @Override
  202. public List<DistributeResultClassVo> getDistributeResult(DistributeRoomBedDto dto) {
  203. List<DistributeResultListVo> list = roomBedMapper.getDistributeResult(dto);
  204. List<BaseClass> classList = baseClassMapper.selectList(
  205. Wrappers.lambdaQuery(BaseClass.class).in(BaseClass::getId, dto.getClassIds())
  206. .select(BaseClass.class, x -> VoToColumnUtil.fieldsToColumns(BaseClass.class).contains(x.getProperty()))
  207. );
  208. List<DistributeResultClassVo> result = new ArrayList<>();
  209. for (BaseClass baseClass : classList) {
  210. DistributeResultClassVo classVo = new DistributeResultClassVo();
  211. classVo.setClassName(baseClass.getName());
  212. List<DistributeResultListVo> studentList = new ArrayList<>();
  213. for (DistributeResultListVo listVo : list) {
  214. if(listVo.getClassId() == null || !listVo.getClassId().equals(baseClass.getId().toString())){
  215. continue;
  216. }
  217. studentList.add(listVo);
  218. }
  219. classVo.setStudentList(studentList);
  220. result.add(classVo);
  221. }
  222. return result;
  223. }
  224. @Override
  225. public List<AdjustBedClassPageVo> getClassStudetBed(AdjustClassPageDto dto) {
  226. List<BaseClass> classList = baseClassMapper.selectList(
  227. new QueryWrapper<BaseClass>().lambda()
  228. .eq(BaseClass::getDeleteMark, DeleteMark.NODELETE.getCode())
  229. .eq(ObjectUtil.isNotNull(dto.getClassId()), BaseClass::getId, dto.getClassId())
  230. .eq(ObjectUtil.isNotNull(dto.getGradeId()), BaseClass::getGradeId, dto.getGradeId())
  231. );
  232. List<AdjustBedClassPageVo> result = BeanUtil.copyToList(classList, AdjustBedClassPageVo.class);
  233. List<AdjustBedClassStudentPageVo> allStudent = roomBedMapper.getClassStudetBed(dto);
  234. for (AdjustBedClassPageVo adjustBedClassPageVo : result) {
  235. List<AdjustBedClassStudentPageVo> studentList = new ArrayList<>();
  236. for (AdjustBedClassStudentPageVo adjustBedClassStudentPageVo : allStudent) {
  237. if(!adjustBedClassPageVo.getId().equals(adjustBedClassStudentPageVo.getClassId())){
  238. continue;
  239. }
  240. studentList.add(adjustBedClassStudentPageVo);
  241. }
  242. adjustBedClassPageVo.setStudentList(studentList);
  243. }
  244. return result;
  245. }
  246. @Override
  247. public List<AdjustBedStudentPageVo> getBedStudetInfo(AdjustBedPageDto dto) {
  248. return roomBedMapper.getBedStudentInfo(dto);
  249. }
  250. @Override
  251. public Page<NoBedStudentPageVo> getNoBedStudent(Page<AdjustBedPageDto> page, AdjustBedPageDto dto) {
  252. return roomBedMapper.getNoBedStudent(page, dto);
  253. }
  254. @Override
  255. public Boolean adjustBed(AdjustStudentBedDto dto) {
  256. roomBedMapper.updateById(new RoomBed(){{
  257. setId(dto.getBedId());
  258. setStudentUserId(dto.getStudentUserId());
  259. }});
  260. return true;
  261. }
  262. }