HtAnalogDataServiceImpl.java 14 KB

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