haogh il y a 1 mois
Parent
commit
3250316321

+ 4 - 0
src/main/java/com/qmth/exam/reserve/bean/timeperiod/TimePeriodExamSiteReq.java

@@ -19,4 +19,8 @@ public class TimePeriodExamSiteReq implements IModel {
 
     @ApiModelProperty("是否开启")
     private Boolean enable;
+
+    @ApiModelProperty("可编辑")
+    private Boolean editable;
+
 }

+ 23 - 0
src/main/java/com/qmth/exam/reserve/controller/admin/TimePeriodExamSiteController.java

@@ -5,9 +5,12 @@ import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.core.exception.StatusException;
 import com.qmth.exam.reserve.bean.Constants;
 import com.qmth.exam.reserve.bean.login.LoginUser;
+import com.qmth.exam.reserve.bean.org.OrgInfo;
 import com.qmth.exam.reserve.bean.timeperiod.TimePeriodExamSiteReq;
 import com.qmth.exam.reserve.bean.timeperiod.TimePeriodExamSiteVo;
+import com.qmth.exam.reserve.cache.impl.OrgCacheService;
 import com.qmth.exam.reserve.controller.BaseController;
+import com.qmth.exam.reserve.entity.SystemPropertyEntity;
 import com.qmth.exam.reserve.enums.EventType;
 import com.qmth.exam.reserve.enums.Role;
 import com.qmth.exam.reserve.service.OperateLogService;
@@ -37,6 +40,9 @@ public class TimePeriodExamSiteController extends BaseController {
     @Autowired
     private OperateLogService operateLogService;
 
+    @Autowired
+    private OrgCacheService orgCacheService;
+
     @ApiOperation(value = "时段区间列表")
     @PostMapping(value = "/list")
     public List<String> list(@ApiParam("预约任务ID") @RequestParam(required = false) Long taskId) {
@@ -74,4 +80,21 @@ public class TimePeriodExamSiteController extends BaseController {
         operateLogService.insertOperateLog(loginUser.getId(), EventType.APPLY_SWITCH, status ? "启用" : "禁用");
     }
 
+    @ApiOperation(value = "查找自主预约统一控制属性")
+    @PostMapping(value = "/switch/find")
+    public Boolean findPropertyByKey(@ApiParam("学校ID") @RequestParam(required = false) Long orgId, @RequestParam String propKey) {
+        OrgInfo org;
+        if (orgId != null) {
+            org = orgCacheService.getOrgById(orgId);
+        } else {
+            org = orgCacheService.currentOrg();
+        }
+        if (org != null) {
+            orgId = org.getOrgId();
+        }
+
+        SystemPropertyEntity systemProperty = systemPropertyService.findByPropKey(orgId, propKey);
+        return systemProperty == null || systemProperty.getPropValue().equals(Constants.APPLY_SWITCH_OPEN);
+    }
+
 }

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

@@ -16,4 +16,6 @@ public interface TimePeriodExamRoomService extends IService<TimePeriodExamRoomEn
     void save(Long userId, Long examRoomId, List<TimePeriodExamSiteReq> timePeriodExamSiteList);
 
     List<ExamRoomEntity> listExamRoom(Long examSiteId, Long timePeriodId, Boolean enable);
+
+    List<TimePeriodExamRoomEntity> listExamRoom(Long examRoomId);
 }

+ 47 - 8
src/main/java/com/qmth/exam/reserve/service/impl/ExamRoomServiceImpl.java

@@ -18,9 +18,9 @@ import com.qmth.exam.reserve.cache.impl.ApplyTaskCacheService;
 import com.qmth.exam.reserve.dao.ExamRoomDao;
 import com.qmth.exam.reserve.entity.ExamRoomEntity;
 import com.qmth.exam.reserve.entity.ExamSiteEntity;
