瀏覽代碼

人员出入绑定

brealinxx 9 月之前
父節點
當前提交
d38f0c1be3

+ 1 - 1
src/main/java/com/xjrsoft/module/hikvision/util/ApiUtil.java

@@ -67,7 +67,7 @@ public class ApiUtil {
     }
 
     public static String GetRedirectURL(String uri){
-        if (uri != null)
+        if (!uri.isEmpty())
             return "https://" + ApiUtil.host + "/" + uri;
         else
             return "";

+ 6 - 4
src/main/java/com/xjrsoft/module/hikvision/util/EventController.java

@@ -1,14 +1,12 @@
 package com.xjrsoft.module.hikvision.util;
 
 import cn.hutool.db.Db;
-import cn.hutool.jwt.JWTUtil;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
 import com.xjrsoft.common.constant.GlobalConstant;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.utils.DatasourceUtil;
 import com.xjrsoft.config.HikvisionConfig;
-import com.xjrsoft.module.system.controller.AuthorizeController;
 import com.xjrsoft.module.teacher.mapper.FaceImportMapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -26,12 +24,11 @@ import java.text.ParseException;
 
 @RestController
 @RequestMapping("/event")
-@Api(value = "/event", tags = "事件接收")
+@Api(value = "/event", tags = "订阅事件接收")
 @AllArgsConstructor
 @Slf4j
 public class EventController {
     private final Out_In_RecordUtil outInRecordUtil = new Out_In_RecordUtil();
-    private final AuthorizeController authorizeController;
 
     DataSource datasource = DatasourceUtil.getDataSource(GlobalConstant.DEFAULT_DATASOURCE_KEY);
     private final Db use = Db.use(datasource);
@@ -96,6 +93,11 @@ public class EventController {
         String apiPath = "/api/eventService/v1/eventSubscriptionView";
         String response = apiUtil.doPost(apiPath, null, null);
         System.out.println("output: " + response);
+//        Gson gson = new GsonBuilder().setPrettyPrinting().create();
+//
+//        JsonElement jsonElement = JsonParser.parseString(response);
+//
+//        String prettyJson = gson.toJson(jsonElement);
 
         return response;
     }

+ 77 - 67
src/main/java/com/xjrsoft/module/hikvision/util/Out_In_RecordUtil.java

@@ -134,41 +134,43 @@ public class Out_In_RecordUtil {
         List<AttendanceRuleDetails> ruleDetailsList = use.query(sql, AttendanceRuleDetails.class);
         if(!ruleDetailsList.isEmpty()){
             AttendanceRuleDetails ruleDetails = ruleDetailsList.get(0);
-            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().getHour())
-                            .withMinute(ruleDetails.getAmStartTime().getMinute())
-                            .withSecond(ruleDetails.getAmStartTime().getSecond());
-                    amEndTime = recordTime.withHour(ruleDetails.getAmEndTime().getHour())
-                            .withMinute(ruleDetails.getAmEndTime().getMinute())
-                            .withSecond(ruleDetails.getAmEndTime().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());
-                }
-                if(status == 0){//出
-                    if(recordTime.isBefore(amEndTime) && recordTime.isAfter(amStartTime)){
-                        attendanceStatus = "早退";
-                    }else if(recordTime.isBefore(pmEndTime) && recordTime.isAfter(pmStartTime)){
-                        attendanceStatus = "早退";
-                    }else{
-                        attendanceStatus = "离校";
+            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().getHour())
+                                .withMinute(ruleDetails.getAmStartTime().getMinute())
+                                .withSecond(ruleDetails.getAmStartTime().getSecond());
+                        amEndTime = recordTime.withHour(ruleDetails.getAmEndTime().getHour())
+                                .withMinute(ruleDetails.getAmEndTime().getMinute())
+                                .withSecond(ruleDetails.getAmEndTime().getSecond());
                     }
-                }else{//进
-                    if(recordTime.isBefore(amEndTime) && recordTime.isAfter(amStartTime)){
-                        attendanceStatus = "迟到";
-                    }else if(recordTime.isBefore(pmEndTime) && recordTime.isAfter(pmStartTime)){
-                        attendanceStatus = "迟到";
-                    }else{
-                        attendanceStatus = "到校";
+                    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());
+                    }
+                    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 = "到校";
+                        }
                     }
                 }
             }
@@ -403,7 +405,7 @@ public class Out_In_RecordUtil {
                     break;
             }
 
