From ee5f607999c657ccad03c78cfdc10adf6561f538 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期二, 19 八月 2025 08:56:17 +0800
Subject: [PATCH] 1、程序化哈格里夫斯(Hargreaves)公式; 2、实现每日定时任务,计算作物蒸腾量,并存储数据库

---
 pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/ModelCalculatorSv.java |   83 ++++++++++
 pipIrr-platform/pom.xml                                                                                            |   11 +
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoRm/RmWeatherHistoryMapper.java                  |    4 
 pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/timingTask/ModelListener.java         |    3 
 pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmWeatherHistoryMapper.xml                                 |   19 ++
 pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/timingTask/CalculateJob.java          |    8 
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoWeatherMaxMinTmp.java                       |   35 ++++
 pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/ModelCalculator.java   |  130 ++++++++++++++++
 pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/Hargreaves.java        |  149 ++++++++++++++++++
 pipIrr-platform/pipIrr-web/pom.xml                                                                                 |    7 
 10 files changed, 446 insertions(+), 3 deletions(-)

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 ffa0532..d51bb50 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
@@ -4,7 +4,9 @@
 import com.dy.pipIrrGlobal.pojoRm.RmSoilLast;
 import com.dy.pipIrrGlobal.pojoRm.RmWeatherHistory;
 import com.dy.pipIrrGlobal.voRm.VoWeather;
+import com.dy.pipIrrGlobal.voRm.VoWeatherMaxMinTmp;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -38,6 +40,8 @@
      */
     List<VoWeather> selectSome(Map<?, ?> params);
 
+    List<VoWeatherMaxMinTmp> selectMaxMinTemperature(@Param("weatherId") Long weatherId, @Param("maxId") Long maxId, @Param("minId") Long minId);
+
     int updateByPrimaryKeySelective(RmWeatherHistory record);
 
     int updateByPrimaryKey(RmWeatherHistory record);
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoWeatherMaxMinTmp.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoWeatherMaxMinTmp.java
new file mode 100644
index 0000000..120c024
--- /dev/null
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voRm/VoWeatherMaxMinTmp.java
@@ -0,0 +1,35 @@
+package com.dy.pipIrrGlobal.voRm;
+
+import com.alibaba.fastjson2.annotation.JSONField;
+import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import lombok.Data;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/8/18 16:48
+ * @Description
+ */
+@Data
+@JsonPropertyOrder({
+        "id", "weatherId",
+        "maxAirTemperature", "minAirTemperature"
+})
+public class VoWeatherMaxMinTmp {
+    /**
+     * 姘旇薄绔橧D
+     */
+    public Long weatherId;
+
+
+    /**
+     * 鏈�楂樻俯搴�
+     */
+    public Double maxAirTemperature ;
+
+
+    /**
+     * 鏈�浣庢俯搴�
+     */
+    public Double minAirTemperature ;
+}
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 77909d1..46aeef2 100644
--- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmWeatherHistoryMapper.xml
+++ b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/RmWeatherHistoryMapper.xml
@@ -86,6 +86,25 @@
       </if>
     </trim>
   </select>
