|
@@ -65,6 +65,8 @@ public class MqttServiceImpl implements MqttService {
|
|
|
|
|
|
|
|
private final ITblWarnService iTblWarnService;
|
|
private final ITblWarnService iTblWarnService;
|
|
|
|
|
|
|
|
|
|
+ private final ITblRuleExecuteService iTblRuleExecuteService;
|
|
|
|
|
+
|
|
|
@Value("${mqtt.url}")
|
|
@Value("${mqtt.url}")
|
|
|
private String mqttUrl;
|
|
private String mqttUrl;
|
|
|
|
|
|
|
@@ -90,7 +92,7 @@ public class MqttServiceImpl implements MqttService {
|
|
|
websocketService.sendMessageAll(mqttStr);
|
|
websocketService.sendMessageAll(mqttStr);
|
|
|
MqttSensorDataBo dataBo = JSONUtil.toBean(mqttStr, MqttSensorDataBo.class);
|
|
MqttSensorDataBo dataBo = JSONUtil.toBean(mqttStr, MqttSensorDataBo.class);
|
|
|
TblSensor tblSensor = tblSensorMapper.selectById(dataBo.getSensorId());
|
|
TblSensor tblSensor = tblSensorMapper.selectById(dataBo.getSensorId());
|
|
|
- filterData(dataBo);
|
|
|
|
|
|
|
+ filterData(dataBo,tblSensor);
|
|
|
//数据保存到数据库
|
|
//数据保存到数据库
|
|
|
if(saveAndForward) {
|
|
if(saveAndForward) {
|
|
|
// 解析数据 异步线程执行
|
|
// 解析数据 异步线程执行
|
|
@@ -126,7 +128,7 @@ public class MqttServiceImpl implements MqttService {
|
|
|
}
|
|
}
|
|
|
//TODO 缓存获取对应设备的缓存数据
|
|
//TODO 缓存获取对应设备的缓存数据
|
|
|
TblSensor tblSensor = tblSensorMapper.selectById(dataBo.getSensorId());
|
|
TblSensor tblSensor = tblSensorMapper.selectById(dataBo.getSensorId());
|
|
|
- filterData(dataBo);
|
|
|
|
|
|
|
+ filterData(dataBo,tblSensor);
|
|
|
if (tblSensor != null) {
|
|
if (tblSensor != null) {
|
|
|
//保存到数据库
|
|
//保存到数据库
|
|
|
|
|
|
|
@@ -230,20 +232,20 @@ public class MqttServiceImpl implements MqttService {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public void filterData(MqttSensorDataBo dataBo){
|
|
|
|
|
|
|
+ public void filterData(MqttSensorDataBo dataBo,TblSensor tblSensor){
|
|
|
TblRuleBo tblRuleBo = new TblRuleBo();
|
|
TblRuleBo tblRuleBo = new TblRuleBo();
|
|
|
tblRuleBo.setSensorId(Long.valueOf(dataBo.getSensorId()));
|
|
tblRuleBo.setSensorId(Long.valueOf(dataBo.getSensorId()));
|
|
|
List<TblRuleVo> ruleVoList = iTblRuleService.queryList(tblRuleBo);
|
|
List<TblRuleVo> ruleVoList = iTblRuleService.queryList(tblRuleBo);
|
|
|
dataBo.getData().forEach(i->{
|
|
dataBo.getData().forEach(i->{
|
|
|
ruleVoList.forEach(ruleVo->{
|
|
ruleVoList.forEach(ruleVo->{
|
|
|
if(i.getName().equals(ruleVo.getTriggeringCondition())){
|
|
if(i.getName().equals(ruleVo.getTriggeringCondition())){
|
|
|
- ruleFilter(i,ruleVo.getId());
|
|
|
|
|
|
|
+ ruleFilter(i,ruleVo.getId(),tblSensor);
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public void ruleFilter(SensorDataBo bo,Long ruleId){
|
|
|
|
|
|
|
+ public void ruleFilter(SensorDataBo bo,Long ruleId,TblSensor tblSensor){
|
|
|
TblRuleFilterBo tblRuleFilterBo = new TblRuleFilterBo();
|
|
TblRuleFilterBo tblRuleFilterBo = new TblRuleFilterBo();
|
|
|
tblRuleFilterBo.setRuleId(Long.toString(ruleId));
|
|
tblRuleFilterBo.setRuleId(Long.toString(ruleId));
|
|
|
List<TblRuleFilterVo> tblRuleFilterVoList = iTblRuleFilterService.queryList(tblRuleFilterBo);
|
|
List<TblRuleFilterVo> tblRuleFilterVoList = iTblRuleFilterService.queryList(tblRuleFilterBo);
|
|
@@ -251,14 +253,10 @@ public class MqttServiceImpl implements MqttService {
|
|
|
String value = bo.getValue();
|
|
String value = bo.getValue();
|
|
|
if(StringUtils.isNotBlank(i.getFormula())){
|
|
if(StringUtils.isNotBlank(i.getFormula())){
|
|
|
try {
|
|
try {
|
|
|
-
|
|
|
|
|
Context context = Context.enter();
|
|
Context context = Context.enter();
|
|
|
Scriptable scope = context.initStandardObjects();
|
|
Scriptable scope = context.initStandardObjects();
|
|
|
String script = "function format(data) { return "+i.getFormula()+" ; } format("+value+");";
|
|
String script = "function format(data) { return "+i.getFormula()+" ; } format("+value+");";
|
|
|
Object result = context.evaluateString(scope, script, "<cmd>", 1, null);
|
|
Object result = context.evaluateString(scope, script, "<cmd>", 1, null);
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
value = (String) result;
|
|
value = (String) result;
|
|
|
System.out.println(value);
|
|
System.out.println(value);
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
@@ -269,15 +267,16 @@ public class MqttServiceImpl implements MqttService {
|
|
|
if(StringUtils.isNotBlank(i.getFilterAlgorithm())){
|
|
if(StringUtils.isNotBlank(i.getFilterAlgorithm())){
|
|
|
Context context = Context.enter();
|
|
Context context = Context.enter();
|
|
|
Scriptable scope = context.initStandardObjects();
|
|
Scriptable scope = context.initStandardObjects();
|
|
|
-
|
|
|
|
|
String script = "function isFilter(data,up,down) { return "+i.getFilterAlgorithm()+" ; }";
|
|
String script = "function isFilter(data,up,down) { return "+i.getFilterAlgorithm()+" ; }";
|
|
|
try {
|
|
try {
|
|
|
-
|
|
|
|
|
script+="isFilter("+ value+","+i.getUpperLimit()+","+i.getLowerLimit()+")";
|
|
script+="isFilter("+ value+","+i.getUpperLimit()+","+i.getLowerLimit()+")";
|
|
|
Object result = context.evaluateString(scope, script, "<cmd>", 1, null);
|
|
Object result = context.evaluateString(scope, script, "<cmd>", 1, null);
|
|
|
isFilter = (Boolean) result;
|
|
isFilter = (Boolean) result;
|
|
|
// isFilter = (Boolean) inv.invokeFunction("isFilter", value,i.getUpperLimit(),i.getLowerLimit() );
|
|
// isFilter = (Boolean) inv.invokeFunction("isFilter", value,i.getUpperLimit(),i.getLowerLimit() );
|
|
|
System.out.println(isFilter);
|
|
System.out.println(isFilter);
|
|
|
|
|
+ if(isFilter){
|
|
|
|
|
+ ruleExecute(bo,i.getId(),tblSensor);
|
|
|
|
|
+ }
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
System.out.println("表达式runtime错误:" + e.getMessage());
|
|
System.out.println("表达式runtime错误:" + e.getMessage());
|
|
|
}
|
|
}
|
|
@@ -288,6 +287,35 @@ public class MqttServiceImpl implements MqttService {
|
|
|
private void validEntityBeforeSave(TblSensorRecord entity){
|
|
private void validEntityBeforeSave(TblSensorRecord entity){
|
|
|
//TODO 做一些数据校验,如唯一约束
|
|
//TODO 做一些数据校验,如唯一约束
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ private void ruleExecute(SensorDataBo bo,String id,TblSensor tblSensor){
|
|
|
|
|
+ TblRuleExecuteBo executeBo = new TblRuleExecuteBo();
|
|
|
|
|
+ executeBo.setFilterId(Long.valueOf(id));
|
|
|
|
|
+ List<TblRuleExecuteVo> list = iTblRuleExecuteService.queryList(executeBo);
|
|
|
|
|
+ for(TblRuleExecuteVo vo:list){
|
|
|
|
|
+ if(vo.getExecuteAction().equals("warn")){
|
|
|
|
|
+ TblWarnBo warn = new TblWarnBo();
|
|
|
|
|
+ TblEquipmentSbookVo tblEquipment = equipmentSbookService.queryById(tblSensor.getDeviceId());
|
|
|
|
|
+ warn.setName("设备"+tblEquipment.getName()+"传感器"+tblSensor.getName()+"数据异常");
|
|
|
|
|
+ warn.setVal(bo.getValue());
|
|
|
|
|
+ warn.setEquipmentId(tblEquipment.getId());
|
|
|
|
|
+ warn.setEquipmentName(tblEquipment.getName());
|
|
|
|
|
+ warn.setContent("设备"+tblEquipment.getName()+"传感器"+tblSensor.getName()+"数据异常,请注意");
|
|
|
|
|
+ warn.setAlarmTime(new Date());
|
|
|
|
|
+ iTblWarnService.insertByBo(warn);
|
|
|
|
|
+ } else if (vo.getExecuteAction().equals("breakbown")) {
|
|
|
|
|
+ TblBreakdownBo tblBreakdownBo = new TblBreakdownBo();
|
|
|
|
|
+ TblEquipmentSbookVo tblEquipment = equipmentSbookService.queryById(tblSensor.getDeviceId());
|
|
|
|
|
+ tblBreakdownBo.setName("设备"+tblEquipment.getName()+"传感器"+tblSensor.getName()+"故障");
|
|
|
|
|
+ tblBreakdownBo.setVal(bo.getValue());
|
|
|
|
|
+ tblBreakdownBo.setEquipmentId(tblEquipment.getId());
|
|
|
|
|
+ tblBreakdownBo.setEquipmentName(tblEquipment.getName());
|
|
|
|
|
+ tblBreakdownBo.setContent("设备"+tblEquipment.getName()+"传感器"+tblSensor.getName()+"故障,请注意");
|
|
|
|
|
+ tblBreakdownBo.setFaultTime(new Date());
|
|
|
|
|
+ iTblBreakdownService.insertByBo(tblBreakdownBo);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
@Override
|
|
@Override
|
|
|
public void createMqtt(TblMqttBo bo){
|
|
public void createMqtt(TblMqttBo bo){
|
|
|
LambdaQueryWrapper<TblMqtt> lqw = buildQueryWrapper(bo);
|
|
LambdaQueryWrapper<TblMqtt> lqw = buildQueryWrapper(bo);
|