dzx преди 1 година
родител
ревизия
44385ae547

+ 18 - 11
src/main/java/com/xjrsoft/module/attendance/service/impl/AttendanceRuleCategoryServiceImpl.java

@@ -284,18 +284,25 @@ public class AttendanceRuleCategoryServiceImpl extends MPJBaseServiceImpl<Attend
                         userIds.add(relation.getUserId());
                     }
                 }
+                List<XjrUser> userList = new ArrayList<>();
+                if(!deptIds.isEmpty()){
+                    List<XjrUser> deptUserList = xjrUserService.list(
+                            new MPJLambdaWrapper<XjrUser>()
+                                    .select(XjrUser::getId)
+                                    .select(XjrUser.class, x -> VoToColumnUtil.fieldsToColumns(XjrUser.class).contains(x.getProperty()))
+                                    .leftJoin(BaseTeacher.class, BaseTeacher::getUserId, XjrUser::getId)
+                                    .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, XjrUser::getId)
+                                    .eq(BaseTeacher::getDeleteMark, DeleteMark.NODELETE.getCode())
+                                    .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
+                                    .in(UserDeptRelation::getDeptId, deptIds)
+                    );
+                    userList.addAll(deptUserList);
+                }
+                if(!userIds.isEmpty()){
+                    userList.addAll(xjrUserService.listByIds(userIds));
+                }
+
 
