From 4513ef24bf9b188c2a77d6ce94f1a6b7e9ebf0e6 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期日, 27 四月 2025 20:40:19 +0800
Subject: [PATCH] fix(irrigatePlan): 修正灌溉计划开始时间逻辑

---
 pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/changeSome/ChSomeIntakeAmountSv.java |  292 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 292 insertions(+), 0 deletions(-)

diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/changeSome/ChSomeIntakeAmountSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/changeSome/ChSomeIntakeAmountSv.java
new file mode 100644
index 0000000..f7c8286
--- /dev/null
+++ b/pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/changeSome/ChSomeIntakeAmountSv.java
@@ -0,0 +1,292 @@
+package com.dy.pipIrrTemp.changeSome;
+
+import com.dy.common.util.DateTime;
+import com.dy.pipIrrGlobal.daoTmp.ChangeMapper;
+import com.dy.pipIrrGlobal.pojoRm.RmIntakeAmountDay;
+import com.dy.pipIrrGlobal.pojoSt.StIntakeAmountMonth;
+import com.dy.pipIrrGlobal.pojoSt.StIntakeAmountYear;
+import com.dy.pipIrrGlobal.voSt.VoIntake;
+import com.dy.pipIrrGlobal.voTmp.VoRmIntakeAmountDay;
+import com.dy.pipIrrTemp.util.StClientAmountConstant;
+import lombok.extern.slf4j.Slf4j;
+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: 2024/12/14 9:25
+ * @Description
+ */
+
+
+@Slf4j
+@Service
+public class ChSomeIntakeAmountSv {
+
+    private ChangeMapper dao;
+
+    @Autowired
+    private void setDao(ChangeMapper dao){
+        this.dao = dao;
+    }
+
+
+    ////////////////////////////////////////
+    //
+    // 鏈夊叧鏃ョ粺璁�
+    //
+    ///////////////////////////////////////
+
+    /**
+     * 璋冩暣鍙栨按鍙f棩鍙栨按閲忕粺璁�
+     * @throws Exception
+     */
+    public void chIntakeAmountDay() throws Exception{
+        RmIntakeAmountDay lastAd = null ;
+        List<VoIntake> list = dao.selectAllPrIntakes() ;
+        if(list != null && list.size() > 0){
+            for(VoIntake vo : list){
+                lastAd = null ;
+                List<RmIntakeAmountDay> adList = dao.selectOneIntakeAllAmountDay(vo.getIntakeId()) ;
+                if(adList != null && adList.size() > 0){
+                    //adList涓暟鎹互id鍗囧簭鎺掑垪
+                    for(RmIntakeAmountDay ad : adList){
+                        if(lastAd == null){
+                            lastAd = ad ;
+                            if(lastAd.amount != null && lastAd.amount > StClientAmountConstant.IntakeAmountDayFlag){
+                                this.doUpdateOneIntakeAmountDay(lastAd.id, 0.0);
+                            }
+                        }else{
+                            if(ad.amount != null && ad.amount > StClientAmountConstant.IntakeAmountDayFlag){
+                                if(ad.totalAmountLast != null && lastAd.totalAmountLast != null){
+                                    //閲嶆柊璁$畻鏃ュ彇姘撮噺
+                                    ad.amount = ad.totalAmountLast - lastAd.totalAmountLast;
+                                    if(ad.amount < 0){//璁$畻鏃ュ彇姘撮噺鍚庯紝鍙兘浼氭湁杩欑鎯呭喌鍙戠敓锛堣礋鍊硷級
+                                        log.info("鍑虹幇璋冩暣鍚庣殑鏃ュ彇姘撮噺鍑虹幇璐熷��" + ad.amount
+                                                + "鎯呭喌锛屾暟鎹甶d=" + ad.id
+                                                + "锛屽彇姘村彛id=" + ad.intakeId
+                                                + "锛屾棩鏈�=" + ad.dt
+                                                + "锛岃缃按閲�=0.0"
+                                        );
+                                        ad.amount = 0.0 ;
+                                    }
+                                    if(ad.amount > StClientAmountConstant.IntakeAmountDayFlag){
+                                        //璁$畻鏃ュ彇姘撮噺鍚庯紝浠嶅ぇ浜嶪ntakeAmountDayFlag
+                                        log.info("鍑虹幇璋冩暣鍚庣殑鏃ュ彇姘撮噺浠嶅ぇ浜�"
+                                                + StClientAmountConstant.IntakeAmountDayFlag
+                                                + "鐨勬儏鍐碉紝鏁版嵁id=" + ad.id
+                                                + "锛屽彇姘村彛id=" + ad.intakeId
+                                                + "锛屾棩鏈�=" + ad.dt
+                                                + ad.amount
+                                        );
+                                        if(ad.dt != null && lastAd.dt != null){
+                                            if(DateTime.daysBetweenyyyy_MM_dd(ad.dt, lastAd.dt) == 1){
+                                                //鍙浉宸竴澶�
+                                                log.info("鍑虹幇鐩稿樊涓�澶╀絾鏃ュ彇姘撮噺澶т簬"
+                                                        + StClientAmountConstant.IntakeAmountDayFlag
+                                                        + "鐨勬儏鍐碉紝鏁版嵁id=" + ad.id
+                                                        + "锛屽彇姘村彛id=" + ad.intakeId
+                                                        + "锛屾棩鏈�=" + ad.dt
+                                                        + "锛岃缃按閲�=0.0"
+                                                        + "锛岃缃墠姘撮噺= " + ad.amount
+                                                );
+                                                ad.amount = 0.0 ;
+                                            }else{
+                                                //宸茬粡淇敼鍚庣殑鏁板�间粛鐒跺ぇ浜嶪ntakeAmountDayFlag锛岃鏄庢槸澶ф棩鏈笂鎶ユ暟鎹�岀Н绱笅鏉�,鍙互澶т簬IntakeAmountDayFlag
+                                                //ad.amount = ad.amount ;
+                                                log.info("鍑虹幇鐩稿樊澶氬ぉ鏃ュ彇姘撮噺澶т簬"
+                                                        + StClientAmountConstant.IntakeAmountDayFlag
+                                                        + "鐨勬儏鍐碉紝鏁版嵁id=" + ad.id
+                                                        + "锛屽彇姘村彛id=" + ad.intakeId
+                                                        + "锛屾棩鏈�=" + ad.dt
+                                                        + "锛屾按閲忎繚鎸佷笉鍙�=" + ad.amount
+                                                );
+                                            }
+                                        }
+                                    }
+                                }else{
+                                    log.info("鍑虹幇鐩稿樊澶氬ぉ鏃ュ彇姘撮噺澶т簬"
+                                            + StClientAmountConstant.IntakeAmountDayFlag
+                                            + "骞朵笖灞炴�otalAmountLast涓簄ull鐨勬儏鍐碉紝鏁版嵁id=" + ad.id
+                                            + "锛屽彇姘村彛id=" + ad.intakeId
+                                            + "锛屾棩鏈�=" + ad.dt
+                                            + "锛岃缃按閲�=0.0"
+                                            + "锛岃缃墠姘撮噺= " + ad.amount
+                                    );
+                                    ad.amount = 0.0 ;
+                                }
+                                this.doUpdateOneIntakeAmountDay(ad.id,  ad.amount);
+                            }
+                        }
+                        lastAd = ad ;
+                    }
+                }
+            }
+        }
+    }
+
+    @Transactional
+    protected int doUpdateOneIntakeAmountDay(Long id, Double amount){
+        return dao.updateOneIntakeAmountDay(id, amount);
+    }
+
+    /**
+     * 鍒犻櫎鎵�鏈夊彇姘村彛鏃ュ彇姘撮噺缁熻
+     * @throws Exception
+     */
+    //@Transactional
+    //public void deleteAllIntakeAmountDay(){
+    //    dao.deleteAllIntakeAmountDay();
+    //}
+    /**
+     * 鍒犻櫎涓�浜涘彇姘村彛鏃ュ彇姘撮噺缁熻
+     * @throws Exception
+     */
+    @Transactional
+    public void deleteSomeIntakeAmountDay(){
+        dao.deleteSomeIntakeAmountDay();
+    }
+
+
+    /**
+     * 缁熻鍙栨按鍙f棩鍙栨按閲�
+     * @throws Exception
+     */
+    public void statisticsIntakeAmountDay() throws Exception{
+        int nowYear = Integer.parseInt(DateTime.yyyy()) ;
+        int nowMonth = Integer.parseInt(DateTime.MM()) ;
+        int nowDay = Integer.parseInt(DateTime.dd()) ;
+        Date startDt ;
+        Date endDt ;
+        List<VoRmIntakeAmountDay> list ;
+        boolean stop = false ;
+        for(int[] ym : StClientAmountConstant.yearMonthGrp) {
+            int[] dates = DateTime.dayGrpInMonth(ym[0], ym[1]);
+            for(int day: dates){
+                if(ym[0] == nowYear && ym[1] == nowMonth && day > nowDay){
+                    stop = true ;
+                }
+                if(!stop){
+                    startDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(ym[0] + "-" + ym[1] + "-" + day + " 00:00:00") ;
+                    endDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(ym[0] + "-" + ym[1] + "-" + day + " 23:59:59") ;
+                    list = dao.statisticAllIntakeAmountDayFromOpenCloseValveHistory(startDt, endDt) ;
+                    this.doStatisticsIntakeAmountDay(ym[0], ym[1], day, list) ;
+                }else{
+                    break ;
+                }
+            }
+        }
+    }
+    @Transactional
+    protected void doStatisticsIntakeAmountDay(int year, int month, int day, List<VoRmIntakeAmountDay> list) throws Exception{
+        if(list != null && list.size() > 0){
+            Date date = DateTime.dateFrom_yyyy_MM_dd(year + "-" + month + "-" + day) ;
+            for(VoRmIntakeAmountDay vo : list){
+                dao.updateOneIntakeAmountDay1(vo.intakeId, date, vo.amount, vo.money, vo.times);
+            }
+        }
+    }
+
+
+    ////////////////////////////////////////
+    //
+    // 鏈夊叧鏈堢粺璁�
+    //
+    ///////////////////////////////////////
+
+    /**
+     * 鍒犻櫎鎵�鏈夊彇姘村彛鏈堝彇姘撮噺缁熻
+     * @throws Exception
+     */
+    @Transactional
+    public void deleteAllIntakeAmountMonth(){
+        dao.deleteAllIntakeAmountMonth();
+    }
+
+    /**
+     * 缁熻鍙栨按鍙f湀鍙栨按閲�
+     * @throws Exception
+     */
+    public void statisticsIntakeAmountMonth() throws Exception{
+        int nowYear = Integer.parseInt(DateTime.yyyy()) ;
+        int nowMonth = Integer.parseInt(DateTime.MM()) ;
+        Date startDt ;
+        Date endDt ;
+        List<StIntakeAmountMonth> list ;
+        for(int year = StClientAmountConstant.DealStartYear; year <= nowYear; year ++){
+            list = null ;
+            if(year < nowYear){
+                for(int month = 1 ; month <= 12 ; month ++){
+                    startDt = DateTime.dateFrom_yyyy_MM_dd(year + "-" + month + "-01") ;
+                    endDt = DateTime.dateFrom_yyyy_MM_dd(year + "-" + month + "-" + DateTime.endDayOfMonth(year, month)) ;
+                    list = dao.statisticAllIntakeAmountMonthFromAmountDay(startDt, endDt) ;
+                    this.doStatisticsIntakeAmountMonth(year, month, list) ;
+                }
+            }else{
+                for(int month = 1 ; month <= nowMonth ; month ++){
+                    startDt = DateTime.dateFrom_yyyy_MM_dd(year + "-" + month + "-01") ;
+                    endDt = DateTime.dateFrom_yyyy_MM_dd(year + "-" + month + "-" + DateTime.endDayOfMonth(year, month)) ;
+                    list = dao.statisticAllIntakeAmountMonthFromAmountDay(startDt, endDt) ;
+                    this.doStatisticsIntakeAmountMonth(year, month, list) ;
+                }
+            }
+        }
+    }
+    @Transactional
+    protected void doStatisticsIntakeAmountMonth(int year, int month, List<StIntakeAmountMonth> list) throws Exception{
+        if(list != null && list.size() > 0){
+            for(StIntakeAmountMonth po : list){
+                po.year = year ;
+                po.month = month ;
+                dao.saveOneIntakeAmountMonth(po) ;
+            }
+        }
+    }
+
+
+    ////////////////////////////////////////
+    //
+    // 鏈夊叧骞寸粺璁�
+    //
+    ///////////////////////////////////////
+    /**
+     * 鍒犻櫎鎵�鏈夊彇姘村彛骞村彇姘撮噺缁熻
+     * @throws Exception
+     */
+    @Transactional
+    public void deleteAllIntakeAmountYear(){
+        dao.deleteAllIntakeAmountYear();
+    }
+
+    /**
+     * 缁熻鍙栨按鍙f湀鍙栨按閲�
+     * @throws Exception
+     */
+    public void statisticsIntakeAmountYear() throws Exception{
+        int nowYear = Integer.parseInt(DateTime.yyyy()) ;
+        Date startDt ;
+        Date endDt ;
+        List<StIntakeAmountYear> list ;
+        for(int year = StClientAmountConstant.DealStartYear; year <= nowYear; year ++){
+            list = null ;
+            startDt = DateTime.dateFrom_yyyy_MM_dd(year + "-01-01") ;
+            endDt = DateTime.dateFrom_yyyy_MM_dd(year + "-12-31") ;
+            list = dao.statisticAllIntakeAmountYearFromAmountDay(startDt, endDt) ;
+            this.doStatisticsIntakeAmountYear(year, list) ;
+        }
+    }
+    @Transactional
+    protected void doStatisticsIntakeAmountYear(int year, List<StIntakeAmountYear> list) throws Exception{
+        if(list != null && list.size() > 0){
+            for(StIntakeAmountYear po : list){
+                po.year = year ;
+                dao.saveOneIntakeAmountYear(po) ;
+            }
+        }
+    }
+
+}

--
Gitblit v1.8.0