package com.zhgd.xmgl.task; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zhgd.xmgl.async.AsyncEnvironment; import com.zhgd.xmgl.modules.project.entity.ProjectVideoConfig; import com.zhgd.xmgl.modules.project.mapper.ProjectVideoConfigMapper; import com.zhgd.xmgl.modules.video.entity.VideoItem; import com.zhgd.xmgl.modules.video.mapper.VideoItemMapper; import com.zhgd.xmgl.util.HikVideoUtil; import com.zhgd.xmgl.util.YsVideoUtil; import lombok.extern.log4j.Log4j; import net.javacrumbs.shedlock.core.SchedulerLock; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @program: wisdomSite * @description: 视频定时任务 * @author: Mr.Peng * @create: 2021-11-11 18:48 **/ @Log4j @Component public class VideoTask { @Autowired private ProjectVideoConfigMapper projectVideoConfigMapper; @Autowired private VideoItemMapper videoItemMapper; @Autowired private AsyncEnvironment asyncEnvironment; @Value("${video-analysis-url}") private String videoAnalysisUrl; @Value("${serverUrl}") private String serverUrl; @SchedulerLock(name = "updateVideoState", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5) @Scheduled(cron = "0 0 */1 * * ?") // @Scheduled(cron = "*/50 * * * * ?") public void updateVideoState() { try { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(ProjectVideoConfig::getIsEnable, 1); List list = projectVideoConfigMapper.selectList(queryWrapper); if (list != null && list.size() > 0) { for (ProjectVideoConfig videoConfig : list) { updateProjectVideo(videoConfig); } } } catch (Exception e) { //e.printStackTrace(); log.info(e.getMessage()); } } private void updateProjectVideo(ProjectVideoConfig videoConfig) { try { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(VideoItem::getVideoId, videoConfig.getId()); List list = videoItemMapper.selectList(queryWrapper); if (list != null && list.size() > 0) { if (videoConfig.getVideoType() == 1) { String accessToken = YsVideoUtil.getToken(videoConfig.getAppId(), videoConfig.getAppSecret()); for (VideoItem videoItem : list) { Integer state = YsVideoUtil.getVideoStatus(videoConfig.getAppId(), videoConfig.getAppSecret(), videoItem.getSerialNumber(), accessToken); videoItem.setDeviceState(state); videoItemMapper.updateById(videoItem); } } else if (videoConfig.getVideoType() == 2) { } else if (videoConfig.getVideoType() == 3) { if (StringUtils.isNotEmpty(videoConfig.getAccount()) && StringUtils.isNotEmpty(videoConfig.getPassword()) && StringUtils.isNotEmpty(videoConfig.getAppId()) && StringUtils.isNotEmpty(videoConfig.getAppSecret())) { for (VideoItem videoItem : list) { if (StringUtils.isNotEmpty(videoItem.getSerialNumber())) { Boolean online = HikVideoUtil.callPostApiOnlineStatus(videoItem.getSerialNumber(), videoConfig.getAccount(), videoConfig.getPassword(), videoConfig.getAppId(), videoConfig.getAppSecret()); if (online != null) { if (online) { videoItem.setDeviceState(1); } else { videoItem.setDeviceState(2); } videoItemMapper.updateById(videoItem); } //sendVideoData(videoItem,videoConfig); } } } } else { QueryWrapper qu = new QueryWrapper<>(); qu.lambda().eq(VideoItem::getVideoId, videoConfig.getId()); VideoItem item = new VideoItem(); item.setDeviceState(2); item.setVideoId(videoConfig.getId()); videoItemMapper.update(item, qu); } } } catch (Exception e) { e.printStackTrace(); } } private void sendVideoData(VideoItem videoItem, ProjectVideoConfig videoConfig) { List> list = new ArrayList<>(); Map video = new HashMap<>(); video.put("appId", videoConfig.getAppId()); video.put("appSecret", videoConfig.getAppSecret()); video.put("ip", videoConfig.getAccount()); video.put("port", videoConfig.getPassword()); video.put("serialNumber", videoItem.getSerialNumber()); list.add(video); List alarmIdList = new ArrayList<>(); alarmIdList.add(videoItem.getItemId()); Map object = new HashMap<>(); object.put("projectSn", videoConfig.getProjectSn()); object.put("videoList", list); object.put("dataId", alarmIdList); object.put("resultUrl", serverUrl + "/xmgl/api/saveVideoAnalysisResult"); object.put("type", 2); log.info(JSONUtil.toJsonStr(object)); if (StringUtils.isNotEmpty(videoAnalysisUrl)) { asyncEnvironment.sendVideoAnalysisData(videoAnalysisUrl, object); } } /*public static void main(String[] args) { String Ip="182.101.141.23"; String port="18443"; String appkey="24017757"; String appSecret="VJz0FbzmE6drPQ7egsBi"; String url= HikVideoUtil.callPostApiGetPreviewURL("34ad8813a79d4cbaaebdbeaddaa53598", "rtmp",null,Ip, port,appkey, appSecret); log.info(url); *//*boolean status= VideoUtils.getVideoOnlineSate(url); log.info(status);*//* }*/ }