-import com.qmth.exam.reserve.service.CategoryService;
-import com.qmth.exam.reserve.service.ExamRoomService;
-import com.qmth.exam.reserve.service.ExamSiteService;
+import com.qmth.exam.reserve.entity.TimePeriodEntity;
+import com.qmth.exam.reserve.entity.TimePeriodExamRoomEntity;
+import com.qmth.exam.reserve.service.*;
 import com.qmth.exam.reserve.util.PageUtil;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -34,6 +34,8 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.io.InputStream;
 import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 @Service
 public class ExamRoomServiceImpl extends ServiceImpl<ExamRoomDao, ExamRoomEntity> implements ExamRoomService {
@@ -50,6 +52,12 @@ public class ExamRoomServiceImpl extends ServiceImpl<ExamRoomDao, ExamRoomEntity
     @Autowired
     private ApplyTaskCacheService cacheService;
 
+    @Autowired
+    private TimePeriodService timePeriodService;
+
+    @Autowired
+    private TimePeriodExamRoomService timePeriodExamRoomService;
+
 
     @Override
     public PageResult<ExamRoomVO> pageExamRoom(ExamRoomReq req) {
@@ -68,12 +76,17 @@ public class ExamRoomServiceImpl extends ServiceImpl<ExamRoomDao, ExamRoomEntity
         if (req.getId() == null) {
             examRoomEntity.setEnable(Boolean.TRUE);
             save(examRoomEntity);
+            //刷新缓存
+            refreshApplyCountCache(examRoomEntity.getId(), examRoomEntity.getExamSiteId(), 0, examRoomEntity.getCapacity());
         } else {
             beforeUpdateRoom = getById(req.getId());
             updateById(examRoomEntity);
+            //刷新缓存
+            refreshApplyCountCache(examRoomEntity.getId(), examRoomEntity.getExamSiteId(), beforeUpdateRoom.getCapacity(), examRoomEntity.getCapacity());
         }
         //更新考点容量和教学点容量
         updateExamSiteAndTeachingCapacity(req.getExamSiteId());
+        //考场更换考点
         if(req.getId() != null && !req.getExamSiteId().equals(beforeUpdateRoom.getExamSiteId())) {
             updateExamSiteAndTeachingCapacity(beforeUpdateRoom.getExamSiteId());
         }
@@ -89,6 +102,8 @@ public class ExamRoomServiceImpl extends ServiceImpl<ExamRoomDao, ExamRoomEntity
         update(null, wrapper);
 
         updateExamSiteAndTeachingCapacity(examRoom.getExamSiteId());
+
+        refreshApplyCountCache(id, examRoom.getExamSiteId(), enable ? 0 : examRoom.getCapacity(), enable ? examRoom.getCapacity() : 0);
     }
 
     @Override
@@ -209,7 +224,9 @@ public class ExamRoomServiceImpl extends ServiceImpl<ExamRoomDao, ExamRoomEntity
 
     private void saveRoom(ExamRoomEntity room) {
         ExamRoomEntity examRoom = getExamRoom(room.getExamSiteId(), room.getCode());
+        int capacity;
         if (examRoom != null) {
+            capacity = examRoom.getCapacity();
             examRoom.setCapacity(room.getCapacity());
             LambdaUpdateWrapper<ExamRoomEntity> wrapper = new LambdaUpdateWrapper<>();
             wrapper.set(ExamRoomEntity::getName, room.getName());
@@ -218,8 +235,13 @@ public class ExamRoomServiceImpl extends ServiceImpl<ExamRoomDao, ExamRoomEntity
             wrapper.set(ExamRoomEntity::getEnable, Boolean.TRUE);
             wrapper.eq(ExamRoomEntity::getId, examRoom.getId());
             update(null, wrapper);
+            if(capacity != room.getCapacity()) {
+                refreshApplyCountCache(room.getId(), room.getExamSiteId(), capacity, room.getCapacity());
+            }
         } else {
             save(room);
+            refreshApplyCountCache(room.getId(), room.getExamSiteId(), 0, room.getCapacity());
+
         }
         updateExamSiteAndTeachingCapacity(room.getExamSiteId());
     }
@@ -233,7 +255,7 @@ public class ExamRoomServiceImpl extends ServiceImpl<ExamRoomDao, ExamRoomEntity
     }
 
     private void updateExamSiteAndTeachingCapacity(Long examSiteId) {
-        ExamSiteEntity oldExamSite = examSiteService.getById(examSiteId);
+//        ExamSiteEntity oldExamSite = examSiteService.getById(examSiteId);
         // 更新考点容量
         examSiteService.updateExamSiteCapacity(examSiteId);
 
@@ -241,16 +263,33 @@ public class ExamRoomServiceImpl extends ServiceImpl<ExamRoomDao, ExamRoomEntity
         //更新教学点容量
         categoryService.updateTeachingCapacity(newExamSite.getCategoryId());
 
-        // 考点下没有启用的考场,容量设置为0
+ /*       // 考点下没有启用的考场,容量设置为0
         if (oldExamSite.getCapacity() == null) {
             oldExamSite.setCapacity(0);
         }
         if (newExamSite.getCapacity() == null) {
             newExamSite.setCapacity(0);
-        }
+        }*/
+
+        //刷新考点容量缓存(以前的逻辑)
+        //cacheService.refreshApplyAvailableCountCache(examSiteId, oldExamSite.getCapacity(), newExamSite.getCapacity());
+    }
 
