Commit d3b9546e authored by 薄玉虎's avatar 薄玉虎

1.增加人员超员算法场景

2.增加现场离岗算法场景
3.优化时间间隔算法逻辑:每个摄像头会有自己的时间间隔
parent 5fb44595
......@@ -84,6 +84,7 @@ public class StreamingJob {
if (cameraPo == null){
return null;
}
List<AlgorithmPushResultBoxDto> result = algorithmPushDto.getResult();
warnPushBase.setAlarmDeviceName(cameraPo.getCameraName());
//获取摄像头归属
warnPushBase.setBelong(cameraPo.getBelong());
......@@ -95,7 +96,7 @@ public class StreamingJob {
}
warnPushBase.setGradeName("预警");
//获取摄像头名称
//获取算法场景类型
String algorithmName = getAlgorithmPoById(algorithmPoList, Long.valueOf(algorithmPushDto.getAlgorithmName()))
.getAlgorithmName();
warnPushBase.setGradeType(algorithmName);
......
......@@ -46,18 +46,19 @@ public class AlarmSecondFilterFunction implements AlgorithmBaseFilterFunction {
@Override
public boolean filter(AlgorithmPushDto algorithmPushDto) {
String algorithmType = algorithmPushDto.getAlgorithmType() + "_" + algorithmPushDto.getSort();
// String algorithmType = algorithmPushDto.getAlgorithmType() + "_" + algorithmPushDto.getSort();
String cameraName = algorithmPushDto.getCameraName();
Long alarmTimeStamp = cache.get(algorithmType);
Long alarmTimeStamp = cache.get(cameraName);
if (alarmTimeStamp == null) {
alarmTimeStamp = 0L;
cache.put(algorithmType, alarmTimeStamp);
cache.put(cameraName, alarmTimeStamp);
}
//判断是否超过报警间隔
if (alarmTimeStamp + alarmSecond <= algorithmPushDto.getTimeStamp()) {
cache.put(algorithmType, algorithmPushDto.getTimeStamp());
cache.put(cameraName, algorithmPushDto.getTimeStamp());
return true;
}
System.out.println(algorithmPushDto.getCameraName()+"--"+algorithmPushDto.getAlgorithmName()+"--"+"未超过报警时间间隔");
......
......@@ -29,7 +29,7 @@ public class AlgorithmTypeFlatMapFunction implements FlatMapFunction<AlgorithmPu
//2、将相同label的Key值分出多个预警
List<AlgorithmPushResultBoxDto> boxDtos = algorithmPushDto.getResult();
System.out.println(algorithmPushDto.toString());
// System.out.println(algorithmPushDto.toString());
List<String> types = boxDtos
.stream()
......
......@@ -72,11 +72,11 @@ public class PersonNumberFilterFunction implements AlgorithmBaseFilterFunction {
if (personNumber > personNumberMax) {
algorithmPushDto.setRemark("人员超岗,数量:" + personNumber);
algorithmPushDto.setRemark("人员超岗,人员数量:" + personNumber);
return true;
}
if (personNumber < personNumberMin) {
algorithmPushDto.setRemark("人员脱岗,数量:" + personNumber);
algorithmPushDto.setRemark("人员脱岗,人员数量:" + personNumber);
return true;
}
return false;
......
package com.censoft.flink.transform;
import cn.hutool.core.util.NumberUtil;
import com.censoft.flink.domain.AlgorithmPushDto;
import com.censoft.flink.domain.AlgorithmSceneBasePo;
import com.censoft.flink.domain.AlgorithmScenePiecePo;
import com.censoft.flink.domain.AlgorithmScenePieceVariablePo;
import com.censoft.flink.exception.ParameterTransformException;
import java.util.Optional;
/**
* @author 周昊
* @desc 人员脱岗超员算法筛选
*/
public class PersonNumberMaxFilterFunction implements AlgorithmBaseFilterFunction {
//personNumberMax 最多人员数量
private final Integer personNumberMax;
//最多人员数量 参数KEY
private static String personNumberMaxKey = "person_number_max";
public PersonNumberMaxFilterFunction(Integer personNumberMax) {
this.personNumberMax = personNumberMax;
}
public static PersonNumberMaxFilterFunction getFilterFunction(AlgorithmSceneBasePo algorithmSceneBasePo, AlgorithmScenePiecePo algorithmScenePiecePo) {
//参数准备
Optional<AlgorithmScenePieceVariablePo> maxVariablePo = algorithmScenePiecePo.getVariablePos()
.stream()
.filter(po -> personNumberMaxKey.equals(po.getVariableKey()))
.findFirst();
//判断参数是否存在,如果不存在抛出异常
if (!maxVariablePo.isPresent() ) {
throw new ParameterTransformException();
}
Integer personNumberMax = Integer.valueOf(maxVariablePo.get().getVariableValue());
return new PersonNumberMaxFilterFunction(personNumberMax);
}
@Override
public boolean filter(AlgorithmPushDto algorithmPushDto) {
//判断是否为0/1的情况
int personNumber;
if (algorithmPushDto.getResult().size() == 1 ){
String remark = algorithmPushDto.getResult().get(0).getRemark();
if(NumberUtil.isInteger(remark)){
personNumber = Integer.valueOf(remark);
}else {
personNumber = 0;
}
}else {
personNumber = algorithmPushDto.getResult().size();
}
if (personNumber >= personNumberMax) {
algorithmPushDto.setRemark("人员超岗,人员数量:" + personNumber);
return true;
}
return false;
}
}
package com.censoft.flink.transform;
import cn.hutool.core.util.NumberUtil;
import com.censoft.flink.domain.AlgorithmPushDto;
import com.censoft.flink.domain.AlgorithmSceneBasePo;
import com.censoft.flink.domain.AlgorithmScenePiecePo;
import com.censoft.flink.domain.AlgorithmScenePieceVariablePo;
import com.censoft.flink.exception.ParameterTransformException;
import java.util.Optional;
/**
* @author 周昊
* @desc 人员脱岗超员算法筛选
*/
public class PersonNumberMinFilterFunction implements AlgorithmBaseFilterFunction {
//personNumberMin 最少人员数量
private final Integer personNumberMin;
//最少人员数量 参数KEY
private static String personNumberMinKey = "person_number_min";
public PersonNumberMinFilterFunction( Integer personNumberMin) {
this.personNumberMin = personNumberMin;
}
public static PersonNumberMinFilterFunction getFilterFunction(AlgorithmSceneBasePo algorithmSceneBasePo, AlgorithmScenePiecePo algorithmScenePiecePo) {
//参数准备
Optional<AlgorithmScenePieceVariablePo> minVariablePo = algorithmScenePiecePo.getVariablePos()
.stream()
.filter(po -> personNumberMinKey.equals(po.getVariableKey()))
.findFirst();
//判断参数是否存在,如果不存在抛出异常
if ( !minVariablePo.isPresent()) {
throw new ParameterTransformException();
}
Integer personNumberMin = Integer.valueOf(minVariablePo.get().getVariableValue());
return new PersonNumberMinFilterFunction(personNumberMin);
}
@Override
public boolean filter(AlgorithmPushDto algorithmPushDto) {
//判断是否为0/1的情况
int personNumber;
if (algorithmPushDto.getResult().size() == 1 ){
String remark = algorithmPushDto.getResult().get(0).getRemark();
if(NumberUtil.isInteger(remark)){
personNumber = Integer.valueOf(remark);
}else {
personNumber = 0;
}
}else {
personNumber = algorithmPushDto.getResult().size();
}
if (personNumber <= personNumberMin) {
algorithmPushDto.setRemark("人员脱岗,人员数量:" + personNumber);
return true;
}
return false;
}
}
......@@ -9,7 +9,7 @@
<!-- 下面是配置一下数据源,其实后面我们就不这样配置了,都在.yml文件中配置-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/ry-vue?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=Hongkong&amp;allowMultiQueries=true"/>
<property name="url" value="jdbc:mysql://172.16.20.211:3306/ry-vue?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=Hongkong&amp;allowMultiQueries=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment