package com.xjrsoft.module.student.service.impl; 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.module.attendance.dto.AttendanceStatisticDto; 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.outint.vo.IdCountVo; import com.xjrsoft.module.student.entity.StudentLeave; import com.xjrsoft.module.student.mapper.StudentLeaveMapper; import com.xjrsoft.module.student.service.IStudentLeaveService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @title: 学生请假 * @Author dzx * @Date: 2024年5月21日 * @Version 1.0 */ @Service @AllArgsConstructor public class StudentLeaveServiceImpl extends MPJBaseServiceImpl implements IStudentLeaveService { private final HikvisionDataMapper hikvisionDataMapper; @Override public Boolean hikvisionLeave(Long id) { StudentLeave studentLeave = this.getById(id); //查询学生在海康的id HikvisionData hikvisionData = hikvisionDataMapper.selectOne( new QueryWrapper().lambda() .eq(HikvisionData::getSourceId, studentLeave.getStudentUserId()) .eq(HikvisionData::getTableName, "base_student") ); ApiUtil apiUtil = new ApiUtil(); String apiPath = "/api/acps/v1/auth_config/add"; String outputFormat = "yyyy-MM-dd'T'HH:mm:ss+08:00"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern(outputFormat); JsonObject paramJson = new JsonObject(); paramJson.addProperty("startTime", studentLeave.getStartDate().atStartOfDay().format(formatter)); paramJson.addProperty("endTime", studentLeave.getEndDate().atTime(23,59,59).format(formatter)); //组装人员数据 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 header = new HashMap<>(); header.put("tagId", "studentleave"); //调用接口获取到返回内容,并将其存到数据库中 String result = apiUtil.doPost(apiPath, paramJson.toString(), null, header); studentLeave.setHikvisionResult(result); this.updateById(studentLeave); return true; } @Override public Long getLeaveCount(LocalDateTime startTime, LocalDateTime endTime, AttendanceStatisticDto dto) { return this.baseMapper.getLeaveCount(startTime, endTime, dto); } @Override public Map getClassLeaveCount(LocalDateTime startTime, LocalDateTime endTime) { List classLeaveCount = this.baseMapper.getClassLeaveCount(startTime, endTime); Map result = new HashMap<>(); for (IdCountVo idCountVo : classLeaveCount) { result.put(idCountVo.getId(), idCountVo.getCount()); } return result; } @Override public Map getLeaveList(LocalDateTime startTime, LocalDateTime endTime) { List leaveList = this.baseMapper.getLeaveList(startTime, endTime); Map result = new HashMap<>(); for (StudentLeave studentLeave : leaveList) { result.put(studentLeave.getClassId(), studentLeave); } return result; } 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; } }