土壤墒情

master
liangshan 2025-03-31 13:14:50 +08:00
parent f33515c0c6
commit 1ff801dd33
9 changed files with 396 additions and 0 deletions

View File

@ -0,0 +1,84 @@
package com.gunshi.project.xyt.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gunshi.core.annotation.Get;
import com.gunshi.core.annotation.Post;
import com.gunshi.core.result.R;
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.model.SafetyReinforcement;
import com.gunshi.project.xyt.model.SoilMoistureData;
import com.gunshi.project.xyt.model.SoilMoistureStation;
import com.gunshi.project.xyt.service.SoilMoistureDataService;
import com.gunshi.project.xyt.service.SoilMoistureStationService;
import com.gunshi.project.xyt.validate.markers.Insert;
import com.gunshi.project.xyt.validate.markers.Update;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.io.Serializable;
import java.util.List;
/**
*
*/
@RestController
@RequestMapping("/soilMoisture")
@Tag(name = "土壤墒情")
public class SoilMoistureController {
@Autowired
private SoilMoistureStationService soilMoistureStationService;
@Autowired
private SoilMoistureDataService soilMoistureDataService;
@Get(path = "/stationList", summary = "站点列表")
public R<List<SoilMoistureStation>> listStation() {
return R.ok(soilMoistureStationService.list());
}
@Post(path = "/page", summary = "分页")
public R<Page<SoilMoistureData>> page(@RequestBody SoilMoisturePageSo page) {
return R.ok(soilMoistureDataService.pageQuery(page));
}
@GetMapping("/count/{stcd}")
public R<SoilMoistureVO> count(@Schema(name = "stcd") @PathVariable("stcd") Serializable stcd) {
return R.ok(soilMoistureDataService.count(stcd.toString()));
}
@Operation(summary = "新增")
@PostMapping("/insert")
public R<SoilMoistureData> insert(@Validated(Insert.class) @RequestBody SoilMoistureData dto) {
boolean result = soilMoistureDataService.save(dto);
return R.ok(result ? dto : null);
}
@Operation(summary = "修改")
@PostMapping("/update")
public R<SoilMoistureData> update(@Validated(Update.class) @RequestBody SoilMoistureData dto) {
boolean result = soilMoistureDataService.updateById(dto);
return R.ok(result ? dto : null);
}
@Operation(summary = "删除")
@GetMapping("/del/{id}")
public R<Boolean> del(@Schema(name = "id") @PathVariable("id") Serializable id) {
return R.ok(soilMoistureDataService.removeById(id));
}
@Operation(summary = "列表")
@PostMapping("/list")
public R<List<SoilMoistureData>> list() {
return R.ok(soilMoistureDataService.lambdaQuery().list());
}
}

View File

@ -0,0 +1,27 @@
package com.gunshi.project.xyt.entity.so;
import com.gunshi.db.dto.DateRangeSo;
import com.gunshi.db.dto.PageSo;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
*
*/
@Data
@Schema(description = "考核任务分页查询对象")
public class SoilMoisturePageSo {
@NotNull(message = "分页参数不能为空")
@Schema(description = "分页参数")
private PageSo pageSo;
@Schema(description="时段")
private DateRangeSo dateRangeSo;
@Schema(description="stcd")
private String stcd;
}

View File

@ -0,0 +1,39 @@
package com.gunshi.project.xyt.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.List;
/**
* @Author xusan
* @Date 2023/7/4 10:28
* @Notes
**/
@Data
public class SoilMoistureVO {
private String stcd;
private BigDecimal currVal;
private BigDecimal nearWeekVal;
private BigDecimal nearMonthVal;
private BigDecimal nearThreeMonthVal;
private BigDecimal nearSixMonthVal;
private BigDecimal nearYearVal;
private BigDecimal currWeekVal;
private BigDecimal currMonthVal;
private BigDecimal currYearVal;
}

View File

@ -0,0 +1,13 @@
package com.gunshi.project.xyt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gunshi.project.xyt.model.SoilMoistureData;
import com.gunshi.project.xyt.model.SoilMoistureStation;
import org.apache.ibatis.annotations.Mapper;
/**
*/
@Mapper
public interface SoilMoistureDataMapper extends BaseMapper<SoilMoistureData> {
}

View File

@ -0,0 +1,13 @@
package com.gunshi.project.xyt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gunshi.project.xyt.model.AppVersionRecord;
import com.gunshi.project.xyt.model.SoilMoistureStation;
import org.apache.ibatis.annotations.Mapper;
/**
*/
@Mapper
public interface SoilMoistureStationMapper extends BaseMapper<SoilMoistureStation> {
}

View File

@ -0,0 +1,44 @@
package com.gunshi.project.xyt.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.gunshi.core.dateformat.DateFormatString;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
*
*/
@Schema(description="")
@Data
@TableName("public.soil_moisture_data")
public class SoilMoistureData implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value="id", type= IdType.AUTO)
@Schema(description="主键")
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
private String stcd;
private BigDecimal val;
@TableField(value="create_time")
@Schema(description="创建时间")
@JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
private Date createTime;
}

View File

@ -0,0 +1,50 @@
package com.gunshi.project.xyt.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.gunshi.core.dateformat.DateFormatString;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
*
*/
@Schema(description="")
@Data
@TableName("public.soil_moisture_station")
public class SoilMoistureStation implements Serializable {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value="id", type= IdType.AUTO)
@Schema(description="主键")
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
private String stcd;
private String stnm;
private BigDecimal lgtd;
private BigDecimal lttd;
private Integer status;
private String remark;
@TableField(value="create_time")
@Schema(description="创建时间")
@JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
private Date createTime;
}

View File

@ -0,0 +1,97 @@
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);
}
}

View File

@ -0,0 +1,29 @@
package com.gunshi.project.xyt.service;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gunshi.project.xyt.mapper.AppVersionRecordMapper;
import com.gunshi.project.xyt.mapper.SoilMoistureStationMapper;
import com.gunshi.project.xyt.model.AppVersionRecord;
import com.gunshi.project.xyt.model.SoilMoistureStation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
/**
* : APP
* author: xusan
* date: 2024-11-12 10:14:50
*/
@Service
@Slf4j
@Transactional(rollbackFor = Exception.class)
public class SoilMoistureStationService extends ServiceImpl<SoilMoistureStationMapper, SoilMoistureStation> {
}