zhangf
2024-09-11 d4020168658efdee89a633083cd9c14b06c4d863
src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/GasWarnLogServiceImpl.java
@@ -8,17 +8,24 @@
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;
@@ -29,18 +36,14 @@
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;
/**
@@ -53,6 +56,9 @@
    @Autowired
    private GasWarnLogRepository gasWarnLogRepository;
    @Resource
    private GasConcentrationRepository gasConcentrationRepository;
    @Autowired
    private UserRepository userRepository;
@@ -77,7 +83,7 @@
                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()));
@@ -115,18 +121,28 @@
    }
    @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)
@@ -160,4 +176,72 @@
        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;
    }
}