package com.gunshi.project.hsz.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gunshi.project.hsz.entity.so.SoilMoisturePageSo; import com.gunshi.project.hsz.entity.vo.SoilMoistureVO; import com.gunshi.project.hsz.mapper.SoilMoistureDataMapper; import com.gunshi.project.hsz.model.SoilMoistureData; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; import java.util.Objects; /** * */ @Service @Slf4j @Transactional(rollbackFor = Exception.class) public class SoilMoistureDataService extends ServiceImpl { public Page pageQuery(SoilMoisturePageSo page) { page.getPageSo().setPageSize(10000); LambdaQueryWrapper query = Wrappers.lambdaQuery(); if(StringUtils.isNotBlank(page.getStcd())){ query.eq(SoilMoistureData::getStcd,page.getStcd()); } if(Objects.nonNull(page.getDateRangeSo())){ if(Objects.nonNull(page.getDateRangeSo().getStart())){ query.ge(SoilMoistureData::getCreateTime, page.getDateRangeSo().getStart()); } if(Objects.nonNull(page.getDateRangeSo().getEnd())){ query.le(SoilMoistureData::getCreateTime, page.getDateRangeSo().getEnd()); } } query.orderByDesc(SoilMoistureData::getCreateTime); Page res = this.page(page.getPageSo().toPage(), query); return res; } public SoilMoistureVO count(String stcd) { SoilMoistureVO vo = new SoilMoistureVO(); vo.setStcd(stcd); LocalDate today = LocalDate.now(); LambdaQueryWrapper qw = new LambdaQueryWrapper(); qw.eq(SoilMoistureData::getStcd,stcd).orderByDesc(SoilMoistureData::getCreateTime).last(" limit 1"); SoilMoistureData max = baseMapper.selectOne(qw); SoilMoistureData min = new SoilMoistureData(); vo.setCreateTime(max.getCreateTime()); vo.setCurrVal(Objects.nonNull(max)? max.getVal(): null); max = findMaxByRang(today, today.minusWeeks(1), stcd); min = findMinByRang(today, today.minusWeeks(1), stcd); vo.setNearWeekValMax(Objects.nonNull(max)? max.getVal(): null); vo.setNearWeekValMin(Objects.nonNull(min)? min.getVal(): null); max = findMaxByRang(today, today.minusMonths(1), stcd); min = findMinByRang(today, today.minusMonths(1), stcd); vo.setNearMonthValMax(Objects.nonNull(max)? max.getVal(): null); vo.setNearMonthValMin(Objects.nonNull(min)? min.getVal(): null); max = findMaxByRang(today, today.minusMonths(3), stcd); min = findMinByRang(today, today.minusMonths(3), stcd); vo.setNearThreeMonthValMax(Objects.nonNull(max)? max.getVal(): null); vo.setNearThreeMonthValMin(Objects.nonNull(min)? min.getVal(): null); max = findMaxByRang(today, today.minusMonths(6), stcd); min = findMinByRang(today, today.minusMonths(6), stcd); vo.setNearSixMonthValMax(Objects.nonNull(max)? max.getVal(): null); vo.setNearSixMonthValMin(Objects.nonNull(min)? min.getVal(): null); max = findMaxByRang(today, today.minusYears(1), stcd); min = findMinByRang(today, today.minusYears(1), stcd); vo.setNearYearValMax(Objects.nonNull(max)? max.getVal(): null); vo.setNearYearValMin(Objects.nonNull(min)? min.getVal(): null); max = findMaxByRang(today, today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)), stcd); min = findMinByRang(today, today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)), stcd); vo.setCurrWeekValMax(Objects.nonNull(max)? max.getVal(): null); vo.setCurrWeekValMin(Objects.nonNull(min)? min.getVal(): null); max = findMaxByRang(today, today.withDayOfMonth(1), stcd); min = findMinByRang(today, today.withDayOfMonth(1), stcd); vo.setCurrMonthValMax(Objects.nonNull(max)? max.getVal(): null); vo.setCurrMonthValMin(Objects.nonNull(min)? min.getVal(): null); max = findMaxByRang(today, today.withDayOfYear(1), stcd); min = findMinByRang(today, today.withDayOfYear(1), stcd); vo.setCurrYearValMax(Objects.nonNull(max)? max.getVal(): null); vo.setCurrYearValMin(Objects.nonNull(min)? min.getVal(): null); return vo; } public SoilMoistureData findMaxByRang(LocalDate now, LocalDate startDate, String stcd){ LambdaQueryWrapper qw = new LambdaQueryWrapper(); qw.eq(SoilMoistureData::getStcd,stcd); qw.le(SoilMoistureData::getCreateTime,now); qw.ge(SoilMoistureData::getCreateTime,startDate).orderByDesc(SoilMoistureData::getVal).last(" limit 1"); return baseMapper.selectOne(qw); } public SoilMoistureData findMinByRang(LocalDate now, LocalDate startDate, String stcd){ LambdaQueryWrapper qw = new LambdaQueryWrapper(); qw.eq(SoilMoistureData::getStcd,stcd); qw.le(SoilMoistureData::getCreateTime,now); qw.ge(SoilMoistureData::getCreateTime,startDate).orderByAsc(SoilMoistureData::getVal).last(" limit 1"); return baseMapper.selectOne(qw); } }