Parcourir la source

寝室床位分配,可设置选择策略是否生成混合寝室

dzx il y a 1 an
Parent
commit
ecef2fd1ed

+ 3 - 0
src/main/java/com/xjrsoft/module/room/dto/DistributeRoomBedDto.java

@@ -24,4 +24,7 @@ public class DistributeRoomBedDto implements Serializable {
     @ApiModelProperty("寝室ids")
     private List<Long> roomIds;
 
+    @ApiModelProperty("是否需要混合寝室(0:否 1:是")
+    private Integer isNeedMaxRoom = 0;
+
 }

+ 21 - 2
src/main/java/com/xjrsoft/module/room/service/impl/RoomBedServiceImpl.java

@@ -270,8 +270,11 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
     public Boolean distributeRoomBed(DistributeRoomBedDto dto) {
         List<Room> roomList = roomMapper.selectList(new QueryWrapper<Room>().lambda().in(Room::getId, dto.getRoomIds()));
         Set<String> genderSet = new HashSet<>();
+        //存入每个寝室已经入住的班级id
+        Map<Long, Long> roomClassMaps = new HashMap<>();
         for (Room room : roomList) {
             genderSet.add(room.getGender());
+            roomClassMaps.put(room.getId(), null);
         }
 
         Date modifyDate = new Date();
@@ -285,6 +288,7 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
         for (StudentPayStatusVo payStatus : studentPayStatus) {
             payStatusMap.put(payStatus.getId(), (payStatus.getPayStatus() == null?0:payStatus.getPayStatus()));
         }
+        //按照性别分组分配
         for (String genderNumber : genderSet) {
             int i = 0;
             //根据性别查询出所有空床位信息
@@ -298,8 +302,9 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
                 .eq(RoomBed::getIsCheckIn, 0)
                 .in(RoomBed::getRoomId, dto.getRoomIds())
             );
-
+            //按照班级分配
             for (Long classId : dto.getClassIds()) {
+                //先查询出班上的在读住校生
                 List<BaseStudent> studentList = baseStudentMapper.selectList(
                     MPJWrappers.<BaseStudent>lambdaJoin()
                     .select(BaseStudent::getUserId)
@@ -327,6 +332,17 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
                         studentOrderList.add(baseStudent);
                     }
                 }
+                //判断生成策略,是否需要混合寝室
+                if(dto.getIsNeedMaxRoom() == 0 && i <= bedInfoList.size()){
+                    //预先查看下一个床位所属寝室是否已经有其他班级入住,有就直接跳过
+                    for (int j = i; j < bedInfoList.size(); j ++) {
+                        if(roomClassMaps.get(bedInfoList.get(j).getRoomId()) != null && !classId.equals(roomClassMaps.get(bedInfoList.get(j).getRoomId())) ){
+                            i ++;
+                        }
+                    }
+                }
+
+                //执行床位分配
                 for (BaseStudent studentInfoVo : studentOrderList) {
                     if(i >= bedInfoList.size()){
                         continue;
@@ -338,6 +354,9 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
                     roomBedMapper.updateById(roomBed);
                     i ++;
                     distributeBedNumber ++;
+
+                    //分配好一个学生之后,将这个寝室已入住的班级存入
+                    roomClassMaps.putIfAbsent(roomBed.getRoomId(), classId);
                 }
                 classDistributeBedNumber.put(classId, distributeBedNumber);
                 classStudent.put(classId, studentList.size());
@@ -354,7 +373,7 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
         Integer maxSortCode = roomBedRecordMapper.getMaxSortCode();
         for (Long classId : classGradeMap.keySet()) {
             maxSortCode ++;
-            Integer studentCount = classStudent.get(classId);
+//            Integer studentCount = classStudent.get(classId);
             RoomBedRecord record = new RoomBedRecord();
             record.setClassId(classId);
             record.setGradeId(classGradeMap.get(classId));