Pārlūkot izejas kodu

解决实体类转换错误问题

dzx 1 gadu atpakaļ
vecāks
revīzija
a8f2a40c06

+ 3 - 0
src/main/java/com/xjrsoft/common/utils/SqlRunnerAdapterUtil.java

@@ -1,6 +1,8 @@
 package com.xjrsoft.common.utils;
 
 import java.lang.reflect.Field;
+import java.sql.Time;
+import java.time.LocalTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -97,4 +99,5 @@ public class SqlRunnerAdapterUtil {
 
         return dataList.toArray(new Integer[dataList.size()]);
     }
+
 }

+ 17 - 17
src/main/java/com/xjrsoft/module/attendance/entity/AttendanceRuleDetails.java

@@ -10,7 +10,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
-import java.time.LocalTime;
+import java.sql.Time;
 import java.util.Date;
 
 
@@ -114,12 +114,12 @@ public class AttendanceRuleDetails implements Serializable {
     * 上午上学时间
     */
     @ApiModelProperty("上午上学时间")
-    private LocalTime amStartTime;
+    private Time amStartTime;
     /**
     * 上午放学时间
     */
     @ApiModelProperty("上午放学时间")
-    private LocalTime amEndTime;
+    private Time amEndTime;
     /**
     * 上午迟到旷课分钟数
     */
@@ -134,12 +134,12 @@ public class AttendanceRuleDetails implements Serializable {
     * 上午为节假日前一天时上学时间
     */
     @ApiModelProperty("上午为节假日前一天时上学时间")
-    private LocalTime amHolidaysStartTime;
+    private Time amHolidaysStartTime;
     /**
     * 上午为节假日前一天时放学时间
     */
     @ApiModelProperty("上午为节假日前一天时放学时间")
-    private LocalTime amHolidaysEndTime;
+    private Time amHolidaysEndTime;
     /**
     * 下午是否启用(1:是 0:否)
     */
@@ -149,12 +149,12 @@ public class AttendanceRuleDetails implements Serializable {
     * 下午上学时间
     */
     @ApiModelProperty("下午上学时间")
-    private LocalTime pmStartTime;
+    private Time pmStartTime;
     /**
     * 下午放学时间
     */
     @ApiModelProperty("下午放学时间")
-    private LocalTime pmEndTime;
+    private Time pmEndTime;
     /**
     * 下午迟到旷课分钟数
     */
@@ -169,12 +169,12 @@ public class AttendanceRuleDetails implements Serializable {
     * 下午为节假日前一天时上学时间
     */
     @ApiModelProperty("下午为节假日前一天时上学时间")
-    private LocalTime pmHolidaysStartTime;
+    private Time pmHolidaysStartTime;
     /**
     * 下午为节假日前一天时放学时间
     */
     @ApiModelProperty("下午为节假日前一天时放学时间")
-    private LocalTime pmHolidaysEndTime;
+    private Time pmHolidaysEndTime;
     /**
     * 晚上是否启用(1:是 0:否)
     */
@@ -184,12 +184,12 @@ public class AttendanceRuleDetails implements Serializable {
     * 晚上上学时间
     */
     @ApiModelProperty("晚上上学时间")
-    private LocalTime eveningStartTime;
+    private Time eveningStartTime;
     /**
     * 晚上放学时间
     */
     @ApiModelProperty("晚上放学时间")
-    private LocalTime eveningEndTime;
+    private Time eveningEndTime;
     /**
     * 晚上迟到旷课分钟数
     */
@@ -204,12 +204,12 @@ public class AttendanceRuleDetails implements Serializable {
     * 晚上为节假日前一天时上学时间
     */
     @ApiModelProperty("晚上为节假日前一天时上学时间")
-    private LocalTime eveningHolidaysStartTime;
+    private Time eveningHolidaysStartTime;
     /**
     * 晚上为节假日前一天时放学时间
     */
     @ApiModelProperty("晚上为节假日前一天时放学时间")
-    private LocalTime eveningHolidaysEndTime;
+    private Time eveningHolidaysEndTime;
     /**
     * 考勤规则(attendance_rule_category)
     */
@@ -221,14 +221,14 @@ public class AttendanceRuleDetails implements Serializable {
     private Integer holidaysLastDayInOut;
 
     @ApiModelProperty("返校上学时间")
-    private LocalTime returnStartTime;
+    private Time returnStartTime;
 
     @ApiModelProperty("返校放学时间")
-    private LocalTime returnEndTime;
+    private Time returnEndTime;
 
     @ApiModelProperty("节假日迟到旷课时间")
-    private Integer holidaysLateMinutes;
+    private Time holidaysLateMinutes;
 
     @ApiModelProperty("为节假日前一天时放学时间")
-    private LocalTime holidaysEndTime;
+    private Time holidaysEndTime;
 }

+ 30 - 30
src/main/java/com/xjrsoft/module/hikvision/util/OutInRecordUtil.java

@@ -175,20 +175,20 @@ public class OutInRecordUtil {
                 } else {
                     LocalDateTime amStartTime = null, amEndTime = null, pmStartTime = null, pmEndTime = null, eveningStartTime = null, eveningEndTime = null;
                     if (ruleDetails.getAmStatus() != null && ruleDetails.getAmStatus() == 1) {
-                        amStartTime = recordTime.withHour(ruleDetails.getAmStartTime().getHour())
-                                .withMinute(ruleDetails.getAmStartTime().getMinute())
-                                .withSecond(ruleDetails.getAmStartTime().getSecond());
-                        amEndTime = recordTime.withHour(ruleDetails.getAmEndTime().getHour())
-                                .withMinute(ruleDetails.getAmEndTime().getMinute())
-                                .withSecond(ruleDetails.getAmEndTime().getSecond());
+                        amStartTime = recordTime.withHour(ruleDetails.getAmStartTime().toLocalTime().getHour())
+                                .withMinute(ruleDetails.getAmStartTime().toLocalTime().getMinute())
+                                .withSecond(ruleDetails.getAmStartTime().toLocalTime().getSecond());
+                        amEndTime = recordTime.withHour(ruleDetails.getAmEndTime().toLocalTime().getHour())
+                                .withMinute(ruleDetails.getAmEndTime().toLocalTime().getMinute())
+                                .withSecond(ruleDetails.getAmEndTime().toLocalTime().getSecond());
                     }
                     if (ruleDetails.getPmStatus() != null && ruleDetails.getPmStatus() == 1) {
-                        pmStartTime = recordTime.withHour(ruleDetails.getPmStartTime().getHour())
-                                .withMinute(ruleDetails.getPmStartTime().getMinute())
-                                .withSecond(ruleDetails.getPmStartTime().getSecond());
-                        pmEndTime = recordTime.withHour(ruleDetails.getPmEndTime().getHour())
-                                .withMinute(ruleDetails.getPmEndTime().getMinute())
-                                .withSecond(ruleDetails.getPmEndTime().getSecond());
+                        pmStartTime = recordTime.withHour(ruleDetails.getPmStartTime().toLocalTime().getHour())
+                                .withMinute(ruleDetails.getPmStartTime().toLocalTime().getMinute())
+                                .withSecond(ruleDetails.getPmStartTime().toLocalTime().getSecond());
+                        pmEndTime = recordTime.withHour(ruleDetails.getPmEndTime().toLocalTime().getHour())
+                                .withMinute(ruleDetails.getPmEndTime().toLocalTime().getMinute())
+                                .withSecond(ruleDetails.getPmEndTime().toLocalTime().getSecond());
                     }
                     if (status == 0) {//出
                         if (recordTime.isBefore(amEndTime) && recordTime.isAfter(amStartTime)) {
@@ -229,28 +229,28 @@ public class OutInRecordUtil {
             }else{
                 LocalDateTime amStartTime = null, amEndTime = null, pmStartTime = null, pmEndTime = null, eveningStartTime = null, eveningEndTime = null;
                 if(ruleDetails.getAmStatus() != null && ruleDetails.getAmStatus() == 1){
-                    amStartTime = recordTime.withHour(ruleDetails.getAmStartTime().getHour())
-                            .withMinute(ruleDetails.getAmStartTime().getMinute())
-                            .withSecond(ruleDetails.getAmStartTime().getSecond());
-                    amEndTime = recordTime.withHour(ruleDetails.getAmEndTime().getHour())
-                            .withMinute(ruleDetails.getAmEndTime().getMinute())
-                            .withSecond(ruleDetails.getAmEndTime().getSecond());
+                    amStartTime = recordTime.withHour(ruleDetails.getAmStartTime().toLocalTime().getHour())
+                            .withMinute(ruleDetails.getAmStartTime().toLocalTime().getMinute())
+                            .withSecond(ruleDetails.getAmStartTime().toLocalTime().getSecond());
+                    amEndTime = recordTime.withHour(ruleDetails.getAmEndTime().toLocalTime().getHour())
+                            .withMinute(ruleDetails.getAmEndTime().toLocalTime().getMinute())
+                            .withSecond(ruleDetails.getAmEndTime().toLocalTime().getSecond());
                 }
                 if(ruleDetails.getPmStatus() != null && ruleDetails.getPmStatus() == 1){
-                    pmStartTime = recordTime.withHour(ruleDetails.getPmStartTime().getHour())
-                            .withMinute(ruleDetails.getPmStartTime().getMinute())
-                            .withSecond(ruleDetails.getPmStartTime().getSecond());
-                    pmEndTime = recordTime.withHour(ruleDetails.getPmEndTime().getHour())
-                            .withMinute(ruleDetails.getPmEndTime().getMinute())
-                            .withSecond(ruleDetails.getPmEndTime().getSecond());
+                    pmStartTime = recordTime.withHour(ruleDetails.getPmStartTime().toLocalTime().getHour())
+                            .withMinute(ruleDetails.getPmStartTime().toLocalTime().getMinute())
+                            .withSecond(ruleDetails.getPmStartTime().toLocalTime().getSecond());
+                    pmEndTime = recordTime.withHour(ruleDetails.getPmEndTime().toLocalTime().getHour())
+                            .withMinute(ruleDetails.getPmEndTime().toLocalTime().getMinute())
+                            .withSecond(ruleDetails.getPmEndTime().toLocalTime().getSecond());
                 }
                 if(ruleDetails.getEveningStatus() != null && ruleDetails.getEveningStatus() == 1){
-                    eveningStartTime = recordTime.withHour(ruleDetails.getEveningStartTime().getHour())
-                            .withMinute(ruleDetails.getEveningStartTime().getMinute())
-                            .withSecond(ruleDetails.getEveningStartTime().getSecond());
-                    eveningEndTime = recordTime.withHour(ruleDetails.getEveningEndTime().getHour())
-                            .withMinute(ruleDetails.getEveningEndTime().getMinute())
-                            .withSecond(ruleDetails.getEveningEndTime().getSecond());
+                    eveningStartTime = recordTime.withHour(ruleDetails.getEveningStartTime().toLocalTime().getHour())
+                            .withMinute(ruleDetails.getEveningStartTime().toLocalTime().getMinute())
+                            .withSecond(ruleDetails.getEveningStartTime().toLocalTime().getSecond());
+                    eveningEndTime = recordTime.withHour(ruleDetails.getEveningEndTime().toLocalTime().getHour())
+                            .withMinute(ruleDetails.getEveningEndTime().toLocalTime().getMinute())
+                            .withSecond(ruleDetails.getEveningEndTime().toLocalTime().getSecond());
                 }
                 if(status == 0){//出
                     if(recordTime.isBefore(amEndTime) && recordTime.isAfter(amStartTime)){

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

@@ -152,7 +152,7 @@ public class AttenDanceWarnNoticeTask {
             if(ruleDetails.getIsAllowInOutSchool() != null && ruleDetails.getIsAllowInOutSchool() != 1
                     && ruleDetails.getIsAttendance() != null && ruleDetails.getIsAttendance() == 1){
                 if(ruleDetails.getAmStartTime() != null){
-                    LocalDateTime amStartTime = judgeTime.with(ruleDetails.getAmStartTime());
+                    LocalDateTime amStartTime = judgeTime.with(ruleDetails.getAmStartTime().toLocalTime());
                     long amBetween = ChronoUnit.MINUTES.between(judgeTime, amStartTime);
                     if(amBetween == ruleDetails.getAgoMinutes()){
                         result.put(ruleDetails.getId(), - 1);
@@ -161,7 +161,7 @@ public class AttenDanceWarnNoticeTask {
                     }
                 }
                 if(ruleDetails.getPmStartTime() != null){
-                    LocalDateTime pmStartTime = judgeTime.with(ruleDetails.getPmStartTime());
+                    LocalDateTime pmStartTime = judgeTime.with(ruleDetails.getPmStartTime().toLocalTime());
                     long pmBetween = ChronoUnit.MINUTES.between(judgeTime, pmStartTime);
                     if(pmBetween == ruleDetails.getAgoMinutes()){
                         result.put(ruleDetails.getId(), - 1);
@@ -171,7 +171,7 @@ public class AttenDanceWarnNoticeTask {
                 }
 
                 if(ruleDetails.getEveningStartTime() != null){
-                    LocalDateTime eveningStartTime = judgeTime.with(ruleDetails.getEveningStartTime());
+                    LocalDateTime eveningStartTime = judgeTime.with(ruleDetails.getEveningStartTime().toLocalTime());
                     long eveningBetween = ChronoUnit.MINUTES.between(judgeTime, eveningStartTime);
                     if(eveningBetween == ruleDetails.getAgoMinutes()){
                         result.put(ruleDetails.getId(), - 1);

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

@@ -274,16 +274,16 @@ public class AttendanceMessageTask {
             if(ruleDetail.getIsAllowInOutSchool() != null && ruleDetail.getIsAllowInOutSchool() == 1
                     && ruleDetail.getIsAttendance() != null && ruleDetail.getIsAttendance() == 1){
                 if(ruleDetail.getAmStartTime() != null){
-                    LocalDateTime amStartTime = now.with(ruleDetail.getAmStartTime());
+                    LocalDateTime amStartTime = now.with(ruleDetail.getAmStartTime().toLocalTime());
                     result.add(amStartTime);
                 }
                 if(ruleDetail.getPmStartTime() != null){
-                    LocalDateTime pmStartTime = now.with(ruleDetail.getPmStartTime());
+                    LocalDateTime pmStartTime = now.with(ruleDetail.getPmStartTime().toLocalTime());
                     result.add(pmStartTime);
                 }
 
                 if(ruleDetail.getEveningStartTime() != null){
-                    LocalDateTime eveningStartTime = now.with(ruleDetail.getEveningStartTime());
+                    LocalDateTime eveningStartTime = now.with(ruleDetail.getEveningStartTime().toLocalTime());
                     result.add(eveningStartTime);
                 }
             }

+ 60 - 10
src/test/java/com/xjrsoft/module/hikvision/util/OutInRecordUtilTest2.java

@@ -1,17 +1,15 @@
 package com.xjrsoft.module.hikvision.util;
 
-import cn.hutool.core.util.IdUtil;
-import cn.hutool.db.Entity;
 import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
+import com.xjrsoft.common.utils.SqlRunnerAdapterUtil;
+import com.xjrsoft.module.attendance.entity.AttendanceRuleDetails;
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
 
 import java.time.LocalDateTime;
-import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
-import static org.junit.jupiter.api.Assertions.*;
-
 /**
  * @author dzx
  * @date 2024/6/17
@@ -20,11 +18,63 @@ import static org.junit.jupiter.api.Assertions.*;
 class OutInRecordUtilTest2 {
     @Test
     void test(){
-        String tableName = "table_25505";
-        Entity where = Entity.create(tableName);
-        where.set("id", IdUtil.getSnowflakeNextId());
-        where.set("ming_chen5366", "2024年6月17日08:44:06");
-        SqlRunnerAdapter.db().dynamicInsert(tableName, where);
+        LocalDateTime recentlyTime = LocalDateTime.now().withHour(8).withMinute(5).withSecond(0).withNano(0);
+        discernTeacherStatus(recentlyTime, 0 , 1793924355747000321L);
+
+    }
 
+    String discernTeacherStatus(LocalDateTime recordTime, int status, Long userId){
+        String attendanceStatus = "";
+        String dayOfWeek = recordTime.getDayOfWeek().name();
+        String sql = "SELECT t2.* FROM attendance_rule_category t1" +
+                " INNER JOIN attendance_rule_details t2 ON t1.id = t2.attendance_rule_category_id" +
+                " INNER JOIN attendance_user_relation t3 ON t1.id = t3.attendance_rule_category_id" +
+                " WHERE t1.delete_mark = 0 AND t2.delete_mark = 0 AND NOW() BETWEEN start_date AND end_date" +
+                " AND t2.date_type = '" + dayOfWeek + "' and t3.user_id = " + userId;
+        List<Map<String, Object>> ruleDetailsList = SqlRunnerAdapter.db().selectList(sql, AttendanceRuleDetails.class);
+        if(!ruleDetailsList.isEmpty()){
+            AttendanceRuleDetails ruleDetails = SqlRunnerAdapterUtil.convertMapToEntity(ruleDetailsList.get(0), AttendanceRuleDetails.class);
+            if (ruleDetails != null) {
+                if (ruleDetails.getIsAttendance() != null && ruleDetails.getIsAttendance() == 0) {
+                    attendanceStatus = "不考勤";
+                } else {
+                    LocalDateTime amStartTime = null, amEndTime = null, pmStartTime = null, pmEndTime = null, eveningStartTime = null, eveningEndTime = null;
+                    if (ruleDetails.getAmStatus() != null && ruleDetails.getAmStatus() == 1) {
+                        amStartTime = recordTime.withHour(ruleDetails.getAmStartTime().toLocalTime().getHour())
+                                .withMinute(ruleDetails.getAmStartTime().toLocalTime().getMinute())
+                                .withSecond(ruleDetails.getAmStartTime().toLocalTime().getSecond());
+                        amEndTime = recordTime.withHour(ruleDetails.getAmEndTime().toLocalTime().getHour())
+                                .withMinute(ruleDetails.getAmEndTime().toLocalTime().getMinute())
+                                .withSecond(ruleDetails.getAmEndTime().toLocalTime().getSecond());
+                    }
+                    if (ruleDetails.getPmStatus() != null && ruleDetails.getPmStatus() == 1) {
+                        pmStartTime = recordTime.withHour(ruleDetails.getPmStartTime().toLocalTime().getHour())
+                                .withMinute(ruleDetails.getPmStartTime().toLocalTime().getMinute())
+                                .withSecond(ruleDetails.getPmStartTime().toLocalTime().getSecond());
+                        pmEndTime = recordTime.withHour(ruleDetails.getPmEndTime().toLocalTime().getHour())
+                                .withMinute(ruleDetails.getPmEndTime().toLocalTime().getMinute())
+                                .withSecond(ruleDetails.getPmEndTime().toLocalTime().getSecond());
+                    }
+                    if (status == 0) {//出
+                        if (recordTime.isBefore(amEndTime) && recordTime.isAfter(amStartTime)) {
+                            attendanceStatus = "早退";
+                        } else if (recordTime.isBefore(pmEndTime) && recordTime.isAfter(pmStartTime)) {
+                            attendanceStatus = "早退";
+                        } else {
+                            attendanceStatus = "离校";
+                        }
+                    } else {//进
+                        if (recordTime.isBefore(amEndTime) && recordTime.isAfter(amStartTime)) {
+                            attendanceStatus = "迟到";
+                        } else if (recordTime.isBefore(pmEndTime) && recordTime.isAfter(pmStartTime)) {
+                            attendanceStatus = "迟到";
+                        } else {
+                            attendanceStatus = "到校";
+                        }
+                    }
+                }
+            }
+        }
+        return attendanceStatus;
     }
 }

+ 3 - 3
src/test/java/com/xjrsoft/module/job/AttendanceMessageTaskTest.java

@@ -316,16 +316,16 @@ class AttendanceMessageTaskTest {
             if(ruleDetail.getIsAllowInOutSchool() != null && ruleDetail.getIsAllowInOutSchool() == 1
                     && ruleDetail.getIsAttendance() != null && ruleDetail.getIsAttendance() == 1){
                 if(ruleDetail.getAmStartTime() != null){
-                    LocalDateTime amStartTime = now.with(ruleDetail.getAmStartTime());
+                    LocalDateTime amStartTime = now.with(ruleDetail.getAmStartTime().toLocalTime());
                     result.add(amStartTime);
                 }
                 if(ruleDetail.getPmStartTime() != null){
-                    LocalDateTime pmStartTime = now.with(ruleDetail.getPmStartTime());
+                    LocalDateTime pmStartTime = now.with(ruleDetail.getPmStartTime().toLocalTime());
                     result.add(pmStartTime);
                 }
 
                 if(ruleDetail.getEveningStartTime() != null){
-                    LocalDateTime eveningStartTime = now.with(ruleDetail.getEveningStartTime());
+                    LocalDateTime eveningStartTime = now.with(ruleDetail.getEveningStartTime().toLocalTime());
                     result.add(eveningStartTime);
                 }
             }

+ 1 - 1
src/test/java/com/xjrsoft/module/job/HikvisionBaseDataTaskTest.java

@@ -138,7 +138,7 @@ class HikvisionBaseDataTaskTest {
 //        selectCar(use, carTableName);
 
 //        outInRecordUtil.GetVehicleRecord(use,faceImportMapper);
-        outInRecordUtil.GetTeacherAndStudentRecords(use,faceImportMapper);
+        outInRecordUtil.GetTeacherAndStudentRecords(faceImportMapper);
 ////        selecAllPersonById(use);
 //        selectResource(use);
     }