Browse Source

运行记录优化

yuanchao 1 month ago
parent
commit
68f01a50e1

+ 36 - 55
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotopeationfill/IotOpeationFillController.java

@@ -87,62 +87,43 @@ public class IotOpeationFillController {
     public CommonResult<Integer> insertLog(@Valid @RequestBody List<IotOpeationFillSaveReqVO>createReqVO) {
         List<IotOpeationFillSaveReqVO> fillList = createReqVO;
 
-        String fillContent = null;
-        for (IotOpeationFillSaveReqVO dayilyRun:fillList) {
-            if(dayilyRun.getPointName().equals("当日运转时间")){
-                fillContent = dayilyRun.getFillContent();
-                break;
-            }
-        }
-        for (IotOpeationFillSaveReqVO totalRun:fillList) {
-            if((totalRun.getPointName().equals("累计运转时间")||totalRun.getPointName().equals("累计运行时间"))&&totalRun.getIsCollection()==0){
-                double total = Double.parseDouble(fillContent);
-                totalRun.setTotalRunTime(BigDecimal.valueOf(total).add(totalRun.getTotalRunTime()));
-                break;
-            }
-        }
-        fillContent = null;
-        for (IotOpeationFillSaveReqVO dayilyGas:fillList) {
-            if(dayilyGas.getPointName().equals("当日注气量")){
-                fillContent = dayilyGas.getFillContent();
-                break;
-            }
-        }
-        for (IotOpeationFillSaveReqVO totalGas:fillList) {
-            if(totalGas.getPointName().equals("累计注气量")&&totalGas.getIsCollection()==0){
-                double total = Double.parseDouble(fillContent);
-                totalGas.setTotalRunTime(BigDecimal.valueOf(total).add(totalGas.getTotalRunTime()));
-                break;
-            }
-        }
-
-        fillContent = null;
-        for (IotOpeationFillSaveReqVO dayilyKm:fillList) {
-            if(dayilyKm.getPointName().equals("当日公里数")){
-                fillContent = dayilyKm.getFillContent();
-                break;
-            }
-        }
-        for (IotOpeationFillSaveReqVO totalKm:fillList) {
-            if(totalKm.getPointName().equals("累计公里数")&&totalKm.getIsCollection()==0){
-                double total = Double.parseDouble(fillContent);
-                totalKm.setTotalRunTime(BigDecimal.valueOf(total).add(totalKm.getTotalRunTime()));
-                break;
+        // 定义当日字段与累计字段的映射关系
+        Map<String, String> dailyToTotalMap = new HashMap<>();
+        dailyToTotalMap.put("当日运转时间", "累计运转时间");
+        dailyToTotalMap.put("当日运转时间", "累计运行时间"); // 兼容两个可能的累计名称
+        dailyToTotalMap.put("当日注气量", "累计注气量");
+        dailyToTotalMap.put("当日公里数", "累计公里数");
+        dailyToTotalMap.put("当日用电量", "累计用电量");
+
+        // 存储当日数据值的映射
+        Map<String, BigDecimal> dailyValues = new HashMap<>();
+
+        // 第一遍遍历:收集当日数据值
+        for (IotOpeationFillSaveReqVO item : fillList) {
+            String pointName = item.getPointName();
+            if (dailyToTotalMap.containsKey(pointName)) {
+                try {
+                    dailyValues.put(pointName, new BigDecimal(item.getFillContent()));
+                } catch (NumberFormatException e) {
+                    // 处理数据格式错误,记录日志或抛出异常
+                    System.out.println("数据格式错误,pointName={}, fillContent={}"+pointName+item.getFillContent());
+                }
             }
         }
 
-        fillContent = null;
-        for (IotOpeationFillSaveReqVO dayilyDl:fillList) {
-            if(dayilyDl.getPointName().equals("当日用电量")){
-                fillContent = dayilyDl.getFillContent();
-                break;
-            }
-        }
-        for (IotOpeationFillSaveReqVO totalDl:fillList) {
-            if(totalDl.getPointName().equals("累计用电量")&&totalDl.getIsCollection()==0){
-                double total = Double.parseDouble(fillContent);
-                totalDl.setTotalRunTime(BigDecimal.valueOf(total).add(totalDl.getTotalRunTime()));
-                break;
+        // 第二遍遍历:更新累计数据
+        for (IotOpeationFillSaveReqVO item : fillList) {
+            String pointName = item.getPointName();
+            // 检查当前项是否为累计项,并且是否有对应的当日数据
+            for (Map.Entry<String, String> entry : dailyToTotalMap.entrySet()) {
+                String dailyName = entry.getKey();
+                String totalName = entry.getValue();
+
+                if (pointName.equals(totalName) && item.getIsCollection() == 0 && dailyValues.containsKey(dailyName)) {
+                    BigDecimal dailyValue = dailyValues.get(dailyName);
+                    item.setTotalRunTime(dailyValue.add(item.getTotalRunTime()));
+                    break;
+                }
             }
         }
 
@@ -370,7 +351,7 @@ public class IotOpeationFillController {
 
 
                     }else{
-                        attrsDO.setFillContent("0.0");
+                        attrsDO.setFillContent("");
                         if(StringUtils.isEmpty(maxLog)){
                             attrsDO.setTotalRunTime(BigDecimal.valueOf(0));
                         }else{
@@ -401,7 +382,7 @@ public class IotOpeationFillController {
 
 
                 }else{
-                    attrsDO.setFillContent("0.0");
+                    attrsDO.setFillContent("");
                     if(StringUtils.isEmpty(maxLog)){
                         attrsDO.setTotalRunTime(BigDecimal.valueOf(0));
                     }else{