Jelajahi Sumber

能源用量统计添加参数手动执行

huangpeng 6 bulan lalu
induk
melakukan
00254a0766

+ 1 - 0
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/EquEnergyRecordService.java

@@ -7,4 +7,5 @@ import com.rongwei.rwcommon.base.R;
 public interface EquEnergyRecordService extends IService<EquEnergyRecordDo> {
     R calEnergyUsage();
 
+    R calEnergyUsageByStartTime(String endTime);
 }

+ 27 - 11
cx-equipment/cx-equipment-common/src/main/java/com/rongwei/bscommon/sys/service/impl/EquEnergyRecordServiceImpl.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.rongwei.bscommon.sys.dao.EquEnergyRecordDao;
 import com.rongwei.bscommon.sys.service.*;
 import com.rongwei.bsentity.domain.EquEnergyMeterDosageDayDo;
-import com.rongwei.bsentity.domain.EquEnergyMeterDosageMonthDo;
 import com.rongwei.bsentity.domain.EquEnergyRecordDo;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.utils.SecurityUtil;
@@ -39,7 +38,7 @@ public class EquEnergyRecordServiceImpl extends ServiceImpl<EquEnergyRecordDao,
     @Override
     public R calEnergyUsage() {
         //1.先将60天内计算出来的数据更新或者插入保存到 表具每日能源用量 equ_energy_meter_dosage_day表中
-        this.calRecordDataToDosageDay();
+        this.calRecordDataToDosageDay(null);
         //2.根据equ_energy_meter_dosage_day中数据将近60天内每个日期的能源用量数据更新写入到 每月能源用量 equ_energy_meter_dosage_month
         equEnergyMeterDosageMonthService.calDayToMonth();
         //3.根据equ_energy_meter_dosage_day表中每日能源用量数据、能源成本中心与表具的关系和计算方式,equ_energy_meter_center_dosage_day
@@ -49,6 +48,18 @@ public class EquEnergyRecordServiceImpl extends ServiceImpl<EquEnergyRecordDao,
         return R.ok();
     }
 
+    @Override
+    public R calEnergyUsageByStartTime(String endTime) {
+        //1.先将60天内计算出来的数据更新或者插入保存到 表具每日能源用量 equ_energy_meter_dosage_day表中
+        this.calRecordDataToDosageDay(endTime);
+        //2.根据equ_energy_meter_dosage_day中数据将近60天内每个日期的能源用量数据更新写入到 每月能源用量 equ_energy_meter_dosage_month
+        equEnergyMeterDosageMonthService.calDayToMonth();
+        //3.根据equ_energy_meter_dosage_day表中每日能源用量数据、能源成本中心与表具的关系和计算方式,equ_energy_meter_center_dosage_day
+        equEnergyMeterCenterDosageDayService.calRecordDataToCenterDosageDay();
+        //4.根据equ_energy_meter_center_dosage_day每日能源成本中心中数据将近60天内每个日期的能源用量数据更新写入到 每月能源用量equ_energy_meter_dosage_month表中
+        equEnergyMeterCenterDosageMonthService.calRecordDataToCenterDosageMonth();
+        return R.ok();
+    }
 
 
     /**
@@ -56,32 +67,37 @@ public class EquEnergyRecordServiceImpl extends ServiceImpl<EquEnergyRecordDao,
      *  月数据 按 表具id - 年 -月 统计
      * @return
      */
-    private void calRecordDataToDosageDay() {
+    private void calRecordDataToDosageDay(String endTime) {
         //间隔天数
         int intervalDays =60;
         // 获取当前日期
-        LocalDate today = LocalDate.now();
+        LocalDate today = null;
+        today = LocalDate.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        if (endTime!=null){
+            //根据传入的时间做当前日期
+            today = LocalDate.parse(endTime, formatter);
+        }
         // 计算60天前的日期
         LocalDate sixtyDaysAgo = today.minusDays(intervalDays);
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-        String endTime = today.format(formatter)+" 23:59:59";
-        String startTime = sixtyDaysAgo.format(formatter);
+        endTime = today.format(formatter)+" 23:59:59";
+        String startTime = sixtyDaysAgo.format(formatter)+" 00:00:00";
         //获取60天内所有表具中最新记录的相差值
         List<EquEnergyMeterDosageDayDo> equEnergyMeterDosageDayDos = equEnergyRecordDao.calRecordDataToDosageDay(startTime,endTime);
         //根据表具,时间 分组 ,每个镖局补充 60 天的记录
         Map<String, Map<String, List<EquEnergyMeterDosageDayDo>>> collect = equEnergyMeterDosageDayDos.stream().collect(Collectors.groupingBy(EquEnergyMeterDosageDayDo::getMeterid,
                 Collectors.groupingBy(EquEnergyMeterDosageDayDo::getCenterday)));
-
         List<EquEnergyMeterDosageDayDo>  dayList =new ArrayList<>();
         final EquEnergyMeterDosageDayDo[] dayDos= {null};
         final String[] dateKey = {""};
         final String[] tenantid = {""};
         final String[] ownedfactory = {""};
+        LocalDate finalToday = today;
         collect.forEach((meterid, map) -> {
-             tenantid[0] = map.values().stream().findFirst().get().get(0).getTenantid();
-             ownedfactory[0] = map.values().stream().findFirst().get().get(0).getOwnedfactory();
+            tenantid[0] = map.values().stream().findFirst().get().get(0).getTenantid();
+            ownedfactory[0] = map.values().stream().findFirst().get().get(0).getOwnedfactory();
             for (int i = 1; i < intervalDays; i++) {
-                dateKey[0] =  today.minusDays(i).format(formatter);
+                dateKey[0] =  finalToday.minusDays(i).format(formatter);
                 if (!map.containsKey(dateKey[0])){
                     //表具能源用量 在该日期不存在记录,用量默认 null 新建记录
                     dayDos[0] =new EquEnergyMeterDosageDayDo();

+ 17 - 0
cx-equipment/cx-equipment-server/src/main/java/com/rongwei/bsserver/sys/controller/EquEnergyRecordController.java

@@ -6,6 +6,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -42,4 +43,20 @@ public class EquEnergyRecordController {
         }
     }
 
+
+    /**
+     * 手动入参 补充数据
+     * @param endTime
+     * @return
+     */
+    @RequestMapping("/calEnergyUsageByStartTime/{endTime}")
+    public R calEnergyUsageByStartTime(@PathVariable("endTime") String endTime) {
+        try {
+            logger.info("手动调用计算能源用量开始:{}"+new Date());
+            return equEnergyRecordService.calEnergyUsageByStartTime(endTime);
+        } catch (Exception e) {
+            logger.error("计算能源用量失败:{}" + e.getMessage());
+            return R.error();
+        }
+    }
 }