Преглед на файлове

fix 考试地点人数判断

he2802 преди 3 години
родител
ревизия
fc0de49bc0

+ 33 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/bo/ExamApplySiteTimeJson.java

@@ -0,0 +1,33 @@
+package com.zhongzheng.modules.exam.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * 考试安排地点绑定时间编辑对象 exam_apply_site_time
+ *
+ * @author ruoyi
+ * @date 2021-12-07
+ */
+@Data
+@ApiModel("考试安排地点绑定时间编辑对象")
+public class ExamApplySiteTimeJson {
+
+
+    @ApiModelProperty("人数")
+    private Integer num;
+
+
+    /** 开始时间 */
+    @ApiModelProperty("开始时间")
+    private String startTime;
+
+    /** 结束时间 */
+    @ApiModelProperty("结束时间")
+    private String endTim;
+
+
+
+}

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/exam/mapper/ExamApplyMapper.java

@@ -65,4 +65,7 @@ public interface ExamApplyMapper extends BaseMapper<ExamApply> {
 
     Long checkSiteTimeHave(ExamApplyQueryBo bo);
 
+    Long sitePeopleNum(ExamApplyQueryBo bo);
+
+    String siteTimeJson(ExamApplyQueryBo bo);
 }

+ 60 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserSubscribeServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.convert.Convert;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.zhongzheng.common.exception.CustomException;
@@ -15,6 +16,7 @@ import com.zhongzheng.modules.course.domain.CourseBusiness;
 import com.zhongzheng.modules.course.mapper.CourseMapper;
 import com.zhongzheng.modules.course.service.ICourseService;
 import com.zhongzheng.modules.exam.bo.ExamApplyQueryBo;
+import com.zhongzheng.modules.exam.bo.ExamApplySiteTimeJson;
 import com.zhongzheng.modules.exam.mapper.ExamApplyMapper;
 import com.zhongzheng.modules.exam.vo.ExamApplySiteTimeVo;
 import com.zhongzheng.modules.exam.vo.ExamApplySiteVo;
@@ -195,6 +197,22 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
         if (System.currentTimeMillis()/1000 > time){
             throw new IllegalArgumentException("当前选择的考试时间已过期,请重新预约,选择未过期考试时间");
         }
+        ExamApplyQueryBo queryTimeBo = new ExamApplyQueryBo();
+        queryTimeBo.setApplySiteId(bo.getApplyId());
+        queryTimeBo.setStartTime(bo.getApplySiteStartTime().replace("-", ":"));
+        queryTimeBo.setEndTime(bo.getApplySiteEndTime().replace("-", ":"));
+        queryTimeBo.setExamTime(time);
+        queryTimeBo.setApplySiteAddress(bo.getApplySiteAddress());
+        //考点已申报人数
+        Long sitePeopleNum = examApplyMapper.sitePeopleNum(queryTimeBo);
+        String siteTimeJson = examApplyMapper.siteTimeJson(queryTimeBo);
+        if (Validator.isEmpty(siteTimeJson)) {
+            throw new IllegalArgumentException("考点数据错误");
+        }
+        int existNum = findPeopleNum(queryTimeBo,siteTimeJson);
+        if(existNum==-1||existNum>=sitePeopleNum){
+            throw new CustomException("考点人数已满");
+        }
         validEntityBeforeSave(add);
         add.setSubscribeStatus(1);
         add.setExamStatus(0);
@@ -206,6 +224,17 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
         return add.getSubscribeId();
     }
 
