瀏覽代碼

更新预约表

Administrator 1 年之前
父節點
當前提交
54fa6654b7

+ 31 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java

@@ -12,8 +12,10 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 时间工具类
@@ -58,6 +60,14 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         return dateTimeNow(YYYY_MM_DD);
     }
 
+    /**
+     * 获取当前年月, 默认格式为yyyy-MM
+     *
+     * @return String
+     */
+    public static String getMonthNow() {
+        return dateTimeNow(YYYY_MM);
+    }
     public static final String getNowTime() {
         return dateTimeNow(HH_MM_SS);
     }
@@ -300,4 +310,25 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         LocalDate localDate = LocalDate.now().plusDays(days);
         return localDate.toString();
     }
+
+
+    //获取传入日期大于等于的全部日期
+    public static List<String> getMonthFullDay(Date date) {
+        List<String> monthFullDay = new ArrayList<>();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        int max = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+        for (int i = 0; i < max; i++) {
+            calendar.set(Calendar.DAY_OF_MONTH, i + 1);
+            Date time = calendar.getTime();
+            //判断两个日期谁大
+            if (! time.before(date)){
+                String day = sdf.format(calendar.getTime());
+                monthFullDay.add(day);
+            }
+        }
+        return monthFullDay;
+    }
 }

+ 18 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/reservat/XiaoyuanReservatController.java

@@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.common.core.domain.AjaxResult;
 import org.dromara.system.domain.reservat.bo.XiaoyuanReservatBo;
 import org.dromara.system.domain.reservat.vo.XiaoyuanReservatVo;
 import org.dromara.system.service.reservat.IXiaoyuanReservatService;
@@ -114,4 +115,21 @@ public class XiaoyuanReservatController extends BaseController {
     public R<Void> cav(Long reservatId) {
         return xiaoyuanReservatService.cav(reservatId);
     }
+
+
+    /**
+     * 根据教职工手机号查询可预约的时间
+     */
+    @PostMapping("/subscribe")
+    public AjaxResult subscribe(XiaoyuanReservatBo bo) {
+        return  xiaoyuanReservatService.subscribe(bo);
+    }
+
+    /**
+     * 预约首页统计
+     */
+    @PostMapping("/indexStatistics")
+    public AjaxResult indexStatistics(XiaoyuanReservatBo bo) {
+        return  xiaoyuanReservatService.indexStatistics(bo);
+    }
 }

+ 8 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/reservat/XiaoyuanReservat.java

@@ -70,17 +70,17 @@ public class XiaoyuanReservat extends TenantEntity {
     /**
      * 预约日期
      */
-    private Date visitDate;
+    private String visitDate;
 
     /**
      * 预约时间
      */
-    private Date visitTime;
+    private String visitTime;
 
     /**
      * 预约时间
      */
-    private Date visitDateTime;
+    private String visitDateTime;
 
     /**
      * 预约二维码
@@ -102,5 +102,10 @@ public class XiaoyuanReservat extends TenantEntity {
      */
     private String remark;
 
+    /**
+     * 查询的时间条件 1:今天 2:昨天 3:近7天 4:近30天
+     */
+    @TableField(exist = false)
+    private String dataType;
 
 }

+ 11 - 4
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/reservat/bo/XiaoyuanReservatBo.java

@@ -1,6 +1,7 @@
 package org.dromara.system.domain.reservat.bo;
 
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import org.dromara.common.mybatis.core.domain.BaseEntity;
 import org.dromara.common.core.validate.AddGroup;
 import org.dromara.common.core.validate.EditGroup;
@@ -60,7 +61,7 @@ public class XiaoyuanReservatBo extends BaseEntity {
     /**
      * 来访者身份证
      */
-    //@NotBlank(message = "来访者身份证不能为空", groups = { AddGroup.class, EditGroup.class })
+   // @NotBlank(message = "来访者身份证不能为空", groups = { AddGroup.class, EditGroup.class })
     private String visitIdCard;
 
     /**
@@ -79,19 +80,19 @@ public class XiaoyuanReservatBo extends BaseEntity {
      * 预约日期
      */
     //@NotNull(message = "预约日期不能为空", groups = { AddGroup.class, EditGroup.class })
-    private Date visitDate;
+    private String visitDate;
 
     /**
      * 预约时间
      */
     //@NotNull(message = "预约时间不能为空", groups = { AddGroup.class, EditGroup.class })
-    private Date visitTime;
+    private String visitTime;
 
     /**
      * 预约时间
      */
     //@NotNull(message = "预约时间不能为空", groups = { AddGroup.class, EditGroup.class })
-    private Date visitDateTime;
+    private String visitDateTime;
 
     /**
      * 预约二维码
@@ -117,5 +118,11 @@ public class XiaoyuanReservatBo extends BaseEntity {
     //@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
     private String remark;
 
+    /**
+     * 查询的时间条件 1:今天 2:昨天 3:近7天 4:近30天
+     */
+    @TableField(exist = false)
+    private String dataType;
+
 
 }

