瀏覽代碼

教职工请假,推送海康数据

dzx 1 年之前
父節點
當前提交
53c368cdfb

+ 97 - 0
src/main/java/com/xjrsoft/module/job/HikvisionLeaveTask.java

@@ -0,0 +1,97 @@
+package com.xjrsoft.module.job;
+
+import cn.hutool.db.Db;
+import cn.hutool.extra.spring.SpringUtil;
+import com.xjrsoft.common.constant.GlobalConstant;
+import com.xjrsoft.common.utils.DatasourceUtil;
+import com.xjrsoft.module.hikvision.entity.HikvisionData;
+import com.xjrsoft.module.hikvision.util.DataUtil;
+import com.xjrsoft.module.schedule.entity.JianyueData;
+import com.xjrsoft.module.teacher.mapper.FaceImportMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.sql.DataSource;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * 用于请假后删除权限
+ * @author dzx
+ * @date 2024年5月21日
+ */
+@Component
+@Slf4j
+public class HikvisionLeaveTask {
+    @Autowired
+    private FaceImportMapper faceImportMapper;
+
+    @Scheduled(cron = "0 */15 * * * ?")
+    public void RefreshConnectionPool() {
+        String active = SpringUtil.getActiveProfile();
+        if(!"prod".equals(active)){
+            log.info("非正式环境,无法执行数据推送");
+            return;
+        }
+        log.info("开始推送海康威视基础数据");
+        DataSource datasource = DatasourceUtil.getDataSource(GlobalConstant.DEFAULT_DATASOURCE_KEY);
+        try {
+            Db use = Db.use(datasource);
+            String sql = "SELECT distinct table_name FROM hikvision_data WHERE 1 = 1";
+            List<JianyueData> query = use.query(sql, JianyueData.class);
+            Set<String> tables = new HashSet<>();
+            for (JianyueData jianyueData : query) {
+                tables.add(jianyueData.getTableName());
+            }
+            sql = "SELECT * FROM hikvision_data WHERE 0 = 0";
+            List<HikvisionData> list = use.query(sql, HikvisionData.class);
+            Map<String, Map<String, String>> dataMap = new HashMap<>();
+            for (String table : tables) {
+                Map<String, String> tableData = new HashMap<>();
+                for (HikvisionData hikvisiondata : list) {
+                    if(!table.equals(hikvisiondata.getTableName())){
+                        continue;
+                    }
+                    tableData.put(hikvisiondata.getSourceId(), hikvisiondata.getHikvisionId());
+                }
+                dataMap.put(table, tableData);
+            }
+            DataUtil dataUtil = new DataUtil();
+            //查询根机构
+            //JsonArray schoolDistrictData = dataUtil.getSchoolDistrictData();
+            //推送组织机构
+            String tableName = "xjr_department";
+            Map<String, String> department = dataUtil.insertDepartment(use, tableName, dataMap.get(tableName));
+            if(department.isEmpty() && dataMap.get(tableName) != null){
+                department = dataMap.get(tableName);
+            }
+
+            //推送教职工
+            tableName = "base_teacher";
+            dataUtil.insertTeacher(use, tableName, dataMap.get(tableName), department);
+
+            //推送车辆
+            String carTableName = "car_message_apply";
+            Map<String, String> baseCar = dataMap.get(carTableName);
+            dataUtil.insertCar(use, carTableName, baseCar, faceImportMapper);
+
+            tableName = "base_class";
+            Map<String, String> baseClass = dataMap.get(tableName);
+            Map<String, String> classes = dataUtil.insertClass(use, tableName, baseClass);
+
+
+            tableName = "base_student";
+            Map<String, String> baseStudent = dataMap.get(tableName);
+            Map<String, String> student = dataUtil.insertStudentOne(use, tableName, baseStudent);
+
+            log.info("数据推送完成");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+    }
+}

+ 31 - 0
src/main/java/com/xjrsoft/module/liteflow/node/TeacherLeaveNode.java

@@ -0,0 +1,31 @@
+package com.xjrsoft.module.liteflow.node;
+
+import cn.hutool.core.convert.Convert;
+import com.xjrsoft.module.student.service.IStudentLeaveService;
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * 教师请假请假数据,推送海康门禁
+ */
+@Component("teacher_leave_node")
+public class TeacherLeaveNode extends NodeComponent {
+
+    @Autowired
+    private IStudentLeaveService studentLeaveService;
+
+    @Override
+    public void process() throws Exception {
+        // 获取表单中数据编号
+        Map<String, Object> params = this.getFirstContextBean();
+        Object value = util.getFormDatKey(params,"id");
+        Long formId = Convert.toLong(value);
+        if (formId != null) {
+            // 数据处理
+            studentLeaveService.hikvisionLeave(formId);
+        }
+    }
+}

+ 2 - 0
src/main/java/com/xjrsoft/module/liteflow/node/WfTeacherleaveNode.java

@@ -25,6 +25,8 @@ public class WfTeacherleaveNode extends NodeComponent {
         if (formId != null) {
             // 数据处理
             wfTeacherleaveService.dataHandle(formId);
+
+            wfTeacherleaveService.hikvisionLeave(formId);
         }
     }
 }