-                List<XjrUser> userList = xjrUserService.list(
-                    new MPJLambdaWrapper<XjrUser>()
-                    .select(XjrUser::getId)
-                    .select(XjrUser.class, x -> VoToColumnUtil.fieldsToColumns(XjrUser.class).contains(x.getProperty()))
-                    .leftJoin(BaseTeacher.class, BaseTeacher::getUserId, XjrUser::getId)
-                    .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, XjrUser::getId)
-                    .eq(BaseTeacher::getDeleteMark, DeleteMark.NODELETE.getCode())
-                    .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
-                    .in(!deptIds.isEmpty(), UserDeptRelation::getDeptId, deptIds)
-                    .in(!userIds.isEmpty(), XjrUser::getId, userIds)
-                );
                 //查询这部分人中是否已经有人有规则了
                 List<Long> relationUserIds = userList.stream().map(XjrUser::getId).collect(Collectors.toList());
                 if(!relationUserIds.isEmpty()){

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

@@ -6,11 +6,13 @@ import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import com.xjrsoft.common.enums.OutInStatusEnum;
+import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
 import com.xjrsoft.common.utils.SqlRunnerAdapterUtil;
 import com.xjrsoft.module.attendance.entity.AttendanceRuleDetails;
 import com.xjrsoft.module.attendance.vo.AttendanceRuleDetailsUserVo;
 import com.xjrsoft.module.teacher.mapper.FaceImportMapper;
+import me.zhyd.oauth.log.Log;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -22,6 +24,7 @@ import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -30,11 +33,11 @@ import java.util.concurrent.atomic.AtomicInteger;
 public class OutInRecordUtil {
     private static final Logger log = LoggerFactory.getLogger(OutInRecordUtil.class);
 
-    private void teacherInsertRecord(Long userId, String recordTime, String facePhoto, int status, String eventId, String attendanceStatus){
+    private void teacherInsertRecord(String userId, String recordTime, String facePhoto, int status, String eventId, String attendanceStatus){
         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) " +
-                "select now(), '"  + userId + "', '" + recordTime + "', '" +
+                "select now(), (SELECT source_id FROM hikvision_data WHERE hikvision_id = '" + userId + "' LIMIT 1), '" + recordTime + "', '" +
                 photoValue + "', '" + eventId + "', '" +status + "',0,1,'" + attendanceStatus + "'" +
                 " WHERE NOT EXISTS (SELECT 1 FROM teacher_out_in_record WHERE eventId = '" + eventId + "')";
         SqlRunnerAdapter.db().insert(sql);
@@ -47,11 +50,11 @@ public class OutInRecordUtil {
 //        SqlRunnerAdapter.db().update(updSql);
     }
 
-    private void studentInsertRecord(Long userId, Long teacherId, Long classId, String facePhoto, String recordTime, int status, String eventId, String attendanceStatus){
+    private void studentInsertRecord(String userId, Long teacherId, Long classId, String facePhoto, String recordTime, int status, String eventId, String attendanceStatus){
         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) " +
-                "select now(), " + userId + ", " + teacherId + ", " +
+                "select now(), (SELECT source_id FROM hikvision_data WHERE hikvision_id = '" + userId + "' LIMIT 1), " + 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);
@@ -101,6 +104,13 @@ public class OutInRecordUtil {
 
         SqlRunnerAdapter.db().dynamicInsert(tableName, where);
 
+        String sql = "SELECT hikvision_id,source_id FROM hikvision_data WHERE table_name = 'base_teacher'";
+        List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
+        Map<String, Long> sourceIdMap = new HashMap<>();
+        for (Map<String, Object> objectMap : list) {
+            sourceIdMap.put(objectMap.get("hikvision_id").toString(), Long.parseLong(objectMap.get("source_id").toString()));
+        }
+
         //车辆入库后,判定教师考勤状态
         if(carMessageApplyId != 0){
             String selectTable = "car_message_apply";
@@ -108,7 +118,7 @@ public class OutInRecordUtil {
             selectWhere.set("id", carMessageApplyId);
             selectWhere.set("car_number", planNo);
             Map<String, Object> objectMap = SqlRunnerAdapter.db().dynamicSelectOne(selectTable, selectWhere);
-            Long userId = Long.parseLong(objectMap.get("user_id").toString());
+            Long userId = sourceIdMap.get(objectMap.get("user_id").toString());
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
             LocalDateTime recordTimeDate = LocalDateTime.parse(recordTime, formatter);
             String attendanceStatus = discernTeacherStatus(recordTimeDate, status, userId);
@@ -180,15 +190,21 @@ public class OutInRecordUtil {
         InsertTeacherStudentRecords(responseBuilder, faceImportMapper);
     }
 
-    private void InsertTeacherStudentRecords(JsonArray doorEventsResponse, FaceImportMapper faceImportMapper) throws ParseException {
+    public void InsertTeacherStudentRecords(JsonArray doorEventsResponse, FaceImportMapper faceImportMapper) throws ParseException {
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        List<Long> teacherUserIds = faceImportMapper.getTeacherUserIds();
+        String sql = "SELECT hikvision_id,source_id FROM hikvision_data WHERE table_name = 'base_teacher'";
+        List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
+        Map<String, Long> sourceIdMap = new HashMap<>();
+        for (Map<String, Object> objectMap : list) {
+            sourceIdMap.put(objectMap.get("hikvision_id").toString(), Long.parseLong(objectMap.get("source_id").toString()));
+        }
+
         for (JsonElement element : doorEventsResponse) {
             JsonObject item = element.getAsJsonObject();
 
-            Long personId;
+            String personId;
             try {
-                personId = item.get("personId").isJsonNull() ? null : item.get("personId").getAsLong();
+                personId = item.get("personId").isJsonNull() ? null : item.get("personId").getAsString();
             }catch (Exception e){
                 continue;
             }
@@ -209,15 +225,15 @@ public class OutInRecordUtil {
             String recordTime = item.get("eventTime").isJsonNull() ? null : item.get("eventTime").getAsString();
             String eventId = item.get("eventId").isJsonNull() ? null : item.get("eventId").getAsString();
             String recordTimeStr = ChangeTime(recordTime);
-            if (teacherUserIds.contains(personId)) {
+            if (sourceIdMap.containsKey(personId)) {
                 // 老师记录
                 LocalDateTime recordTimeDate = LocalDateTime.parse(recordTimeStr, formatter);
-                String attendanceStatus = discernTeacherStatus(recordTimeDate, status, personId);
+                String attendanceStatus = discernTeacherStatus(recordTimeDate, status, sourceIdMap.get(personId));
                 teacherInsertRecord(personId, recordTimeStr, ApiUtil.GetRedirectURL(uri),status,eventId, attendanceStatus);
             } else {
                 // 学生记录
                 LocalDateTime recordTimeDate = LocalDateTime.parse(recordTimeStr, formatter);
-                String attendanceStatus = discernStudentStatus(recordTimeDate, status, personId);
+                String attendanceStatus = discernStudentStatus(recordTimeDate, status, sourceIdMap.get(personId));
                 studentInsertRecord(personId, faceImportMapper.GetTeacherIdByPersonId(personId),
                     faceImportMapper.GetClassIdByPersonId(personId), ApiUtil.GetRedirectURL(uri), recordTimeStr, status, eventId, attendanceStatus);
             }
@@ -577,7 +593,12 @@ public class OutInRecordUtil {
             JsonObject paramsObject = data.getAsJsonObject("params");
             JsonArray eventsArray = paramsObject.getAsJsonArray("events");
 
-            List<Long> teacherUserIds = faceImportMapper.getTeacherUserIds();
+            String sql = "SELECT hikvision_id,source_id FROM hikvision_data WHERE table_name = 'base_teacher'";
+            List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
+            Map<String, Long> sourceIdMap = new HashMap<>();
+            for (Map<String, Object> objectMap : list) {
+                sourceIdMap.put(objectMap.get("hikvision_id").toString(), Long.parseLong(objectMap.get("source_id").toString()));
+            }
             for (JsonElement eventElement : eventsArray) {
                 JsonObject eventObject = eventElement.getAsJsonObject();
                 JsonObject dataObject = eventObject.getAsJsonObject("data");
@@ -606,21 +627,22 @@ public class OutInRecordUtil {
 
                 if (idNum == null) continue;
 
-                if (teacherUserIds.contains(Long.valueOf(idNum))) {
+                if (sourceIdMap.containsKey(idNum)) {
                     // 老师记录
                     LocalDateTime recordTimeDate = LocalDateTime.parse(recordTimeStr, formatter);
-                    String attendanceStatus = discernTeacherStatus(recordTimeDate, status, Long.valueOf(idNum));
-                    teacherInsertRecord(Long.valueOf(idNum), recordTimeStr, ApiUtil.GetRedirectURL(extEventPictureURL), status, eventId, attendanceStatus);
+                    String attendanceStatus = discernTeacherStatus(recordTimeDate, status, sourceIdMap.get(idNum));
+                    teacherInsertRecord(idNum, recordTimeStr, ApiUtil.GetRedirectURL(extEventPictureURL), status, eventId, attendanceStatus);
                 } else {
                     // 学生记录
                     LocalDateTime recordTimeDate = LocalDateTime.parse(recordTimeStr, formatter);
-                    String attendanceStatus = discernStudentStatus(recordTimeDate, status, Long.valueOf(idNum));
-                    studentInsertRecord(Long.valueOf(idNum), faceImportMapper.GetTeacherIdByPersonId(Long.valueOf(idNum)),
-                            faceImportMapper.GetClassIdByPersonId(Long.valueOf(idNum)), ApiUtil.GetRedirectURL(extEventPictureURL), recordTimeStr, status, eventId, attendanceStatus);
+                    String attendanceStatus = discernStudentStatus(recordTimeDate, status, sourceIdMap.get(idNum));
+                    studentInsertRecord(idNum, faceImportMapper.GetTeacherIdByPersonId(idNum),
+                            faceImportMapper.GetClassIdByPersonId(idNum), ApiUtil.GetRedirectURL(extEventPictureURL), recordTimeStr, status, eventId, attendanceStatus);
                 }
             }
         } catch (Exception e) {
-            e.printStackTrace();
+            Log.error(e.getMessage(), e);
+            throw new MyException("海康出入记录同步报错");
         }
     }
 
@@ -816,6 +838,12 @@ public class OutInRecordUtil {
     public void getTeacherRecords(FaceImportMapper faceImportMapper, LocalDateTime startDateTime, LocalDateTime endDateTime,
                                  Map<Long, AttendanceRuleDetailsUserVo> teacherRules) throws ParseException {
         JsonArray responseBuilder = new JsonArray();
+        String sql = "SELECT hikvision_id,source_id FROM hikvision_data WHERE table_name = 'base_teacher'";
+        List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
+        Map<String, Long> sourceIdMap = new HashMap<>();
+        for (Map<String, Object> objectMap : list) {
+            sourceIdMap.put(objectMap.get("hikvision_id").toString(), Long.parseLong(objectMap.get("source_id").toString()));
+        }
 
         AtomicInteger pageNo = new AtomicInteger(1);
         int pageSize = 1000;
@@ -838,14 +866,14 @@ public class OutInRecordUtil {
         InsertTeacherStudentRecords(responseBuilder, faceImportMapper);
 
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        List<Long> teacherUserIds = faceImportMapper.getTeacherUserIds();
+        List<String> teacherUserIds = faceImportMapper.getTeacherUserIds();
         List<String> insertSqls = new ArrayList<>();
         for (JsonElement element : responseBuilder) {
             JsonObject item = element.getAsJsonObject();
 
-            Long personId;
+            String personId;
             try {
-                personId = item.get("personId").isJsonNull() ? null : item.get("personId").getAsLong();
+                personId = item.get("personId").isJsonNull() ? null : item.get("personId").getAsString();
             }catch (Exception e){
                 continue;
             }
@@ -869,7 +897,7 @@ public class OutInRecordUtil {
             if (teacherUserIds.contains(personId)) {
                 // 老师记录
                 LocalDateTime recordTimeDate = LocalDateTime.parse(recordTimeStr, formatter);
-                String attendanceStatus = discernTeacherStatus(recordTimeDate, status, teacherRules.get(personId));
+                String attendanceStatus = discernTeacherStatus(recordTimeDate, status, teacherRules.get(sourceIdMap.get(personId)));
                 String insSql = "INSERT INTO teacher_out_in_record(create_date, user_id, record_time, face_photo, eventId, status,delete_mark,enabled_mark, attendance_status) "
                         + "select now(), '"  + personId + "', '" + recordTimeStr + "', '" +
                         ApiUtil.GetRedirectURL(uri) + "', '" + eventId + "', '" +status + "',0,1,'" + attendanceStatus + "'" +

+ 10 - 2
src/main/java/com/xjrsoft/module/teacher/controller/TeacherAwardController.java

@@ -28,10 +28,12 @@ import com.xjrsoft.module.teacher.vo.TeacherAwardDetailExcelVo;
 import com.xjrsoft.module.teacher.vo.TeacherAwardDetailPageVo;
 import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsExcelVo;
 import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsPageVo;
+import com.xjrsoft.module.workflow.entity.WorkflowFormRelation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import me.zhyd.oauth.log.Log;
+import org.camunda.bpm.engine.history.HistoricProcessInstance;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -92,11 +94,12 @@ public class TeacherAwardController {
                 .select(TeacherAward.class,x -> VoToColumnUtil.fieldsToColumns(TeacherAwardDetailPageVo.class).contains(x.getProperty()))
                 .leftJoin(TeacherAwardItem.class, TeacherAwardItem::getId, TeacherAward::getTeacherAwardItemId)
                 .leftJoin(XjrUser.class, XjrUser::getId, TeacherAward::getApplicantUserId)
+                .leftJoin(WorkflowFormRelation.class, WorkflowFormRelation::getFormKeyValue, TeacherAward::getId)
                 .eq(dto.getApplicantUserId() != null && dto.getApplicantUserId() > 0,TeacherAward::getApplicantUserId, dto.getApplicantUserId())
                 .eq(dto.getIsThesis() != null,TeacherAwardItem::getIsThesis, dto.getIsThesis())
                 .like(dto.getApplicantUserIdCn() != null && !dto.getApplicantUserIdCn().equals(""), XjrUser::getName, dto.getApplicantUserIdCn())
                 .like(dto.getWholeCompetitionName() != null && !dto.getWholeCompetitionName().equals(""),TeacherAward::getWholeCompetitionName, dto.getWholeCompetitionName())
-                .eq(TeacherAward::getStatus, 1)
+                .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
                 .orderByDesc(TeacherAward::getCreateDate)
         ;
         IPage<TeacherAwardDetailPageVo> page = teacherAwardService.selectJoinListPage(ConventPage.getPage(dto), TeacherAwardDetailPageVo.class, teacherAwardMPJLambdaWrapper);
@@ -127,15 +130,17 @@ public class TeacherAwardController {
             teacherAwardMPJLambdaWrapper
                     .disableSubLogicDel()
                     .selectAs(TeacherAwardItem::getIsThesis, TeacherAwardDetailPageVo::getIsThesis)
+                    .selectAs(TeacherAwardItem::getScore, TeacherAwardDetailPageVo::getTeacherAwardItemScore)
                     .selectAs(XjrUser::getName, TeacherAwardDetailPageVo::getApplicantUserIdCn)
                     .select(TeacherAward.class,x -> VoToColumnUtil.fieldsToColumns(TeacherAwardDetailPageVo.class).contains(x.getProperty()))
                     .leftJoin(TeacherAwardItem.class, TeacherAwardItem::getId, TeacherAward::getTeacherAwardItemId)
                     .leftJoin(XjrUser.class, XjrUser::getId, TeacherAward::getApplicantUserId)
+                    .leftJoin(WorkflowFormRelation.class, WorkflowFormRelation::getFormKeyValue, TeacherAward::getId)
                     .eq(dto.getApplicantUserId() != null && dto.getApplicantUserId() > 0,TeacherAward::getApplicantUserId, dto.getApplicantUserId())
                     .eq(dto.getIsThesis() != null,TeacherAwardItem::getIsThesis, dto.getIsThesis())
                     .like(dto.getApplicantUserIdCn() != null && !dto.getApplicantUserIdCn().equals(""), XjrUser::getName, dto.getApplicantUserIdCn())
                     .like(dto.getWholeCompetitionName() != null && !dto.getWholeCompetitionName().equals(""),TeacherAward::getWholeCompetitionName, dto.getWholeCompetitionName())
-                    .eq(TeacherAward::getStatus, 1)
+                    .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
                     .orderByDesc(TeacherAward::getCreateDate)
             ;
             List<TeacherAwardDetailPageVo> list = teacherAwardService.selectJoinList(TeacherAwardDetailPageVo.class, teacherAwardMPJLambdaWrapper);
@@ -172,6 +177,9 @@ public class TeacherAwardController {
                 if(rowData.getMediaType() == null){
                     rowData.setMediaType("");
                 }
+                if(rowData.getTeacherAwardItemScore() == null){
+                    rowData.setTeacherAwardItemScore("");
+                }
 
 
                 if(el.getIsThesis() == 1){

+ 3 - 3
src/main/java/com/xjrsoft/module/teacher/mapper/FaceImportMapper.java

@@ -17,8 +17,8 @@ public interface FaceImportMapper {
     String GetHikvisonPersonId(@Param("id") String id);
 
     String IsStudentTypeByPersonId(@Param("id") Long id);
-    Long GetTeacherIdByPersonId(@Param("id") Long id);
-    Long GetClassIdByPersonId(@Param("id") Long id);
+    Long GetTeacherIdByPersonId(@Param("id") String id);
+    Long GetClassIdByPersonId(@Param("id") String id);
 
     List<String> GetStudentUrlList();
     List<String> GetTeacherUrlList();
@@ -35,6 +35,6 @@ public interface FaceImportMapper {
     List<String> GetVisitIdList();
 
 
-    List<Long> getTeacherUserIds();
+    List<String> getTeacherUserIds();
 }
 

+ 6 - 0
src/main/java/com/xjrsoft/module/teacher/vo/TeacherAwardDetailExcelVo.java

@@ -56,7 +56,13 @@ public class TeacherAwardDetailExcelVo {
     @ApiModelProperty("备注")
     private String remark;
 
+    @ExcelProperty("奖项分数")
+    @ApiModelProperty("奖项分数")
+    private String teacherAwardItemScore;
+
     @ExcelProperty("附件名称")
     @ApiModelProperty("附件名称")
     private String fileName;
+
+
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/teacher/vo/TeacherAwardDetailPageVo.java

@@ -129,4 +129,7 @@ public class TeacherAwardDetailPageVo {
 
     @ApiModelProperty("获奖日期")
     private LocalDate awardDate;
+
+    @ApiModelProperty("奖项分数")
+    private String teacherAwardItemScore;
 }

+ 2 - 4
src/main/resources/mapper/teacher/TeacherFaceImportMapper.xml

@@ -142,9 +142,7 @@
         where delete_mark = 0
     </select>
 
-    <select id="getTeacherUserIds" resultType="java.lang.Long">
-        SELECT t1.id FROM xjr_user t1
-        INNER JOIN base_teacher t2 ON t1.id = t2.user_id
-        WHERE t1.delete_mark = 0
+    <select id="getTeacherUserIds" resultType="java.lang.String">
+        SELECT hikvision_id FROM hikvision_data WHERE table_name = 'base_teacher'
     </select>
 </mapper>

+ 48 - 0
src/test/java/com/xjrsoft/module/job/InsertOutInRecordTaskTest.java

@@ -1,8 +1,17 @@
 package com.xjrsoft.module.job;
 
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
 import com.xjrsoft.XjrSoftApplication;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.module.hikvision.service.IHikvisionDataService;
+import com.xjrsoft.module.hikvision.util.ApiUtil;
 import com.xjrsoft.module.hikvision.util.OutInRecordUtil;
+import com.xjrsoft.module.hikvision.vo.HikvisionOutinPageVo;
 import com.xjrsoft.module.teacher.mapper.FaceImportMapper;
 import jline.internal.Log;
 import org.junit.jupiter.api.Test;
@@ -15,6 +24,8 @@ import java.text.ParseException;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
 
 
 /**
@@ -33,6 +44,43 @@ class InsertOutInRecordTaskTest {
     @Autowired
     private IHikvisionDataService hikvisionDataService;
 
+    @Autowired
+    private IHikvisionDataService hkvisionDataService;
+    @Test
+    void test2() throws ParseException {
+        LocalDateTime startDateTime = LocalDateTime.of(2024,9,1,0,0,0);
+        LocalDateTime endDateTime = LocalDateTime.of(2024,9,30,23,59,59);
+        Integer limit = 1;
+        Integer size = 1000;
+        ApiUtil apiUtil = new ApiUtil();
+        String apiPath = "/api/acs/v2/door/events";
+
+        JsonObject paramJson = new JsonObject();
+        JsonArray eventList = new JsonArray();
+        eventList.add(196893); // 只获取人脸通过的
+        paramJson.addProperty("pageNo", limit);
+        paramJson.addProperty("pageSize", size);
+        paramJson.add("eventTypes", eventList);
+
+        JsonArray personIds = new JsonArray();
+        personIds.add("C137");
+        personIds.add("153310036502459");
+        personIds.add("C139");
+        personIds.add("14954809603013");
+
+        paramJson.add("personIds", personIds);
+        paramJson.addProperty("sort", "eventTime");
+        paramJson.addProperty("order", "desc");
+        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 doPost = apiUtil.doPost(apiPath, paramJson.toString(), null);
+        JsonParser parser = new JsonParser();
+        JsonObject data = parser.parse(doPost).getAsJsonObject().get("data").getAsJsonObject();
+        JsonArray list = data.get("list").getAsJsonArray();
+        out_in_recordUtil.InsertTeacherStudentRecords(list, faceImportMapper);
+    }
+
     @Test
     void test() throws ParseException {
         //获取时间,并计算出前一天的开始时间和结束时间