|
@@ -1,10 +1,15 @@
|
|
|
package com.persagy.simulator_gaopin;
|
|
|
|
|
|
import java.io.ByteArrayInputStream;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.text.DecimalFormat;
|
|
|
import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.Iterator;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.logging.Handler;
|
|
|
|
|
|
+import cn.hutool.core.util.RandomUtil;
|
|
|
import org.antlr.runtime.ANTLRInputStream;
|
|
|
import org.antlr.runtime.CommonTokenStream;
|
|
|
import org.antlr.runtime.tree.CommonTree;
|
|
@@ -19,9 +24,10 @@ import com.persagy.simulator.MeterSimulatorScanner;
|
|
|
import com.persagy.simulator.MeterSimulatorWalker;
|
|
|
|
|
|
public class SimulatorUtil {
|
|
|
+ public static final Map<String, Double> accMap = new HashMap<>();
|
|
|
static DecimalFormat df = new DecimalFormat("#.##");
|
|
|
|
|
|
- public synchronized static Object getValue(EntityGroup group, String meter, int funcid, String data_type, Date curr_time) throws Exception {
|
|
|
+ public synchronized static Object getValue(EntityGroup group, String meter, int funcid, String data_type, Date curr_time,String key) throws Exception {
|
|
|
int hash = BKDRHash.getHashCode(meter + "_" + funcid);
|
|
|
Object dataString;
|
|
|
if (data_type.equalsIgnoreCase("BOOLEAN") || data_type.equalsIgnoreCase("ENUM")) {
|
|
@@ -40,7 +46,22 @@ public class SimulatorUtil {
|
|
|
MeterSimulatorWalker walker = Constant.walkerMap.get(formula_name);
|
|
|
dataString = (int) SimulatorUtil.getData(curr_time, walker, params).data;
|
|
|
}
|
|
|
- } else {
|
|
|
+ }else if (data_type.equalsIgnoreCase("ACC")) {
|
|
|
+ if (group.lower_limit != null && group.upper_limit != null) {
|
|
|
+ double value = accMap.getOrDefault(key, group.lower_limit.doubleValue()) + RandomUtil.randomDouble(group.upper_limit.doubleValue(), 2, RoundingMode.HALF_UP);
|
|
|
+ accMap.put(key,value);
|
|
|
+ dataString =value;
|
|
|
+ }if (group.lower_limit != null) {
|
|
|
+ double value = accMap.getOrDefault(key, group.lower_limit.doubleValue()) + RandomUtil.randomDouble(3.0, 2, RoundingMode.HALF_UP);
|
|
|
+ accMap.put(key,value);
|
|
|
+ dataString =value;
|
|
|
+ } else {
|
|
|
+ double value = accMap.getOrDefault(key, 0.0)+ RandomUtil.randomDouble(3.0,2, RoundingMode.HALF_UP);
|
|
|
+ accMap.put(key,value);
|
|
|
+ dataString =value;
|
|
|
+
|
|
|
+ }
|
|
|
+ }else {
|
|
|
JSONArray formula_param = Constant.formula_paramMap.get(data_type);
|
|
|
int tmp_index = hash % formula_param.size();
|
|
|
if (tmp_index < 0) {
|