Browse Source

Merge branch 'master' of https://e.coding.net/chuanghaikeji/smarCampus/backend_dormitory

夏文涛 1 year atrás
parent
commit
8ca3dfa274

+ 8 - 0
doc/update_0626.sql

@@ -0,0 +1,8 @@
+alter table welcome_visitor
+    modify driver_name varchar(32) null comment '司机名称';
+
+alter table welcome_visitor
+    modify card_id varchar(255) null comment '证件号';
+
+alter table welcome_visitor
+    modify visitor_reason text null comment '访问事由';

+ 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,"已存在");

+ 9 - 9
src/main/java/com/template/model/pojo/WelcomeRole.java

@@ -40,31 +40,31 @@ public class WelcomeRole implements Serializable {
     @ApiModelProperty(value = "数据总览设置 0.全部,1查看页面")
     @ApiModelProperty(value = "数据总览设置 0.全部,1查看页面")
     private String dataManagementSetting;
     private String dataManagementSetting;
 
 
-    @ApiModelProperty(value = "学生信息管理设置 0.全部, 1.添加,2查询,3编辑,4删除,5.导入,6导出,7详情")
+    @ApiModelProperty(value = "学生信息管理设置 0.全部, 1.导入,2导出,3.新增,4详情,5编辑,6删除,7查看页面")
     private String studentManagementSetting;
     private String studentManagementSetting;
 
 
-    @ApiModelProperty(value = "楼栋管理设置 0.全部, 1.添加,2查询,3编辑,4删除,5.导入,6导出")
+    @ApiModelProperty(value = "楼栋管理设置 0.全部, 1.导入,2导出,3.新增,4编辑,5删除,6查看页面")
     private String buildingManagementSetting;
     private String buildingManagementSetting;
 
 
-    @ApiModelProperty(value = "宿舍管理设置 0.全部, 1.添加,2查询,3编辑,4删除,5导出,6导出,7批量保留,8批量开放,9保留,10开发")
+    @ApiModelProperty(value = "寝室管理设置 0.全部, 1.导入,2导出,3.新增,4批量保留,5批量开发,6保留,7开发,8.编辑,9.删除,10查看页面")
     private String dormitoryManagementSetting;
     private String dormitoryManagementSetting;
 
 
-    @ApiModelProperty(value = "床位管理设置 0.全部, 1.添加,2查询,3编辑所属专业,4删除,5.导入,6导出,7批量保留,8批量开放,9保留,10开发,11.入住,12退宿,13,换床,14.床位对调,15.所属班级,16.辅导员")
+    @ApiModelProperty(value = "床位管理设置 0.全部, 1.导入,2导出,3.新增,4批量保留,5批量开放,6保留,7开放,8.入住,9.退宿,10换床,11床位对调,12删除,13查看页面,14.编辑所属专业,15.编辑所属班级,16.编辑辅导员")
     private String bedManagementSetting;
     private String bedManagementSetting;
 
 
-    @ApiModelProperty(value = "学生住宿设置 0.全部, 1.查看界面,2.导出")
+    @ApiModelProperty(value = "学生住宿设置 0.全部, 1.导出,2.查看页面")
     private String studentAccommodationSetting;
     private String studentAccommodationSetting;
 
 
-    @ApiModelProperty(value = "住宿统计设置 0.全部, 1.查看界面,2.导出")
+    @ApiModelProperty(value = "住宿统计设置0.全部, 1.导出,2.查看页面")
     private String accommodationStatisticsSetting;
     private String accommodationStatisticsSetting;
 
 
-    @ApiModelProperty(value = "访客管理设置 0.全部, 1.添加,2查询,3编辑,4删除,5导出")
+    @ApiModelProperty(value = "访客管理设置 0.全部, 1.导出,2.新增,3编辑,4删除,5查看页面")
     private String visitorManagementSetting;
     private String visitorManagementSetting;
 
 
-    @ApiModelProperty(value = "角色管理设置 0.全部, 1.添加,2查询,3编辑,4删除,")
+    @ApiModelProperty(value = "角色管理设置 0.全部, 1.新增,2编辑,3删除,4查看页面")
     private String roleManagementSetting;
     private String roleManagementSetting;
 
 
-    @ApiModelProperty(value = "账号管理设置  0.全部,1.添加,2查询,3编辑,4删除,")
+    @ApiModelProperty(value = "用户管理设置  0.全部, 1.新增,2编辑,3删除,4查看页面")
     private String accountManagementSetting;
     private String accountManagementSetting;
 
 
     @ApiModelProperty(value = "设置管理设置 0.全部, 1.缴费设置,2.车位数设置,3.联系方式设置,4.文本设置")
     @ApiModelProperty(value = "设置管理设置 0.全部, 1.缴费设置,2.车位数设置,3.联系方式设置,4.文本设置")

+ 0 - 4
src/main/java/com/template/model/request/WelcomeVisitorRequest.java

@@ -30,7 +30,6 @@ public class WelcomeVisitorRequest implements Serializable {
     private String name;
     private String name;
 
 
     @ApiModelProperty(value = "司机姓名")
     @ApiModelProperty(value = "司机姓名")
-    @NotBlank(message = "司机姓名不能为空")
     private String driverName;
     private String driverName;
 
 
     @ApiModelProperty(value = "访客手机号")
     @ApiModelProperty(value = "访客手机号")
@@ -39,7 +38,6 @@ public class WelcomeVisitorRequest implements Serializable {
     private String phone;
     private String phone;
 
 
     @ApiModelProperty(value = "证件号")
     @ApiModelProperty(value = "证件号")
-    @NotBlank(message = "证件号不能为空")
     private String cardId;
     private String cardId;
 
 
     @ApiModelProperty(value = "校区id")
     @ApiModelProperty(value = "校区id")
@@ -71,7 +69,5 @@ public class WelcomeVisitorRequest implements Serializable {
     private Integer peerNum;
     private Integer peerNum;
 
 
     @ApiModelProperty(value = "访问事由")
     @ApiModelProperty(value = "访问事由")
-    @NotBlank(message = "访问事由不能为空")
     private String visitorReason;
     private String visitorReason;
 }
 }
-

+ 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;
     }
     }