+ 10 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/reservat/vo/XiaoyuanReservatVo.java

@@ -1,6 +1,8 @@
 package org.dromara.system.domain.reservat.vo;
 
 import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
@@ -87,19 +89,19 @@ public class XiaoyuanReservatVo implements Serializable {
      * 预约日期
      */
     @ExcelProperty(value = "预约日期")
-    private Date visitDate;
+    private String visitDate;
 
     /**
      * 预约时间
      */
     @ExcelProperty(value = "预约时间")
-    private Date visitTime;
+    private String visitTime;
 
     /**
      * 预约时间
      */
     @ExcelProperty(value = "预约时间")
-    private Date visitDateTime;
+    private String visitDateTime;
 
     /**
      * 预约二维码
@@ -124,6 +126,11 @@ public class XiaoyuanReservatVo implements Serializable {
      */
     @ExcelProperty(value = "备注")
     private String remark;
+    /**
+     * 查询的时间条件 1:今天 2:昨天 3:近7天 4:近30天
+     */
+    @TableField(exist = false)
+    private String dataType;
 
 
 }

+ 7 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/reservat/XiaoyuanReservatConfigServiceImpl.java

@@ -2,12 +2,14 @@ package org.dromara.system.service.impl.reservat;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.dromara.common.core.domain.model.LoginUser;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
+import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.system.domain.reservat.XiaoyuanReservatConfig;
 import org.dromara.system.domain.reservat.bo.XiaoyuanReservatConfigBo;
 import org.dromara.system.domain.reservat.vo.XiaoyuanReservatConfigVo;
@@ -54,6 +56,7 @@ public class XiaoyuanReservatConfigServiceImpl implements IXiaoyuanReservatConfi
      */
     @Override
     public List<XiaoyuanReservatConfigVo> queryList(XiaoyuanReservatConfigBo bo) {
+        bo.setTeacherPhone(LoginHelper.getUsername());
         LambdaQueryWrapper<XiaoyuanReservatConfig> lqw = buildQueryWrapper(bo);
         return baseMapper.selectVoList(lqw);
     }
