123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- package Acs;
- import NetSDKDemo.HCNetSDK;
- import cn.iocoder.yudao.framework.common.pojo.PageResult;
- import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
- import cn.iocoder.yudao.module.infra.api.file.FileApi;
- import cn.iocoder.yudao.module.system.controller.admin.studentAttendance.vo.StudentAttendancePageReqVO;
- import cn.iocoder.yudao.module.system.controller.admin.studentAttendance.vo.StudentAttendanceSaveReqVO;
- import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
- import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileUpdateReqVO;
- import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportExcelVO;
- import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportRespVO;
- import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqVO;
- import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO;
- import cn.iocoder.yudao.module.system.dal.dataobject.studentAttendance.StudentAttendanceDO;
- import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
- import cn.iocoder.yudao.module.system.service.studentAttendance.StudentAttendanceService;
- import cn.iocoder.yudao.module.system.service.user.AdminUserService;
- import com.sun.jna.Pointer;
- import java.io.*;
- import java.nio.ByteBuffer;
- import java.nio.file.Files;
- import java.nio.file.Path;
- import java.time.LocalDate;
- import java.time.LocalDateTime;
- import java.time.format.DateTimeFormatter;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Collections;
- import java.util.List;
- import cn.iocoder.yudao.module.md.service.*;
- import org.jetbrains.annotations.Nullable;
- import org.springframework.beans.BeansException;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.ApplicationContextAware;
- import javax.annotation.Resource;
- /**
- * 事件查询模块
- */
- public final class EventSearch {
- private static List<Object> studentAttendance =new ArrayList<>();
- /**
- * 门禁事件查询,基于起止时间,事件类型进行查询
- *
- * @param lUserID
- * @return
- * @throws UnsupportedEncodingException
- * @throws InterruptedException
- */
- @Nullable
- public static List<Object> searchAllEvent(int lUserID , AdminUserService adminUserService, StudentAttendanceService studentAttendanceService, FileApi fileApi) throws UnsupportedEncodingException, InterruptedException {
- int i = 0; //事件条数
- int previousI = -1;
- HCNetSDK.NET_DVR_ACS_EVENT_COND struAcsEventCond = new HCNetSDK.NET_DVR_ACS_EVENT_COND();
- struAcsEventCond.read();
- struAcsEventCond.dwSize = struAcsEventCond.size();
- //查询全部主次类型的报警
- struAcsEventCond.dwMajor = 0; // 主次事件类型设为0,代表查询所有事件
- struAcsEventCond.dwMinor = 0; //
- LocalDate yesterday = LocalDate.now().minusDays(1);
- //开始时间
- struAcsEventCond.struStartTime.dwYear = yesterday.getYear();//当前年
- struAcsEventCond.struStartTime.dwMonth = yesterday.getMonthValue();//当前月
- struAcsEventCond.struStartTime.dwDay = yesterday.getDayOfMonth();;//当前月的日
- struAcsEventCond.struStartTime.dwHour = 0;
- struAcsEventCond.struStartTime.dwMinute = 0;
- struAcsEventCond.struStartTime.dwSecond = 0;
- //结束时间
- struAcsEventCond.struEndTime.dwYear = LocalDate.now().getYear();
- struAcsEventCond.struEndTime.dwMonth = LocalDate.now().getMonthValue();
- struAcsEventCond.struEndTime.dwDay = LocalDate.now().getDayOfMonth();
- struAcsEventCond.struEndTime.dwHour = 23;
- struAcsEventCond.struEndTime.dwMinute = 59;
- struAcsEventCond.struEndTime.dwSecond = 59;
- struAcsEventCond.wInductiveEventType = 1;
- struAcsEventCond.byPicEnable = 1; //是否带图片,0-不带图片,1-带图片
- struAcsEventCond.write();
-
- Pointer ptrStruEventCond = struAcsEventCond.getPointer();
- int m_lSearchEventHandle = AcsService.hCNetSDK.NET_DVR_StartRemoteConfig(lUserID, HCNetSDK.NET_DVR_GET_ACS_EVENT, ptrStruEventCond, struAcsEventCond.size(), null, null);
- if (m_lSearchEventHandle<=-1)
- {
- System.out.println("NET_DVR_StartRemoteConfig调用失败,错误码:" + AcsService.hCNetSDK.NET_DVR_GetLastError());
- }
- HCNetSDK.NET_DVR_ACS_EVENT_CFG struAcsEventCfg = new HCNetSDK.NET_DVR_ACS_EVENT_CFG();
- struAcsEventCfg.read();
- struAcsEventCfg.dwSize = struAcsEventCfg.size();
- struAcsEventCfg.write();
- Pointer ptrStruEventCfg = struAcsEventCfg.getPointer();
- while (true) {
- // System.out.println("i=" + i);
- int dwEventSearch = AcsService.hCNetSDK.NET_DVR_GetNextRemoteConfig(m_lSearchEventHandle, ptrStruEventCfg, struAcsEventCfg.size());
- // if (dwEventSearch <= -1) {
- // System.out.println("NET_DVR_GetNextRemoteConfig接口调用失败,错误码:" + AcsService.hCNetSDK.NET_DVR_GetLastError());
- // }
- if (dwEventSearch == HCNetSDK.NET_SDK_GET_NEXT_STATUS_NEED_WAIT) {
- System.out.println("配置等待....");
- try {
- Thread.sleep(10);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- continue;
- } else if (dwEventSearch == HCNetSDK.NET_SDK_NEXT_STATUS__FINISH) {
- System.out.println("获取事件完成");
- break;
- } else if (dwEventSearch == HCNetSDK.NET_SDK_GET_NEXT_STATUS_FAILED) {
- System.out.println("获取事件出现异常");
- break;
- } else if (dwEventSearch == HCNetSDK.NET_SDK_GET_NEXT_STATUS_SUCCESS) {
- StudentAttendanceDO attendance =new StudentAttendanceDO();
- struAcsEventCfg.read();
- //打卡人脸信息
- String photoUrl = null;
- if (struAcsEventCfg.dwPicDataLen > 0 || struAcsEventCfg.pPicData != null) {
- try {
- /**
- * 人脸图片保存路径
- */
- ByteBuffer buffers = struAcsEventCfg.pPicData.getByteBuffer(0, struAcsEventCfg.dwPicDataLen);
- byte[] bytes = new byte[struAcsEventCfg.dwPicDataLen];
- buffers.rewind();
- buffers.get(bytes);
- Path tempFilePath = Files.createTempFile("photo", ".jpg");
- Files.write(tempFilePath, bytes);
- photoUrl = fileApi.createFile(Files.readAllBytes(tempFilePath)); // 上传文件并获取 URL
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- String clockInTime = (struAcsEventCfg.struTime.dwYear + "-" +
- String.format("%02d", struAcsEventCfg.struTime.dwMonth) + "-" +
- String.format("%02d", struAcsEventCfg.struTime.dwDay) + " " +
- String.format("%02d", struAcsEventCfg.struTime.dwHour) + ":" +
- String.format("%02d", struAcsEventCfg.struTime.dwMinute) + ":" +
- String.format("%02d", struAcsEventCfg.struTime.dwSecond));
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
- LocalDateTime parsedTime =null;
- String employeeNo =null;
- LocalDate date =null;
- if ( clockInTime!=null){
- parsedTime = LocalDateTime.parse(clockInTime, formatter);
- date = parsedTime.toLocalDate();
- }
- if (struAcsEventCfg.struAcsEventInfo.dwEmployeeNo!=0){
- employeeNo = String.valueOf(struAcsEventCfg.struAcsEventInfo.dwEmployeeNo);
- }
- //设置信息
- attendance.setDate(date);//打卡日期
- attendance.setUserNumber(employeeNo);//学号
- if (photoUrl != null) {
- attendance.setPhoto(photoUrl); // 设置照片
- }
- StudentAttendanceDO ST = studentAttendanceService.getStudentAttendanceOne(employeeNo,parsedTime);//获取这个学生对应的这个考勤记录
- AdminUserDO user = adminUserService.findUserByUserNumber(employeeNo);//找到这个学生
- //插入到attendance表
- if (ST==null) { // 如果不存在,则进行打卡记录的创建
- if (employeeNo != null && !employeeNo.equals("0")) {
- if (user != null &&"1".equals(user.getUserType())) {//在校生
- StudentAttendancePageReqVO attendanceReqVO = new StudentAttendancePageReqVO();
- LocalDate localDate = LocalDate.now();
- if (localDate.equals(date)) {
- attendanceReqVO.setDate(localDate);
- attendanceReqVO.setUserNumber(user.getUserNumber());
- attendance.setClockInStatus("1");
- List<StudentAttendanceDO> result = studentAttendanceService.getStudentAttendanceAllList(attendanceReqVO);//找到这天的未打卡记录
- if (result!=null&&!result.isEmpty()) {//有未打卡记录更新未打卡记录
- StudentAttendanceDO re = result.get(0);
- if ("1".equals(re.getClockInStatus())) {//找到未打卡的
- re.setClockInStatus("0");//变成正常
- re.setClockInTime(parsedTime);//更新打卡时间
- re.setCreateTime(parsedTime);
- re.setUpdateTime(parsedTime);//更新时间
- if (photoUrl != null) {
- re.setPhoto(photoUrl); //
- }
- studentAttendance.add(re);//
- studentAttendanceService.updateStudentAttendance(BeanUtils.toBean(re, StudentAttendanceSaveReqVO.class));
- }
- }else {//无未打卡记录直接插入
- attendance.setStudentName(user.getNickname()); // 昵称
- attendance.setStudentId(user.getId()); // 学生id
- attendance.setDeptId(user.getDeptId()); // 工作间id
- attendance.setSupervisorId(user.getSupervisorId()); // 导师id
- attendance.setClockInStatus(transformClockStatus(parsedTime)); // 打卡状态
- attendance.setClockInTime(parsedTime);//打卡时间
- attendance.setCreateTime(parsedTime);
- attendance.setUpdateTime(parsedTime);
- studentAttendance.add(attendance);
- studentAttendanceService.createStudentAttendance(BeanUtils.toBean(attendance, StudentAttendanceSaveReqVO.class));
- }
- }else {//前一天的以免没有加载
- attendance.setStudentName(user.getNickname()); // 昵称
- attendance.setStudentId(user.getId()); // 学生id
- attendance.setDeptId(user.getDeptId()); // 工作间id
- attendance.setSupervisorId(user.getSupervisorId()); // 导师id
- attendance.setClockInStatus(transformClockStatus(parsedTime)); // 打卡状态
- attendance.setClockInTime(parsedTime);//打卡时间
- attendance.setCreateTime(parsedTime);
- attendance.setUpdateTime(parsedTime);
- studentAttendance.add(attendance);
- studentAttendanceService.createStudentAttendance(BeanUtils.toBean(attendance, StudentAttendanceSaveReqVO.class));
- }
- } else {
- System.out.println("没有找到该用户" + employeeNo);
- }
- }
- }else {//存在打卡记录,判断更新照片(可能由于网络问题没有插入)
- if (ST.getPhoto() == null || ST.getPhoto().equals("")) {
- ST.setPhoto(photoUrl);
- studentAttendanceService.updateStudentAttendance(BeanUtils.toBean(ST, StudentAttendanceSaveReqVO.class));
- }
- }
- i++;
- }
- if(i == previousI){
- System.out.println("发现相同的 i = " + i + ",停止循环");
- break;
- }
- previousI = i;
- }
- i = 0;
- if (!AcsService.hCNetSDK.NET_DVR_StopRemoteConfig(m_lSearchEventHandle)) {
- System.out.println("NET_DVR_StopRemoteConfig接口调用失败,错误码:" + AcsService.hCNetSDK.NET_DVR_GetLastError());
- } else {
- System.out.println("NET_DVR_StopRemoteConfig接口成功");
- return studentAttendance;
- }
- return null;
- }
- public static String transformClockStatus(LocalDateTime clockTime){
- return "0";
- }
- }
|