Browse Source

数据同步调整

dzx 4 months ago
parent
commit
a15b2d7171

+ 1 - 0
src/main/java/com/xjrsoft/module/hikvision/mapper/HikvisionDataMapper.java

@@ -33,4 +33,5 @@ public interface HikvisionDataMapper extends MPJBaseMapper<HikvisionData> {
      * @param sourceId
      */
     String getHikvisionIdBySourceId(String sourceId);
+
 }

+ 5 - 0
src/main/java/com/xjrsoft/module/hikvision/service/IHikvisionDataService.java

@@ -2,6 +2,9 @@ package com.xjrsoft.module.hikvision.service;
 
 import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.hikvision.entity.HikvisionData;
+
+import java.util.Map;
+
 /**
 * @title: 海康基础数据对照
 * @Author dzx
@@ -13,4 +16,6 @@ public interface IHikvisionDataService extends MPJBaseService<HikvisionData> {
 
     String getHikvisionIdBySourceId(String sourceId);
 
+    Map<String, String> getUserIdMap();
+
 }

+ 29 - 0
src/main/java/com/xjrsoft/module/hikvision/service/impl/HikvisionDataServiceImpl.java

@@ -1,5 +1,6 @@
 package com.xjrsoft.module.hikvision.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.xjrsoft.module.hikvision.entity.HikvisionData;
 import com.xjrsoft.module.hikvision.mapper.HikvisionDataMapper;
@@ -7,6 +8,11 @@ import com.xjrsoft.module.hikvision.service.IHikvisionDataService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 /**
  * @title: 海康基础数据对照
  * @Author dzx
@@ -22,4 +28,27 @@ public class HikvisionDataServiceImpl extends MPJBaseServiceImpl<HikvisionDataMa
     public String getHikvisionIdBySourceId(String sourceId) {
         return this.baseMapper.getHikvisionIdBySourceId(sourceId);
     }
+
+    @Override
+    public Map<String, String> getUserIdMap() {
+        Map<String, String> result = new HashMap<>();
+        List<HikvisionData> studentList = this.list(
+                new QueryWrapper<HikvisionData>().lambda()
+                        .eq(HikvisionData::getTableName, "base_student")
+                        .isNotNull(HikvisionData::getSourceId)
+                        .isNotNull(HikvisionData::getHikvisionId)
+        );
+        Map<String, String> studentMap = studentList.stream().collect(Collectors.toMap(HikvisionData::getHikvisionId, HikvisionData::getSourceId));
+        result.putAll(studentMap);
+
+        List<HikvisionData> teacherList = this.list(
+                new QueryWrapper<HikvisionData>().lambda()
+                        .eq(HikvisionData::getTableName, "base_teacher")
+                        .isNotNull(HikvisionData::getSourceId)
+                        .isNotNull(HikvisionData::getHikvisionId)
+        );
+        Map<String, String> teacherMap = teacherList.stream().collect(Collectors.toMap(HikvisionData::getHikvisionId, HikvisionData::getSourceId));
+        result.putAll(teacherMap);
+        return result;
+    }
 }

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

@@ -18,6 +18,7 @@ import java.sql.Types;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
+import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -30,8 +31,9 @@ public class OutInRecordUtil {
         String photoValue = (facePhoto != null && !facePhoto.equals("null")) ? facePhoto : "";
 
         String sql = "INSERT INTO teacher_out_in_record(create_date, user_id, record_time, face_photo, eventId, status,delete_mark,enabled_mark, attendance_status) " +
-                "VALUES(now(), '"  + userId + "', '" + recordTime + "', '" +
-                photoValue + "', '" + eventId + "', '" +status + "',0,1,'" + attendanceStatus + "')";
+                "select now(), '"  + userId + "', '" + recordTime + "', '" +
+                photoValue + "', '" + eventId + "', '" +status + "',0,1,'" + attendanceStatus + "'" +
+                " WHERE NOT EXISTS (SELECT 1 FROM teacher_out_in_record WHERE eventId = '" + eventId + "')";
         SqlRunnerAdapter.db().insert(sql);
 
         String updSql = "UPDATE attendance_user_relation SET " +
@@ -46,8 +48,9 @@ public class OutInRecordUtil {
         String photoValue = (facePhoto != null && !facePhoto.equals("null")) ? facePhoto : "";
 
         String sql = "INSERT INTO student_out_in_record(create_date, user_id, teacher_id, class_id, face_photo, record_time , eventId,status,delete_mark,enabled_mark, attendance_status) " +
-                "VALUES(now(), '" + userId + "', '" + teacherId + "', '" +
-                classId + "', '" + photoValue + "', '" + recordTime + "', '" + eventId + "', '" + status + "',0,1,'" + attendanceStatus + "')";
+                "select now(), '" + userId + "', '" + teacherId + "', '" +
+                classId + "', '" + photoValue + "', '" + recordTime + "', '" + eventId + "', '" + status + "',0,1,'" + attendanceStatus + "'" +
+                " WHERE NOT EXISTS (SELECT 1 FROM student_out_in_record WHERE eventId = '" + eventId + "')";
         SqlRunnerAdapter.db().insert(sql);
 
         String updSql = "UPDATE attendance_user_relation SET " +
@@ -61,8 +64,9 @@ public class OutInRecordUtil {
 
     public void visitInsertRecord(Long reservation_school_people_id, String recordTime,String facePhoto, String status, String eventId){
         String sql = "INSERT INTO visitor_out_in_record(create_date, reservation_school_people_id, record_time, face_photo, event_id, status,delete_mark,enabled_mark) " +
-                "VALUES(now(), '"  + reservation_school_people_id + "', '" +
-                 recordTime + "', '" + facePhoto + "', '" + eventId + "', '" + status +  "',0,1)";
+                "select now(), '"  + reservation_school_people_id + "', '" +
+                 recordTime + "', '" + facePhoto + "', '" + eventId + "', '" + status +  "',0,1" +
+                "  WHERE NOT EXISTS (SELECT 1 FROM visitor_out_in_record WHERE eventId = '" + eventId + "')";
         SqlRunnerAdapter.db().insert(sql);
     }
 
@@ -147,15 +151,15 @@ public class OutInRecordUtil {
         SqlRunnerAdapter.db().dynamicUpdate(tableName, params, where);
     }
 
-    public void GetTeacherAndStudentRecords(FaceImportMapper faceImportMapper) throws ParseException {
+    public void GetTeacherAndStudentRecords(FaceImportMapper faceImportMapper, LocalDateTime startDateTime, LocalDateTime endDateTime) throws ParseException {
         JsonArray responseBuilder = new JsonArray();
 
         AtomicInteger pageNo = new AtomicInteger(1);
-        int pageSize = 100;
+        int pageSize = 1000;
         boolean hasMorePages = true;
 
         while (hasMorePages) {
-            String response = GetDoorEvent(pageNo, pageSize);
+            String response = GetDoorEvent(pageNo, pageSize, startDateTime, endDateTime);
 
             JsonElement responseElement = new Gson().fromJson(response, JsonElement.class);
             JsonArray dataList = responseElement.getAsJsonObject().getAsJsonObject("data").getAsJsonArray("list");
@@ -352,7 +356,7 @@ public class OutInRecordUtil {
         return attendanceStatus;
     }
 
-    public void GetVisitRecord(FaceImportMapper faceImportMapper) throws ParseException {
+    public void GetVisitRecord(FaceImportMapper faceImportMapper, LocalDateTime startDateTime, LocalDateTime endDateTime) throws ParseException {
         ApiUtil apiUtil = new ApiUtil();
 
         AtomicInteger pageNo = new AtomicInteger(1);
@@ -369,7 +373,7 @@ public class OutInRecordUtil {
             paramJson.addProperty("pageSize", pageSize);
 
             String response = apiUtil.doPost(apiPath, String.valueOf(paramJson), null);
-            String responseDoor = GetDoorEvent(pageNo,pageSize);
+            String responseDoor = GetDoorEvent(pageNo, pageSize, startDateTime, endDateTime);
 
             JsonElement responseElement = new Gson().fromJson(response, JsonElement.class);
             JsonElement responseDoorElement = new Gson().fromJson(responseDoor, JsonElement.class);
@@ -422,7 +426,7 @@ public class OutInRecordUtil {
 
     }
 
-    public void GetVehicleRecord(FaceImportMapper faceImportMapper) throws ParseException {
+    public void GetVehicleRecord(FaceImportMapper faceImportMapper, LocalDateTime startDateTime, LocalDateTime endDateTime) throws ParseException {
         ApiUtil apiUtil = new ApiUtil();
 
         AtomicInteger pageNo = new AtomicInteger(1);
@@ -436,8 +440,8 @@ public class OutInRecordUtil {
             JsonObject paramJson = new JsonObject();
             paramJson.addProperty("pageNo", pageNo.getAndIncrement());
             paramJson.addProperty("pageSize", pageSize);
-//            paramJson.addProperty("startTime", "2024-06-20T00:00:00+08:00");
-//            paramJson.addProperty("endTime", "2024-06-21T16:00:00+08:00");
+            paramJson.addProperty("startTime", startDateTime.atOffset(ZoneOffset.ofHours(8)).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
+            paramJson.addProperty("endTime", endDateTime.atOffset(ZoneOffset.ofHours(8)).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
 
             String response = apiUtil.doPost(apiPath, String.valueOf(paramJson), null);
             JsonElement responseElement = new Gson().fromJson(response, JsonElement.class);
@@ -452,7 +456,7 @@ public class OutInRecordUtil {
             hasMorePages = pageNo.getAndIncrement() * pageSize < totalCount;
         }
 
-        InsertVehicleRecords(responseBuilder,faceImportMapper);
+        InsertVehicleRecords(responseBuilder, faceImportMapper);
     }
 
     private void InsertVehicleRecords(JsonArray doorEventsResponse, FaceImportMapper faceImportMapper) throws ParseException {
@@ -526,7 +530,7 @@ public class OutInRecordUtil {
         }
     }
 
-    private String GetDoorEvent(AtomicInteger pageNo, int pageSize){
+    private String GetDoorEvent(AtomicInteger pageNo, int pageSize, LocalDateTime startDateTime, LocalDateTime endDateTime){
         ApiUtil apiUtil = new ApiUtil();
         String apiPath = "/api/acs/v2/door/events";
         JsonObject paramJson = new JsonObject();
@@ -535,6 +539,8 @@ public class OutInRecordUtil {
         paramJson.addProperty("pageNo", pageNo.get());
         paramJson.addProperty("pageSize", pageSize);
         paramJson.add("eventTypes", eventList);
+        paramJson.addProperty("startTime", startDateTime.atOffset(ZoneOffset.ofHours(8)).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
+        paramJson.addProperty("endTime", endDateTime.atOffset(ZoneOffset.ofHours(8)).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
 
         return apiUtil.doPost(apiPath, String.valueOf(paramJson), null);
     }

+ 18 - 4
src/main/java/com/xjrsoft/module/job/InsertOutInRecordTask.java

@@ -1,6 +1,7 @@
 package com.xjrsoft.module.job;
 
 import cn.hutool.extra.spring.SpringUtil;
+import com.xjrsoft.module.hikvision.service.IHikvisionDataService;
 import com.xjrsoft.module.hikvision.util.OutInRecordUtil;
 import com.xjrsoft.module.teacher.mapper.FaceImportMapper;
 import lombok.extern.slf4j.Slf4j;
@@ -8,6 +9,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import java.time.LocalDateTime;
+import java.util.Map;
+
 /**
  * @author dzx
  * @date 2024/5/8
@@ -20,7 +24,10 @@ public class InsertOutInRecordTask {
 
     OutInRecordUtil out_in_recordUtil = new OutInRecordUtil();
 
-    @Scheduled(cron = "0 */30 * * * ?")
+    @Autowired
+    private IHikvisionDataService hikvisionDataService;
+
+    @Scheduled(cron = "0 30 0 * * ?")
     public void execute() {
         RefreshConnectionPool();
     }
