Переглянути джерело

1、新增教师出入记录同步接口
2、解决处分信息查询问题

dzx 1 рік тому
батько
коміт
ea9681737b

+ 13 - 1
src/main/java/com/xjrsoft/module/outint/controller/TeacherOutInRecordController.java

@@ -7,13 +7,17 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.yulichang.toolkit.MPJWrappers;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.LocalDateTimeUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.hikvision.util.ApiUtil;
 import com.xjrsoft.module.organization.entity.UserDeptRelation;
 import com.xjrsoft.module.outint.dto.AddTeacherOutInRecordDto;
+import com.xjrsoft.module.outint.dto.SyncHikvsionDataDto;
 import com.xjrsoft.module.outint.dto.TeacherOutInRecordPageDto;
 import com.xjrsoft.module.outint.dto.UpdateTeacherOutInRecordDto;
 import com.xjrsoft.module.outint.entity.StudentOutInRecord;
@@ -100,7 +104,7 @@ public class TeacherOutInRecordController {
     public RT<Boolean> add(@Valid @RequestBody AddTeacherOutInRecordDto dto){
         TeacherOutInRecord teacherOutInRecord = BeanUtil.toBean(dto, TeacherOutInRecord.class);
         boolean isSuccess = teacherOutInRecordService.save(teacherOutInRecord);
-    return RT.ok(isSuccess);
+        return RT.ok(isSuccess);
     }
 
     @PutMapping
@@ -118,7 +122,15 @@ public class TeacherOutInRecordController {
     @SaCheckPermission("teacheroutinrecord:delete")
     public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
         return RT.ok(teacherOutInRecordService.removeBatchByIds(ids));
+    }
+
+    @PostMapping("/sync-hikvision-data")
+    @ApiOperation(value = "同步教师出入记录")
+    @SaCheckPermission("teacheroutinrecord:add")
+    public RT<Boolean> syncHikvisionData(@Valid @RequestBody SyncHikvsionDataDto dto){
+
 
+        return RT.ok(teacherOutInRecordService.syncHikvisionData(dto));
     }
 
 }

+ 28 - 0
src/main/java/com/xjrsoft/module/outint/dto/SyncHikvsionDataDto.java

@@ -0,0 +1,28 @@
+package com.xjrsoft.module.outint.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+
+/**
+* @title: 教师出入记录
+* @Author dzx
+* @Date: 2024-05-14
+* @Version 1.0
+*/
+@Data
+public class SyncHikvsionDataDto{
+
+    private static final long serialVersionUID = 1L;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("同步开始时间")
+    private LocalDateTime startTime;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty("同步截止时间")
+    private LocalDateTime endTime;
+}

+ 3 - 0
src/main/java/com/xjrsoft/module/outint/service/ITeacherOutInRecordService.java

@@ -1,6 +1,7 @@
 package com.xjrsoft.module.outint.service;
 
 import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.outint.dto.SyncHikvsionDataDto;
 import com.xjrsoft.module.outint.dto.TeacherOutInRecordDto;
 import com.xjrsoft.module.outint.entity.TeacherOutInRecord;
 import org.apache.ibatis.annotations.Param;
@@ -17,4 +18,6 @@ import java.util.List;
 public interface ITeacherOutInRecordService extends MPJBaseService<TeacherOutInRecord> {
 
     List<TeacherOutInRecord> getListByParam(TeacherOutInRecordDto dto);
+
+    Boolean syncHikvisionData(SyncHikvsionDataDto dto);
 }

+ 48 - 0
src/main/java/com/xjrsoft/module/outint/service/impl/TeacherOutInRecordServiceImpl.java

@@ -1,13 +1,25 @@
 package com.xjrsoft.module.outint.service.impl;
 
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.xjrsoft.common.exception.MyException;
+import com.xjrsoft.module.hikvision.util.ApiUtil;
+import com.xjrsoft.module.hikvision.util.OutInRecordUtil;
+import com.xjrsoft.module.outint.dto.SyncHikvsionDataDto;
 import com.xjrsoft.module.outint.dto.TeacherOutInRecordDto;
 import com.xjrsoft.module.outint.entity.TeacherOutInRecord;
 import com.xjrsoft.module.outint.mapper.TeacherOutInRecordMapper;
 import com.xjrsoft.module.outint.service.ITeacherOutInRecordService;
+import com.xjrsoft.module.teacher.mapper.FaceImportMapper;
 import lombok.AllArgsConstructor;
+import me.zhyd.oauth.log.Log;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 
 /**
@@ -19,8 +31,44 @@ import java.util.List;
 @Service
 @AllArgsConstructor
 public class TeacherOutInRecordServiceImpl extends MPJBaseServiceImpl<TeacherOutInRecordMapper, TeacherOutInRecord> implements ITeacherOutInRecordService {
+
+    private final FaceImportMapper faceImportMapper;
+
     @Override
     public List<TeacherOutInRecord> getListByParam(TeacherOutInRecordDto dto) {
         return this.baseMapper.getListByParam(dto);
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean syncHikvisionData(SyncHikvsionDataDto dto) {
+        try {
+            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);
+
+            paramJson.addProperty("sort", "eventTime");
+            paramJson.addProperty("order", "desc");
+            paramJson.addProperty("startTime", dto.getStartTime().atOffset(ZoneOffset.ofHours(8)).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
+            paramJson.addProperty("endTime", dto.getEndTime().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();
+            new OutInRecordUtil().InsertTeacherStudentRecords(list, faceImportMapper);
+        }catch (Exception e){
+            Log.error(e.getMessage(), e);
+            throw new MyException("同步报错,请联系管理员");
+        }
+        return true;
+    }
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/student/controller/BaseStudentPunishmentInfoController.java

@@ -95,7 +95,7 @@ public class BaseStudentPunishmentInfoController {
     public RT<Boolean> add(@Valid @RequestBody AddBaseStudentPunishmentInfoDto dto){
         BaseStudentPunishmentInfo baseStudentPunishmentInfo = BeanUtil.toBean(dto, BaseStudentPunishmentInfo.class);
         boolean isSuccess = baseStudentPunishmentInfoService.add(baseStudentPunishmentInfo);
-    return RT.ok(isSuccess);
+        return RT.ok(isSuccess);
     }
 
     @PutMapping

+ 4 - 4
src/main/resources/mapper/student/BaseStudentPunishmentInfoMapper.xml

@@ -15,7 +15,10 @@
         t.push_message_object,
         t.reason
         FROM base_student_punishment_info t
-        INNER JOIN base_punishment_type t2 ON (t.delete_mark = 0
+        INNER JOIN base_punishment_type t2 ON (AND t2.id = t.punishment_type_id)
+        LEFT JOIN base_semester t1 ON (t1.id = t.base_semester_id)
+        LEFT JOIN base_class t3 ON (t3.id = t.class_id)
+        where t.delete_mark = 0
         <if test="dto.semesterId != null and dto.semesterId > 0">
             and t.base_semester_id = #{dto.semesterId}
         </if>
@@ -28,9 +31,6 @@
         <if test="dto.endTime != null and dto.endTime != ''">
             and t.end_time = #{dto.endTime}
         </if>
-            AND t2.id = t.punishment_type_id)
-        LEFT JOIN base_semester t1 ON (t1.id = t.base_semester_id)
-        LEFT JOIN base_class t3 ON (t3.id = t.class_id)
         ORDER BY t.id DESC;
     </select>