Parcourir la source

计算稼动率和功率

wukai il y a 1 an
Parent
commit
f32a5db1ad

+ 19 - 17
ruoyi-admin/src/main/java/com/ruoyi/biz/controller/ApiController.java

@@ -7,6 +7,7 @@ import com.ruoyi.biz.service.ITwinDeviceService;
 import com.ruoyi.biz.service.ITwinRecordAlarmsService;
 import com.ruoyi.biz.service.impl.AsyncServiceImpl;
 import com.ruoyi.biz.service.impl.IotTokenServiceImpl;
+import com.ruoyi.biz.tools.Tools;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.utils.DateUtils;
@@ -28,6 +29,7 @@ import java.io.BufferedOutputStream;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.text.ParseException;
 import java.time.LocalDate;
@@ -70,18 +72,16 @@ public class ApiController extends BaseController {
         TwinCalc2hr calc2hr = calc2hrService.calcToday();
         IndexData indexData = new IndexData();
         IndexEfficiency efficiency = new IndexEfficiency();
-        Float ae = new Random().nextInt(2000) / 100f + 80f;
-        Float be = new Random().nextInt(2000) / 100f + 80f;
         efficiency.setTotalLength(calc2hr.getLengthA().add(calc2hr.getLengthB()).floatValue());
         efficiency.setTotalWeight(calc2hr.getWeightA().add(calc2hr.getWeightB()).floatValue());
         efficiency.setATime(calc2hr.getOpenTimeA().floatValue());
         efficiency.setALength(calc2hr.getLengthA().floatValue());
         efficiency.setAWeight(calc2hr.getWeightA().floatValue());
-        efficiency.setAEfficiency(ae);
+        efficiency.setAEfficiency(Tools.calcPercent(calc2hr.getOpenTimeA(), calc2hr.getCloseTimeA()).floatValue());
         efficiency.setBTime(calc2hr.getOpenTimeB().floatValue());
         efficiency.setBLength(calc2hr.getLengthB().floatValue());
         efficiency.setBWeight(calc2hr.getWeightB().floatValue());
-        efficiency.setBEfficiency(be);
+        efficiency.setBEfficiency(Tools.calcPercent(calc2hr.getOpenTimeB(), calc2hr.getCloseTimeB()).floatValue());
         indexData.setEfficiency(efficiency);
         /*
          *获取前面6天的数据,加上当天数据
@@ -211,7 +211,7 @@ public class ApiController extends BaseController {
         return R.ok(result);
     }
 
-    @ApiOperation("设备具体数据")
+    @ApiOperation("导出Excel")
     @GetMapping("/export")
     @CrossOrigin(origins = "*")
     public void export(String start, String end, HttpServletResponse response) {
@@ -256,10 +256,12 @@ public class ApiController extends BaseController {
                 cells[2].setCellValue(calc2hr.getLengthA().add(calc2hr.getLengthB()).floatValue());
                 //总重
                 cells[3].setCellValue(calc2hr.getWeightA().add(calc2hr.getWeightB()).floatValue());
-                //稼动率 TODO 暂时无数据
-                cells[4].setCellValue("");
-                // 总电量 TODO 暂时无数据
-                cells[5].setCellValue("");
+                //总稼动率
+                BigDecimal totalOpenTime = calc2hr.getOpenTimeA().add(calc2hr.getOpenTimeB());
+                BigDecimal totalCloseTime = calc2hr.getCloseTimeA().add(calc2hr.getCloseTimeB());
+                cells[4].setCellValue(Tools.calcPercent(totalOpenTime, totalCloseTime).floatValue());
+                // 总电量
+                cells[5].setCellValue(calc2hr.getKwh().floatValue());
                 //告警次数
                 cells[6].setCellValue(calc2hr.getAlarm());
                 //A班米长
@@ -270,10 +272,10 @@ public class ApiController extends BaseController {
                 cells[9].setCellValue(calc2hr.getOpenTimeA().floatValue());
                 //A班停机时间
                 cells[10].setCellValue(calc2hr.getCloseTimeA().floatValue());
-                //A班稼动率 TODO 暂时无数据
-                cells[11].setCellValue("");
-                //A班电量 TODO 暂时无数据
-                cells[12].setCellValue("");
+                //A班稼动率
+                cells[11].setCellValue(Tools.calcPercent(calc2hr.getOpenTimeA(), calc2hr.getCloseTimeA()).floatValue());
+                //A班电量
+                cells[12].setCellValue(calc2hr.getKwhA().floatValue());
                 //A班停经片停机次数
                 cells[13].setCellValue(calc2hr.getStop1A());
                 //A班CCD停机次数
@@ -288,10 +290,10 @@ public class ApiController extends BaseController {
                 cells[18].setCellValue(calc2hr.getOpenTimeB().floatValue());
                 //B班停机时间
                 cells[19].setCellValue(calc2hr.getCloseTimeB().floatValue());
-                //B班稼动率 TODO 暂时无数据
-                cells[20].setCellValue("");
-                //B班电量 TODO 暂时无数据
-                cells[21].setCellValue("");
+                //B班稼动率
+                cells[20].setCellValue(Tools.calcPercent(calc2hr.getOpenTimeB(), calc2hr.getCloseTimeB()).floatValue());
+                //B班电量
+                cells[21].setCellValue(calc2hr.getKwhB().floatValue());
                 //B班停经片停机次数
                 cells[22].setCellValue(calc2hr.getStop1B());
                 //B班CCD停机次数

+ 7 - 0
ruoyi-admin/src/main/java/com/ruoyi/biz/domain/TwinCalcDay.java

@@ -1,6 +1,7 @@
 package com.ruoyi.biz.domain;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.biz.tools.Tools;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
 import com.ruoyi.common.utils.bean.BeanUtils;
@@ -234,8 +235,14 @@ public class TwinCalcDay extends BaseEntity {
     public void convert(TwinCalc2hr calc2hr) {
         BeanUtils.copyProperties(calc2hr, this);
         this.time = calc2hr.getDataDate();
+        this.kwh = this.kwhA.add(this.kwhB);
         this.weight = this.weightA.add(this.weightB);
         this.length = this.lengthA.add(this.lengthB);
+        this.efficiencyA = Tools.calcPercent(this.openTimeA, this.closeTimeA);
+        this.efficiencyB = Tools.calcPercent(this.openTimeB, this.closeTimeB);
+        BigDecimal totalOpenTime = this.openTimeA.add(this.openTimeB);
+        BigDecimal totalCloseTime = this.closeTimeA.add(this.closeTimeB);
+        this.efficiency = Tools.calcPercent(totalOpenTime, totalCloseTime);
     }
 
     public void setId(Long id) {

+ 8 - 0
ruoyi-admin/src/main/java/com/ruoyi/biz/service/ITwinCalcDayService.java

@@ -2,6 +2,7 @@ package com.ruoyi.biz.service;
 
 import com.ruoyi.biz.domain.TwinCalcDay;
 
+import java.time.LocalDate;
 import java.util.Date;
 import java.util.List;
 
@@ -72,4 +73,11 @@ public interface ITwinCalcDayService {
      * 统计昨日数据入库
      */
     void calcYesterday();
+
+    /**
+     * 按日期统计数据入库
+     *
+     * @param localDate 指定日期
+     */
+    void calc4date(LocalDate localDate);
 }

