Эх сурвалжийг харах

Merge branch 'fpg-master'

guoqiang 7 сар өмнө
parent
commit
69289dd1d9

+ 71 - 13
jeecg-module-gather/src/main/java/org/jeecg/modules/fpgJob/LeanModelStatistics.java

@@ -6,6 +6,7 @@ import org.jeecg.modules.device.entity.DeviceInformation;
 import org.jeecg.modules.device.service.IDeviceInformationService;
 import org.jeecg.modules.fpgJob.entity.FpgLeanModel;
 import org.jeecg.modules.fpgJob.service.IFpgLeanModelService;
+import org.jeecg.modules.gatherData.entity.DeviceStatiscsModelData;
 import org.jeecg.modules.gatherData.entity.FpgGatherData;
 import org.jeecg.modules.gatherData.entity.FpgStatiscsModelData;
 import org.jeecg.modules.gatherData.entity.FpgStatiscsModelMongodb;
@@ -113,19 +114,76 @@ public class LeanModelStatistics {
     // 设备启停统计数据
     public void startStop(String freq) {
         log.info("设备启停");
+        // 获取当前时间
+        Date curentDate = new Date(new Date().getTime() + 8 * 60 * 60 * 1000);
         // 峰平谷精益模型配置获取
-//        LambdaQueryWrapper<DeviceInformation> leanmodelQuery = new LambdaQueryWrapper<DeviceInformation>().eq(DeviceInformation::getDeviceCode, "");
-//        List<DeviceInformation> deviceInformationllist = deviceInformationService.list(leanmodelQuery);
-//        //遍历设备集合
-//        deviceInformationllist.forEach(deviceInformationlinfo -> {
-//            LambdaQueryWrapper<FpgGatherData> fpgGatherQuery = new LambdaQueryWrapper<FpgGatherData>().eq(FpgGatherData::getFpgModelState, "0");
-//            // 检测是否配置设备特殊条件
-//            if(!fpgLeanModeInfo.getDeviceInformationIds().isEmpty()){
-//                fpgGatherQuery.in(FpgGatherData::getDeviceInformationId, Arrays.asList(fpgLeanModeInfo.getDeviceInformationIds().split(",")));
-//            }
-//            List<FpgGatherData> fpgGatherList = fpgGatherDataService.list(fpgGatherQuery);
-//        });
+        List<DeviceInformation> deviceInformationllist = deviceInformationService.list();
+        //遍历设备集合
+        deviceInformationllist.forEach(deviceInformationlinfo -> {
+            LambdaQueryWrapper<FpgGatherData> fpgGatherQuery = new LambdaQueryWrapper<FpgGatherData>().eq(FpgGatherData::getFpgModelState, "0");
+            List<FpgGatherData> fpgGatherList = fpgGatherDataService.list(fpgGatherQuery);
+            // 处理数据业务逻辑
+            fpgGatherList.forEach(fpgGatherData -> { // 循环处理采集数据处理
+                try {
+                    // 采集时间
+                    Instant instant = fpgGatherData.getCreateTime().toInstant();
+                    LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
+                    // 上报日期
+                    String dayDate = new SimpleDateFormat("yyyy-MM-dd").format(fpgGatherData.getCreateTime());
+                    String classs = "";
+                    // 班次处理
+                    if (containsCreateTime(localDateTime, dayDate + " 00:00:00", dayDate + " 07:59:59")) { // 夜班
+                        classs = "night";
+                    } else if (containsCreateTime(localDateTime, dayDate + " 08:00:00", dayDate + " 15:59:59")) { // 白班
+                        classs = "white";
+                    } else if (containsCreateTime(localDateTime, dayDate + " 16:00:00", dayDate + " 23:59:59")) { // 中班
+                        classs = "center";
+                    }
+                    // 设备启停统计 start
+                    String startStopMonKey = "leanmodel_start_stop_total";
+                    DeviceStatiscsModelData startStopStatiscsModelData = new DeviceStatiscsModelData(fpgGatherData, "startstop_total", dayDate, classs, curentDate, curentDate);
+                    // 组合mongodb条件
+                    Query queryStartStop = new Query()
+                            .addCriteria(Criteria.where("deviceRegionId").is(fpgGatherData.getDeviceRegionId())).addCriteria(Criteria.where("deviceInformationId").is(fpgGatherData.getDeviceInformationId()));
+                    // 设备停止
+                    if(fpgGatherData.getRunCurrent().compareTo(new BigDecimal("0.00")) < 5){ // 设备停止运行 直接更新停止时间结束不用统计任何东西
+                        queryStartStop.addCriteria(Criteria.where("deviceStopTime").is(null));
+                        UpdateDefinition updateStartStop = new Update()
+                                .set("updateTime", curentDate);
+                        mongoTemplate.updateFirst(queryStartStop, updateStartStop, FpgStatiscsModelMongodb.class, startStopMonKey);
+                        return;
+                    } else { // 设备运行状态
+                        // 查找上一次运行记录
+                        FpgStatiscsModelMongodb startStopMongo = mongoTemplate.findOne(queryStartStop, FpgStatiscsModelMongodb.class, startStopMonKey);
+                        if(startStopMongo != null){
+                            // 功率
+                            BigDecimal runPower = new BigDecimal(String.valueOf(fpgGatherData.getActivePower()));
+                            // 运行时常
+                            BigDecimal runTime = new BigDecimal("1");
+                            // 历史数据
+                            BigDecimal oldPower = new BigDecimal(String.valueOf(startStopMongo.getPower()));
+                            BigDecimal oldRunTime = new BigDecimal(String.valueOf(startStopMongo.getIngTime()));
+                            // 更新启动运行数据
+                            UpdateDefinition updateStartStop = new Update()
+                                    .set("power", oldPower.add(runPower))
+                                    .set("ingTime", oldRunTime.add(runTime))
+                                    .set("updateTime", curentDate);
+                            mongoTemplate.updateFirst(queryStartStop, updateStartStop, FpgStatiscsModelMongodb.class, startStopMonKey);
+                            return;
+                        } else { // 直接插入
+                            mongoTemplate.insert(startStopStatiscsModelData, startStopMonKey);
+                            return;
+                        }
+                    }
+                    // 设备启停统计 end
+                    // 日统计尖峰平谷数据(功率+占比+电流+运行时长)
+                }catch (Exception e) {
+                    log.error(e.getMessage());
+                }
+            });
+        });
     }
+
     @Scheduled(fixedDelay = 1000)
     public void t1(){
         leanModel("1000");
@@ -153,8 +211,7 @@ public class LeanModelStatistics {
             fpgGatherList.forEach(fpgGatherData -> { // 循环处理采集数据处理
                 try {
                     // 变更记录状态
-//                    fpgGatherData.setFpgModelState("1");
-                    fpgGatherDataService.updateById(fpgGatherData);
+//                    fpgGatherDataService.updateById(fpgGatherData);
                     String finalDatestr = "";
                     // 统计单位
                     if("minute". equals(fpgLeanModeInfo.getTotalUnit())){ // 分钟
@@ -195,6 +252,7 @@ public class LeanModelStatistics {
                     });
                     // 重组对象
                     FpgStatiscsModelData fpgStatiscsModelData = new FpgStatiscsModelData(fpgGatherData, fpgLeanModeInfo, finalDatestr, dayDate, classs, curentDate, curentDate);
+                    // 组合mongodb条件
                     Query query = new Query();
                     query.addCriteria(Criteria.where("devicePointId").is(fpgGatherData.getDevicePointId())).addCriteria(Criteria.where("dates").is(dayDate)).addCriteria(Criteria.where("datestr").is(finalDatestr));
                     if(fpgGatherData.getDeviceRegionId() != null && !fpgGatherData.getDeviceRegionId().isEmpty()){ // 区域特殊处理

+ 129 - 0
jeecg-module-gather/src/main/java/org/jeecg/modules/gatherData/entity/DeviceStatiscsModelData.java

@@ -0,0 +1,129 @@
+package org.jeecg.modules.gatherData.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Description: 峰平谷数据采集
+ * @Author: jeecg-boot
+ * @Date:   2024-10-28
+ * @Version: V1.0
+ */
+@Data
+public class DeviceStatiscsModelData {
+
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+    /**设备启动时间*/
+    @ApiModelProperty(value = "设备启动时间")
+    private Date deviceStartTime;
+    /**设备关停时间*/
+    @ApiModelProperty(value = "设备关停时间")
+    private Date deviceStopTime;
+    /**区域ID*/
+    @ApiModelProperty(value = "区域ID")
+    private String deviceRegionId;
+    /**设备id*/
+    @ApiModelProperty(value = "设备id")
+    private String deviceInformationId;
+    /**运行时长*/
+    @ApiModelProperty(value = "运行时长")
+    private BigDecimal ingTime;
+    /**运行总功率*/
+    @ApiModelProperty(value = "运行总功率")
+    private BigDecimal power;
+    /**尖总功率*/
+    @ApiModelProperty(value = "尖总功率")
+    private BigDecimal topsPower;
+    /**峰总功率*/
+    @ApiModelProperty(value = "峰总功率")
+    private BigDecimal peaksPower;
+    /**平总功率*/
+    @ApiModelProperty(value = "平总功率")
+    private BigDecimal flatPower;
+    /**谷总功率*/
+    @ApiModelProperty(value = "谷总功率")
+    private BigDecimal valleysPower;
+    /**尖运行时长*/
+    @ApiModelProperty(value = "尖运行时长")
+    private BigDecimal topsIngTime;
+    /**峰运行时长*/
+    @ApiModelProperty(value = "峰运行时长")
+    private BigDecimal peaksIngTime;
+    /**平运行时长*/
+    @ApiModelProperty(value = "平运行时长")
+    private BigDecimal flatIngTime;
+    /**谷运行时长*/
+    @ApiModelProperty(value = "谷运行时长")
+    private BigDecimal valleysIngTime;
+    /**尖电流*/
+    @ApiModelProperty(value = "尖电流")
+    private BigDecimal topsSelectricCurrent;
+    /**峰电流*/
+    @ApiModelProperty(value = "峰电流")
+    private BigDecimal peaksSelectricCurrent;
+    /**平电流*/
+    @ApiModelProperty(value = "平电流")
+    private BigDecimal flatSelectricCurrent;
+    /**谷电流*/
+    @ApiModelProperty(value = "谷电流")
+    private BigDecimal valleysSelectricCurrent;
+    /**尖占比%*/
+    @ApiModelProperty(value = "尖占比%")
+    private BigDecimal topsProportion;
+    /**峰占比%*/
+    @ApiModelProperty(value = "峰占比%")
+    private BigDecimal peaksProportion;
+    /**平占比%*/
+    @ApiModelProperty(value = "平占比%")
+    private BigDecimal flatProportion;
+    /**谷占比%*/
+    @ApiModelProperty(value = "谷占比%")
+    private BigDecimal valleysProportion;
+    /**班次*/
+    @ApiModelProperty(value = "班次")
+    private String classs;
+    /**日期*/
+    @ApiModelProperty(value = "日期")
+    private String dates;
+    /**创建时间*/
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    // 峰平谷精益模型数据统计
+    public DeviceStatiscsModelData(FpgGatherData fpgGather, String totalType, String dates, String classs, Date createTime, Date updateTime) {
+        // 基础信息配置
+        this.deviceRegionId = fpgGather.getDeviceRegionId(); // 区域id
+        this.deviceInformationId = fpgGather.getDeviceInformationId(); // 设备id
+        this.ingTime = new BigDecimal("0.00"); // 累计时长
+        this.power = new BigDecimal("0.00"); // 累计功率
+        this.classs = classs;
+        if("day_powerproportioncurrent_run".equals(totalType)){ // 日统计尖峰平谷数据(功率+占比+电流+运行时长)
+            this.topsPower = new BigDecimal("0.00"); // 功率
+            this.peaksPower = new BigDecimal("0.00");
+            this.flatPower = new BigDecimal("0.00");
+            this.valleysPower = new BigDecimal("0.00");
+            this.topsProportion = new BigDecimal("0.00"); // 占比
+            this.peaksProportion = new BigDecimal("0.00");
+            this.flatProportion = new BigDecimal("0.00");
+            this.valleysProportion = new BigDecimal("0.00");
+            this.topsSelectricCurrent = new BigDecimal("0.00"); // 电流
+            this.peaksSelectricCurrent = new BigDecimal("0.00");
+            this.flatSelectricCurrent = new BigDecimal("0.00");
+            this.valleysSelectricCurrent = new BigDecimal("0.00");
+            this.topsIngTime = new BigDecimal("0.00"); // 运行时长
+            this.peaksIngTime = new BigDecimal("0.00");
+            this.flatIngTime = new BigDecimal("0.00");
+            this.valleysIngTime = new BigDecimal("0.00");
+        } else if("startstop_total".equals(totalType)){
+            this.deviceStartTime = null;
+            this.deviceStopTime = null;
+        }
+        this.dates = dates;
+        this.createTime = createTime;
+        this.updateTime = updateTime;
+    }
+}

+ 99 - 0
jeecg-module-gather/src/main/java/org/jeecg/modules/gatherData/entity/DeviceStatiscsModelMongodb.java

@@ -0,0 +1,99 @@
+package org.jeecg.modules.gatherData.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Description: 峰平谷数据采集
+ * @Author: jeecg-boot
+ * @Date:   2024-10-28
+ * @Version: V1.0
+ */
+@Data
+public class DeviceStatiscsModelMongodb {
+
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+    /**设备启动时间*/
+    @ApiModelProperty(value = "设备启动时间")
+    private Date deviceStartTime;
+    /**设备关停时间*/
+    @ApiModelProperty(value = "设备关停时间")
+    private Date deviceStopTime;
+	/**区域ID*/
+    @ApiModelProperty(value = "区域ID")
+    private String deviceRegionId;
+	/**设备id*/
+    @ApiModelProperty(value = "设备id")
+    private String deviceInformationId;
+	/**运行时长*/
+    @ApiModelProperty(value = "运行时长")
+    private BigDecimal ingTime;
+	/**运行总功率*/
+    @ApiModelProperty(value = "运行总功率")
+    private BigDecimal power;
+    /**尖总功率*/
+    @ApiModelProperty(value = "尖总功率")
+    private BigDecimal topsPower;
+    /**峰总功率*/
+    @ApiModelProperty(value = "峰总功率")
+    private BigDecimal peaksPower;
+    /**平总功率*/
+    @ApiModelProperty(value = "平总功率")
+    private BigDecimal flatPower;
+    /**谷总功率*/
+    @ApiModelProperty(value = "谷总功率")
+    private BigDecimal valleysPower;
+    /**尖运行时长*/
+    @ApiModelProperty(value = "尖运行时长")
+    private BigDecimal topsIngTime;
+    /**峰运行时长*/
+    @ApiModelProperty(value = "峰运行时长")
+    private BigDecimal peaksIngTime;
+    /**平运行时长*/
+    @ApiModelProperty(value = "平运行时长")
+    private BigDecimal flatIngTime;
+    /**谷运行时长*/
+    @ApiModelProperty(value = "谷运行时长")
+    private BigDecimal valleysIngTime;
+    /**尖电流*/
+    @ApiModelProperty(value = "尖电流")
+    private BigDecimal topsSelectricCurrent;
+    /**峰电流*/
+    @ApiModelProperty(value = "峰电流")
+    private BigDecimal peaksSelectricCurrent;
+    /**平电流*/
+    @ApiModelProperty(value = "平电流")
+    private BigDecimal flatSelectricCurrent;
+    /**谷电流*/
+    @ApiModelProperty(value = "谷电流")
+    private BigDecimal valleysSelectricCurrent;
+    /**尖占比%*/
+    @ApiModelProperty(value = "尖占比%")
+    private BigDecimal topsProportion;
+    /**峰占比%*/
+    @ApiModelProperty(value = "峰占比%")
+    private BigDecimal peaksProportion;
+    /**平占比%*/
+    @ApiModelProperty(value = "平占比%")
+    private BigDecimal flatProportion;
+    /**谷占比%*/
+    @ApiModelProperty(value = "谷占比%")
+    private BigDecimal valleysProportion;
+    /**班次*/
+    @ApiModelProperty(value = "班次")
+    private String classs;
+    /**日期*/
+    @ApiModelProperty(value = "日期")
+    private String dates;
+    /**创建时间*/
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    public DeviceStatiscsModelMongodb() {
+
+    }
+}

+ 0 - 8
jeecg-module-gather/src/main/java/org/jeecg/modules/gatherData/entity/FpgStatiscsModelData.java

@@ -27,12 +27,6 @@ public class FpgStatiscsModelData{
     /**设备id*/
     @ApiModelProperty(value = "设备id")
     private String deviceInformationId;
-    /**设备启动时间*/
-    @ApiModelProperty(value = "设备启动时间")
-    private Date deviceStartTime;
-    /**设备关停时间*/
-    @ApiModelProperty(value = "设备关停时间")
-    private Date deviceStopTime;
     /**产生费用*/
     @ApiModelProperty(value = "产生费用")
     private BigDecimal amount;
@@ -187,8 +181,6 @@ public class FpgStatiscsModelData{
         if(fpgLeanModel.getTopsPrice() != null || fpgLeanModel.getPeaksPrice() != null || fpgLeanModel.getFlatPrice() != null || fpgLeanModel.getValleysPrice() != null){
             this.amount = new BigDecimal("0.00");
         }
-        this.deviceStartTime = createTime;
-        this.deviceStopTime = createTime;
         this.dates = dates;
         this.datestr = datestr;
         this.createTime = createTime;

+ 0 - 6
jeecg-module-gather/src/main/java/org/jeecg/modules/gatherData/entity/FpgStatiscsModelMongodb.java

@@ -27,12 +27,6 @@ public class FpgStatiscsModelMongodb {
 	/**设备id*/
     @ApiModelProperty(value = "设备id")
     private String deviceInformationId;
-    /**设备启动时间*/
-    @ApiModelProperty(value = "设备启动时间")
-    private String deviceStartTime;
-    /**设备关停时间*/
-    @ApiModelProperty(value = "设备关停时间")
-    private String deviceStopTime;
     /**产生费用*/
     @ApiModelProperty(value = "产生费用")
     private BigDecimal amount;