package com.gkhy.fourierSpecialGasMonitor.service.impl;
|
|
import com.gkhy.fourierSpecialGasMonitor.commons.enums.ResultCode;
|
import com.gkhy.fourierSpecialGasMonitor.commons.exception.BusinessException;
|
import com.gkhy.fourierSpecialGasMonitor.commons.model.PageQuery;
|
import com.gkhy.fourierSpecialGasMonitor.entity.GasConcentration;
|
import com.gkhy.fourierSpecialGasMonitor.entity.GasFlux;
|
import com.gkhy.fourierSpecialGasMonitor.entity.GasWarnLog;
|
import com.gkhy.fourierSpecialGasMonitor.entity.query.GasFluxPageQuery;
|
import com.gkhy.fourierSpecialGasMonitor.entity.query.GasPageQuery;
|
import com.gkhy.fourierSpecialGasMonitor.repository.GasConcentrationRepository;
|
import com.gkhy.fourierSpecialGasMonitor.repository.GasFluxRepository;
|
import com.gkhy.fourierSpecialGasMonitor.service.GasConcentrationService;
|
import com.gkhy.fourierSpecialGasMonitor.service.GasFluxService;
|
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.persistence.criteria.*;
|
import java.time.LocalDateTime;
|
import java.time.LocalTime;
|
import java.util.HashSet;
|
import java.util.List;
|
import java.util.Set;
|
|
@Service
|
public class GasFluxServiceImpl implements GasFluxService {
|
|
@Autowired
|
private GasFluxRepository gasFluxRepository;
|
|
@Override
|
public GasFlux save(GasFlux gasFlux) {
|
return gasFluxRepository.save(gasFlux);
|
}
|
|
@Override
|
public List<GasFlux> listTodayGasFluxData(LocalDateTime startTime, LocalDateTime time) {
|
Specification<GasFlux> specification = new Specification<GasFlux>() {
|
@Override
|
public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) {
|
Set<Predicate> predicateList = new HashSet<>();
|
if (startTime != null && time != null){
|
predicateList.add(criteriaBuilder.between(root.get("time").as(LocalDateTime.class),startTime,time));
|
}
|
return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()]));
|
}
|
};
|
List<GasFlux> gasFluxes = gasFluxRepository.findAll(specification);
|
return gasFluxes;
|
}
|
|
@Override
|
public GasFlux getLastData() {
|
return gasFluxRepository.findTopByOrderByDataReceivingTimeDesc();
|
}
|
|
@Override
|
public List<GasFlux> listDatabyTimeSlotAndAreaId(LocalDateTime startTime, LocalDateTime endTime, Integer areaId) {
|
if (startTime == null || endTime == null)
|
throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(),"时间区段值不能为空");
|
Specification<GasFlux> specification = new Specification<GasFlux>() {
|
@Override
|
public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) {
|
Set<Predicate> predicateList = new HashSet<>();
|
predicateList.add(criteriaBuilder.between(root.get("time").as(LocalDateTime.class),startTime,endTime));
|
if (areaId != null){
|
predicateList.add(criteriaBuilder.equal(root.get("areaId").as(Integer.class),areaId));
|
}
|
return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()]));
|
}
|
};
|
List<GasFlux> gasFluxes = gasFluxRepository.findAll(specification);
|
return gasFluxes;
|
}
|
|
@Override
|
public Page<GasFlux> listDatabyTimeSlotAndPage(PageQuery<GasFluxPageQuery> pageQuery) {
|
Pageable pageable = PageRequest.of(pageQuery.getPageIndex()-1, pageQuery.getPageSize(), Sort.Direction.DESC, "time");
|
Specification<GasFlux> specification = new Specification<GasFlux>() {
|
@Override
|
public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) {
|
Set<Predicate> predicateList = new HashSet<>();
|
GasFluxPageQuery 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()));
|
}
|
if (searchParams != null && searchParams.getAreaId() != null){
|
predicateList.add(criteriaBuilder.equal(root.get("areaId").as(Integer.class),searchParams.getAreaId()));
|
}
|
return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()]));
|
}
|
};
|
Page<GasFlux> pageResult = gasFluxRepository.findAll(specification,pageable);
|
return pageResult;
|
}
|
|
@Override
|
public List<GasFlux> listYesterday() {
|
// 获取当前时间
|
LocalDateTime now = LocalDateTime.now();
|
// 获取昨天的日期
|
LocalDateTime yesterday = now.minusDays(1);
|
// 获取昨天的0点时间(即凌晨)
|
LocalDateTime yesterdayStart = LocalDateTime.of(yesterday.toLocalDate(), LocalTime.MIN);
|
// 获取昨天的24点时间(即今天的凌晨)
|
LocalDateTime yesterdayEnd = LocalDateTime.of(yesterday.toLocalDate(), LocalTime.MAX);
|
Specification<GasFlux> specification = new Specification<GasFlux>() {
|
@Override
|
public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) {
|
Set<Predicate> predicateList = new HashSet<>();
|
predicateList.add(criteriaBuilder.between(root.get("time").as(LocalDateTime.class),yesterdayStart,yesterdayEnd));
|
return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()]));
|
}
|
};
|
List<GasFlux> gasFluxes = gasFluxRepository.findAll(specification);
|
return gasFluxes;
|
}
|
}
|