瀏覽代碼

首页年月日用电量

yq 4 年之前
父節點
當前提交
27888eac17

+ 0 - 6
fiveep-controller/src/main/java/com/bizmatics/controller/web/HtAnalogDataController.java

@@ -93,11 +93,5 @@ public class HtAnalogDataController {
     public ApiResult<List<CommonIcoVO>> getElectricIco(@RequestParam Integer siteId,@RequestParam Date date){
         return ApiResult.success(htAnalogDataService.getElectricIco(siteId,date));
     }
-
-
-    @GetMapping("test")
-    public void test(Date startTime,Date endTime){
-        htAnalogDataService.getCount(startTime,endTime);
-    }
 }
 

+ 5 - 0
fiveep-service/src/main/java/com/bizmatics/service/HadDataLogService.java

@@ -3,6 +3,9 @@ package com.bizmatics.service;
 import com.bizmatics.model.HadDataLog;
 import com.bizmatics.common.mvc.base.CrudService;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * <p>
  *  服务类
@@ -13,4 +16,6 @@ import com.bizmatics.common.mvc.base.CrudService;
  */
 public interface HadDataLogService extends CrudService<HadDataLog> {
 
+
+    List<HadDataLog> list(Date startTime,Date endTime);
 }

+ 0 - 2
fiveep-service/src/main/java/com/bizmatics/service/HtAnalogDataService.java

@@ -67,7 +67,5 @@ public interface HtAnalogDataService extends CrudService<HtAnalogData> {
     List<CommonIcoVO> getElectricIco(Integer siteId,Date date);
 
 
-    public void getCount(Date startTime,Date endTime);
-
 
 }

+ 12 - 0
fiveep-service/src/main/java/com/bizmatics/service/impl/HadDataLogServiceImpl.java

@@ -1,11 +1,17 @@
 package com.bizmatics.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.bizmatics.common.core.util.DateUtils;
 import com.bizmatics.model.HadDataLog;
 import com.bizmatics.persistence.mapper.HadDataLogMapper;
 import com.bizmatics.service.HadDataLogService;
 import com.bizmatics.common.mvc.base.AbstractCrudService;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * <p>
  *  服务实现类
@@ -17,4 +23,10 @@ import org.springframework.stereotype.Service;
 @Service
 public class HadDataLogServiceImpl extends AbstractCrudService<HadDataLogMapper, HadDataLog> implements HadDataLogService {
 
+    @Override
+    public List<HadDataLog> list(Date startTime, Date endTime) {
+        LambdaQueryWrapper<HadDataLog> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.between(HadDataLog::getDataTime,startTime,endTime);
+        return this.list(queryWrapper);
+    }
 }

+ 118 - 57
fiveep-service/src/main/java/com/bizmatics/service/impl/HtAnalogDataServiceImpl.java

@@ -1,19 +1,12 @@
 package com.bizmatics.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.bizmatics.common.core.exception.BusinessException;
 import com.bizmatics.common.core.util.DateUtils;
 import com.bizmatics.common.spring.util.JsonUtils;
-import com.bizmatics.model.AlarmPower;
 import com.bizmatics.model.HadDataLog;
 import com.bizmatics.model.HtAnalogData;
-import com.bizmatics.model.Site;
-import com.bizmatics.persistence.mapper.HadDataLogMapper;
 import com.bizmatics.persistence.mapper.HtAnalogDataMapper;
 import com.bizmatics.persistence.mapper.SiteMapper;
-import com.bizmatics.persistence.mapper.UserSiteMapper;
 import com.bizmatics.service.HadDataLogService;
 import com.bizmatics.service.HtAnalogDataService;
 import com.bizmatics.common.mvc.base.AbstractCrudService;
@@ -21,13 +14,12 @@ import com.bizmatics.service.util.Arith;
 import com.bizmatics.service.util.SessionLocal;
 import com.bizmatics.service.vo.*;
 import com.fasterxml.jackson.core.type.TypeReference;
-import org.apache.commons.math3.stat.descriptive.summary.Product;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * <p>
@@ -53,12 +45,40 @@ public class HtAnalogDataServiceImpl extends AbstractCrudService<HtAnalogDataMap
         Integer userId = SessionLocal.getUserId();
         Date date = new Date();
         HadCountVO hadCountVO = new HadCountVO();
