From f03453071fc641c9e459b4b0d767cb2acac4c13a Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期三, 14 五月 2025 14:01:27 +0800
Subject: [PATCH] 根据表阀一体机协议上行数据,实现漏损日统计、取水口用水日统计、IC卡剩余金额同步设置、农户用水日统计

---
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmLossDay.java                                           |    8 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealClientAmountDayV202404.java |  344 ++++++++++++++++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_83_Up.java                           |    4 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/RtuDataDealTree.xml                                                  |    4 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealIntakeAmountDayV202404.java |  517 ++++++++++++++++++++++++
 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmLossDayLast.java                                       |    7 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealIcRemainMoneyV202404.java   |  164 +++++++
 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd83Vo.java                         |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealIntakeAmountDay.java             |    2 
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealLossV202404.java            |  170 ++++++++
 10 files changed, 1,219 insertions(+), 3 deletions(-)

diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_83_Up.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_83_Up.java
index 0b05fc4..e3e8e91 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_83_Up.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/Cd_83_Up.java
@@ -133,9 +133,11 @@
 
         String ymd = "20" + yy + "-" + mm + "-" + dd ;
 
-        cdData.rtuDt = ymd + " " + hh ;
+        cdData.rtuDt = ymd + " " + hh + ":00:00" ;
 
         cdData.dataDt = DateTime.lastXDay_yyyy_MM_dd(ymd, 1) ;
+
+        cdData.dataDt += " 23:59:59" ;
     }
 
 }
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd83Vo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd83Vo.java
index 960e4ac..9dc7572 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd83Vo.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/upVos/DataCd83Vo.java
@@ -18,7 +18,7 @@
 	public Double waterUserTotalAmountDay ;// 褰撴棩鐢ㄦ埛鐢ㄦ按閲�
 	public Double lossTotalAmountDay ;// 婕忔崯姘撮噺
 	public Double batteryVolt ;//鍚庡鐢垫睜鐢靛帇
-	public String dataDt ;//鏁版嵁鏃堕棿锛坹yyy-mm-dd锛�
+	public String dataDt ;//鏁版嵁鏃堕棿锛坹yyy-mm-dd HH:00:00锛�
 	public String rtuDt ;//RTU鏃堕挓锛堜笂鎶ユ椂鍒伙級锛坹yyy-mm-dd HH:00:00锛�
 
 	public String comName ;//鍛戒护鍚嶇О
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmLossDay.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmLossDay.java
index 36a13c4..5181be6 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmLossDay.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmLossDay.java
@@ -7,6 +7,7 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.dy.common.mw.protocol.p206V1.DataV1;
 import com.dy.common.mw.protocol.p206V2.DataV2;
+import com.dy.common.mw.protocol.p206V202404.DataV202404;
 import com.dy.common.po.BaseEntity;
 import com.dy.common.util.DateTime;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -104,4 +105,11 @@
         this.dtRtu = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
         this.lossAmount = cdData.lossAmount ;// 鎹熷け娴侀噺(浠�0鏃跺埌褰撳墠鐨勬紡鎹熺疮璁℃祦閲忥紝24鏃朵竴涓懆鏈燂紝0鏃跺綊0)鍗曚綅涓簃3銆�
     }
+
+    public void valueFrom(DataV202404 dV202404, com.dy.common.mw.protocol.p206V202404.upVos.DataCd83Vo cdData) throws Exception{
+        this.dt = DateTime.dateFrom_yyyy_MM_dd1(cdData.dataDt);
+        this.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV202404.dt);
+        this.dtRtu = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.dataDt);
+        this.lossAmount = cdData.lossTotalAmountDay ;// 鎹熷け娴侀噺(浠�0鏃跺埌褰撳墠鐨勬紡鎹熺疮璁℃祦閲忥紝24鏃朵竴涓懆鏈燂紝0鏃跺綊0)鍗曚綅涓簃3銆�
+    }
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmLossDayLast.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmLossDayLast.java
index b92ba34..4cd2166 100644
--- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmLossDayLast.java
+++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/pojoRm/RmLossDayLast.java
@@ -7,6 +7,7 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.dy.common.mw.protocol.p206V1.DataV1;
 import com.dy.common.mw.protocol.p206V2.DataV2;
+import com.dy.common.mw.protocol.p206V202404.DataV202404;
 import com.dy.common.po.BaseEntity;
 import com.dy.common.util.DateTime;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -108,5 +109,11 @@
         this.dtRtu = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
         this.lossAmount = cdData.lossAmount ;// 鎹熷け娴侀噺(浠�0鏃跺埌褰撳墠鐨勬紡鎹熺疮璁℃祦閲忥紝24鏃朵竴涓懆鏈燂紝0鏃跺綊0)鍗曚綅涓簃3銆�
     }
+    public void valueFrom(DataV202404 dV202404, com.dy.common.mw.protocol.p206V202404.upVos.DataCd83Vo cdData) throws Exception{
+        this.dt = DateTime.dateFrom_yyyy_MM_dd1(cdData.dataDt);
+        this.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV202404.dt);
+        this.dtRtu = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.dataDt);
+        this.lossAmount = cdData.lossTotalAmountDay ;// 鎹熷け娴侀噺(浠�0鏃跺埌褰撳墠鐨勬紡鎹熺疮璁℃祦閲忥紝24鏃朵竴涓懆鏈燂紝0鏃跺綊0)鍗曚綅涓簃3銆�
+    }
 
 }
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealIntakeAmountDay.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealIntakeAmountDay.java
index f5ff86e..88a001b 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealIntakeAmountDay.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealIntakeAmountDay.java
@@ -42,7 +42,7 @@
          * 鍘熸潵瀹炵幇鏈换鍔″姛鑳斤紝鏁版嵁浠�84锛�83锛孋0鍔熻兘鐮佹暟鎹腑鑾峰緱缁熻鏁版嵁锛屼絾鍚庢潵鏁版嵁涓鍔犱簡閲戦涓庡紑鍏抽榾娆℃暟锛�
          * 浠庤�屼娇寰椾粠涓夌鏁版嵁涓粺璁℃暟鎹浉褰撳洶闅句笌鑷浉鐭涚浘锛屾墍浠ヤ慨鏀瑰疄鐜版柟寮忥紝鍙粠83鏁版嵁涓粺璁℃湰鏁版嵁锛屽苟涓斾粠鍑�
          * 涓湀鏉ヨ繍琛屾暟鎹湅锛屽彧瑕佽澶囪兘涓婄嚎锛屽熀鏈笂鍚勭涓婃姤鏁版嵁閮借兘涓婃姤涓婃潵锛屾墍浠ユ病鏈夊繀椤讳粠84鍙奀0鏁版嵁涓粺璁℃暟鎹簡
