|
@@ -0,0 +1,251 @@
|
|
|
+package com.xjrsoft.module.hikvision.util;
|
|
|
+
|
|
|
+import cn.hutool.db.Db;
|
|
|
+import com.alibaba.excel.Empty;
|
|
|
+import com.google.gson.Gson;
|
|
|
+import com.google.gson.JsonArray;
|
|
|
+import com.google.gson.JsonElement;
|
|
|
+import com.google.gson.JsonObject;
|
|
|
+import com.xjrsoft.module.teacher.mapper.FaceImportMapper;
|
|
|
+
|
|
|
+import java.sql.SQLException;
|
|
|
+import java.text.ParseException;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.*;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
+
|
|
|
+
|
|
|
+public class Out_In_RecordUtil {
|
|
|
+ private void teacherInsertRecord(Db db, Long userId, String recordTime, String facePhoto,int status, String eventId) throws SQLException {
|
|
|
+
|
|
|
+ String sql = "INSERT INTO teacher_out_in_record(create_date, user_id, record_time, face_photo, eventId, status,delete_mark,enabled_mark) " +
|
|
|
+ "VALUES(now(), '" + userId + "', '" + recordTime + "', '" +
|
|
|
+ facePhoto + "', '" + eventId + "', '" +status + "',0,1)";
|
|
|
+ db.execute(sql);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void studentInsertRecord(Db db, Long userId, Long teacherId, Long classId, String facePhoto, String recordTime, int status, String eventId) throws SQLException {
|
|
|
+ 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) " +
|
|
|
+ "VALUES(now(), '" + userId + "', '" + teacherId + "', '" +
|
|
|
+ classId + "', '" + facePhoto + "', '" + recordTime + "', '" + eventId + "', '" + status + "',0,1)";
|
|
|
+ db.execute(sql);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void visitInsertRecord(Db db, Long reservation_school_people_id, String recordTime,String facePhoto, int status) throws SQLException {
|
|
|
+ String sql = "INSERT INTO visitor_out_in_record(create_date, reservation_school_people_id, record_time, face_photo, status,delete_mark,enabled_mark) " +
|
|
|
+ "VALUES(now(), '" + reservation_school_people_id + "', '" +
|
|
|
+ recordTime + "', '" + facePhoto + "', '" + status + "',0,1)";
|
|
|
+ db.execute(sql);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void vehicleInsertRecord(Db db, Long carMessageApplyId, String recordTime, String reservationSchoolPeopleId, int category, String facePhoto, int status) throws SQLException {
|
|
|
+ String sql = "INSERT INTO car_out_in_record(create_date, car_message_apply_id, record_time, face_photo, status,reservation_school_people_id, category,delete_mark,enabled_mark) " +
|
|
|
+ "VALUES(now(), '" + carMessageApplyId + "', '" +
|
|
|
+ recordTime + "', '" + facePhoto + "', '" + status + "', '" + reservationSchoolPeopleId + "', '" + category + "',0,1)";
|
|
|
+ db.execute(sql);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void GetTeacherAndStudentRecords(Db use, FaceImportMapper faceImportMapper) throws SQLException, ParseException {
|
|
|
+ JsonArray responseBuilder = new JsonArray();
|
|
|
+
|
|
|
+ AtomicInteger pageNo = new AtomicInteger(1);
|
|
|
+ int pageSize = 100;
|
|
|
+ boolean hasMorePages = true;
|
|
|
+
|
|
|
+ while (hasMorePages) {
|
|
|
+ String response = GetDoorEvent(pageNo, pageSize);
|
|
|
+
|
|
|
+ JsonElement responseElement = new Gson().fromJson(response, JsonElement.class);
|
|
|
+ JsonArray dataList = responseElement.getAsJsonObject().getAsJsonObject("data").getAsJsonArray("list");
|
|
|
+
|
|
|
+ for (JsonElement item : dataList) {
|
|
|
+ responseBuilder.add(item);
|
|
|
+ }
|
|
|
+
|
|
|
+ JsonObject responseJson = new Gson().fromJson(response, JsonObject.class);
|
|
|
+ int totalCount = responseJson.getAsJsonObject("data").get("totalPage").getAsInt();
|
|
|
+ hasMorePages = pageNo.getAndIncrement() * pageSize < totalCount;
|
|
|
+ }
|
|
|
+ // Process the records
|
|
|
+ InsertTeacherStudentRecords(use, responseBuilder, faceImportMapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void InsertTeacherStudentRecords(Db use, JsonArray doorEventsResponse, FaceImportMapper faceImportMapper) throws SQLException, ParseException {
|
|
|
+ List<String> teacherEventIdList = faceImportMapper.GetTeacherUrlList();
|
|
|
+ List<String> studentEventIdList = faceImportMapper.GetStudentUrlList();
|
|
|
+
|
|
|
+ for (JsonElement element : doorEventsResponse) {
|
|
|
+ JsonObject item = element.getAsJsonObject();
|
|
|
+
|
|
|
+ Long personId;
|
|
|
+ try {
|
|
|
+ personId = item.get("personId").isJsonNull() ? null : item.get("personId").getAsLong();
|
|
|
+ }catch (Exception e){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (personId == null) continue;
|
|
|
+
|
|
|
+ int status = item.get("inAndOutType").getAsInt();
|
|
|
+ String uri = item.get("picUri").isJsonNull() ? null : item.get("picUri").getAsString();
|
|
|
+ String recordTime = item.get("eventTime").isJsonNull() ? null : item.get("eventTime").getAsString();
|
|
|
+ String eventId = item.get("eventId").isJsonNull() ? null : item.get("eventId").getAsString();
|
|
|
+
|
|
|
+ if (!Objects.equals(faceImportMapper.IsStudentTypeByPersonId(personId), "学生")) {
|
|
|
+ // 老师记录
|
|
|
+ if (teacherEventIdList.contains(eventId)) continue;
|
|
|
+ teacherInsertRecord(use, personId, ChangeTime(recordTime), ApiUtil.GetRedirectURL(uri),status,eventId);
|
|
|
+ } else {
|
|
|
+ // 学生记录
|
|
|
+ if (studentEventIdList.contains(eventId)) continue;
|
|
|
+ studentInsertRecord(use, personId, faceImportMapper.GetTeacherIdByPersonId(personId),
|
|
|
+ faceImportMapper.GetClassIdByPersonId(personId), ApiUtil.GetRedirectURL(uri), ChangeTime(recordTime), status,eventId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void GetVisitRecord(Db use, FaceImportMapper faceImportMapper) throws SQLException, ParseException {
|
|
|
+ ApiUtil apiUtil = new ApiUtil();
|
|
|
+
|
|
|
+ AtomicInteger pageNo = new AtomicInteger(1);
|
|
|
+ int pageSize = 100;
|
|
|
+ boolean hasMorePages = true;
|
|
|
+ JsonArray responseBuilder = new JsonArray();
|
|
|
+ JsonArray responseDoorBuilder = new JsonArray();
|
|
|
+
|
|
|
+ String apiPath = "/api/visitor/v1/event/turnover/search";
|
|
|
+
|
|
|
+ while (hasMorePages) {
|
|
|
+ JsonObject paramJson = new JsonObject();
|
|
|
+ paramJson.addProperty("pageNo", pageNo.get());
|
|
|
+ paramJson.addProperty("pageSize", pageSize);
|
|
|
+
|
|
|
+ String response = apiUtil.doPost(apiPath, String.valueOf(paramJson), null);
|
|
|
+ String responseDoor = GetDoorEvent(pageNo,pageSize);
|
|
|
+
|
|
|
+ JsonElement responseElement = new Gson().fromJson(response, JsonElement.class);
|
|
|
+ JsonElement responseDoorElement = new Gson().fromJson(responseDoor, JsonElement.class);
|
|
|
+
|
|
|
+ JsonArray dataList = responseElement.getAsJsonObject().getAsJsonObject("data").getAsJsonArray("rows");
|
|
|
+ JsonArray dataDoorList = responseDoorElement.getAsJsonObject().getAsJsonObject("data").getAsJsonArray("list");
|
|
|
+
|
|
|
+ for (JsonElement item : dataList) {
|
|
|
+ responseBuilder.add(item);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (JsonElement item : dataDoorList) {
|
|
|
+ responseDoorBuilder.add(item);
|
|
|
+ }
|
|
|
+
|
|
|
+ JsonObject responseJson = new Gson().fromJson(response, JsonObject.class);
|
|
|
+ int totalCount = responseJson.getAsJsonObject("data").get("total").getAsInt();
|
|
|
+ hasMorePages = pageNo.getAndIncrement() * pageSize < totalCount;
|
|
|
+ }
|
|
|
+
|
|
|
+ InsertVisitRecords(use, responseBuilder,responseDoorBuilder,faceImportMapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void InsertVisitRecords(Db use, JsonArray eventsResponse, JsonArray doorEventsResponse,FaceImportMapper faceImportMapper) throws SQLException, ParseException {
|
|
|
+ List<Long> visit_id_list = faceImportMapper.GetReservationSchoolIdList();
|
|
|
+
|
|
|
+ for (JsonElement element : eventsResponse) {
|
|
|
+ JsonObject item = element.getAsJsonObject();
|
|
|
+
|
|
|
+ String picUri = item.get("visitorPhotoUri").isJsonNull() ? null : ApiUtil.GetRedirectURL(item.get("visitorPhotoUri").getAsString());
|
|
|
+ String orderId = item.get("orderId").isJsonNull() ? null : item.get("orderId").getAsString();
|
|
|
+ String eventTime = item.get("eventTime").isJsonNull() ? null : ChangeTime(item.get("eventTime").getAsString());
|
|
|
+ //todo: reservationSchoolId
|
|
|
+// Long reservationSchoolId = faceImportMapper.GetReservationSchoolId(orderId) == null ? 1 : faceImportMapper.GetReservationSchoolId(orderId);
|
|
|
+
|
|
|
+ int status = -1;
|
|
|
+ for (JsonElement e : doorEventsResponse){
|
|
|
+ JsonObject ele = e.getAsJsonObject();
|
|
|
+ if (ele.get("eventId") == item.get("eventId")){
|
|
|
+ status = ele.get("inAndOutType").getAsInt();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (visit_id_list.contains(1)) continue;
|
|
|
+ visitInsertRecord(use, Long.parseLong("123"), eventTime, picUri, status);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void GetVehicleRecord(Db use, FaceImportMapper faceImportMapper) throws SQLException, ParseException {
|
|
|
+ ApiUtil apiUtil = new ApiUtil();
|
|
|
+
|
|
|
+ AtomicInteger pageNo = new AtomicInteger(1);
|
|
|
+ int pageSize = 1000;
|
|
|
+ boolean hasMorePages = true;
|
|
|
+ JsonArray responseBuilder = new JsonArray();
|
|
|
+
|
|
|
+ String apiPath = "/api/pms/v1/crossRecords/page";
|
|
|
+
|
|
|
+ while (hasMorePages) {
|
|
|
+ JsonObject paramJson = new JsonObject();
|
|
|
+ paramJson.addProperty("pageNo", pageNo.getAndIncrement());
|
|
|
+ paramJson.addProperty("pageSize", pageSize);
|
|
|
+
|
|
|
+ String response = apiUtil.doPost(apiPath, String.valueOf(paramJson), null);
|
|
|
+ JsonElement responseElement = new Gson().fromJson(response, JsonElement.class);
|
|
|
+ JsonArray dataList = responseElement.getAsJsonObject().getAsJsonObject("data").getAsJsonArray("list");
|
|
|
+
|
|
|
+ for (JsonElement item : dataList) {
|
|
|
+ responseBuilder.add(item);
|
|
|
+ }
|
|
|
+
|
|
|
+ JsonObject responseJson = new Gson().fromJson(response, JsonObject.class);
|
|
|
+ int totalCount = responseJson.getAsJsonObject("data").get("total").getAsInt();
|
|
|
+ hasMorePages = pageNo.getAndIncrement() * pageSize < totalCount;
|
|
|
+ }
|
|
|
+
|
|
|
+ InsertVehicleRecords(use, responseBuilder,faceImportMapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void InsertVehicleRecords(Db use, JsonArray doorEventsResponse, FaceImportMapper faceImportMapper) throws SQLException, ParseException {
|
|
|
+ List<String> vehicle_id_list = faceImportMapper.GetVehicleIdList();
|
|
|
+
|
|
|
+ for (JsonElement element : doorEventsResponse) {
|
|
|
+ JsonObject item = element.getAsJsonObject();
|
|
|
+
|
|
|
+ String carMessageApplyIdStr = faceImportMapper.GetCarMessageApplyIdByCarNumber(item.get("plateNo").getAsString().trim());
|
|
|
+ Long carId = (carMessageApplyIdStr == null || carMessageApplyIdStr.isEmpty()) ? 0 : Long.parseLong(carMessageApplyIdStr);
|
|
|
+ int releaseMode = item.get("releaseMode").isJsonNull() ? null : item.get("releaseMode").getAsInt();
|
|
|
+ String eventTime = item.get("crossTime").isJsonNull() ? null : ChangeTime(item.get("crossTime").getAsString());
|
|
|
+ String crossRecordSyscode = item.get("crossRecordSyscode").isJsonNull() ? null : item.get("crossRecordSyscode").getAsString();
|
|
|
+ int status = item.get("vehicleOut").isJsonNull() ? null : item.get("vehicleOut").getAsInt();
|
|
|
+
|
|
|
+ if(vehicle_id_list.contains(crossRecordSyscode)) continue;
|
|
|
+
|
|
|
+ JsonElement facePicUriElement = item.get("facePicUri");
|
|
|
+ String facePicUri;
|
|
|
+ if (facePicUriElement == null || facePicUriElement.isJsonNull()) {
|
|
|
+ facePicUri = "null";
|
|
|
+ } else {
|
|
|
+ facePicUri = ApiUtil.GetRedirectURL(facePicUriElement.getAsString());
|
|
|
+ }
|
|
|
+
|
|
|
+ vehicleInsertRecord(use, carId, eventTime, crossRecordSyscode,releaseMode,facePicUri,status);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private String GetDoorEvent(AtomicInteger pageNo, int pageSize){
|
|
|
+ ApiUtil apiUtil = new ApiUtil();
|
|
|
+ String apiPath = "/api/acs/v2/door/events";
|
|
|
+ JsonObject paramJson = new JsonObject();
|
|
|
+ paramJson.addProperty("pageNo", pageNo.get());
|
|
|
+ paramJson.addProperty("pageSize", pageSize);
|
|
|
+
|
|
|
+ return apiUtil.doPost(apiPath, String.valueOf(paramJson), null);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private String ChangeTime(String recordTime) throws ParseException {
|
|
|
+ SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
|
|
|
+ SimpleDateFormat mysqlFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ Date date = isoFormat.parse(recordTime);
|
|
|
+ return mysqlFormat.format(date);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|