package com.gkhy.testFourierSpecialGasMonitor.service.impl; import com.gkhy.testFourierSpecialGasMonitor.commons.enums.ResultCode; import com.gkhy.testFourierSpecialGasMonitor.commons.exception.BusinessException; import com.gkhy.testFourierSpecialGasMonitor.commons.model.PageQuery; import com.gkhy.testFourierSpecialGasMonitor.entity.GasFlux; import com.gkhy.testFourierSpecialGasMonitor.entity.query.GasFluxPageQuery; import com.gkhy.testFourierSpecialGasMonitor.entity.req.GasFluxExportBO; import com.gkhy.testFourierSpecialGasMonitor.repository.GasFluxRepository; import com.gkhy.testFourierSpecialGasMonitor.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.*; @Service public class GasFluxServiceImpl implements GasFluxService { @Autowired private GasFluxRepository gasFluxRepository; @Override public GasFlux save(GasFlux gasFlux) { return gasFluxRepository.save(gasFlux); } @Override public List listTodayGasFluxData(LocalDateTime startTime, LocalDateTime time) { Specification specification = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { Set 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 gasFluxes = gasFluxRepository.findAll(specification); return gasFluxes; } @Override public GasFlux getLastData() { return gasFluxRepository.findTopByOrderByDataReceivingTimeDesc(); } @Override public List listDatabyTimeSlotAndAreaId(LocalDateTime startTime, LocalDateTime endTime, Integer areaId) { if (startTime == null || endTime == null) throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(),"时间区段值不能为空"); Specification specification = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { Set 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 gasFluxes = gasFluxRepository.findAll(specification); return gasFluxes; } @Override public Page listDatabyTimeSlotAndPage(PageQuery pageQuery) { Pageable pageable = PageRequest.of(pageQuery.getPageIndex()-1, pageQuery.getPageSize(), Sort.Direction.DESC, "time"); Specification specification = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { Set 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 pageResult = gasFluxRepository.findAll(specification,pageable); return pageResult; } @Override public List 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 specification = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { Set 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 gasFluxes = gasFluxRepository.findAll(specification); return gasFluxes; } @Override public List listYesterdayTenAmToSixPm() { // 获取昨天的上午十点 LocalDateTime yesterdayStart = LocalDateTime.now() .minusDays(1) // 减去一天,获取昨天的日期 .with(LocalTime.of(10, 0)); // 设置时间为上午十点 // 获取昨天的下午6点 LocalDateTime yesterdayEnd = LocalDateTime.now() .minusDays(1) // 减去一天,获取昨天的日期 .with(LocalTime.of(18, 0)); // 设置时间为下午6点 Specification specification = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { Set 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 gasFluxes = gasFluxRepository.findAll(specification); return gasFluxes; } @Override public List gasFluxExport(GasFluxExportBO gasFluxExportBO) { if(gasFluxExportBO.getAreaId1() == null && gasFluxExportBO.getAreaId2() == null && gasFluxExportBO.getAreaId3() == null && gasFluxExportBO.getAreaId4() == null && gasFluxExportBO.getAreaId5() == null && gasFluxExportBO.getAreaId5() == null){ gasFluxExportBO.setAreaId1(1); gasFluxExportBO.setAreaId2(2); gasFluxExportBO.setAreaId3(3); gasFluxExportBO.setAreaId4(4); gasFluxExportBO.setAreaId5(5); gasFluxExportBO.setAreaId6(6); } //封装查询参数 Specification specification = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { List predicateList = new ArrayList<>(); if (gasFluxExportBO.getStartTime() != null && !gasFluxExportBO.getStartTime().equals("")){ predicateList.add(criteriaBuilder.greaterThanOrEqualTo(root.get("time"), gasFluxExportBO.getStartTime())); } if (gasFluxExportBO.getEndTime() != null && !gasFluxExportBO.getEndTime().equals("")){ predicateList.add(criteriaBuilder.lessThanOrEqualTo(root.get("time"), gasFluxExportBO.getEndTime())); } predicateList.add(criteriaBuilder.or( criteriaBuilder.equal(root.get("areaId"), gasFluxExportBO.getAreaId1()), criteriaBuilder.equal(root.get("areaId"), gasFluxExportBO.getAreaId2()), criteriaBuilder.equal(root.get("areaId"), gasFluxExportBO.getAreaId3()), criteriaBuilder.equal(root.get("areaId"), gasFluxExportBO.getAreaId4()), criteriaBuilder.equal(root.get("areaId"), gasFluxExportBO.getAreaId5()), criteriaBuilder.equal(root.get("areaId"), gasFluxExportBO.getAreaId6()) ) ); query.orderBy(criteriaBuilder.asc(root.get("time")),criteriaBuilder.asc(root.get("areaId"))); return criteriaBuilder.and(predicateList.toArray(new Predicate[0])); } }; List gasFluxList = gasFluxRepository.findAll(specification); return gasFluxList; } }