| | |
| | | import com.gkhy.fourierSpecialGasMonitor.domain.account.entity.User; |
| | | import com.gkhy.fourierSpecialGasMonitor.domain.account.enums.UserStatusEnum; |
| | | import com.gkhy.fourierSpecialGasMonitor.domain.account.repository.jpa.UserRepository; |
| | | import com.gkhy.fourierSpecialGasMonitor.entity.GasConcentration; |
| | | import com.gkhy.fourierSpecialGasMonitor.entity.GasWarnLog; |
| | | import com.gkhy.fourierSpecialGasMonitor.entity.MonitorDailyReport; |
| | | import com.gkhy.fourierSpecialGasMonitor.entity.query.FindDailyReportPageQuery; |
| | | import com.gkhy.fourierSpecialGasMonitor.entity.query.FindGasWarnLogPageQuery; |
| | | import com.gkhy.fourierSpecialGasMonitor.entity.resp.FindDailyReportPageRespDTO; |
| | | import com.gkhy.fourierSpecialGasMonitor.entity.resp.FindGasWarnLogPageRespDTO; |
| | | import com.gkhy.fourierSpecialGasMonitor.entity.resp.FindGasWarnLogSmsUserPageRespDTO; |
| | | import com.gkhy.fourierSpecialGasMonitor.entity.query.GasWarnTimesCountTimeSlotQuery; |
| | | import com.gkhy.fourierSpecialGasMonitor.entity.query.WindRoseTimeSlotQuery; |
| | | import com.gkhy.fourierSpecialGasMonitor.entity.req.GasWarnLogCountByTimeReqDTO; |
| | | import com.gkhy.fourierSpecialGasMonitor.entity.req.GasWarnLogInfoReqDTO; |
| | | import com.gkhy.fourierSpecialGasMonitor.entity.req.HandleGasWarnLogReqDTO; |
| | | import com.gkhy.fourierSpecialGasMonitor.entity.req.WindRoseByTimeReqDTO; |
| | | import com.gkhy.fourierSpecialGasMonitor.entity.resp.*; |
| | | import com.gkhy.fourierSpecialGasMonitor.enums.GasWarnTimesCountEnum; |
| | | import com.gkhy.fourierSpecialGasMonitor.enums.WarnHandleStatusEnum; |
| | | import com.gkhy.fourierSpecialGasMonitor.enums.WindRoseEnum; |
| | | import com.gkhy.fourierSpecialGasMonitor.repository.GasConcentrationRepository; |
| | | import com.gkhy.fourierSpecialGasMonitor.repository.GasWarnLogRepository; |
| | | import com.gkhy.fourierSpecialGasMonitor.service.GasWarnLogService; |
| | | import com.gkhy.fourierSpecialGasMonitor.utils.ThreadLocalUtil; |
| | | import io.micrometer.core.instrument.util.StringUtils; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.domain.Page; |
| | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | 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.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.LocalTime; |
| | | import java.time.temporal.TemporalAdjusters; |
| | | import java.util.ArrayList; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | |
| | | @Autowired |
| | | private GasWarnLogRepository gasWarnLogRepository; |
| | | |
| | | @Resource |
| | | private GasConcentrationRepository gasConcentrationRepository; |
| | | |
| | | @Autowired |
| | | private UserRepository userRepository; |
| | |
| | | Set<Predicate> predicateList = new HashSet<>(); |
| | | FindGasWarnLogPageQuery searchParams = pageQuery.getSearchParams(); |
| | | if (searchParams != null && searchParams.getStartTime() != null && searchParams.getEndTime() != null){ |
| | | predicateList.add(criteriaBuilder.between(root.get("gmtCreate").as(LocalDateTime.class),searchParams.getStartTime(),searchParams.getEndTime())); |
| | | predicateList.add(criteriaBuilder.between(root.get("warnTime").as(LocalDateTime.class),searchParams.getStartTime(),searchParams.getEndTime())); |
| | | } |
| | | if (searchParams != null && searchParams.getStatus() != null){ |
| | | predicateList.add(criteriaBuilder.equal(root.get("status").as(Byte.class), searchParams.getStatus())); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public Result handleGasWarnLog(Long id) { |
| | | public Result handleGasWarnLog(HandleGasWarnLogReqDTO reqDto) { |
| | | User currentUser = getCurrentUser(); |
| | | if (id == null){ |
| | | if (reqDto == null){ |
| | | throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL,"参数不能为空"); |
| | | } |
| | | GasWarnLog gasWarnLog = gasWarnLogRepository.findByIdAndStatus(id, WarnHandleStatusEnum.HANDLE_NO.getStatus()); |
| | | if (reqDto.getId() == null) |
| | | throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL,"参数不能为空"); |
| | | if (reqDto.getUserId() == null) |
| | | throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL,"参数不能为空"); |
| | | if (StringUtils.isBlank(reqDto.getHandlerDesc())) |
| | | throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL,"参数不能为空"); |
| | | GasWarnLog gasWarnLog = gasWarnLogRepository.findByIdAndStatus(reqDto.getId(), WarnHandleStatusEnum.HANDLE_NO.getStatus()); |
| | | if (gasWarnLog == null) |
| | | throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL,"预警信息不存在"); |
| | | gasWarnLog.setHandlerId(currentUser.getId()); |
| | | gasWarnLog.setHandlerName(currentUser.getName()); |
| | | gasWarnLog.setHandlerRealName(currentUser.getRealName()); |
| | | User user = userRepository.findUserByIdAndStatus(reqDto.getUserId(), UserStatusEnum.STATUS_ACTIVE.getStatus()); |
| | | if (user == null) |
| | | throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL,"处理人不存在"); |
| | | gasWarnLog.setHandlerId(user.getId()); |
| | | gasWarnLog.setHandlerName(user.getName()); |
| | | gasWarnLog.setHandlerRealName(user.getRealName()); |
| | | gasWarnLog.setHandlerTime(LocalDateTime.now()); |
| | | gasWarnLog.setHandlerDesc(reqDto.getHandlerDesc()); |
| | | gasWarnLog.setStatus(WarnHandleStatusEnum.HANDLE_YES.getStatus()); |
| | | GasWarnLog save = gasWarnLogRepository.save(gasWarnLog); |
| | | if (save == null) |
| | |
| | | List<GasWarnLog> warnLogs = gasWarnLogRepository.findAll(specification); |
| | | return warnLogs; |
| | | } |
| | | |
| | | @Override |
| | | public Result gasWarnLogCountByTime(GasWarnLogCountByTimeReqDTO gasWarnLogCountByTimeReqDTO) { |
| | | if (gasWarnLogCountByTimeReqDTO == null && gasWarnLogCountByTimeReqDTO .getCountTime() == null) |
| | | throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL,"参数不能为空"); |
| | | Integer countTime = gasWarnLogCountByTimeReqDTO.getCountTime(); |
| | | GasWarnTimesCountTimeSlotQuery query = GasWarnTimesCountEnum.getQueryObject(countTime).getTimeSlotByStrategy(); |
| | | Result result = Result.success(); |
| | | List<GasWarnLog> gasWarnLog = gasWarnLogRepository.findAllByWarnTimeBetweenOrderByWarnTimeDesc(query.getStartTime(), query.getEndTime()); |
| | | if (CollectionUtils.isEmpty(gasWarnLog)) |
| | | return result; |
| | | GasWarnLogCountByTimeRespDTO gasWarnLogCountByTimeRespDTO = new GasWarnLogCountByTimeRespDTO(); |
| | | Map<Integer, Long> nameCountMap = gasWarnLog.stream() |
| | | .collect(Collectors.groupingBy(GasWarnLog::getGasThresholdId, Collectors.counting())); |
| | | gasWarnLogCountByTimeRespDTO.setYellowWarnNum(nameCountMap.get(1)); |
| | | gasWarnLogCountByTimeRespDTO.setRedWarnNum(nameCountMap.get(2)); |
| | | result.setData(gasWarnLogCountByTimeRespDTO); |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public Result gasWindRoseByTime(WindRoseByTimeReqDTO reqDTO) { |
| | | if (reqDTO == null && reqDTO .getCountTime() == null) |
| | | throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL,"参数不能为空"); |
| | | Integer countTime = reqDTO.getCountTime(); |
| | | List<GasConcentration> gasConcentrations; |
| | | if (reqDTO.getCountTime().equals(WindRoseEnum.CUSTOM_TIME.getState())){ |
| | | if (reqDTO.getStartTime() == null && reqDTO.getEndTime() == null) |
| | | throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL,"参数不能为空"); |
| | | gasConcentrations = gasConcentrationRepository.findAllByDataReceivingTimeBetweenOrderByDataReceivingTimeDesc(reqDTO.getStartTime(), reqDTO.getEndTime()); |
| | | }else { |
| | | WindRoseTimeSlotQuery query = WindRoseEnum.getQueryObject(countTime).getTimeSlotByStrategy(); |
| | | gasConcentrations = gasConcentrationRepository.findAllByDataReceivingTimeBetweenOrderByDataReceivingTimeDesc(query.getStartTime(), query.getEndTime()); |
| | | } |
| | | Result result = Result.success(); |
| | | if (CollectionUtils.isEmpty(gasConcentrations)) |
| | | return result; |
| | | List<WindRoseByTimeRespDTO> collect = gasConcentrations.stream().map(gasConcentration -> { |
| | | WindRoseByTimeRespDTO dto = new WindRoseByTimeRespDTO(); |
| | | BeanUtils.copyProperties(gasConcentration, dto); |
| | | return dto; |
| | | }).collect(Collectors.toList()); |
| | | result.setData(collect); |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public Result gasWarnLogInfoByTime(GasWarnLogInfoReqDTO gasWarnLogInfoReqDTO) { |
| | | LocalDateTime now = LocalDateTime.now(); |
| | | LocalDateTime startTime = now.with(LocalTime.MIN); |
| | | if (gasWarnLogInfoReqDTO != null && gasWarnLogInfoReqDTO.getStartTime() != null) { |
| | | startTime = gasWarnLogInfoReqDTO.getStartTime(); |
| | | } |
| | | if (gasWarnLogInfoReqDTO != null && gasWarnLogInfoReqDTO.getEndTime() != null) { |
| | | now = gasWarnLogInfoReqDTO.getEndTime(); |
| | | } |
| | | Result result = Result.success(); |
| | | List<GasWarnLog> gasWarnLogs = gasWarnLogRepository.findAllByWarnTimeBetweenOrderByWarnTimeDesc(startTime, now); |
| | | if (CollectionUtils.isEmpty(gasWarnLogs)) |
| | | return result; |
| | | List<GasWarnLogInfoByTimeRespDTO> dtos = gasWarnLogs.stream().map(gasWarnLog -> { |
| | | GasWarnLogInfoByTimeRespDTO dto = new GasWarnLogInfoByTimeRespDTO(); |
| | | BeanUtils.copyProperties(gasWarnLog, dto); |
| | | return dto; |
| | | }).collect(Collectors.toList()); |
| | | result.setData(dtos); |
| | | return result; |
| | | } |
| | | } |