HtAnalogDataServiceImpl.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. package com.bizmatics.service.impl;
  2. import com.bizmatics.common.core.util.Arith;
  3. import com.bizmatics.common.core.util.DateUtils;
  4. import com.bizmatics.common.mvc.base.AbstractCrudService;
  5. import com.bizmatics.common.spring.util.JsonUtils;
  6. import com.bizmatics.model.HadSiteStatic;
  7. import com.bizmatics.model.HtAnalogData;
  8. import com.bizmatics.persistence.mapper.HtAnalogDataMapper;
  9. import com.bizmatics.service.HadSiteStaticService;
  10. import com.bizmatics.service.HtAnalogDataService;
  11. import com.bizmatics.service.util.SecurityUtils;
  12. import com.bizmatics.service.vo.CommonIcoVO;
  13. import com.bizmatics.service.vo.HadCountVO;
  14. import com.bizmatics.service.vo.TimeShareVO;
  15. import com.fasterxml.jackson.core.type.TypeReference;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Service;
  18. import java.util.ArrayList;
  19. import java.util.Date;
  20. import java.util.List;
  21. import java.util.Optional;
  22. /**
  23. * @author yq
  24. * @date 2021/7/20 16:49
  25. */
  26. @Service
  27. public class HtAnalogDataServiceImpl extends AbstractCrudService<HtAnalogDataMapper, HtAnalogData> implements HtAnalogDataService {
  28. @Autowired
  29. private HadSiteStaticService hadSiteStaticService;
  30. @Override
  31. public HadCountVO selectCount() {
  32. HadCountVO hadCountVO = new HadCountVO();
  33. Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
  34. Date date = new Date();
  35. hadCountVO.setDayCount(hadSiteStaticService.getCount(userId, DateUtils.getDayStartTime(date), date, null));
  36. hadCountVO.setMonthCount(hadSiteStaticService.getCount(userId, DateUtils.getFirstDayOfMonth(date), date, null));
  37. hadCountVO.setYearCount(hadSiteStaticService.getCount(userId, DateUtils.getBeginDayOfYear(date), date, null));
  38. return hadCountVO;
  39. }
  40. @Override
  41. public List<CommonIcoVO> selectTrendByDate(Integer siteId) {
  42. Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
  43. Date date = new Date();
  44. Date sTime = DateUtils.getDayStartTime(date);
  45. Date eTime = DateUtils.getDayEndTime(date);
  46. Date ysTime = DateUtils.addDays(sTime, -1);
  47. Date yeTime = DateUtils.addDays(eTime, -1);
  48. List<CommonIcoVO> list = new ArrayList<>();
  49. if (null != siteId) {
  50. list.add(getTreedBySite("昨日", siteId, ysTime, yeTime));
  51. list.add(getTreedBySite("今日", siteId, sTime, eTime));
  52. } else {
  53. list.add(getTrendOne("昨日", userId, ysTime, yeTime));
  54. list.add(getTrendOne("今日", userId, sTime, eTime));
  55. }
  56. return list;
  57. }
  58. public CommonIcoVO getTrendOne(String name, Integer userId, Date startTime, Date endTime) {
  59. List<HadSiteStatic> list = hadSiteStaticService.list(null, startTime, endTime, userId);
  60. List<Object> objects = new ArrayList<>();
  61. objects.add(0.0);
  62. List<Object> dates = new ArrayList<>();
  63. dates.add("00:00:00");
  64. for (int i = 2; i < 24; i += 2) {
  65. //结束时间
  66. Date hours = DateUtils.setHours(startTime, i);
  67. startTime = hours;
  68. dates.add(DateUtils.getTime(hours));
  69. Double hourCount = 0.00;
  70. for (HadSiteStatic hadSiteStatic : list) {
  71. CommonIcoVO commonIcoVO = JsonUtils.fromJson(hadSiteStatic.getLoadIco(), CommonIcoVO.class);
  72. List<Double> dataList = (List<Double>) commonIcoVO.getList();
  73. hourCount += dataList.get(i / 2);
  74. }
  75. objects.add(Arith.div(hourCount, 1, 2));
  76. }
  77. return CommonIcoVO.builder().name(name).list(objects).listDate(dates).build();
  78. }
  79. CommonIcoVO getTreedBySite(String name, Integer siteId, Date startTime, Date endTime) {
  80. Date sTime = DateUtils.getDayStartTime(startTime);
  81. Date eTime = DateUtils.getDayEndTime(endTime);
  82. HadSiteStatic hadSiteStatic = hadSiteStaticService.oneBySite(siteId, sTime, eTime);
  83. CommonIcoVO commonIcoVO = null;
  84. if (null != hadSiteStatic) {
  85. commonIcoVO = JsonUtils.fromJson(hadSiteStatic.getLoadIco(), CommonIcoVO.class);
  86. commonIcoVO.setName(name);
  87. } else {
  88. List<Object> objects = new ArrayList<>();
  89. objects.add(0.0);
  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(startTime, i);
  95. objects.add(0.0);
  96. startTime = hours;
  97. dates.add(DateUtils.getTime(hours));
  98. }
  99. commonIcoVO = CommonIcoVO.builder().name(name).list(objects).listDate(dates).build();
  100. }
  101. return commonIcoVO;
  102. }
  103. @Override
  104. public List<CommonIcoVO> selectTrendByMonth() {
  105. Date date = new Date();
  106. Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
  107. List<CommonIcoVO> list = new ArrayList<>();
  108. list.add(selectTreedMonthOne(DateUtils.getLastDayOfMonth(DateUtils.addMonths(date, -1)), userId, "上月趋势图"));
  109. list.add(selectTreedMonthOne(DateUtils.getLastDayOfMonth(date), userId, "当月趋势图"));
  110. return list;
  111. }
  112. public CommonIcoVO selectTreedMonthOne(Date date, Integer userId, String name) {
  113. List<Object> objects = new ArrayList<>();
  114. List<Object> dateList = new ArrayList<>();
  115. for (int i = 1; i <= Integer.parseInt(DateUtils.getDay(date)); i++) {
  116. Date setDays = DateUtils.setDays(date, i);
  117. Date dayStartTime = DateUtils.getDayStartTime(setDays);
  118. Date dayEndTime = DateUtils.getDayEndTime(setDays);
  119. objects.add(hadSiteStaticService.getCount(userId, dayStartTime, dayEndTime, null));
  120. dateList.add(DateUtils.getDay(setDays));
  121. }
  122. return CommonIcoVO.builder().name(name).list(objects).listDate(dateList).build();
  123. }
  124. @Override
  125. public HadCountVO getCountBySite(Integer siteId) {
  126. Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
  127. Date date = new Date();
  128. //当日开始时间
  129. Date firstDayOfDate = DateUtils.getDayStartTime(date);
  130. //当月开始时间
  131. Date firstDayOfMonth = DateUtils.getFirstDayOfMonth(date);
  132. //当年开始时间
  133. Date firstDayOfYear = DateUtils.getBeginDayOfYear(date);
  134. HadCountVO hadCountVO = new HadCountVO();
  135. hadCountVO.setDayCount(hadSiteStaticService.getCount(userId, DateUtils.getDayStartTime(date), date, siteId));
  136. hadCountVO.setMonthCount(hadSiteStaticService.getCount(userId, DateUtils.getFirstDayOfMonth(date), date, siteId));
  137. hadCountVO.setYearCount(hadSiteStaticService.getCount(userId, DateUtils.getBeginDayOfYear(date), date, siteId));
  138. hadCountVO.setLastDayCount(hadSiteStaticService.getCount(userId, DateUtils.addDays(firstDayOfDate, -1), DateUtils.addDays(date, -1), siteId));
  139. hadCountVO.setLastMonthCount(hadSiteStaticService.getCount(userId, DateUtils.addMonths(firstDayOfMonth, -1), DateUtils.addMonths(date, -1), siteId));
  140. hadCountVO.setLastYearCount(hadSiteStaticService.getCount(userId, DateUtils.addYears(firstDayOfYear, -1), DateUtils.addYears(date, -1), siteId));
  141. hadCountVO.setDayRadio(Optional.ofNullable(hadCountVO.getDayCount())
  142. .filter(dayCount -> 0.00 != dayCount)
  143. .map(dayCount -> Arith.div(hadCountVO.getLastDayCount(), dayCount))
  144. .orElse(0.00));
  145. hadCountVO.setMonthRadio(Optional.ofNullable(hadCountVO.getMonthCount())
  146. .filter(dayCount -> 0.00 != dayCount)
  147. .map(dayCount -> Arith.div(hadCountVO.getLastMonthCount(), dayCount))
  148. .orElse(0.00));
  149. hadCountVO.setYearRadio(Optional.ofNullable(hadCountVO.getYearCount())
  150. .filter(dayCount -> 0.00 != dayCount)
  151. .map(dayCount -> Arith.div(hadCountVO.getLastYearCount(), dayCount))
  152. .orElse(0.00));
  153. return hadCountVO;
  154. }
  155. @Override
  156. public TimeShareVO getTimeShare(Integer siteId, Integer type) {
  157. TimeShareVO timeShareVO = new TimeShareVO();
  158. Date date = new Date();
  159. if (0 == type) {
  160. HadSiteStatic hadSiteStatic = hadSiteStaticService.oneBySite(siteId, date, date);
  161. Optional.ofNullable(hadSiteStatic).ifPresent(hads -> JsonUtils.fromJson(hads.getTimeShare(), timeShareVO.getClass()));
  162. } else {
  163. List<HadSiteStatic> list = hadSiteStaticService.list(siteId, DateUtils.getFirstDayOfMonth(date), date);
  164. for (HadSiteStatic hadSiteStatic : list) {
  165. Optional.ofNullable(hadSiteStatic.getTimeShare())
  166. .ifPresent(has -> {
  167. TimeShareVO ts = JsonUtils.fromJson(has, TimeShareVO.class);
  168. timeShareVO.setFlat(Arith.add(timeShareVO.getFlat(), ts.getFlat()));
  169. timeShareVO.setPeak(Arith.add(timeShareVO.getPeak(), ts.getPeak()));
  170. timeShareVO.setNeed(Arith.add(timeShareVO.getNeed(), ts.getNeed()));
  171. timeShareVO.setGrain(Arith.add(timeShareVO.getGrain(), ts.getGrain()));
  172. });
  173. }
  174. }
  175. return timeShareVO;
  176. }
  177. @Override
  178. public List<CommonIcoVO> getDemandIco(Integer siteId) {
  179. Date date = new Date();
  180. List<Object> maxList = new ArrayList<>();
  181. List<Object> minList = new ArrayList<>();
  182. List<Object> avgList = new ArrayList<>();
  183. List<Object> dateList = new ArrayList<>();
  184. List<HadSiteStatic> hadSiteStatics = hadSiteStaticService.list(siteId, DateUtils.getFirstDayOfMonth(date), date);
  185. for (int i = 1; i <= Integer.parseInt(DateUtils.getDay(date)); i++) {
  186. Date setDays = DateUtils.setDays(date, i);
  187. Date dayStartTime = DateUtils.getDayStartTime(setDays);
  188. Date dayEndTime = DateUtils.getDayEndTime(setDays);
  189. maxList.add(hadSiteStatics.stream()
  190. .filter(hadSiteStatic -> DateUtils.isEffectiveDate(hadSiteStatic.getHadTime(), dayStartTime, dayEndTime)
  191. ).findFirst().map(HadSiteStatic::getMaxDemand).orElse(0.00));
  192. minList.add(hadSiteStatics.stream()
  193. .filter(hadSiteStatic -> DateUtils.isEffectiveDate(hadSiteStatic.getHadTime(), dayStartTime, dayEndTime)
  194. ).findFirst().map(HadSiteStatic::getMinDemand).orElse(0.00));
  195. avgList.add(hadSiteStatics.stream()
  196. .filter(hadSiteStatic -> DateUtils.isEffectiveDate(hadSiteStatic.getHadTime(), dayStartTime, dayEndTime)
  197. ).findFirst().map(HadSiteStatic::getAvgDemand).orElse(0.00));
  198. dateList.add(DateUtils.getDay(setDays));
  199. }
  200. List<CommonIcoVO> list = new ArrayList<>();
  201. list.add(CommonIcoVO.builder().name("最大值").list(maxList).listDate(dateList).build());
  202. list.add(CommonIcoVO.builder().name("最小值").list(minList).listDate(dateList).build());
  203. list.add(CommonIcoVO.builder().name("平均值").list(avgList).listDate(dateList).build());
  204. return list;
  205. }
  206. @Override
  207. public List<CommonIcoVO> getElectricIco(Integer siteId, Date date) {
  208. List<Object> iaList = new ArrayList<>();
  209. iaList.add(0.00);
  210. List<Object> ibList = new ArrayList<>();
  211. ibList.add(0.00);
  212. List<Object> icList = new ArrayList<>();
  213. icList.add(0.00);
  214. List<Object> uaList = new ArrayList<>();
  215. uaList.add(0.00);
  216. List<Object> ubList = new ArrayList<>();
  217. ubList.add(0.00);
  218. List<Object> ucList = new ArrayList<>();
  219. ucList.add(0.00);
  220. List<Object> dateList = new ArrayList<>();
  221. dateList.add("00:00:00");
  222. HadSiteStatic hadSiteStatic = hadSiteStaticService.oneBySite(siteId, date, date);
  223. List<HtAnalogData> htList = Optional.ofNullable(hadSiteStatic)
  224. .map(HadSiteStatic::getHisIco)
  225. .map(his -> JsonUtils.fromJson(hadSiteStatic.getHisIco(), new TypeReference<List<HtAnalogData>>() {
  226. }))
  227. .orElse(null);
  228. for (int i = 2; i < 24; i += 2) {
  229. Date hours = DateUtils.setHours(date, i);
  230. date = hours;
  231. Date finalDate = date;
  232. Optional<HtAnalogData> htAnalogData = Optional.ofNullable(htList).flatMap(hts -> hts.stream()
  233. .filter(hads -> DateUtils.isEffectiveDate(hads.getDataTime(), finalDate, hours))
  234. .findFirst());
  235. iaList.add(htAnalogData.map(HtAnalogData::getIa).orElse(0.00));
  236. ibList.add(htAnalogData.map(HtAnalogData::getIb).orElse(0.00));
  237. icList.add(htAnalogData.map(HtAnalogData::getIc).orElse(0.00));
  238. uaList.add(htAnalogData.map(HtAnalogData::getUa).orElse(0.00));
  239. ubList.add(htAnalogData.map(HtAnalogData::getUb).orElse(0.00));
  240. ucList.add(htAnalogData.map(HtAnalogData::getUc).orElse(0.00));
  241. dateList.add(htAnalogData.map(HtAnalogData::getDataTime).map(s -> DateUtils.getTime(hours)).orElse(DateUtils.getTime(hours)));
  242. }
  243. List<CommonIcoVO> list = new ArrayList<>();
  244. list.add(CommonIcoVO.builder().name("IA").list(iaList).listDate(dateList).build());
  245. list.add(CommonIcoVO.builder().name("IB").list(ibList).listDate(dateList).build());
  246. list.add(CommonIcoVO.builder().name("IC").list(icList).listDate(dateList).build());
  247. list.add(CommonIcoVO.builder().name("UA").list(uaList).listDate(dateList).build());
  248. list.add(CommonIcoVO.builder().name("UB").list(ubList).listDate(dateList).build());
  249. list.add(CommonIcoVO.builder().name("UC").list(ucList).listDate(dateList).build());
  250. return list;
  251. }
  252. }