+    private int findPeopleNum(ExamApplyQueryBo queryTimeBo,String siteTimeJson){
+        List<ExamApplySiteTimeJson> list = new ArrayList<ExamApplySiteTimeJson>();
+        list = JSONObject.parseArray(siteTimeJson, ExamApplySiteTimeJson.class);
+        for(ExamApplySiteTimeJson v : list){
+            if(v.getStartTime().equals(queryTimeBo.getStartTime())){
+                return  v.getNum();
+            }
+        }
+        return -1;
+    }
+
     @Override
     public UserSubscribeVo getRecentExam(UserSubscribeQueryBo bo) {
         return this.baseMapper.getRecentExam(bo);
@@ -706,12 +735,28 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
             queryTimeBo.setStartTime(startTime);
             queryTimeBo.setEndTime(endTime);
             queryTimeBo.setExamTime(userSubscribeAddBo.getApplySiteExamTime());
+            queryTimeBo.setApplySiteAddress(userSubscribeImport.getApplySiteAddress());
             Long siteTime = examApplyMapper.checkSiteTimeHave(queryTimeBo);
             if (Validator.isEmpty(siteTime)) {
                 userSubscribeImport.setCause("该考试时间段不存在");
                 userSubscribeImports.add(userSubscribeImport);
                 continue;
             }
+            //考点已申报人数
+            Long sitePeopleNum = examApplyMapper.sitePeopleNum(queryTimeBo);
+            String siteTimeJson = examApplyMapper.siteTimeJson(queryTimeBo);
+            if (Validator.isEmpty(siteTimeJson)) {
+                userSubscribeImport.setCause("考点数据错误");
+                userSubscribeImports.add(userSubscribeImport);
+                continue;
+            }
+            int existNum = findPeopleNum(queryTimeBo,siteTimeJson);
+            if(existNum==-1||existNum>=sitePeopleNum){
+                userSubscribeImport.setCause("考点人数已满");
+                userSubscribeImports.add(userSubscribeImport);
+                continue;
+            }
+
             //查看是否有无考试记录
             ExamApplyQueryBo applyQueryBo = new ExamApplyQueryBo();
             applyQueryBo.setUserId(userId);
@@ -918,13 +963,27 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
             queryTimeBo.setStartTime(startTime);
             queryTimeBo.setEndTime(endTime);
             queryTimeBo.setExamTime(userSubscribeAddBo.getApplySiteExamTime());
+            queryTimeBo.setApplySiteAddress(userSubscribeImport.getApplySiteAddress());
             Long siteTime = examApplyMapper.checkSiteTimeHave(queryTimeBo);
             if (Validator.isEmpty(siteTime)) {
                 userSubscribeImport.setCause("该考试时间段不存在");
                 userSubscribeImports.add(userSubscribeImport);
                 continue;
             }
-
+            //考点已申报人数
+            Long sitePeopleNum = examApplyMapper.sitePeopleNum(queryTimeBo);
+            String siteTimeJson = examApplyMapper.siteTimeJson(queryTimeBo);
+            if (Validator.isEmpty(siteTimeJson)) {
+                userSubscribeImport.setCause("考点数据错误");
+                userSubscribeImports.add(userSubscribeImport);
+                continue;
+            }
+            int existNum = findPeopleNum(queryTimeBo,siteTimeJson);
+            if(existNum==-1||existNum>=sitePeopleNum){
+                userSubscribeImport.setCause("考点人数已满");
+                userSubscribeImports.add(userSubscribeImport);
+                continue;
+            }
 
 
             if (StringUtils.isEmpty(userSubscribeImport.getApplySiteAddressTrain())|| Validator.isEmpty(userSubscribeImport.getApplySiteExamTrainTime())|| Validator.isEmpty(userSubscribeImport.getApplySiteTime())) {

+ 8 - 0
zhongzheng-system/src/main/resources/mapper/modules/exam/ExamApplyMapper.xml

@@ -409,4 +409,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="checkSiteTimeHave" parameterType="com.zhongzheng.modules.exam.bo.ExamApplyQueryBo" resultType="long">
         SELECT count(*) FROM exam_apply_site_time  where apply_site_id = #{applySiteId} and site_time like concat('%', #{startTime}, '%') and site_time like concat('%', #{endTime}, '%') and exam_time = #{examTime}
     </select>
+
+    <select id="sitePeopleNum" parameterType="com.zhongzheng.modules.exam.bo.ExamApplyQueryBo" resultType="long">
+        SELECT count(*) FROM user_subscribe  where apply_id = #{applySiteId} and apply_site_start_time = #{startTime} and apply_site_end_time = #{endTime} and apply_site_exam_time = #{examTime} and apply_site_address = #{applySiteAddress} and subscribe_status = 1
+    </select>
+
+    <select id="siteTimeJson" parameterType="com.zhongzheng.modules.exam.bo.ExamApplyQueryBo" resultType="String">
+        SELECT site_time FROM exam_apply_site_time  where apply_site_id = #{applySiteId} and  exam_time = #{examTime}
+    </select>
 </mapper>