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.*; /** *

* 服务实现类 *

* * @author ya * @since 2021-07-07 */ @Service public class HtAnalogDataServiceImpl extends AbstractCrudService 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 selectTrendByDate(Date date,Integer siteId) { Integer userId = SessionLocal.getUserId(); List 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 getDemandIco(Integer siteId) { Date date = DateUtils.getLastDayOfMonth(new Date()); List maxList = new ArrayList<>(); List minList = new ArrayList<>(); List avgList = new ArrayList<>(); List 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 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 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 getElectricIco(Integer siteId, Date date) { Integer userId = SessionLocal.getUserId(); List iaList = new ArrayList<>(); iaList.add(0.00); List ibList = new ArrayList<>(); ibList.add(0.00); List icList = new ArrayList<>(); icList.add(0.00); List uaList = new ArrayList<>(); uaList.add(0.00); List ubList = new ArrayList<>(); ubList.add(0.00); List ucList = new ArrayList<>(); ucList.add(0.00); List 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 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 objects = new ArrayList<>(); objects.add(0.0); List 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 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(); } }