|
@@ -4,6 +4,7 @@ import cn.hutool.core.util.IdUtil;
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
+import com.xjrsoft.common.utils.VoToColumnUtil;
|
|
import com.xjrsoft.common.utils.WeChatUtil;
|
|
import com.xjrsoft.common.utils.WeChatUtil;
|
|
import com.xjrsoft.module.attendance.entity.AttendanceRuleDetails;
|
|
import com.xjrsoft.module.attendance.entity.AttendanceRuleDetails;
|
|
import com.xjrsoft.module.attendance.entity.AttendanceUserRelation;
|
|
import com.xjrsoft.module.attendance.entity.AttendanceUserRelation;
|
|
@@ -25,11 +26,14 @@ import org.springframework.stereotype.Component;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.temporal.ChronoUnit;
|
|
import java.time.temporal.ChronoUnit;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.Collections;
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
import java.util.Set;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 考勤预警通知,提醒教师和学生是否该上课等
|
|
* 考勤预警通知,提醒教师和学生是否该上课等
|
|
@@ -101,10 +105,27 @@ public class AttenDanceWarnNoticeTask {
|
|
log.info("未能查询出规则,不进行推送");
|
|
log.info("未能查询出规则,不进行推送");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ //获取最近的时间
|
|
|
|
+ LocalDateTime recentlyTime = getRecentlyTime(ruleDetailsList, now);
|
|
|
|
+ if(!recentlyTime.isEqual(now)){
|
|
|
|
+ log.info("未到时间,不进行推送");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
String wechatTemplate = weChatUtil.getAttenDanceWarnTemplate();
|
|
String wechatTemplate = weChatUtil.getAttenDanceWarnTemplate();
|
|
|
|
+ WechatMessageLog log = wechatMessageLogService.getOne(
|
|
|
|
+ new QueryWrapper<WechatMessageLog>().lambda()
|
|
|
|
+ .select(WechatMessageLog.class, x -> VoToColumnUtil.fieldsToColumns(WechatMessageLog.class).contains(x.getProperty()))
|
|
|
|
+ .eq(WechatMessageLog::getSendTime, recentlyTime)
|
|
|
|
+ .eq(WechatMessageLog::getTemplateId, wechatTemplate)
|
|
|
|
+ );
|
|
|
|
+ if(log != null){//已经推送过,不再进行推送
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
WechatMessageLog messageLog = new WechatMessageLog();
|
|
WechatMessageLog messageLog = new WechatMessageLog();
|
|
messageLog.setTemplateId(wechatTemplate);
|
|
messageLog.setTemplateId(wechatTemplate);
|
|
-// messageLog.setSendTime(recentlyTime);
|
|
|
|
|
|
+ messageLog.setSendTime(recentlyTime);
|
|
|
|
|
|
List<XjrUser> userList = getUserList(allTodyRule.keySet());
|
|
List<XjrUser> userList = getUserList(allTodyRule.keySet());
|
|
for (XjrUser xjrUser : userList) {
|
|
for (XjrUser xjrUser : userList) {
|
|
@@ -113,9 +134,10 @@ public class AttenDanceWarnNoticeTask {
|
|
if(status == 0){
|
|
if(status == 0){
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
+ //查询这个用户最新的考勤状态
|
|
AttendanceUserRelation userRelation = allUserStatus.get(xjrUser.getId());
|
|
AttendanceUserRelation userRelation = allUserStatus.get(xjrUser.getId());
|
|
- if(userRelation.getAttendanceTime().toLocalDate().isEqual(now.toLocalDate())){
|
|
|
|
-
|
|
|
|
|
|
+ if(userRelation.getAttendanceTime().toLocalDate().isEqual(now.toLocalDate()) && "到校".equals(userRelation.getAttendanceStatus())){
|
|
|
|
+ continue;
|
|
}
|
|
}
|
|
|
|
|
|
WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
|
|
WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
|
|
@@ -215,6 +237,38 @@ public class AttenDanceWarnNoticeTask {
|
|
);
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ LocalDateTime getRecentlyTime(List<AttendanceRuleDetails> ruleDetails, LocalDateTime now){
|
|
|
|
+ List<LocalDateTime> result = new ArrayList<>();
|
|
|
|
+ for (AttendanceRuleDetails ruleDetail : ruleDetails) {
|
|
|
|
+ if(ruleDetail.getIsAllowInOutSchool() != null && ruleDetail.getIsAllowInOutSchool() == 1
|
|
|
|
+ && ruleDetail.getIsAttendance() != null && ruleDetail.getIsAttendance() == 1){
|
|
|
|
+ if(ruleDetail.getAmStartTime() != null){
|
|
|
|
+ LocalDateTime amStartTime = now.with(ruleDetail.getAmStartTime().toLocalTime());
|
|
|
|
+ result.add(amStartTime);
|
|
|
|
+ }
|
|
|
|
+ if(ruleDetail.getPmStartTime() != null){
|
|
|
|
+ LocalDateTime pmStartTime = now.with(ruleDetail.getPmStartTime().toLocalTime());
|
|
|
|
+ result.add(pmStartTime);
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ if(ruleDetail.getEveningStartTime() != null){
|
|
|
|
+ LocalDateTime eveningStartTime = now.with(ruleDetail.getEveningStartTime().toLocalTime());
|
|
|
|
+ result.add(eveningStartTime);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if(result.isEmpty()){
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ Map<Long, LocalDateTime> timeMap = new HashMap<>();
|
|
|
|
+ for (LocalDateTime localDateTime : result) {
|
|
|
|
+ long between = ChronoUnit.SECONDS.between(now, localDateTime);
|
|
|
|
+ timeMap.put(Math.abs(between), localDateTime);
|
|
|
|
+ }
|
|
|
|
+ List<Long> collect = timeMap.keySet().stream().collect(Collectors.toList());
|
|
|
|
+ Collections.sort(collect, Long::compare);
|
|
|
|
+
|
|
|
|
+ return timeMap.get(collect.get(0));
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|