src/main/java/com/gkhy/fourierSpecialGasMonitor/controller/DeviceExcLogController.java
对比新文件 @@ -0,0 +1,39 @@ package com.gkhy.fourierSpecialGasMonitor.controller; import com.gkhy.fourierSpecialGasMonitor.commons.domain.Result; import com.gkhy.fourierSpecialGasMonitor.commons.model.PageQuery; import com.gkhy.fourierSpecialGasMonitor.entity.query.DeviceExcLogPageQuery; import com.gkhy.fourierSpecialGasMonitor.entity.query.GasAtmospherePageQuery; import com.gkhy.fourierSpecialGasMonitor.entity.query.GasFluxPageQuery; import com.gkhy.fourierSpecialGasMonitor.entity.query.GasPageQuery; import com.gkhy.fourierSpecialGasMonitor.entity.req.GasAtmosphereLineChartReqDTO; import com.gkhy.fourierSpecialGasMonitor.entity.req.GasFluxLineChartReqDTO; import com.gkhy.fourierSpecialGasMonitor.entity.req.GasLineChartReqDTO; import com.gkhy.fourierSpecialGasMonitor.service.DeviceExceptionLogService; import com.gkhy.fourierSpecialGasMonitor.service.MonitorDataService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; /** * @author Mr.huang * @decription * @date 2023/8/10 9:06 */ @RestController @RequestMapping("/deviceExcLog") public class DeviceExcLogController { @Resource private DeviceExceptionLogService deviceExceptionLogService; @PostMapping("/page") public Result deviceExcLogPage(@RequestBody PageQuery<DeviceExcLogPageQuery> pageQuery){ Result result = deviceExceptionLogService.deviceExcLogPage(pageQuery); return result; } } src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/DeviceExceptionLog.java
@@ -19,6 +19,8 @@ @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String content; private LocalDateTime time; private String execDesc; src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/query/DeviceExcLogPageQuery.java
对比新文件 @@ -0,0 +1,18 @@ package com.gkhy.fourierSpecialGasMonitor.entity.query; import lombok.Data; import java.time.LocalDateTime; /** * @author Mr.huang * @decription * @date 2023/8/10 10:52 */ @Data public class DeviceExcLogPageQuery { private LocalDateTime startTime; private LocalDateTime endTime; } src/main/java/com/gkhy/fourierSpecialGasMonitor/enums/GasFluxStateEnum.java
@@ -8,7 +8,7 @@ NORMAL((Integer) 0, "正常"), INVERSION_FAILED_10_MINUTES_NO_DATA((Integer) 1, "现场设备连续5min无数据") INVERSION_FAILED_10_MINUTES_NO_DATA((Integer) 1, "反演失败,现场连续10min无数据") ; private Integer state; src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java
@@ -18,7 +18,9 @@ import org.springframework.stereotype.Component; import java.io.IOException; import java.text.MessageFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; /** * @author Mr.huang @@ -42,9 +44,13 @@ private final Logger logger = LoggerFactory.getLogger(this.getClass()); private static final String deviceExcLogFormat = "【设备预警提示】{0} 硬件设备离线。"; private static final DateTimeFormatter deviceExcLogFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"); @Scheduled(cron = "0/30 * * * * ?") @Scheduled(cron = "0 0/1 * * * ?") @Async(value = "SocketTaskExecutor") public void gasConcentrationStatus() { GasConcentration gasConcentration = gasConcentrationService.getLastData(); @@ -53,9 +59,12 @@ if (LocalDateTime.now().compareTo(lastReceiveTime) > 0){ try { heartbeatExcWebsocketServer.sendInfo(HeartbeatExecEnum.GAS_CONCENTRATION.getStatus()+"",null); logger.info(HeartbeatExecEnum.GAS_CONCENTRATION.getDesc()); //logger.info(HeartbeatExecEnum.GAS_CONCENTRATION.getDesc()); DeviceExceptionLog deviceExceptionLog = new DeviceExceptionLog(); deviceExceptionLog.setTime(LocalDateTime.now()); LocalDateTime now = LocalDateTime.now(); String content = MessageFormat.format(deviceExcLogFormat,deviceExcLogFormatter.format(now)); deviceExceptionLog.setTime(now); deviceExceptionLog.setContent(content); deviceExceptionLog.setExecDesc(HeartbeatExecEnum.GAS_CONCENTRATION.getDesc()); DeviceExceptionLog save = deviceExceptionLogService.save(deviceExceptionLog); if (save == null) @@ -76,9 +85,12 @@ if (LocalDateTime.now().compareTo(lastReceiveTime) > 0){ try { heartbeatExcWebsocketServer.sendInfo(HeartbeatExecEnum.GAS_FLUX.getStatus()+"",null); logger.info(HeartbeatExecEnum.GAS_FLUX.getDesc()); //logger.info(HeartbeatExecEnum.GAS_FLUX.getDesc()); DeviceExceptionLog deviceExceptionLog = new DeviceExceptionLog(); deviceExceptionLog.setTime(LocalDateTime.now()); LocalDateTime now = LocalDateTime.now(); String content = MessageFormat.format(deviceExcLogFormat,deviceExcLogFormatter.format(now)); deviceExceptionLog.setTime(now); deviceExceptionLog.setContent(content); deviceExceptionLog.setExecDesc(HeartbeatExecEnum.GAS_FLUX.getDesc()); DeviceExceptionLog save = deviceExceptionLogService.save(deviceExceptionLog); if (save == null) src/main/java/com/gkhy/fourierSpecialGasMonitor/service/DeviceExceptionLogService.java
@@ -1,6 +1,9 @@ package com.gkhy.fourierSpecialGasMonitor.service; import com.gkhy.fourierSpecialGasMonitor.commons.domain.Result; import com.gkhy.fourierSpecialGasMonitor.commons.model.PageQuery; import com.gkhy.fourierSpecialGasMonitor.entity.DeviceExceptionLog; import com.gkhy.fourierSpecialGasMonitor.entity.query.DeviceExcLogPageQuery; /** * @author Mr.huang @@ -9,4 +12,7 @@ */ public interface DeviceExceptionLogService { DeviceExceptionLog save(DeviceExceptionLog log); Result deviceExcLogPage(PageQuery<DeviceExcLogPageQuery> pageQuery); } src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java
@@ -115,6 +115,10 @@ private static final String warnContentFormat = "【气体监测预警提示】{0} {1}气体浓度连续超标系统判断为{2},请相关负责人及时检查处置。"; private static final String deviceExcLogFormat = "【设备预警提示】{0} 硬件设备离线。"; private static final DateTimeFormatter deviceExcLogFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"); private static final DateTimeFormatter warnLogFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"); @@ -180,7 +184,7 @@ throw new DataReceiveException(this.getClass(), ForeignResultCode.PARAM_ERROR_NULL.getCode(),"通量数据状态不能为空"); Boolean push = false; List<String> descs = new ArrayList<>(); if (reqDTO.getHardwareState().size() > 1){ if (!(reqDTO.getHardwareState().size() == 1 && reqDTO.getHardwareState().get(0) == 0)){ push = true; for (int i = 0; i < reqDTO.getHardwareState().size(); i++) { descs.add(HardwareStateEnum.getValue(reqDTO.getHardwareState().get(i))); @@ -212,7 +216,10 @@ String execInfo = JSON.toJSONString(descs); logger.info("【警告】设备异常,异常原因: "+ execInfo); DeviceExceptionLog log = new DeviceExceptionLog(); log.setTime(LocalDateTime.now()); LocalDateTime now = LocalDateTime.now(); String content = MessageFormat.format(deviceExcLogFormat,deviceExcLogFormatter.format(now)); log.setContent(content); log.setTime(now); log.setExecDesc(execInfo); DeviceExceptionLog save = deviceExceptionLogService.save(log); if (save == null) src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DeviceExceptionLogServiceImpl.java
@@ -1,10 +1,32 @@ package com.gkhy.fourierSpecialGasMonitor.service.impl; import com.gkhy.fourierSpecialGasMonitor.commons.domain.Result; import com.gkhy.fourierSpecialGasMonitor.commons.domain.SearchResult; import com.gkhy.fourierSpecialGasMonitor.commons.model.PageQuery; import com.gkhy.fourierSpecialGasMonitor.entity.DeviceExceptionLog; import com.gkhy.fourierSpecialGasMonitor.entity.GasConcentration; import com.gkhy.fourierSpecialGasMonitor.entity.query.DeviceExcLogPageQuery; import com.gkhy.fourierSpecialGasMonitor.entity.query.GasPageQuery; import com.gkhy.fourierSpecialGasMonitor.entity.resp.GasPageRespDTO; import com.gkhy.fourierSpecialGasMonitor.repository.DeviceExceptionLogRepository; import com.gkhy.fourierSpecialGasMonitor.service.DeviceExceptionLogService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import java.time.LocalDateTime; import java.util.HashSet; import java.util.List; import java.util.Set; /** * @author Mr.huang @@ -14,11 +36,36 @@ @Service public class DeviceExceptionLogServiceImpl implements DeviceExceptionLogService { @Autowired @Resource private DeviceExceptionLogRepository deviceExceptionLogRepository; @Override public DeviceExceptionLog save(DeviceExceptionLog log) { return deviceExceptionLogRepository.save(log); } @Override public Result deviceExcLogPage(PageQuery<DeviceExcLogPageQuery> pageQuery) { SearchResult<List<DeviceExceptionLog>> searchResult = new SearchResult<>(); searchResult.setPageIndex(pageQuery.getPageIndex()); searchResult.setPageSize(pageQuery.getPageSize()); searchResult.setSuccess(); Pageable pageable = PageRequest.of(pageQuery.getPageIndex()-1, pageQuery.getPageSize(), Sort.Direction.DESC, "time"); Specification<DeviceExceptionLog> specification = new Specification<DeviceExceptionLog>() { @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { Set<Predicate> predicateList = new HashSet<>(); DeviceExcLogPageQuery searchParams = pageQuery.getSearchParams(); if (searchParams != null && searchParams.getStartTime() != null && searchParams.getEndTime() != null){ predicateList.add(criteriaBuilder.between(root.get("time").as(LocalDateTime.class),searchParams.getStartTime(),searchParams.getEndTime())); } return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()])); } }; Page<DeviceExceptionLog> pageResult = deviceExceptionLogRepository.findAll(specification,pageable); searchResult.setTotal(pageResult.getTotalElements()); searchResult.setPages(pageResult.getTotalPages()); searchResult.setData(pageResult.getContent()); return searchResult; } }