+
+
+  <!--鏍规嵁鎸囧畾鏉′欢鏌ヨ娓╁害鐨勬渶澶у�间笌鏈�灏忓��-->
+  <select id="selectMaxMinTemperature" resultType="com.dy.pipIrrGlobal.voRm.VoWeatherMaxMinTmp">
+    SELECT max(air_temperature) maxTmp,  min(air_temperature) minTmp
+    FROM rm_weather_history tb
+    <where>
+      <if test="weatherId != null">
+        AND tb.weather_id = #{weatherId}
+      </if>
+      <if test="startId != null">
+        AND tb.id &gt;= #{startId}
+      </if>
+      <if test="endId != null">
+        AND tb.id &lt;= #{endId}
+      </if>
+    </where>
+  </select>
+
   <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
     <!--@mbg.generated-->
     delete from rm_weather_history
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/Hargreaves.java b/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/Hargreaves.java
new file mode 100644
index 0000000..08defd7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/Hargreaves.java
@@ -0,0 +1,149 @@
+package com.dy.pipIrrModel.modelCalculate;
+
+import net.objecthunter.exp4j.Expression;
+import net.objecthunter.exp4j.ExpressionBuilder;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/8/18 14:51
+ * @Description 鍝堟牸閲屽か鏂紙Hargreaves锛夊叕寮� 璁$畻浣滅墿瀹為檯钂告暎閲忥紙mm/day锛�
+ */
+public class Hargreaves {
+
+    /**
+     * 璁$畻寮у害
+     * 寮у害=瑙掑害脳 蟺/180
+     * @param lat 鍦扮悊绾害
+     * @return
+     */
+    public static Double rad(Double lat) {
+        Expression expression = new ExpressionBuilder("x * pi / 180")
+                .variables("x")
+                .build();
+        // 璁剧疆鍙橀噺鍊�
+        expression.setVariable("x", lat);
+        Double result = expression.evaluate();
+        return result ;
+    }
+
+    /**
+     * 澶槼纾佸亸瑙�
+     * @param dayIndex 涓哄勾鍐呮煇澶╃殑鏃ュ簭鏁帮紙姣斿1鏈�1鏃ヤ负1锛�12鏈�31鏃ヤ负365鎴�366锛�
+     * @return
+     */
+    public static Double sunMagnetismAngular(Integer dayIndex){
+        Expression expression = new ExpressionBuilder("0.409 * sin(((2 * pi) / 365) * x - 1.39)")
+                .variables("x")
+                .build();
+        // 璁剧疆鍙橀噺鍊�
+        expression.setVariable("x", dayIndex);
+        Double result = expression.evaluate();
+        return result ;
+    }
+
+    /**
+     * 鏃ュ湴闂寸浉瀵硅窛绂荤殑鍊掓暟
+     * @param dayIndex 涓哄勾鍐呮煇澶╃殑鏃ュ簭鏁帮紙姣斿1鏈�1鏃ヤ负1锛�12鏈�31鏃ヤ负365鎴�366锛�
+     * @return
+     */
+    public static Double sunEarthDistance(Integer dayIndex){
+        Expression expression = new ExpressionBuilder("1 + (0.033 * cos(((2 * pi) / 365) * x))")
+                .variables("x")
+                .build();
+        // 璁剧疆鍙橀噺鍊�
+        expression.setVariable("x", dayIndex);
+        Double result = expression.evaluate();
+        return result ;
+    }
+
+
+    /**
+     * 澶槼鏃惰
+     * 0.409 * sin(2 * pi / 365 * x - 1.39)
+     * @param fai 鍦扮悊寮у害
+     * @param sunMagnetismAngular 澶槼纾佸亸瑙�
+     * @return
+     */
+    public static Double sunTimeAngular(Double fai, Double sunMagnetismAngular){
+        Expression expression = new ExpressionBuilder("acos(-tan(x) * tan(y))")
+                .variables("x", "y")
+                .build();
+        // 璁剧疆鍙橀噺鍊�
+        expression.setVariable("x", fai);
+        expression.setVariable("y", sunMagnetismAngular);
+        Double result = expression.evaluate();
+        return result ;
+    }
+
+    /**
+     * 璁$畻澶╅《杈愬皠
+     * @param sunEarthDistance 鏃ュ湴闂寸浉瀵硅窛绂荤殑鍊掓暟
+     * @param sunTimeAngular 澶槼鏃跺亸瑙�
+     * @param fai 鍦扮悊寮у害
+     * @param sunMagnetismAngular 澶槼纾佸亸瑙�
+     * @return
+     */
+    public static Double zenithRadiation(Double sunEarthDistance,
+                                         Double sunTimeAngular,
+                                         Double fai,
+                                         Double sunMagnetismAngular){
+        Expression expression = new ExpressionBuilder("((24 * 60) / pi) * 0.082 * a * ((b * sin(c) * sin(d)) + (cos(c) * cos(d) * sin(b)))")
+                .variables("a", "b", "c", "d")
+                .build();
+        // 璁剧疆鍙橀噺鍊�
+        expression.setVariable("a", sunEarthDistance);
+        expression.setVariable("b", sunTimeAngular);
+        expression.setVariable("c", fai);
+        expression.setVariable("d", sunMagnetismAngular);
+        Double result = expression.evaluate();
+        return result ;
+    }
+
+    /**
+     * 鏍奸噷澶柉锛圚argreaves锛夊叕寮忚绠椾綔鐗╄捀鏁i噺锛坢m/day锛�
+     * @param kc 浣滅墿绯绘暟
+     * @param maxT 涓�鏃ュ唴鏈�楂樻俯搴�
+     * @param maxT 涓�鏃ュ唴鏈�楂樻俯搴�
+     * @param zenithRadiation 澶╅《杈愬皠
+     * @return
+     */
+    public static Double ET0(Double kc, Double maxT, Double minT, Double zenithRadiation){
+        Expression expression = new ExpressionBuilder("x * (0.0023 * (((a + b) / 2) + 17.8) * ((a + b)^(1/2)) * c * 0.408)")
+                .variables("x", "a", "b", "c")
+                .build();
+        // 璁剧疆鍙橀噺鍊�
+        expression.setVariable("x", kc);
+        expression.setVariable("a", maxT);
+        expression.setVariable("b", minT);
+        expression.setVariable("c", zenithRadiation);
+        Double result = expression.evaluate();
+        return result ;
+    }
+
+    public static void main(String[] args) {
+        Double lat = 38.561976140977116 ;
+        Integer dayIndex = 180 ;
+        Double kc = 0.41 ;//浣滅墿绯绘暟
+        Double maxT = 40.1 ;//涓�鏃ュ唴鏈�楂樻俯搴�
+        Double minT = 40.1 ;//涓�鏃ュ唴鏈�浣庢俯搴�
+
+        Double fai = rad(lat);
+        System.out.println(fai);
+
+        Double sunMagnetismAngular = sunMagnetismAngular(dayIndex);
+        System.out.println(sunMagnetismAngular);
+
+        Double sunEarthDistance = sunEarthDistance(dayIndex);
+        System.out.println(sunEarthDistance);
+
+        Double sunTimeAngular = sunTimeAngular(fai, sunMagnetismAngular);
+        System.out.println(sunTimeAngular);
+
+        Double zenithRadiation = zenithRadiation(sunEarthDistance, sunTimeAngular, fai, sunMagnetismAngular);
+        System.out.println(zenithRadiation);
+
+        Double et0 = ET0(kc, maxT, minT, zenithRadiation);
+        System.out.println(et0);
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/ModelCalculator.java b/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/ModelCalculator.java
new file mode 100644
index 0000000..308d460
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/ModelCalculator.java
@@ -0,0 +1,130 @@
+package com.dy.pipIrrModel.modelCalculate;
+
+import com.dy.common.util.DateTime;
+import com.dy.pipIrrGlobal.pojoMd.MdEt0;
+import com.dy.pipIrrGlobal.voMd.VoCrops;
+import com.dy.pipIrrGlobal.voPr.VoWeather;
+import com.dy.pipIrrGlobal.voRm.VoWeatherMaxMinTmp;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/8/18 16:26
+ * @Description
+ */
+@Slf4j
+@Component(ModelCalculator.selfBeanName)
+@Scope("prototype") //閲囩敤鍘熷瀷妯″紡锛屾瘡娆¤姹傛柊寤轰竴涓疄渚嬪璞�
+public class ModelCalculator {
+    public static final String selfBeanName = "modelCalculator";
+
+    private ModelCalculatorSv sv ;
+
+    @Autowired
+    public void setSv(ModelCalculatorSv sv){
+        this.sv = sv ;
+    }
+
+    public void execute(){
+        List<VoCrops> crops = this.sv.selectAllCrops() ;
+        if(crops != null && crops.size() > 0){
+            for (VoCrops crop : crops) {
+                if(crop.weatherId != null){
+                    try{
+                        VoWeather voWeather = this.sv.getWeather(crop.weatherId);
+                        if(voWeather.lat != null){
+                            this.executeOnCrop(crop, voWeather);
+                        }
+                    }catch (Exception e){
+                        log.error("璁$畻浣滅墿锛坕d=" + crop.id + "锛夎捀鑵炬暟鎹椂寮傚父", e);
+                    }
+                }
+            }
+        }
+    }
+    private void executeOnCrop(VoCrops vo, VoWeather voWeather) throws Exception{
+        String yesterday_ymd = DateTime.yesterday_yyyy_MM_dd(Integer.parseInt(DateTime.yyyy()), Integer.parseInt(DateTime.MM()), Integer.parseInt(DateTime.dd())) ; //鏄ㄥぉ
+        Double factor = this.getCropsFactor(vo, yesterday_ymd) ;
+        if(factor != null){
+            //璇存槑浣滅墿澶勪簬璁$畻鏈燂紙浣滅墿鐢熼暱鏈燂級涓�
+            List<VoWeatherMaxMinTmp> tmps = this.sv.selectYesterdayMaxMinTemperature(vo.weatherId) ;
+            if(tmps != null && tmps.size() > 0){
+                VoWeatherMaxMinTmp voMmTmp = tmps.get(0);//鍙兘鏈変竴鏉¤褰�
+                Double et0 = this.calculateEt0(yesterday_ymd, vo, voWeather, voMmTmp, factor) ;//璁$畻钂歌吘鏁版嵁
+                this.saveEt0(yesterday_ymd, vo, voWeather, voMmTmp, factor, et0) ;
+            }
+        }
+    }
+    private Double getCropsFactor(VoCrops vo, String yesterday) throws Exception{
+        Double factor = null ;
+        if(vo.stopped != null && vo.stopped != 1){
+            if(vo.startDt != null && vo.endDt != null){
+                String start = DateTime.yyyy() + "-" + vo.startDt ;
+                Long days = DateTime.daysBetweenyyyy_MM_dd(yesterday, start) ;
+                if(days >= 0){
+                    if(vo.life4Start != null && vo.life4End != null){
+                        if(days >= vo.life4Start && days <= vo.life4End){
+                            factor = vo.life4Factor ;
+                        }
+                        if(days > vo.life4End){
+                            factor = null ;
+                        }
+                    }
+                    if(vo.life3Start != null && vo.life3End != null){
+                        if(days >= vo.life3Start && days <= vo.life3End){
+                            factor = vo.life3Factor ;
+                        }
+                    }
+                    if(vo.life2Start != null && vo.life2End != null){
+                        if(days >= vo.life2Start && days <= vo.life2End){
+                            factor = vo.life2Factor ;
+                        }
+                    }
+                    if(vo.life1Start != null && vo.life1End != null){
+                        if(days >= vo.life1Start && days <= vo.life1End){
+                            factor = vo.life1Factor ;
+                        }
+                        if(days < vo.life1Start){
+                            factor = null ;
+                        }
+                    }
+                }else{
+                    factor = null ;
+                }
+            }
+        }
+        return factor ;
+    }
+
+    private Double calculateEt0(String yesterday_ymd, VoCrops vo, VoWeather voWeather, VoWeatherMaxMinTmp voMmTmp, Double factor) throws Exception{
+        Long days = DateTime.daysBetweenyyyy_MM_dd(yesterday_ymd, DateTime.yyyy() + "-01-01");
+        Integer dayIndex = days.intValue() + 1 ;
+
+        Double fai = Hargreaves.rad(voWeather.lat);
+
+        Double sunMagnetismAngular = Hargreaves.sunMagnetismAngular(dayIndex);
+
+        Double sunEarthDistance = Hargreaves.sunEarthDistance(dayIndex);
+
+        Double sunTimeAngular = Hargreaves.sunTimeAngular(fai, sunMagnetismAngular);
+
+        Double zenithRadiation = Hargreaves.zenithRadiation(sunEarthDistance, sunTimeAngular, fai, sunMagnetismAngular);
+
+        Double et0 = Hargreaves.ET0(factor, voMmTmp.maxAirTemperature, voMmTmp.minAirTemperature, zenithRadiation);
+        return et0 ;
+    }
+
+    private void saveEt0(String yesterday_ymd, VoCrops vo, VoWeather voWeather, VoWeatherMaxMinTmp voMmTmp, Double factor, Double et0)throws Exception{
+        MdEt0 po = this.sv.selectByCropWeatherDt(vo.id, voWeather.id, yesterday_ymd);
+        if(po != null){
+            Date yesterday = DateTime.dateFrom_yyyy_MM_dd(yesterday_ymd) ;
+            this.sv.saveEt0(vo.id, voWeather.id, yesterday, voMmTmp.maxAirTemperature, voMmTmp.minAirTemperature, factor, et0) ;
+        }
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/ModelCalculatorSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/ModelCalculatorSv.java
new file mode 100644
index 0000000..d35bc1b
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/ModelCalculatorSv.java
@@ -0,0 +1,83 @@
+package com.dy.pipIrrModel.modelCalculate;
+
+import com.dy.common.util.DateTime;
+import com.dy.common.util.IDLongGenerator;
+import com.dy.pipIrrGlobal.daoMd.MdCropsMapper;
+import com.dy.pipIrrGlobal.daoMd.MdEt0Mapper;
+import com.dy.pipIrrGlobal.daoPr.PrStWeatherMapper;
+import com.dy.pipIrrGlobal.daoRm.RmWeatherHistoryMapper;
+import com.dy.pipIrrGlobal.pojoMd.MdEt0;
+import com.dy.pipIrrGlobal.voMd.VoCrops;
+import com.dy.pipIrrGlobal.voPr.VoWeather;
+import com.dy.pipIrrGlobal.voRm.VoWeatherMaxMinTmp;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/8/18 16:34
+ * @Description
+ */
+@Slf4j
+@Service
+public class ModelCalculatorSv {
+    private MdCropsMapper mdCropsDao ;
+    private PrStWeatherMapper prWeatherDao ;
+    private RmWeatherHistoryMapper rmWeatherHistoryDao;
+    private MdEt0Mapper mdEt0Dao;
+
+    @Autowired
+    private void setDao(MdCropsMapper mdCropsDao,
+                        PrStWeatherMapper prWeatherDao,
+                        RmWeatherHistoryMapper rmWeatherHistoryDao,
+                        MdEt0Mapper mdEt0Dao) {
+        this.mdCropsDao = mdCropsDao;
+        this.prWeatherDao = prWeatherDao;
+        this.rmWeatherHistoryDao = rmWeatherHistoryDao;
+        this.mdEt0Dao = mdEt0Dao;
+    }
+    /**
+     * 鏌ヨ鎵�鏈変綔鐗�
+     * @return 鍖呭惈瀹炰綋闆嗗悎鐨勭粨鏋滃璞�
+     */
+    @SuppressWarnings("unchecked")
+    public List<VoCrops> selectAllCrops(){
+        return this.mdCropsDao.selectAll() ;
+    }
+
+    public VoWeather getWeather(Long weatherId) throws Exception{
+        return this.prWeatherDao.selectOne(weatherId) ;
+    }
+
+    public List<VoWeatherMaxMinTmp> selectYesterdayMaxMinTemperature(Long weatherId) throws Exception{
+        String ymd = DateTime.yesterday_yyyy_MM_dd(Integer.parseInt(DateTime.yyyy()), Integer.parseInt(DateTime.MM()), Integer.parseInt(DateTime.dd())) ; //鏄ㄥぉ
+        int[] ymdGrp = DateTime.yyyy_MM_dd_2_ymdGroup(ymd) ;
+        Long startId = IDLongGenerator.generateOneDayStartId(ymdGrp[0], ymdGrp[1], ymdGrp[2]) ;
+        Long endId = IDLongGenerator.generateOneDayEndId(ymdGrp[0], ymdGrp[1], ymdGrp[2]) ;
+        return this.rmWeatherHistoryDao.selectMaxMinTemperature(weatherId, startId, endId);
+    }
+
+    public MdEt0 selectByCropWeatherDt(Long cropId, Long weatherId, String yesterday) throws Exception{
+        return this.mdEt0Dao.selectByCropWeatherDt(cropId, weatherId, yesterday) ;
+    }
+
+    @Transactional(rollbackFor=Exception.class)
+    public int saveEt0(Long cropId, Long weatherId, Date yesterday, Double maxAirTemperature, Double minAirTemperature, Double factor, Double et0){
+        MdEt0 po = new MdEt0();
+        po.cropId = cropId ;
+        po.weatherId = weatherId ;
+        po.dt = yesterday ;
+        po.maxTmp = maxAirTemperature ;
+        po.minTmp = minAirTemperature ;
+        po.factor = factor ;
+        po.et0 = et0 ;
+        this.mdEt0Dao.insert(po) ;
+        return 0 ;
+    }
+}
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/CalculateJob.java b/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/timingTask/CalculateJob.java
similarity index 74%
rename from pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/CalculateJob.java
rename to pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/timingTask/CalculateJob.java
index 1545162..c5c184a 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/CalculateJob.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/timingTask/CalculateJob.java
@@ -1,7 +1,9 @@
-package com.dy.pipIrrModel.modelCalculate;
+package com.dy.pipIrrModel.timingTask;
 
 import com.dy.common.multiDataSource.DataSourceContext;
 import com.dy.common.schedulerTask.TaskJob;
+import com.dy.common.springUtil.SpringContextUtil;
+import com.dy.pipIrrModel.modelCalculate.ModelCalculator;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.quartz.JobDataMap;
@@ -29,5 +31,9 @@
             return ;
         }
         DataSourceContext.set(orgTag);//璁剧疆鏁版嵁婧�
+        ModelCalculator bean = (ModelCalculator)SpringContextUtil.getBean(ModelCalculator.selfBeanName);
+        if(bean != null){
+            bean.execute();
+        }
     }
 }
diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/ModelListener.java b/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/timingTask/ModelListener.java
similarity index 94%
rename from pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/ModelListener.java
rename to pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/timingTask/ModelListener.java
index 24f4bec..f0ae894 100644
--- a/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/modelCalculate/ModelListener.java
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-model/src/main/java/com/dy/pipIrrModel/timingTask/ModelListener.java
@@ -1,4 +1,4 @@
-package com.dy.pipIrrModel.modelCalculate;
+package com.dy.pipIrrModel.timingTask;
 
 import com.dy.common.schedulerTask.SchedulerTaskSupport;
 import com.dy.pipIrrGlobal.util.Org;
@@ -78,7 +78,6 @@
                 HashMap<String , Object> jobDataMap	= new HashMap<String , Object>() ;
                 jobDataMap.put(orgKey, vo.tag) ;
                 SchedulerTaskSupport.addDailyJob(JobName + vo.tag, JobGroupName, CalculateJob.class, jobDataMap, startHour, startMinute ) ;
-                //SchedulerTaskSupport.addSecondlyJob(JobName + vo.tag, JobGroupName, TestJob.class, jobDataMap, 10, 10000, 0 ) ;
             }
         }
     }
