package com.gunshi.project.xyt.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.db.dto.PageSo; import com.gunshi.project.xyt.entity.so.SoilMoisturePageSo; import com.gunshi.project.xyt.entity.vo.SoilMoistureVO; import com.gunshi.project.xyt.mapper.SoilMoistureDataMapper; import com.gunshi.project.xyt.mapper.SoilMoistureStationMapper; import com.gunshi.project.xyt.model.SoilMoistureData; import com.gunshi.project.xyt.model.SoilMoistureStation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.Serializable; 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())){ } if(Objects.nonNull(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); vo.setCreateTime(max.getCreateTime()); vo.setCurrVal(Objects.nonNull(max)? max.getVal(): null); max = findMaxByRang(today, today.minusWeeks(1), stcd); vo.setNearWeekVal(Objects.nonNull(max)? max.getVal(): null); max = findMaxByRang(today, today.minusMonths(1), stcd); vo.setNearMonthVal(Objects.nonNull(max)? max.getVal(): null); max = findMaxByRang(today, today.minusMonths(3), stcd); vo.setNearThreeMonthVal(Objects.nonNull(max)? max.getVal(): null); max = findMaxByRang(today, today.minusMonths(6), stcd); vo.setNearSixMonthVal(Objects.nonNull(max)? max.getVal(): null); max = findMaxByRang(today, today.minusYears(1), stcd); vo.setNearYearVal(Objects.nonNull(max)? max.getVal(): null); max = findMaxByRang(today, today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)), stcd); vo.setCurrWeekVal(Objects.nonNull(max)? max.getVal(): null); max = findMaxByRang(today, today.withDayOfMonth(1), stcd); vo.setCurrMonthVal(Objects.nonNull(max)? max.getVal(): null); max = findMaxByRang(today, today.withDayOfYear(1), stcd); vo.setCurrYearVal(Objects.nonNull(max)? max.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); } }