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.GasConcentration; import com.gkhy.testFourierSpecialGasMonitor.entity.query.GasAtmospherePageQuery; import com.gkhy.testFourierSpecialGasMonitor.entity.query.GasPageQuery; import com.gkhy.testFourierSpecialGasMonitor.entity.req.GasConcentrationExportBO; import com.gkhy.testFourierSpecialGasMonitor.repository.GasConcentrationRepository; import com.gkhy.testFourierSpecialGasMonitor.service.GasConcentrationService; 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.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @Service public class GasConcentrationServiceImpl implements GasConcentrationService { @Autowired private GasConcentrationRepository gasConcentrationRepository; @Override public GasConcentration save(GasConcentration gasConcentration) { return gasConcentrationRepository.save(gasConcentration); } @Override public GasConcentration getLastData() { GasConcentration gasConcentration = gasConcentrationRepository.findTopByOrderByDataReceivingTimeDesc(); return gasConcentration; } @Override public List listDatabyTimeSlot(LocalDateTime startTime, LocalDateTime endTime) { 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)); return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()])); } }; List gasConcentrations = gasConcentrationRepository.findAll(specification); return gasConcentrations; } @Override public Page listDatabyTimeSlotAndPositionAndPage(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<>(); GasPageQuery searchParams = pageQuery.getSearchParams(); if (searchParams != null && searchParams.getPosition() != null){ predicateList.add(criteriaBuilder.equal(root.get("position").as(Integer.class),searchParams.getPosition())); } 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 pageResult = gasConcentrationRepository.findAll(specification,pageable); return pageResult; } @Override public Page gasAtmospherePage(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<>(); GasAtmospherePageQuery 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 pageResult = gasConcentrationRepository.findAll(specification,pageable); return pageResult; } @Override public List listDatabyTimeSlotAndPosition(LocalDateTime startTime, LocalDateTime endTime, Integer position) { 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<>(); if (position != null){ predicateList.add(criteriaBuilder.equal(root.get("position").as(Integer.class),position)); } predicateList.add(criteriaBuilder.between(root.get("time").as(LocalDateTime.class),startTime,endTime)); return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()])); } }; List gasConcentrations = gasConcentrationRepository.findAll(specification); return gasConcentrations; } @Override public List gasConcentrationExport(GasConcentrationExportBO gasConcentrationExportBO) { if(gasConcentrationExportBO.getPosition1() == null && gasConcentrationExportBO.getPosition2() == null && gasConcentrationExportBO.getPosition3() == null){ gasConcentrationExportBO.setPosition1(1); gasConcentrationExportBO.setPosition2(2); gasConcentrationExportBO.setPosition3(3); } //封装查询参数 Specification specification = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { List predicateList = new ArrayList<>(); if (gasConcentrationExportBO.getStartTime() != null && !gasConcentrationExportBO.getStartTime().equals("")){ predicateList.add(criteriaBuilder.greaterThanOrEqualTo(root.get("time"), gasConcentrationExportBO.getStartTime())); } if (gasConcentrationExportBO.getEndTime() != null && !gasConcentrationExportBO.getEndTime().equals("")){ predicateList.add(criteriaBuilder.lessThanOrEqualTo(root.get("time"), gasConcentrationExportBO.getEndTime())); } predicateList.add(criteriaBuilder.or( criteriaBuilder.equal(root.get("position"), gasConcentrationExportBO.getPosition1()), criteriaBuilder.equal(root.get("position"), gasConcentrationExportBO.getPosition2()), criteriaBuilder.equal(root.get("position"), gasConcentrationExportBO.getPosition3()) ) ); query.orderBy(criteriaBuilder.asc(root.get("time")),criteriaBuilder.asc(root.get("position"))); return criteriaBuilder.and(predicateList.toArray(new Predicate[0])); } }; List result = gasConcentrationRepository.findAll(specification); return result; } }