123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- package com.bizmatics.service.impl;
- import cn.afterturn.easypoi.excel.ExcelExportUtil;
- import cn.afterturn.easypoi.excel.entity.ExportParams;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.bizmatics.common.core.bean.CommonPage;
- import com.bizmatics.common.core.exception.BusinessException;
- import com.bizmatics.common.core.util.BeanMapperUtils;
- import com.bizmatics.common.core.util.DateUtils;
- import com.bizmatics.common.core.util.FileUtils;
- import com.bizmatics.common.mvc.base.AbstractCrudService;
- import com.bizmatics.common.spring.util.GlobalUtils;
- import com.bizmatics.model.AlarmPower;
- import com.bizmatics.persistence.mapper.AlarmPowerMapper;
- import com.bizmatics.service.AlarmPowerService;
- import com.bizmatics.service.enums.AlarmGradeCode;
- import com.bizmatics.service.util.SecurityUtils;
- import com.bizmatics.service.vo.AlarmGradeVO;
- import com.bizmatics.service.vo.AlarmPowerExportVO;
- import com.bizmatics.service.vo.ApCountVO;
- import com.bizmatics.service.vo.CommonIcoVO;
- import org.apache.poi.ss.usermodel.Workbook;
- import org.springframework.stereotype.Service;
- import org.springframework.util.CollectionUtils;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.util.*;
- import java.util.concurrent.TimeUnit;
- import java.util.stream.Collectors;
- /**
- * <p>
- * 电力告警 服务实现类
- * </p>
- *
- * @author ya
- * @since 2021-07-07
- */
- @Service
- public class AlarmPowerServiceImpl extends AbstractCrudService<AlarmPowerMapper, AlarmPower> implements AlarmPowerService {
- @Override
- public ApCountVO selectCount(Integer siteId, Date startTime, Date endTime) {
- Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
- ApCountVO apCountVo = new ApCountVO();
- apCountVo.setCount(baseMapper.selectCount(userId, siteId, null, startTime, endTime, null, null));
- apCountVo.setUnCount(baseMapper.selectCount(userId, siteId, 0, startTime, endTime, null, null));
- return apCountVo;
- }
- @Override
- public List<CommonIcoVO> selectByDate(Date startTime, Date endTime, Integer siteId) {
- List<Object> faultList = new ArrayList<>();
- List<Object> rushList = new ArrayList<>();
- List<Object> noDisposeList = new ArrayList<>();
- List<Object> dateList = new ArrayList<>();
- Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
- List<AlarmPower> alarmPowers = baseMapper.list(userId, siteId, null, startTime, endTime, null, null);
- for (int i = 0; i < DateUtils.getDistanceDayOfTwoDate(startTime, endTime); i++) {
- Date setDays = DateUtils.addDays(startTime, i);
- Date dayStartTime = DateUtils.getDayStartTime(setDays);
- Date dayEndTime = DateUtils.getDayEndTime(setDays);
- faultList.add(getCount(alarmPowers, null, dayStartTime, dayEndTime, null, null));
- rushList.add(getCount(alarmPowers, 1, dayStartTime, dayEndTime, null, null));
- noDisposeList.add(getCount(alarmPowers, 0, dayStartTime, dayEndTime, null, null));
- dateList.add(DateUtils.getMonth(setDays) + "-" + DateUtils.getDay(setDays));
- }
- List<CommonIcoVO> list = new ArrayList<>();
- list.add(CommonIcoVO.builder().name("故障数量").list(faultList).listDate(dateList).build());
- list.add(CommonIcoVO.builder().name("抢修数量").list(rushList).listDate(dateList).build());
- list.add(CommonIcoVO.builder().name("未处理数量").list(noDisposeList).listDate(dateList).build());
- return list;
- }
- @Override
- public CommonPage<AlarmPower> page(Date startTime, Date endTime, Integer status, Integer siteId, Integer current, Integer size) {
- Page<AlarmPower> page = new Page<>(current, size);
- Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
- page = baseMapper.page(page, userId, siteId, status, startTime, endTime);
- return this.ToCommonPage(page);
- }
- @Override
- public CommonPage<AlarmGradeVO> alarmGradeCount(Integer siteId, Date startTime, Date endTime,Integer current,Integer size) {
- Page<Map<String,Object>> page = new Page<>(current,size);
- Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
- List<String> otherGrads = Arrays.stream(AlarmGradeCode.values())
- .filter(alarmGradeCode -> alarmGradeCode.name().equals(AlarmGradeCode.DevOffline.name()))
- .map(Enum::name).collect(Collectors.toList());
- List<String> oneGrads = Arrays.stream(AlarmGradeCode.values())
- .filter(alarmGradeCode -> !alarmGradeCode.name().equals(AlarmGradeCode.DevOffline.name()))
- .map(Enum::name).collect(Collectors.toList());
- page = baseMapper.gradeSiteList(page, userId, siteId, startTime, endTime, oneGrads, otherGrads);
- List<AlarmGradeVO> list = new ArrayList<>();
- page.getRecords().forEach(map -> list.add(enhanceAlarmGradeVo(map)));
- return new CommonPage<>(list,page.getTotal(),page.getSize(),page.getCurrent());
- }
- @Override
- public CommonPage<AlarmPower> alarmGradeList(Integer siteId, Date startTime, Date endTime, Integer current, Integer size, Integer type) {
- List<String> gradeList = null;
- //1级告警
- if (1 == type){
- gradeList = Arrays.stream(AlarmGradeCode.values())
- .filter(alarmGradeCode -> alarmGradeCode.name().equals(AlarmGradeCode.DevOffline.name()))
- .map(Enum::name).collect(Collectors.toList());
- }else if (2 == type){
- gradeList = Arrays.stream(AlarmGradeCode.values())
- .map(Enum::name).collect(Collectors.toList());
- }else if (3 == type){
- gradeList = Arrays.stream(AlarmGradeCode.values())
- .filter(alarmGradeCode -> alarmGradeCode.name().equals(AlarmGradeCode.DevOffline.name()))
- .map(Enum::name).collect(Collectors.toList());
- }
- Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
- Page<AlarmPower> page = new Page<>(current,size);
- page = baseMapper.gradeList(page,userId,siteId,startTime,endTime,gradeList,type);
- return ToCommonPage(page);
- }
- public AlarmGradeVO enhanceAlarmGradeVo(Map<String,Object> map){
- AlarmGradeVO alarmGradeVO = new AlarmGradeVO();
- alarmGradeVO.setSiteId(Integer.parseInt(map.get("siteId").toString()));
- alarmGradeVO.setSiteName(map.get("siteName").toString());
- alarmGradeVO.setTotalGrade(Integer.parseInt(map.get("countGrade").toString()));
- alarmGradeVO.setOneGrade(Integer.parseInt(map.get("oneGrade").toString()));
- alarmGradeVO.setOtherGrade(Integer.parseInt(map.get("otherGrade").toString()));
- alarmGradeVO.setTwoGrade(alarmGradeVO.getTotalGrade()-alarmGradeVO.getOneGrade()-alarmGradeVO.getOtherGrade());
- return alarmGradeVO;
- }
- @Override
- public List<Map<String, Object>> getLoopStatusList(Integer siteId) {
- SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- List<Map<String, Object>> list = new ArrayList<>();
- List<AlarmPower> loopStatusListMap = baseMapper.getLoopStatusListMap(siteId);
- int int1 = 0;
- int int12 = 0;
- Map<String, Object> map = new HashMap<>();
- loopStatusListMap.forEach(alarmPower -> {
- // if (alarmPower.getDigitalValue() == 0){
- // String time1 = formatter.format(alarmPower.getSoeTime());
- // }else if(alarmPower.getDigitalValue() == 1){
- // String time2 = formatter.format(alarmPower.getSoeTime());
- // }
- if (alarmPower.getDigitalValue() == 0) {
- // Duration differenceValue = Duration.between(time1 ,time2 );
- // 获取的是两个时间相差的分钟数,如果想要相差小时数就调用toHours()
- // Long minutesTime = differenceValue .toMinutes();
- }
- });
- // Object value = LoopStatusList.get("LoadLive");
- // int day_count = baseMapper.getOffCountDMap(siteId);
- // int month_count = baseMapper.getOffCountMMap(siteId);
- // Map<String,Object> map = new HashMap<>();
- // map.put("LoadLive",value);
- // map.put("day_count","day_count");
- // map.put("month_count","month_count");
- // list.add(map);
- // Iterator<String> it = radMap.keySet().iterator();
- // int duration=0;
- // for (String name:LoopStatusList.keySet()) {
- //// String a =formatter.;
- //// LoopStatusList.get("sending_time");
- //
- // }
- return list;
- }
- @Override
- public String export(Date startTime, Date endTime, Integer status, Integer siteId) {
- Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
- Workbook workbook = null;
- File file = null;
- try {
- ExportParams params = new ExportParams(null, "电力告警");
- workbook = ExcelExportUtil.exportBigExcel(params, AlarmPowerExportVO.class,
- (o, i) -> {
- Page<AlarmPower> page = new Page<>(i, 30);
- page = baseMapper.page(page, userId, siteId, status, startTime, endTime);
- return new ArrayList<>(BeanMapperUtils.mapList(page.getRecords(), AlarmPower.class, AlarmPowerExportVO.class));
- }, null);
- if (null != workbook) {
- file = FileUtils.getFile(GlobalUtils.getTempBaseDir(), String.format("%s-%s.xlsx", "电力告警", System.currentTimeMillis() + ""));
- FileUtils.createFile(file.getAbsolutePath());
- FileOutputStream allListingFileOutputStream = new FileOutputStream(file);
- workbook.write(allListingFileOutputStream);
- } else {
- throw new BusinessException("表格数据为空");
- }
- } catch (Exception e) {
- log.error("导出文件失败", e);
- throw new BusinessException("导出文件失败");
- } finally {
- if (workbook != null) {
- try {
- workbook.close();
- } catch (IOException e) {
- log.error("===export spec=== 关闭workbook失败", e);
- }
- }
- }
- return file.getName();
- }
- @Override
- public List<CommonIcoVO> runStatus(Date startTime, Date endTime, Integer siteId) {
- Integer userId = SecurityUtils.getLoginUser().getUser().getUserId().intValue();
- List<CommonIcoVO> list = new ArrayList<>();
- List<Object> offCounts = new ArrayList<>();
- List<Object> offDateS = new ArrayList<>();
- List<Object> runStatus = new ArrayList<>();
- List<Object> runDates = new ArrayList<>();
- long offTime = 0;
- List<AlarmPower> alarmPowers = baseMapper.list(userId, siteId, null, startTime, endTime, "LoadLive", null);
- if (!CollectionUtils.isEmpty(list)) {
- Date forEndTime;
- do {
- Date dayStartTime = DateUtils.getDayStartTime(startTime);
- Date dayEndTime = DateUtils.getDayEndTime(startTime);
- offCounts.add(getCount(alarmPowers, null, dayStartTime, dayEndTime, null, null));
- forEndTime = dayEndTime;
- offDateS.add(DateUtils.format(endTime, DateUtils.PARSE_PATTERNS[8]));
- } while (forEndTime.before(endTime));
- //上次off时间
- long offStartTime = 0;
- //off状态
- Integer flag = null;
- for (AlarmPower alarmPower : alarmPowers) {
- Integer digitalValue = alarmPower.getDigitalValue();
- Date sendingTime = alarmPower.getSendingTime();
- runStatus.add(digitalValue);
- runDates.add(DateUtils.format(sendingTime, DateUtils.PARSE_PATTERNS[5]));
- if (1 == digitalValue) {
- if (null == flag || 0 == flag) {
- offStartTime = sendingTime.getTime();
- }
- } else {
- if (null != flag && 1 == flag) {
- offTime += sendingTime.getTime() - offStartTime;
- }
- }
- flag = alarmPower.getDigitalValue();
- }
- }
- list.add(CommonIcoVO.builder().name("offCount").list(offCounts).listDate(offDateS).build());
- list.add(CommonIcoVO.builder().name("runStates").list(runStatus).listDate(runDates).build());
- list.add(CommonIcoVO.builder().name("offTime").list(TimeUnit.MILLISECONDS.toMinutes(offTime)).build());
- return list;
- }
- /**
- * 汇总
- *
- * @param list
- * @param handlingStatus
- * @param startTime
- * @param endTime
- * @param digitalStatus
- */
- public Long getCount(List<AlarmPower> list, Integer handlingStatus, Date startTime, Date endTime, Integer digitalStatus, String measName) {
- return list.stream()
- .filter(alarmPower -> alarmPower.getSendingTime().after(startTime) && alarmPower.getSendingTime().before(endTime))
- .filter(alarmPower -> Optional.ofNullable(handlingStatus).map(hand -> hand.equals(alarmPower.getHandlingStatus())).orElse(true))
- .filter(alarmPower -> Optional.ofNullable(digitalStatus).map(dig -> dig.equals(alarmPower.getDigitalValue())).orElse(true))
- .filter(alarmPower -> Optional.ofNullable(measName).map(means -> means.equals(alarmPower.getMeasName())).orElse(true))
- .count();
- }
- }
|