AlarmPowerServiceImpl.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  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.util.UserUtil;
  16. import com.bizmatics.service.vo.AlarmPowerExportVO;
  17. import com.bizmatics.service.vo.ApCountVO;
  18. import com.bizmatics.service.vo.CommonIcoVO;
  19. import org.apache.poi.ss.usermodel.Workbook;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.util.CollectionUtils;
  22. import java.io.File;
  23. import java.io.FileOutputStream;
  24. import java.io.IOException;
  25. import java.text.SimpleDateFormat;
  26. import java.util.*;
  27. import java.util.concurrent.TimeUnit;
  28. /**
  29. * <p>
  30. * 电力告警 服务实现类
  31. * </p>
  32. *
  33. * @author ya
  34. * @since 2021-07-07
  35. */
  36. @Service
  37. public class AlarmPowerServiceImpl extends AbstractCrudService<AlarmPowerMapper, AlarmPower> implements AlarmPowerService {
  38. @Override
  39. public ApCountVO selectCount(Integer siteId,Date startTime,Date endTime) {
  40. Integer userId = UserUtil.getUserId();
  41. ApCountVO apCountVo = new ApCountVO();
  42. apCountVo.setCount(baseMapper.selectCount(userId, siteId, null, startTime, endTime, null, null));
  43. apCountVo.setUnCount(baseMapper.selectCount(userId, siteId, 0, startTime, endTime, null, null));
  44. return apCountVo;
  45. }
  46. @Override
  47. public List<CommonIcoVO> selectByDate(Date startTime,Date endTime,Integer siteId) {
  48. List<Object> faultList = new ArrayList<>();
  49. List<Object> rushList = new ArrayList<>();
  50. List<Object> noDisposeList = new ArrayList<>();
  51. List<Object> dateList = new ArrayList<>();
  52. Integer userId = UserUtil.getUserId();
  53. List<AlarmPower> alarmPowers = baseMapper.list(userId, siteId, null, startTime, endTime, null, null);
  54. for (int i = 0; i < DateUtils.getDistanceDayOfTwoDate(startTime,endTime); i++) {
  55. Date setDays = DateUtils.addDays(startTime, i);
  56. Date dayStartTime = DateUtils.getDayStartTime(setDays);
  57. Date dayEndTime = DateUtils.getDayEndTime(setDays);
  58. faultList.add(getCount(alarmPowers,null,dayStartTime,dayEndTime,null,null));
  59. rushList.add(getCount(alarmPowers,1,dayStartTime,dayEndTime,null,null));
  60. noDisposeList.add(getCount(alarmPowers,0,dayStartTime,dayEndTime,null,null));
  61. dateList.add(DateUtils.getMonth(setDays)+"-"+DateUtils.getDay(setDays));
  62. }
  63. List<CommonIcoVO> list = new ArrayList<>();
  64. list.add(CommonIcoVO.builder().name("故障数量").list(faultList).listDate(dateList).build());
  65. list.add(CommonIcoVO.builder().name("抢修数量").list(rushList).listDate(dateList).build());
  66. list.add(CommonIcoVO.builder().name("未处理数量").list(noDisposeList).listDate(dateList).build());
  67. return list;
  68. }
  69. @Override
  70. public CommonPage<AlarmPower> page(Date startTime, Date endTime, Integer status, Integer siteId,Integer current,Integer size) {
  71. Page<AlarmPower> page = new Page<>(current, size);
  72. page = baseMapper.page(page,UserUtil.getUserId(),siteId,status,startTime,endTime);
  73. return this.ToCommonPage(page);
  74. }
  75. @Override
  76. public List<Map<String, Object>> getLoopStatusList(Integer siteId) {
  77. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  78. List<Map<String, Object>> list = new ArrayList<>();
  79. List<AlarmPower> loopStatusListMap = baseMapper.getLoopStatusListMap(siteId);
  80. int int1 = 0;
  81. int int12= 0;
  82. Map<String,Object> map = new HashMap<>();
  83. loopStatusListMap.forEach(alarmPower -> {
  84. // if (alarmPower.getDigitalValue() == 0){
  85. // String time1 = formatter.format(alarmPower.getSoeTime());
  86. // }else if(alarmPower.getDigitalValue() == 1){
  87. // String time2 = formatter.format(alarmPower.getSoeTime());
  88. // }
  89. if (alarmPower.getDigitalValue() == 0){
  90. // Duration differenceValue = Duration.between(time1 ,time2 );
  91. // 获取的是两个时间相差的分钟数,如果想要相差小时数就调用toHours()
  92. // Long minutesTime = differenceValue .toMinutes();
  93. }
  94. });
  95. // Object value = LoopStatusList.get("LoadLive");
  96. // int day_count = baseMapper.getOffCountDMap(siteId);
  97. // int month_count = baseMapper.getOffCountMMap(siteId);
  98. // Map<String,Object> map = new HashMap<>();
  99. // map.put("LoadLive",value);
  100. // map.put("day_count","day_count");
  101. // map.put("month_count","month_count");
  102. // list.add(map);
  103. // Iterator<String> it = radMap.keySet().iterator();
  104. // int duration=0;
  105. // for (String name:LoopStatusList.keySet()) {
  106. //// String a =formatter.;
  107. //// LoopStatusList.get("sending_time");
  108. //
  109. // }
  110. return list;
  111. }
  112. @Override
  113. public String export(Date startTime, Date endTime, Integer status, Integer siteId){
  114. Integer userId = UserUtil.getUserId();
  115. Workbook workbook = null;
  116. File file = null;
  117. try {
  118. ExportParams params = new ExportParams(null, "电力告警");
  119. workbook = ExcelExportUtil.exportBigExcel(params, AlarmPowerExportVO.class,
  120. (o, i) -> {
  121. Page<AlarmPower> page = new Page<>(i, 30);
  122. page = baseMapper.page(page, userId, siteId, status, startTime, endTime);
  123. return new ArrayList<>(BeanMapperUtils.mapList(page.getRecords(), AlarmPower.class, AlarmPowerExportVO.class));
  124. },null);
  125. if (null != workbook) {
  126. file = FileUtils.getFile(GlobalUtils.getTempBaseDir(), String.format("%s-%s.xlsx", "电力告警", System.currentTimeMillis() + ""));
  127. FileUtils.createFile(file.getAbsolutePath());
  128. FileOutputStream allListingFileOutputStream = new FileOutputStream(file);
  129. workbook.write(allListingFileOutputStream);
  130. } else {
  131. throw new BusinessException("表格数据为空");
  132. }
  133. } catch (Exception e) {
  134. log.error("导出文件失败", e);
  135. throw new BusinessException("导出文件失败");
  136. } finally {
  137. if (workbook != null) {
  138. try {
  139. workbook.close();
  140. } catch (IOException e) {
  141. log.error("===export spec=== 关闭workbook失败", e);
  142. }
  143. }
  144. }
  145. return file.getName();
  146. }
  147. @Override
  148. public List<CommonIcoVO> runStatus(Date startTime, Date endTime, Integer siteId) {
  149. Integer userId = UserUtil.getUserId();
  150. List<CommonIcoVO> list = new ArrayList<>();
  151. List<Object> offCounts = new ArrayList<>();
  152. List<Object> offDateS = new ArrayList<>();
  153. List<Object> runStatus = new ArrayList<>();
  154. List<Object> runDates = new ArrayList<>();
  155. long offTime = 0;
  156. List<AlarmPower> alarmPowers = baseMapper.list(userId, siteId, null, startTime, endTime, "LoadLive", null);
  157. if (!CollectionUtils.isEmpty(list)){
  158. Date forEndTime;
  159. do {
  160. Date dayStartTime = DateUtils.getDayStartTime(startTime);
  161. Date dayEndTime = DateUtils.getDayEndTime(startTime);
  162. offCounts.add(getCount(alarmPowers,null,dayStartTime,dayEndTime,null,null));
  163. forEndTime = dayEndTime;
  164. offDateS.add(DateUtils.format(endTime,DateUtils.PARSE_PATTERNS[8]));
  165. } while (forEndTime.before(endTime));
  166. //上次off时间
  167. long offStartTime = 0;
  168. //off状态
  169. Integer flag = null;
  170. for (AlarmPower alarmPower:alarmPowers) {
  171. Integer digitalValue = alarmPower.getDigitalValue();
  172. Date sendingTime = alarmPower.getSendingTime();
  173. runStatus.add(digitalValue);
  174. runDates.add(DateUtils.format(sendingTime,DateUtils.PARSE_PATTERNS[5]));
  175. if (1 == digitalValue){
  176. if (null == flag || 0 == flag){
  177. offStartTime = sendingTime.getTime();
  178. }
  179. }else {
  180. if (null != flag && 1 == flag){
  181. offTime+=sendingTime.getTime()-offStartTime;
  182. }
  183. }
  184. flag = alarmPower.getDigitalValue();
  185. }
  186. }
  187. list.add(CommonIcoVO.builder().name("offCount").list(offCounts).listDate(offDateS).build());
  188. list.add(CommonIcoVO.builder().name("runStates").list(runStatus).listDate(runDates).build());
  189. list.add(CommonIcoVO.builder().name("offTime").list(TimeUnit.MILLISECONDS.toMinutes(offTime)).build());
  190. return list;
  191. }
  192. /**
  193. * 汇总
  194. * @param list
  195. * @param handlingStatus
  196. * @param startTime
  197. * @param endTime
  198. * @param digitalStatus
  199. */
  200. public Long getCount(List<AlarmPower> list,Integer handlingStatus, Date startTime, Date endTime, Integer digitalStatus,String measName){
  201. return list.stream()
  202. .filter(alarmPower -> alarmPower.getSendingTime().after(startTime) && alarmPower.getSendingTime().before(endTime))
  203. .filter(alarmPower -> Optional.ofNullable(handlingStatus).map(hand -> hand.equals(alarmPower.getHandlingStatus())).orElse(true))
  204. .filter(alarmPower -> Optional.ofNullable(digitalStatus).map(dig -> dig.equals(alarmPower.getDigitalValue())).orElse(true))
  205. .filter(alarmPower -> Optional.ofNullable(measName).map(means -> means.equals(alarmPower.getMeasName())).orElse(true))
  206. .count();
  207. }
  208. }