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 list = secSnapService.listSnapConf(configData.getDefaultCompanyId(), null); if (null == list || list.isEmpty()) return; SecCamera secCamera; Map 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()); } }