|
@@ -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);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 校园预约核销
|
|
|
*
|