diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/EventSmallTypeEnum.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/EventSmallTypeEnum.java index ee4720b0..8e794cf3 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/EventSmallTypeEnum.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/domain/enums/EventSmallTypeEnum.java @@ -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, "用户登录异常"), diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/RocketMqConstants.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/RocketMqConstants.java index 1cfafe7a..d4f0306d 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/RocketMqConstants.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/RocketMqConstants.java @@ -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"; } diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/consumer/HighDensityConsumer.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/consumer/HighDensityConsumer.java new file mode 100644 index 00000000..ea75098f --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/consumer/HighDensityConsumer.java @@ -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 { + + 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); + } + + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/consumer/ParkingDelayConsumer.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/consumer/ParkingDelayConsumer.java new file mode 100644 index 00000000..2d56261d --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/consumer/ParkingDelayConsumer.java @@ -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 { + + 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); + } + + } +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/domain/HighDensity.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/domain/HighDensity.java new file mode 100644 index 00000000..14a5f119 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/domain/HighDensity.java @@ -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; + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/domain/ParkingReport.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/domain/ParkingReport.java new file mode 100644 index 00000000..3930c7c3 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/rocketmq/domain/ParkingReport.java @@ -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; + +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/IEventAlarmReportService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/IEventAlarmReportService.java new file mode 100644 index 00000000..d203fe02 --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/IEventAlarmReportService.java @@ -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); +} diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventsService.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventsService.java index cda3143d..ec33a236 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventsService.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/ISisAlarmEventsService.java @@ -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 imgs); /** * 任务分配操作 diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/EventAlarmReportServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/EventAlarmReportServiceImpl.java new file mode 100644 index 00000000..e3b78a8a --- /dev/null +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/EventAlarmReportServiceImpl.java @@ -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)); + } + + +} + diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java index 221113ae..109f0c20 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisAlarmEventsServiceImpl.java @@ -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 imgs) { // 校验设备信息 SisDeviceManage sisDeviceManage = deviceManageService.queryByDeviceIp(deviceIp); if (sisDeviceManage == null) { @@ -223,11 +223,8 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService { // 写入附件表 List 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()); diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java index 6cf5e377..5fe6f2a5 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/ZeroSensationPassageServiceImpl.java @@ -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 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 userGroupVos = remoteAttendanceService.queryAttendByCurrDateAndDeviceIp(new Date(), deviceIp);