-        hadCountVO.setDayCount(getElectricity(userId,null,DateUtils.getDayStartTime(date),date));
-        hadCountVO.setMonthCount(getElectricity(userId,null,DateUtils.getFirstDayOfMonth(date),date));
-        hadCountVO.setYearCount(getElectricity(userId,null,DateUtils.getBeginDayOfYear(date),date));
+        List<Integer> idList = siteMapper.idList(userId, null);
+        //日
+        List<HadDataLog> todayList = hadDataLogService.list(DateUtils.getDayStartTime(date),date);
+        for (HadCrVO hadCr:getEppData(idList, todayList)) {
+            hadCountVO.setDayCount(Arith.add(hadCountVO.getDayCount(),Arith.sub(hadCr.getHadMax(),hadCr.getHadMax())));
+        }
+        //月
+        Date firstDayOfMonth = DateUtils.getFirstDayOfMonth(date);
+        hadCountVO.setMonthCount(getMonthAndYearDate(firstDayOfMonth, date, idList));
+        //年
+        Date beginDayOfYear = DateUtils.getBeginDayOfYear(date);
+        hadCountVO.setYearCount(getMonthAndYearDate(beginDayOfYear, date, idList));
         return hadCountVO;
     }
 
+
+    public Double getMonthAndYearDate(Date startTime,Date endTime,List<Integer> idList){
+        AtomicReference<Double> count = new AtomicReference<>(0.00);
+        List<HadDataLog> startList = hadDataLogService.list(startTime,DateUtils.getDayEndTime(startTime));
+        List<HadDataLog> endList = hadDataLogService.list(DateUtils.getDayStartTime(endTime),endTime);
+        List<HadCrVO> startEppData = getEppData(idList, startList);
+        List<HadCrVO> endEppData = getEppData(idList, endList);
+        for (HadCrVO hadCrVO:startEppData) {
+            endEppData.stream()
+                    .filter(hadCr -> hadCr.getSiteId().equals(hadCrVO.getSiteId()))
+                    .findAny()
+                    .ifPresent(had ->{
+                        count.updateAndGet(v -> v + had.getHadMax() - hadCrVO.getHadMin());
+                    });
+        }
+        return count.get();
+    }
+
+
     @Override
     public List<CommonIcoVO> selectTrendByDate(Date date,Integer siteId) {
         Integer userId = SessionLocal.getUserId();
@@ -215,17 +235,18 @@ public class HtAnalogDataServiceImpl extends AbstractCrudService<HtAnalogDataMap
     }
 
 
