gunshi-project-ss/src/main/java/com/gunshi/project/hsz/service/SoilMoistureDataService.java

120 lines
5.5 KiB
Java
Raw Normal View History

2025-07-17 15:26:39 +08:00
package com.gunshi.project.hsz.service;
2025-03-31 13:14:50 +08:00
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;
2025-07-17 15:26:39 +08:00
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;
2025-03-31 13:14:50 +08:00
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<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())){
2025-04-01 17:18:58 +08:00
query.ge(SoilMoistureData::getCreateTime, page.getDateRangeSo().getStart());
2025-03-31 13:14:50 +08:00
}
if(Objects.nonNull(page.getDateRangeSo().getEnd())){
2025-04-01 17:18:58 +08:00
query.le(SoilMoistureData::getCreateTime, page.getDateRangeSo().getEnd());
2025-03-31 13:14:50 +08:00
}
}
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);
2025-04-01 17:18:58 +08:00
SoilMoistureData min = new SoilMoistureData();
2025-04-01 11:24:38 +08:00
vo.setCreateTime(max.getCreateTime());
2025-03-31 13:14:50 +08:00
vo.setCurrVal(Objects.nonNull(max)? max.getVal(): null);
2025-04-01 17:18:58 +08:00
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);
2025-03-31 13:14:50 +08:00
max = findMaxByRang(today, today.minusMonths(1), stcd);
2025-04-01 17:18:58 +08:00
min = findMinByRang(today, today.minusMonths(1), stcd);
vo.setNearMonthValMax(Objects.nonNull(max)? max.getVal(): null);
vo.setNearMonthValMin(Objects.nonNull(min)? min.getVal(): null);
2025-03-31 13:14:50 +08:00
max = findMaxByRang(today, today.minusMonths(3), stcd);
2025-04-01 17:18:58 +08:00
min = findMinByRang(today, today.minusMonths(3), stcd);
vo.setNearThreeMonthValMax(Objects.nonNull(max)? max.getVal(): null);
vo.setNearThreeMonthValMin(Objects.nonNull(min)? min.getVal(): null);
2025-03-31 13:14:50 +08:00
max = findMaxByRang(today, today.minusMonths(6), stcd);
2025-04-01 17:18:58 +08:00
min = findMinByRang(today, today.minusMonths(6), stcd);
vo.setNearSixMonthValMax(Objects.nonNull(max)? max.getVal(): null);
vo.setNearSixMonthValMin(Objects.nonNull(min)? min.getVal(): null);
2025-03-31 13:14:50 +08:00
max = findMaxByRang(today, today.minusYears(1), stcd);
2025-04-01 17:18:58 +08:00
min = findMinByRang(today, today.minusYears(1), stcd);
vo.setNearYearValMax(Objects.nonNull(max)? max.getVal(): null);
vo.setNearYearValMin(Objects.nonNull(min)? min.getVal(): null);
2025-03-31 13:14:50 +08:00
max = findMaxByRang(today, today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)), stcd);
2025-04-01 17:18:58 +08:00
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);
2025-03-31 13:14:50 +08:00
max = findMaxByRang(today, today.withDayOfMonth(1), stcd);
2025-04-01 17:18:58 +08:00
min = findMinByRang(today, today.withDayOfMonth(1), stcd);
vo.setCurrMonthValMax(Objects.nonNull(max)? max.getVal(): null);
vo.setCurrMonthValMin(Objects.nonNull(min)? min.getVal(): null);
2025-03-31 13:14:50 +08:00
max = findMaxByRang(today, today.withDayOfYear(1), stcd);
2025-04-01 17:18:58 +08:00
min = findMinByRang(today, today.withDayOfYear(1), stcd);
vo.setCurrYearValMax(Objects.nonNull(max)? max.getVal(): null);
vo.setCurrYearValMin(Objects.nonNull(min)? min.getVal(): null);
2025-03-31 13:14:50 +08:00
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);
}
2025-04-01 17:18:58 +08:00
public SoilMoistureData findMinByRang(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).orderByAsc(SoilMoistureData::getVal).last(" limit 1");
return baseMapper.selectOne(qw);
}
2025-03-31 13:14:50 +08:00
}