From 4f97850c9cc2098f460124a66266bdf6157319dd Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期四, 26 六月 2025 15:46:29 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

---
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmSoilHistoryMapper.java                  |   19 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmWeatherLastMapper.java                  |   23 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmManureLastMapper.java                   |    7 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmSoilLastMapper.xml                                    |   67 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/weather/WeatherSv.java   |   94 +++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/soil/SoilSv.java         |  123 ++++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/manure/ManureCtrl.java   |   52 +
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/weather/WeatherQo.java   |   57 ++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmSoilLastMapper.java                     |   24 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/manure/ManureSv.java     |   40 +
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/weather/WeatherCtrl.java |  102 +++
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmWeatherLastMapper.xml                                 |   67 ++
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmSoilHistoryMapper.xml                                 |   51 +
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/soil/SoilQo.java         |   57 ++
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmWeatherHistoryMapper.xml                              |   50 +
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmSoilDayMapper.xml                                     |   78 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/soil/SoilCtrl.java       |  159 ++++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoSoil.java                                |  117 ++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmWeatherHistoryMapper.java               |   18 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoSoilDay.java                             |  118 ++++
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmManureHistoryMapper.xml                               |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/manure/ManureQo.java     |    2 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmManureLastMapper.xml                                  |   21 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmSoilDayMapper.java                      |   24 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoWeather.java                             |  148 +++++
 25 files changed, 1,497 insertions(+), 25 deletions(-)

diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmManureLastMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmManureLastMapper.java
index 7bfba0f..1fa5b88 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmManureLastMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmManureLastMapper.java
@@ -37,6 +37,13 @@
      */
     List<VoManure> selectSome(Map<?, ?> params);
 
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍
+     * @param manureId
+     * @return
+     */
+    List<VoManure> selectSomeByManureId(@Param("manureId") Long manureId);
+
     int updateByPrimaryKeySelective(RmManureLast record);
 
     int updateByPrimaryKey(RmManureLast record);
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmSoilDayMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmSoilDayMapper.java
index 5211723..4310755 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmSoilDayMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmSoilDayMapper.java
@@ -2,9 +2,12 @@
 
 import com.dy.pipIrrGlobal.pojoRm.RmSoilDay;
 import com.dy.pipIrrGlobal.pojoRm.RmSoilLast;
+import com.dy.pipIrrGlobal.voRm.VoSoil;
+import com.dy.pipIrrGlobal.voRm.VoSoilDay;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -21,6 +24,27 @@
     RmSoilDay selectByPrimaryKey(Long id);
 
     List<RmSoilDay> selectRmSoilDay(@Param("stSoilId") Long stSoilId, @Param("ymd") Integer ymd) ;
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍
+     * @param soilId
+     * @return
+     */
+    List<VoSoilDay> selectOneBySoilId(@Param("soilId") Long soilId, @Param("ymd") Integer ymd);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍鏁伴噺
+     * @param params
+     * @return
+     */
+    Long selectCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍
+     * @param params
+     * @return
+     */
+    List<VoSoilDay> selectSome(Map<?, ?> params);
+
 
     int updateByPrimaryKeySelective(RmSoilDay record);
 
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmSoilHistoryMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmSoilHistoryMapper.java
index c976c7b..9d07be9 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmSoilHistoryMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmSoilHistoryMapper.java
@@ -1,6 +1,10 @@
 package com.dy.pipIrrGlobal.daoRm;
 
 import com.dy.pipIrrGlobal.pojoRm.RmSoilHistory;
+import com.dy.pipIrrGlobal.voRm.VoSoil;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -16,6 +20,21 @@
 
     RmSoilHistory selectByPrimaryKey(Long id);
 
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍鏁伴噺
+     * @param params
+     * @return
+     */
+    Long selectCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍
+     * @param params
+     * @return
+     */
+    List<VoSoil> selectSome(Map<?, ?> params);
+
+
     int updateByPrimaryKeySelective(RmSoilHistory record);
 
     int updateByPrimaryKey(RmSoilHistory record);
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmSoilLastMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmSoilLastMapper.java
index a81e20a..f2f5382 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmSoilLastMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmSoilLastMapper.java
@@ -1,10 +1,11 @@
 package com.dy.pipIrrGlobal.daoRm;
 
-import com.dy.pipIrrGlobal.pojoRm.RmManureLast;
 import com.dy.pipIrrGlobal.pojoRm.RmSoilLast;
