添加人员聚集报警,非法停车报警
This commit is contained in:
@@ -37,6 +37,7 @@ public enum EventSmallTypeEnum {
|
||||
EQP_REPORT_SBSB(1025, "报警设备上报"),
|
||||
BLACK_PERSON(1026, "黑名单人员"),
|
||||
AUTHORIZATION_EXPIRED(1027, "门禁授权已过期"),
|
||||
ILLEGAL_PARKING(1028,"非法停车"),
|
||||
/* -----------------------系统报警相关-------------------------------------*/
|
||||
SYS_REPORT_WLGZ(2001, "网络连接故障"),
|
||||
SYS_REPORT_DLYC(2002, "用户登录异常"),
|
||||
|
@@ -20,5 +20,8 @@ public interface RocketMqConstants {
|
||||
String FACECAPTURE = "FACE_CAPTURE_REPORT";
|
||||
// 人脸比对
|
||||
String FACECOMPARE = "FACE_COMPARE_REPORT";
|
||||
|
||||
// 人员聚集上报
|
||||
String HIGH_DENSITY = "HIGH_DENSITY_REPORT";
|
||||
// 停车上报
|
||||
String PARKING_ALARM = "PARKING_ALARM_REPORT";
|
||||
}
|
||||
|
@@ -0,0 +1,44 @@
|
||||
package org.dromara.sis.rocketmq.consumer;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.rocketmq.common.message.MessageExt;
|
||||
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
||||
import org.apache.rocketmq.spring.core.RocketMQListener;
|
||||
import org.dromara.sis.rocketmq.RocketMqConstants;
|
||||
import org.dromara.sis.rocketmq.domain.FaceCapture;
|
||||
import org.dromara.sis.rocketmq.domain.HighDensity;
|
||||
import org.dromara.sis.service.IZeroSensationPassageService;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 人员聚集消费者
|
||||
*
|
||||
* @author lxj
|
||||
*/
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
@RocketMQMessageListener(
|
||||
topic = RocketMqConstants.TOPIC,
|
||||
consumerGroup = RocketMqConstants.CAPTUREGROUP,
|
||||
selectorExpression = RocketMqConstants.HIGH_DENSITY
|
||||
)
|
||||
public class HighDensityConsumer implements RocketMQListener<MessageExt> {
|
||||
|
||||
private final IZeroSensationPassageService zeroSensationPassageService;
|
||||
|
||||
@Override
|
||||
public void onMessage(MessageExt ext) {
|
||||
log.info("消费人员聚集数据,数据长度={}", ext.getBody().length);
|
||||
try {
|
||||
HighDensity f = JSONObject.parseObject(ext.getBody(), HighDensity.class);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("消费人脸抓拍数据处理失败,", e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@@ -0,0 +1,43 @@
|
||||
package org.dromara.sis.rocketmq.consumer;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.rocketmq.common.message.MessageExt;
|
||||
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
||||
import org.apache.rocketmq.spring.core.RocketMQListener;
|
||||
import org.dromara.sis.rocketmq.RocketMqConstants;
|
||||
import org.dromara.sis.rocketmq.domain.ParkingReport;
|
||||
import org.dromara.sis.service.IZeroSensationPassageService;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 人员聚集消费者
|
||||
*
|
||||
* @author lxj
|
||||
*/
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
@RocketMQMessageListener(
|
||||
topic = RocketMqConstants.TOPIC,
|
||||
consumerGroup = RocketMqConstants.CAPTUREGROUP,
|
||||
selectorExpression = RocketMqConstants.HIGH_DENSITY
|
||||
)
|
||||
public class ParkingDelayConsumer implements RocketMQListener<MessageExt> {
|
||||
|
||||
private final IZeroSensationPassageService zeroSensationPassageService;
|
||||
|
||||
@Override
|
||||
public void onMessage(MessageExt ext) {
|
||||
log.info("消费停车检测数据,数据长度={}", ext.getBody().length);
|
||||
try {
|
||||
ParkingReport report = JSONObject.parseObject(ext.getBody(), ParkingReport.class);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("消费人脸抓拍数据处理失败,", e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@@ -0,0 +1,38 @@
|
||||
package org.dromara.sis.rocketmq.domain;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 人员聚集报警
|
||||
*
|
||||
* @author lxj
|
||||
*/
|
||||
@Data
|
||||
public class HighDensity {
|
||||
|
||||
/**
|
||||
* 报警图片
|
||||
*/
|
||||
private byte[] img;
|
||||
|
||||
/**
|
||||
* 设备ip
|
||||
*/
|
||||
private String deviceIp;
|
||||
|
||||
/**
|
||||
* 人员密度0.1-1.0
|
||||
*/
|
||||
private Double density;
|
||||
|
||||
/**
|
||||
* 灵敏度参数,取值范围:[1,5]
|
||||
*/
|
||||
private Byte sensitivity;
|
||||
|
||||
/**
|
||||
* 触发人员聚集参数报警阈值,20~360s
|
||||
*/
|
||||
private Integer wDuration;
|
||||
|
||||
}
|
@@ -0,0 +1,28 @@
|
||||
package org.dromara.sis.rocketmq.domain;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 区域停车报警
|
||||
* @author lxj
|
||||
*/
|
||||
@Data
|
||||
public class ParkingReport {
|
||||
|
||||
/**
|
||||
* 报警图片
|
||||
*/
|
||||
private byte[] img;
|
||||
|
||||
/**
|
||||
* 设备ip
|
||||
*/
|
||||
private String deviceIp;
|
||||
|
||||
/**
|
||||
* 触发人员聚集参数报警阈值,20~360s
|
||||
*/
|
||||
private Integer pDuration;
|
||||
|
||||
}
|
@@ -0,0 +1,26 @@
|
||||
package org.dromara.sis.service;
|
||||
|
||||
import org.dromara.sis.rocketmq.domain.HighDensity;
|
||||
import org.dromara.sis.rocketmq.domain.ParkingReport;
|
||||
|
||||
/**
|
||||
* 事件告警上报处理服务
|
||||
*
|
||||
* @author lxj
|
||||
*/
|
||||
public interface IEventAlarmReportService {
|
||||
|
||||
/**
|
||||
* 处理停车滞留上报
|
||||
*
|
||||
* @param report 上报信息
|
||||
*/
|
||||
void handleParking(ParkingReport report);
|
||||
|
||||
/**
|
||||
* 处理人员聚集事件上报
|
||||
*
|
||||
* @param density 上报信息
|
||||
*/
|
||||
void handleHighDensity(HighDensity density);
|
||||
}
|
@@ -80,7 +80,7 @@ public interface ISisAlarmEventsService {
|
||||
/**
|
||||
* 异步生成告警记录
|
||||
*/
|
||||
SisAlarmEvents createAlarmRecord(String deviceIp, Integer level, EventSmallTypeEnum type, String msg, byte[] smallImg, byte[] bigImg);
|
||||
SisAlarmEvents createAlarmRecord(String deviceIp, Integer level, EventSmallTypeEnum type, String msg, List<byte[]> imgs);
|
||||
|
||||
/**
|
||||
* 任务分配操作
|
||||
|
@@ -0,0 +1,51 @@
|
||||
package org.dromara.sis.service.impl;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.sis.domain.SisAlarmEvents;
|
||||
import org.dromara.sis.domain.enums.EventSmallTypeEnum;
|
||||
import org.dromara.sis.rocketmq.domain.HighDensity;
|
||||
import org.dromara.sis.rocketmq.domain.ParkingReport;
|
||||
import org.dromara.sis.service.IEventAlarmReportService;
|
||||
import org.dromara.sis.service.ISisAlarmEventsService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 处理设备告警上报服务
|
||||
*
|
||||
* @author lxj
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class EventAlarmReportServiceImpl implements IEventAlarmReportService {
|
||||
|
||||
private final ISisAlarmEventsService alarmEventsService;
|
||||
|
||||
@Override
|
||||
public void handleParking(ParkingReport report) {
|
||||
handleAlarm(report.getDeviceIp(), report.getImg(), 2, EventSmallTypeEnum.ILLEGAL_PARKING, "非法停车报警");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleHighDensity(HighDensity density) {
|
||||
handleAlarm(density.getDeviceIp(), density.getImg(), 2, EventSmallTypeEnum.SMART_REPORT_RYJJ, "人员聚集报警");
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理告警信息
|
||||
*
|
||||
* @param deviceIp 设备ip
|
||||
* @param img 图片
|
||||
* @param smallType 事件类型
|
||||
*/
|
||||
private void handleAlarm(String deviceIp, byte[] img, Integer level, EventSmallTypeEnum smallType, String desc) {
|
||||
// 生成告警记录
|
||||
SisAlarmEvents alarmRecord = alarmEventsService.createAlarmRecord(deviceIp, level, smallType, desc, List.of(img));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@@ -180,7 +180,7 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService {
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public SisAlarmEvents createAlarmRecord(String deviceIp, Integer level, EventSmallTypeEnum type, String msg, byte[] smallImg, byte[] bigImg) {
|
||||
public SisAlarmEvents createAlarmRecord(String deviceIp, Integer level, EventSmallTypeEnum type, String msg, List<byte[]> imgs) {
|
||||
// 校验设备信息
|
||||
SisDeviceManage sisDeviceManage = deviceManageService.queryByDeviceIp(deviceIp);
|
||||
if (sisDeviceManage == null) {
|
||||
@@ -223,11 +223,8 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService {
|
||||
|
||||
// 写入附件表
|
||||
List<SisAlarmEventAttachments> ls = new ArrayList<>();
|
||||
if (smallImg != null && smallImg.length > 0) {
|
||||
ls.add(createEventAttachments(smallImg, alarmEvents, sisDeviceManage));
|
||||
}
|
||||
if (bigImg != null && bigImg.length > 0) {
|
||||
ls.add(createEventAttachments(bigImg, alarmEvents, sisDeviceManage));
|
||||
for (byte[] img : imgs) {
|
||||
ls.add(createEventAttachments(img, alarmEvents, sisDeviceManage));
|
||||
}
|
||||
Boolean flag = alarmEventAttachmentsService.batchInsert(ls);
|
||||
log.info("写入告警事件附件表完成, reslut={}, size={}", flag, ls.size());
|
||||
|
@@ -146,8 +146,11 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer
|
||||
* @param smallType 事件类型
|
||||
*/
|
||||
private void handleAlarm(String deviceIp, byte[] smallImg, byte[] bigImg, Integer level, EventSmallTypeEnum smallType, String desc) {
|
||||
List<byte[]> ls = new ArrayList<>(2);
|
||||
ls.add(smallImg);
|
||||
ls.add(bigImg);
|
||||
// 生成告警记录
|
||||
SisAlarmEvents alarmRecord = alarmEventsService.createAlarmRecord(deviceIp, level, smallType, desc, smallImg, bigImg);
|
||||
SisAlarmEvents alarmRecord = alarmEventsService.createAlarmRecord(deviceIp, level, smallType, desc, ls);
|
||||
SaTokenContextMockUtil.setMockContext(() -> {
|
||||
// 如果当前设备区域存在排班人员,那么惊醒自动指派操作
|
||||
List<RemoteAttendanceUserGroupVo> userGroupVos = remoteAttendanceService.queryAttendByCurrDateAndDeviceIp(new Date(), deviceIp);
|
||||
|
Reference in New Issue
Block a user