package com.gkhy.fourierSpecialGasMonitor.service.impl; import com.gkhy.fourierSpecialGasMonitor.commons.domain.Result; import com.gkhy.fourierSpecialGasMonitor.commons.domain.SearchResult; 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.MonitorDailyReport; import com.gkhy.fourierSpecialGasMonitor.entity.query.FindDailyReportPageQuery; import com.gkhy.fourierSpecialGasMonitor.entity.query.FindRegionPageQuery; import com.gkhy.fourierSpecialGasMonitor.entity.resp.FindDailyReportPageRespDTO; import com.gkhy.fourierSpecialGasMonitor.repository.MonitorDailyReportRepository; import com.gkhy.fourierSpecialGasMonitor.service.MonitorDailyReportService; import org.springframework.beans.BeanUtils; 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 org.springframework.util.CollectionUtils; import javax.persistence.criteria.*; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; /** * @author Mr.huang * @decription * @date 2023/8/9 15:44 */ @Service public class MonitorDailyReportServiceImpl implements MonitorDailyReportService { @Autowired private MonitorDailyReportRepository monitorDailyReportRepository; @Override public Result findDailyReportPage(PageQuery pageQuery) { if (pageQuery == null || pageQuery.getPageIndex() == null || pageQuery.getPageSize() == null){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL,"分页参数不能为空"); } Pageable pageable = PageRequest.of(pageQuery.getPageIndex()-1, pageQuery.getPageSize(), Sort.Direction.DESC, "gmtCreate"); Specification specification = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { Set predicateList = new HashSet<>(); FindDailyReportPageQuery searchParams = pageQuery.getSearchParams(); if (searchParams != null && searchParams.getYear() != null && searchParams.getMonth() != null){ // 获取指定月份的第一天 LocalDate firstDayOfMonth = LocalDate.of(searchParams.getYear(), searchParams.getMonth(), 1); // 获取指定月份的最后一天 LocalDate lastDayOfMonth = LocalDate.of(searchParams.getYear(), searchParams.getMonth(), 1).with(TemporalAdjusters.lastDayOfMonth()); predicateList.add(criteriaBuilder.between(root.get("gmtCreate").as(LocalDate.class),firstDayOfMonth,lastDayOfMonth)); } return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()])); } }; SearchResult> searchResult = new SearchResult<>(); searchResult.setPageIndex(pageQuery.getPageIndex()); searchResult.setPageSize(pageQuery.getPageSize()); searchResult.setSuccess(); Page pageResult = monitorDailyReportRepository.findAll(specification,pageable); searchResult.setTotal(pageResult.getTotalElements()); searchResult.setPages(pageResult.getTotalPages()); if (!CollectionUtils.isEmpty(pageResult.getContent())){ List dtos = pageResult.getContent().stream().map(monitorDailyReport -> { FindDailyReportPageRespDTO dto = new FindDailyReportPageRespDTO(); BeanUtils.copyProperties(monitorDailyReport, dto); return dto; }).collect(Collectors.toList()); searchResult.setData(dtos); } return searchResult; } @Override public MonitorDailyReport save(MonitorDailyReport report) { return monitorDailyReportRepository.save(report); } }