123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- package com.bizmatics.service.impl;
- import com.bizmatics.common.core.exception.BusinessException;
- import com.bizmatics.common.core.util.DateUtils;
- import com.bizmatics.model.AlarmPower;
- import com.bizmatics.model.HtAnalogData;
- import com.bizmatics.persistence.mapper.HtAnalogDataMapper;
- import com.bizmatics.service.HtAnalogDataService;
- import com.bizmatics.common.mvc.base.AbstractCrudService;
- import com.bizmatics.service.util.Arith;
- import com.bizmatics.service.util.SessionLocal;
- import com.bizmatics.service.vo.CommonIcoVO;
- import com.bizmatics.service.vo.HadCountVO;
- import com.bizmatics.service.vo.TimeShareVO;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.*;
- /**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author ya
- * @since 2021-07-07
- */
- @Service
- public class HtAnalogDataServiceImpl extends AbstractCrudService<HtAnalogDataMapper, HtAnalogData> implements HtAnalogDataService {
- @Autowired
- private HtAnalogDataMapper htAnalogDataMapper;
- @Override
- public HadCountVO selectCount() {
- 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));
- return hadCountVO;
- }
- @Override
- public List<CommonIcoVO> selectTrendByDate(Date date,Integer siteId) {
- Integer userId = SessionLocal.getUserId();
- List<CommonIcoVO> list = new ArrayList<>();
- list.add(getByDate("today", userId, siteId, date));
- list.add(getByDate("yesterday", userId, siteId, DateUtils.addDays(date,-1)));
- return list;
- }
- @Override
- public HadCountVO getCountBySite(Integer siteId) {
- Date date = new Date();
- Integer userId = SessionLocal.getUserId();
- //当日开始时间
- Date firstDayOfDate = DateUtils.getDayStartTime(date);
- //当月开始时间
- Date firstDayOfMonth = DateUtils.getFirstDayOfMonth(date);
- //当年开始时间
- Date firstDayOfYear = DateUtils.getBeginDayOfYear(date);
- HadCountVO hadCountVO = new HadCountVO();
- hadCountVO.setDayCount(getElectricity(userId,siteId,firstDayOfDate,date));
- hadCountVO.setMonthCount(getElectricity(userId,siteId,firstDayOfMonth,date));
- hadCountVO.setYearCount(getElectricity(userId,siteId,firstDayOfYear,date));
- hadCountVO.setLastDayCount(getElectricity(userId,siteId,DateUtils.addDays(firstDayOfDate, -1),DateUtils.addDays(date, -1)));
- hadCountVO.setLastMonthCount(getElectricity(userId,siteId,DateUtils.addMonths(firstDayOfMonth, -1),DateUtils.addMonths(date, -1)));
- hadCountVO.setLastYearCount(getElectricity(userId,siteId,DateUtils.addYears(firstDayOfYear, -1),DateUtils.addYears(date, -1)));
- hadCountVO.setDayRadio(Optional.ofNullable(hadCountVO.getDayCount())
- .filter(dayCount -> 0.00 != dayCount)
- .map(dayCount -> Arith.div(hadCountVO.getLastDayCount(), dayCount))
- .orElse(0.00));
- hadCountVO.setMonthRadio(Optional.ofNullable(hadCountVO.getMonthCount())
- .filter(dayCount -> 0.00 != dayCount)
- .map(dayCount -> Arith.div(hadCountVO.getLastMonthCount(), dayCount))
- .orElse(0.00));
- hadCountVO.setYearRadio(Optional.ofNullable(hadCountVO.getYearCount())
- .filter(dayCount -> 0.00 != dayCount)
- .map(dayCount -> Arith.div(hadCountVO.getLastYearCount(), dayCount))
- .orElse(0.00));
- return hadCountVO;
- }
- @Override
- public TimeShareVO getTimeShare(Integer siteId, Date date) {
- Integer userId = SessionLocal.getUserId();
- TimeShareVO timeShareVO = new TimeShareVO();
- timeShareVO.setNeed(getElectricity(userId, siteId, DateUtils.setHours(date, 9), DateUtils.setHours(date, 12)));
- //高峰
- Double peakStart = getElectricity(userId, siteId, DateUtils.setHours(date, 8), DateUtils.setHours(date, 12));
- Double peakEnd = getElectricity(userId, siteId, DateUtils.setHours(date, 16), DateUtils.setHours(date, 20));
- timeShareVO.setPeak(peakStart+peakEnd);
- //平
- Double flatStart = getElectricity(userId, siteId, DateUtils.setHours(date, 6), DateUtils.setHours(date, 8));
- Double flatCentre = getElectricity(userId, siteId, DateUtils.setHours(date, 12), DateUtils.setHours(date, 16));
- Double flatEnd = getElectricity(userId, siteId, DateUtils.setHours(date, 20), DateUtils.setHours(date, 22));
- timeShareVO.setFlat(flatStart+flatCentre+flatEnd);
- timeShareVO.setGrain(getElectricity(userId, siteId, DateUtils.setHours(date, 22), DateUtils.setHours(DateUtils.addDays(date, 1), 6)));
- return timeShareVO;
- }
- @Override
- public List<CommonIcoVO> getDemandIco(Integer siteId) {
- Date date = DateUtils.getLastDayOfMonth(new Date());
- List<Object> maxList = new ArrayList<>();
- List<Object> minList = new ArrayList<>();
- List<Object> avgList = new ArrayList<>();
- List<Object> dateList = new ArrayList<>();
- for (int i = 1; i <= Integer.parseInt(DateUtils.getDay(date)); i++) {
- Date setDays = DateUtils.setDays(date, i);
- Date dayStartTime = DateUtils.getDayStartTime(setDays);
- Date dayEndTime = DateUtils.getDayEndTime(setDays);
- Map<String, Double> map = baseMapper.selectMaxAndMinAndAvg(siteId, dayStartTime,dayEndTime);
- maxList.add(Optional.ofNullable(map).map(max -> max.get("demandMax")).orElse(0.00));
- minList.add(Optional.ofNullable(map).map(max -> max.get("demandMin")).orElse(0.00));
- avgList.add(Optional.ofNullable(map).map(max -> max.get("demandAvd")).orElse(0.00));
- dateList.add(DateUtils.getDay(setDays));
- }
- List<CommonIcoVO> list = new ArrayList<>();
- list.add(CommonIcoVO.builder().name("MAX").list(maxList).listDate(dateList).build());
- list.add(CommonIcoVO.builder().name("MIN").list(minList).list(dateList).build());
- list.add(CommonIcoVO.builder().name("AVG").list(avgList).listDate(dateList).build());
- return list;
- }
- @Override
- public List<CommonIcoVO> getElectricIco(Integer siteId, Date date) {
- Integer userId = SessionLocal.getUserId();
- List<Object> iaList = new ArrayList<>();
- iaList.add(0.00);
- List<Object> ibList = new ArrayList<>();
- ibList.add(0.00);
- List<Object> icList = new ArrayList<>();
- icList.add(0.00);
- List<Object> uaList = new ArrayList<>();
- uaList.add(0.00);
- List<Object> ubList = new ArrayList<>();
- ubList.add(0.00);
- List<Object> ucList = new ArrayList<>();
- ucList.add(0.00);
- List<Object> dateList = new ArrayList<>();
- dateList.add("00:00:00");
- for (int i = 2; i < 24 ; i+=2) {
- //结束时间
- Date endTime = DateUtils.addHours(date, i);
- HtAnalogData htAnalogData = htAnalogDataMapper.selectByEndTime(date,endTime, siteId, userId);
- iaList.add(Optional.ofNullable(htAnalogData).map(had -> htAnalogData.getIa()).orElse(0.00));
- ibList.add(Optional.ofNullable(htAnalogData).map(had -> htAnalogData.getIb()).orElse(0.00));
- icList.add(Optional.ofNullable(htAnalogData).map(had -> htAnalogData.getIc()).orElse(0.00));
- uaList.add(Optional.ofNullable(htAnalogData).map(had -> htAnalogData.getUa()).orElse(0.00));
- ubList.add(Optional.ofNullable(htAnalogData).map(had -> htAnalogData.getUb()).orElse(0.00));
- ucList.add(Optional.ofNullable(htAnalogData).map(had -> htAnalogData.getUc()).orElse(0.00));
- date = endTime;
- dateList.add(DateUtils.getTime(endTime));
- }
- List<CommonIcoVO> list = new ArrayList<>();
- list.add(CommonIcoVO.builder().name("IA").list(iaList).listDate(dateList).build());
- list.add(CommonIcoVO.builder().name("IB").list(ibList).listDate(dateList).build());
- list.add(CommonIcoVO.builder().name("IC").list(icList).listDate(dateList).build());
- list.add(CommonIcoVO.builder().name("UA").list(uaList).listDate(dateList).build());
- list.add(CommonIcoVO.builder().name("UB").list(ubList).listDate(dateList).build());
- list.add(CommonIcoVO.builder().name("UC").list(ucList).listDate(dateList).build());
- return list;
- }
- public CommonIcoVO getByDate(String name,Integer userId,Integer siteId,Date date){
- List<Object> objects = new ArrayList<>();
- objects.add(0.0);
- List<Object> dates = new ArrayList<>();
- dates.add("00:00:00");
- for (int i = 2; i < 24 ; i+=2) {
- //结束时间
- Date endTime = DateUtils.addHours(date, i);
- objects.add(getElectricity(userId,siteId,date,endTime));
- date = endTime;
- dates.add(DateUtils.getTime(date));
- }
- return CommonIcoVO.builder().name(name).list(objects).listDate(dates).build();
- }
- /**
- * 获取用电量
- * @param userId
- * @param siteId
- * @param startTime
- * @param endTime
- * @return
- */
- public Double getElectricity(Integer userId,Integer siteId,Date startTime,Date endTime){
- HtAnalogData ascHad = htAnalogDataMapper.selectByStartTime(startTime,endTime, siteId, userId);
- HtAnalogData descHad = htAnalogDataMapper.selectByEndTime(endTime,endTime, siteId, userId);
- Double ascHadEpp = Optional.ofNullable(ascHad).map(HtAnalogData::getEpp).orElse(0.00);
- Double descHadEpp = Optional.ofNullable(descHad).map(HtAnalogData::getEpp).orElse(0.00);
- return Arith.sub(descHadEpp,ascHadEpp);
- }
- /**
- * 汇总
- * @param list
- * @param handlingStatus
- * @param startTime
- * @param endTime
- * @param digitalStatus
- */
- public Long getCount(List<AlarmPower> list, Integer handlingStatus, Date startTime, Date endTime, Integer digitalStatus, String measName){
- return list.stream()
- .filter(alarmPower -> alarmPower.getSendingTime().after(startTime) && alarmPower.getSendingTime().before(endTime))
- .filter(alarmPower -> Optional.ofNullable(handlingStatus).map(hand -> hand.equals(alarmPower.getHandlingStatus())).orElse(true))
- .filter(alarmPower -> Optional.ofNullable(digitalStatus).map(dig -> dig.equals(alarmPower.getDigitalValue())).orElse(true))
- .filter(alarmPower -> Optional.ofNullable(measName).map(means -> means.equals(alarmPower.getMeasName())).orElse(true))
- .count();
- }
- }
|