+ 0 - 1
src/main/java/com/xjrsoft/module/student/service/impl/StudentLeaveServiceImpl.java

@@ -82,7 +82,6 @@ public class StudentLeaveServiceImpl extends MPJBaseServiceImpl<StudentLeaveMapp
         jsonObject.addProperty("pageSize", 500);
         jsonObject.addProperty("resourceType", "door");
 
-
         String result = apiUtil.doPost(apiPath, jsonObject.toString(), null, null);
         JsonParser parser = new JsonParser();
         JsonObject resultJson = parser.parse(result).getAsJsonObject();

+ 2 - 1
src/main/java/com/xjrsoft/module/teacher/entity/WfTeacherleave.java

@@ -90,5 +90,6 @@ public class WfTeacherleave implements Serializable {
     @ApiModelProperty("附件")
     private String annex;
 
-
+    @ApiModelProperty("海康接口返回内容")
+    private String hikvisionResult;
 }

+ 8 - 0
src/main/java/com/xjrsoft/module/teacher/service/IWfTeacherleaveService.java

@@ -1,6 +1,7 @@
 package com.xjrsoft.module.teacher.service;
 
 import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.personnel.entity.ReservationSchool;
 import com.xjrsoft.module.teacher.entity.WfTeacherleave;
 
 /**
@@ -12,4 +13,11 @@ import com.xjrsoft.module.teacher.entity.WfTeacherleave;
 
 public interface IWfTeacherleaveService extends MPJBaseService<WfTeacherleave> {
     Boolean dataHandle(Long dataId);
+
+    /**
+     * 教师请假,审批通过后,将数据推送到海康
+     * @param id
+     * @return
+     */
+    Boolean hikvisionLeave(Long id);
 }

+ 89 - 2
src/main/java/com/xjrsoft/module/teacher/service/impl/WfTeacherleaveServiceImpl.java

@@ -3,7 +3,14 @@ package com.xjrsoft.module.teacher.service.impl;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
 import com.xjrsoft.common.enums.LeaveReasonEnum;
+import com.xjrsoft.module.hikvision.entity.HikvisionData;
+import com.xjrsoft.module.hikvision.mapper.HikvisionDataMapper;
+import com.xjrsoft.module.hikvision.util.ApiUtil;
 import com.xjrsoft.module.teacher.entity.WfHeadTeacherLeave;
 import com.xjrsoft.module.teacher.entity.WfTeacherleave;
 import com.xjrsoft.module.teacher.mapper.WfTeacherleaveMapper;
@@ -13,11 +20,18 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import org.springframework.stereotype.Service;
 
