Commit d2d857a9 authored by maoying's avatar maoying

添加指标偏移量

parent e6e32733
...@@ -213,4 +213,8 @@ public class EquipmentSpecificIndex extends BaseEntity { ...@@ -213,4 +213,8 @@ public class EquipmentSpecificIndex extends BaseEntity {
@ApiModelProperty(value = "是否遥测") @ApiModelProperty(value = "是否遥测")
@TableField(value = "is_trend") @TableField(value = "is_trend")
private Boolean isTrend; private Boolean isTrend;
@ApiModelProperty(value = "计算公式")
@TableField(value = "formula")
private String formula ;
} }
package com.yeejoin.equipmanage.service.impl; package com.yeejoin.equipmanage.service.impl;
import cn.hutool.core.date.DatePattern; import static com.yeejoin.equipmanage.common.enums.MqttConstant.DIS_CREATE;
import cn.hutool.core.date.DateUtil; import static com.yeejoin.equipmanage.common.enums.MqttConstant.FALSE;
import static com.yeejoin.equipmanage.common.enums.MqttConstant.ONE_1;
import static com.yeejoin.equipmanage.common.enums.MqttConstant.ONE_1_0;
import static com.yeejoin.equipmanage.common.enums.MqttConstant.STATE;
import static com.yeejoin.equipmanage.common.enums.MqttConstant.TRUE;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.RoundingMode;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.core.io.Resource;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.typroject.tyboot.component.emq.EmqKeeper;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
...@@ -17,59 +64,102 @@ import com.yeejoin.amos.feign.systemctl.model.MessageModel; ...@@ -17,59 +64,102 @@ import com.yeejoin.amos.feign.systemctl.model.MessageModel;
import com.yeejoin.equipmanage.common.datasync.entity.FireEquipmentDefectAlarm; import com.yeejoin.equipmanage.common.datasync.entity.FireEquipmentDefectAlarm;
import com.yeejoin.equipmanage.common.datasync.entity.FireEquipmentFaultAlarm; import com.yeejoin.equipmanage.common.datasync.entity.FireEquipmentFaultAlarm;
import com.yeejoin.equipmanage.common.datasync.entity.FireEquipmentFireAlarm; import com.yeejoin.equipmanage.common.datasync.entity.FireEquipmentFireAlarm;
import com.yeejoin.equipmanage.common.dto.TemperatureAlarmDto;
import com.yeejoin.equipmanage.common.dto.EquipIndexDto; import com.yeejoin.equipmanage.common.dto.EquipIndexDto;
import com.yeejoin.equipmanage.common.entity.*; import com.yeejoin.equipmanage.common.dto.TemperatureAlarmDto;
import com.yeejoin.equipmanage.common.entity.CarProperty;
import com.yeejoin.equipmanage.common.entity.EquipmentAlarmReportDay;
import com.yeejoin.equipmanage.common.entity.EquipmentDetail;
import com.yeejoin.equipmanage.common.entity.EquipmentIndex;
import com.yeejoin.equipmanage.common.entity.EquipmentSpecific;
import com.yeejoin.equipmanage.common.entity.EquipmentSpecificAlarm;
import com.yeejoin.equipmanage.common.entity.EquipmentSpecificAlarmLog;
import com.yeejoin.equipmanage.common.entity.EquipmentSpecificIndex;
import com.yeejoin.equipmanage.common.entity.FireFightingSystemEntity;
import com.yeejoin.equipmanage.common.entity.ManufacturerInfo;
import com.yeejoin.equipmanage.common.entity.MarqueeData;
import com.yeejoin.equipmanage.common.entity.publics.BaseEntity; import com.yeejoin.equipmanage.common.entity.publics.BaseEntity;
import com.yeejoin.equipmanage.common.entity.vo.*; import com.yeejoin.equipmanage.common.entity.vo.CarPropertyVo;
import com.yeejoin.equipmanage.common.enums.*; import com.yeejoin.equipmanage.common.entity.vo.EquipmentIndexVO;
import com.yeejoin.equipmanage.common.entity.vo.EquipmentSpecificVo;
import com.yeejoin.equipmanage.common.entity.vo.EquipmentStateVo;
import com.yeejoin.equipmanage.common.entity.vo.IndexStateVo;
import com.yeejoin.equipmanage.common.enums.AlarmStatusEnum;
import com.yeejoin.equipmanage.common.enums.AlarmTypeEnum;
import com.yeejoin.equipmanage.common.enums.CarForGisEnum;
import com.yeejoin.equipmanage.common.enums.ConfigPageTopicEnum;
import com.yeejoin.equipmanage.common.enums.ConfirmAlamEnum;
import com.yeejoin.equipmanage.common.enums.DynamicLabelEnum;
import com.yeejoin.equipmanage.common.enums.EquipAndCarEnum;
import com.yeejoin.equipmanage.common.enums.EquipQrcodeColorEnum;
import com.yeejoin.equipmanage.common.enums.EquipmentIndexLabelsEnum;
import com.yeejoin.equipmanage.common.enums.EquipmentRiskTypeEnum;
import com.yeejoin.equipmanage.common.enums.NBalarmEnum;
import com.yeejoin.equipmanage.common.enums.PressurePumpCheckEnum;
import com.yeejoin.equipmanage.common.enums.PressurePumpEnum;
import com.yeejoin.equipmanage.common.enums.PressurePumpMessageEnum;
import com.yeejoin.equipmanage.common.enums.PressurePumpValueEnum;
import com.yeejoin.equipmanage.common.enums.RiskLeverForAutoSys;
import com.yeejoin.equipmanage.common.enums.TemperatureAlarm;
import com.yeejoin.equipmanage.common.enums.TopicEnum;
import com.yeejoin.equipmanage.common.enums.TrueOrFalseEnum;
import com.yeejoin.equipmanage.common.enums.UnitEnum;
import com.yeejoin.equipmanage.common.utils.DateUtils; import com.yeejoin.equipmanage.common.utils.DateUtils;
import com.yeejoin.equipmanage.common.utils.StringUtil; import com.yeejoin.equipmanage.common.utils.StringUtil;
import com.yeejoin.equipmanage.common.utils.UUIDUtils; import com.yeejoin.equipmanage.common.utils.UUIDUtils;
import com.yeejoin.equipmanage.common.vo.*;
import com.yeejoin.equipmanage.common.vo.BizMessage; import com.yeejoin.equipmanage.common.vo.BizMessage;
import com.yeejoin.equipmanage.common.vo.CarIndexGisVo;
import com.yeejoin.equipmanage.common.vo.CustomizeItems; import com.yeejoin.equipmanage.common.vo.CustomizeItems;
import com.yeejoin.equipmanage.common.vo.EquipmentIndexLabelsVo;
import com.yeejoin.equipmanage.common.vo.EquipmentVo;
import com.yeejoin.equipmanage.common.vo.IotDataVO;
import com.yeejoin.equipmanage.common.vo.RiskBizInfoVo;
import com.yeejoin.equipmanage.common.vo.RiskDataVo;
import com.yeejoin.equipmanage.common.vo.RiskDynamicDetailsVo;
import com.yeejoin.equipmanage.common.vo.SShanMessage;
import com.yeejoin.equipmanage.common.vo.SShanStationMessage;
import com.yeejoin.equipmanage.common.vo.SendToMsgRiskAlarmInfoVo;
import com.yeejoin.equipmanage.common.vo.SendToMsgRiskDetailVo;
import com.yeejoin.equipmanage.common.vo.SendToMsgRiskEquipInfoVo;
import com.yeejoin.equipmanage.common.vo.StationMessage;
import com.yeejoin.equipmanage.common.vo.TableContentVo;
import com.yeejoin.equipmanage.common.vo.Token;
import com.yeejoin.equipmanage.common.vo.TopicEntityVo;
import com.yeejoin.equipmanage.controller.PoolStatisticController; import com.yeejoin.equipmanage.controller.PoolStatisticController;
import com.yeejoin.equipmanage.dto.TabContent;
import com.yeejoin.equipmanage.fegin.IotFeign; import com.yeejoin.equipmanage.fegin.IotFeign;
import com.yeejoin.equipmanage.fegin.SystemctlFeign; import com.yeejoin.equipmanage.fegin.SystemctlFeign;
import com.yeejoin.equipmanage.mapper.*; import com.yeejoin.equipmanage.mapper.CarMapper;
import com.yeejoin.equipmanage.mapper.EquipQrcodeRecordMapper;
import com.yeejoin.equipmanage.mapper.EquipmentDetailMapper;
import com.yeejoin.equipmanage.mapper.EquipmentSpecificAlarmLogMapper;
import com.yeejoin.equipmanage.mapper.EquipmentSpecificAlarmMapper;
import com.yeejoin.equipmanage.mapper.EquipmentSpecificIndexMapper;
import com.yeejoin.equipmanage.mapper.EquipmentSpecificMapper;
import com.yeejoin.equipmanage.mapper.FireFightingSystemMapper;
import com.yeejoin.equipmanage.mapper.ManufacturerInfoMapper;
import com.yeejoin.equipmanage.mapper.MarqueeDataMapper;
import com.yeejoin.equipmanage.quartz.PumpSendMessage; import com.yeejoin.equipmanage.quartz.PumpSendMessage;
import com.yeejoin.equipmanage.quartz.QuartzManager; import com.yeejoin.equipmanage.quartz.QuartzManager;
import com.yeejoin.equipmanage.remote.RemoteSecurityService; import com.yeejoin.equipmanage.remote.RemoteSecurityService;
import com.yeejoin.equipmanage.service.*; import com.yeejoin.equipmanage.service.ICarPropertyService;
import com.yeejoin.equipmanage.service.IESeqService;
import com.yeejoin.equipmanage.service.IEquipmentAlarmReportDayService;
import com.yeejoin.equipmanage.service.IEquipmentIndexService;
import com.yeejoin.equipmanage.service.IEquipmentService;
import com.yeejoin.equipmanage.service.IEquipmentSpecificAlarmLogService;
import com.yeejoin.equipmanage.service.IEquipmentSpecificAlarmService;
import com.yeejoin.equipmanage.service.IEquipmentSpecificIndexService;
import com.yeejoin.equipmanage.service.IEquipmentSpecificSerivce;
import com.yeejoin.equipmanage.service.IFireFightingSystemService;
import com.yeejoin.equipmanage.service.IPressurePumpService;
import com.yeejoin.equipmanage.service.ISyncDataService;
import com.yeejoin.equipmanage.service.MqttReceiveService;
import com.yeejoin.equipmanage.service.MqttSendGateway;
import com.yeejoin.equipmanage.utils.BeanUtil; import com.yeejoin.equipmanage.utils.BeanUtil;
import lombok.extern.slf4j.Slf4j; import com.yeejoin.equipmanage.utils.FormulaCalculator;
import org.apache.commons.io.IOUtils;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Async;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.typroject.tyboot.component.emq.EmqKeeper;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.io.IOException; import cn.hutool.core.date.DatePattern;
import java.math.BigDecimal; import cn.hutool.core.date.DateUtil;
import java.math.BigInteger; import lombok.extern.slf4j.Slf4j;
import java.math.RoundingMode;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import static com.yeejoin.equipmanage.common.enums.MqttConstant.*;
/** /**
...@@ -1135,6 +1225,27 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -1135,6 +1225,27 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
} }
} }
private String executeRule(EquipmentSpecificIndex equipmentSpecificIndex, String value) {
String formula = equipmentSpecificIndex.getFormula();
if(StringUtils.isEmpty(formula) || !equipmentSpecificIndex.getIsTrend() || !NumberUtils.isCreatable(value)){
return value;
}
try {
Map<String, Object> params = new HashMap();
params.put("value", new BigDecimal(value));
Object result = FormulaCalculator.calculate(
equipmentSpecificIndex.getFormula(), params);
return String.format("%.2f", result); // 格式化输出
} catch (Exception e) {
throw new BadRequest("公式执行失败: " + e.getMessage());
}
// Map<String, Object> valueMap = new HashMap();
// valueMap.put("value", NumberUtils.createNumber(value));
// formula = formula.replace("value", "(value)");
// Object result = FormulaCalculator.calculate(formula, valueMap);
// return result.toString();
}
/** /**
* 装备实时数据处理 * 装备实时数据处理
* *
...@@ -1159,7 +1270,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService { ...@@ -1159,7 +1270,7 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
BeanUtils.copyProperties(equipmentSpecificIndex, equipmentSpeIndex); BeanUtils.copyProperties(equipmentSpecificIndex, equipmentSpeIndex);
String value = iotDataVO.getValue().toString(); String value = iotDataVO.getValue().toString();
String traceId = iotDataVO.getTraceId(); String traceId = iotDataVO.getTraceId();
equipmentSpeIndex.setValue(value); equipmentSpeIndex.setValue(executeRule(equipmentSpeIndex,value));
equipmentSpeIndex.setUnit(equipmentSpecificIndex.getIndexUnitName()); equipmentSpeIndex.setUnit(equipmentSpecificIndex.getIndexUnitName());
equipmentSpeIndex.setTraceId(traceId); equipmentSpeIndex.setTraceId(traceId);
equipmentSpeIndex.setValueLabel(valueTranslate(value, equipmentSpecificIndex.getValueEnum())); equipmentSpeIndex.setValueLabel(valueTranslate(value, equipmentSpecificIndex.getValueEnum()));
......
package com.yeejoin.equipmanage.utils;
import java.math.BigDecimal;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import javax.script.Compilable;
import javax.script.CompiledScript;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.script.SimpleBindings;
public class FormulaCalculator {
private static final ScriptEngine engine =
new ScriptEngineManager().getEngineByName("js");
private static final Map<String, CompiledScript> compiledCache =
new ConcurrentHashMap<>();
public static synchronized Object calculate(String formula,
Map<String, Object> variables) throws ScriptException {
try {
// 类型安全转换
variables.replaceAll((k, v) ->
v instanceof String ? new BigDecimal((String)v) : v);
CompiledScript script = compiledCache.computeIfAbsent(
formula, f -> {
try {
return ((Compilable)engine).compile(f);
} catch (ScriptException e) {
e.printStackTrace();
// TODO Auto-generated catch block
throw new IllegalArgumentException("输入值格式错误");
}
}
);
return script.eval(new SimpleBindings(variables));
} catch (ClassCastException e) {
throw new IllegalArgumentException("输入值格式错误");
}
}
}
...@@ -1231,4 +1231,18 @@ ...@@ -1231,4 +1231,18 @@
alter table `f_equipment` add column `drain_duration` double DEFAULT NULL COMMENT '排空时长(分钟)'; alter table `f_equipment` add column `drain_duration` double DEFAULT NULL COMMENT '排空时长(分钟)';
</sql> </sql>
</changeSet> </changeSet>
<changeSet author="my" id="17491871450000">
<preConditions onFail="MARK_RAN">
<not>
<columnExists tableName="wl_equipment_specific_index" columnName="formula"/>
</not>
</preConditions>
<comment>wl_equipment_specific_index add column formula</comment>
<sql>
ALTER TABLE `wl_equipment_specific_index`
ADD COLUMN `formula` varchar(255) NULL DEFAULT '' COMMENT '计算公式';
</sql>
</changeSet>
</databaseChangeLog> </databaseChangeLog>
\ No newline at end of file
...@@ -68,7 +68,8 @@ ...@@ -68,7 +68,8 @@
sd.warehouse_structure_id AS buildId, sd.warehouse_structure_id AS buildId,
wes.biz_org_name AS bizOrgName, wes.biz_org_name AS bizOrgName,
wes.biz_org_code AS bizOrgCode, wes.biz_org_code AS bizOrgCode,
wesi.alarm_rule AS alarmRule wesi.alarm_rule AS alarmRule,
wesi.formula
FROM FROM
wl_equipment_specific_index AS wesi wl_equipment_specific_index AS wesi
LEFT JOIN wl_equipment_specific AS wes LEFT JOIN wl_equipment_specific AS wes
......
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