Browse Source

考场时段添加校验

haogh 4 weeks ago
parent
commit
d5a0c05d4f

+ 3 - 0
src/main/java/com/qmth/exam/reserve/dao/TimePeriodExamRoomDao.java

@@ -6,6 +6,7 @@ import com.qmth.exam.reserve.entity.TimePeriodExamRoomEntity;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Set;
 
 public interface TimePeriodExamRoomDao extends BaseMapper<TimePeriodExamRoomEntity> {
 
@@ -15,4 +16,6 @@ public interface TimePeriodExamRoomDao extends BaseMapper<TimePeriodExamRoomEnti
             @Param("timePeriodIds") List<Long> timePeriodIds, @Param("ids") List<Long> ids);
 
     List<TimePeriodExamRoomEntity> listByExamRoomIdsAndTimePeriodId(@Param("examRoomIds") List<Long> examRoomIds, @Param("timePeriodId") Long timePeriodId);
+
+    List<TimePeriodExamRoomEntity> listByExamRoomAndPeriodIds(@Param("examRoomId") Long examRoomId, @Param("periodIds") Set<Long> periodIds);
 }

+ 5 - 0
src/main/java/com/qmth/exam/reserve/service/TimePeriodExamRoomService.java

@@ -8,6 +8,7 @@ import com.qmth.exam.reserve.entity.ExamRoomEntity;
 import com.qmth.exam.reserve.entity.TimePeriodExamRoomEntity;
 
 import java.util.List;
+import java.util.Set;
 
 public interface TimePeriodExamRoomService extends IService<TimePeriodExamRoomEntity> {
 
@@ -20,4 +21,8 @@ public interface TimePeriodExamRoomService extends IService<TimePeriodExamRoomEn
     List<TimePeriodExamRoomEntity> listExamRoom(Long examRoomId);
 
     List<TimePeriodExamRoomEntity> listByExamRoomIdsAndTimePeriodId(List<Long> examRoomIds, Long timePeriodId);
+
+    TimePeriodExamRoomEntity getTimePeriodExamRoom(Long roomId, Long timePeriodId);
+
+    List<TimePeriodExamRoomEntity> listByExamRoomAndPeriodIds(Long examRoomId, Set<Long> periodIds);
 }

+ 31 - 0
src/main/java/com/qmth/exam/reserve/service/impl/ExamRoomServiceImpl.java

@@ -170,14 +170,45 @@ public class ExamRoomServiceImpl extends ServiceImpl<ExamRoomDao, ExamRoomEntity
             oldCapacityMap.put(periodId, capacity);
         }
 
+        Set<Long> periodIds = timePeriodExamSiteBeans.stream()
+                .map(TimePeriodExamSiteBean::getTimePeriodId)
+                .collect(Collectors.toSet());
+
+        //考场对应的时段Map
+        Map<Long, TimePeriodExamRoomEntity> timePeriodExamRoomMap = new HashMap<>();
+        if (!periodIds.isEmpty()) {
+            List<TimePeriodExamRoomEntity> timePeriodExamRoomList = timePeriodExamRoomService.listByExamRoomAndPeriodIds(beforeUpdateRoom.getId(), periodIds);
+            timePeriodExamRoomMap = timePeriodExamRoomList.stream()
+                    .collect(Collectors.toMap(
+                            TimePeriodExamRoomEntity::getTimePeriodId,
+                            Function.identity(),
+                            (existing, replacement) -> existing
+                    ));
+        }
+
         for (TimePeriodExamSiteBean bean : timePeriodExamSiteBeans) {
+            //判断考场+时段的是否已经关闭
+            TimePeriodExamRoomEntity timePeriodExamRoom = timePeriodExamRoomMap.get(bean.getTimePeriodId());
+            //已关闭的考场时段不处理
+            if (timePeriodExamRoom != null && !timePeriodExamRoom.getEnable()) {
+                continue;
+            }
+
             Long periodId = bean.getTimePeriodId();
             //剩余的容量
             int availableCount = cacheService.getApplyAvailableCount(beforeUpdateRoom.getExamSiteId(), periodId);
             //修改前的容量
             int oldCount = oldCapacityMap.getOrDefault(periodId, 0);
+            if (oldCount <= 0) {
+                continue;
+            }
+            log.warn("[考场容量检测]periodId:{}, availableCount:{}, oldCount:{}", periodId, availableCount, oldCount);
+
             //已预约的容量
             int haveApplyCount = oldCount - availableCount;
+            if (haveApplyCount <= 0) {
+                continue;
+            }
             //即将更新之后的剩余容量
             int remainCount = oldCount - decreaseCapacity;
             if (haveApplyCount > remainCount) {

+ 13 - 0
src/main/java/com/qmth/exam/reserve/service/impl/TimePeriodExamRoomServiceImpl.java

@@ -411,6 +411,19 @@ public class TimePeriodExamRoomServiceImpl extends ServiceImpl<TimePeriodExamRoo
         return getBaseMapper().listByExamRoomIdsAndTimePeriodId(examRoomIds, timePeriodId);
     }
 
+    @Override
+    public TimePeriodExamRoomEntity getTimePeriodExamRoom(Long roomId, Long timePeriodId) {
+        LambdaQueryWrapper<TimePeriodExamRoomEntity> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TimePeriodExamRoomEntity::getExamRoomId, roomId);
+        wrapper.eq(TimePeriodExamRoomEntity::getTimePeriodId, timePeriodId);
+        return getOne(wrapper);
+    }
+
+    @Override
+    public List<TimePeriodExamRoomEntity> listByExamRoomAndPeriodIds(Long examRoomId, Set<Long> periodIds) {
+        return getBaseMapper().listByExamRoomAndPeriodIds(examRoomId, periodIds);
+    }
+
     // 校验是否可编辑
     private void canEdit(List<Long> timePeriodExamRoomList, CurrentApplyTaskVO curApplyTask) {
         if (CollectionUtils.isNotEmpty(timePeriodExamRoomList)) {

+ 12 - 0
src/main/resources/mapper/TimePeriodExamRoomMapper.xml

@@ -46,4 +46,16 @@
         AND time_period_id = #{timePeriodId}
     </select>
 
+    <select id="listByExamRoomAndPeriodIds" resultType="com.qmth.exam.reserve.entity.TimePeriodExamRoomEntity">
+        SELECT *
+        FROM t_time_period_exam_room
+        WHERE exam_room_id = #{examRoomId}
+        <if test="periodIds != null and periodIds.size() > 0">
+            AND time_period_id IN
+            <foreach collection="periodIds" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+    </select>
+
 </mapper>