-         * 鑷虫锛屾湰瀹炵幇鏂瑰紡涓绘案涔呭疄鐜版柟寮忥紝涓嶅啀淇敼鍥炲幓浜嗭紝瀹炶返璇佹槑锛屼互鍓嶇殑瀹炵幇鏂瑰紡鏁版嵁鏄粺璁′笉鍑嗙‘鐨勩��
+         * 鑷虫锛屾湰瀹炵幇鏂瑰紡瀹氫负姘镐箙瀹炵幇鏂瑰紡锛屼笉鍐嶄慨鏀瑰洖鍘讳簡锛屽疄璺佃瘉鏄庯紝浠ュ墠鐨勫疄鐜版柟寮忔暟鎹槸缁熻涓嶅噯纭殑銆�
          */
         if (cdObj != null
                 && (
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealClientAmountDayV202404.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealClientAmountDayV202404.java
new file mode 100644
index 0000000..520ccbc
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealClientAmountDayV202404.java
@@ -0,0 +1,344 @@
+package com.dy.rtuMw.server.rtuData.p206V202404;
+
+import com.dy.common.mw.protocol.Data;
+import com.dy.common.mw.protocol.p206V202404.DataV202404;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd85Vo;
+import com.dy.common.util.DateTime;
+import com.dy.pipIrrGlobal.pojoPr.PrController;
+import com.dy.pipIrrGlobal.pojoRm.RmClientAmountDay;
+import com.dy.pipIrrGlobal.pojoRm.RmClientAmountDayLast;
+import com.dy.pipIrrGlobal.pojoSe.SeClient;
+import com.dy.rtuMw.server.rtuData.TaskSurpport;
+import com.dy.rtuMw.server.rtuData.dbSv.DbSv;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.util.Date;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/5/14 10:30
+ * @Description
+ */
+public class TkDealClientAmountDayV202404  extends TaskSurpport {
+
+    private static final Logger log = LogManager.getLogger(TkDealClientAmountDayV202404.class.getName());
+
+    //绫籌D锛屼竴瀹氫笌Tree.xml閰嶇疆鏂囦欢涓厤缃竴鑷�
+    public static final String taskId = "TkDealClientAmountDayV202404";
+
+    /**
+     * 鎵ц鑺傜偣浠诲姟: 鍙栨按鍙f棩鐢ㄦ按閲忓拰婕忔崯閲�
+     *
+     * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+     */
+    @Override
+    public void execute(Object data) {
+        Data d = (Data) data;
+        DataV202404 dV202404 = (DataV202404) d.getSubData();//鍓嶉潰浠诲姟宸茬粡鍒ゆ柇涓嶄负null
+        Object cdObj = dV202404.subData;
+        if (cdObj != null && cdObj instanceof DataCd85Vo) {
+            /*
+            鍙兘閲囩敤DataCd85Vo鏉ヨ绠楀啘鎴锋棩鐢ㄦ按閲忕殑鍘熷洜锛�
+            1銆佸鏋滈噰鐢―ataCd84Vo(寮�闃�宸ヤ綔鎶�)鏉ヨ绠楀啘鎴锋棩鐢ㄦ按閲忥紝蹇呴』閲囩敤鏈绱娴侀噺鍑忎笂娆$疮娴侀噺鐨勫樊鍊间綔涓洪樁娈靛啘鎴风敤姘撮噺锛�
+               鐒跺悗鍚勪釜闃舵鐩稿姞锛屽緱鍒版湰娆″啘鎴风敤姘撮噺锛岃繖涓敤姘撮噺杩樻病鍔犲埌鍐滄埛鏃ョ敤姘撮噺涓紝鍥犱负鍙湁鏀朵笉鍒癉ataCd85Vo(鍏抽榾鎶�)
+               涓婃姤鏁版嵁鏃舵墠鑳藉姞鍒板啘鎴风敤姘撮噺涓紝鍚﹀垯灏变細閲嶅璁$畻锛屼絾浠�涔堟椂鍊欏強鑳藉惁鏀跺埌DataCd85Vo涓嶅彲棰勭煡銆�
+            2銆佸鏋滃啘鎴锋湁澶氬紶IC鍗★紝鍚屾椂鍦ㄥ涓彇姘村彛鍙栨按锛屽皢浼氭槸鏇村鏉傜殑璁$畻锛岃澶氭儏褰㈡洿涓嶅彲棰勬祴锛屼笖鏃堕棿澶嶆潅搴�
+               蹇呯劧寰堥珮锛岃繖鏍风▼搴忚繍琛屾椂闂存洿闀匡紝灏嗕細閫犳垚涓婅鏁版嵁鍫靛鐜拌薄銆�
+            3銆佹墍浠ュ彧閲囩敤涓婃姤鏁版嵁DataCd85Vo浣滀负璁$畻鍐滄埛鐢ㄦ按閲忕殑鏁版嵁鏉ユ簮锛岃繖鏃跺繀鐒朵細鏈夋紡鎶ョ己澶辨儏鍐靛彂鐢燂紝閲囩敤琛ユ姤鏈哄埗鍙互寮ヨˉ涓�浜涖��
+             */
+            /*
+             琛ユ姤DataCd85Vo澶勭悊鏂规硶锛�
+             閲囩敤DataCd85Vo鏁版嵁涓殑鍏抽榾鏃堕棿closeDt璁$畻鍑哄啘鎴风敤姘存棩鏈燂紝涓嶈兘鐢ㄦ暟鎹帴鏀舵棩鏈熸椂闂翠綔涓哄啘鎴风敤姘存棩鏈燂紝
+             浣嗚繖绉嶈绠楁柟娉曞彲鑳戒細鏈夐噸澶嶄笂鎶ユ儏鍐靛彂鐢燂紝鍗抽噸澶嶈绠椾簡锛屽鏋滆鍒ゆ柇閲嶅锛屽繀鐒惰澧炲姞涓�涓叧闃�鏃堕棿鏁版嵁搴撹〃锛屽鍔犳椂闂�
+             澶嶆潅搴︼紝璁$畻鐢ㄦ椂灏嗕細闀匡紝鏈郴缁熷亣璁惧彧瑕丷TU涓婃姤涓婃潵鏁版嵁浜嗭紝璇存槑褰撳墠缃戠粶杈冨ソ锛屽繀鐒惰兘鏀跺埌涓嬭搴旂瓟锛屼笉浼氬彂鐢熼噸澶嶈ˉ鎶ャ��
+             */
+            Object[] objs = this.getTaskResults(TkPreGenObjsV202404.taskId);
+            DbSv sv = (DbSv) objs[0];
+            PrController controller = (PrController) objs[1];
+            SeClient clientVo = (SeClient)objs[3] ;//杩欎釜鍊煎璞′腑鍙湁id鍜宯ame浼氭湁鍊�
+            if(clientVo != null && clientVo.getId() != null)
+                try {
+                    this.doDeal(sv, clientVo, controller, d.getRtuAddr(), dV202404, (DataCd85Vo) cdObj);
+                } catch (Exception e) {
+                    log.error("淇濆瓨鍙栨按鍙f棩鐢ㄦ按閲忓拰婕忔崯閲忔暟鎹椂鍙戠敓寮傚父", e);
+                }
+        }
+    }
+
+    /**
+     * 涓氬姟澶勭悊
+     *
+     * @param sv         鏈嶅姟
+     * @param clientVo   鍐滄埛瀵硅薄
+     * @param controller 鎺у埗鍣ㄥ璞�
+     * @param rtuAddr    鎺у埗鍣ㄥ湴鍧�
+     * @param dV202404    涓婃姤鏁版嵁
+     * @param cdData     涓婃姤鍏抽榾鏁版嵁瀵硅薄
+     */
+    private void doDeal(DbSv sv, SeClient clientVo, PrController controller, String rtuAddr, DataV202404 dV202404, DataCd85Vo cdData) throws Exception {
+        RmClientAmountDayLast poLast = sv.getRmClientAmountLast(clientVo.getId());
+        if (poLast == null) {
+            //鏁版嵁搴撲腑涓嶅瓨鍦ㄨ鍐滄埛鐨勬棩鍙栨按閲忔暟鎹�
+            //棣栧厛鐢熸垚鏈�鏂版暟鎹強鍘嗗彶鏁版嵁锛屽苟鍏堜繚瀛�
+            poLast = this.newRmClientAmountLast(clientVo, dV202404, cdData);
+            this.newAndSaveHistoryDataDeal(sv, clientVo, dV202404, cdData, poLast);
+            sv.saveRmClientAmountLast(poLast);
+        } else {
+            if(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt).equals(poLast.rtuDtLast)){
+                //RTU鏃堕挓绛変簬鏈湴鏈�鏂版暟鎹腑鐨凴TU鏃堕挓锛岄噸澶嶄笂鎶ユ暟鎹紝涓嶈繘琛屼换浣曞鐞�
+            }else if(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt).after(poLast.rtuDtLast)){
+                //RTU鏃堕挓鏅氫簬鏈湴鏈�鏂版暟鎹腑鐨凴TU鏃堕挓锛屾槸鏂颁笂鎶ユ暟鎹�
+                Date upYmd = DateTime.dateFrom_yyyy_MM_dd1(cdData.endDt);//閲囩敤鍏抽榾鏃ユ湡浣滀负缁熻鏃ユ湡
+                if(upYmd.equals(poLast.dt)){
+                    //鍚屼竴澶╂暟鎹�
+                    poLast = this.updateRmClientAmountLastBySameDateNewData(clientVo, dV202404, cdData, poLast);
+                    RmClientAmountDay poHistory = null ;
+                    if(poLast.lastHistoryId != null){
+                        poHistory = sv.getRmClientAmountDay(poLast.lastHistoryId) ;
+                    }
+                    if(poHistory == null){
+                        this.newAndSaveHistoryDataDeal(sv, clientVo, dV202404, cdData, poLast);
+                    }else{
+                        poHistory = this.updateRmClientAmountBySameDateNewData(clientVo, poHistory, poLast, dV202404, cdData);
+                        sv.updateRmClientAmountDay(poHistory);
+                    }
+                }else if(upYmd.after(poLast.dt)){
+                    //鏂扮殑鏃ユ湡
+                    poLast = this.updateRmClientAmountLastByNewDateNewData(clientVo, dV202404, cdData, poLast);
+                    this.newAndSaveHistoryDataDeal(sv, clientVo, dV202404, cdData, poLast);
+                }else{
+                    //杩欑鎯呭喌涓嶅瓨鍦�
+                }
+                sv.updateRmClientAmountLast(poLast);
+            }else{
+                //RTU鏃堕挓鏃╀簬鏈湴鏈�鏂版暟鎹腑鐨凴TU鏃堕挓锛屾槸琛ユ姤鏁版嵁
+                Date upYmd = DateTime.dateFrom_yyyy_MM_dd1(cdData.endDt);//閲囩敤鍏抽榾鏃ユ湡浣滀负缁熻鏃ユ湡
+                RmClientAmountDay poHistory = sv.getRmClientAmountByClientAndDate(clientVo.getId(), upYmd) ;
+                if(poHistory == null){
+                    //鏃犲巻鍙叉暟鎹�
+                    this.newAndSaveHistoryDataDeal(sv, clientVo, dV202404, cdData, null);
+                }else{
+                    poHistory = this.updateOldRmClientAmountBySupplyData(clientVo, poHistory, dV202404, cdData);
+                    sv.updateRmClientAmountDay(poHistory);
+                }
+            }
+        }
+    }
+
+
+    /**
+     * 鐢熸垚鏂扮殑鎺у埗鍣ㄦ紡鎹熸棩缁熻鏈�鏂拌褰�
+     * @param clientVo
+     * @param dV202404
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmClientAmountDayLast newRmClientAmountLast(SeClient clientVo, DataV202404 dV202404, DataCd85Vo cdData)throws Exception {
+        RmClientAmountDayLast po = new RmClientAmountDayLast() ;
+        po.clientId = clientVo.getId();
+        po.amount = cdData.thisWater ;
+        po.money = cdData.thisMoney ;
+        po.dt = DateTime.dateFrom_yyyy_MM_dd1(cdData.endDt);//閲囩敤鍏抽榾鏃ユ湡浣滀负缁熻鏃ユ湡
+        po.openDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.startDt);
+        po.closeDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt);
+        po.thisAmountLast = cdData.thisWater ;
+        po.thisMoneyLast = cdData.thisMoney ;
+        po.thisTimeLast = cdData.thisDuration ;
+        po.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt);//閲囩敤缁撴潫鏃堕棿浣滀负鎺у埗鍣ㄦ椂閽�
+        return po ;
+    }
+
+    /**
+     * 鐢熸垚鏂扮殑鎺у埗鍣ㄦ紡鎹熸棩缁熻鍘嗗彶璁板綍
+     * @param clientVo
+     * @param dV202404
+     * @param cdData
+     * @param lastPo
+     * @return
+     * @throws Exception
+     */
+    private RmClientAmountDay newRmClientAmountDay(SeClient clientVo, DataV202404 dV202404, DataCd85Vo cdData, RmClientAmountDayLast lastPo)throws Exception {
+        RmClientAmountDay poHistory = new RmClientAmountDay() ;
+        poHistory.clientId = clientVo.getId();
+        if(lastPo != null){
+            if(poHistory.amount != null){
+                poHistory.amount += lastPo.amount ;
+            }else{
+                poHistory.amount = lastPo.amount ;
+            }
+            if(poHistory.money != null){
+                poHistory.money += lastPo.money ;
+            }else{
+                poHistory.money = lastPo.money ;
+            }
+            poHistory.times = 1 ;
+            poHistory.dt = lastPo.dt ;
+            poHistory.openDtLast = lastPo.openDtLast ;
+            poHistory.closeDtLast = lastPo.closeDtLast ;
+            poHistory.thisAmountLast = lastPo.thisAmountLast ;
+            poHistory.thisMoneyLast = lastPo.thisMoneyLast ;
+            poHistory.thisTimeLast = lastPo.thisTimeLast ;
+            poHistory.rtuDtLast = lastPo.rtuDtLast ;
+        }else{
+            poHistory.amount = cdData.thisWater ;
+            poHistory.money = cdData.thisMoney ;
+            poHistory.times = 1 ;
+            poHistory.dt = DateTime.dateFrom_yyyy_MM_dd1(cdData.endDt);//閲囩敤鍏抽榾鏃ユ湡浣滀负缁熻鏃ユ湡
+            poHistory.openDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.startDt);
+            poHistory.closeDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt);
+            poHistory.thisAmountLast = cdData.thisWater ;
+            poHistory.thisMoneyLast = cdData.thisMoney ;
+            poHistory.thisTimeLast = cdData.thisDuration ;
+            poHistory.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt);
+        }
+        return poHistory ;
+    }
+
+
+    /**
+     * 淇濆瓨鏂扮殑鍘嗗彶鏁版嵁璁板綍锛屽苟鎶奍D璧嬪�肩粰鏈�鏂拌褰曠殑 lastHistoryId
+     * @param sv
+     * @param clientVo
+     * @param dV202404
+     * @param cdData
+     * @param lastPo
+     * @throws Exception
+     * @return RmIntakeAmountDay
+     */
+    private RmClientAmountDay newAndSaveHistoryDataDeal(DbSv sv, SeClient clientVo, DataV202404 dV202404, DataCd85Vo cdData, RmClientAmountDayLast lastPo)throws Exception {
+        RmClientAmountDay poHistory = this.newRmClientAmountDay(clientVo, dV202404, cdData, lastPo) ;
+        sv.saveRmClientAmountDay(poHistory);
+        //鐢辨渶鏂版暟鎹寔鏈夊巻鍙叉暟鎹腑鐨勬渶鏂拌褰旾D锛屼互鏂逛究蹇�熸煡璇�
+        lastPo.lastHistoryId = poHistory == null ? null: poHistory.id ;
+        return poHistory ;
+    }
+
+    /**
+     * 鏇存柊鏈�鏂版暟鎹�
+     * @param clientVo
+     * @param dV202404
+     * @param cdData
+     * @param lastPo
+     * @return
+     * @throws Exception
+     */
+    private RmClientAmountDayLast updateRmClientAmountLastBySameDateNewData(SeClient clientVo, DataV202404 dV202404, DataCd85Vo cdData, RmClientAmountDayLast lastPo)throws Exception {
+        lastPo.clientId = clientVo.getId();
+        if(lastPo.amount != null){
+            lastPo.amount += cdData.thisWater ;
+        }else{
+            lastPo.amount = cdData.thisWater ;
+        }
+        if(lastPo.money != null){
+            lastPo.money += cdData.thisMoney ;
+        }else{
+            lastPo.money = cdData.thisMoney ;
+        }
+        lastPo.dt = DateTime.dateFrom_yyyy_MM_dd1(cdData.endDt);//閲囩敤鍏抽榾鏃ユ湡浣滀负缁熻鏃ユ湡
+        lastPo.openDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.startDt);
+        lastPo.closeDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt);
+        lastPo.thisAmountLast = cdData.thisWater ;
+        lastPo.thisMoneyLast = cdData.thisMoney ;
+        lastPo.thisTimeLast = cdData.thisDuration ;
+        lastPo.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt);
+        return lastPo ;
+    }
+
+
+    /**
+     * 鏇存柊鏈�鏂版暟鎹�
+     * @param clientVo
+     * @param dV202404
+     * @param cdData
+     * @param lastPo
+     * @return
+     * @throws Exception
+     */
+    private RmClientAmountDayLast updateRmClientAmountLastByNewDateNewData(SeClient clientVo, DataV202404 dV202404, DataCd85Vo cdData, RmClientAmountDayLast lastPo)throws Exception {
+        lastPo.clientId = clientVo.getId();
+        lastPo.amount = cdData.thisWater ;
+        lastPo.money = cdData.thisMoney ;
+        lastPo.dt = DateTime.dateFrom_yyyy_MM_dd1(cdData.endDt);//閲囩敤鍏抽榾鏃ユ湡浣滀负缁熻鏃ユ湡
+        lastPo.openDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.startDt);
+        lastPo.closeDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt);
+        lastPo.thisAmountLast = cdData.thisWater ;
+        lastPo.thisMoneyLast = cdData.thisMoney ;
+        lastPo.thisTimeLast = cdData.thisDuration ;
+        lastPo.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt);
+        return lastPo ;
+    }
+    /**
+     * 鏇存柊鏈�鏂版暟鎹�
+     * @param clientVo
+     * @param poHistory
+     * @param dV202404
+     * @param cdData
+     * @param lastPo
+     * @return
+     * @throws Exception
+     */
+    private RmClientAmountDay updateRmClientAmountBySameDateNewData(SeClient clientVo, RmClientAmountDay poHistory, RmClientAmountDayLast lastPo, DataV202404 dV202404, DataCd85Vo cdData)throws Exception {
+        poHistory.clientId = clientVo.getId();
+        if(poHistory.amount != null){
+            poHistory.amount += cdData.thisWater ;
+        }else{
+            poHistory.amount = cdData.thisWater ;
+        }
+        if(poHistory.money != null){
+            poHistory.money += cdData.thisMoney ;
+        }else{
+            poHistory.money = cdData.thisMoney ;
+        }
+        if(poHistory.times != null){
+            poHistory.times += 1 ;
+        }else{
+            poHistory.times = 1 ;
+        }
+        poHistory.dt = lastPo.dt ;
+        poHistory.openDtLast = lastPo.openDtLast ;
+        poHistory.closeDtLast = lastPo.closeDtLast ;
+        poHistory.thisAmountLast = lastPo.thisAmountLast ;
+        poHistory.thisMoneyLast = lastPo.thisMoneyLast ;
+        poHistory.thisTimeLast = lastPo.thisTimeLast ;
+        poHistory.rtuDtLast = lastPo.rtuDtLast ;
+        return poHistory ;
+    }
+
+    /**
+     * 鏇存柊鏈�鏂版暟鎹�
+     * @param clientVo
+     * @param poHistory
+     * @param dV202404
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmClientAmountDay updateOldRmClientAmountBySupplyData(SeClient clientVo, RmClientAmountDay poHistory, DataV202404 dV202404, DataCd85Vo cdData)throws Exception {
+        poHistory.clientId = clientVo.getId();
+        if(poHistory.amount != null){
+            poHistory.amount += cdData.thisWater ;
+        }else{
+            poHistory.amount = cdData.thisWater ;
+        }
+        if(poHistory.money != null){
+            poHistory.money += cdData.thisMoney ;
+        }else{
+            poHistory.money = cdData.thisMoney ;
+        }
+        if(poHistory.times != null){
+            poHistory.times += 1 ;
+        }else{
+            poHistory.times = 1 ;
+        }
+        poHistory.dt = DateTime.dateFrom_yyyy_MM_dd1(cdData.endDt);//閲囩敤鍏抽榾鏃ユ湡浣滀负缁熻鏃ユ湡
+        poHistory.openDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.startDt) ;
+        poHistory.closeDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt) ;
+        poHistory.thisAmountLast = cdData.thisWater ;
+        poHistory.thisMoneyLast = cdData.thisMoney ;
+        poHistory.thisTimeLast = cdData.thisDuration ;
+        poHistory.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.endDt) ;
+        return poHistory ;
+    }
+}
\ No newline at end of file
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealIcRemainMoneyV202404.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealIcRemainMoneyV202404.java
new file mode 100644
index 0000000..9f88228
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealIcRemainMoneyV202404.java
@@ -0,0 +1,164 @@
+package com.dy.rtuMw.server.rtuData.p206V202404;
+
+import com.dy.common.mw.protocol.Data;
+import com.dy.common.mw.protocol.p206V202404.DataV202404;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd85Vo;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd84Vo;
+import com.dy.pipIrrGlobal.voSe.VoCardInfo1;
+import com.dy.rtuMw.server.rtuData.TaskSurpport;
+import com.dy.rtuMw.server.rtuData.dbSv.DbSv;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/5/14 10:30
+ * @Description 澶勭悊IC鍗″墿浣欓噾棰�
+ */
+public class TkDealIcRemainMoneyV202404   extends TaskSurpport {
+
+    private static final Logger log = LogManager.getLogger(TkDealIcRemainMoneyV202404.class.getName());
+
+    //绫籌D锛屼竴瀹氫笌Tree.xml閰嶇疆鏂囦欢涓厤缃竴鑷�
+    public static final String taskId = "TkDealIcRemainMoneyV202404";
+
+    /**
+     * 鎵ц鑺傜偣浠诲姟: 鍙栨按鍙f棩鐢ㄦ按閲忓拰婕忔崯閲�
+     *
+     * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+     */
+    @Override
+    public void execute(Object data) {
+        Data d = (Data) data;
+        DataV202404 dV1 = (DataV202404) d.getSubData();//鍓嶉潰浠诲姟宸茬粡鍒ゆ柇涓嶄负null
+        Object cdObj = dV1.subData;
+        if (cdObj != null && (cdObj instanceof DataCd84Vo
+                || cdObj instanceof DataCd85Vo)){
+            Object[] objs = this.getTaskResults(TkPreGenObjsV202404.taskId) ;
+            DbSv sv = (DbSv)objs[0] ;
+            try{
+                TkDealIcRemainMoneyV202404.UpDataVo vo = new TkDealIcRemainMoneyV202404.UpDataVo() ;
+                if(cdObj instanceof DataCd84Vo){
+                    vo.valueFrom( (DataCd84Vo)cdObj, null);
+                }else if(cdObj instanceof DataCd85Vo){
+                    vo.valueFrom(null,  (DataCd85Vo)cdObj);
+                }
+                this.doDeal(sv, dV1, vo);
+            }catch (Exception e){
+                log.error("淇濆瓨鍙栨按鍙f棩鐢ㄦ按閲忓拰婕忔崯閲忔暟鎹椂鍙戠敓寮傚父", e);
+            }
+        }
+    }
+
+    /**
+     * 涓氬姟澶勭悊
+     * @param sv             鏈嶅姟
+     * @param dV1        涓婃姤鏁版嵁
+     * @param dataVo         涓婃姤鏁版嵁瀵硅薄
+     */
+    private void doDeal(DbSv sv, DataV202404 dV1, TkDealIcRemainMoneyV202404.UpDataVo dataVo) throws Exception {
+        if(dataVo.icCardNo != null){
+            if(!dataVo.isVirIcCard){
+                //瀹炰綋鍗�
+                if(dataVo.remainMoney != null){
+                    VoCardInfo1 vo = sv.getIcCard(dataVo.icCardAddr, dataVo.icCardNo) ;
+                    if(vo != null && vo.id != null){
+                        if(vo.money != null){
+                            if(vo.money > dataVo.remainMoney){
+                                //鏈湴鐨勫墿浣欓噾棰� 澶т簬 RTU涓婃姤鐨勫墿浣欓噾棰�
+                                this.updateIcCardRemainMoney(sv, vo.id, dataVo.remainMoney);
+                            }else{
+                                //鏈湴鐨勫墿浣欓噾棰� 灏忎簬 RTU涓婃姤鐨勫墿浣欓噾棰濓紝璇存槑褰撳墠涓婃姤鍙兘鏄ˉ鎶ユ垨鍏朵粬鍘熷洜閫犳垚鐨勭幇璞�
+                                //涓嶅仛澶勭悊
+                            }
+                        }else{
+                            //杩欑鎯呭喌涓�鑸笉浼氬瓨鍦紝闄ら潪鏈変粈涔堣鎿嶄綔閫犳垚
+                            this.updateIcCardRemainMoney(sv, vo.id, dataVo.remainMoney);
+                        }
+                    }
+                }
+            }else{
+                //铏氭嫙鍗�
+                if(dataVo.remainMoney != null){
+                    VoCardInfo1 vo = sv.getVirIcCard(dataVo.icCardNo) ;
+                    if(vo != null && vo.id != null){
+                        if(vo.money != null){
+                            if(vo.money > dataVo.remainMoney){
+                                //鏈湴鐨勫墿浣欓噾棰� 澶т簬 RTU涓婃姤鐨勫墿浣欓噾棰�
+                                this.updateVirIcCardRemainMoney(sv, vo.id, dataVo.remainMoney);
+                            }else{
+                                //鏈湴鐨勫墿浣欓噾棰� 灏忎簬 RTU涓婃姤鐨勫墿浣欓噾棰濓紝璇存槑褰撳墠涓婃姤鍙兘鏄ˉ鎶ユ垨鍏朵粬鍘熷洜閫犳垚鐨勭幇璞�
+                                //涓嶅仛澶勭悊
+                            }
+                        }else{
+                            //杩欑鎯呭喌涓�鑸笉浼氬瓨鍦紝闄ら潪鏈変粈涔堣鎿嶄綔閫犳垚
+                            this.updateVirIcCardRemainMoney(sv, vo.id, dataVo.remainMoney);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * 鏇存柊瀹炰綋鍗″墿浣欓噾棰�
+     * @param id
+     * @param remainMoney
+     */
+    private void updateIcCardRemainMoney(DbSv sv, Long id , Double remainMoney){
+        sv.updateIcCardRemainMoney(id,remainMoney);
+    }
+
+    /**
+     * 鏇存柊铏氭嫙鍗″墿浣欓噾棰�
+     * @param id
+     * @param remainMoney
+     */
+    private void updateVirIcCardRemainMoney(DbSv sv, Long id , Double remainMoney){
+        sv.updateVirIcCardRemainMoney(id, remainMoney);
+    }
+
+
+    private class UpDataVo{
+        public Boolean isVirIcCard ;//鏄惁涓鸿櫄鎷熷崱
+        public String icCardAddr ;//鍗″湴鍧�
+        public String icCardNo ;//鍗$紪鍙�
+        public Double remainMoney ; //鍓╀綑閲戦
+
+        public void valueFrom(DataCd84Vo vo84, DataCd85Vo vo85){
+            if(vo84 != null){
+                if(this.isAll0(vo84.icCardAddr)){
+                    this.isVirIcCard = true ;
+                }else{
+                    this.isVirIcCard = false ;
+                }
+                this.icCardAddr = vo84.icCardAddr ;
+                this.icCardNo = vo84.icCardNo ;
+                this.remainMoney = vo84.moneyRemainUser ;
+            }else if(vo85 != null){
+                if(this.isAll0(vo85.icCardAddr)){
+                    this.isVirIcCard = true ;
+                }else{
+                    this.isVirIcCard = false ;
+                }
+                this.icCardAddr = vo85.icCardAddr ;
+                this.icCardNo = vo85.icCardNo ;
+                this.remainMoney = vo85.moneyRemain ;
+            }
+        }
+
+        private boolean isAll0(String s){
+            if(s != null && !s.trim().equals("")){
+                s = s.replaceAll("0", "") ;
+                if(s.equals("")){
+                    return true ;
+                }else{
+                    return false ;
+                }
+            }
+            return false ;
+        }
+    }
+
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealIntakeAmountDayV202404.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealIntakeAmountDayV202404.java
new file mode 100644
index 0000000..ee51ff5
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealIntakeAmountDayV202404.java
@@ -0,0 +1,517 @@
+package com.dy.rtuMw.server.rtuData.p206V202404;
+
+import com.dy.common.mw.protocol.Data;
+import com.dy.common.mw.protocol.p206V202404.DataV202404;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd84Vo;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd85Vo;
+import com.dy.common.util.DateTime;
+import com.dy.pipIrrGlobal.pojoPr.PrController;
+import com.dy.pipIrrGlobal.pojoRm.RmIntakeAmountDay;
+import com.dy.pipIrrGlobal.pojoRm.RmIntakeAmountDayLast;
+import com.dy.rtuMw.server.rtuData.TaskSurpport;
+import com.dy.rtuMw.server.rtuData.dbSv.DbSv;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/5/14 10:30
+ * @Description 鍙栨按鍙f棩鐢ㄦ按閲忓拰婕忔崯閲�
+ */
+public class TkDealIntakeAmountDayV202404 extends TaskSurpport {
+
+    private static final Logger log = LogManager.getLogger(TkDealIntakeAmountDayV202404.class.getName());
+
+    //绫籌D锛屼竴瀹氫笌Tree.xml閰嶇疆鏂囦欢涓厤缃竴鑷�
+    public static final String taskId = "TkDealIntakeAmountDayV202404";
+
+    /**
+     * 鎵ц鑺傜偣浠诲姟: 鍙栨按鍙f棩鐢ㄦ按閲忓拰婕忔崯閲�
+     *
+     * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+     */
+    @Override
+    public void execute(Object data) {
+        Data d = (Data) data;
+        DataV202404 dV202404 = (DataV202404) d.getSubData();//鍓嶉潰浠诲姟宸茬粡鍒ゆ柇涓嶄负null
+        Object cdObj = dV202404.subData;
+        /**
+         * 2025-01-11
+         * 鍘熸潵瀹炵幇鏈换鍔″姛鑳斤紝鏁版嵁浠�84锛�83锛孋0鍔熻兘鐮佹暟鎹腑鑾峰緱缁熻鏁版嵁锛屼絾鍚庢潵鏁版嵁涓鍔犱簡閲戦涓庡紑鍏抽榾娆℃暟锛�
+         * 浠庤�屼娇寰椾粠涓夌鏁版嵁涓粺璁℃暟鎹浉褰撳洶闅句笌鑷浉鐭涚浘锛屾墍浠ヤ慨鏀瑰疄鐜版柟寮忥紝鍙粠83鏁版嵁涓粺璁℃湰鏁版嵁锛屽苟涓斾粠鍑�
+         * 涓湀鏉ヨ繍琛屾暟鎹湅锛屽彧瑕佽澶囪兘涓婄嚎锛屽熀鏈笂鍚勭涓婃姤鏁版嵁閮借兘涓婃姤涓婃潵锛屾墍浠ユ病鏈夊繀椤讳粠84鍙奀0鏁版嵁涓粺璁℃暟鎹簡
+         * 鑷虫锛屾湰瀹炵幇鏂瑰紡瀹氫负姘镐箙瀹炵幇鏂瑰紡锛屼笉鍐嶄慨鏀瑰洖鍘讳簡锛屽疄璺佃瘉鏄庯紝浠ュ墠鐨勫疄鐜版柟寮忔暟鎹槸缁熻涓嶅噯纭殑銆�
+         */
+        if (cdObj != null
+                && (
+                //cdObj instanceof DataCd84Vo ||
+                cdObj instanceof DataCd85Vo
+                )){
+            Object[] objs = this.getTaskResults(TkPreGenObjsV202404.taskId) ;
+            DbSv sv = (DbSv)objs[0] ;
+            PrController controller = (PrController)objs[1] ;
+            try{
+                TkDealIntakeAmountDayV202404.UpDataVo vo = new TkDealIntakeAmountDayV202404.UpDataVo() ;
+                /*
+                if(cdObj instanceof DataCd84Vo){
+                    vo.valueFrom(null, (DataCd84Vo)cdObj, null, null);
+                }else */
+                if(cdObj instanceof DataCd85Vo){
+                    vo.valueFrom(null, (DataCd85Vo)cdObj);
+                }
+                this.doDeal(sv, controller, d.getRtuAddr(), dV202404, vo);
+            }catch (Exception e){
+                log.error("淇濆瓨鍙栨按鍙f棩鐢ㄦ按閲忓拰婕忔崯閲忔暟鎹椂鍙戠敓寮傚父", e);
+            }
+        }
+    }
+
+    /**
+     * 涓氬姟澶勭悊
+     * @param sv             鏈嶅姟
+     * @param controller     鎺у埗鍣ㄥ璞�
+     * @param rtuAddr        鎺у埗鍣ㄥ湴鍧�
+     * @param dV202404        涓婃姤鏁版嵁
+     * @param dataVo         涓婃姤鏁版嵁瀵硅薄
+     */
+    private void doDeal(DbSv sv, PrController controller, String rtuAddr, DataV202404 dV202404, TkDealIntakeAmountDayV202404.UpDataVo dataVo) throws Exception {
+        RmIntakeAmountDayLast poLast = sv.getRmIntakeAmountLast(controller.getIntakeId());
+        if (poLast == null) {
+            //鏁版嵁搴撲腑涓嶅瓨鍦ㄨ鍙栨按鍙g殑鏃ュ彇姘撮噺鏁版嵁
+            //棣栧厛鐢熸垚鏈�鏂版暟鎹強鍘嗗彶鏁版嵁锛屽苟鍏堜繚瀛�
+            poLast = this.newRmIntakeAmountLast(controller, rtuAddr, dV202404, dataVo);
+            this.newAndSaveRmIntakeAmountHistory(sv, controller, rtuAddr, dV202404, dataVo, poLast);
+            sv.saveRmIntakeAmountLast(poLast);
+        } else {
+            if(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataVo.rtuDt).before(poLast.rtuDtLast)){
+                //RTU鏃堕挓鏃╀簬鏈湴RTU鏃堕挓锛屾槸琛ユ姤锛屼笉鐢ㄨˉ鎶ユ潵璁$畻鍙栨按鍙f棩绱鍙栨按閲忥紝鍥犱负閲囩敤鐨勬槸绱娴侀噺鐩稿樊鐨勮绠楁柟娉曪紝
+                //鍏跺疄琛ユ姤鐨勯噺鍊硷紝鍩轰簬鍓嶉潰涓婃姤鏁版嵁宸茬粡璁$畻鍖呭惈浜嗭紝鍙槸閲忓�煎綊缁撶殑鏃ユ湡涓嶆纭舰浜嗐��
+            }else if(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataVo.rtuDt).equals(poLast.rtuDtLast)){
+                //RTU鏃堕挓绛変簬鏈湴RTU鏃堕挓锛岄噸澶嶄笂鎶ユ暟鎹紝涓嶈繘琛屼换浣曞鐞�
+            }else{
+                //涓婅鏁版嵁涓殑鏃ユ湡鏃堕棿绗﹀悎璁$畻鐨勬潯浠�
+                if(!rtuAddr.equals(poLast.rtuAddrLast)){
+                    //鏇存崲浜嗘帶鍒跺櫒锛屽鐞嗘柟娉曪細鍙洿鎹㈡帶鍒跺櫒鍦板潃锛屼笉杩涜姘撮噺璁$畻
+                    //鍥犱负涓婅鏁版嵁涓殑鏃ユ湡鏃堕棿鏄彲杩涜璁$畻鐨�
+                    if(DateTime.dateFrom_yyyy_MM_dd1(dV202404.dt).equals(poLast.dt)){
+                        //鍚屼竴澶╂暟鎹�
+                        poLast = this.updateRmIntakeAmountLastBySameDateByControllerChange(poLast, controller, rtuAddr, dV202404, dataVo);
+                        RmIntakeAmountDay poHistory = null ;
+                        if(poLast.lastHistoryId != null){
+                            poHistory = sv.getRmIntakeAmountDay(poLast.lastHistoryId) ;
+                        }
+                        if(poHistory == null){
+                            this.newAndSaveRmIntakeAmountHistory(sv, controller, rtuAddr, dV202404, dataVo, poLast);
+                        }else{
+                            poHistory = this.updateRmIntakeAmountBySameDateByControllerChange(poHistory, poLast, controller, rtuAddr, dV202404, dataVo);
+                            sv.updateRmIntakeAmountDay(poHistory);
+                        }
+                    }else{
+                        //闈炲悓涓�澶╋紝鎵�浠ユ柊鐢熸垚涓�涓巻鍙茶褰�
+                        poLast = this.updateRmIntakeAmountLastByNewDateByControllerChange(poLast, controller, rtuAddr, dV202404, dataVo);
+                        this.newAndSaveRmIntakeAmountHistory(sv, controller, rtuAddr, dV202404, dataVo, poLast);
+                    }
+                }else{
+                    //鏈洿鎹㈡帶鍒跺櫒
+                    if(DateTime.dateFrom_yyyy_MM_dd1(dV202404.dt).equals(poLast.dt)){
+                        //鍚屼竴澶╂暟鎹�
+                        poLast = this.updateRmIntakeAmountLastBySameDateNewData(poLast, controller, rtuAddr, dV202404, dataVo);
+                        RmIntakeAmountDay poHistory = null ;
+                        if(poLast.lastHistoryId != null){
+                            poHistory = sv.getRmIntakeAmountDay(poLast.lastHistoryId) ;
+                        }
+                        if(poHistory == null){
+                            this.newAndSaveRmIntakeAmountHistory(sv, controller, rtuAddr, dV202404, dataVo, poLast);
+                        }else{
+                            poHistory = this.updateRmIntakeAmountBySameDateNewData(poHistory, poLast, controller, rtuAddr, dV202404, dataVo);
+                            sv.updateRmIntakeAmountDay(poHistory);
+                        }
+                    }else if(DateTime.dateFrom_yyyy_MM_dd1(dV202404.dt).after(poLast.dt)){
+                        //鏂扮殑鏃ユ湡
+                        poLast = this.updateRmIntakeAmountLastByNewDateNewData(poLast, controller, rtuAddr, dV202404, dataVo);
+                        this.newAndSaveRmIntakeAmountHistory(sv, controller, rtuAddr, dV202404, dataVo, poLast);
+                    }else{
+                        //杩欑鎯呭喌涓嶅瓨鍦�
+                    }
+                }
+            }
+            //鏇存柊鏈�鏂版暟鎹�
+            sv.updateRmIntakeAmountLast(poLast);
+        }
+    }
+
+    /**
+     * 鐢熸垚鏂扮殑鍙栨按鍙g敤姘寸粺璁℃渶鏂拌褰�
+     * @param controller
+     * @param rtuAddr
+     * @param dV202404
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmIntakeAmountDayLast newRmIntakeAmountLast(PrController controller, String rtuAddr, DataV202404 dV202404, TkDealIntakeAmountDayV202404.UpDataVo cdData)throws Exception {
+        RmIntakeAmountDayLast po = new RmIntakeAmountDayLast() ;
+        po.intakeId = controller==null?null:controller.getIntakeId();
+        po.controllerIdLast = controller==null?null:controller.getId();
+        po.totalAmountLast = cdData.totalAmount ;
+        po.dt = DateTime.dateFrom_yyyy_MM_dd1(dV202404.dt);
+        po.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV202404.dt);
+        po.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
+
+        po.amount = cdData.amount ;
+        po.money = cdData.money ;
+        po.times = 1 ;
+        /* 2025-01-11
+        if(cdData.isCloseValve != null && cdData.isCloseValve){
+            po.amount = cdData.amount ;
+            po.money = cdData.money ;
+            po.times = 1 ;
+        }else{
+            po.amount = 0.0D ;
+            po.money = 0.0D ;
+            po.times = 0 ;
+        }*/
+        po.rtuAddrLast = rtuAddr;
+        return po ;
+    }
+
+    /**
+     * 淇濆瓨鏂扮殑鍘嗗彶鏁版嵁璁板綍锛屽苟鎶奍D璧嬪�肩粰鏈�鏂拌褰曠殑 lastHistoryId
+     * @param sv
+     * @param controller
+     * @param rtuAddr
+     * @param dV202404
+     * @param cdData
+     * @param poLast
+     * @throws Exception
+     * @return RmIntakeAmountDay
+     */
+    private RmIntakeAmountDay newAndSaveRmIntakeAmountHistory(DbSv sv, PrController controller, String rtuAddr, DataV202404 dV202404, TkDealIntakeAmountDayV202404.UpDataVo cdData, RmIntakeAmountDayLast poLast)throws Exception {
+        RmIntakeAmountDay poHistory = new RmIntakeAmountDay() ;
+        poHistory.intakeId = controller==null?null:controller.getIntakeId();
+        poHistory.controllerIdLast = controller==null?null:controller.getId();
+        poHistory.rtuAddrLast = rtuAddr;
+        poHistory.dt = DateTime.dateFrom_yyyy_MM_dd1(dV202404.dt);
+        poHistory.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV202404.dt);
+        poHistory.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
+        poHistory.totalAmountLast = cdData.totalAmount ;
+
+        //2025-01-11
+        if(poLast != null){
+            poHistory.amount = poLast.amount ;
+            poHistory.money = poLast.money ;
+            poHistory.times = poLast.times ;
+        }else{
+            poHistory.amount = 0.0D ;
+            poHistory.money = 0.0D ;
+            poHistory.times = 0 ;
+        }
+
+        sv.saveRmIntakeAmountDay(poHistory);
+        //鐢辨渶鏂版暟鎹寔鏈夊巻鍙叉暟鎹腑鐨勬渶鏂拌褰旾D锛屼互鏂逛究蹇�熸煡璇�
+        poLast.lastHistoryId = poHistory == null ? null: poHistory.id ;
+        return poHistory ;
+    }
+
+
+    /**
+     * 鍙栨按鍙f洿鎹簡鎺у埗鍣紝鍚屼竴澶╂暟鎹紝姝ゆ椂鍙洿鏂伴儴鍒嗗睘鎬�
+     * @param controller
+     * @param rtuAddr
+     * @param dV202404
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmIntakeAmountDayLast updateRmIntakeAmountLastBySameDateByControllerChange(RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV202404 dV202404, TkDealIntakeAmountDayV202404.UpDataVo cdData)throws Exception {
+        lastPo.intakeId = controller==null?null:controller.getIntakeId();
+        lastPo.controllerIdLast = controller==null?null:controller.getId();
+        lastPo.rtuAddrLast = rtuAddr;
+        lastPo.dt = DateTime.dateFrom_yyyy_MM_dd1(dV202404.dt);
+        lastPo.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV202404.dt);
+        lastPo.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
+        lastPo.totalAmountLast = cdData.totalAmount ;
+        //闃�鎺у櫒鏇存崲浜嗭紝骞朵笖鏄悓涓�澶╂暟鎹�
+        //鍙湁鍏抽榾鎶ユ暟鎹紙2025-01-11锛�
+        if(lastPo.amount == null){
+            lastPo.amount = cdData.amount ;
+        }else{
+            lastPo.amount += cdData.amount ;
+        }
+        if(lastPo.money == null){
+            lastPo.money = cdData.money ;
+        }else{
+            lastPo.money += cdData.money ;
+        }
+        if(lastPo.times == null){
+            lastPo.times = 1 ;
+        }else{
+            lastPo.times += 1 ;
+        }
+        /*
+        if(cdData.isCloseValve != null && cdData.isCloseValve.booleanValue()){
+            //鏄粠鍏抽榾鎶ヤ腑寰楀埌鐨勬暟鎹�
+            if(lastPo.amount == null){
+                lastPo.amount = cdData.amount ;
+            }else{
+                lastPo.amount += cdData.amount ;
+            }
+            if(lastPo.money == null){
+                lastPo.money = cdData.money ;
+            }else{
+                lastPo.money += cdData.money ;
+            }
+            if(lastPo.times == null){
+                lastPo.times = 1 ;
+            }else{
+                lastPo.times += 1 ;
+            }
+        }else{
+            //闈炲叧闃�鎶ユ暟鎹�
+            //涓嶄綔涓�
+        }*/
+        return lastPo ;
+    }
+
+    /**
+     * 鍙栨按鍙f洿鎹簡鎺у埗鍣ㄥ湪锛屾鏃跺彧鏇存柊閮ㄥ垎灞炴��
+     * @param controller
+     * @param rtuAddr
+     * @param dV202404
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmIntakeAmountDay updateRmIntakeAmountBySameDateByControllerChange(RmIntakeAmountDay po, RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV202404 dV202404, TkDealIntakeAmountDayV202404.UpDataVo cdData)throws Exception {
+        po.intakeId = controller==null?null:controller.getIntakeId();
+        po.controllerIdLast = controller==null?null:controller.getId();
+        po.rtuAddrLast = rtuAddr;
+        po.dt = lastPo.dt ;
+        po.dtLast = lastPo.dtLast;
+        po.rtuDtLast = lastPo.rtuDtLast;
+        po.totalAmountLast = lastPo.totalAmountLast ;
+
+        //闃�鎺у櫒鏇存崲浜嗭紝骞朵笖鏄悓涓�澶╂暟鎹�
+        //鍙湁鍏抽榾鎶ユ暟鎹紙2025-01-11锛�
+        po.amount = lastPo.amount ;
+        po.money = lastPo.money ;
+        po.times = lastPo.times ;
+
+        return po ;
+    }
+
+    /**
+     * 鍙栨按鍙f洿鎹簡鎺у埗鍣紝闈炲悓涓�澶╂暟鎹紝姝ゆ椂鏇存柊閮ㄥ垎灞炴��
+     * @param controller
+     * @param rtuAddr
+     * @param dV202404
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmIntakeAmountDayLast updateRmIntakeAmountLastByNewDateByControllerChange(RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV202404 dV202404, TkDealIntakeAmountDayV202404.UpDataVo cdData)throws Exception {
+        lastPo.intakeId = controller==null?null:controller.getIntakeId();
+        lastPo.controllerIdLast = controller==null?null:controller.getId();
+        lastPo.rtuAddrLast = rtuAddr;
+        lastPo.dt = DateTime.dateFrom_yyyy_MM_dd1(dV202404.dt);
+        lastPo.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV202404.dt);
+        lastPo.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
+        lastPo.totalAmountLast = cdData.totalAmount ;
+
+        //闃�鎺у櫒鏇存崲浜嗭紝骞朵笖鏄柊涓�澶╂暟鎹� 2025-01-11
+        lastPo.amount = cdData.amount ;
+        lastPo.money = cdData.money ;
+        lastPo.times = 1 ;
+
+        return lastPo ;
+    }
+
+
+
+    /**
+     * 鏀跺埌鍚屼竴澶╃殑鏂扮殑鏁版嵁锛岃繘琛屾洿鏂版暟鎹�
+     * @param controller
+     * @param rtuAddr
+     * @param dV202404
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmIntakeAmountDayLast updateRmIntakeAmountLastBySameDateNewData(RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV202404 dV202404, TkDealIntakeAmountDayV202404.UpDataVo cdData)throws Exception {
+        lastPo.intakeId = controller==null?null:controller.getIntakeId();
+        lastPo.controllerIdLast = controller==null?null:controller.getId();
+        lastPo.rtuAddrLast = rtuAddr;
+        //lastPo.dt = DateTime.dateFrom_yyyy_MM_dd1(dV202404.dt);//鏃ユ湡娌″彉
+        lastPo.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV202404.dt);
+        lastPo.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
+        if(cdData.totalAmount == 0.0F){
+            //鍙戠幇闃�鎺у櫒涓�涓猙ug锛岀粡甯镐笂鎶ョ疮璁℃祦閲忎负0锛屾帹娴嬫槸闃�鎺у櫒鏈兘浠庢按琛ㄩ噰闆嗗埌鏁版嵁鏃朵細涓婃姤0鍊�
+            //杩欑鎯呭喌鏁版嵁涓嶅仛澶勭悊
+            //濡傛灉姘磋〃鍒濆畨瑁咃紝鏈繘琛岃繃浠诲姟鍙栨按锛岄偅涔堢疮璁℃祦閲忎細鏄�0锛岃繖绉嶆儏鍐靛綋bug澶勭悊涔熸棤闃�
+            //涓婇潰鏃舵爣浣滀簡鏇存柊锛屼篃姝e父锛岀浉褰撲簬鏈涓婃姤鐨勭疮璁℃祦閲忎笌涓婃涓婃姤鐨勭疮璁℃祦閲忔暟鍊肩浉绛�
+            //lastPo.totalAmountLast = lastPo.totalAmountLast ;
+            //lastPo.amount = lastPo.amount; //鏈棩鐨勬棩绱姘撮噺淇濇寔涓嶅彉
+        }else {
+            lastPo.totalAmountLast = cdData.totalAmount;
+        }
+        //鏄悓涓�澶╂暟鎹�
+        //鍙湁鍏抽榾鎶ユ暟鎹紙2025-01-11锛�
+        if(lastPo.amount == null){
+            lastPo.amount = cdData.amount ;
+        }else{
+            lastPo.amount += cdData.amount ;
+        }
+        if(lastPo.money == null){
+            lastPo.money = cdData.money ;
+        }else{
+            lastPo.money += cdData.money ;
+        }
+        if(lastPo.times == null){
+            lastPo.times = 1 ;
+        }else{
+            lastPo.times += 1 ;
+        }
+
+        /* 2025-01-11
+        Double added = cdData.totalAmount - lastPo.totalAmountLast ;
+        if(added > 0){
+            if(lastPo.amount == null){
+                lastPo.amount = added ;
+            }else{
+                lastPo.amount += added ;
+            }
+        }else{
+            //鍙兘鏄洿鎹㈡按琛ㄤ簡锛屾柊琛ㄥ簳鍊兼瘮鍘熻〃搴曞�煎皬銆�
+            //鏈缃噺鍊间笉鍙橈紝涓嬫鍐嶄笂鎶ユ椂锛屽氨鑳芥甯歌绠椾簡銆�
+            //lastPo.amount = lastPo.amount ; //鏃ョ疮璁″彇姘撮噺涓嶅彉
+        }
+
+        if(cdData.isCloseValve != null && cdData.isCloseValve.booleanValue()){
+            //鏄粠鍏抽榾鎶ヤ腑寰楀埌鐨勬暟鎹�
+            if(lastPo.money == null){
+                lastPo.money = cdData.money ;
+            }else{
+                lastPo.money += cdData.money ;
+            }
+            if(lastPo.times == null){
+                lastPo.times = 1 ;
+            }else{
+                lastPo.times += 1 ;
+            }
+        }else{
+            //闈炲叧闃�鎶ユ暟鎹�
+            //涓嶄綔涓�
+        }
+        */
+
+        return lastPo ;
+    }
+
+    /**
+     * 鍥犳敹鍒版柊鐨勪竴澶╃殑鏂扮殑鏁版嵁鍚庯紝杩涜鏇存柊鏁版嵁
+     * @param controller
+     * @param rtuAddr
+     * @param dV202404
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmIntakeAmountDayLast updateRmIntakeAmountLastByNewDateNewData(RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV202404 dV202404, TkDealIntakeAmountDayV202404.UpDataVo cdData)throws Exception {
+        lastPo.intakeId = controller==null?null:controller.getIntakeId();
+        lastPo.controllerIdLast = controller==null?null:controller.getId();
+        lastPo.rtuAddrLast = rtuAddr;
+        lastPo.dt = DateTime.dateFrom_yyyy_MM_dd1(dV202404.dt);//鏃ユ湡鍙樹簡
+        lastPo.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV202404.dt);
+        lastPo.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
+        lastPo.totalAmountLast = cdData.totalAmount ;
+
+        //鏂扮殑涓�澶╂暟鎹� 2025-01-11
+        lastPo.amount = cdData.amount ;
+        lastPo.money = cdData.money ;
+        lastPo.times = 1 ;
+
+        /*
+        if(cdData.totalAmount == 0.0F){
+            //鍙戠幇闃�鎺у櫒涓�涓猙ug锛岀粡甯镐笂鎶ョ疮璁℃祦閲忎负0锛屾帹娴嬫槸闃�鎺у櫒鏈兘浠庢按琛ㄩ噰闆嗗埌鏁版嵁鏃朵細涓婃姤0鍊�
+            //杩欑鎯呭喌鏁版嵁涓嶅仛澶勭悊
+            //濡傛灉姘磋〃鍒濆畨瑁咃紝鏈繘琛岃繃浠诲姟鍙栨按锛岄偅涔堢疮璁℃祦閲忎細鏄�0锛岃繖绉嶆儏鍐靛綋bug澶勭悊涔熸棤闃�
+            //涓婇潰鏃舵爣浣滀簡鏇存柊锛屼篃姝e父锛岀浉褰撲簬鏈涓婃姤鐨勭疮璁℃祦閲忎笌涓婃涓婃姤鐨勭疮璁℃祦閲忔暟鍊肩浉绛�
+            //lastPo.totalAmountLast = lastPo.totalAmountLast ;
+            lastPo.amount = 0.0D; //鏂扮殑涓�澶╃殑鏃ョ疮璁℃按閲忕疆0
+        }else{
+            Double added = cdData.totalAmount - lastPo.totalAmountLast ;
+            if(added > 0){
+                //鏂扮殑涓�澶╃殑澶勭悊鏂瑰紡涓庡悓涓�澶╃殑澶勭悊鏂瑰紡涓嶄竴鏍�
+                lastPo.amount = added;
+            }else{
+                //鍙兘鏄洿鎹㈡按琛ㄤ簡锛屾柊琛ㄥ簳鍊兼瘮鍘熻〃搴曞�煎皬銆�
+                //鏈缃�0锛屼笅娆″啀涓婃姤鏃讹紝灏辫兘姝e父璁$畻浜嗐��
+                lastPo.amount = 0.0D; //鏃ョ疮璁℃按閲忓綊0
+            }
+        }
+        if(cdData.isCloseValve != null && cdData.isCloseValve.booleanValue()){
+            //鏄粠鍏抽榾鎶ヤ腑寰楀埌鐨勬暟鎹�
+            lastPo.money = cdData.money ;
+            lastPo.times = 1 ;
+        }else{
+            //闈炲叧闃�鎶ユ暟鎹�
+            //涓嶄綔涓�
+        }
+        */
+
+        return lastPo ;
+    }
+
+
+    /**
+     * 鏇存柊鍘嗗彶璁板綍
+     * @param controller
+     * @param rtuAddr
+     * @param dV202404
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmIntakeAmountDay updateRmIntakeAmountBySameDateNewData(RmIntakeAmountDay po, RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV202404 dV202404, TkDealIntakeAmountDayV202404.UpDataVo cdData)throws Exception {
+        po.intakeId = controller==null?null:controller.getIntakeId();
+        po.controllerIdLast = controller==null?null:controller.getId();
+        po.rtuAddrLast = rtuAddr;
+        po.dt = lastPo.dt ;
+        po.dtLast = lastPo.dtLast;
+        po.rtuDtLast = lastPo.rtuDtLast;
+        po.totalAmountLast = lastPo.totalAmountLast ;
+
+        po.amount = lastPo.amount ;//姝ゆ椂lastPo.amount宸茬粡澧炲姞涓婁簡澧為噺
+        po.money = lastPo.money ;//姝ゆ椂lastPo.money宸茬粡澧炲姞涓婁簡澧為噺
+        po.times = lastPo.times ;//姝ゆ椂lastPo.times宸茬粡澧炲姞涓婁簡澧為噺
+
+        return po ;
+    }
+
+
+    public class UpDataVo{
+        public Double totalAmount; //绱娴侀噺锛�5瀛楄妭BCD鐮侊紝鍙栧�艰寖鍥�0~9999999999锛屽崟浣嶄负m3銆�
+        public Double amount; //鍐滄埛鐢ㄦ按閲�
+        public Double money ;//鍐滄埛娑堣垂閲戦
+        public Boolean isCloseValve ;//鏄惁鏄叧闃�涓婃姤
+        public String rtuDt ;//鎺у埗鍣ㄦ椂閽�
+
+        public void valueFrom(DataCd84Vo vo84, DataCd85Vo vo85){
+            /*
+            if(vo84 != null){
+                this.totalAmount = vo84.totalAmount ;
+                this.rtuDt = vo84.rtuDt ;
+            }else if(vo85 != null){ */
+            this.totalAmount = vo85.waterTotalAmount ;
+            this.amount = vo85.thisWater ;
+            this.money = vo85.thisMoney ;
+            this.isCloseValve = true ;
+            this.rtuDt = vo85.endDt ;
+            /*} */
+        }
+
+    }
+
+
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealLossV202404.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealLossV202404.java
new file mode 100644
index 0000000..9e506b5
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealLossV202404.java
@@ -0,0 +1,170 @@
+package com.dy.rtuMw.server.rtuData.p206V202404;
+
+import com.dy.common.mw.protocol.Data;
+import com.dy.common.mw.protocol.p206V202404.DataV202404;
+import com.dy.common.mw.protocol.p206V202404.upVos.DataCd83Vo;
+import com.dy.common.util.DateTime;
+import com.dy.pipIrrGlobal.pojoPr.PrController;
+import com.dy.pipIrrGlobal.pojoRm.RmLossDay;
+import com.dy.pipIrrGlobal.pojoRm.RmLossDayLast;
+import com.dy.rtuMw.server.rtuData.TaskSurpport;
+import com.dy.rtuMw.server.rtuData.dbSv.DbSv;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.util.Date;
+
+/**
+ * @Author: liurunyu
+ * @Date: 2025/5/14 11:12
+ * @Description 鍙栨按鍙f紡鎹熺粺璁�
+ */
+public class TkDealLossV202404 extends TaskSurpport {
+
+    private static final Logger log = LogManager.getLogger(TkDealLossV202404.class.getName());
+
+    //绫籌D锛屼竴瀹氫笌Tree.xml閰嶇疆鏂囦欢涓厤缃竴鑷�
+    public static final String taskId = "TkDealLossV202404";
+
+    /**
+     * 鎵ц鑺傜偣浠诲姟: 澶勭悊鎺у埗鍣ㄦ紡鎹熺粺璁�
+     *
+     * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+     */
+    @Override
+    public void execute(Object data) {
+        Data d = (Data) data;
+        DataV202404 dV202404 = (DataV202404) d.getSubData();//鍓嶉潰浠诲姟宸茬粡鍒ゆ柇涓嶄负null
+        Object cdObj = dV202404.subData;
+        if (cdObj != null && cdObj instanceof DataCd83Vo){
+            Object[] objs = this.getTaskResults(TkPreGenObjsV202404.taskId) ;
+            DbSv sv = (DbSv)objs[0] ;
+            PrController controller = (PrController)objs[1] ;
+            try{
+                this.doDeal(sv, controller, d.getRtuAddr(), dV202404, (DataCd83Vo)cdObj);
+            }catch (Exception e){
+                log.error("淇濆瓨鍙栨按鍙f紡鎹熺粺璁℃暟鎹椂鍙戠敓寮傚父", e);
+            }
+        }
+    }
+
+    /**
+     * 涓氬姟澶勭悊
+     * @param sv             鏈嶅姟
+     * @param controller     鎺у埗鍣ㄥ璞�
+     * @param rtuAddr        鎺у埗鍣ㄥ湴鍧�
+     * @param dV202404        涓婃姤鏁版嵁
+     * @param dataCdC0Vo 寮�闃�涓婃姤鏁版嵁瀵硅薄
+     */
+    private void doDeal(DbSv sv, PrController controller, String rtuAddr, DataV202404 dV202404, DataCd83Vo dataCdC0Vo) throws Exception {
+        Date operateDt = controller.getOperateDt() ;//鍙栨按涓笂缁戝畾姝ゆ帶鍒跺櫒鐨勬棩鏈熶笌鏃堕棿
+        if(operateDt != null){
+            String operateDtStr = DateTime.yyyy_MM_dd(operateDt) ;
+            if(operateDtStr.equals(DateTime.yyyy_MM_dd())){
+                //褰撳ぉ鍙戠幇锛堝苟缁戝畾锛夋帶鍒跺櫒锛屾帶鍒跺櫒璁$畻鐨勬紡鎹熼噺涓�瀹氫笉姝g‘锛屽己鍒惰缃垚0
+                dataCdC0Vo.lossTotalAmountDay = 0.0 ;
+            }
+        }
+
+        RmLossDayLast poLast = sv.getRmLossLast(controller.getIntakeId());
+        if (poLast == null) {
+            //鏁版嵁搴撲腑涓嶅瓨鍦ㄨ鍙栨按鍙g殑婕忔崯鏁版嵁
+            //棣栧厛鐢熸垚鏈�鏂版暟鎹強鍘嗗彶鏁版嵁锛屽苟鍏堜繚瀛�
+            poLast = this.newRmLossLast(controller, rtuAddr, dV202404, dataCdC0Vo);
+            this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV202404, dataCdC0Vo, poLast);
+            sv.saveRmLossLast(poLast);
+        } else {
+            if(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCdC0Vo.dataDt).equals(poLast.dtRtu)){
+                //鏃堕棿涓�鑷达紝閲嶅涓婃姤鏁版嵁锛屼笉杩涜浠讳綍澶勭悊
+            }else{
+                RmLossDay poHistory = null ;
+                if(poLast.lastHistoryId != null){
+                    poHistory = sv.getRmLossHistory(poLast.lastHistoryId) ;
+                }
+                if(poHistory == null){
+                    poHistory = this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV202404, dataCdC0Vo, poLast);
+                }
+                if(DateTime.dateFrom_yyyy_MM_dd1(dV202404.dt).equals(poLast.dt)){
+                    //鍚屼竴澶╂暟鎹�
+                    poLast.lossAmount = dataCdC0Vo.lossTotalAmountDay ;
+                    poLast.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV202404.dt) ;
+                    poLast.dtRtu = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCdC0Vo.dataDt) ;
+                    sv.updateRmLossLast(poLast);
+
+                    poHistory.lossAmount = dataCdC0Vo.lossTotalAmountDay ;
+                    poHistory.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV202404.dt) ;
+                    poHistory.dtRtu = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCdC0Vo.dataDt) ;
+                    sv.updateRmLossHistory(poHistory);
+                }else if(DateTime.dateFrom_yyyy_MM_dd1(dV202404.dt).after(poLast.dt)){
+                    //鏂扮殑鏃ユ湡
+                    poLast.lossAmount = dataCdC0Vo.lossTotalAmountDay ;
+                    poLast.dt = DateTime.dateFrom_yyyy_MM_dd1(dataCdC0Vo.dataDt);
+                    poLast.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV202404.dt) ;
+                    poLast.dtRtu = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCdC0Vo.dataDt) ;
+                    this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV202404, dataCdC0Vo, poLast);
+                    sv.updateRmLossLast(poLast);
+                }else{
+                    //杩欑鎯呭喌涓嶅瓨鍦紙RTU鏃堕挓鏃╀簬鏈湴璁板綍涓殑RTU鏃堕挓锛圧TU绌胯秺鍥炶繃鍘讳簡锛屽彲鑳芥椂閽熼噸缃簡锛夛紝姝ょ鎯呭喌涓嶅鐞嗭級
+                }
+            }
+            sv.updateRmLossLast(poLast);
+        }
+    }
+
+    /**
+     * 鐢熸垚鏂扮殑鎺у埗鍣ㄦ紡鎹熸棩缁熻鏈�鏂拌褰�
+     * @param controller
+     * @param rtuAddr
+     * @param dV202404
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmLossDayLast newRmLossLast(PrController controller, String rtuAddr, DataV202404 dV202404, DataCd83Vo cdData)throws Exception {
+        RmLossDayLast po = new RmLossDayLast() ;
+        po.controllerId = controller==null?null:controller.getId();
+        po.intakeId = controller==null?null:controller.getIntakeId();
+        po.rtuAddr = rtuAddr;
+        po.valueFrom(dV202404, cdData) ;
+        return po ;
+    }
+
+    /**
+     * 鐢熸垚鏂扮殑鎺у埗鍣ㄦ紡鎹熸棩缁熻鍘嗗彶璁板綍
+     * @param controller
+     * @param rtuAddr
+     * @param dV202404
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmLossDay newRmLossHistory(PrController controller, String rtuAddr, DataV202404 dV202404, DataCd83Vo cdData)throws Exception {
+        RmLossDay po = new RmLossDay() ;
+        po.controllerId = controller==null?null:controller.getId();
+        po.intakeId = controller==null?null:controller.getIntakeId();
+        po.rtuAddr = rtuAddr;
+        po.valueFrom(dV202404, cdData);
+        return po ;
+    }
+
+
+    /**
+     * 淇濆瓨鏂扮殑寮�闃�涓婃姤鍘嗗彶鏁版嵁璁板綍锛屽苟鎶奍D璧嬪�肩粰鏈�鏂拌褰曠殑 lastHistoryId
+     * @param sv
+     * @param controller
+     * @param rtuAddr
+     * @param dV202404
+     * @param dataCdC0Vo
+     * @param poLast
+     * @throws Exception
+     * @return RmLossHistory
+     */
+    private RmLossDay newAndSaveHistoryDataDeal(DbSv sv, PrController controller, String rtuAddr, DataV202404 dV202404, DataCd83Vo dataCdC0Vo, RmLossDayLast poLast)throws Exception {
+        RmLossDay poHistory = this.newRmLossHistory(controller, rtuAddr, dV202404, dataCdC0Vo) ;
+        sv.saveRmLossHistory(poHistory);
+        //鐢辨渶鏂版暟鎹寔鏈夊巻鍙叉暟鎹腑鐨勬渶鏂拌褰旾D锛屼互鏂逛究蹇�熸煡璇�
+        poLast.lastHistoryId = poHistory == null ? null: poHistory.id ;
+        return poHistory ;
+    }
+
+}
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/RtuDataDealTree.xml b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/RtuDataDealTree.xml
index dc726bf..8c52ed4 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/RtuDataDealTree.xml
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/RtuDataDealTree.xml
@@ -78,6 +78,10 @@
 							<task id="TkDealWorkingReportV202404" name="鎺у埗鍣ㄥ伐浣滄姤(鍔熻兘鐮�80)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealWorkingReportV202404" />
 							<task id="TkDealOpenValveReportV202404" name="鎺у埗鍣ㄥ紑闃�涓婃姤(鍔熻兘鐮�84)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealOpenValveReportV202404" />
 							<task id="TkDealCloseValveReportV202404" name="鎺у埗鍣ㄥ叧闃�涓婃姤(鍔熻兘鐮�85)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealCloseValveReportV202404" />
+							<task id="TkDealLossV202404" name="鍙栨按鍙f棩婕忔崯閲�(鍔熻兘鐮�83)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealLossV202404" />
+							<task id="TkDealIntakeAmountDayV202404" name="鍙栨按鍙f棩鐢ㄦ按閲�(鍔熻兘鐮�84銆佸姛鑳界爜85)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealIntakeAmountDayV202404" />
+							<task id="TkDealClientAmountDayV202404" name="鍐滄埛鏃ョ敤姘撮噺(鍔熻兘鐮�85)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealClientAmountDayV202404" />
+							<task id="TkDealIcRemainMoneyV202404" name="IC鍗″墿浣欓噾棰�(鍔熻兘鐮�84銆佸姛鑳界爜85)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkDealIcRemainMoneyV202404" />
 						</task>
 						<!-- 璇嗗埆鍛戒护鍝嶅簲鏁版嵁 -->
 						<task id="TkFindComResponseV202404" name="璇嗗埆鍝嶅簲鍛戒护鏁版嵁" enable="true" class="com.dy.rtuMw.server.rtuData.p206V202404.TkFindComResponseV202404">

--
Gitblit v1.8.0