AlarmPowerServiceImpl.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. package com.bizmatics.service.impl;
  2. import cn.afterturn.easypoi.excel.ExcelExportUtil;
  3. import cn.afterturn.easypoi.excel.entity.ExportParams;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.bizmatics.common.core.bean.CommonPage;
  6. import com.bizmatics.common.core.exception.BusinessException;
  7. import com.bizmatics.common.core.util.BeanMapperUtils;
  8. import com.bizmatics.common.core.util.DateUtils;
  9. import com.bizmatics.common.core.util.FileUtils;
  10. import com.bizmatics.common.mvc.base.AbstractCrudService;
  11. import com.bizmatics.common.spring.util.GlobalUtils;
  12. import com.bizmatics.model.AlarmPower;
  13. import com.bizmatics.persistence.mapper.AlarmPowerMapper;
  14. import com.bizmatics.service.AlarmPowerService;
  15. import com.bizmatics.service.enums.AlarmGradeCode;
  16. import com.bizmatics.service.util.SecurityUtils;
  17. import com.bizmatics.service.vo.AlarmGradeVO;
  18. import com.bizmatics.service.vo.AlarmPowerExportVO;
  19. import com.bizmatics.service.vo.ApCountVO;
  20. import com.bizmatics.service.vo.CommonIcoVO;
  21. import org.apache.poi.ss.usermodel.Workbook;
  22. import org.springframework.stereotype.Service;
  23. import org.springframework.util.CollectionUtils;
  24. import java.io.File;
  25. import java.io.FileOutputStream;
  26. import java.io.IOException;
  27. import java.text.SimpleDateFormat;
  28. import java.util.*;
  29. import java.util.concurrent.TimeUnit;
  30. import java.util.stream.Collectors;
  31. /**
  32. * <p>
  33. * 电力告警 服务实现类
  34. * </p>
  35. *
  36. * @author ya
  37. * @since 2021-07-07
  38. */
  39. @Service
  40. public class AlarmPowerServiceImpl extends AbstractCrudService<AlarmPowerMapper, AlarmPower> implements AlarmPowerService {
  41. @Override
  42. public ApCountVO selectCount(Integer siteId, Date startTime, Date endTime) {
  43. Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
  44. ApCountVO apCountVo = new ApCountVO();
  45. apCountVo.setCount(baseMapper.selectCount(userId, siteId, null, startTime, endTime, null, null));
  46. apCountVo.setUnCount(baseMapper.selectCount(userId, siteId, 0, startTime, endTime, null, null));
  47. return apCountVo;
  48. }
  49. @Override
  50. public List<CommonIcoVO> selectByDate(Date startTime, Date endTime, Integer siteId) {
  51. List<Object> faultList = new ArrayList<>();
  52. List<Object> rushList = new ArrayList<>();
  53. List<Object> noDisposeList = new ArrayList<>();
  54. List<Object> dateList = new ArrayList<>();
  55. Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
  56. List<AlarmPower> alarmPowers = baseMapper.list(userId, siteId, null, startTime, endTime, null, null);
  57. for (int i = 0; i < DateUtils.getDistanceDayOfTwoDate(startTime, endTime); i++) {
  58. Date setDays = DateUtils.addDays(startTime, i);
  59. Date dayStartTime = DateUtils.getDayStartTime(setDays);
  60. Date dayEndTime = DateUtils.getDayEndTime(setDays);
  61. faultList.add(getCount(alarmPowers, null, dayStartTime, dayEndTime, null, null));
  62. rushList.add(getCount(alarmPowers, 1, dayStartTime, dayEndTime, null, null));
  63. noDisposeList.add(getCount(alarmPowers, 0, dayStartTime, dayEndTime, null, null));
  64. dateList.add(DateUtils.getMonth(setDays) + "-" + DateUtils.getDay(setDays));
  65. }
  66. List<CommonIcoVO> list = new ArrayList<>();
  67. list.add(CommonIcoVO.builder().name("故障数量").list(faultList).listDate(dateList).build());
  68. list.add(CommonIcoVO.builder().name("抢修数量").list(rushList).listDate(dateList).build());
  69. list.add(CommonIcoVO.builder().name("未处理数量").list(noDisposeList).listDate(dateList).build());
  70. return list;
  71. }
  72. @Override
  73. public CommonPage<AlarmPower> page(Date startTime, Date endTime, Integer status, Integer siteId, Integer current, Integer size) {
  74. Page<AlarmPower> page = new Page<>(current, size);
  75. Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
  76. page = baseMapper.page(page, userId, siteId, status, startTime, endTime);
  77. return this.ToCommonPage(page);
  78. }
  79. @Override
  80. public CommonPage<AlarmGradeVO> alarmGradeCount(Integer siteId, Date startTime, Date endTime,Integer current,Integer size) {
  81. Page<Map<String,Object>> page = new Page<>(current,size);
  82. Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
  83. List<String> otherGrads = Arrays.stream(AlarmGradeCode.values())
  84. .filter(alarmGradeCode -> alarmGradeCode.name().equals(AlarmGradeCode.DevOffline.name()))
  85. .map(Enum::name).collect(Collectors.toList());
  86. List<String> oneGrads = Arrays.stream(AlarmGradeCode.values())
  87. .filter(alarmGradeCode -> !alarmGradeCode.name().equals(AlarmGradeCode.DevOffline.name()))
  88. .map(Enum::name).collect(Collectors.toList());
  89. page = baseMapper.gradeSiteList(page, userId, siteId, startTime, endTime, oneGrads, otherGrads);
  90. List<AlarmGradeVO> list = new ArrayList<>();
  91. page.getRecords().forEach(map -> list.add(enhanceAlarmGradeVo(map)));
  92. return new CommonPage<>(list,page.getTotal(),page.getSize(),page.getCurrent());
  93. }
  94. @Override
  95. public CommonPage<AlarmPower> alarmGradeList(Integer siteId, Date startTime, Date endTime, Integer current, Integer size, Integer type) {
  96. List<String> gradeList = null;
  97. //1级告警
  98. if (1 == type){
  99. gradeList = Arrays.stream(AlarmGradeCode.values())
  100. .filter(alarmGradeCode -> alarmGradeCode.name().equals(AlarmGradeCode.DevOffline.name()))
  101. .map(Enum::name).collect(Collectors.toList());
  102. }else if (2 == type){
  103. gradeList = Arrays.stream(AlarmGradeCode.values())
  104. .map(Enum::name).collect(Collectors.toList());
  105. }else if (3 == type){
  106. gradeList = Arrays.stream(AlarmGradeCode.values())
  107. .filter(alarmGradeCode -> alarmGradeCode.name().equals(AlarmGradeCode.DevOffline.name()))
  108. .map(Enum::name).collect(Collectors.toList());
  109. }
  110. Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
  111. Page<AlarmPower> page = new Page<>(current,size);
  112. page = baseMapper.gradeList(page,userId,siteId,startTime,endTime,gradeList,type);
  113. return ToCommonPage(page);
  114. }
  115. public AlarmGradeVO enhanceAlarmGradeVo(Map<String,Object> map){
  116. AlarmGradeVO alarmGradeVO = new AlarmGradeVO();
  117. alarmGradeVO.setSiteId(Integer.parseInt(map.get("siteId").toString()));
  118. alarmGradeVO.setSiteName(map.get("siteName").toString());
  119. alarmGradeVO.setTotalGrade(Integer.parseInt(map.get("countGrade").toString()));
  120. alarmGradeVO.setOneGrade(Integer.parseInt(map.get("oneGrade").toString()));
  121. alarmGradeVO.setOtherGrade(Integer.parseInt(map.get("otherGrade").toString()));
  122. alarmGradeVO.setTwoGrade(alarmGradeVO.getTotalGrade()-alarmGradeVO.getOneGrade()-alarmGradeVO.getOtherGrade());
  123. return alarmGradeVO;
  124. }
  125. @Override
  126. public List<Map<String, Object>> getLoopStatusList(Integer siteId) {
  127. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  128. List<Map<String, Object>> list = new ArrayList<>();
  129. List<AlarmPower> loopStatusListMap = baseMapper.getLoopStatusListMap(siteId);
  130. int int1 = 0;
  131. int int12 = 0;
  132. Map<String, Object> map = new HashMap<>();
  133. loopStatusListMap.forEach(alarmPower -> {
  134. // if (alarmPower.getDigitalValue() == 0){
  135. // String time1 = formatter.format(alarmPower.getSoeTime());
  136. // }else if(alarmPower.getDigitalValue() == 1){
  137. // String time2 = formatter.format(alarmPower.getSoeTime());
  138. // }
  139. if (alarmPower.getDigitalValue() == 0) {
  140. // Duration differenceValue = Duration.between(time1 ,time2 );
  141. // 获取的是两个时间相差的分钟数,如果想要相差小时数就调用toHours()
  142. // Long minutesTime = differenceValue .toMinutes();
  143. }
  144. });
  145. // Object value = LoopStatusList.get("LoadLive");
  146. // int day_count = baseMapper.getOffCountDMap(siteId);
  147. // int month_count = baseMapper.getOffCountMMap(siteId);
  148. // Map<String,Object> map = new HashMap<>();
  149. // map.put("LoadLive",value);
  150. // map.put("day_count","day_count");
  151. // map.put("month_count","month_count");
  152. // list.add(map);
  153. // Iterator<String> it = radMap.keySet().iterator();
  154. // int duration=0;
  155. // for (String name:LoopStatusList.keySet()) {
  156. //// String a =formatter.;
  157. //// LoopStatusList.get("sending_time");
  158. //
  159. // }
  160. return list;
  161. }
  162. @Override
  163. public String export(Date startTime, Date endTime, Integer status, Integer siteId) {
  164. Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
  165. Workbook workbook = null;
  166. File file = null;
  167. try {
  168. ExportParams params = new ExportParams(null, "电力告警");
  169. workbook = ExcelExportUtil.exportBigExcel(params, AlarmPowerExportVO.class,
  170. (o, i) -> {
  171. Page<AlarmPower> page = new Page<>(i, 30);
  172. page = baseMapper.page(page, userId, siteId, status, startTime, endTime);
  173. return new ArrayList<>(BeanMapperUtils.mapList(page.getRecords(), AlarmPower.class, AlarmPowerExportVO.class));
  174. }, null);
  175. if (null != workbook) {
  176. file = FileUtils.getFile(GlobalUtils.getTempBaseDir(), String.format("%s-%s.xlsx", "电力告警", System.currentTimeMillis() + ""));
  177. FileUtils.createFile(file.getAbsolutePath());
  178. FileOutputStream allListingFileOutputStream = new FileOutputStream(file);
  179. workbook.write(allListingFileOutputStream);
  180. } else {
  181. throw new BusinessException("表格数据为空");
  182. }
  183. } catch (Exception e) {
  184. log.error("导出文件失败", e);
  185. throw new BusinessException("导出文件失败");
  186. } finally {
  187. if (workbook != null) {
  188. try {
  189. workbook.close();
  190. } catch (IOException e) {
  191. log.error("===export spec=== 关闭workbook失败", e);
  192. }
  193. }
  194. }
  195. return file.getName();
  196. }
  197. @Override
  198. public List<CommonIcoVO> runStatus(Date startTime, Date endTime, Integer siteId) {
  199. Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
  200. List<CommonIcoVO> list = new ArrayList<>();
  201. List<Object> offCounts = new ArrayList<>();
  202. List<Object> offDateS = new ArrayList<>();
  203. List<Object> runStatus = new ArrayList<>();
  204. List<Object> runDates = new ArrayList<>();
  205. long offTime = 0;
  206. List<AlarmPower> alarmPowers = baseMapper.list(userId, siteId, null, startTime, endTime, "LoadLive", null);
  207. if (!CollectionUtils.isEmpty(list)) {
  208. Date forEndTime;
  209. do {
  210. Date dayStartTime = DateUtils.getDayStartTime(startTime);
  211. Date dayEndTime = DateUtils.getDayEndTime(startTime);
  212. offCounts.add(getCount(alarmPowers, null, dayStartTime, dayEndTime, null, null));
  213. forEndTime = dayEndTime;
  214. offDateS.add(DateUtils.format(endTime, DateUtils.PARSE_PATTERNS[8]));
  215. } while (forEndTime.before(endTime));
  216. //上次off时间
  217. long offStartTime = 0;
  218. //off状态
  219. Integer flag = null;
  220. for (AlarmPower alarmPower : alarmPowers) {
  221. Integer digitalValue = alarmPower.getDigitalValue();
  222. Date sendingTime = alarmPower.getSendingTime();
  223. runStatus.add(digitalValue);
  224. runDates.add(DateUtils.format(sendingTime, DateUtils.PARSE_PATTERNS[5]));
  225. if (1 == digitalValue) {
  226. if (null == flag || 0 == flag) {
  227. offStartTime = sendingTime.getTime();
  228. }
  229. } else {
  230. if (null != flag && 1 == flag) {
  231. offTime += sendingTime.getTime() - offStartTime;
  232. }
  233. }
  234. flag = alarmPower.getDigitalValue();
  235. }
  236. }
  237. list.add(CommonIcoVO.builder().name("offCount").list(offCounts).listDate(offDateS).build());
  238. list.add(CommonIcoVO.builder().name("runStates").list(runStatus).listDate(runDates).build());
  239. list.add(CommonIcoVO.builder().name("offTime").list(TimeUnit.MILLISECONDS.toMinutes(offTime)).build());
  240. return list;
  241. }
  242. /**
  243. * 汇总
  244. *
  245. * @param list
  246. * @param handlingStatus
  247. * @param startTime
  248. * @param endTime
  249. * @param digitalStatus
  250. */
  251. public Long getCount(List<AlarmPower> list, Integer handlingStatus, Date startTime, Date endTime, Integer digitalStatus, String measName) {
  252. return list.stream()
  253. .filter(alarmPower -> alarmPower.getSendingTime().after(startTime) && alarmPower.getSendingTime().before(endTime))
  254. .filter(alarmPower -> Optional.ofNullable(handlingStatus).map(hand -> hand.equals(alarmPower.getHandlingStatus())).orElse(true))
  255. .filter(alarmPower -> Optional.ofNullable(digitalStatus).map(dig -> dig.equals(alarmPower.getDigitalValue())).orElse(true))
  256. .filter(alarmPower -> Optional.ofNullable(measName).map(means -> means.equals(alarmPower.getMeasName())).orElse(true))
  257. .count();
  258. }
  259. }