-        //刷新考点容量缓存
-        cacheService.refreshApplyAvailableCountCache(examSiteId, oldExamSite.getCapacity(), newExamSite.getCapacity());
+    private void refreshApplyCountCache(Long examRoomId,Long examSiteId,  int oldCapacity, int newCapacity) {
+        List<TimePeriodEntity> timePeriods = timePeriodService.list(new LambdaQueryWrapper<TimePeriodEntity>().select(TimePeriodEntity::getId));
+        //考场时段列表
+        List<TimePeriodExamRoomEntity> timePeriodExamRooms = timePeriodExamRoomService.listExamRoom(examRoomId);
+        //将timePeriodExamRooms转Map
+        Map<Long, TimePeriodExamRoomEntity> timePeriodExamRoomMap = timePeriodExamRooms.stream().collect(
+                Collectors.toMap(TimePeriodExamRoomEntity::getTimePeriodId, Function.identity()));
+
+        for(TimePeriodEntity timePeriod : timePeriods) {
+            //刷新缓存
+            TimePeriodExamRoomEntity timePeriodExamRoomEntity = timePeriodExamRoomMap.get(timePeriod.getId());
+            if(timePeriodExamRoomEntity == null || timePeriodExamRoomEntity.getEnable()) {
+                cacheService.refreshApplyAvailableCountCache(examSiteId, timePeriod.getId(), oldCapacity, newCapacity);
+            }
+        }
     }
 
     private void checkExamRoom(ExamRoomSaveReq req) {

+ 26 - 10
src/main/java/com/qmth/exam/reserve/service/impl/TimePeriodExamRoomServiceImpl.java

@@ -1,5 +1,6 @@
 package com.qmth.exam.reserve.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.boot.core.exception.StatusException;
 import com.qmth.exam.reserve.bean.applytask.CurrentApplyTaskVO;
@@ -230,12 +231,15 @@ public class TimePeriodExamRoomServiceImpl extends ServiceImpl<TimePeriodExamRoo
             Map<Long, TimePeriodExamSiteBean> timePeriodMap = timePeriodList.stream()
                     .collect(Collectors.toMap(TimePeriodExamSiteBean::getId, tp -> tp));
 
+            //只处理可编辑的数据
+            timePeriodExamRoomList = timePeriodExamRoomList.stream().filter(TimePeriodExamSiteReq::getEditable).collect(Collectors.toList());
+
             List<TimePeriodExamRoomEntity> timePeriodExamRoomEntityList = new ArrayList<>(timePeriodExamRoomList.size());
 
             if (CollectionUtils.isEmpty(timePeriodList)) {
                 //是否可编辑判断
                 List<Long> listTimePeriodIds = timePeriodExamRoomList.stream()
-                        .filter(item -> !item.getEnable())
+                        .filter(item -> !item.getEnable()) //禁用
                         .map(TimePeriodExamSiteReq::getTimePeriodId)
                         .collect(Collectors.toList());
                 canEdit(listTimePeriodIds, curApplyTask);
@@ -254,6 +258,13 @@ public class TimePeriodExamRoomServiceImpl extends ServiceImpl<TimePeriodExamRoo
         return getBaseMapper().listExamRoom(examSiteId, timePeriodId, enable);
     }
 
+    @Override
+    public List<TimePeriodExamRoomEntity> listExamRoom(Long examRoomId) {
+        LambdaQueryWrapper<TimePeriodExamRoomEntity> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TimePeriodExamRoomEntity::getExamRoomId, examRoomId);
+        return list(wrapper);
+    }
+
     // 校验是否可编辑
     private void canEdit(List<Long> timePeriodExamRoomList, CurrentApplyTaskVO curApplyTask) {
         if (CollectionUtils.isNotEmpty(timePeriodExamRoomList)) {
@@ -305,10 +316,12 @@ public class TimePeriodExamRoomServiceImpl extends ServiceImpl<TimePeriodExamRoo
             }
         });
 
