wisdomisite-java/src/main/java/com/zhgd/xmgl/task/VideoItemTask.java

202 lines
9.3 KiB
Java
Raw Normal View History

2024-04-02 18:26:22 +08:00
package com.zhgd.xmgl.task;
2024-05-21 20:43:59 +08:00
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
2024-04-02 18:26:22 +08:00
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
2024-05-21 20:43:59 +08:00
import com.zhgd.jeecg.common.mybatis.EntityMap;
2024-04-02 18:26:22 +08:00
import com.zhgd.xmgl.async.AsyncHikvision;
2024-05-21 20:43:59 +08:00
import com.zhgd.xmgl.call.HikvisionVideoCall;
import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
2024-04-02 18:26:22 +08:00
import com.zhgd.xmgl.modules.project.mapper.ProjectVideoConfigMapper;
import com.zhgd.xmgl.modules.project.service.ProgressTaskService;
2024-05-21 20:43:59 +08:00
import com.zhgd.xmgl.modules.video.entity.ProjectVideoHkVqd;
import com.zhgd.xmgl.modules.video.mapper.ProjectVideoHkVqdMapper;
2024-04-02 18:26:22 +08:00
import com.zhgd.xmgl.modules.video.mapper.VideoItemMapper;
2024-05-21 20:43:59 +08:00
import com.zhgd.xmgl.modules.video.service.impl.VideoItemServiceImpl;
import com.zhgd.xmgl.modules.xz.entity.XzHikvisionVideoFull;
import com.zhgd.xmgl.modules.xz.entity.XzHikvisionVideoOnline;
import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionVideoFullMapper;
import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionVideoOnlineMapper;
import com.zhgd.xmgl.util.DateUtils;
import com.zhgd.xmgl.util.HikvisionUtil;
import com.zhgd.xmgl.util.MapBuilder;
2024-04-02 18:26:22 +08:00
import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock;
2024-05-21 20:43:59 +08:00
import org.apache.commons.collections4.MapUtils;
2024-04-02 18:26:22 +08:00
import org.springframework.beans.factory.annotation.Autowired;
2024-05-21 20:43:59 +08:00
import org.springframework.context.annotation.Lazy;
2024-04-02 18:26:22 +08:00
import org.springframework.scheduling.annotation.Scheduled;
2024-05-21 20:43:59 +08:00
import org.springframework.stereotype.Component;
2024-04-02 18:26:22 +08:00
2024-05-21 20:43:59 +08:00
import java.util.*;
import java.util.stream.Collectors;
2024-04-02 18:26:22 +08:00
/**
* 视频设备监控点定时任务
*/
@Slf4j
2024-05-21 20:43:59 +08:00
@Component
2024-04-02 18:26:22 +08:00
public class VideoItemTask {
2024-05-21 20:43:59 +08:00
@Lazy
2024-04-02 18:26:22 +08:00
@Autowired
2024-05-21 20:43:59 +08:00
HikvisionVideoCall hikvisionVideoCall;
@Lazy
2024-04-02 18:26:22 +08:00
@Autowired
AsyncHikvision asyncHikvision;
2024-05-21 20:43:59 +08:00
@Lazy
2024-04-02 18:26:22 +08:00
@Autowired
ProgressTaskService progressTaskService;
2024-05-21 20:43:59 +08:00
@Lazy
2024-04-02 18:26:22 +08:00
@Autowired
VideoItemMapper videoItemMapper;
2024-05-21 20:43:59 +08:00
@Lazy
2024-04-02 18:26:22 +08:00
@Autowired
ProjectVideoConfigMapper projectVideoConfigMapper;
2024-05-21 20:43:59 +08:00
@Lazy
@Autowired
XzHikvisionVideoOnlineMapper xzHikvisionVideoOnlineMapper;
@Lazy
@Autowired
ProjectMapper projectMapper;
@Lazy
@Autowired
ProjectVideoHkVqdMapper projectVideoHkVqdMapper;
@Lazy
@Autowired
XzHikvisionVideoFullMapper xzHikvisionVideoFullMapper;
@Lazy
@Autowired
VideoItemServiceImpl videoItemService;
2024-04-02 18:26:22 +08:00
/**
* 定时获取录像完整性结果
*/
2024-05-21 20:43:59 +08:00
@SchedulerLock(name = "saveXzHikvisionVideoFull", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5)
2024-04-02 18:26:22 +08:00
@Scheduled(cron = "0 0 0/1 * * ?")
2024-05-21 20:43:59 +08:00
public void saveXzHikvisionVideoFull() throws Exception {
2024-04-02 18:26:22 +08:00
log.info("定时获取录像完整性结果任务开始");
2024-05-21 20:43:59 +08:00
doSaveXzHikvisionVideoFull(new HashMap<String, Object>());
}
2024-04-02 18:26:22 +08:00
2024-05-21 20:43:59 +08:00
/**
* 定时获取录像完整性结果
*/
public void doSaveXzHikvisionVideoFull(Map<String, Object> param) throws Exception {
param.putIfAbsent("beginTime", new Date());
param.putIfAbsent("endTime", new Date());
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>().eq(Project::getSyncHikvision, 1));
for (Project project : projects) {
List<EntityMap> videoItems = videoItemMapper.selectProjectVideoList(new MapBuilder<String, Object>().put("projectSn", project.getProjectSn()).build());
if (CollUtil.isEmpty(videoItems)) {
return;
}
JSONObject jo = new JSONObject();
jo.put("pageNo", 1);
jo.put("pageSize", 1000);
jo.put("beginTime", DateUtils.getISO8601StrWithMs(DateUtil.beginOfDay(DateUtil.parse(MapUtils.getString(param, "beginTime")))));
jo.put("endTime", DateUtils.getISO8601StrWithMs(DateUtil.endOfDay(DateUtil.parse(MapUtils.getString(param, "endTime")))));
jo.put("indexCodes", videoItems.stream().map(entityMap -> entityMap.get("serialNumber")).filter(Objects::nonNull).collect(Collectors.toList()));
JSONObject rsJo = hikvisionVideoCall.getNmsRecordForHikvisionForHttp(project, jo);
if (HikvisionUtil.isSuccess(rsJo)) {
JSONObject dataJo = HikvisionUtil.getJSONObjectData(rsJo);
JSONArray listJa = dataJo.getJSONArray("list");
for (int i = 0; i < listJa.size(); i++) {
JSONObject oneJo = listJa.getJSONObject(i);
XzHikvisionVideoFull entity = new XzHikvisionVideoFull();
entity.setProjectSn(project.getProjectSn());
String indexCode = oneJo.getString("indexCode");
entity.setSerialNumber(indexCode);
Integer result = oneJo.getInteger("result");
entity.setType(result);
String date = oneJo.getString("date");
entity.setDate(date);
Integer from = oneJo.getInteger("from");
entity.setFrom(from);
Integer to = oneJo.getInteger("to");
entity.setTo(to);
Integer count = xzHikvisionVideoFullMapper.selectCount(new LambdaQueryWrapper<XzHikvisionVideoFull>()
.eq(XzHikvisionVideoFull::getSerialNumber, entity.getSerialNumber())
.eq(XzHikvisionVideoFull::getDate, entity.getDate())
.eq(XzHikvisionVideoFull::getFrom, entity.getFrom())
);
if (count != 0) {
return;
}
xzHikvisionVideoFullMapper.insert(entity);
}
}
}
2024-04-02 18:26:22 +08:00
}
/**
* 定时获取视频质量诊断结果
*/
2024-05-21 20:43:59 +08:00
@SchedulerLock(name = "addVqdForHikvision", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60)
2024-04-02 18:26:22 +08:00
@Scheduled(cron = "0 0 0/1 * * ?")
2024-05-21 20:43:59 +08:00
public void addVqdForHikvision() throws Exception {
2024-04-02 18:26:22 +08:00
log.info("定时获取视频质量诊断结果任务开始");
2024-05-21 20:43:59 +08:00
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>().eq(Project::getSyncHikvision, 1));
for (Project project : projects) {
List<EntityMap> videoItems = videoItemMapper.selectProjectVideoList(new MapBuilder<String, Object>().put("projectSn", project.getProjectSn()).build());
if (CollUtil.isEmpty(videoItems)) {
return;
}
JSONObject jo = new JSONObject();
jo.put("pageNo", 1);
jo.put("pageSize", 1000);
jo.put("indexCodes", videoItems.stream().map(entityMap -> entityMap.get("serialNumber")).filter(Objects::nonNull).collect(Collectors.toList()));
JSONObject rsJo = hikvisionVideoCall.getVqdForHikvisionForHttp(project, jo);
if (HikvisionUtil.isSuccess(rsJo)) {
JSONObject dataJo = HikvisionUtil.getJSONObjectData(rsJo);
JSONArray listJa = dataJo.getJSONArray("list");
for (int i = 0; i < listJa.size(); i++) {
JSONObject oneJo = listJa.getJSONObject(i);
ProjectVideoHkVqd entity = new ProjectVideoHkVqd();
BeanUtil.copyProperties(oneJo, entity);
entity.setProjectSn(project.getProjectSn());
entity.setSerialNumber(oneJo.getString("indexCode"));
projectVideoHkVqdMapper.insert(entity);
}
}
2024-04-02 18:26:22 +08:00
}
}
2024-05-21 20:43:59 +08:00
/**
* 3分钟保存一次监控在线状态
*/
@SchedulerLock(name = "saveDeviceState", lockAtMostFor = 1000 * 60, lockAtLeastFor = 1000 * 60)
@Scheduled(cron = "0 */3 * * * ?")
public void saveDeviceState() throws Exception {
log.info("3分钟保存一次监控在线状态");
List<Project> projects = projectMapper.selectList(new LambdaQueryWrapper<Project>().eq(Project::getSyncHikvision, 1));
for (Project project : projects) {
List<EntityMap> videoItems = videoItemMapper.selectProjectVideoList(new MapBuilder<String, Object>().put("projectSn", project.getProjectSn()).build());
if (CollUtil.isEmpty(videoItems)) {
return;
}
JSONObject jo = new JSONObject();
jo.put("pageNo", 1);
jo.put("pageSize", 1000);
jo.put("indexCodes", videoItems.stream().map(entityMap -> entityMap.get("serialNumber")).filter(Objects::nonNull).collect(Collectors.toList()));
JSONObject rsJo = hikvisionVideoCall.getCameraOnlineForHttp(project, jo);
if (HikvisionUtil.isSuccess(rsJo)) {
JSONObject dataJo = HikvisionUtil.getJSONObjectData(rsJo);
JSONArray listJa = dataJo.getJSONArray("list");
for (int i = 0; i < listJa.size(); i++) {
JSONObject oneJo = listJa.getJSONObject(i);
XzHikvisionVideoOnline entity = new XzHikvisionVideoOnline();
entity.setProjectSn(project.getProjectSn());
entity.setSerialNumber(oneJo.getString("indexCode"));
entity.setDeviceState(Optional.ofNullable(oneJo.getInteger("online")).map(integer -> integer == 0 ? 1 : 2).orElse(3));
xzHikvisionVideoOnlineMapper.insert(entity);
}
}
}
}
2024-04-02 18:26:22 +08:00
}