增加事件自动指派操作
This commit is contained in:
@@ -2,6 +2,7 @@ package org.dromara.sis.service;
|
||||
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.sis.domain.SisAlarmEvents;
|
||||
import org.dromara.sis.domain.bo.SisAlarmEventsBo;
|
||||
import org.dromara.sis.domain.bo.alarm.AlarmAssignmentBo;
|
||||
import org.dromara.sis.domain.bo.alarm.AlarmCompleteBo;
|
||||
@@ -79,7 +80,7 @@ public interface ISisAlarmEventsService {
|
||||
/**
|
||||
* 异步生成告警记录
|
||||
*/
|
||||
void createAlarmRecord(String deviceIp, Integer level, EventSmallTypeEnum type, String msg, byte[] smallImg, byte[] bigImg);
|
||||
SisAlarmEvents createAlarmRecord(String deviceIp, Integer level, EventSmallTypeEnum type, String msg, byte[] smallImg, byte[] bigImg);
|
||||
|
||||
/**
|
||||
* 任务分配操作
|
||||
|
@@ -1,7 +1,5 @@
|
||||
package org.dromara.sis.service;
|
||||
|
||||
import cn.hutool.core.date.TimeInterval;
|
||||
|
||||
public interface IZeroSensationPassageService {
|
||||
|
||||
/**
|
||||
|
@@ -37,7 +37,6 @@ import org.dromara.sis.service.ISisAlarmEventProcessService;
|
||||
import org.dromara.sis.service.ISisAlarmEventsService;
|
||||
import org.dromara.sis.service.ISisDeviceManageService;
|
||||
import org.dromara.system.api.model.LoginUser;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -179,15 +178,14 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService {
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
|
||||
@Async
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createAlarmRecord(String deviceIp, Integer level, EventSmallTypeEnum type, String msg, byte[] smallImg, byte[] bigImg) {
|
||||
public SisAlarmEvents createAlarmRecord(String deviceIp, Integer level, EventSmallTypeEnum type, String msg, byte[] smallImg, byte[] bigImg) {
|
||||
// 校验设备信息
|
||||
SisDeviceManage sisDeviceManage = deviceManageService.queryByDeviceIp(deviceIp);
|
||||
if (sisDeviceManage == null) {
|
||||
log.error("设备信息不存在,放弃此条告警记录。");
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
// 生成时间信息
|
||||
Date now = new Date();
|
||||
@@ -223,7 +221,6 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService {
|
||||
alarmEventProcess.setReceiveTaskTag(0L);
|
||||
alarmEventProcess.setTenantId("");
|
||||
|
||||
|
||||
// 写入附件表
|
||||
List<SisAlarmEventAttachments> ls = new ArrayList<>();
|
||||
if (smallImg != null && smallImg.length > 0) {
|
||||
@@ -234,7 +231,7 @@ public class SisAlarmEventsServiceImpl implements ISisAlarmEventsService {
|
||||
}
|
||||
Boolean flag = alarmEventAttachmentsService.batchInsert(ls);
|
||||
log.info("写入告警事件附件表完成, reslut={}, size={}", flag, ls.size());
|
||||
|
||||
return alarmEvents;
|
||||
}
|
||||
|
||||
public SisAlarmEventAttachments createEventAttachments(byte[] img, SisAlarmEvents alarmEvents, SisDeviceManage sisDeviceManage) {
|
||||
|
@@ -9,8 +9,12 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.dromara.property.api.RemoteAttendanceService;
|
||||
import org.dromara.property.api.RemoteFloorService;
|
||||
import org.dromara.property.api.domain.vo.RemoteAttendanceUserGroupVo;
|
||||
import org.dromara.property.api.domain.vo.RemoteFloorVo;
|
||||
import org.dromara.sis.domain.SisAlarmEvents;
|
||||
import org.dromara.sis.domain.bo.alarm.AlarmAssignmentBo;
|
||||
import org.dromara.sis.domain.enums.ControlTypeEnum;
|
||||
import org.dromara.sis.domain.enums.EventSmallTypeEnum;
|
||||
import org.dromara.sis.domain.enums.RosterTypeEnum;
|
||||
@@ -22,12 +26,12 @@ import org.dromara.sis.sdk.huawei.HuaWeiBoxApi;
|
||||
import org.dromara.sis.sdk.huawei.domain.HWResult;
|
||||
import org.dromara.sis.sdk.smartDevices.utils.ElevatorControlTcpUtil;
|
||||
import org.dromara.sis.service.*;
|
||||
import org.dromara.system.api.RemoteUserService;
|
||||
import org.dromara.system.api.domain.vo.RemoteUserVo;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 无感通行业务服务实现
|
||||
@@ -54,8 +58,13 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer
|
||||
|
||||
@DubboReference
|
||||
private RemoteFloorService remoteFloorService;
|
||||
@DubboReference
|
||||
private RemoteAttendanceService remoteAttendanceService;
|
||||
@DubboReference
|
||||
private RemoteUserService remoteUserService;
|
||||
|
||||
@Override
|
||||
@Async
|
||||
public void pass(String deviceIp, byte[] smallImg, byte[] bigImg) {
|
||||
TimeInterval interval = new TimeInterval();
|
||||
// 抓拍小图
|
||||
@@ -64,7 +73,7 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer
|
||||
if (result.getCode() != 200) {
|
||||
log.info("华为盒子比对失败,msg={}", result.getMessage());
|
||||
// 产生告警数据 人脸比对失败,默认为
|
||||
alarmEventsService.createAlarmRecord(deviceIp, 2, EventSmallTypeEnum.SMART_REPORT_ZJCR, "人脸比对失败", smallImg, bigImg);
|
||||
handleAlarm(deviceIp, smallImg, bigImg, 2, EventSmallTypeEnum.SMART_REPORT_ZJCR, "人脸比对失败");
|
||||
return;
|
||||
}
|
||||
log.info("人脸比对执行完成,耗时:{}ms", interval.intervalMs());
|
||||
@@ -75,20 +84,20 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer
|
||||
if (authRecord == null) {
|
||||
log.info("人员[{}]没有授权记录,判定为陌生人", person);
|
||||
// 不是内部人员 产生紧急的告警信息
|
||||
alarmEventsService.createAlarmRecord(deviceIp, 2, EventSmallTypeEnum.SMART_REPORT_ZJCR, "陌生人员入内", smallImg, bigImg);
|
||||
handleAlarm(deviceIp, smallImg, bigImg, 2, EventSmallTypeEnum.SMART_REPORT_ZJCR, "陌生人员入内");
|
||||
return;
|
||||
} else {
|
||||
if (Objects.equals(authRecord.getRosterType(), RosterTypeEnum.BLACK_LIST.getCode())) {
|
||||
log.info("人员[{}]在黑名单中,暂不处理。", person);
|
||||
alarmEventsService.createAlarmRecord(deviceIp, 3, EventSmallTypeEnum.BLACK_PERSON, "黑名单人员入内", smallImg, bigImg);
|
||||
log.info("黑名单人员[{}]。", person);
|
||||
handleAlarm(deviceIp, smallImg, bigImg, 3, EventSmallTypeEnum.BLACK_PERSON, "黑名单人员");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Date now = new Date();
|
||||
if (DateUtil.compare(now, authRecord.getEndDate()) > 0) {
|
||||
alarmEventsService.createAlarmRecord(deviceIp, 1, EventSmallTypeEnum.AUTHORIZATION_EXPIRED, "人员授权信息已过期", smallImg, bigImg);
|
||||
log.info("当前人脸已过期,暂不处理。");
|
||||
handleAlarm(deviceIp, smallImg, bigImg, 1, EventSmallTypeEnum.AUTHORIZATION_EXPIRED, "人员授权信息已过期");
|
||||
log.info("当前人脸已过期。person={}", person);
|
||||
return;
|
||||
}
|
||||
// 获取当前设备的绑定设备信息
|
||||
@@ -128,6 +137,48 @@ public class ZeroSensationPassageServiceImpl implements IZeroSensationPassageSer
|
||||
log.info("权限下发执行完成,耗时:{}ms", interval.intervalMs());
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理告警信息
|
||||
*
|
||||
* @param deviceIp 设备ip
|
||||
* @param smallImg 人脸小图
|
||||
* @param bigImg 人脸大图
|
||||
* @param smallType 事件类型
|
||||
*/
|
||||
private void handleAlarm(String deviceIp, byte[] smallImg, byte[] bigImg, Integer level, EventSmallTypeEnum smallType, String desc) {
|
||||
// 生成告警记录
|
||||
SisAlarmEvents alarmRecord = alarmEventsService.createAlarmRecord(deviceIp, level, smallType, desc, smallImg, bigImg);
|
||||
SaTokenContextMockUtil.setMockContext(() -> {
|
||||
// 如果当前设备区域存在排班人员,那么惊醒自动指派操作
|
||||
List<RemoteAttendanceUserGroupVo> userGroupVos = remoteAttendanceService.queryAttendByCurrDateAndDeviceIp(new Date(), deviceIp);
|
||||
if (CollUtil.isEmpty(userGroupVos)) {
|
||||
return;
|
||||
}
|
||||
// 进行自动指派操作
|
||||
RemoteAttendanceUserGroupVo currHandlePerson = null;
|
||||
if (userGroupVos.size() == 1) {
|
||||
currHandlePerson = userGroupVos.get(0);
|
||||
} else {
|
||||
// 生成一个排班人员课表的随机数
|
||||
Random random = new Random();
|
||||
int randomIndex = random.nextInt(userGroupVos.size());
|
||||
currHandlePerson = userGroupVos.get(randomIndex);
|
||||
}
|
||||
// 获取当前指派人员的详细信息
|
||||
RemoteUserVo userInfo = remoteUserService.getUserInfoById(currHandlePerson.getEmployeeId());
|
||||
// 任务指派操作
|
||||
AlarmAssignmentBo bo = new AlarmAssignmentBo();
|
||||
bo.setAlarmId(alarmRecord.getId());
|
||||
bo.setSolveId(userInfo.getUserId());
|
||||
bo.setSolveName(userInfo.getUserName());
|
||||
bo.setSolvePhone(userInfo.getPhonenumber());
|
||||
bo.setSolveEmail(userInfo.getEmail());
|
||||
bo.setRemark("系统自动指派");
|
||||
alarmEventsService.taskAssignment(bo);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 电梯外部按键触发
|
||||
*
|
||||
|
Reference in New Issue
Block a user