@@ -32,12 +39,19 @@ public class InsertOutInRecordTask {
         }
         log.info("开始拉取海康威视基础数据");
         try {
+            //获取时间,并计算出前一天的开始时间和结束时间
+            LocalDateTime now = LocalDateTime.now();
+            LocalDateTime startDateTime = now.plusDays(-1).withHour(0).withMinute(0).withSecond(0).withNano(0);
+            LocalDateTime endDateTime = startDateTime.plusDays(1).plusSeconds(-1);
+
+            //Map<String, String> userIdMap = hikvisionDataService.getUserIdMap();
+
             //教师&学生拉取数据
-//            out_in_recordUtil.GetTeacherAndStudentRecords(use, faceImportMapper);
+            out_in_recordUtil.GetTeacherAndStudentRecords(faceImportMapper, startDateTime, endDateTime);
             //拉取车辆数据
-//            out_in_recordUtil.GetVehicleRecord(use, faceImportMapper);
+            out_in_recordUtil.GetVehicleRecord(faceImportMapper, startDateTime, endDateTime);
             //拉取访客数据
-            out_in_recordUtil.GetVisitRecord(faceImportMapper);
+            out_in_recordUtil.GetVisitRecord(faceImportMapper, startDateTime, endDateTime);
 
             log.info("数据拉取完成");
         } catch (Exception e) {

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

@@ -208,7 +208,7 @@ class HikvisionBaseDataTaskTest {
 
     @Test
     void testCarInsert() throws Exception {
-        outInRecordUtil.GetVehicleRecord(faceImportMapper);
+        //outInRecordUtil.GetVehicleRecord(faceImportMapper);
     }
 
     public static void selectCar(Db db, String tableName) throws SQLException {