添加人员聚集报警,非法停车报警
This commit is contained in:
@@ -37,6 +37,7 @@ public enum EventSmallTypeEnum {
|
|||||||
EQP_REPORT_SBSB(1025, "报警设备上报"),
|
EQP_REPORT_SBSB(1025, "报警设备上报"),
|
||||||
BLACK_PERSON(1026, "黑名单人员"),
|
BLACK_PERSON(1026, "黑名单人员"),
|
||||||
AUTHORIZATION_EXPIRED(1027, "门禁授权已过期"),
|
AUTHORIZATION_EXPIRED(1027, "门禁授权已过期"),
|
||||||
|
ILLEGAL_PARKING(1028,"非法停车"),
|
||||||
/* -----------------------系统报警相关-------------------------------------*/
|
/* -----------------------系统报警相关-------------------------------------*/
|
||||||
SYS_REPORT_WLGZ(2001, "网络连接故障"),
|
SYS_REPORT_WLGZ(2001, "网络连接故障"),
|
||||||
SYS_REPORT_DLYC(2002, "用户登录异常"),
|
SYS_REPORT_DLYC(2002, "用户登录异常"),
|
||||||
|
@@ -20,5 +20,8 @@ public interface RocketMqConstants {
|
|||||||
String FACECAPTURE = "FACE_CAPTURE_REPORT";
|
String FACECAPTURE = "FACE_CAPTURE_REPORT";
|
||||||
// 人脸比对
|
// 人脸比对
|
||||||
String FACECOMPARE = "FACE_COMPARE_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
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@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);
|
SisDeviceManage sisDeviceManage = deviceManageService.queryByDeviceIp(deviceIp);
|
||||||
if (sisDeviceManage == null) {
|
if (sisDeviceManage == null) {
|
||||||
@@ -223,11 +223,8 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService {
|
|||||||
|
|
||||||
// 写入附件表
|
// 写入附件表
|
||||||
List<SisAlarmEventAttachments> ls = new ArrayList<>();
|
List<SisAlarmEventAttachments> ls = new ArrayList<>();
|
||||||
if (smallImg != null && smallImg.length > 0) {
|
for (byte[] img : imgs) {
|
||||||
ls.add(createEventAttachments(smallImg, alarmEvents, sisDeviceManage));
|
ls.add(createEventAttachments(img, alarmEvents, sisDeviceManage));
|
||||||
}
|
|
||||||
if (bigImg != null && bigImg.length > 0) {
|
|
||||||
ls.add(createEventAttachments(bigImg, alarmEvents, sisDeviceManage));
|
|
||||||
}
|
}
|
||||||
Boolean flag = alarmEventAttachmentsService.batchInsert(ls);
|
Boolean flag = alarmEventAttachmentsService.batchInsert(ls);
|
||||||
log.info("写入告警事件附件表完成, reslut={}, size={}", flag, ls.size());
|
log.info("写入告警事件附件表完成, reslut={}, size={}", flag, ls.size());
|
||||||
|
@@ -146,8 +146,11 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer
|
|||||||
* @param smallType 事件类型
|
* @param smallType 事件类型
|
||||||
*/
|
*/
|
||||||
private void handleAlarm(String deviceIp, byte[] smallImg, byte[] bigImg, Integer level, EventSmallTypeEnum smallType, String desc) {
|
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(() -> {
|
SaTokenContextMockUtil.setMockContext(() -> {
|
||||||
// 如果当前设备区域存在排班人员,那么惊醒自动指派操作
|
// 如果当前设备区域存在排班人员,那么惊醒自动指派操作
|
||||||
List<RemoteAttendanceUserGroupVo> userGroupVos = remoteAttendanceService.queryAttendByCurrDateAndDeviceIp(new Date(), deviceIp);
|
List<RemoteAttendanceUserGroupVo> userGroupVos = remoteAttendanceService.queryAttendByCurrDateAndDeviceIp(new Date(), deviceIp);
|
||||||
|
Reference in New Issue
Block a user