|
@@ -39,36 +39,29 @@ public class TIronVisualScreenServiceImpl {
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
public synchronized Map<String, Object> getIronLegend(Map<String, Object> result) {
|
|
public synchronized Map<String, Object> getIronLegend(Map<String, Object> result) {
|
|
|
|
+ result = new LinkedHashMap<>();
|
|
|
|
|
|
- //最新L2数据
|
|
|
|
- CompletableFuture<TL2Data> latestL2Future = CompletableFuture.supplyAsync(() ->
|
|
|
|
- tl2DataService.lambdaQuery()
|
|
|
|
- //.le(TL2Data::getIronStarttime, new SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date()))
|
|
|
|
- .eq(TL2Data::getTapholeId, "1")
|
|
|
|
- .orderByDesc(TL2Data::getIronStarttime)
|
|
|
|
- .last("limit 1").one()
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- // 1. 计算起止时间
|
|
|
|
- int hours = 24;
|
|
|
|
- //给固定时间,24小时之内
|
|
|
|
- java.util.Date endTime = new java.util.Date();
|
|
|
|
- java.util.Calendar cal = java.util.Calendar.getInstance();
|
|
|
|
- cal.setTime(endTime);
|
|
|
|
- cal.add(java.util.Calendar.HOUR_OF_DAY, -hours);
|
|
|
|
- java.util.Date startTime = cal.getTime();
|
|
|
|
|
|
|
|
// // 1. 计算起止时间
|
|
// // 1. 计算起止时间
|
|
-// // 临时调试用,固定时间范围
|
|
|
|
-// final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
-// final java.util.Date startTime;
|
|
|
|
-// final java.util.Date endTime;
|
|
|
|
-// try {
|
|
|
|
-// startTime = sdf.parse("2025-07-13 02:15:00");
|
|
|
|
-// endTime = sdf.parse("2025-07-14 00:20:00");
|
|
|
|
-// } catch (Exception e) {
|
|
|
|
-// throw new RuntimeException("时间解析失败", e);
|
|
|
|
-// }
|
|
|
|
|
|
+// int hours = 24;
|
|
|
|
+// //给固定时间,24小时之内
|
|
|
|
+// java.util.Date endTime = new java.util.Date();
|
|
|
|
+// java.util.Calendar cal = java.util.Calendar.getInstance();
|
|
|
|
+// cal.setTime(endTime);
|
|
|
|
+// cal.add(java.util.Calendar.HOUR_OF_DAY, -hours);
|
|
|
|
+// java.util.Date startTime = cal.getTime();
|
|
|
|
+
|
|
|
|
+ // 1. 计算起止时间
|
|
|
|
+ // 临时调试用,固定时间范围
|
|
|
|
+ final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
+ final java.util.Date startTime;
|
|
|
|
+ final java.util.Date endTime;
|
|
|
|
+ try {
|
|
|
|
+ startTime = sdf.parse("2025-07-13 02:15:00");
|
|
|
|
+ endTime = sdf.parse("2025-07-14 00:20:00");
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ throw new RuntimeException("时间解析失败", e);
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
// 1. 生成完整的每一分钟时间点
|
|
// 1. 生成完整的每一分钟时间点
|
|
@@ -80,6 +73,18 @@ public class TIronVisualScreenServiceImpl {
|
|
cursor.add(java.util.Calendar.MINUTE, 1);
|
|
cursor.add(java.util.Calendar.MINUTE, 1);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+ //最新L2数据
|
|
|
|
+ CompletableFuture<TL2Data> latestL2Future = CompletableFuture.supplyAsync(() ->
|
|
|
|
+ tl2DataService.lambdaQuery()
|
|
|
|
+ //.le(TL2Data::getIronStarttime, new SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date()))
|
|
|
|
+ .eq(TL2Data::getTapholeId, "1")
|
|
|
|
+ .orderByDesc(TL2Data::getIronStarttime)
|
|
|
|
+ .last("limit 1").one()
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
//获取指定时间范围内的数据
|
|
//获取指定时间范围内的数据
|
|
CompletableFuture<List<OPCData>> opcDataFuture = CompletableFuture.supplyAsync(() ->
|
|
CompletableFuture<List<OPCData>> opcDataFuture = CompletableFuture.supplyAsync(() ->
|
|
opcDataService.lambdaQuery()
|
|
opcDataService.lambdaQuery()
|
|
@@ -120,20 +125,76 @@ public class TIronVisualScreenServiceImpl {
|
|
.last("limit 1").one()
|
|
.last("limit 1").one()
|
|
);
|
|
);
|
|
|
|
|
|
|
|
+ //获取当前有效出铁状态数据
|
|
|
|
+ CompletableFuture<OPCData> currentTappingFuture = CompletableFuture.supplyAsync(() ->
|
|
|
|
+ opcDataService.lambdaQuery()
|
|
|
|
+ .eq(OPCData::getPointName, "BF4_1_IRONNOTCH_TAPPING")
|
|
|
|
+ .isNotNull(OPCData::getData)
|
|
|
|
+ .orderByDesc(OPCData::getServerTime)
|
|
|
|
+ .last("limit 1").one()
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
Integer preTappingVal = null;
|
|
Integer preTappingVal = null;
|
|
|
|
+ Integer currentTappingVal = 0;
|
|
|
|
|
|
try {
|
|
try {
|
|
- CompletableFuture.allOf(preTappingFuture, latestL2Future, opcDataFuture).join();
|
|
|
|
|
|
+ CompletableFuture.allOf(preTappingFuture, latestL2Future, opcDataFuture,currentTappingFuture,l2DataFuture).join();
|
|
Map<String, List<OPCData>> opcDataMap = opcDataFuture.get().stream()
|
|
Map<String, List<OPCData>> opcDataMap = opcDataFuture.get().stream()
|
|
.collect(Collectors.groupingBy(OPCData::getPointName));
|
|
.collect(Collectors.groupingBy(OPCData::getPointName));
|
|
|
|
|
|
TL2Data latestL2 = latestL2Future.get();
|
|
TL2Data latestL2 = latestL2Future.get();
|
|
result.put("elementS", RealtimeData.builder().desc("铁水成分-硫").value(latestL2.getElementS()).build());
|
|
result.put("elementS", RealtimeData.builder().desc("铁水成分-硫").value(latestL2.getElementS()).build());
|
|
result.put("elementSi", RealtimeData.builder().desc("铁水成分-硅").value(latestL2.getElementSi()).build());
|
|
result.put("elementSi", RealtimeData.builder().desc("铁水成分-硅").value(latestL2.getElementSi()).build());
|
|
- result.put("mudWeight", RealtimeData.builder().desc("泥炮量").value(latestL2.getMudWeight()).unit("L").build());
|
|
|
|
|
|
+ result.put("mudWeight", RealtimeData.builder().desc("打泥量").value(latestL2.getMudWeight()).unit("L").build());
|
|
result.put("pollMm", RealtimeData.builder().desc("钻杆直径").value(latestL2.getPollMm()).unit("mm").build());
|
|
result.put("pollMm", RealtimeData.builder().desc("钻杆直径").value(latestL2.getPollMm()).unit("mm").build());
|
|
result.put("openDepth", RealtimeData.builder().desc("开口深度").value(latestL2.getOpenDepth()).unit("mm").build());
|
|
result.put("openDepth", RealtimeData.builder().desc("开口深度").value(latestL2.getOpenDepth()).unit("mm").build());
|
|
|
|
|
|
|
|
+ OPCData currentTapping = currentTappingFuture.get();
|
|
|
|
+ if (currentTapping != null && currentTapping.getData() != null) {
|
|
|
|
+ Object v = currentTapping.getData();
|
|
|
|
+ if (v instanceof Number) currentTappingVal = ((Number) v).intValue();
|
|
|
|
+ else if (v instanceof String) {
|
|
|
|
+ String str = ((String) v).trim();
|
|
|
|
+ if (!str.isEmpty()) {
|
|
|
|
+ try {
|
|
|
|
+ currentTappingVal = Integer.parseInt(str);
|
|
|
|
+ } catch (Exception ignore) {
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ List<TL2Data> tl2DataList = l2DataFuture.get();
|
|
|
|
+ RealtimeData ironCosttime = (RealtimeData) result.getOrDefault("ironCosttime", RealtimeData.builder().desc("出铁时间").unit("min").value(0).build());
|
|
|
|
+ if (ObjectUtils.isNotEmpty(tl2DataList)) {
|
|
|
|
+ List<List<Map<String, Object>>> collect = tl2DataList.stream().map(item -> {
|
|
|
|
+ List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
|
+ map.put("name", String.format("第%s次出铁\n(%s号铁口)%s分钟", item.getIronNo(), item.getTapholeId(), item.getIronCosttime()));
|
|
|
|
+ map.put("xAxis", TimeUtils.formatPartialDateString(item.getIronStarttime()));
|
|
|
|
+ mapList.add(map);
|
|
|
|
+
|
|
|
|
+ map = new HashMap<>();
|
|
|
|
+ map.put("xAxis", TimeUtils.formatPartialDateString(item.getIronEndtime()));
|
|
|
|
+ mapList.add(map);
|
|
|
|
+
|
|
|
|
+ return mapList;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ Map<String, Object> extraMap = new HashMap<>();
|
|
|
|
+ extraMap.put("mark", collect);
|
|
|
|
+ ironCosttime.setExtra(extraMap);
|
|
|
|
+ }
|
|
|
|
+ result.put("ironCosttime", ironCosttime);
|
|
|
|
+
|
|
|
|
+ if(0 == currentTappingVal || 1 == currentTappingVal){
|
|
|
|
+ result.put("ironWeight", RealtimeData.builder().desc("累计出铁量").unit("t").value(0).build());
|
|
|
|
+ result.put("ironSpeed", RealtimeData.builder().desc("铁水流速").value(0).unit("t/min").build());
|
|
|
|
+ result.put("ironTemp", RealtimeData.builder().desc("铁水温度").value(0).unit("℃").build());
|
|
|
|
+// result.put("ironCosttime", RealtimeData.builder().desc("出铁时间").value(0).unit("min").build());
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
|
|
//如果开始时间点没有值就从最近的获取
|
|
//如果开始时间点没有值就从最近的获取
|
|
OPCData preTapping = preTappingFuture.get();
|
|
OPCData preTapping = preTappingFuture.get();
|
|
@@ -153,6 +214,9 @@ public class TIronVisualScreenServiceImpl {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
//BF4_1TH_1_MIR_NWT 1号车净重
|
|
//BF4_1TH_1_MIR_NWT 1号车净重
|
|
CompletableFuture<List<IronTrendL1DTO>> weight1ListFuture = CompletableFuture.supplyAsync(() ->
|
|
CompletableFuture<List<IronTrendL1DTO>> weight1ListFuture = CompletableFuture.supplyAsync(() ->
|
|
opcDataMap.getOrDefault("BF4_1TH_1_MIR_NWT", new ArrayList<>())
|
|
opcDataMap.getOrDefault("BF4_1TH_1_MIR_NWT", new ArrayList<>())
|
|
@@ -279,7 +343,7 @@ public class TIronVisualScreenServiceImpl {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- RealtimeData ironWeight = (RealtimeData) result.getOrDefault("ironWeight", RealtimeData.builder().desc("铁水流量").unit("t").value(0).build());
|
|
|
|
|
|
+ RealtimeData ironWeight = (RealtimeData) result.getOrDefault("ironWeight", RealtimeData.builder().desc("累计出铁量").unit("t").value(0).build());
|
|
Map<String, Object> extraMap = new HashMap<>();
|
|
Map<String, Object> extraMap = new HashMap<>();
|
|
extraMap.put("mark", new ArrayList<>());
|
|
extraMap.put("mark", new ArrayList<>());
|
|
ironWeight.setExtra(extraMap);
|
|
ironWeight.setExtra(extraMap);
|
|
@@ -288,28 +352,10 @@ public class TIronVisualScreenServiceImpl {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
- List<TL2Data> tl2DataList = l2DataFuture.get();
|
|
|
|
- if (ObjectUtils.isNotEmpty(tl2DataList)) {
|
|
|
|
- RealtimeData ironCosttime = (RealtimeData) result.getOrDefault("ironCosttime", RealtimeData.builder().desc("出铁时间").unit("min").value(0).build());
|
|
|
|
- List<List<Map<String, Object>>> collect = tl2DataList.stream().map(item -> {
|
|
|
|
- List<Map<String, Object>> mapList = new ArrayList<>();
|
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
|
- map.put("name", String.format("第%s次出铁\n(%s号铁口)%s分钟", item.getIronNo(), item.getTapholeId(), item.getIronCosttime()));
|
|
|
|
- map.put("xAxis", TimeUtils.formatPartialDateString(item.getIronStarttime()));
|
|
|
|
- mapList.add(map);
|
|
|
|
|
|
|
|
- map = new HashMap<>();
|
|
|
|
- map.put("xAxis", TimeUtils.formatPartialDateString(item.getIronEndtime()));
|
|
|
|
- mapList.add(map);
|
|
|
|
|
|
|
|
- return mapList;
|
|
|
|
- }).collect(Collectors.toList());
|
|
|
|
|
|
|
|
- Map<String, Object> extraMap = new HashMap<>();
|
|
|
|
- extraMap.put("mark", collect);
|
|
|
|
- ironCosttime.setExtra(extraMap);
|
|
|
|
- result.put("ironCosttime", ironCosttime);
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
@@ -327,29 +373,25 @@ public class TIronVisualScreenServiceImpl {
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
public synchronized Map<String, Object> getIronChart(TrendRequest queryDateType) {
|
|
public synchronized Map<String, Object> getIronChart(TrendRequest queryDateType) {
|
|
- // 1. 计算起止时间
|
|
|
|
- int hours = Objects.isNull(queryDateType.getQueryHourBefore()) ? 24 : queryDateType.getQueryHourBefore();
|
|
|
|
- //给固定时间,24小时之内
|
|
|
|
- java.util.Date endTime = new java.util.Date();
|
|
|
|
- java.util.Calendar cal = java.util.Calendar.getInstance();
|
|
|
|
- cal.setTime(endTime);
|
|
|
|
- cal.add(java.util.Calendar.HOUR_OF_DAY, -hours);
|
|
|
|
- java.util.Date startTime = cal.getTime();
|
|
|
|
-// // ====== 日志定位时间区间开始 ======
|
|
|
|
-// System.out.println("[DEBUG] hours: " + hours);
|
|
|
|
-// System.out.println("[DEBUG] startTime: " + sdfMinute.format(startTime));
|
|
|
|
-// System.out.println("[DEBUG] endTime: " + sdfMinute.format(endTime));
|
|
|
|
- // ====== 日志定位时间区间结束 ======
|
|
|
|
- // 临时调试用,固定时间范围
|
|
|
|
-// final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
-// final java.util.Date startTime;
|
|
|
|
-// final java.util.Date endTime;
|
|
|
|
-// try {
|
|
|
|
-// startTime = sdf.parse("2025-07-13 02:15:00");
|
|
|
|
-// endTime = sdf.parse("2025-07-14 00:20:00");
|
|
|
|
-// } catch (Exception e) {
|
|
|
|
-// throw new RuntimeException("时间解析失败", e);
|
|
|
|
-// }
|
|
|
|
|
|
+// // 1. 计算起止时间
|
|
|
|
+// int hours = Objects.isNull(queryDateType.getQueryHourBefore()) ? 24 : queryDateType.getQueryHourBefore();
|
|
|
|
+// //给固定时间,24小时之内
|
|
|
|
+// java.util.Date endTime = new java.util.Date();
|
|
|
|
+// java.util.Calendar cal = java.util.Calendar.getInstance();
|
|
|
|
+// cal.setTime(endTime);
|
|
|
|
+// cal.add(java.util.Calendar.HOUR_OF_DAY, -hours);
|
|
|
|
+// java.util.Date startTime = cal.getTime();
|
|
|
|
+
|
|
|
|
+// 临时调试用,固定时间范围
|
|
|
|
+ final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
+ final java.util.Date startTime;
|
|
|
|
+ final java.util.Date endTime;
|
|
|
|
+ try {
|
|
|
|
+ startTime = sdf.parse("2025-07-13 02:15:00");
|
|
|
|
+ endTime = sdf.parse("2025-07-14 00:20:00");
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ throw new RuntimeException("时间解析失败", e);
|
|
|
|
+ }
|
|
|
|
|
|
// 2. 异步查询所有数据
|
|
// 2. 异步查询所有数据
|
|
CompletableFuture<List<OPCData>> opcDataFuture = CompletableFuture.supplyAsync(() ->
|
|
CompletableFuture<List<OPCData>> opcDataFuture = CompletableFuture.supplyAsync(() ->
|
|
@@ -381,7 +423,6 @@ public class TIronVisualScreenServiceImpl {
|
|
|
|
|
|
// 3. 等待所有查询完成并转换数据
|
|
// 3. 等待所有查询完成并转换数据
|
|
try {
|
|
try {
|
|
- CompletableFuture.allOf(opcDataFuture, l2DataFuture).join();
|
|
|
|
|
|
|
|
// 4. 按pointName分类OPC数据并转换为DTO
|
|
// 4. 按pointName分类OPC数据并转换为DTO
|
|
Map<String, List<OPCData>> opcDataMap = opcDataFuture.get().stream()
|
|
Map<String, List<OPCData>> opcDataMap = opcDataFuture.get().stream()
|
|
@@ -600,7 +641,7 @@ public class TIronVisualScreenServiceImpl {
|
|
result.put("ironWeight", ironFlowArr);
|
|
result.put("ironWeight", ironFlowArr);
|
|
|
|
|
|
// 处理铁水流速,出铁中按原逻辑,出铁结束后为0
|
|
// 处理铁水流速,出铁中按原逻辑,出铁结束后为0
|
|
- List<List<Object>> ironSpeedArr = buildMinuteArrayForSpeed(xAxis, speed1List, speed2List, preSpeed1 != null ? preSpeed1.getData() : null, preSpeed2 != null ? preSpeed2.getData() : null);
|
|
|
|
|
|
+ List<List<Object>> ironSpeedArr = buildMinuteArrayForSpeed(xAxis, speed1List, speed2List, tappingMap);
|
|
List<List<Object>> ironTempArr = buildMinuteArray(tempList, xAxis, preTemp != null ? preTemp.getData() : null);
|
|
List<List<Object>> ironTempArr = buildMinuteArray(tempList, xAxis, preTemp != null ? preTemp.getData() : null);
|
|
|
|
|
|
for (int i = 0; i < xAxis.size(); i++) {
|
|
for (int i = 0; i < xAxis.size(); i++) {
|
|
@@ -668,8 +709,8 @@ public class TIronVisualScreenServiceImpl {
|
|
return arr;
|
|
return arr;
|
|
}
|
|
}
|
|
|
|
|
|
- // 铁水流速
|
|
|
|
- private java.util.List<java.util.List<Object>> buildMinuteArrayForSpeed(java.util.List<String> xAxis, java.util.List<IronTrendL1DTO> speed1List, java.util.List<IronTrendL1DTO> speed2List, Object pre1, Object pre2) {
|
|
|
|
|
|
+ // 铁水流速(重写:合并取最大值,出铁周期内补齐空值,且出铁周期内流速不允许为0)
|
|
|
|
+ private java.util.List<java.util.List<Object>> buildMinuteArrayForSpeed(java.util.List<String> xAxis, java.util.List<IronTrendL1DTO> speed1List, java.util.List<IronTrendL1DTO> speed2List, java.util.Map<String, Integer> tappingMap) {
|
|
java.util.Map<String, Double> speed1Map = new java.util.LinkedHashMap<>();
|
|
java.util.Map<String, Double> speed1Map = new java.util.LinkedHashMap<>();
|
|
java.util.Map<String, Double> speed2Map = new java.util.LinkedHashMap<>();
|
|
java.util.Map<String, Double> speed2Map = new java.util.LinkedHashMap<>();
|
|
for (IronTrendL1DTO e : speed1List) {
|
|
for (IronTrendL1DTO e : speed1List) {
|
|
@@ -702,47 +743,31 @@ public class TIronVisualScreenServiceImpl {
|
|
if (value != null) speed2Map.put(min, value);
|
|
if (value != null) speed2Map.put(min, value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ // 合并为最大值map
|
|
|
|
+ java.util.Map<String, Double> speedMap = new java.util.LinkedHashMap<>();
|
|
|
|
+ for (String key : speed1Map.keySet()) {
|
|
|
|
+ speedMap.put(key, speed1Map.get(key));
|
|
|
|
+ }
|
|
|
|
+ for (String key : speed2Map.keySet()) {
|
|
|
|
+ double v2 = speed2Map.get(key);
|
|
|
|
+ speedMap.put(key, Math.max(speedMap.getOrDefault(key, 0d), v2));
|
|
|
|
+ }
|
|
java.util.List<java.util.List<Object>> arr = new java.util.ArrayList<>();
|
|
java.util.List<java.util.List<Object>> arr = new java.util.ArrayList<>();
|
|
Double last = null;
|
|
Double last = null;
|
|
- Double pre1Val = null, pre2Val = null;
|
|
|
|
- if (pre1 != null) {
|
|
|
|
- if (pre1 instanceof Number) pre1Val = ((Number) pre1).doubleValue();
|
|
|
|
- else if (pre1 instanceof String) {
|
|
|
|
- String str = ((String) pre1).trim();
|
|
|
|
- if (!str.isEmpty()) {
|
|
|
|
- try {
|
|
|
|
- pre1Val = Double.parseDouble(str);
|
|
|
|
- } catch (Exception ignore) {
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if (pre2 != null) {
|
|
|
|
- if (pre2 instanceof Number) pre2Val = ((Number) pre2).doubleValue();
|
|
|
|
- else if (pre2 instanceof String) {
|
|
|
|
- String str = ((String) pre2).trim();
|
|
|
|
- if (!str.isEmpty()) {
|
|
|
|
- try {
|
|
|
|
- pre2Val = Double.parseDouble(str);
|
|
|
|
- } catch (Exception ignore) {
|
|
|
|
- }
|
|
|
|
|
|
+ for (String t : xAxis) {
|
|
|
|
+ Integer tapping = tappingMap.getOrDefault(t, 0);
|
|
|
|
+ Double v = speedMap.get(t);
|
|
|
|
+ if (tapping == 1) {
|
|
|
|
+ if (v == null || v == 0) {
|
|
|
|
+ // 出铁周期内流速不允许为0,用上一个非0值
|
|
|
|
+ v = last != null ? last : 0d;
|
|
}
|
|
}
|
|
|
|
+ arr.add(java.util.Arrays.asList(t, v));
|
|
|
|
+ if (v != null && v != 0) last = v;
|
|
|
|
+ } else {
|
|
|
|
+ arr.add(java.util.Arrays.asList(t, 0));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- if (pre1Val != null && pre2Val != null) last = pre1Val + pre2Val;
|
|
|
|
- else if (pre1Val != null) last = pre1Val;
|
|
|
|
- else if (pre2Val != null) last = pre2Val;
|
|
|
|
- for (String t : xAxis) {
|
|
|
|
- Double cur1 = speed1Map.getOrDefault(t, null);
|
|
|
|
- Double cur2 = speed2Map.getOrDefault(t, null);
|
|
|
|
- Double sum = null;
|
|
|
|
- if (cur1 != null && cur2 != null) sum = cur1 + cur2;
|
|
|
|
- else if (cur1 != null) sum = cur1;
|
|
|
|
- else if (cur2 != null) sum = cur2;
|
|
|
|
- else sum = last;
|
|
|
|
- arr.add(java.util.Arrays.asList(t, sum));
|
|
|
|
- if (sum != null) last = sum;
|
|
|
|
- }
|
|
|
|
return arr;
|
|
return arr;
|
|
}
|
|
}
|
|
|
|
|