RatAnalogTask.java 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package com.bizmatics.service.job;
  2. import com.bizmatics.common.core.util.Arith;
  3. import com.bizmatics.common.core.util.DateUtils;
  4. import com.bizmatics.common.spring.util.JsonUtils;
  5. import com.bizmatics.model.HadSiteStatic;
  6. import com.bizmatics.model.HtAnalogData;
  7. import com.bizmatics.persistence.mapper.HadSiteStaticMapper;
  8. import com.bizmatics.persistence.mapper.HtAnalogDataMapper;
  9. import com.bizmatics.service.vo.CommonIcoVO;
  10. import com.bizmatics.service.vo.TimeShareVO;
  11. import lombok.extern.slf4j.Slf4j;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.scheduling.annotation.Scheduled;
  14. import org.springframework.stereotype.Service;
  15. import java.util.*;
  16. /**
  17. * @author yq
  18. * @date 2021/7/17 19:41
  19. */
  20. @Slf4j
  21. @Service
  22. public class RatAnalogTask {
  23. @Autowired
  24. private HtAnalogDataMapper htAnalogDataMapper;
  25. @Autowired
  26. private HadSiteStaticMapper hadSiteStaticMapper;
  27. public void addAll(Date startTime,Date endTime){
  28. addHadJobByDate(startTime,endTime);
  29. }
  30. @Scheduled(cron = "0 0 0 */1 * ?")
  31. public void addHadJob(){
  32. Date newDate = new Date();
  33. newDate = DateUtils.addDays(newDate,-1);
  34. Date dayStartTime = DateUtils.getDayStartTime(newDate);
  35. Date dayEndTime = DateUtils.getDayEndTime(newDate);
  36. log.info("addHadJob---startTime"+DateUtils.format(dayStartTime));
  37. log.info("addHadJob---endTime"+DateUtils.format(dayEndTime));
  38. addHadJobByDate(dayStartTime,dayEndTime);
  39. }
  40. public void addHadJobByDate(Date startTime,Date endTime){
  41. List<Map<String, Object>> dateList = htAnalogDataMapper.getDateList(startTime,endTime);
  42. log.info("addHadJob---总记录"+dateList.size());
  43. for (Map<String,Object> map:dateList) {
  44. long currentTimeMillis = System.currentTimeMillis();
  45. int siteId = Integer.parseInt(map.get("siteId").toString());
  46. Date date = DateUtils.parseDate(map.get("dat").toString());
  47. HadSiteStatic hadSiteStatic = hadSiteStaticMax(siteId, date);
  48. getSiteIco(siteId,date,hadSiteStatic);
  49. addTime(date,siteId,hadSiteStatic);
  50. hadSiteStaticMapper.insert(hadSiteStatic);
  51. long currentTimeMillis1 = System.currentTimeMillis();
  52. log.info("addHadJob---处理一条数据需要的时间"+(currentTimeMillis1-currentTimeMillis));
  53. }
  54. log.info("addHadJob---定时任务处理完成");
  55. }
  56. /**
  57. * 添加最大值最小值平均值
  58. * @param siteId
  59. * @param date
  60. * @return
  61. */
  62. public HadSiteStatic hadSiteStaticMax(Integer siteId,Date date){
  63. Date dayStartTime = DateUtils.getDayStartTime(date);
  64. Date dayEndTime = DateUtils.getDayEndTime(date);
  65. HadSiteStatic hadSiteStatic = null;
  66. Map<String, Double> map = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, dayStartTime, dayEndTime);
  67. if (null != map){
  68. hadSiteStatic = new HadSiteStatic();
  69. hadSiteStatic.setSiteId(siteId);
  70. hadSiteStatic.setHadTime(dayStartTime);
  71. hadSiteStatic.setMaxEpp(map.get("eppMax"));
  72. hadSiteStatic.setMinEpp(map.get("eppMin"));
  73. hadSiteStatic.setAvgEpp(map.get("eppAvg"));
  74. hadSiteStatic.setMaxDemand(map.get("demandMax"));
  75. hadSiteStatic.setMinDemand(map.get("demandMin"));
  76. hadSiteStatic.setAvgDemand(map.get("demandAvg"));
  77. }
  78. return hadSiteStatic;
  79. }
  80. /**
  81. * 获取图标集合
  82. * @param siteId
  83. * @param dayStartTime
  84. * @param hadSiteStatic
  85. */
  86. public void getSiteIco(Integer siteId,Date dayStartTime,HadSiteStatic hadSiteStatic){
  87. List<Object> objects = new ArrayList<>();
  88. objects.add(0.0);
  89. List<Object> hisList = new ArrayList<>();
  90. List<Object> dates = new ArrayList<>();
  91. dates.add("00:00:00");
  92. for (int i = 2; i < 24 ; i+=2) {
  93. //结束时间
  94. Date hours = DateUtils.setHours(dayStartTime, i);
  95. Map<String, Double> loadIco = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, dayStartTime, hours);
  96. if (null == loadIco){
  97. objects.add(0.00);
  98. }else {
  99. objects.add(loadIco.get("eppMax")-loadIco.get("eppMin"));
  100. }
  101. HtAnalogData htAnalogData = htAnalogDataMapper.selectByEndTime(dayStartTime, hours, siteId, null);
  102. Optional.ofNullable(htAnalogData).ifPresent(hta -> {
  103. hta.setDataTime(hours);
  104. hisList.add(hta);
  105. });
  106. dayStartTime = hours;
  107. dates.add(DateUtils.getTime(hours));
  108. }
  109. CommonIcoVO build = CommonIcoVO.builder().name("").list(objects).listDate(dates).build();
  110. hadSiteStatic.setLoadIco(JsonUtils.toJson(build));
  111. hadSiteStatic.setHisIco(JsonUtils.toJson(hisList));
  112. }
  113. public void addTime(Date date,Integer siteId,HadSiteStatic hadSiteStatic){
  114. TimeShareVO timeShareVO = new TimeShareVO();
  115. //尖峰时间
  116. Date nine = DateUtils.setMinutes(DateUtils.setHours(date, 9), 30);
  117. Date eleven = DateUtils.setMinutes(DateUtils.setHours(date, 11), 30);
  118. Date nineTeen = DateUtils.setHours(date, 19);
  119. Date twoOne = DateUtils.setHours(date, 21);
  120. //高峰时间
  121. Date eight = DateUtils.setMinutes(DateUtils.setHours(date, 8), 30);
  122. Date ten = DateUtils.setMinutes(DateUtils.setHours(date, 10), 30);
  123. Date oneEight = DateUtils.setHours(date, 18);
  124. Date oneNine = DateUtils.setHours(date, 19);
  125. Date twoThree = DateUtils.setHours(date, 23);
  126. //低谷
  127. Date seven = DateUtils.setHours(DateUtils.addDays(date,1), 7);
  128. //平谷
  129. Date oneTwo = DateUtils.setHours(date, 12);
  130. Date oneSeven = DateUtils.setHours(date, 17);
  131. //尖
  132. Map<String, Double> nToe = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, nine, eleven);
  133. Map<String, Double> nTot = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, nineTeen, twoOne);
  134. timeShareVO.setNeed(Arith.add(timeSub(nToe),timeSub(nTot)));
  135. //高峰
  136. Map<String, Double> eTot = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, eight, ten);
  137. Map<String, Double> hnTot = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, oneEight, oneNine);
  138. Map<String, Double> tTot = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, twoOne, twoThree);
  139. timeShareVO.setPeak(Arith.add(Arith.add(timeSub(eTot), timeSub(hnTot)), timeSub(tTot)));
  140. //低谷
  141. Map<String, Double> tTos = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, twoThree, seven);
  142. timeShareVO.setGrain(timeSub(tTos));
  143. //平谷
  144. Map<String, Double> oToo = htAnalogDataMapper.selectMaxAndMinAndAvg(siteId, oneTwo, oneSeven);
  145. timeShareVO.setFlat(timeSub(oToo));
  146. hadSiteStatic.setTimeShare(JsonUtils.toJson(timeShareVO));
  147. }
  148. public Double timeSub(Map<String,Double> map){
  149. return Optional.ofNullable(map).map(hadTotal -> Arith.sub(map.get("eppMax"),map.get("eppMin"))).orElse(0.00);
  150. }
  151. }