98 lines
3.9 KiB
Java
98 lines
3.9 KiB
Java
|
|
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<SoilMoistureDataMapper, SoilMoistureData> {
|
||
|
|
|
||
|
|
public Page<SoilMoistureData> pageQuery(SoilMoisturePageSo page) {
|
||
|
|
page.getPageSo().setPageSize(10000);
|
||
|
|
LambdaQueryWrapper<SoilMoistureData> 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<SoilMoistureData> 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<SoilMoistureData> qw = new LambdaQueryWrapper();
|
||
|
|
qw.eq(SoilMoistureData::getStcd,stcd).orderByDesc(SoilMoistureData::getCreateTime).last(" limit 1");
|
||
|
|
SoilMoistureData max = baseMapper.selectOne(qw);
|
||
|
|
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<SoilMoistureData> 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);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|