ソースを参照

新增访客记录时新增车牌上限校验

codingliang 1 年間 前
コミット
e569cfe448

+ 1 - 0
src/main/java/com/template/common/result/ResponseStatusEnum.java

@@ -39,6 +39,7 @@ public enum ResponseStatusEnum implements Code{
     SYSTEM_LOGIN_ERROR(500,false,"无效token"),
     SYSTEM_LOGIN_ERROR(500,false,"无效token"),
     PARAM_ERROR(560, false, "参数不能为空!"),
     PARAM_ERROR(560, false, "参数不能为空!"),
     GZH_ERROR(561, false, "设置失败,请先关联公众号!"),
     GZH_ERROR(561, false, "设置失败,请先关联公众号!"),
+    CAR_NUM_EXCEED(996, false, "预约车辆已超过上限,请更换日期后重试"),
     THIRD_API_ERROR(997, false, "第三方api请求失败"),
     THIRD_API_ERROR(997, false, "第三方api请求失败"),
     DATA_NOT_FOUND(998, false, "数据不存在"),
     DATA_NOT_FOUND(998, false, "数据不存在"),
     EXISTS(999,false,"已存在");
     EXISTS(999,false,"已存在");

+ 72 - 18
src/main/java/com/template/services/impl/WelcomeVisitorServiceImpl.java

@@ -1,6 +1,9 @@
 package com.template.services.impl;
 package com.template.services.impl;
 
 
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.format.DatePrinter;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.URLUtil;
 import cn.hutool.core.util.URLUtil;
@@ -15,18 +18,18 @@ import com.template.common.utils.BeanUtil;
 import com.template.common.utils.IPageUtil;
 import com.template.common.utils.IPageUtil;
 import com.template.component.ParkingFeeSystemComponent;
 import com.template.component.ParkingFeeSystemComponent;
 import com.template.component.bo.AddVisitorCarBO;
 import com.template.component.bo.AddVisitorCarBO;
-import com.template.mapper.WelcomeStudentDormitoryMapper;
 import com.template.mapper.WelcomeVisitorMapper;
 import com.template.mapper.WelcomeVisitorMapper;
+import com.template.model.pojo.WelcomeSetting;
 import com.template.model.pojo.WelcomeVisitor;
 import com.template.model.pojo.WelcomeVisitor;
 import com.template.model.query.WelcomeVisitorQuery;
 import com.template.model.query.WelcomeVisitorQuery;
 import com.template.model.request.WelcomeVisitorRequest;
 import com.template.model.request.WelcomeVisitorRequest;
 import com.template.model.result.PageUtils;
 import com.template.model.result.PageUtils;
 import com.template.model.vo.WelcomeVisitorVO;
 import com.template.model.vo.WelcomeVisitorVO;
+import com.template.services.WelcomeSettingService;
 import com.template.services.WelcomeVisitorService;
 import com.template.services.WelcomeVisitorService;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.context.request.RequestAttributes;
 import org.springframework.web.context.request.RequestAttributes;
@@ -45,19 +48,14 @@ import java.util.List;
 @RequiredArgsConstructor
 @RequiredArgsConstructor
 public class WelcomeVisitorServiceImpl extends ServiceImpl<WelcomeVisitorMapper, WelcomeVisitor> implements WelcomeVisitorService {
 public class WelcomeVisitorServiceImpl extends ServiceImpl<WelcomeVisitorMapper, WelcomeVisitor> implements WelcomeVisitorService {
 
 
-    @Autowired
-    private WelcomeVisitorMapper welcomeVisitorMapper;
     private final ParkingFeeSystemComponent parkingFeeSystemComponent;
     private final ParkingFeeSystemComponent parkingFeeSystemComponent;
+    private final WelcomeSettingService settingService;
 
 
     @Override
     @Override
     @Transactional
     @Transactional
     public void addVisitor(String studentCard, WelcomeVisitorRequest visitorRequest) {
     public void addVisitor(String studentCard, WelcomeVisitorRequest visitorRequest) {
         // 查询当前用户是否已有访客记录
         // 查询当前用户是否已有访客记录
-        LambdaQueryWrapper<WelcomeVisitor> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(WelcomeVisitor::getStudentCard, studentCard);
-        if (this.count(queryWrapper) > 0) {
-            throw new MyCustomException(ResponseStatusEnum.EXISTS);
-        }
+        checkBeforeAdd(visitorRequest);
 
 
         // TODO 查询学生学费缴纳情况
         // TODO 查询学生学费缴纳情况
 
 
@@ -113,6 +111,28 @@ public class WelcomeVisitorServiceImpl extends ServiceImpl<WelcomeVisitorMapper,
 
 
     @Override
     @Override
     public void addVisitorByAdmin(WelcomeVisitorRequest visitorRequest) {
     public void addVisitorByAdmin(WelcomeVisitorRequest visitorRequest) {
+        checkBeforeAdd(visitorRequest);
+
+        // 新增访客记录
+        WelcomeVisitor visitor = new WelcomeVisitor();
+        BeanUtils.copyProperties(visitorRequest, visitor);
+        visitor.setRemark("管理员新增");
+
+        save(visitor);
+
+        // 新增车辆信息
+        addVisitorCar(visitor);
+    }
+
+    private void checkBeforeAdd(WelcomeVisitorRequest visitorRequest) {
+        DateTime startTime = DateUtil.parse(visitorRequest.getStartTime());
+        DateTime endTime = DateUtil.parse(visitorRequest.getEndTime());
+
+        // 判断startTime是否在endTime之前
+        if (startTime.isAfter(endTime)) {
+            throw new MyCustomException(ResponseStatusEnum.SEND_PARAMS);
+        }
+
         // 查询当前用户是否已有访客记录
         // 查询当前用户是否已有访客记录
         LambdaQueryWrapper<WelcomeVisitor> queryWrapper = new LambdaQueryWrapper<>();
         LambdaQueryWrapper<WelcomeVisitor> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(WelcomeVisitor::getStudentCard, visitorRequest.getStudentCard());
         queryWrapper.eq(WelcomeVisitor::getStudentCard, visitorRequest.getStudentCard());
@@ -122,19 +142,54 @@ public class WelcomeVisitorServiceImpl extends ServiceImpl<WelcomeVisitorMapper,
 
 
         // TODO 查询学生学费缴纳情况
         // TODO 查询学生学费缴纳情况
 
 
-        // 新增访客记录
-        WelcomeVisitor visitor = new WelcomeVisitor();
-        BeanUtils.copyProperties(visitorRequest, visitor);
-        visitor.setRemark("管理员新增");
+        // 校验车牌数量  4 固定写法
+        WelcomeSetting setting = settingService.getManageById("4");
+        Integer carNum = setting.getCarNum();
 
 
-        save(visitor);
+        // 判断两天是否为同一天,如果为同一天,则比较当天的车辆数量
+        if (DateUtil.isSameDay(startTime, endTime)) {
+            checkCarNum(visitorRequest.getId(), startTime.toJdkDate(), carNum);
+        }
+        // 循环遍历,判断每天的车辆数量
+        else {
+            do {
+                checkCarNum(visitorRequest.getId(), startTime.toJdkDate(), carNum);
+
+                // startTime 加一天
+                startTime = startTime.offset(DateField.DAY_OF_MONTH, 1);
+            } while (startTime.isBefore(endTime));
+        }
+    }
 
 
-        // 新增车辆信息
-        addVisitorCar(visitor);
+    /**
+     * 校验当天的车辆数量
+     * @param id 访问预约id,新增时为null
+     * @param curDay 当前日期
+     * @param carNum 车辆最大可预约数量
+     */
+    private void checkCarNum(Integer id, Date curDay, Integer carNum) {
+        // 获取当天的起始时间字符串
+        String curDayStartStr = DateUtil.format(curDay, "yyyy-MM-dd 00:00:00");
+        // 获取当天的结束时间字符串
+        String curDayEndStr = DateUtil.format(curDay, "yyyy-MM-dd 23:59:59");
+
+        LambdaQueryWrapper<WelcomeVisitor> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.ne(ObjectUtil.isNotNull(id), WelcomeVisitor::getId, id);
+
+        // 查询条件:访客记录的开始时间或结束时间在当天范围内
+        queryWrapper.le(WelcomeVisitor::getStartTime, curDayEndStr);
+        queryWrapper.ge(WelcomeVisitor::getEndTime, curDayStartStr);
+
+        int count = this.count(queryWrapper);
+        if (count >= carNum) {
+            throw new MyCustomException(ResponseStatusEnum.CAR_NUM_EXCEED);
+        }
     }
     }
 
 
     @Override
     @Override
     public void updateVisitorByAdmin(WelcomeVisitorRequest visitorRequest) {
     public void updateVisitorByAdmin(WelcomeVisitorRequest visitorRequest) {
+        checkBeforeAdd(visitorRequest);
+
         WelcomeVisitor visitor = getById(visitorRequest.getId());
         WelcomeVisitor visitor = getById(visitorRequest.getId());
         if (ObjectUtil.isNull(visitor)) {
         if (ObjectUtil.isNull(visitor)) {
             throw new MyCustomException(ResponseStatusEnum.SEND_PARAMS);
             throw new MyCustomException(ResponseStatusEnum.SEND_PARAMS);
@@ -155,7 +210,6 @@ public class WelcomeVisitorServiceImpl extends ServiceImpl<WelcomeVisitorMapper,
         LambdaQueryWrapper<WelcomeVisitor> wrapper = new LambdaQueryWrapper<>();
         LambdaQueryWrapper<WelcomeVisitor> wrapper = new LambdaQueryWrapper<>();
         wrapper.like(StrUtil.isNotBlank(visitorQuery.getCarNumber()), WelcomeVisitor::getCarNumber, visitorQuery.getCarNumber());
         wrapper.like(StrUtil.isNotBlank(visitorQuery.getCarNumber()), WelcomeVisitor::getCarNumber, visitorQuery.getCarNumber());
         wrapper.like(StrUtil.isNotBlank(visitorQuery.getName()), WelcomeVisitor::getName, visitorQuery.getName());
         wrapper.like(StrUtil.isNotBlank(visitorQuery.getName()), WelcomeVisitor::getName, visitorQuery.getName());
-        wrapper.eq(WelcomeVisitor::getDeleted,0);
 
 
         IPage<WelcomeVisitor> page = baseMapper.selectPage(new IPageUtil<WelcomeVisitor>().getPage(visitorQuery), wrapper);
         IPage<WelcomeVisitor> page = baseMapper.selectPage(new IPageUtil<WelcomeVisitor>().getPage(visitorQuery), wrapper);
 
 
@@ -210,7 +264,7 @@ public class WelcomeVisitorServiceImpl extends ServiceImpl<WelcomeVisitorMapper,
 
 
     @Override
     @Override
     public int deleteData(List<Long> ids) {
     public int deleteData(List<Long> ids) {
-        int deleteDatas = welcomeVisitorMapper.deleteBatchIds(ids);
+        int deleteDatas = baseMapper.deleteBatchIds(ids);
         return deleteDatas;
         return deleteDatas;
     }
     }