package com.ld.igds.timer;
|
|
import com.bstek.bdf2.core.model.DefaultCompany;
|
import com.ld.igds.camera.ApiCameraManager;
|
import com.ld.igds.camera.CameraUtil;
|
import com.ld.igds.camera.data.ApiCameraResp;
|
import com.ld.igds.camera.data.ApiSnapReq;
|
import com.ld.igds.common.CoreCommonService;
|
import com.ld.igds.data.ConfigData;
|
import com.ld.igds.file.CoreFileService;
|
import com.ld.igds.models.SecCamera;
|
import com.ld.igds.models.SecSnapConf;
|
import com.ld.igds.models.SecSnapDepot;
|
import com.ld.igds.models.SnapSer;
|
import com.ld.igds.sec.service.CoreSecCameraService;
|
import com.ld.igds.sec.service.SecSnapService;
|
import com.ld.igds.sec.service.SecurityService;
|
import com.ld.igds.util.ContextUtil;
|
import com.ld.igds.util.DateUtil;
|
import com.ld.igds.view.manager.TempManager;
|
import com.ld.igds.view.service.SnapSerService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.time.DateUtils;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* 安防模块标定时器配置
|
*/
|
@Slf4j
|
@Component(ScheduledSec.BEAN_ID)
|
public class ScheduledSec {
|
|
public static final String BEAN_ID = "sec.scheduled";
|
|
@Resource
|
private ConfigData configData;
|
@Resource
|
private SecSnapService secSnapService;
|
@Resource
|
private CoreSecCameraService coreSecCameraService;
|
@Resource
|
private SnapSerService snapSerService;
|
@Resource
|
private CoreFileService fileService;
|
@Resource
|
private ApiCameraManager apiCameraManager;
|
|
/**
|
* 每间隔30分钟执行一次
|
*/
|
@Scheduled(cron = "0 0/30 * * * ?")
|
public void scheduled30() {
|
|
//执行抓拍判断
|
doExeSnap(new Date());
|
}
|
|
/**
|
* 定时执行抓拍
|
*/
|
private void doExeSnap(Date date) {
|
|
if (configData.getSnapTime() < 0) return;
|
|
//获取当前系统时间
|
int curHour = DateUtil.getHour(date);
|
if (curHour != configData.getSnapTime()) return;
|
|
log.info("===================系统执行定时仓内视频抓拍==================");
|
|
|
try {
|
|
List<SecSnapConf> list = secSnapService.listSnapConf(configData.getDefaultCompanyId(), null);
|
|
if (null == list || list.isEmpty()) return;
|
|
SecCamera secCamera;
|
Map<String, SnapSer> snapSerMap = new HashMap<>();
|
SnapSer snapSer;
|
for (SecSnapConf snapConf : list) {
|
|
if (null == snapConf.getDepotId()) continue;
|
|
secCamera = coreSecCameraService.getCameraById(snapConf.getCompanyId(), snapConf.getCameraId());
|
|
if (null == secCamera) continue;
|
|
snapSer = snapSerMap.get(snapConf.getDeptId());
|
if (null == snapSer) {
|
snapSer = snapSerService.getCacheByDeptId(snapConf.getDeptId());
|
snapSerMap.put(snapConf.getDeptId(), snapSer);
|
}
|
|
if (null == snapSer) {
|
log.error("------------抓拍为配置抓拍分机----------");
|
continue;
|
}
|
|
doExeSnapToData(secCamera, snapSer, snapConf);
|
|
Thread.sleep(500);
|
}
|
} catch (Exception e) {
|
log.error("----------抓拍后台出错---------{}", e);
|
}
|
}
|
|
private void doExeSnapToData(SecCamera secCamera, SnapSer snapSer, SecSnapConf snapConf) {
|
ApiSnapReq req = new ApiSnapReq();
|
req.setCompanyId(secCamera.getCompanyId());
|
req.setDeptId(secCamera.getDeptId());
|
req.setSn(secCamera.getSn());
|
req.setSnapType(secCamera.getSnapType());
|
req.setPlayType(secCamera.getPlayType());
|
req.setSerSn(snapSer.getSn());
|
req.setCameraName(secCamera.getName());
|
req.setBizId(null);
|
|
req.setMediaAddr(CameraUtil.updateMediaAddr(secCamera.getMediaAddr(), secCamera.getLoginId(),
|
secCamera.getPwd(), secCamera.getIpIn(), secCamera.getPortInC(), secCamera.getChanNum()));
|
|
String filePath = fileService.getSnapFilePath(new Date());
|
|
req.setFilePath(filePath);
|
|
//调整附件名称,避免出现中文
|
String fileName = snapConf.getDepotId() + "_" + ContextUtil.getTimeId(1000) + ".jpg";
|
req.setFileName(fileName);
|
|
//执行抓拍
|
ApiCameraResp resp = apiCameraManager.getApiCameraService(secCamera.getPlayType()).snapImg(req);
|
resp.setFileName(fileName);
|
|
//执行记录保存
|
secSnapService.addData(snapConf, fileName, resp.getCode());
|
}
|
}
|