package com.bizmatics.service.job; import com.bizmatics.common.core.util.Arith; import com.bizmatics.common.core.util.DateUtils; import com.bizmatics.common.spring.util.JsonUtils; import com.bizmatics.model.HadSiteStatic; import com.bizmatics.model.HtAnalogData; import com.bizmatics.persistence.mapper.HadSiteStaticMapper; import com.bizmatics.persistence.mapper.HtAnalogDataMapper; import com.bizmatics.service.vo.CommonIcoVO; import com.bizmatics.service.vo.TimeShareVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import java.util.*; /** * @author yq * @date 2021/7/17 19:41 */ @Slf4j @Service public class RatAnalogTask { @Autowired private HtAnalogDataMapper htAnalogDataMapper; @Autowired private HadSiteStaticMapper hadSiteStaticMapper; public void addAll(Date startTime,Date endTime){ addHadJobByDate(startTime,endTime); } @Scheduled(cron = "0 0 0 */1 * ?") public void addHadJob(){ Date newDate = new Date(); newDate = DateUtils.addDays(newDate,-1); Date dayStartTime = DateUtils.getDayStartTime(newDate); Date dayEndTime = DateUtils.getDayEndTime(newDate); log.info("addHadJob---startTime"+DateUtils.format(dayStartTime)); log.info("addHadJob---endTime"+DateUtils.format(dayEndTime)); addHadJobByDate(dayStartTime,dayEndTime); } public void addHadJobByDate(Date startTime,Date endTime){ List> dateList = htAnalogDataMapper.getDateList(startTime,endTime); log.info("addHadJob---总记录"+dateList.size()); for (Map map:dateList) { long currentTimeMillis = System.currentTimeMillis(); int siteId = Integer.parseInt(map.get("siteId").toString()); Date date = DateUtils.parseDate(map.get("dat").toString()); HadSiteStatic hadSiteStatic = hadSiteStaticMax(siteId, date); getSiteIco(siteId,date,hadSiteStatic); addTime(date,siteId,hadSiteStatic); hadSiteStaticMapper.insert(hadSiteStatic); long currentTimeMillis1 = System.currentTimeMillis(); log.info("addHadJob---处理一条数据需要的时间"+(currentTimeMillis1-currentTimeMillis)); } log.info("addHadJob---定时任务处理完成"); } /** * 添加最大值最小值平均值 * @param siteId * @param date * @return */ public HadSiteStatic hadSiteStaticMax(Integer siteId,Date date){ Date dayStartTime = DateUtils.getDayStartTime(date); Date dayEndTime = DateUtils.getDayEndTime(date); HadSiteStatic hadSiteStatic = null; Map map = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, dayStartTime, dayEndTime); if (null != map){ hadSiteStatic = new HadSiteStatic(); hadSiteStatic.setSiteId(siteId); hadSiteStatic.setHadTime(dayStartTime); hadSiteStatic.setMaxEpp(map.get("eppMax")); hadSiteStatic.setMinEpp(map.get("eppMin")); hadSiteStatic.setAvgEpp(map.get("eppAvg")); hadSiteStatic.setMaxDemand(map.get("demandMax")); hadSiteStatic.setMinDemand(map.get("demandMin")); hadSiteStatic.setAvgDemand(map.get("demandAvg")); } return hadSiteStatic; } /** * 获取图标集合 * @param siteId * @param dayStartTime * @param hadSiteStatic */ public void getSiteIco(Integer siteId,Date dayStartTime,HadSiteStatic hadSiteStatic){ List objects = new ArrayList<>(); objects.add(0.0); List hisList = new ArrayList<>(); List dates = new ArrayList<>(); dates.add("00:00:00"); for (int i = 2; i < 24 ; i+=2) { //结束时间 Date hours = DateUtils.setHours(dayStartTime, i); Map loadIco = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, dayStartTime, hours); if (null == loadIco){ objects.add(0.00); }else { objects.add(loadIco.get("eppMax")-loadIco.get("eppMin")); } HtAnalogData htAnalogData = htAnalogDataMapper.selectByEndTime(dayStartTime, hours, siteId, null); Optional.ofNullable(htAnalogData).ifPresent(hta -> { hta.setDataTime(hours); hisList.add(hta); }); dayStartTime = hours; dates.add(DateUtils.getTime(hours)); } CommonIcoVO build = CommonIcoVO.builder().name("").list(objects).listDate(dates).build(); hadSiteStatic.setLoadIco(JsonUtils.toJson(build)); hadSiteStatic.setHisIco(JsonUtils.toJson(hisList)); } public void addTime(Date date,Integer siteId,HadSiteStatic hadSiteStatic){ TimeShareVO timeShareVO = new TimeShareVO(); //尖峰时间 Date nine = DateUtils.setMinutes(DateUtils.setHours(date, 9), 30); Date eleven = DateUtils.setMinutes(DateUtils.setHours(date, 11), 30); Date nineTeen = DateUtils.setHours(date, 19); Date twoOne = DateUtils.setHours(date, 21); //高峰时间 Date eight = DateUtils.setMinutes(DateUtils.setHours(date, 8), 30); Date ten = DateUtils.setMinutes(DateUtils.setHours(date, 10), 30); Date oneEight = DateUtils.setHours(date, 18); Date oneNine = DateUtils.setHours(date, 19); Date twoThree = DateUtils.setHours(date, 23); //低谷 Date seven = DateUtils.setHours(DateUtils.addDays(date,1), 7); //平谷 Date oneTwo = DateUtils.setHours(date, 12); Date oneSeven = DateUtils.setHours(date, 17); //尖 Map nToe = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, nine, eleven); Map nTot = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, nineTeen, twoOne); timeShareVO.setNeed(Arith.add(timeSub(nToe),timeSub(nTot))); //高峰 Map eTot = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, eight, ten); Map hnTot = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, oneEight, oneNine); Map tTot = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, twoOne, twoThree); timeShareVO.setPeak(Arith.add(Arith.add(timeSub(eTot), timeSub(hnTot)), timeSub(tTot))); //低谷 Map tTos = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, twoThree, seven); timeShareVO.setGrain(timeSub(tTos)); //平谷 Map oToo = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, oneTwo, oneSeven); timeShareVO.setFlat(timeSub(oToo)); hadSiteStatic.setTimeShare(JsonUtils.toJson(timeShareVO)); } public Double timeSub(Map map){ return Optional.ofNullable(map).map(hadTotal -> Arith.sub(map.get("eppMax"),map.get("eppMin"))).orElse(0.00); } }