Browse Source

班级考勤统计调整

dzx 8 months ago
parent
commit
5abe1af479

+ 1 - 0
src/main/java/com/xjrsoft/module/attendance/controller/StatisticsController.java

@@ -170,6 +170,7 @@ public class StatisticsController {
                     new QueryWrapper<StudentOutInRecord>().lambda()
                             .between(StudentOutInRecord::getRecordTime, startTime, endTime)
                             .eq(StudentOutInRecord::getStatus, 1)
+                            .groupBy(StudentOutInRecord::getUserId)
             );
             //实到人数
             statisticsVo.setActualCount(Long.valueOf(outInRecords.size()));

+ 57 - 3
src/main/java/com/xjrsoft/module/job/AttenDanceWarnNoticeTask.java

@@ -4,6 +4,7 @@ import cn.hutool.core.util.IdUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.common.utils.WeChatUtil;
 import com.xjrsoft.module.attendance.entity.AttendanceRuleDetails;
 import com.xjrsoft.module.attendance.entity.AttendanceUserRelation;
@@ -25,11 +26,14 @@ import org.springframework.stereotype.Component;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * 考勤预警通知,提醒教师和学生是否该上课等
@@ -101,10 +105,27 @@ public class AttenDanceWarnNoticeTask {
             log.info("未能查询出规则,不进行推送");
             return;
         }
+
+        //获取最近的时间
+        LocalDateTime recentlyTime = getRecentlyTime(ruleDetailsList, now);
+        if(!recentlyTime.isEqual(now)){
+            log.info("未到时间,不进行推送");
+            return;
+        }
         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();
         messageLog.setTemplateId(wechatTemplate);
-//        messageLog.setSendTime(recentlyTime);
+        messageLog.setSendTime(recentlyTime);
 
         List<XjrUser> userList = getUserList(allTodyRule.keySet());
         for (XjrUser xjrUser : userList) {
@@ -113,9 +134,10 @@ public class AttenDanceWarnNoticeTask {
             if(status == 0){
                 continue;
             }
+            //查询这个用户最新的考勤状态
             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();
@@ -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));
+    }
 
 }

+ 1 - 1
src/main/resources/application.yml

@@ -5,7 +5,7 @@ server:
 spring:
   # 环境 dev|pre|prod
   profiles:
-    active: dev
+    active: prod
   # jackson时间格式化
   jackson:
     time-zone: GMT+8