package com.ruoyi.utils; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.activeMQ.vo.CameraCon; import com.ruoyi.activeMQ.vo.CameraControlVO; import com.ruoyi.activeMQ.vo.CameraRuleVO; import com.ruoyi.activeMQ.vo.RuleAreaVO; import com.ruoyi.aibrain.domain.AiCamera; import com.ruoyi.aibrain.domain.AiCameraRule; import com.ruoyi.aibrain.domain.Point; import com.ruoyi.aibrain.service.IAiCameraService; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.Threads; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.framework.config.ActiveManager; import org.apache.activemq.command.ActiveMQQueue; import org.apache.activemq.command.ActiveMQTopic; import org.apache.commons.lang3.ObjectUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cglib.beans.BeanCopier; import javax.jms.Destination; import java.util.ArrayList; import java.util.Date; import java.util.List; public class CameraUtils { private static final Logger logger = LoggerFactory.getLogger(Threads.class); private static BeanCopier copier = BeanCopier.create(AiCamera.class, CameraControlVO.class, false); @Autowired private static ActiveManager activeManager; @Autowired private static IAiCameraService aiCameraService; @Autowired private static RedisCache redisCache; /** * 启动AI识别设备 */ public static void startCamera() { startCameraAll("1"); // activeManager = SpringUtils.getBean(ActiveManager.class); // aiCameraService = SpringUtils.getBean(IAiCameraService.class); // // Destination destination = new ActiveMQQueue("cameraControlQueue");//P2P模式单个消费者 // List cameraList = aiCameraService.queryCameraToStart(); // for (AiCamera camera : cameraList){ // CameraControlVO cameraVO = new CameraControlVO(); // copier.copy(camera,cameraVO,null); // cameraVO.setTime(new Date().getTime()); // // List rules = new ArrayList<>(); // for (AiCameraRule cameraRule : camera.getRules()){ // CameraRuleVO ruleVO = new CameraRuleVO(); // ruleVO.setrecordDuration(cameraRule.getrecordDuration()); // ruleVO.setisRecord(cameraRule.getisRecord()); // ruleVO.setCameraId(cameraRule.getCameraId()); // ruleVO.setPeopleNumber(cameraRule.getPeopleNumber()); // ruleVO.setRuleId(cameraRule.getRuleId()); // ruleVO.setRuleName(cameraRule.getRuleName()); // ruleVO.setRuleArea(cameraRule.getAreas()); // rules.add(ruleVO); // } // cameraVO.setRules(rules); // camera.setRunStatus("1"); // aiCameraService.updateAiCameraStatus(camera); // //传入队列以及值 // activeManager.send(destination, JSON.toJSONString(cameraVO)); // logger.info("cameraControlQueue队列:"+JSON.toJSONString(cameraVO)); // } } /** * 启动AI识别设备 */ public static void startCamera(long id,String runStatus) { activeManager = SpringUtils.getBean(ActiveManager.class); aiCameraService = SpringUtils.getBean(IAiCameraService.class); redisCache = SpringUtils.getBean(RedisCache.class); Destination destination = new ActiveMQQueue("cameraControlQueue");//P2P模式单个消费者 AiCamera camera = aiCameraService.selectAiCameraById(id); CameraCon cameraCon=new CameraCon(); cameraCon.setState(Integer.valueOf(runStatus)); List cameraControlVOS=new ArrayList<>(); CameraControlVO cameraVO = new CameraControlVO(); cameraVO.setId(String.valueOf(camera.getId())); cameraVO.setRtspUrl(camera.getRtspUrl()); cameraVO.setIp(camera.getCameraIp()); cameraVO.setName(camera.getName()); cameraVO.setRemp_h(camera.getRempH()); cameraVO.setRemp_w(camera.getRempW()); if(ObjectUtils.isNotEmpty(camera.getLeatherWidth())){ cameraVO.setBeltWidth(String.valueOf(camera.getLeatherWidth()));//皮带宽度 } if(ObjectUtils.isNotEmpty(camera.getToRtmp())){ cameraVO.setToRtmp(camera.getToRtmp()); } List rules = new ArrayList<>(); for (AiCameraRule cameraRule : camera.getRules()){ CameraRuleVO ruleVO = new CameraRuleVO(); ruleVO.setId(String.valueOf(cameraRule.getRuleId())); if(ObjectUtils.isNotEmpty(cameraRule.getSecond())){ ruleVO.setDelay(cameraRule.getSecond());//延时时间数 } if(ObjectUtils.isNotEmpty(cameraRule.getThreshold())){ ruleVO.setThreshold(cameraRule.getThreshold());//阈值 } if(cameraRule.getIsRecord().equals("1")){ ruleVO.setIsRecord(cameraRule.getIsRecord());//是否录像 ruleVO.setRecordDuration(cameraRule.getRecordDuration());//录像时长 }else{ ruleVO.setIsRecord(cameraRule.getIsRecord());//是否录像 } RuleAreaVO ruleAreaVO=new RuleAreaVO(); ruleAreaVO.setB(cameraRule.getB()); ruleAreaVO.setG(cameraRule.getG()); ruleAreaVO.setR(cameraRule.getR()); if(ObjectUtils.isNotEmpty(cameraRule.getPic_w())){ ruleAreaVO.setPic_w(cameraRule.getPic_w()); } if(ObjectUtils.isNotEmpty(cameraRule.getPic_h())){ ruleAreaVO.setPic_h(cameraRule.getPic_h()); } if(ObjectUtils.isNotEmpty(cameraRule.getRuleArea())){ List objects = JSON.parseArray(cameraRule.getRuleArea(),Point.class); ruleAreaVO.setPoints(objects); } ruleVO.setRects(ruleAreaVO); rules.add(ruleVO); } cameraVO.setModels(rules); cameraControlVOS.add(cameraVO); cameraCon.setCameras(cameraControlVOS); //更新摄像头启动状态 camera.setStatus(runStatus); aiCameraService.updateAiCameraStatus(camera); //传入队列以及值 activeManager.send(destination, JSON.toJSONString(cameraCon).replace("\\", "")); logger.info("cameraControlQueue队列:"+JSON.toJSONString(cameraCon)); } /** * 批量启动设备 */ public static void startCameraAll(String runStatus) { activeManager = SpringUtils.getBean(ActiveManager.class); aiCameraService = SpringUtils.getBean(IAiCameraService.class); redisCache = SpringUtils.getBean(RedisCache.class); Destination destination = new ActiveMQQueue("cameraControlQueue");//P2P模式单个消费者 List list = aiCameraService.selectAllCamera(); redisCache.setCacheObject("AI::AiCameraList",list); CameraCon cameraCon=new CameraCon(); List cameraControlVOS=new ArrayList<>(); for (AiCamera camera : list) { redisCache.setCacheObject("AI::AiCameraObj"+camera.getCameraNum(),camera); cameraCon.setState(Integer.valueOf(runStatus)); CameraControlVO cameraVO = new CameraControlVO(); cameraVO.setId(String.valueOf(camera.getId())); cameraVO.setRtspUrl(camera.getRtspUrl()); cameraVO.setIp(camera.getCameraIp()); cameraVO.setName(camera.getName()); cameraVO.setRemp_h(camera.getRempH()); cameraVO.setRemp_w(camera.getRempW()); if(ObjectUtils.isNotEmpty(camera.getLeatherWidth())){ cameraVO.setBeltWidth(String.valueOf(camera.getLeatherWidth()));//皮带宽度 } if(ObjectUtils.isNotEmpty(camera.getToRtmp())){ cameraVO.setToRtmp(camera.getToRtmp()); } List rules = new ArrayList<>(); for (AiCameraRule cameraRule : camera.getRules()){ CameraRuleVO ruleVO = new CameraRuleVO(); ruleVO.setId(String.valueOf(cameraRule.getRuleId())); if(ObjectUtils.isNotEmpty(cameraRule.getSecond())){ ruleVO.setDelay(cameraRule.getSecond());//延时时间数 } if(ObjectUtils.isNotEmpty(cameraRule.getThreshold())){ ruleVO.setThreshold(cameraRule.getThreshold());//阈值 } RuleAreaVO ruleAreaVO=new RuleAreaVO(); ruleAreaVO.setB(cameraRule.getB()); ruleAreaVO.setG(cameraRule.getG()); ruleAreaVO.setR(cameraRule.getR()); if(ObjectUtils.isNotEmpty(cameraRule.getPic_w())){ ruleAreaVO.setPic_w(cameraRule.getPic_w()); } if(ObjectUtils.isNotEmpty(cameraRule.getPic_h())){ ruleAreaVO.setPic_h(cameraRule.getPic_h()); } if(ObjectUtils.isNotEmpty(cameraRule.getRuleArea())){ List objects = JSON.parseArray(cameraRule.getRuleArea(),Point.class); ruleAreaVO.setPoints(objects); } ruleVO.setRects(ruleAreaVO); rules.add(ruleVO); } cameraVO.setModels(rules); cameraControlVOS.add(cameraVO); cameraCon.setCameras(cameraControlVOS); //更新摄像头启动状态 camera.setStatus(runStatus); aiCameraService.updateAiCameraStatus(camera); } //传入队列以及值 activeManager.send(destination, JSON.toJSONString(cameraCon).replace("\\", "")); logger.info("cameraControlQueue队列:"+JSON.toJSONString(cameraCon)); } }