精度调整
This commit is contained in:
parent
18d1c67b43
commit
119e854f11
|
@ -4,6 +4,7 @@ import cn.hutool.core.map.MapUtil;
|
||||||
import com.isu.gaswellwatch.modbus.data.ModbusMessage;
|
import com.isu.gaswellwatch.modbus.data.ModbusMessage;
|
||||||
import com.isu.gaswellwatch.modbus.data.decode.DecodeHandler;
|
import com.isu.gaswellwatch.modbus.data.decode.DecodeHandler;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.commons.lang3.math.NumberUtils;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
@ -29,14 +30,28 @@ public class FactorDecodeHandler implements DecodeHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String decode(Map<String, Object> commandPointMap, String value) {
|
public String decode(Map<String, Object> commandPointMap, String value) {
|
||||||
|
String factorStr = MapUtil.getStr(commandPointMap, "factor");
|
||||||
|
if (StringUtils.isNotBlank(factorStr) && NumberUtils.isCreatable(value)) {
|
||||||
|
BigDecimal factor = new BigDecimal(factorStr);
|
||||||
|
BigDecimal numberValue = new BigDecimal(value);
|
||||||
|
int precision = MapUtil.getInt(commandPointMap, "precision", 0);
|
||||||
|
switch (factor.compareTo(BigDecimal.ZERO)) {
|
||||||
|
case -1 -> {
|
||||||
|
return numberValue.multiply(factor.abs()).toString();
|
||||||
|
}
|
||||||
|
case 1 -> {
|
||||||
|
return numberValue.divide(factor, precision, RoundingMode.HALF_UP).toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void decode(Map<String, Object> commandPointMap, ModbusMessage.MessagePoint point) {
|
public void decode(Map<String, Object> commandPointMap, ModbusMessage.MessagePoint point) {
|
||||||
point.setValue(this.decode(commandPointMap, point.getParseValue()));
|
point.setValue(point.getParseValue());
|
||||||
String factorStr = MapUtil.getStr(commandPointMap, "factor");
|
String factorStr = MapUtil.getStr(commandPointMap, "factor");
|
||||||
if (StringUtils.isNotBlank(factorStr) && StringUtils.isNotBlank(point.getParseValue())) {
|
if (StringUtils.isNotBlank(factorStr) && NumberUtils.isCreatable(point.getParseValue())) {
|
||||||
BigDecimal factor = new BigDecimal(factorStr);
|
BigDecimal factor = new BigDecimal(factorStr);
|
||||||
BigDecimal value = new BigDecimal(point.getValue());
|
BigDecimal value = new BigDecimal(point.getValue());
|
||||||
int precision = MapUtil.getInt(commandPointMap, "precision", 0);
|
int precision = MapUtil.getInt(commandPointMap, "precision", 0);
|
||||||
|
|
Loading…
Reference in New Issue