+        //新增的记录
         List<Long> resultList = new ArrayList<>();
         for(TimePeriodExamRoomEntity item : toBeSaveList) {
             resultList.add(item.getTimePeriodId());
         }
+        //更新的记录,值有变化
         for (TimePeriodExamRoomEntity item : toBeUpdateList) {
             TimePeriodExamSiteBean timePeriod = timePeriodMap.get(item.getId());
             if(timePeriod != null && !timePeriod.getEnable().equals(item.getEnable())) {
@@ -338,12 +351,13 @@ public class TimePeriodExamRoomServiceImpl extends ServiceImpl<TimePeriodExamRoo
         disableList.stream()
                 .filter(item -> !item.getEnable())
                 .forEach(item -> {
-                    // TODO 更新容量缓存,缺失 timePeriodId 参数
-                  /*  applyTaskCacheService.refreshApplyAvailableCountCache(
+                    // 更新容量缓存,禁用需要减考场容量
+                    applyTaskCacheService.refreshApplyAvailableCountCache(
                             examRoom.getExamSiteId(),
+                            item.getTimePeriodId(),
                             examRoom.getCapacity(),
                             0
-                    );*/
+                    );
                 });
     }
 
@@ -354,22 +368,24 @@ public class TimePeriodExamRoomServiceImpl extends ServiceImpl<TimePeriodExamRoo
             TimePeriodExamSiteBean timePeriod = timePeriodMap.get(item.getId());
             //由启用变为禁用,缓存容量=-考场的容量
             if (timePeriod != null && Boolean.TRUE.equals(timePeriod.getEnable()) && !item.getEnable()) {
-                // TODO 更新容量缓存,缺失 timePeriodId 参数
-               /* applyTaskCacheService.refreshApplyAvailableCountCache(
+                // 更新容量缓存
+                applyTaskCacheService.refreshApplyAvailableCountCache(
                         examRoom.getExamSiteId(),
+                        timePeriod.getTimePeriodId(),
                         examRoom.getCapacity(),
                         0
-                );*/
+                );
             }
 
             //由禁用变为启用,缓存容量=+考场的容量
             if (timePeriod != null && Boolean.FALSE.equals(timePeriod.getEnable()) && item.getEnable()) {
-                // TODO 更新容量缓存,缺失 timePeriodId 参数
-                /*applyTaskCacheService.refreshApplyAvailableCountCache(
+                //更新容量缓存
+                applyTaskCacheService.refreshApplyAvailableCountCache(
                         examRoom.getExamSiteId(),
+                        timePeriod.getTimePeriodId(),
                         0,
                         examRoom.getCapacity()
-                );*/
+                );
             }
 
         });