HtAnalogDataServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. package com.bizmatics.service.impl;
  2. import com.bizmatics.common.core.exception.BusinessException;
  3. import com.bizmatics.common.core.util.DateUtils;
  4. import com.bizmatics.model.AlarmPower;
  5. import com.bizmatics.model.HtAnalogData;
  6. import com.bizmatics.persistence.mapper.HtAnalogDataMapper;
  7. import com.bizmatics.service.HtAnalogDataService;
  8. import com.bizmatics.common.mvc.base.AbstractCrudService;
  9. import com.bizmatics.service.util.Arith;
  10. import com.bizmatics.service.util.SessionLocal;
  11. import com.bizmatics.service.vo.CommonIcoVO;
  12. import com.bizmatics.service.vo.HadCountVO;
  13. import com.bizmatics.service.vo.TimeShareVO;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import java.util.*;
  17. /**
  18. * <p>
  19. * 服务实现类
  20. * </p>
  21. *
  22. * @author ya
  23. * @since 2021-07-07
  24. */
  25. @Service
  26. public class HtAnalogDataServiceImpl extends AbstractCrudService<HtAnalogDataMapper, HtAnalogData> implements HtAnalogDataService {
  27. @Autowired
  28. private HtAnalogDataMapper htAnalogDataMapper;
  29. @Override
  30. public HadCountVO selectCount() {
  31. Integer userId = SessionLocal.getUserId();
  32. Date date = new Date();
  33. HadCountVO hadCountVO = new HadCountVO();
  34. hadCountVO.setDayCount(getElectricity(userId,null,DateUtils.getDayStartTime(date),date));
  35. hadCountVO.setMonthCount(getElectricity(userId,null,DateUtils.getFirstDayOfMonth(date),date));
  36. hadCountVO.setYearCount(getElectricity(userId,null,DateUtils.getBeginDayOfYear(date),date));
  37. return hadCountVO;
  38. }
  39. @Override
  40. public List<CommonIcoVO> selectTrendByDate(Date date,Integer siteId) {
  41. Integer userId = SessionLocal.getUserId();
  42. List<CommonIcoVO> list = new ArrayList<>();
  43. list.add(getByDate("today", userId, siteId, date));
  44. list.add(getByDate("yesterday", userId, siteId, DateUtils.addDays(date,-1)));
  45. return list;
  46. }
  47. @Override
  48. public HadCountVO getCountBySite(Integer siteId) {
  49. Date date = new Date();
  50. Integer userId = SessionLocal.getUserId();
  51. //当日开始时间
  52. Date firstDayOfDate = DateUtils.getDayStartTime(date);
  53. //当月开始时间
  54. Date firstDayOfMonth = DateUtils.getFirstDayOfMonth(date);
  55. //当年开始时间
  56. Date firstDayOfYear = DateUtils.getBeginDayOfYear(date);
  57. HadCountVO hadCountVO = new HadCountVO();
  58. hadCountVO.setDayCount(getElectricity(userId,siteId,firstDayOfDate,date));
  59. hadCountVO.setMonthCount(getElectricity(userId,siteId,firstDayOfMonth,date));
  60. hadCountVO.setYearCount(getElectricity(userId,siteId,firstDayOfYear,date));
  61. hadCountVO.setLastDayCount(getElectricity(userId,siteId,DateUtils.addDays(firstDayOfDate, -1),DateUtils.addDays(date, -1)));
  62. hadCountVO.setLastMonthCount(getElectricity(userId,siteId,DateUtils.addMonths(firstDayOfMonth, -1),DateUtils.addMonths(date, -1)));
  63. hadCountVO.setLastYearCount(getElectricity(userId,siteId,DateUtils.addYears(firstDayOfYear, -1),DateUtils.addYears(date, -1)));
  64. hadCountVO.setDayRadio(Optional.ofNullable(hadCountVO.getDayCount())
  65. .filter(dayCount -> 0.00 != dayCount)
  66. .map(dayCount -> Arith.div(hadCountVO.getLastDayCount(), dayCount))
  67. .orElse(0.00));
  68. hadCountVO.setMonthRadio(Optional.ofNullable(hadCountVO.getMonthCount())
  69. .filter(dayCount -> 0.00 != dayCount)
  70. .map(dayCount -> Arith.div(hadCountVO.getLastMonthCount(), dayCount))
  71. .orElse(0.00));
  72. hadCountVO.setYearRadio(Optional.ofNullable(hadCountVO.getYearCount())
  73. .filter(dayCount -> 0.00 != dayCount)
  74. .map(dayCount -> Arith.div(hadCountVO.getLastYearCount(), dayCount))
  75. .orElse(0.00));
  76. return hadCountVO;
  77. }
  78. @Override
  79. public TimeShareVO getTimeShare(Integer siteId, Date date) {
  80. Integer userId = SessionLocal.getUserId();
  81. TimeShareVO timeShareVO = new TimeShareVO();
  82. timeShareVO.setNeed(getElectricity(userId, siteId, DateUtils.setHours(date, 9), DateUtils.setHours(date, 12)));
  83. //高峰
  84. Double peakStart = getElectricity(userId, siteId, DateUtils.setHours(date, 8), DateUtils.setHours(date, 12));
  85. Double peakEnd = getElectricity(userId, siteId, DateUtils.setHours(date, 16), DateUtils.setHours(date, 20));
  86. timeShareVO.setPeak(peakStart+peakEnd);
  87. //平
  88. Double flatStart = getElectricity(userId, siteId, DateUtils.setHours(date, 6), DateUtils.setHours(date, 8));
  89. Double flatCentre = getElectricity(userId, siteId, DateUtils.setHours(date, 12), DateUtils.setHours(date, 16));
  90. Double flatEnd = getElectricity(userId, siteId, DateUtils.setHours(date, 20), DateUtils.setHours(date, 22));
  91. timeShareVO.setFlat(flatStart+flatCentre+flatEnd);
  92. timeShareVO.setGrain(getElectricity(userId, siteId, DateUtils.setHours(date, 22), DateUtils.setHours(DateUtils.addDays(date, 1), 6)));
  93. return timeShareVO;
  94. }
  95. @Override
  96. public List<CommonIcoVO> getDemandIco(Integer siteId) {
  97. Date date = DateUtils.getLastDayOfMonth(new Date());
  98. List<Object> maxList = new ArrayList<>();
  99. List<Object> minList = new ArrayList<>();
  100. List<Object> avgList = new ArrayList<>();
  101. List<Object> dateList = new ArrayList<>();
  102. for (int i = 1; i <= Integer.parseInt(DateUtils.getDay(date)); i++) {
  103. Date setDays = DateUtils.setDays(date, i);
  104. Date dayStartTime = DateUtils.getDayStartTime(setDays);
  105. Date dayEndTime = DateUtils.getDayEndTime(setDays);
  106. Map<String, Double> map = baseMapper.selectMaxAndMinAndAvg(siteId, dayStartTime,dayEndTime);
  107. maxList.add(Optional.ofNullable(map).map(max -> max.get("demandMax")).orElse(0.00));
  108. minList.add(Optional.ofNullable(map).map(max -> max.get("demandMin")).orElse(0.00));
  109. avgList.add(Optional.ofNullable(map).map(max -> max.get("demandAvd")).orElse(0.00));
  110. dateList.add(DateUtils.getDay(setDays));
  111. }
  112. List<CommonIcoVO> list = new ArrayList<>();
  113. list.add(CommonIcoVO.builder().name("MAX").list(maxList).listDate(dateList).build());
  114. list.add(CommonIcoVO.builder().name("MIN").list(minList).list(dateList).build());
  115. list.add(CommonIcoVO.builder().name("AVG").list(avgList).listDate(dateList).build());
  116. return list;
  117. }
  118. @Override
  119. public List<CommonIcoVO> getElectricIco(Integer siteId, Date date) {
  120. Integer userId = SessionLocal.getUserId();
  121. List<Object> iaList = new ArrayList<>();
  122. iaList.add(0.00);
  123. List<Object> ibList = new ArrayList<>();
  124. ibList.add(0.00);
  125. List<Object> icList = new ArrayList<>();
  126. icList.add(0.00);
  127. List<Object> uaList = new ArrayList<>();
  128. uaList.add(0.00);
  129. List<Object> ubList = new ArrayList<>();
  130. ubList.add(0.00);
  131. List<Object> ucList = new ArrayList<>();
  132. ucList.add(0.00);
  133. List<Object> dateList = new ArrayList<>();
  134. dateList.add("00:00:00");
  135. for (int i = 2; i < 24 ; i+=2) {
  136. //结束时间
  137. Date endTime = DateUtils.addHours(date, i);
  138. HtAnalogData htAnalogData = htAnalogDataMapper.selectByEndTime(date,endTime, siteId, userId);
  139. iaList.add(Optional.ofNullable(htAnalogData).map(had -> htAnalogData.getIa()).orElse(0.00));
  140. ibList.add(Optional.ofNullable(htAnalogData).map(had -> htAnalogData.getIb()).orElse(0.00));
  141. icList.add(Optional.ofNullable(htAnalogData).map(had -> htAnalogData.getIc()).orElse(0.00));
  142. uaList.add(Optional.ofNullable(htAnalogData).map(had -> htAnalogData.getUa()).orElse(0.00));
  143. ubList.add(Optional.ofNullable(htAnalogData).map(had -> htAnalogData.getUb()).orElse(0.00));
  144. ucList.add(Optional.ofNullable(htAnalogData).map(had -> htAnalogData.getUc()).orElse(0.00));
  145. date = endTime;
  146. dateList.add(DateUtils.getTime(endTime));
  147. }
  148. List<CommonIcoVO> list = new ArrayList<>();
  149. list.add(CommonIcoVO.builder().name("IA").list(iaList).listDate(dateList).build());
  150. list.add(CommonIcoVO.builder().name("IB").list(ibList).listDate(dateList).build());
  151. list.add(CommonIcoVO.builder().name("IC").list(icList).listDate(dateList).build());
  152. list.add(CommonIcoVO.builder().name("UA").list(uaList).listDate(dateList).build());
  153. list.add(CommonIcoVO.builder().name("UB").list(ubList).listDate(dateList).build());
  154. list.add(CommonIcoVO.builder().name("UC").list(ucList).listDate(dateList).build());
  155. return list;
  156. }
  157. public CommonIcoVO getByDate(String name,Integer userId,Integer siteId,Date date){
  158. List<Object> objects = new ArrayList<>();
  159. objects.add(0.0);
  160. List<Object> dates = new ArrayList<>();
  161. dates.add("00:00:00");
  162. for (int i = 2; i < 24 ; i+=2) {
  163. //结束时间
  164. Date endTime = DateUtils.addHours(date, i);
  165. objects.add(getElectricity(userId,siteId,date,endTime));
  166. date = endTime;
  167. dates.add(DateUtils.getTime(date));
  168. }
  169. return CommonIcoVO.builder().name(name).list(objects).listDate(dates).build();
  170. }
  171. /**
  172. * 获取用电量
  173. * @param userId
  174. * @param siteId
  175. * @param startTime
  176. * @param endTime
  177. * @return
  178. */
  179. public Double getElectricity(Integer userId,Integer siteId,Date startTime,Date endTime){
  180. HtAnalogData ascHad = htAnalogDataMapper.selectByStartTime(startTime,endTime, siteId, userId);
  181. HtAnalogData descHad = htAnalogDataMapper.selectByEndTime(endTime,endTime, siteId, userId);
  182. Double ascHadEpp = Optional.ofNullable(ascHad).map(HtAnalogData::getEpp).orElse(0.00);
  183. Double descHadEpp = Optional.ofNullable(descHad).map(HtAnalogData::getEpp).orElse(0.00);
  184. return Arith.sub(descHadEpp,ascHadEpp);
  185. }
  186. /**
  187. * 汇总
  188. * @param list
  189. * @param handlingStatus
  190. * @param startTime
  191. * @param endTime
  192. * @param digitalStatus
  193. */
  194. public Long getCount(List<AlarmPower> list, Integer handlingStatus, Date startTime, Date endTime, Integer digitalStatus, String measName){
  195. return list.stream()
  196. .filter(alarmPower -> alarmPower.getSendingTime().after(startTime) && alarmPower.getSendingTime().before(endTime))
  197. .filter(alarmPower -> Optional.ofNullable(handlingStatus).map(hand -> hand.equals(alarmPower.getHandlingStatus())).orElse(true))
  198. .filter(alarmPower -> Optional.ofNullable(digitalStatus).map(dig -> dig.equals(alarmPower.getDigitalValue())).orElse(true))
  199. .filter(alarmPower -> Optional.ofNullable(measName).map(means -> means.equals(alarmPower.getMeasName())).orElse(true))
  200. .count();
  201. }
  202. }