|
@@ -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();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+
|