Ver Fonte

分配床位,提交功能优化逻辑

dzx há 1 ano atrás
pai
commit
b6e5f52666

+ 56 - 39
src/main/java/com/xjrsoft/module/room/service/impl/RoomBedServiceImpl.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.toolkit.MPJWrappers;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.base.entity.BaseClass;
@@ -36,7 +37,6 @@ import com.xjrsoft.module.room.vo.DistributeResultListVo;
 import com.xjrsoft.module.room.vo.DistributeRoomBedPageVo;
 import com.xjrsoft.module.room.vo.NoBedStudentPageVo;
 import com.xjrsoft.module.room.vo.RoomBedPageVo;
-import com.xjrsoft.module.room.vo.RoomBedVo;
 import com.xjrsoft.module.room.vo.RoomClassCountVo;
 import com.xjrsoft.module.student.entity.BaseStudent;
 import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
@@ -49,8 +49,10 @@ import org.springframework.stereotype.Service;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
 * @title: 寝室床位
@@ -131,16 +133,22 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
 
     @Override
     public Boolean distributeRoomBed(DistributeRoomBedDto dto) {
-        //查询出所有床位信息
-        List<RoomBedVo> bedInfoList = roomBedMapper.getBedInfo(dto.getRoomIds());
-
-        Room room = roomMapper.selectById(dto.getRoomIds().get(0));
-        String gender = room.getGender();
-        Integer genderNumber = null;
-        if("SB10001".equals(gender)){
-            genderNumber = 1;
-        }else if("SB10002".equals(gender)){
-            genderNumber = 2;
+        List<Room> roomList = roomMapper.selectList(new QueryWrapper<Room>().lambda().in(Room::getId, dto.getRoomIds()));
+        Set<Integer> genderSet = new HashSet<>();
+        for (Room room : roomList) {
+            if("SB10001".equals(room.getGender())){
+                genderSet.add(1);
+            }else if("SB10002".equals(room.getGender())){
+                genderSet.add(2);
+            }
+        }
+        Map<Integer, String> genderMap = new HashMap<>();
+        for (Integer genderNumber : genderSet) {
+            if(genderNumber == 1){
+                genderMap.put(genderNumber, "SB10001");
+            }else if(genderNumber == 2){
+                genderMap.put(genderNumber, "SB10002");
+            }
         }
 
         Date modifyDate = new Date();
@@ -150,38 +158,47 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
         int i = 0;
         Map<Long, Integer> classDistributeBedNumber = new HashMap<>();
         Map<Long, Integer> classStudent = new HashMap<>();
-        for (Long classId : dto.getClassIds()) {
-            List<BaseStudent> studentList = baseStudentMapper.selectList(
-                MPJWrappers.<BaseStudent>lambdaJoin()
-                .select(BaseStudent::getUserId)
-                .eq(BaseClass::getId, classId)
-                .eq(XjrUser::getGender, genderNumber)
-                .eq(BaseStudentSchoolRoll::getStduyStatus, "FB3002")
-                .eq(BaseStudent::getDeleteMark, DeleteMark.NODELETE.getCode())
-                .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
-                .innerJoin(XjrUser.class, XjrUser::getId, BaseStudent::getUserId)
-                .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, BaseStudent::getUserId)
-                .leftJoin(BaseClass.class, BaseClass::getId, BaseStudentSchoolRoll::getClassId)
+        for (Integer genderNumber : genderSet) {
+            //根据性别查询出所有床位信息
+            List<RoomBed> bedInfoList = roomBedMapper.selectList(
+                new MPJLambdaWrapper<RoomBed>()
+                .innerJoin(Room.class, Room::getId, RoomBed::getRoomId)
+                .eq(Room::getGender, genderMap.get(genderNumber))
+                .in(RoomBed::getRoomId, dto.getRoomIds())
             );
-            //已分配床位数
-            int distributeBedNumber = 0;
-            for (BaseStudent studentInfoVo : studentList) {
-                if(i >= bedInfoList.size()){
-                    continue;
-                }
-                RoomBedVo roomBedVo = bedInfoList.get(i);
-                RoomBed roomBed = BeanUtil.toBean(roomBedVo, RoomBed.class);
-                roomBed.setStudentUserId(studentInfoVo.getUserId());
-                roomBed.setModifyDate(modifyDate);
-                roomBed.setModifyUserId(modifyUserId);
-                roomBedMapper.updateById(roomBed);
-                i ++;
-                distributeBedNumber ++;
 
+            for (Long classId : dto.getClassIds()) {
+                List<BaseStudent> studentList = baseStudentMapper.selectList(
+                    MPJWrappers.<BaseStudent>lambdaJoin()
+                    .select(BaseStudent::getUserId)
+                    .eq(BaseClass::getId, classId)
+                    .eq(XjrUser::getGender, genderNumber)
+                    .eq(BaseStudentSchoolRoll::getStduyStatus, "FB3002")
+                    .eq(BaseStudent::getDeleteMark, DeleteMark.NODELETE.getCode())
+                    .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
+                    .innerJoin(XjrUser.class, XjrUser::getId, BaseStudent::getUserId)
+                    .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, BaseStudent::getUserId)
+                    .leftJoin(BaseClass.class, BaseClass::getId, BaseStudentSchoolRoll::getClassId)
+                );
+                //已分配床位数
+                int distributeBedNumber = 0;
+                for (BaseStudent studentInfoVo : studentList) {
+                    if(i >= bedInfoList.size()){
+                        continue;
+                    }
+                    RoomBed roomBed = bedInfoList.get(i);
+                    roomBed.setStudentUserId(studentInfoVo.getUserId());
+                    roomBed.setModifyDate(modifyDate);
+                    roomBed.setModifyUserId(modifyUserId);
+                    roomBedMapper.updateById(roomBed);
+                    i ++;
+                    distributeBedNumber ++;
+                }
+                classDistributeBedNumber.put(classId, distributeBedNumber);
+                classStudent.put(classId, studentList.size());
             }
-            classDistributeBedNumber.put(classId, distributeBedNumber);
-            classStudent.put(classId, studentList.size());
         }
+
         Map<Long, Long> classGradeMap = new HashMap<>();
         baseClassMapper.selectList(
             MPJWrappers.<BaseClass>lambdaJoin().in(BaseClass::getId, dto.getClassIds())