-import java.time.*;
+import java.text.SimpleDateFormat;
+import java.time.DayOfWeek;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneId;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @title: 教职工请假流程
@@ -30,7 +44,7 @@ import java.util.List;
 public class WfTeacherleaveServiceImpl extends MPJBaseServiceImpl<WfTeacherleaveMapper, WfTeacherleave> implements IWfTeacherleaveService {
 
     private final IWfHeadTeacherLeaveService wfHeadTeacherLeaveService;
-
+    private final HikvisionDataMapper hikvisionDataMapper;
     @Override
     public Boolean dataHandle(Long dataId) {
         WfTeacherleave wfTeacherleave = this.getById(dataId);
@@ -125,6 +139,79 @@ public class WfTeacherleaveServiceImpl extends MPJBaseServiceImpl<WfTeacherleave
         return true;
     }
 
+    @Override
+    public Boolean hikvisionLeave(Long id) {
+        WfTeacherleave teacherleave = this.getById(id);
+        //查询学生在海康的id
+        HikvisionData hikvisionData = hikvisionDataMapper.selectOne(
+            new QueryWrapper<HikvisionData>().lambda()
+            .eq(HikvisionData::getSourceId, teacherleave.getUserId())
+            .eq(HikvisionData::getTableName, "base_teacher")
+        );
+        ApiUtil apiUtil = new ApiUtil();
+        String apiPath = "/api/acps/v1/auth_config/add";
+
+        String outputFormat = "yyyy-MM-dd'T'HH:mm:ss+08:00";
+        SimpleDateFormat sdf = new SimpleDateFormat(outputFormat);
+        JsonObject paramJson = new JsonObject();
+
+        paramJson.addProperty("startTime", sdf.format(teacherleave.getLeaveStartTime()));
+        paramJson.addProperty("endTime", sdf.format(teacherleave.getLeaveEndTime()));
+
+        //组装人员数据
+        JsonArray personDatas = new JsonArray();
+        JsonObject personData = new JsonObject();
+        personData.addProperty("personDataType", "person");
+
+        JsonArray indexCodes = new JsonArray();
+        indexCodes.add(hikvisionData.getHikvisionId());
+        personData.add("indexCodes", indexCodes);
+
+        personDatas.add(personData);
+        paramJson.add("personDatas", personDatas);
+
+        JsonArray resourceInfos = selectResource(apiUtil);
+        paramJson.add("resourceInfos", resourceInfos);
+
+        Map<String, String> header = new HashMap<>();
+        header.put("tagId", "studentleave");
+        //调用接口获取到返回内容,并将其存到数据库中
+        String result = apiUtil.doPost(apiPath, paramJson.toString(), null, header);
+        teacherleave.setHikvisionResult(result);
+        this.updateById(teacherleave);
+
+        return true;
+    }
+
+    JsonArray selectResource(ApiUtil apiUtil){
+        String apiPath = "/api/irds/v2/resource/resourcesByParams";
+        JsonObject jsonObject = new JsonObject();
+        jsonObject.addProperty("pageNo", 1);
+        jsonObject.addProperty("pageSize", 500);
+        jsonObject.addProperty("resourceType", "door");
+
+        String result = apiUtil.doPost(apiPath, jsonObject.toString(), null, null);
+        JsonParser parser = new JsonParser();
+        JsonObject resultJson = parser.parse(result).getAsJsonObject();
+        JsonArray resourceInfos = new JsonArray();
+
+        if("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())){
+            JsonArray list = resultJson.get("data").getAsJsonObject().get("list").getAsJsonArray();
+            for (JsonElement jsonElement : list) {
+                JsonObject listOne = jsonElement.getAsJsonObject();
+                JsonObject resourceInfo = new JsonObject();
+                resourceInfo.add("resourceIndexCode", listOne.get("indexCode"));
+                resourceInfo.add("resourceType", listOne.get("resourceType"));
+                JsonArray channelNos = new JsonArray();
+                channelNos.add(listOne.get("channelNo"));
+                resourceInfo.add("channelNos", channelNos);
+                resourceInfos.add(resourceInfo);
+            }
+        }
+
+        return resourceInfos;
+    }
+
     /**
      * 按日分割
      *