haogh 1 ماه پیش
والد
کامیت
51ecc1a9a0

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

@@ -10,4 +10,7 @@ import java.util.List;
 public interface TimePeriodExamRoomDao extends BaseMapper<TimePeriodExamRoomEntity> {
 
     List<ExamRoomEntity> listExamRoom(@Param("examSiteId") Long examSiteId, @Param("timePeriodId") Long timePeriodId, @Param("enable") Boolean enable);
+
+    List<TimePeriodExamRoomEntity> listByExamRoomIdsAndTimePeriodIds(@Param("examRoomIds") List<Long> examRoomIds, @Param("timePeriodIds") List<Long> timePeriodIds);
+
 }

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

@@ -343,6 +343,37 @@ public class TimePeriodExamRoomServiceImpl extends ServiceImpl<TimePeriodExamRoo
                 resultList.add(item.getTimePeriodId());
             }
         }
+
+        // 判断考场+时段是否在库中已经存在
+        if (CollectionUtils.isNotEmpty(toBeSaveList)) {
+            // 提取所有要检查的examRoomId和timePeriodId组合
+            List<Long> examRoomIds = toBeSaveList.stream()
+                    .map(TimePeriodExamRoomEntity::getExamRoomId)
+                    .distinct()
+                    .collect(Collectors.toList());
+            List<Long> timePeriodIds = toBeSaveList.stream()
+                    .map(TimePeriodExamRoomEntity::getTimePeriodId)
+                    .distinct()
+                    .collect(Collectors.toList());
+
+            // 批量查询已存在的记录
+            List<TimePeriodExamRoomEntity> existingRecords = getBaseMapper().listByExamRoomIdsAndTimePeriodIds(examRoomIds, timePeriodIds);
+
+            // 构建已存在的记录集合,用于快速查找
+            Set<String> existingKeySet = existingRecords.stream()
+                    .map(e -> e.getExamRoomId() + "-" + e.getTimePeriodId())
+                    .collect(Collectors.toSet());
+
+            // 检查是否有重复的记录
+            for (TimePeriodExamRoomEntity item : toBeSaveList) {
+                String key = item.getExamRoomId() + "-" + item.getTimePeriodId();
+                if (existingKeySet.contains(key)) {
+                    log.error("[考场排班设置]保存失败,该时间段已存在: examRoomId={}, timePeriodId={}", item.getExamRoomId(), item.getTimePeriodId());
+                    throw new StatusException("保存失败,该时间段已存在");
+                }
+            }
+        }
+
         canEdit(resultList, curApplyTask);
 
         saveOrUpdateBatch(timePeriodExamRoomEntityList);

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

@@ -16,4 +16,18 @@
           AND tper.time_period_id = #{timePeriodId}
           AND es.id = #{examSiteId}
     </select>
+
+    <select id="listByExamRoomIdsAndTimePeriodIds" resultType="com.qmth.exam.reserve.entity.TimePeriodExamRoomEntity">
+        SELECT *
+        FROM t_time_period_exam_room
+        WHERE exam_room_id IN
+        <foreach collection="examRoomIds" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+        AND time_period_id IN
+        <foreach collection="timePeriodIds" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+
 </mapper>