@@ -78,6 +81,10 @@ public class XiaoyuanReservatConfigServiceImpl implements IXiaoyuanReservatConfi
      */
     @Override
     public Boolean insertByBo(XiaoyuanReservatConfigBo bo) {
+        LoginUser loginUser = LoginHelper.getLoginUser();
+        bo.setTeacherName(loginUser.getNickname());
+        bo.setTeacherPhone(loginUser.getUsername());
+        bo.setTeacherId(loginUser.getUserId());
         XiaoyuanReservatConfig add = MapstructUtils.convert(bo, XiaoyuanReservatConfig.class);
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;

+ 98 - 9
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/reservat/XiaoyuanReservatServiceImpl.java

@@ -1,5 +1,9 @@
 package org.dromara.system.service.impl.reservat;
 
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import lombok.SneakyThrows;
+import org.dromara.common.core.domain.AjaxResult;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.domain.model.LoginUser;
 import org.dromara.common.core.utils.DateUtils;
@@ -13,14 +17,16 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.system.domain.reservat.XiaoyuanReservat;
+import org.dromara.system.domain.reservat.XiaoyuanReservatConfig;
 import org.dromara.system.domain.reservat.bo.XiaoyuanReservatBo;
+import org.dromara.system.domain.reservat.vo.XiaoyuanReservatConfigVo;
 import org.dromara.system.domain.reservat.vo.XiaoyuanReservatVo;
+import org.dromara.system.mapper.reservat.XiaoyuanReservatConfigMapper;
 import org.dromara.system.mapper.reservat.XiaoyuanReservatMapper;
 import org.dromara.system.service.reservat.IXiaoyuanReservatService;
 import org.springframework.stereotype.Service;
-import java.util.List;
-import java.util.Map;
-import java.util.Collection;
+
+import java.util.*;
 
 /**
  * 校园预约Service业务层处理
@@ -34,6 +40,8 @@ public class XiaoyuanReservatServiceImpl implements IXiaoyuanReservatService {
 
     private final XiaoyuanReservatMapper baseMapper;
 
+    private final XiaoyuanReservatConfigMapper xiaoyuanReservatConfigMapper;
+
     /**
      * 查询校园预约
      */
@@ -62,22 +70,33 @@ public class XiaoyuanReservatServiceImpl implements IXiaoyuanReservatService {
     }
 
     private LambdaQueryWrapper<XiaoyuanReservat> buildQueryWrapper(XiaoyuanReservatBo bo) {
-        Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<XiaoyuanReservat> lqw = Wrappers.lambdaQuery();
         lqw.like(StringUtils.isNotBlank(bo.getTeacherName()), XiaoyuanReservat::getTeacherName, bo.getTeacherName());
         lqw.eq(StringUtils.isNotBlank(bo.getTeacherPhone()), XiaoyuanReservat::getTeacherPhone, bo.getTeacherPhone());
         lqw.eq(StringUtils.isNotBlank(bo.getTenantId()), XiaoyuanReservat::getTenantId, bo.getTenantId());
         lqw.like(StringUtils.isNotBlank(bo.getVisitName()), XiaoyuanReservat::getVisitName, bo.getVisitName());
         lqw.eq(StringUtils.isNotBlank(bo.getVisitPhone()), XiaoyuanReservat::getVisitPhone, bo.getVisitPhone());
-        lqw.eq(StringUtils.isNotBlank(bo.getVisitIdCard()), XiaoyuanReservat::getVisitIdCard, bo.getVisitIdCard());
-        lqw.eq(StringUtils.isNotBlank(bo.getVisitReason()), XiaoyuanReservat::getVisitReason, bo.getVisitReason());
-        lqw.eq(StringUtils.isNotBlank(bo.getVisitRemark()), XiaoyuanReservat::getVisitRemark, bo.getVisitRemark());
-        lqw.eq(bo.getVisitDate() != null, XiaoyuanReservat::getVisitDate, bo.getVisitDate());
         lqw.eq(bo.getVisitTime() != null, XiaoyuanReservat::getVisitTime, bo.getVisitTime());
         lqw.eq(bo.getVisitDateTime() != null, XiaoyuanReservat::getVisitDateTime, bo.getVisitDateTime());
-        lqw.eq(StringUtils.isNotBlank(bo.getVisitQr()), XiaoyuanReservat::getVisitQr, bo.getVisitQr());
         lqw.eq(StringUtils.isNotBlank(bo.getVisitType()), XiaoyuanReservat::getVisitType, bo.getVisitType());
         lqw.eq(StringUtils.isNotBlank(bo.getVisitStatus()), XiaoyuanReservat::getVisitStatus, bo.getVisitStatus());
+        String dataType = bo.getDataType();
+        if ("1".equals(dataType)){
+            bo.setVisitDate(DateUtils.getDate());
+            lqw.eq(bo.getVisitDate() != null, XiaoyuanReservat::getVisitDate, bo.getVisitDate());
+        }
+        if ("2".equals(dataType)){
+            bo.setVisitDate(DateUtils.getDateByDays(-1));
+            lqw.eq(bo.getVisitDate() != null, XiaoyuanReservat::getVisitDate, bo.getVisitDate());
+        }
+
+
+        if ("3".equals(dataType)){
+            lqw.apply("visit_remark >= DATE_SUB(NOW(), INTERVAL 7 DAY)");
+        }
+        if ("4".equals(dataType)){
+            lqw.apply("visit_remark >= DATE_SUB(NOW(), INTERVAL 30 DAY)");
+        }
         return lqw;
     }
 
@@ -123,6 +142,76 @@ public class XiaoyuanReservatServiceImpl implements IXiaoyuanReservatService {
         return baseMapper.deleteBatchIds(ids) > 0;
     }
 
+    /**
+     * 根据教职工手机号查询可预约的时间
+     */
+    @SneakyThrows
+    @Override
+    public AjaxResult subscribe(XiaoyuanReservatBo bo) {
+        LambdaQueryWrapper<XiaoyuanReservatConfig> lqw = Wrappers.lambdaQuery();
+        lqw.eq(StringUtils.isNotBlank(bo.getTeacherPhone()), XiaoyuanReservatConfig::getTeacherPhone, bo.getTeacherPhone());
+        XiaoyuanReservatConfigVo xiaoyuanReservatConfigVo = xiaoyuanReservatConfigMapper.selectVoOne(lqw);
+        //获取预约的年月
+        String visitDate = bo.getVisitDate();
+        List<String> monthFullDay = DateUtils.getMonthFullDay(DateUtils.parseDate(visitDate));
+        LambdaQueryWrapper<XiaoyuanReservat> lqwr = Wrappers.lambdaQuery();
+        JSONArray jsonArray = new JSONArray();
+        if (monthFullDay.size() > 0){
+         //判断日期是星期几,是否可以预约
+            for (String date : monthFullDay) {
+                JSONObject jsonObject = new JSONObject();
+                int week = DateUtils.dayForWeek(date);
+                jsonObject.put("date",week);
+                jsonObject.put("title","不可约");
+                String reservatConfigDate = xiaoyuanReservatConfigVo.getReservatConfigDate();
+                if (String.valueOf(week).contains(reservatConfigDate)){
+                    jsonObject.put("title","可预约");
+                    //包含去查询改天是否被预约满
+                    lqwr.eq(StringUtils.isNotBlank(bo.getTeacherPhone()), XiaoyuanReservat::getTeacherPhone, bo.getTeacherPhone());
+                    lqwr.eq(XiaoyuanReservat::getVisitDate, week);
+                    List<XiaoyuanReservatVo> xiaoyuanReservatVos = baseMapper.selectVoList(lqwr);
+                    if (xiaoyuanReservatVos != null && xiaoyuanReservatVos.size() > 0){
+                        //判断是否大于次数
+                        Long reservatConfigNum = xiaoyuanReservatConfigVo.getReservatConfigNum();
+                        if (xiaoyuanReservatVos.size() > reservatConfigNum){
+                            //说明约满
+                            jsonObject.put("title","已约满");
+                        }
+                    }
+                }
+                jsonArray.add(jsonObject);
+            }
+        }
+        return AjaxResult.success(jsonArray);
+    }
+
+
+    /**
+     * 预约首页统计
+     */
+    @Override
+    public AjaxResult indexStatistics(XiaoyuanReservatBo bo) {
+        Map<String,Object> map = new HashMap<>(4);
+        map.put("laiFang",0);
+        map.put("yuYue",0);
+        map.put("todayV",0);
+        map.put("todayLaiFang",0);
+        LambdaQueryWrapper<XiaoyuanReservat> lqw = Wrappers.lambdaQuery();
+        lqw.eq(StringUtils.isNotBlank(bo.getTenantId()), XiaoyuanReservat::getTenantId, bo.getTenantId());
+        List<XiaoyuanReservat> xiaoyuanReservats = baseMapper.selectList(lqw);
+        if (xiaoyuanReservats != null && xiaoyuanReservats.size() > 0){
+            //来访数
+            long laiFang = xiaoyuanReservats.stream().filter(s -> "2".equals(s.getVisitStatus())).count();
+            long todayV = xiaoyuanReservats.stream().filter(s -> DateUtils.getDate().equals(s.getVisitDate())).count();
+            long todayLaiFang = xiaoyuanReservats.stream().filter(s -> DateUtils.getDate().equals(s.getVisitDate())).filter(s -> "2".equals(s.getVisitStatus())).count();
+            map.put("laiFang",laiFang);
+            map.put("yuYue",xiaoyuanReservats.size());
+            map.put("todayV",todayV);
+            map.put("todayLaiFang",todayLaiFang);
+        }
+        return AjaxResult.success(map);
+    }
+
     /**
      * 校园预约核销
      *

+ 13 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/reservat/IXiaoyuanReservatService.java

@@ -2,6 +2,7 @@ package org.dromara.system.service.reservat;
 
 
 import org.dromara.common.core.domain.R;
+import org.dromara.common.core.domain.AjaxResult;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.system.domain.reservat.bo.XiaoyuanReservatBo;
@@ -48,6 +49,18 @@ public interface IXiaoyuanReservatService {
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
+    /**
+     * 根据教职工手机号查询可预约的时间
+     */
+    AjaxResult subscribe(XiaoyuanReservatBo bo);
+
+    /**
+     * 预约首页统计
+     * @param bo
+     * @return
+     */
+    AjaxResult indexStatistics(XiaoyuanReservatBo bo);
+
     /**
      * 校园预约核销
      *