-    @Override
-    public void getCount(Date startTime,Date endTime){
-        Integer userId = SessionLocal.getUserId();
-        List<Integer> idList = siteMapper.idList(userId, null);
-        LambdaQueryWrapper<HadDataLog> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.between(HadDataLog::getDataTime,startTime,endTime);
-        long l = System.currentTimeMillis();
-        List<HadDataLog> list = hadDataLogService.list(queryWrapper);
-        long currentTimeMillis = System.currentTimeMillis();
-        System.out.println("耗时间"+(currentTimeMillis-l));
-        List<SiteMaxVO> siteMaxVOList = new ArrayList<>();
+
+    /**
+     * 获取
+     * @param idList
+     * @param list
+     * @return
+     */
+    public HadCrVO getDemandData(List<Integer> idList, List<HadDataLog> list){
+        HadCrVO hadCrVO = new HadCrVO();
+        hadCrVO.setCount(0);
+        hadCrVO.setSumDemand(0.00);
+        List<HadCrVO> hadCrVOS = new ArrayList<>();
         for (HadDataLog hadDataLog:list) {
             List<Integer> siteIdList = JsonUtils.fromJson(hadDataLog.getSiteIdList(), new TypeReference<List<Integer>>(){});
             List<Integer> origin = new ArrayList<>(idList);
@@ -233,46 +254,86 @@ public class HtAnalogDataServiceImpl extends AbstractCrudService<HtAnalogDataMap
             // 有交集
             if(CollectionUtils.isNotEmpty(origin)){
                 List<HadDataLogVO> hadDataLogVos = JsonUtils.fromJson(hadDataLog.getHadData(), new TypeReference<List<HadDataLogVO>>(){});
+                hadCrVO.setCount(hadCrVO.getCount()+origin.size());
+                hadCrVO.setSumDemand(hadCrVO.getSumDemand()+
+                        hadDataLogVos.stream().filter(hadDataLogVO -> origin.contains(hadDataLogVO.getSiteId())).mapToDouble(HadDataLogVO::getDemand).sum());
                 //分组求每个站点的最大值和最小值
                 Map<Integer, DoubleSummaryStatistics> collect = hadDataLogVos.stream()
-                        .collect(Collectors.groupingBy(HadDataLogVO::getSiteId, Collectors.summarizingDouble(HadDataLogVO::getEpp)));
-                for (Integer siteId:collect.keySet()) {
-                    if (CollectionUtils.isEmpty(siteMaxVOList)){
-                        SiteMaxVO siteMaxVO = new SiteMaxVO();
-                        siteMaxVO.setSiteId(siteId);
-                        siteMaxVO.setMaxEpp(collect.get(siteId).getMax());
-                        siteMaxVO.setMinEpp(collect.get(siteId).getMin());
-                        siteMaxVOList.add(siteMaxVO);
-                    }else {
-                        siteMaxVOList.stream()
-                                .filter(siteMaxVO -> siteMaxVO.getSiteId().equals(siteId))
-                                .findFirst()
-                                .map(siteMaxVO -> {
-                                    if (siteMaxVO.getMaxEpp() < collect.get(siteId).getMax()){
-                                        siteMaxVO.setMaxEpp(collect.get(siteId).getMax());
-                                    }
-                                    if (siteMaxVO.getMinEpp() < collect.get(siteId).getMin()){
-                                        siteMaxVO.setMinEpp(collect.get(siteId).getMin());
-                                    }
-                                    return Optional.empty();
-                                }).orElseGet(() -> {
-                            SiteMaxVO siteMaxVO = new SiteMaxVO();
-                            siteMaxVO.setSiteId(siteId);
-                            siteMaxVO.setMaxEpp(collect.get(siteId).getMax());
-                            siteMaxVO.setMinEpp(collect.get(siteId).getMin());
-                            siteMaxVOList.add(siteMaxVO);
-                            return Optional.empty();
-                        });
-                    }
-                }
+                        .filter(hadDataLogVO -> idList.contains(hadDataLogVO.getSiteId()))
+                        .collect(Collectors.groupingBy(HadDataLogVO::getSiteId, Collectors.summarizingDouble(HadDataLogVO::getDemand)));
+                checkData(collect,hadCrVOS);
             }
         }
-        Double count = 0.00;
-        for (SiteMaxVO siteMaxVO:siteMaxVOList) {
-            count = siteMaxVO.getMaxEpp()-siteMaxVO.getMinEpp();
+        for (HadCrVO hadCr:hadCrVOS) {
+            hadCrVO.setHadDif(Arith.add(hadCrVO.getHadDif(),Arith.sub(hadCr.getHadMax(),hadCr.getHadMax())));
+        }
+        hadCrVO.setHadAvg(Arith.div(hadCrVO.getSumDemand(),hadCrVO.getCount()));
+        hadCrVO.setList(hadCrVOS);
+        return hadCrVO;
+    }
+
+
+    /**
+     * 获取epp数据
+     * @param idList
+     * @param list
+     * @return
+     */
+    public List<HadCrVO> getEppData(List<Integer> idList,List<HadDataLog> list){
+        List<HadCrVO> hadCrVoArrayList = new ArrayList<>();
+        for (HadDataLog hadDataLog:list) {
+            List<Integer> siteIdList = JsonUtils.fromJson(hadDataLog.getSiteIdList(), new TypeReference<List<Integer>>(){});
+            List<Integer> origin = new ArrayList<>(idList);
+            origin.retainAll(siteIdList);
+            // 有交集
+            if(CollectionUtils.isNotEmpty(origin)){
+                List<HadDataLogVO> hadDataLogVos = JsonUtils.fromJson(hadDataLog.getHadData(), new TypeReference<List<HadDataLogVO>>(){});
+                //分组求每个站点的最大值和最小值
+                Map<Integer, DoubleSummaryStatistics> collect = hadDataLogVos.stream()
+                        .filter(hadDataLogVO -> idList.contains(hadDataLogVO.getSiteId()))
+                        .collect(Collectors.groupingBy(HadDataLogVO::getSiteId, Collectors.summarizingDouble(HadDataLogVO::getEpp)));
+                checkData(collect,hadCrVoArrayList);
+            }
         }
-        System.out.println(count);
+        return hadCrVoArrayList;
     }
 
+    /**
+     * 便利寻找最大值/最小值
+     * @param collect
+     * @param siteMaxVOList
+     */
+    public void checkData(Map<Integer, DoubleSummaryStatistics> collect,List<HadCrVO> siteMaxVOList){
+        for (Integer siteId:collect.keySet()) {
+            if (CollectionUtils.isEmpty(siteMaxVOList)){
+                HadCrVO hadCrVO = new HadCrVO();
+                hadCrVO.setSiteId(siteId);
+                hadCrVO.setHadMax(collect.get(siteId).getMax());
+                hadCrVO.setHadMin(collect.get(siteId).getMin());
+                siteMaxVOList.add(hadCrVO);
+            }else {
+                siteMaxVOList.stream()
+                        .filter(siteMaxVO -> siteMaxVO.getSiteId().equals(siteId))
+                        .findFirst()
+                        .map(siteMaxVO -> {
+                            if (siteMaxVO.getHadMax() < collect.get(siteId).getMax()){
+                                siteMaxVO.setHadMax(collect.get(siteId).getMax());
+                            }
+                            if (siteMaxVO.getHadMin() < collect.get(siteId).getMin()){
+                                siteMaxVO.setHadMin(collect.get(siteId).getMin());
+                            }
+                            return Optional.empty();
+                        }).orElseGet(() -> {
+                    HadCrVO hadCrVO = new HadCrVO();
+                    hadCrVO.setSiteId(siteId);
+                    hadCrVO.setHadMax(collect.get(siteId).getMax());
+                    hadCrVO.setHadMin(collect.get(siteId).getMin());
+                    siteMaxVOList.add(hadCrVO);
+                    return Optional.empty();
+                });
+            }
+        }
+    }
 }
 
+

+ 1 - 0
fiveep-service/src/main/java/com/bizmatics/service/job/RatAnalogTask.java

@@ -98,6 +98,7 @@ public class RatAnalogTask {
                 .ub(htAnalogData.getUb())
                 .uc(htAnalogData.getUc())
                 .siteId(htAnalogData.getSiteId())
+                .demand(htAnalogData.getDemand())
                 .build();
         hadVoList.add(hadDataLogVO);
     }

+ 45 - 0
fiveep-service/src/main/java/com/bizmatics/service/vo/HadCrVO.java

@@ -0,0 +1,45 @@
+package com.bizmatics.service.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * had计算结果vo
+ * @author yq
+ * @date 2021/7/18 19:01
+ */
+@Data
+public class HadCrVO {
+
+    private Integer siteId;
+    /**
+     * 总条数
+      */
+    private Integer count;
+    /**
+     * demand总数
+     */
+    private Double sumDemand;
+    /**
+     * 平均数
+     */
+    private Double hadAvg;
+    /**
+     * 最大值
+     */
+    private Double hadMax;
+    /**
+     * 最小值
+     */
+    private Double hadMin;
+
+    /**
+     * 差值
+     */
+    private Double hadDif;
+
+
+    private List<HadCrVO> list;
+
+}

+ 2 - 0
fiveep-service/src/main/java/com/bizmatics/service/vo/HadDataLogVO.java

@@ -31,4 +31,6 @@ public class HadDataLogVO {
     private Double ub;
 
     private Double uc;
+
+    private Double demand;
 }

+ 0 - 17
fiveep-service/src/main/java/com/bizmatics/service/vo/SiteMaxVO.java

@@ -1,17 +0,0 @@
-package com.bizmatics.service.vo;
-
-import lombok.Data;
-
-/**
- * @author yq
- * @date 2021/7/18 16:08
- */
-@Data
-public class SiteMaxVO {
-
-    private Integer siteId;
-
-    private Double maxEpp;
-
-    private Double minEpp;
-}