diff --git a/pipIrr-platform/pipIrr-web/pom.xml b/pipIrr-platform/pipIrr-web/pom.xml
index 12acacb..d836310 100644
--- a/pipIrr-platform/pipIrr-web/pom.xml
+++ b/pipIrr-platform/pipIrr-web/pom.xml
@@ -249,6 +249,13 @@
             <version>2.18.0</version>
         </dependency>
 
+        <!-- java鏁板鍏紡璁$畻 -->
+        <dependency>
+            <groupId>net.objecthunter</groupId>
+            <artifactId>exp4j</artifactId>
+            <version>0.4.8</version>
+        </dependency>
+
         <!-- 娴嬭瘯 -->
         <dependency>
             <groupId>org.springframework.boot</groupId>
diff --git a/pipIrr-platform/pom.xml b/pipIrr-platform/pom.xml
index b022e0a..b38001c 100644
--- a/pipIrr-platform/pom.xml
+++ b/pipIrr-platform/pom.xml
@@ -47,6 +47,7 @@
         <mapstruct.version>1.5.5.Final</mapstruct.version>
         <hutool-all.version>5.8.22</hutool-all.version>
         <org-jdom2.version>2.0.6.1</org-jdom2.version>
+        <net.exp4j>0.4.8</net.exp4j>
 
         <spring-boot-maven-plugin.version>3.2.0</spring-boot-maven-plugin.version>
         <maven-jar-plugin-plugin.version>3.3.0</maven-jar-plugin-plugin.version>
@@ -334,6 +335,16 @@
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
+
+            <!-- java鏁板鍏紡璁$畻 -->
+            <dependency>
+                <groupId>net.objecthunter</groupId>
+                <artifactId>exp4j</artifactId>
+                <version>0.4.8</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
             <!-- 娴嬭瘯 -->
             <dependency>
                 <groupId>org.springframework.boot</groupId>

--
Gitblit v1.8.0