package com.xjrsoft.module.job; import cn.hutool.extra.spring.SpringUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; 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.student.entity.StudentLeave; import com.xjrsoft.module.student.service.IStudentLeaveService; import com.xjrsoft.module.teacher.entity.WfTeacherleave; import com.xjrsoft.module.teacher.service.IWfTeacherleaveService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.time.LocalDate; import java.util.*; /** * 请假结束之后,删除下发到海康的一卡通权限 * * @author dzx * @date 2024/5/8 */ @Component @Slf4j public class HikvisionLeaveTask { @Autowired private IStudentLeaveService studentLeaveService; @Autowired private IWfTeacherleaveService teacherleaveService; @Autowired private HikvisionDataMapper hikvisionDataMapper; @Async @Scheduled(cron = "0 */15 * * * ?") public void execute() { doExecute(); } public void doExecute() { String active = SpringUtil.getActiveProfile(); if (!"prod".equals(active)) { log.info("非正式环境,无法执行数据推送"); return; } List sourceIds = new ArrayList<>(); List studentList = studentLeaveService.list( new QueryWrapper().lambda() .isNotNull(StudentLeave::getHikvisionResult) .lt(StudentLeave::getEndDate, LocalDate.now()) ); for (StudentLeave studentLeave : studentList) { sourceIds.add(studentLeave.getStudentUserId().toString()); } List teacherList = teacherleaveService.list( new QueryWrapper().lambda() .isNotNull(WfTeacherleave::getHikvisionResult) .lt(WfTeacherleave::getLeaveEndTime, new Date()) ); for (WfTeacherleave teacherleave : teacherList) { String[] split = teacherleave.getUserId().split(","); sourceIds.addAll(Arrays.asList(split)); } if (sourceIds.isEmpty()) { return; } List hikvisionData = hikvisionDataMapper.selectList( new QueryWrapper().lambda() .in(HikvisionData::getSourceId, sourceIds) ); ApiUtil apiUtil = new ApiUtil(); String apiPath = "/api/acps/v1/auth_config/delete"; JsonObject paramJson = new JsonObject(); JsonArray personDatas = new JsonArray(); JsonObject personData = new JsonObject(); JsonArray indexCodes = new JsonArray(); for (HikvisionData el : hikvisionData) { indexCodes.add(el.getHikvisionId()); } personData.addProperty("personDataType", "person"); personData.add("indexCodes", indexCodes); personDatas.add(personData); paramJson.add("personDatas", personDatas); JsonArray resourceInfos = selectResource(apiUtil); paramJson.add("resourceInfos", resourceInfos); Map header = new HashMap<>(); header.put("tagId", "studentleave"); //调用接口获取到返回内容,并将其存到数据库中 String result = apiUtil.doPost(apiPath, paramJson.toString(), null, header); //删除成功后,重新下载 //1、创建任务 paramJson = new JsonObject(); paramJson.addProperty("taskType", 1); apiPath = "/api/acps/v1/download/configuration/task/add"; String doPost = apiUtil.doPost(apiPath, paramJson.toString(), null, null); JsonParser jsonParser = new JsonParser(); JsonObject resultJson = jsonParser.parse(doPost).getAsJsonObject(); if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) { String taskId = resultJson.get("data").getAsJsonObject().get("taskId").getAsString(); //2、下载 apiPath = "/api/acps/v1/download/configuration/data/add"; paramJson = new JsonObject(); paramJson.add("resourceInfos", resourceInfos); paramJson.addProperty("taskId", taskId); apiUtil.doPost(apiPath, paramJson.toString(), null, null); } } 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; } }