+import com.dy.pipIrrGlobal.voRm.VoSoil;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -22,6 +23,27 @@
 
     List<RmSoilLast> selectRmSoilLast(@Param("stSoilId") Long stSoilId) ;
 
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍鏁伴噺
+     * @param params
+     * @return
+     */
+    Long selectCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍
+     * @param params
+     * @return
+     */
+    List<VoSoil> selectSome(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍
+     * @param soilId
+     * @return
+     */
+    List<VoSoil> selectSomeBySoilId(@Param("soilId") Long soilId);
+
     int updateByPrimaryKeySelective(RmSoilLast record);
 
     int updateByPrimaryKey(RmSoilLast record);
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmWeatherHistoryMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmWeatherHistoryMapper.java
index 5c0c8e9..10ae489 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmWeatherHistoryMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmWeatherHistoryMapper.java
@@ -1,6 +1,10 @@
 package com.dy.pipIrrGlobal.daoRm;
 
 import com.dy.pipIrrGlobal.pojoRm.RmWeatherHistory;
+import com.dy.pipIrrGlobal.voRm.VoWeather;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -16,6 +20,20 @@
 
     RmWeatherHistory selectByPrimaryKey(Long id);
 
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍鏁伴噺
+     * @param params
+     * @return
+     */
+    Long selectCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍
+     * @param params
+     * @return
+     */
+    List<VoWeather> selectSome(Map<?, ?> params);
+
     int updateByPrimaryKeySelective(RmWeatherHistory record);
 
     int updateByPrimaryKey(RmWeatherHistory record);
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmWeatherLastMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmWeatherLastMapper.java
index 60618b3..d5e33d1 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmWeatherLastMapper.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmWeatherLastMapper.java
@@ -1,9 +1,11 @@
 package com.dy.pipIrrGlobal.daoRm;
 
 import com.dy.pipIrrGlobal.pojoRm.RmWeatherLast;
+import com.dy.pipIrrGlobal.voRm.VoWeather;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author: liurunyu
@@ -21,6 +23,27 @@
 
     List<RmWeatherLast> selectRmWeatherLast(@Param("stWeatherId") Long stWeatherId) ;
 
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍鏁伴噺
+     * @param params
+     * @return
+     */
+    Long selectCount(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍
+     * @param params
+     * @return
+     */
+    List<VoWeather> selectSome(Map<?, ?> params);
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍
+     * @param weatherId
+     * @return
+     */
+    List<VoWeather> selectSomeByWeatherId(@Param("weatherId") Long weatherId);
+
     int updateByPrimaryKeySelective(RmWeatherLast record);
 
     int updateByPrimaryKey(RmWeatherLast record);
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoSoil.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoSoil.java
new file mode 100644
index 0000000..db2a3ff
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoSoil.java
@@ -0,0 +1,117 @@
+package com.dy.pipIrrGlobal.voRm;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/26 9:03
+ * @Description
+ */
+@Data
+public class VoSoil {
+    public static final long serialVersionUID = 202506260903001L;
+
+    /**
+     * 璁板綍ID
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long id;
+
+    /**
+     * 澧掓儏绔橧D
+     */
+    @Schema(description = "澧掓儏绔橧D", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long soilId;
+
+    /**
+     * 澧掓儏绔欏悕绉�
+     */
+    @Schema(description = "澧掓儏绔欏悕绉�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public Long soilName;
+
+
+    /**
+     * 鏁版嵁涓婃姤鏃堕棿锛堝勾鏈堟棩鏃跺垎绉掞級
+     */
+    @Schema(description = "鏁版嵁鎺ユ敹鏃ユ湡鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    public Date dt;
+
+
+    /**
+     * 鍦熷¥婀垮害1
+     */
+    @Schema(description = "鍦熷¥婀垮害1", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilHumidity1;
+
+    /**
+     * 鍦熷¥婀垮害2
+     */
+    @Schema(description = "鍦熷¥婀垮害2", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilHumidity2;
+
+    /**
+     * 鍦熷¥婀垮害3
+     */
+    @Schema(description = "鍦熷¥婀垮害3", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilHumidity3;
+
+    /**
+     * 鍦熷¥婀垮害4
+     */
+    @Schema(description = "鍦熷¥婀垮害4", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilHumidity4;
+
+    /**
+     * 鍦熷¥婀垮害5
+     */
+    @Schema(description = "鍦熷¥婀垮害5", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilHumidity5;
+
+    /**
+     * 鍦熷¥娓╁害1
+     */
+    @Schema(description = "鍦熷¥娓╁害1", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilTemperature1;
+
+    /**
+     * 鍦熷¥娓╁害2
+     */
+    @Schema(description = "鍦熷¥娓╁害2", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilTemperature2;
+
+    /**
+     * 鍦熷¥娓╁害3
+     */
+    @Schema(description = "鍦熷¥娓╁害3", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilTemperature3;
+
+    /**
+     * 鍦熷¥娓╁害4
+     */
+    @Schema(description = "鍦熷¥娓╁害4", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilTemperature4;
+
+    /**
+     * 鍦熷¥娓╁害5
+     */
+    @Schema(description = "鍦熷¥娓╁害5", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilTemperature5;
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoSoilDay.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoSoilDay.java
new file mode 100644
index 0000000..e7bceca
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoSoilDay.java
@@ -0,0 +1,118 @@
+package com.dy.pipIrrGlobal.voRm;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/26 9:03
+ * @Description
+ */
+@Data
+public class VoSoilDay {
+    public static final long serialVersionUID = 202506261020001L;
+
+    /**
+     * 璁板綍ID
+     */
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long id;
+
+    /**
+     * 澧掓儏绔橧D
+     */
+    @Schema(description = "澧掓儏绔橧D", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JSONField(serializeUsing= ObjectWriterImplToString.class)
+    public Long soilId;
+
+    /**
+     * 澧掓儏绔欏悕绉�
+     */
+    @Schema(description = "澧掓儏绔欏悕绉�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public Long soilName;
+
+
+    /**
+     * 鏁版嵁鏃ユ湡锛堝勾鏈堟棩锛�
+     */
+    @Schema(description = "鏁版嵁鏃ユ湡", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    public Date dt;
+
+
+    /**
+     * 鏃ュ钩鍧囧湡澹ゆ箍搴�1
+     */
+    @Schema(description = "鏃ュ钩鍧囧湡澹ゆ箍搴�1", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilHumidity1;
+
+    /**
+     * 鏃ュ钩鍧囧湡澹ゆ箍搴�2
+     */
+    @Schema(description = "鏃ュ钩鍧囧湡澹ゆ箍搴�2", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilHumidity2;
+
+    /**
+     * 鏃ュ钩鍧囧湡澹ゆ箍搴�3
+     */
+    @Schema(description = "鏃ュ钩鍧囧湡澹ゆ箍搴�3", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilHumidity3;
+
+    /**
+     * 鏃ュ钩鍧囧湡澹ゆ箍搴�4
+     */
+    @Schema(description = "鏃ュ钩鍧囧湡澹ゆ箍搴�4", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilHumidity4;
+
+    /**
+     * 鏃ュ钩鍧囧湡澹ゆ箍搴�5
+     */
+    @Schema(description = "鏃ュ钩鍧囧湡澹ゆ箍搴�5", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilHumidity5;
+
+    /**
+     * 鏃ュ钩鍧囧湡澹ゆ俯搴�1
+     */
+    @Schema(description = "鏃ュ钩鍧囧湡澹ゆ俯搴�1", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilTemperature1;
+
+    /**
+     * 鏃ュ钩鍧囧湡澹ゆ俯搴�2
+     */
+    @Schema(description = "鏃ュ钩鍧囧湡澹ゆ俯搴�2", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilTemperature2;
+
+    /**
+     * 鏃ュ钩鍧囧湡澹ゆ俯搴�3
+     */
+    @Schema(description = "鏃ュ钩鍧囧湡澹ゆ俯搴�3", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilTemperature3;
+
+    /**
+     * 鏃ュ钩鍧囧湡澹ゆ俯搴�4
+     */
+    @Schema(description = "鏃ュ钩鍧囧湡澹ゆ俯搴�4", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilTemperature4;
+
+    /**
+     * 鏃ュ钩鍧囧湡澹ゆ俯搴�5
+     */
+    @Schema(description = "鏃ュ钩鍧囧湡澹ゆ俯搴�5", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern="0.00" )
+    public Double soilTemperature5;
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoWeather.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoWeather.java
new file mode 100644
index 0000000..2b16a61
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoWeather.java
@@ -0,0 +1,148 @@
+package com.dy.pipIrrGlobal.voRm;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/26 9:16
+ * @Description
+ */
+@Data
+public class VoWeather {
+    public static final long serialVersionUID = 202506260903001L;
+
+    /**
+     * 璁板綍ID
+     */
+    @JSONField(serializeUsing = ObjectWriterImplToString.class)
+    public Long id;
+
+    /**
+     * 姘旇薄绔橧D
+     */
+    @Schema(description = "姘旇薄绔橧D", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JSONField(serializeUsing = ObjectWriterImplToString.class)
+    public Long weatherId;
+
+    /**
+     * 姘旇薄绔欏悕绉�
+     */
+    @Schema(description = "姘旇薄绔欏悕绉�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public Long weatherName;
+
+
+    /**
+     * 鏁版嵁涓婃姤鏃堕棿锛堝勾鏈堟棩鏃跺垎绉掞級
+     */
+    @Schema(description = "鏁版嵁鎺ユ敹鏃ユ湡鏃堕棿", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    public Date dt;
+
+    /**
+     * 绌烘皵娓╁害
+     */
+    @Schema(description = "绌烘皵娓╁害", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern = "0.00")
+    public Double airTemperature;
+
+    /**
+     * 绌烘皵婀垮害
+     */
+    @Schema(description = "绌烘皵婀垮害", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern = "0.00")
+    public Double airHumidity;
+
+    /**
+     * 绱绾�
+     */
+    @Schema(description = "绱绾�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public Integer ultraviolet;
+
+    /**
+     * 鍏夌収寮哄害
+     */
+    @Schema(description = "鍏夌収寮哄害", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public Integer lightIntensity;
+
+    /**
+     * 闆ㄩ噺
+     */
+    @Schema(description = "闆ㄩ噺", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern = "0.00")
+    public Double rainfall;
+
+    /**
+     * 椋庨��
+     */
+    @Schema(description = "椋庨��", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    @JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT, pattern = "0.00")
+    public Double windSpeed;
+
+    /**
+     * 椋庡悜
+     */
+    @Schema(description = "椋庡悜", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public Integer windDirection;
+    /**
+     椋庡悜鍚嶇О
+     鏂逛綅鍚嶇О	瑙掑害鑼冨洿	    涓績瑙掑害
+     鍖楋紙N锛�	    348.75掳~11.25掳	0掳
+     涓滃寳锛圢E锛�	11.25掳~33.75掳	22.5掳
+     涓滐紙E锛�	    33.75掳~56.25掳	45掳
+     涓滃崡锛圫E锛�	56.25掳~78.75掳	67.5掳
+     鍗楋紙S锛�	    78.75掳~101.25掳	90掳
+     瑗垮崡锛圫W锛�	101.25掳~123.75掳	112.5掳
+     瑗匡紙W锛�	    123.75掳~146.25掳	135掳
+     瑗垮寳锛圢W锛�	146.25掳~168.75掳	157.5掳
+     鍖楋紙N锛�	    168.75掳~191.25掳	180掳
+
+     鍥涜垗浜斿叆鍚�
+     鏂逛綅鍚嶇О	瑙掑害鑼冨洿	     涓績瑙掑害
+     鍖楋紙N锛�	    349掳~11掳	 0掳
+     涓滃寳锛圢E锛�	11掳~34掳	     22.5掳
+     涓滐紙E锛�	    34掳~56掳	     45掳
+     涓滃崡锛圫E锛�	56掳~79掳	     67.5掳
+     鍗楋紙S锛�	    79掳~101掳	 90掳
+     瑗垮崡锛圫W锛�	101掳~124掳	 112.5掳
+     瑗匡紙W锛�	    124掳~146掳	 135掳
+     瑗垮寳锛圢W锛�	146掳~169掳	 157.5掳
+     鍖楋紙N锛�	    169掳~191掳	 180掳
+     */
+    @Schema(description = "椋庡悜", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public String windDirectionStr;
+    public String getWindDirectionStr() {
+        String str = "" ;
+        if (windDirection != null) {
+            if (windDirection >= 349 || windDirection < 11) {
+                str = "鍖�" ;
+            }else if(windDirection >= 11 && windDirection < 34){
+                str = "涓滃寳" ;
+            }else if(windDirection >= 34 && windDirection < 56){
+                str = "涓�" ;
+            }else if(windDirection >= 56 && windDirection < 79){
+                str = "涓滃崡" ;
+            }else if(windDirection >= 79 && windDirection < 101){
+                str = "鍗�" ;
+            }else if(windDirection >= 101 && windDirection < 124){
+                str = "瑗垮崡" ;
+            }else if(windDirection >= 124 && windDirection < 146){
+                str = "瑗�" ;
+            }else if(windDirection >= 146 && windDirection < 169){
+                str = "瑗垮寳" ;
+            }
+        }
+        if(str != null && !str.equals("")){
+            str = str + "(" + windDirection + ")" ;
+        }else{
+            str = "" + windDirection ;
+        }
+        return str ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmManureHistoryMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmManureHistoryMapper.xml
index 20cc470..c94dc1e 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmManureHistoryMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmManureHistoryMapper.xml
@@ -46,7 +46,7 @@
         AND mtb.no = #{no}
       </if>
       <if test = "name != null and name !=''">
-        AND mtb.name LIKE CONCAT('%',#{intakeNum},'%')
+        AND mtb.name LIKE CONCAT('%',#{name},'%')
       </if>
       <if test = "timeStart != null and timeStop != null">
         AND htb.dt BETWEEN #{timeStart} AND #{timeStop}
@@ -69,7 +69,7 @@
         AND mtb.no = #{no}
       </if>
       <if test = "name != null and name !=''">
-        AND mtb.name LIKE CONCAT('%',#{intakeNum},'%')
+        AND mtb.name LIKE CONCAT('%',#{name},'%')
       </if>
       <if test = "timeStart != null and timeStop != null">
         AND htb.dt BETWEEN #{timeStart} AND #{timeStop}
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmManureLastMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmManureLastMapper.xml
index c1bbf6f..a620094 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmManureLastMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmManureLastMapper.xml
@@ -49,7 +49,7 @@
   </select>
 
 
-  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍鏁伴噺-->
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍鏁伴噺-->
   <select id="selectCount" resultType="java.lang.Long">
     SELECT
     COUNT(*) AS recordCount
@@ -63,7 +63,7 @@
         AND mtb.no = #{no}
       </if>
       <if test = "name != null and name !=''">
-        AND mtb.name LIKE CONCAT('%',#{intakeNum},'%')
+        AND mtb.name LIKE CONCAT('%',#{name},'%')
       </if>
       <if test = "timeStart != null and timeStop != null">
         AND ltb.dt BETWEEN #{timeStart} AND #{timeStop}
@@ -71,7 +71,7 @@
     </where>
   </select>
 
-  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍-->
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍-->
   <select id="selectSome" resultType="com.dy.pipIrrGlobal.voRm.VoManure">
     SELECT
     <include refid="Base_Column_List" />,
@@ -86,7 +86,7 @@
         AND mtb.no = #{no}
       </if>
       <if test = "name != null and name !=''">
-        AND mtb.name LIKE CONCAT('%',#{intakeNum},'%')
+        AND mtb.name LIKE CONCAT('%',#{name},'%')
       </if>
       <if test = "timeStart != null and timeStop != null">
         AND ltb.dt BETWEEN #{timeStart} AND #{timeStop}
@@ -100,6 +100,19 @@
     </trim>
   </select>
 
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍-->
+  <select id="selectSomeByManureId" resultType="com.dy.pipIrrGlobal.voRm.VoManure">
+    select
+    <include refid="Base_Column_List" />
+    from rm_manure_last
+    <where>
+      <if test="manureId != null">
+        and manure_id = #{manureId}
+      </if>
+    </where>
+    limit 0,1
+  </select>
+
 
   <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
     <!--@mbg.generated-->
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmSoilDayMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmSoilDayMapper.xml
index 89a332f..a63c315 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmSoilDayMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmSoilDayMapper.xml
@@ -38,6 +38,12 @@
     soil_sum_humidity4, soil_sum_humidity5, soil_sum_temperature1, soil_sum_temperature2, 
     soil_sum_temperature3, soil_sum_temperature4, soil_sum_temperature5
   </sql>
+  <sql id="Part_Column_List">
+    <!--@mbg.generated-->
+    id, soil_id, dt, ymd, soil_humidity1, soil_humidity2, soil_humidity3, soil_humidity4,
+    soil_humidity5, soil_temperature1, soil_temperature2, soil_temperature3, soil_temperature4,
+    soil_temperature5
+  </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
     <!--@mbg.generated-->
     select 
@@ -55,13 +61,83 @@
       <if test="stSoilId != null and stSoilId != ''">
         and soil_id = #{stSoilId}
       </if>
-      <if test="ymd != null and ymd != ''">
+      <if test="ymd != null">
         and ymd = #{ymd}
       </if>
     </where>
     limit 0,1
   </select>
 
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍-->
+  <select id="selectOneBySoilId" resultType="com.dy.pipIrrGlobal.voRm.VoSoilDay">
+    select
+    <include refid="Part_Column_List" />
+    from rm_soil_day
+    <where>
+      <if test="soilId != null">
+        and soil_id = #{soilId}
+      </if>
+      <if test="ymd != null">
+        and ymd = #{ymd}
+      </if>
+    </where>
+    limit 0,1
+  </select>
+
+
+
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍鏁伴噺-->
+  <select id="selectCount" resultType="java.lang.Long">
+    SELECT
+    COUNT(*) AS recordCount
+    FROM rm_soil_day ltb
+    INNER JOIN pr_st_soil mtb ON mtb.id = ltb.soil_id
+    <where>
+      <if test="soilId != null">
+        AND ltb.soil_id = #{soilId}
+      </if>
+      <if test = "no != null">
+        AND mtb.no = #{no}
+      </if>
+      <if test = "name != null and name !=''">
+        AND mtb.name LIKE CONCAT('%',#{name},'%')
+      </if>
+      <if test = "timeStart != null and timeStop != null">
+        AND ltb.dt BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍-->
+  <select id="selectSome" resultType="com.dy.pipIrrGlobal.voRm.VoSoilDay">
+    SELECT
+    <include refid="Base_Column_List" />,
+    mtb.`name` AS soilName
+    FROM rm_soil_day ltb
+    INNER JOIN pr_st_soil mtb ON mtb.id = ltb.soil_id
+    <where>
+      <if test="soilId != null">
+        AND ltb.soil_id = #{soilId}
+      </if>
+      <if test = "no != null">
+        AND mtb.no = #{no}
+      </if>
+      <if test = "name != null and name !=''">
+        AND mtb.name LIKE CONCAT('%',#{name},'%')
+      </if>
+      <if test = "timeStart != null and timeStop != null">
+        AND ltb.dt BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+    ORDER BY ltb.soil_id DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
+
   <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
     <!--@mbg.generated-->
     delete from rm_soil_day
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmSoilHistoryMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmSoilHistoryMapper.xml
index 4a66ef7..b05d596 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmSoilHistoryMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmSoilHistoryMapper.xml
@@ -31,6 +31,57 @@
     from rm_soil_history
     where id = #{id,jdbcType=BIGINT}
   </select>
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍鏁伴噺-->
+  <select id="selectCount" resultType="java.lang.Long">
+    SELECT
+    COUNT(*) AS recordCount
+    FROM rm_soil_history htb
+    INNER JOIN pr_st_soil mtb ON mtb.id = htb.soil_id
+    <where>
+      <if test="soilId != null">
+        AND htb.soil_id = #{soilId}
+      </if>
+      <if test = "no != null">
+        AND mtb.no = #{no}
+      </if>
+      <if test = "name != null and name !=''">
+        AND mtb.name LIKE CONCAT('%',#{name},'%')
+      </if>
+      <if test = "timeStart != null and timeStop != null">
+        AND htb.dt BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍-->
+  <select id="selectSome" resultType="com.dy.pipIrrGlobal.voRm.VoSoil">
+    SELECT
+    <include refid="Base_Column_List" />,
+    mtb.`name` AS soilName
+    FROM rm_soil_history htb
+    INNER JOIN pr_st_soil mtb ON mtb.id = htb.soil_id
+    <where>
+      <if test="soilId != null">
+        AND htb.soil_id = #{soilId}
+      </if>
+      <if test = "no != null">
+        AND mtb.no = #{no}
+      </if>
+      <if test = "name != null and name !=''">
+        AND mtb.name LIKE CONCAT('%',#{name},'%')
+      </if>
+      <if test = "timeStart != null and timeStop != null">
+        AND htb.dt BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+    ORDER BY htb.id DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
+
   <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
     <!--@mbg.generated-->
     delete from rm_soil_history
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmSoilLastMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmSoilLastMapper.xml
index 2e10b41..478e8e1 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmSoilLastMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmSoilLastMapper.xml
@@ -45,6 +45,73 @@
     </where>
     limit 0,1
   </select>
+
+
+
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍鏁伴噺-->
+  <select id="selectCount" resultType="java.lang.Long">
+    SELECT
+    COUNT(*) AS recordCount
+    FROM rm_soil_last ltb
+    INNER JOIN pr_st_soil mtb ON mtb.id = ltb.soil_id
+    <where>
+      <if test="soilId != null">
+        AND ltb.soil_id = #{soilId}
+      </if>
+      <if test = "no != null">
+        AND mtb.no = #{no}
+      </if>
+      <if test = "name != null and name !=''">
+        AND mtb.name LIKE CONCAT('%',#{name},'%')
+      </if>
+      <if test = "timeStart != null and timeStop != null">
+        AND ltb.dt BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍-->
+  <select id="selectSome" resultType="com.dy.pipIrrGlobal.voRm.VoSoil">
+    SELECT
+    <include refid="Base_Column_List" />,
+    mtb.`name` AS soilName
+    FROM rm_soil_last ltb
+    INNER JOIN pr_st_soil mtb ON mtb.id = ltb.soil_id
+    <where>
+      <if test="soilId != null">
+        AND ltb.soil_id = #{soilId}
+      </if>
+      <if test = "no != null">
+        AND mtb.no = #{no}
+      </if>
+      <if test = "name != null and name !=''">
+        AND mtb.name LIKE CONCAT('%',#{name},'%')
+      </if>
+      <if test = "timeStart != null and timeStop != null">
+        AND ltb.dt BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+    ORDER BY ltb.soil_id DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍-->
+  <select id="selectSomeBySoilId" resultType="com.dy.pipIrrGlobal.voRm.VoSoil">
+    select
+    <include refid="Base_Column_List" />
+    from rm_soil_last
+    <where>
+      <if test="soilId != null">
+        and soil_id = #{soilId}
+      </if>
+    </where>
+    limit 0,1
+  </select>
+
   <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
     <!--@mbg.generated-->
     delete from rm_soil_last
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmWeatherHistoryMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmWeatherHistoryMapper.xml
index c241300..3019090 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmWeatherHistoryMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmWeatherHistoryMapper.xml
@@ -27,6 +27,56 @@
     from rm_weather_history
     where id = #{id,jdbcType=BIGINT}
   </select>
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍鏁伴噺-->
+  <select id="selectCount" resultType="java.lang.Long">
+    SELECT
+    COUNT(*) AS recordCount
+    FROM rm_weather_history htb
+    INNER JOIN pr_st_weather mtb ON mtb.id = htb.weather_id
+    <where>
+      <if test="weatherId != null">
+        AND htb.weather_id = #{weatherId}
+      </if>
+      <if test = "no != null">
+        AND mtb.no = #{no}
+      </if>
+      <if test = "name != null and name !=''">
+        AND mtb.name LIKE CONCAT('%',#{name},'%')
+      </if>
+      <if test = "timeStart != null and timeStop != null">
+        AND htb.dt BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍-->
+  <select id="selectSome" resultType="com.dy.pipIrrGlobal.voRm.VoWeather">
+    SELECT
+    <include refid="Base_Column_List" />,
+    mtb.`name` AS weatherName
+    FROM rm_weather_history htb
+    INNER JOIN pr_st_weather mtb ON mtb.id = htb.weather_id
+    <where>
+      <if test="weatherId != null">
+        AND htb.weather_id = #{weatherId}
+      </if>
+      <if test = "no != null">
+        AND mtb.no = #{no}
+      </if>
+      <if test = "name != null and name !=''">
+        AND mtb.name LIKE CONCAT('%',#{name},'%')
+      </if>
+      <if test = "timeStart != null and timeStop != null">
+        AND htb.dt BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+    ORDER BY htb.id DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
   <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
     <!--@mbg.generated-->
     delete from rm_weather_history
diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmWeatherLastMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmWeatherLastMapper.xml
index 4014fc3..9be0f00 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmWeatherLastMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmWeatherLastMapper.xml
@@ -41,6 +41,73 @@
     </where>
     limit 0,1
   </select>
+
+
+
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍鏁伴噺-->
+  <select id="selectCount" resultType="java.lang.Long">
+    SELECT
+    COUNT(*) AS recordCount
+    FROM rm_weather_last ltb
+    INNER JOIN pr_st_weather mtb ON mtb.id = ltb.weather_id
+    <where>
+      <if test="weatherId != null">
+        AND ltb.weather_id = #{weatherId}
+      </if>
+      <if test = "no != null">
+        AND mtb.no = #{no}
+      </if>
+      <if test = "name != null and name !=''">
+        AND mtb.name LIKE CONCAT('%',#{name},'%')
+      </if>
+      <if test = "timeStart != null and timeStop != null">
+        AND ltb.dt BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ璁板綍-->
+  <select id="selectSome" resultType="com.dy.pipIrrGlobal.voRm.VoWeather">
+    SELECT
+    <include refid="Base_Column_List" />,
+    mtb.`name` AS weatherName
+    FROM rm_weather_last ltb
+    INNER JOIN pr_st_weather mtb ON mtb.id = ltb.weather_id
+    <where>
+      <if test="weatherId != null">
+        AND ltb.weather_id = #{weatherId}
+      </if>
+      <if test = "no != null">
+        AND mtb.no = #{no}
+      </if>
+      <if test = "name != null and name !=''">
+        AND mtb.name LIKE CONCAT('%',#{name},'%')
+      </if>
+      <if test = "timeStart != null and timeStop != null">
+        AND ltb.dt BETWEEN #{timeStart} AND #{timeStop}
+      </if>
+    </where>
+    ORDER BY ltb.weather_id DESC
+    <trim prefix="limit " >
+      <if test="start != null and count != null">
+        #{start,javaType=Integer,jdbcType=INTEGER}, #{count,javaType=Integer,jdbcType=INTEGER}
+      </if>
+    </trim>
+  </select>
+
+  <!--鏍规嵁鎸囧畾鏉′欢鑾峰彇璁板綍-->
+  <select id="selectSomeByWeatherId" resultType="com.dy.pipIrrGlobal.voRm.VoWeather">
+    select
+    <include refid="Base_Column_List" />
+    from rm_weather_last
+    <where>
+      <if test="weatherId != null">
+        and weather_id = #{weatherId}
+      </if>
+    </where>
+    limit 0,1
+  </select>
+
   <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
     <!--@mbg.generated-->
     delete from rm_weather_last
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/manure/ManureCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/manure/ManureCtrl.java
index 1b6f71b..b441754 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/manure/ManureCtrl.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/manure/ManureCtrl.java
@@ -35,15 +35,36 @@
     }
 
     /**
-     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍
-     * @param qo
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鏈�鏂拌褰�
+     * @param manureId
      * @return
      */
-    @GetMapping(path = "history")
+    @GetMapping(path = "oneLast")
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<VoManure>>> selectHistory(ManureQo qo){
+    public BaseResponse<VoManure> oneLast(Long manureId){
         try {
-            return BaseResponseUtils.buildSuccess(sv.selectHistory(qo));
+            if(manureId == null){
+                return BaseResponseUtils.buildFail("姘磋偉鏈篿d涓嶈兘涓虹┖") ;
+            }
+            return BaseResponseUtils.buildSuccess(sv.oneLast(manureId));
+        } catch (Exception e) {
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍
+     * @param manureId
+     * @return
+     */
+    @GetMapping(path = "oneHistory")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoManure>>> oneHistory(Long manureId){
+        try {
+            if(manureId == null){
+                return BaseResponseUtils.buildFail("姘磋偉鏈篿d涓嶈兘涓虹┖") ;
+            }
+            return BaseResponseUtils.buildSuccess(sv.oneHistory(manureId));
         } catch (Exception e) {
             return BaseResponseUtils.buildException(e.getMessage()) ;
         }
@@ -54,11 +75,26 @@
      * @param qo
      * @return
      */
-    @GetMapping(path = "last")
+    @GetMapping(path = "someLast")
     @SsoAop()
-    public BaseResponse<QueryResultVo<List<VoManure>>> selectLast(ManureQo qo){
+    public BaseResponse<QueryResultVo<List<VoManure>>> someLast(ManureQo qo){
         try {
-            return BaseResponseUtils.buildSuccess(sv.selectLast(qo));
+            return BaseResponseUtils.buildSuccess(sv.someLast(qo));
+        } catch (Exception e) {
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍
+     * @param qo
+     * @return
+     */
+    @GetMapping(path = "someHistory")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoManure>>> someHistory(ManureQo qo){
+        try {
+            return BaseResponseUtils.buildSuccess(sv.someHistory(qo));
         } catch (Exception e) {
             return BaseResponseUtils.buildException(e.getMessage()) ;
         }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/manure/ManureQo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/manure/ManureQo.java
index 05076fb..4ba8a6e 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/manure/ManureQo.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/manure/ManureQo.java
@@ -20,7 +20,7 @@
      * 姘磋偉鏈篒D
      */
     @Schema(description = "姘磋偉鏈篒D", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
-    private Long manureId;
+    public Long manureId;
 
     /**
      * 姘磋偉绔欑紪鍙�
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/manure/ManureSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/manure/ManureSv.java
index 609c9fd..5ea1a61 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/manure/ManureSv.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/manure/ManureSv.java
@@ -28,14 +28,17 @@
     @Autowired
     private RmManureLastMapper rmManureLastDao ;
 
-    /**
-     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍
-     * @param qo
-     * @return
-     */
-    public QueryResultVo<List<VoManure>> selectHistory(ManureQo qo) {
-        qo.completionTime();
+    public VoManure oneLast(Long manureId) {
+        List<VoManure> list = this.rmManureLastDao.selectSomeByManureId(manureId) ;
+        if(list != null && list.size() > 0) {
+            return list.get(0) ;
+        }
+        return null ;
+    }
 
+    public QueryResultVo<List<VoManure>> oneHistory(Long manureId) {
+        ManureQo qo = new ManureQo() ;
+        qo.manureId = manureId ;
         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
         Long itemTotal = rmManureHistoryDao.selectCount(params);
 
@@ -53,7 +56,7 @@
      * @param qo
      * @return
      */
-    public QueryResultVo<List<VoManure>> selectLast(ManureQo qo) {
+    public QueryResultVo<List<VoManure>> someLast(ManureQo qo) {
         qo.completionTime();
 
         Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
@@ -67,4 +70,25 @@
         rsVo.obj = rmManureLastDao.selectSome(params);
         return rsVo ;
     }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍
+     * @param qo
+     * @return
+     */
+    public QueryResultVo<List<VoManure>> someHistory(ManureQo qo) {
+        qo.completionTime();
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
+        Long itemTotal = rmManureHistoryDao.selectCount(params);
+
+        QueryResultVo<List<VoManure>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = qo.pageSize ;
+        rsVo.pageCurr = qo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = rmManureHistoryDao.selectSome(params);
+        return rsVo ;
+    }
+
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/soil/SoilCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/soil/SoilCtrl.java
new file mode 100644
index 0000000..90468c2
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/soil/SoilCtrl.java
@@ -0,0 +1,159 @@
+package com.dy.pipIrrRemote.mqttSd1.soil;
+
+import com.dy.common.aop.SsoAop;
+import com.dy.common.util.NumUtil;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.voRm.VoSoil;
+import com.dy.pipIrrGlobal.voRm.VoSoilDay;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/26 09:31
+ * @Description
+ */
+@Slf4j
+@Tag(name = "澧掓儏鏁版嵁鏌ヨ", description = "澧掓儏鏁版嵁鏌ヨ")
+@RestController("rmSoilCtrl")
+@RequestMapping(path = "soil")
+@RequiredArgsConstructor
+public class SoilCtrl {
+
+    private SoilSv sv;
+
+    @Autowired
+    public void setSv(SoilSv sv){
+        this.sv = sv ;
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鏌愭皵璞$珯鏌愪竴鏃ヨ褰�
+     * @param soilId
+     * @param yyyy_MM_dd
+     * @return
+     */
+    @GetMapping(path = "oneDay")
+    @SsoAop()
+    public BaseResponse<VoSoilDay> oneDay(Long soilId, String yyyy_MM_dd){
+        try {
+            if(soilId == null){
+                return BaseResponseUtils.buildFail("澧掓儏绔檌d涓嶈兘涓虹┖") ;
+            }
+            if(yyyy_MM_dd == null || yyyy_MM_dd.trim().equals("")){
+                return BaseResponseUtils.buildFail("鏌ヨ鏃ユ湡涓嶈兘涓虹┖") ;
+            }
+            String ymdStr = yyyy_MM_dd.replaceAll("-", "") ;
+            if(!NumUtil.isPlusIntNumber(ymdStr)){
+                return BaseResponseUtils.buildFail("鏌ヨ鏃ユ湡鏍煎紡涓嶆纭紝鏍煎紡瑙勫畾涓簓yyy-MM-dd") ;
+            }
+            return BaseResponseUtils.buildSuccess(sv.oneDay(soilId, Integer.parseInt(ymdStr)));
+        } catch (Exception e) {
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鏌愭皵璞$珯涓�浜涙棩璁板綍
+     * @param qo
+     * @return
+     */
+    @GetMapping(path = "oneSomeDay")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoSoilDay>>> oneSomeDay(SoilQo qo){
+        try {
+            if(qo.soilId == null){
+                return BaseResponseUtils.buildFail("澧掓儏绔檌d涓嶈兘涓虹┖") ;
+            }
+            return BaseResponseUtils.buildSuccess(sv.someDay(qo));
+        } catch (Exception e) {
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ涓�浜涙皵璞$珯鏃ヨ褰�
+     * @param qo
+     * @return
+     */
+    @GetMapping(path = "someDay")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoSoilDay>>> someDay(SoilQo qo){
+        try {
+            return BaseResponseUtils.buildSuccess(sv.someDay(qo));
+        } catch (Exception e) {
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鏈�鏂拌褰�
+     * @param soilId
+     * @return
+     */
+    @GetMapping(path = "oneLast")
+    @SsoAop()
+    public BaseResponse<VoSoil> oneLast(Long soilId){
+        try {
+            return BaseResponseUtils.buildSuccess(sv.oneLast(soilId));
+        } catch (Exception e) {
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍
+     * @param soilId
+     * @return
+     */
+    @GetMapping(path = "oneHistory")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoSoil>>> oneHistory(Long soilId){
+        try {
+
+            return BaseResponseUtils.buildSuccess(sv.oneHistory(soilId));
+        } catch (Exception e) {
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鏈�鏂拌褰�
+     * @param qo
+     * @return
+     */
+    @GetMapping(path = "someLast")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoSoil>>> someLast(SoilQo qo){
+        try {
+            return BaseResponseUtils.buildSuccess(sv.someLast(qo));
+        } catch (Exception e) {
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍
+     * @param qo
+     * @return
+     */
+    @GetMapping(path = "someHistory")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoSoil>>> someHistory(SoilQo qo){
+        try {
+            return BaseResponseUtils.buildSuccess(sv.someHistory(qo));
+        } catch (Exception e) {
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/soil/SoilQo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/soil/SoilQo.java
new file mode 100644
index 0000000..be5e066
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/soil/SoilQo.java
@@ -0,0 +1,57 @@
+package com.dy.pipIrrRemote.mqttSd1.soil;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/26 09:31
+ * @Description
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class SoilQo extends QueryConditionVo {
+    /**
+     * 澧掓儏绔橧D
+     */
+    @Schema(description = "澧掓儏绔橧D", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public Long soilId;
+
+    /**
+     * 澧掓儏绔欑紪鍙�
+     */
+    @Schema(description = "澧掓儏绔欑紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public Integer no ;
+
+    /**
+     * 澧掓儏绔欏悕绉�
+     */
+    @Schema(description = "澧掓儏绔欏悕绉�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public String name;
+    /**
+     * 鏌ヨ寮�濮嬫棩鏈�
+     */
+    @Schema(description = "鏌ヨ寮�濮嬫棩鏈�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public String timeStart;
+
+    /**
+     * 鏌ヨ缁撴潫鏃ユ湡
+     */
+    @Schema(description = "鏌ヨ缁撴潫鏃ユ湡", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public String timeStop;
+
+
+    public void completionTime(){
+        if(timeStart != null && !timeStart.trim().equals("")) {
+            timeStart = timeStart + " 00:00:00";
+        }
+        if(timeStop != null && !timeStop.trim().equals("")) {
+            timeStop = timeStop + " 23:59:59";
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/soil/SoilSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/soil/SoilSv.java
new file mode 100644
index 0000000..f25ca0f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/soil/SoilSv.java
@@ -0,0 +1,123 @@
+package com.dy.pipIrrRemote.mqttSd1.soil;
+
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoRm.RmSoilDayMapper;
+import com.dy.pipIrrGlobal.daoRm.RmSoilHistoryMapper;
+import com.dy.pipIrrGlobal.daoRm.RmSoilLastMapper;
+import com.dy.pipIrrGlobal.voRm.VoSoil;
+import com.dy.pipIrrGlobal.voRm.VoSoilDay;
+import com.dy.pipIrrRemote.mqttSd1.soil.SoilQo;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/26 09:31
+ * @Description
+ */
+@Slf4j
+@Service("rmSoilSv")
+@RequiredArgsConstructor
+public class SoilSv {
+
+    @Autowired
+    private RmSoilDayMapper rmSoilDayDao ;
+    @Autowired
+    private RmSoilHistoryMapper rmSoilHistoryDao ;
+    @Autowired
+    private RmSoilLastMapper rmSoilLastDao ;
+
+    public VoSoilDay oneDay(Long soilId, Integer yyyyMMdd) {
+        List<VoSoilDay> list = this.rmSoilDayDao.selectOneBySoilId(soilId, yyyyMMdd) ;
+        if(list != null && list.size() > 0) {
+            return list.get(0) ;
+        }
+        return null ;
+    }
+
+
+    public QueryResultVo<List<VoSoilDay>> someDay(SoilQo qo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
+        Long itemTotal = rmSoilDayDao.selectCount(params);
+
+        QueryResultVo<List<VoSoilDay>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = qo.pageSize ;
+        rsVo.pageCurr = qo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = rmSoilDayDao.selectSome(params);
+        return rsVo ;
+    }
+
+
+
+    public VoSoil oneLast(Long soilId) {
+        List<VoSoil> list = this.rmSoilLastDao.selectSomeBySoilId(soilId) ;
+        if(list != null && list.size() > 0) {
+            return list.get(0) ;
+        }
+        return null ;
+    }
+
+    public QueryResultVo<List<VoSoil>> oneHistory(Long soilId) {
+        SoilQo qo = new SoilQo() ;
+        qo.soilId = soilId ;
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
+        Long itemTotal = rmSoilHistoryDao.selectCount(params);
+
+        QueryResultVo<List<VoSoil>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = qo.pageSize ;
+        rsVo.pageCurr = qo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = rmSoilHistoryDao.selectSome(params);
+        return rsVo ;
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鏈�鏂拌褰�
+     * @param qo
+     * @return
+     */
+    public QueryResultVo<List<VoSoil>> someLast(SoilQo qo) {
+        qo.completionTime();
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
+        Long itemTotal = rmSoilLastDao.selectCount(params);
+
+        QueryResultVo<List<VoSoil>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = qo.pageSize ;
+        rsVo.pageCurr = qo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = rmSoilLastDao.selectSome(params);
+        return rsVo ;
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍
+     * @param qo
+     * @return
+     */
+    public QueryResultVo<List<VoSoil>> someHistory(SoilQo qo) {
+        qo.completionTime();
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
+        Long itemTotal = rmSoilHistoryDao.selectCount(params);
+
+        QueryResultVo<List<VoSoil>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = qo.pageSize ;
+        rsVo.pageCurr = qo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = rmSoilHistoryDao.selectSome(params);
+        return rsVo ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/weather/WeatherCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/weather/WeatherCtrl.java
new file mode 100644
index 0000000..5ed8380
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/weather/WeatherCtrl.java
@@ -0,0 +1,102 @@
+package com.dy.pipIrrRemote.mqttSd1.weather;
+
+import com.dy.common.aop.SsoAop;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.voRm.VoWeather;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/26 09:33
+ * @Description
+ */
+@Slf4j
+@Tag(name = "姘旇薄鏁版嵁鏌ヨ", description = "姘旇薄鏁版嵁鏌ヨ")
+@RestController("rmWeatherCtrl")
+@RequestMapping(path = "weather")
+@RequiredArgsConstructor
+public class WeatherCtrl {
+
+    private WeatherSv sv;
+
+    @Autowired
+    public void setSv(WeatherSv sv){
+        this.sv = sv ;
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鏈�鏂拌褰�
+     * @param weatherId
+     * @return
+     */
+    @GetMapping(path = "oneLast")
+    @SsoAop()
+    public BaseResponse<VoWeather> oneLast(Long weatherId){
+        try {
+            if(weatherId == null){
+                return BaseResponseUtils.buildFail("姘旇薄绔檌d涓嶈兘涓虹┖") ;
+            }
+            return BaseResponseUtils.buildSuccess(sv.oneLast(weatherId));
+        } catch (Exception e) {
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍
+     * @param weatherId
+     * @return
+     */
+    @GetMapping(path = "oneHistory")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoWeather>>> oneHistory(Long weatherId){
+        try {
+            if(weatherId == null){
+                return BaseResponseUtils.buildFail("姘旇薄绔檌d涓嶈兘涓虹┖") ;
+            }
+           return BaseResponseUtils.buildSuccess(sv.oneHistory(weatherId));
+        } catch (Exception e) {
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鏈�鏂拌褰�
+     * @param qo
+     * @return
+     */
+    @GetMapping(path = "someLast")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoWeather>>> someLast(WeatherQo qo){
+        try {
+            return BaseResponseUtils.buildSuccess(sv.someLast(qo));
+        } catch (Exception e) {
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍
+     * @param qo
+     * @return
+     */
+    @GetMapping(path = "someHistory")
+    @SsoAop()
+    public BaseResponse<QueryResultVo<List<VoWeather>>> someHistory(WeatherQo qo){
+        try {
+            return BaseResponseUtils.buildSuccess(sv.someHistory(qo));
+        } catch (Exception e) {
+            return BaseResponseUtils.buildException(e.getMessage()) ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/weather/WeatherQo.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/weather/WeatherQo.java
new file mode 100644
index 0000000..e2b9816
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/weather/WeatherQo.java
@@ -0,0 +1,57 @@
+package com.dy.pipIrrRemote.mqttSd1.weather;
+
+import com.dy.common.webUtil.QueryConditionVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/26 09:33
+ * @Description
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class WeatherQo extends QueryConditionVo {
+    /**
+     * 姘旇薄绔橧D
+     */
+    @Schema(description = "姘旇薄绔橧D", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public Long weatherId;
+
+    /**
+     * 姘旇薄绔欑紪鍙�
+     */
+    @Schema(description = "姘旇薄绔欑紪鍙�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public Integer no ;
+
+    /**
+     * 姘旇薄绔欏悕绉�
+     */
+    @Schema(description = "姘旇薄绔欏悕绉�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public String name;
+    /**
+     * 鏌ヨ寮�濮嬫棩鏈�
+     */
+    @Schema(description = "鏌ヨ寮�濮嬫棩鏈�", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public String timeStart;
+
+    /**
+     * 鏌ヨ缁撴潫鏃ユ湡
+     */
+    @Schema(description = "鏌ヨ缁撴潫鏃ユ湡", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+    public String timeStop;
+
+
+    public void completionTime(){
+        if(timeStart != null && !timeStart.trim().equals("")) {
+            timeStart = timeStart + " 00:00:00";
+        }
+        if(timeStop != null && !timeStop.trim().equals("")) {
+            timeStop = timeStop + " 23:59:59";
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/weather/WeatherSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/weather/WeatherSv.java
new file mode 100644
index 0000000..e0e19e5
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/java/com/dy/pipIrrRemote/mqttSd1/weather/WeatherSv.java
@@ -0,0 +1,94 @@
+package com.dy.pipIrrRemote.mqttSd1.weather;
+
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pipIrrGlobal.daoRm.RmWeatherHistoryMapper;
+import com.dy.pipIrrGlobal.daoRm.RmWeatherLastMapper;
+import com.dy.pipIrrGlobal.voRm.VoWeather;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.common.utils.PojoUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/6/26 09:33
+ * @Description
+ */
+@Slf4j
+@Service("rmWeatherSv")
+@RequiredArgsConstructor
+public class WeatherSv {
+
+    @Autowired
+    private RmWeatherHistoryMapper rmWeatherHistoryDao ;
+    @Autowired
+    private RmWeatherLastMapper rmWeatherLastDao ;
+
+    public VoWeather oneLast(Long weatherId) {
+        List<VoWeather> list = this.rmWeatherLastDao.selectSomeByWeatherId(weatherId) ;
+        if(list != null && list.size() > 0) {
+            return list.get(0) ;
+        }
+        return null ;
+    }
+
+    public QueryResultVo<List<VoWeather>> oneHistory(Long weatherId) {
+        WeatherQo qo = new WeatherQo() ;
+        qo.weatherId = weatherId ;
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
+        Long itemTotal = rmWeatherHistoryDao.selectCount(params);
+
+        QueryResultVo<List<VoWeather>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = qo.pageSize ;
+        rsVo.pageCurr = qo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = rmWeatherHistoryDao.selectSome(params);
+        return rsVo ;
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鏈�鏂拌褰�
+     * @param qo
+     * @return
+     */
+    public QueryResultVo<List<VoWeather>> someLast(WeatherQo qo) {
+        qo.completionTime();
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
+        Long itemTotal = rmWeatherLastDao.selectCount(params);
+
+        QueryResultVo<List<VoWeather>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = qo.pageSize ;
+        rsVo.pageCurr = qo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = rmWeatherLastDao.selectSome(params);
+        return rsVo ;
+    }
+
+    /**
+     * 鏍规嵁鎸囧畾鏉′欢鏌ヨ鍘嗗彶璁板綍
+     * @param qo
+     * @return
+     */
+    public QueryResultVo<List<VoWeather>> someHistory(WeatherQo qo) {
+        qo.completionTime();
+
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo);
+        Long itemTotal = rmWeatherHistoryDao.selectCount(params);
+
+        QueryResultVo<List<VoWeather>> rsVo = new QueryResultVo<>() ;
+        rsVo.pageSize = qo.pageSize ;
+        rsVo.pageCurr = qo.pageCurr ;
+
+        rsVo.calculateAndSet(itemTotal, params);
+        rsVo.obj = rmWeatherHistoryDao.selectSome(params);
+        return rsVo ;
+    }
+
+}

--
Gitblit v1.8.0