package com.ld.igds.timer;
|
|
import com.bstek.dorado.annotation.Expose;
|
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.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.SnapSer;
|
import com.ld.igds.sec.service.CoreSecCameraService;
|
import com.ld.igds.sec.service.SecSnapDepotService;
|
import com.ld.igds.util.ContextUtil;
|
import com.ld.igds.util.DateUtil;
|
import com.ld.igds.view.service.SnapSerService;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
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 SecSnapDepotService secSnapService;
|
@Resource
|
private CoreSecCameraService coreSecCameraService;
|
@Resource
|
private SnapSerService snapSerService;
|
@Resource
|
private CoreFileService fileService;
|
@Resource
|
private ApiCameraManager apiCameraManager;
|
|
/**
|
* 从6-18点开始执行
|
*/
|
@Scheduled(cron = "0 0 6,7,8,9,10,11,12,13,14,15,16,17,18 * * ? ")
|
public void scheduled30() {
|
|
Date exeDate = new Date();
|
|
// 执行抓拍判断
|
doExeSnap(exeDate,false);
|
}
|
|
|
/**
|
* sec.scheduled#exeByHand
|
* 手动执行
|
*/
|
@Expose
|
public void exeByHand(){
|
Date exeDate = new Date();
|
|
// 执行抓拍判断
|
doExeSnap(exeDate,true);
|
}
|
|
/**
|
* 定时执行抓拍
|
*/
|
private void doExeSnap(Date date,boolean isByHand) {
|
try {
|
// 获取所有配置抓拍摄像头
|
List<SecSnapConf> list = secSnapService.listSnapConf(
|
configData.getDefaultCompanyId(), null);
|
|
if (null == list || list.isEmpty()) {
|
return;
|
}
|
SecSnapConf exeConf = list.get(0);
|
|
// 获取抓拍时间
|
int exeHour1 = exeConf.getActHour1();
|
int exeHour2 = exeConf.getActHour2();
|
int exeHour3 = exeConf.getActHour3();
|
|
if (exeHour1 == 0 && exeHour1 == 0 && exeHour1 == 0)
|
return;
|
|
// 获取当前系统时间
|
int curHour = DateUtil.getHour(date);
|
|
if(isByHand){
|
exeHour1 = curHour;
|
}
|
|
if(curHour != exeHour1 && curHour != exeHour2 && curHour !=exeHour3){
|
return;
|
}
|
|
log.info("===================执行定时仓内视频抓拍==================");
|
|
SecCamera secCamera;
|
Map<String, SnapSer> snapSerMap = new HashMap<>();
|
SnapSer snapSer;
|
for (SecSnapConf snapConf : list) {
|
|
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());
|
}
|
}
|