RoomValueWeekServiceImpl.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. package com.xjrsoft.module.room.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  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.xjrsoft.common.enums.DeleteMark;
  8. import com.xjrsoft.module.room.dto.AddRoomValueWeekDto;
  9. import com.xjrsoft.module.room.dto.RoomValueWeekPageDto;
  10. import com.xjrsoft.module.room.dto.UpdateRoomValueWeekDto;
  11. import com.xjrsoft.module.room.entity.RoomValueWeek;
  12. import com.xjrsoft.module.room.entity.RoomValueWeekItem;
  13. import com.xjrsoft.module.room.entity.WfRoomStayOvernight;
  14. import com.xjrsoft.module.room.mapper.RoomValueWeekItemMapper;
  15. import com.xjrsoft.module.room.mapper.RoomValueWeekMapper;
  16. import com.xjrsoft.module.room.mapper.WfRoomStayOvernightMapper;
  17. import com.xjrsoft.module.room.service.IRoomValueWeekService;
  18. import com.xjrsoft.module.room.vo.RoomValueWeekItemVo;
  19. import com.xjrsoft.module.room.vo.RoomValueWeekPageVo;
  20. import lombok.AllArgsConstructor;
  21. import org.springframework.stereotype.Service;
  22. import org.springframework.transaction.annotation.Transactional;
  23. import java.text.SimpleDateFormat;
  24. import java.time.ZoneId;
  25. import java.time.ZonedDateTime;
  26. import java.util.Date;
  27. import java.util.List;
  28. import java.util.Objects;
  29. import java.util.stream.Collectors;
  30. /**
  31. * @title: 宿管值班管理
  32. * @Author dzx
  33. * @Date: 2024-01-03
  34. * @Version 1.0
  35. */
  36. @Service
  37. @AllArgsConstructor
  38. public class RoomValueWeekServiceImpl extends MPJBaseServiceImpl<RoomValueWeekMapper, RoomValueWeek> implements IRoomValueWeekService {
  39. private final RoomValueWeekMapper roomValueWeekRoomValueWeekMapper;
  40. private final RoomValueWeekItemMapper roomValueWeekRoomValueWeekItemMapper;
  41. private final WfRoomStayOvernightMapper wfRoomStayOvernightMapper;
  42. @Override
  43. @Transactional(rollbackFor = Exception.class)
  44. public Boolean add(AddRoomValueWeekDto dto) {
  45. RoomValueWeek roomValueWeek = BeanUtil.toBean(dto, RoomValueWeek.class);
  46. Integer maxSortCode = roomValueWeekRoomValueWeekMapper.getMaxSortCode();
  47. roomValueWeek.setSortCode(maxSortCode + 1);
  48. roomValueWeekRoomValueWeekMapper.insert(roomValueWeek);
  49. Integer ItemMaxSortCode = roomValueWeekRoomValueWeekItemMapper.getMaxSortCode();
  50. if(dto.getMaleUserId() != null){
  51. RoomValueWeekItem maleItem = new RoomValueWeekItem();
  52. maleItem.setRoomValueWeekId(roomValueWeek.getId());
  53. maleItem.setRoomType("男寝");
  54. maleItem.setPostName("宿管");
  55. maleItem.setUserId(dto.getMaleUserId());
  56. maleItem.setNumberPeople(dto.getMaleStudents());
  57. maleItem.setSortCode(ItemMaxSortCode + 1);
  58. roomValueWeekRoomValueWeekItemMapper.insert(maleItem);
  59. }
  60. if(dto.getFemaleUserId() != null){
  61. RoomValueWeekItem femaleItem = new RoomValueWeekItem();
  62. femaleItem.setRoomValueWeekId(roomValueWeek.getId());
  63. femaleItem.setRoomType("女寝");
  64. femaleItem.setPostName("宿管");
  65. femaleItem.setUserId(dto.getFemaleUserId());
  66. femaleItem.setNumberPeople(dto.getFemaleStudents());
  67. femaleItem.setSortCode(ItemMaxSortCode + 2);
  68. roomValueWeekRoomValueWeekItemMapper.insert(femaleItem);
  69. }
  70. if(dto.getInstructorUserId() != null){
  71. RoomValueWeekItem instructorItem = new RoomValueWeekItem();
  72. instructorItem.setRoomValueWeekId(roomValueWeek.getId());
  73. instructorItem.setPostName("教官");
  74. instructorItem.setUserId(dto.getInstructorUserId());
  75. instructorItem.setSortCode(ItemMaxSortCode + 3);
  76. roomValueWeekRoomValueWeekItemMapper.insert(instructorItem);
  77. }
  78. return true;
  79. }
  80. @Override
  81. @Transactional(rollbackFor = Exception.class)
  82. public Boolean update(RoomValueWeek roomValueWeek) {
  83. roomValueWeekRoomValueWeekMapper.updateById(roomValueWeek);
  84. //********************************* RoomValueWeekItem 增删改 开始 *******************************************/
  85. {
  86. // 查出所有子级的id
  87. List<RoomValueWeekItem> roomValueWeekItemList = roomValueWeekRoomValueWeekItemMapper.selectList(Wrappers.lambdaQuery(RoomValueWeekItem.class).eq(RoomValueWeekItem::getRoomValueWeekId, roomValueWeek.getId()).select(RoomValueWeekItem::getId));
  88. List<Long> roomValueWeekItemIds = roomValueWeekItemList.stream().map(RoomValueWeekItem::getId).collect(Collectors.toList());
  89. //原有子表单 没有被删除的主键
  90. List<Long> roomValueWeekItemOldIds = roomValueWeek.getRoomValueWeekItemList().stream().map(RoomValueWeekItem::getId).filter(Objects::nonNull).collect(Collectors.toList());
  91. //找到需要删除的id
  92. List<Long> roomValueWeekItemRemoveIds = roomValueWeekItemIds.stream().filter(item -> !roomValueWeekItemOldIds.contains(item)).collect(Collectors.toList());
  93. for (RoomValueWeekItem roomValueWeekItem : roomValueWeek.getRoomValueWeekItemList()) {
  94. //如果不等于空则修改
  95. if (roomValueWeekItem.getId() != null) {
  96. roomValueWeekRoomValueWeekItemMapper.updateById(roomValueWeekItem);
  97. }
  98. //如果等于空 则新增
  99. else {
  100. //已经不存在的id 删除
  101. roomValueWeekItem.setRoomValueWeekId(roomValueWeek.getId());
  102. roomValueWeekRoomValueWeekItemMapper.insert(roomValueWeekItem);
  103. }
  104. }
  105. //已经不存在的id 删除
  106. if(roomValueWeekItemRemoveIds.size() > 0){
  107. roomValueWeekRoomValueWeekItemMapper.deleteBatchIds(roomValueWeekItemRemoveIds);
  108. }
  109. }
  110. //********************************* RoomValueWeekItem 增删改 结束 *******************************************/
  111. return true;
  112. }
  113. @Override
  114. @Transactional(rollbackFor = Exception.class)
  115. public Boolean delete(List<Long> ids) {
  116. roomValueWeekRoomValueWeekMapper.deleteBatchIds(ids);
  117. roomValueWeekRoomValueWeekItemMapper.delete(Wrappers.lambdaQuery(RoomValueWeekItem.class).in(RoomValueWeekItem::getRoomValueWeekId, ids));
  118. return true;
  119. }
  120. @Override
  121. public Page<RoomValueWeekPageVo> getPage(Page<RoomValueWeekPageDto> page, RoomValueWeekPageDto dto) {
  122. Page<RoomValueWeekPageVo> result = roomValueWeekRoomValueWeekItemMapper.getItemList(page, dto);
  123. return result;
  124. }
  125. @Override
  126. public Boolean updateNumberPeople() {
  127. Date date = new Date();
  128. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  129. List<RoomValueWeek> weeks = roomValueWeekRoomValueWeekMapper.selectList(
  130. new QueryWrapper<RoomValueWeek>().lambda()
  131. .ge(RoomValueWeek::getEndTime, sdf.format(date))
  132. .le(RoomValueWeek::getStartTime, sdf.format(date))
  133. );
  134. for (RoomValueWeek week : weeks) {
  135. List<RoomValueWeekItem> roomValueWeekItems = roomValueWeekRoomValueWeekItemMapper.selectList(
  136. new QueryWrapper<RoomValueWeekItem>().lambda().eq(RoomValueWeekItem::getRoomValueWeekId, week.getId())
  137. );
  138. for (RoomValueWeekItem roomValueWeekItem : roomValueWeekItems) {
  139. if("男寝".equals(roomValueWeekItem.getRoomType())){
  140. Long maleStudents = wfRoomStayOvernightMapper.selectCount(
  141. new QueryWrapper<WfRoomStayOvernight>().lambda()
  142. .eq(WfRoomStayOvernight::getGenderName, "男")
  143. .eq(WfRoomStayOvernight::getStatus, 1)
  144. .eq(WfRoomStayOvernight::getDeleteMark, DeleteMark.NODELETE.getCode())
  145. .le(WfRoomStayOvernight::getEndTime, sdf.format(week.getEndTime()))
  146. .ge(WfRoomStayOvernight::getStartTime, sdf.format(week.getStartTime()))
  147. );
  148. roomValueWeekRoomValueWeekItemMapper.updateById(new RoomValueWeekItem(){{
  149. setId(roomValueWeekItem.getId());
  150. setNumberPeople(maleStudents.intValue());
  151. }});
  152. }else if("女寝".equals(roomValueWeekItem.getRoomType())){
  153. Long FemaleStudents = wfRoomStayOvernightMapper.selectCount(
  154. new QueryWrapper<WfRoomStayOvernight>().lambda()
  155. .eq(WfRoomStayOvernight::getGenderName, "女")
  156. .eq(WfRoomStayOvernight::getStatus, 1)
  157. .eq(WfRoomStayOvernight::getDeleteMark, DeleteMark.NODELETE.getCode())
  158. .le(WfRoomStayOvernight::getEndTime, sdf.format(week.getEndTime()))
  159. .ge(WfRoomStayOvernight::getStartTime, sdf.format(week.getStartTime()))
  160. );
  161. roomValueWeekRoomValueWeekItemMapper.updateById(new RoomValueWeekItem(){{
  162. setId(roomValueWeekItem.getId());
  163. setNumberPeople(FemaleStudents.intValue());
  164. }});
  165. }
  166. }
  167. }
  168. return null;
  169. }
  170. @Override
  171. public RoomValueWeekItemVo getItemInfo(Long id) {
  172. RoomValueWeekItem roomValueWeekItem = roomValueWeekRoomValueWeekItemMapper.selectById(id);
  173. RoomValueWeekItemVo itemVo = BeanUtil.toBean(roomValueWeekItem, RoomValueWeekItemVo.class);
  174. RoomValueWeek roomValueWeek = roomValueWeekRoomValueWeekMapper.selectById(roomValueWeekItem.getRoomValueWeekId());
  175. ZoneId zoneId = ZoneId.systemDefault();
  176. itemVo.setStartTime(ZonedDateTime.ofInstant(roomValueWeek.getStartTime().toInstant(), zoneId).toLocalDate());
  177. itemVo.setStartTime(ZonedDateTime.ofInstant(roomValueWeek.getEndTime().toInstant(), zoneId).toLocalDate());
  178. return itemVo;
  179. }
  180. @Override
  181. public Boolean updateItem(UpdateRoomValueWeekDto dto) {
  182. roomValueWeekRoomValueWeekItemMapper.updateById(new RoomValueWeekItem(){{
  183. setId(dto.getId());
  184. setUserId(dto.getUserId());
  185. setNumberPeople(dto.getNumberPeople());
  186. }});
  187. return true;
  188. }
  189. }