-            JsonElement facePicUriElement = item.get("facePicUri");
+            JsonElement facePicUriElement = item.get("plateNoPicUri");
             String facePicUri;
             if (facePicUriElement == null || facePicUriElement.isJsonNull()) {
                 facePicUri = "null";
@@ -449,44 +451,52 @@ public class Out_In_RecordUtil {
     }
 
     public void GetTeacherAndStudentRecordsTest(Db use, FaceImportMapper faceImportMapper, String data) throws SQLException, ParseException {
-        if (data == null || data.trim().isEmpty()) {
-            log.warn("Empty data string, skipping processing");
-            return;
-        }
-
         try {
-            JsonElement responseElement = new Gson().fromJson(data, JsonElement.class);
-
-            if (!responseElement.isJsonObject()) {
-                log.error("Invalid JSON format, expected a JSON object");
-                return;
-            }
+            List<String> teacherEventIdList = faceImportMapper.GetTeacherUrlList();
+            List<String> studentEventIdList = faceImportMapper.GetStudentUrlList();
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
-            JsonObject responseObject = responseElement.getAsJsonObject();
+            JsonObject jsonObject = new Gson().fromJson(data, JsonObject.class);
+            JsonObject paramsObject = jsonObject.getAsJsonObject("params");
+            JsonArray eventsArray = paramsObject.getAsJsonArray("events");
 
-            if (!responseObject.has("data") || !responseObject.get("data").isJsonObject()) {
-                log.error("Missing or invalid 'data' field in JSON");
-                return;
-            }
-
-            JsonObject dataObject = responseObject.getAsJsonObject("data");
-
-            if (!dataObject.has("list") || !dataObject.get("list").isJsonArray()) {
-                log.error("Missing or invalid 'list' field in JSON");
-                return;
-            }
+            for (JsonElement eventElement : eventsArray) {
+                JsonObject eventObject = eventElement.getAsJsonObject();
+                JsonObject dataObject = eventObject.getAsJsonObject("data");
 
-            JsonArray dataList = dataObject.getAsJsonArray("list");
-            JsonArray responseBuilder = new JsonArray();
-
-            for (JsonElement item : dataList) {
-                responseBuilder.add(item);
+                String idNum = null;
+                if (dataObject.has("ExtEventPersonNo")) {
+                    idNum = dataObject.get("ExtEventPersonNo").getAsString();
+                }
+                String happenTime = eventObject.get("happenTime").getAsString();
+                String extEventPictureURL = dataObject.get("ExtEventPictureURL").getAsString();
+                int status = eventObject.get("status").getAsInt();
+                String eventId = eventObject.get("eventId").getAsString();
+                String recordTimeStr = ChangeTime(happenTime);
+
+                if (idNum == null) continue;
+
+                if (!Objects.equals(faceImportMapper.IsStudentTypeByPersonId(Long.valueOf(idNum)), "学生")) {
+                    // 老师记录
+                    if (teacherEventIdList.contains(eventId)) {
+                        continue;
+                    }
+                    LocalDateTime recordTimeDate = LocalDateTime.parse(recordTimeStr, formatter);
+                    String attendanceStatus = discernTeacherStatus(use, recordTimeDate, status, Long.valueOf(idNum));
+                    teacherInsertRecord(use, Long.valueOf(idNum), recordTimeStr, ApiUtil.GetRedirectURL(extEventPictureURL), status, eventId, attendanceStatus);
+                } else {
+                    // 学生记录
+                    if (studentEventIdList.contains(eventId)){
+                        continue;
+                    }
+                    LocalDateTime recordTimeDate = LocalDateTime.parse(recordTimeStr, formatter);
+                    String attendanceStatus = discernStudentStatus(use, recordTimeDate, status, Long.valueOf(idNum));
+                    studentInsertRecord(use, Long.valueOf(idNum), faceImportMapper.GetTeacherIdByPersonId(Long.valueOf(idNum)),
+                            faceImportMapper.GetClassIdByPersonId(Long.valueOf(idNum)), ApiUtil.GetRedirectURL(extEventPictureURL), recordTimeStr, status,eventId, attendanceStatus);
+                }
             }
-
-            InsertTeacherStudentRecords(use, responseBuilder, faceImportMapper);
-
         } catch (Exception e) {
-            log.error("Error processing JSON data", e);
+            e.printStackTrace();
         }
     }
 

+ 33 - 14
src/main/resources/mapper/teacher/TeacherFaceImportMapper.xml

@@ -4,23 +4,30 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.xjrsoft.module.teacher.mapper.FaceImportMapper">
     <select id="GetTeacherUserIdById" parameterType="long" resultType="java.lang.String">
-        select t.user_id from teacher_face_process t where t.id = #{id}
+        select t.user_id
+        from teacher_face_process t
+        where t.delete_mark = 0
+        <if test="id != null">
+            and t.id = #{id}
+        </if>
     </select>
 
     <select id="GetTeacherHikvisionImgById" parameterType="long" resultType="java.lang.String">
         select t1.file_url
         from teacher_face_process t
         left join xjr_file t1 on t1.folder_id = t.face_photo
+        where t.delete_mark = 0
         <if test="id != null">
-            where t.id = #{id}
+            and t.id = #{id}
         </if>
     </select>
 
     <select id="GetStudentUserIdById" parameterType="long" resultType="java.lang.String">
         select t.user_id
         from stundent_face_process t
+        where t.delete_mark = 0
         <if test="id != null">
-            where t.id = #{id}
+            and t.id = #{id}
         </if>
         and t.status = 1
     </select>
@@ -29,8 +36,9 @@
         select t1.file_url
         from stundent_face_process t
         left join xjr_file t1 on t1.folder_id = t.face_photo
+        where t.delete_mark = 0
         <if test="id != null">
-            where t.id = #{id}
+            and t.id = #{id}
         </if>
         and t.status = 1
     </select>
@@ -40,7 +48,7 @@
         from hikvision_data t
         left join car_message_apply t1 on t1.user_id = t.source_id
         <if test="id != null">
-            where t1.id = #{id}
+            and t1.id = #{id}
         </if>
         and t1.status = 1
     </select>
@@ -48,8 +56,9 @@
     <select id="IsStudentTypeByPersonId" parameterType="long" resultType="java.lang.String">
         select t.nick_name
         from xjr_user t
+        where t.delete_mark = 0
         <if test="id != null">
-            where t.id = #{id}
+            and t.id = #{id}
         </if>
     </select>
 
@@ -67,75 +76,85 @@
         from base_student_school_roll t
         left join base_class t1 on t.class_id = t1.id
         <if test="id != null">
-            where t.user_id = #{id}
+            and t.user_id = #{id}
         </if>
     </select>
 
     <select id="GetStudentUrlList"  resultType="java.lang.String">
         select t.eventId
         from student_out_in_record t
+        where t.delete_mark = 0
     </select>
 
     <select id="GetTeacherUrlList"  resultType="java.lang.String">
         select t.eventId
         from teacher_out_in_record t
+        where t.delete_mark = 0
     </select>
 
     <select id="GetReservationSchoolIdList" resultType="java.lang.Long">
         SELECT reservation_school_people_id
         FROM visitor_out_in_record
+        where delete_mark = 0
     </select>
 
     <select id="GetReservationSchoolId"  parameterType="string" resultType="java.lang.Long">
         SELECT reservation_schoo_id
         FROM reservation_school_people
+        where delete_mark = 0
         <if test="id != null">
-            WHERE registration_result::text LIKE '%"orderId":"' || #{id} || '"%'
+            and registration_result::text LIKE '%"orderId":"' || #{id} || '"%'
         </if>
     </select>
 
     <select id="GetCarMessageApplyIdByCarNumber"  parameterType="string" resultType="java.lang.String">
         SELECT id
-        from car_message_apply
+        FROM car_message_apply
+        WHERE delete_mark = 0
         <if test="id != null">
-            WHERE car_number = #{id}
+            AND car_number = #{id}
         </if>
     </select>
 
     <select id="GetVehicleIdList" resultType="java.lang.String">
         SELECT cross_record_syscode
         FROM car_out_in_record
+        WHERE delete_mark = 0
     </select>
 
     <select id="GetPhoneNumberByPlanNum" resultType="java.lang.String">
         SELECT c_phone
         FROM base_car_management
+        where delete_mark = 0
         <if test="id != null">
-            WHERE car_no = #{id}
+            and car_no = #{id}
         </if>
     </select>
 
     <select id="GetNameByPlanNum" resultType="java.lang.String">
         SELECT c_name
         FROM base_car_management
+        where delete_mark = 0
         <if test="id != null">
-            WHERE car_no = #{id}
+            and car_no = #{id}
         </if>
     </select>
 
     <select id="GetPhoneNumberByPlanNumView" resultType="java.lang.String">
         SELECT phone
         FROM reservation_school_people
+        where delete_mark = 0
         <if test="id != null">
-            WHERE plate_number = #{id}
+            and plate_number = #{id}
         </if>
     </select>
 
     <select id="GetNameByPlanNumView" resultType="java.lang.String">
         SELECT name
         FROM reservation_school_people
+        where delete_mark = 0
         <if test="id != null">
-            WHERE plate_number = #{id}
+            and plate_number = #{id}
         </if>
     </select>
 </mapper>

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

@@ -104,7 +104,7 @@ class HikvisionBaseDataTaskTest {
 //        String carTableName = "car_message_apply";
 //        selectCar(use, carTableName);
 
-        outInRecordUtil.GetVehicleRecord(use,faceImportMapper);
+        outInRecordUtil.GetTeacherAndStudentRecords(use,faceImportMapper);
 ////        selecAllPersonById(use);
 //        selectResource(use);
     }