+ 17 - 3
ruoyi-admin/src/main/java/com/ruoyi/biz/service/impl/TwinCalcDayServiceImpl.java

@@ -110,10 +110,24 @@ public class TwinCalcDayServiceImpl implements ITwinCalcDayService {
     @Override
     public void calcYesterday() {
         LocalDate localDate = LocalDate.now().minusDays(1);
+        calc4date(localDate);
+    }
+
+    /**
+     * 按日期统计数据入库
+     *
+     * @param localDate 指定日期
+     */
+    @Override
+    public void calc4date(LocalDate localDate) {
         Date date = Date.from(localDate.atStartOfDay(ZoneOffset.of("+8")).toInstant());
         TwinCalc2hr calc = calc2hrService.calc4date(date);
-        TwinCalcDay day = new TwinCalcDay();
-        day.convert(calc);
-        insertTwinCalcDay(day);
+        if (calc != null) {
+            TwinCalcDay day = new TwinCalcDay();
+            day.convert(calc);
+            insertTwinCalcDay(day);
+        } else {
+            System.err.println(localDate);
+        }
     }
 }

+ 18 - 0
ruoyi-admin/src/main/java/com/ruoyi/biz/tools/Tools.java

@@ -2,6 +2,8 @@ package com.ruoyi.biz.tools;
 
 import cn.hutool.json.JSONArray;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -25,6 +27,22 @@ public class Tools {
         System.err.println(ldt.plusHours(2 * p));
     }
 
+    /**
+     * 计算稼动率
+     * a/(a+b)*100 保留两位小数
+     *
+     * @param a 开机时间
+     * @param b 关机时间
+     * @return 稼动率
+     */
+    public static BigDecimal calcPercent(BigDecimal a, BigDecimal b) {
+        if (a != null && a.intValue() != 0) {
+            return a.multiply(BigDecimal.valueOf(100)).divide(a.add(b), 2, RoundingMode.HALF_UP);
+        } else {
+            return BigDecimal.ZERO;
+        }
+    }
+
     public static Map<String, Object> json2Map(JSONArray values, String table) {
         Map<String, Object> dataMap = new HashMap<>(16);
         for (int i = 0; i < values.size(); i++) {

+ 4 - 1
ruoyi-admin/src/test/java/com/jjt/DataPF.java

@@ -102,7 +102,10 @@ public class DataPF {
 //        for (int i = 11; i <= 12; i++) {
 //            taskService.calc("2024-05-26", i);
 //        }
-        taskService.calc("2024-05-27");
+        for (int i = 22; i <= 27; i++) {
+            taskService.calc("2024-05-" + i);
+
+        }
     }
 
     @Test

+ 12 - 3
ruoyi-admin/src/test/java/com/jjt/TwinCalc2hrTest.java

@@ -3,7 +3,10 @@ package com.jjt;
 import com.ruoyi.RuoYiApplication;
 import com.ruoyi.biz.domain.TwinCalc2hr;
 import com.ruoyi.biz.domain.TwinCalcDay;
-import com.ruoyi.biz.service.*;
+import com.ruoyi.biz.service.IIotService;
+import com.ruoyi.biz.service.ITaskService;
+import com.ruoyi.biz.service.ITwinCalc2hrService;
+import com.ruoyi.biz.service.ITwinCalcDayService;
 import com.ruoyi.biz.service.impl.AsyncServiceImpl;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import org.junit.jupiter.api.Test;
@@ -29,8 +32,6 @@ public class TwinCalc2hrTest {
     @Resource
     private IIotService iotService;
     @Resource
-    private ITwinDeviceService deviceService;
-    @Resource
     private ITaskService taskService;
     @Resource
     private AsyncServiceImpl asyncService;
@@ -66,4 +67,12 @@ public class TwinCalc2hrTest {
         list.forEach(System.out::println);
     }
 
+    @Test
+    void calcDay() {
+        for (int i = 6; i >= 1; i--) {
+            LocalDate localDate = LocalDate.now().minusDays(i);
+            dayService.calc4date(localDate);
+        }
+    }
+
 }