From 1a2b07f01ba4616fd9e894dddf474b56d020158c Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期一, 07 四月 2025 15:18:51 +0800
Subject: [PATCH] 整理版本

---
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V2/TkDealIntakeAmountDayV2.java |  357 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 357 insertions(+), 0 deletions(-)

diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V2/TkDealIntakeAmountDayV2.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V2/TkDealIntakeAmountDayV2.java
new file mode 100644
index 0000000..84d52b9
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V2/TkDealIntakeAmountDayV2.java
@@ -0,0 +1,357 @@
+package com.dy.rtuMw.server.rtuData.p206V2;
+
+import com.dy.common.mw.protocol.Data;
+import com.dy.common.mw.protocol.p206V2.DataV2;
+import com.dy.common.mw.protocol.p206V2.upVos.DataCd83CloseVo;
+import com.dy.common.mw.protocol.p206V2.upVos.DataCd83OpenVo;
+import com.dy.common.mw.protocol.p206V2.upVos.DataCd84Vo;
+import com.dy.common.mw.protocol.p206V2.upVos.DataCdC0Vo;
+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: 2024/7/8 19:00
+ * @Description 鍙栨按鍙f棩鐢ㄦ按閲忓拰婕忔崯閲�
+ */
+public class TkDealIntakeAmountDayV2 extends TaskSurpport {
+
+    private static final Logger log = LogManager.getLogger(TkDealIntakeAmountDayV2.class.getName());
+
+    //绫籌D锛屼竴瀹氫笌Tree.xml閰嶇疆鏂囦欢涓厤缃竴鑷�
+    public static final String taskId = "TkDealIntakeAmountDayV2";
+
+    /**
+     * 鎵ц鑺傜偣浠诲姟: 鍙栨按鍙f棩鐢ㄦ按閲忓拰婕忔崯閲�
+     *
+     * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+     */
+    @Override
+    public void execute(Object data) {
+        Data d = (Data) data;
+        DataV2 dV2 = (DataV2) d.getSubData();//鍓嶉潰浠诲姟宸茬粡鍒ゆ柇涓嶄负null
+        Object cdObj = dV2.subData;
+        if (cdObj != null && (cdObj instanceof DataCdC0Vo
+            || cdObj instanceof DataCd84Vo
+            || cdObj instanceof DataCd83OpenVo
+            || cdObj instanceof DataCd83CloseVo)){
+            Object[] objs = this.getTaskResults(TkPreGenObjsV2.taskId) ;
+            DbSv sv = (DbSv)objs[0] ;
+            PrController controller = (PrController)objs[1] ;
+            try{
+                UpDataVo vo = new UpDataVo() ;
+                if(cdObj instanceof DataCdC0Vo){
+                    vo.valueFrom((DataCdC0Vo)cdObj, null, null, null);
+                }else if(cdObj instanceof DataCd84Vo){
+                    vo.valueFrom(null, (DataCd84Vo)cdObj, null, null);
+                }else if(cdObj instanceof DataCd83OpenVo){
+                    vo.valueFrom(null,null,  (DataCd83OpenVo)cdObj,null);
+                }else if(cdObj instanceof DataCd83CloseVo){
+                    vo.valueFrom(null,null,null, (DataCd83CloseVo)cdObj);
+                }
+                this.doDeal(sv, controller, d.getRtuAddr(), dV2, vo);
+            }catch (Exception e){
+                log.error("淇濆瓨鍙栨按鍙f棩鐢ㄦ按閲忓拰婕忔崯閲忔暟鎹椂鍙戠敓寮傚父", e);
+            }
+        }
+    }
+
+    /**
+     * 涓氬姟澶勭悊
+     * @param sv             鏈嶅姟
+     * @param controller     鎺у埗鍣ㄥ璞�
+     * @param rtuAddr        鎺у埗鍣ㄥ湴鍧�
+     * @param dV2        涓婃姤鏁版嵁
+     * @param dataVo         涓婃姤鏁版嵁瀵硅薄
+     */
+    private void doDeal(DbSv sv, PrController controller, String rtuAddr, DataV2 dV2, UpDataVo dataVo) throws Exception {
+        RmIntakeAmountDayLast poLast = sv.getRmIntakeAmountLast(controller.getIntakeId());
+        if (poLast == null) {
+            //鏁版嵁搴撲腑涓嶅瓨鍦ㄨ鍙栨按鍙g殑鏃ュ彇姘撮噺鏁版嵁
+            //棣栧厛鐢熸垚鏈�鏂版暟鎹強鍘嗗彶鏁版嵁锛屽苟鍏堜繚瀛�
+            poLast = this.newRmIntakeAmountLast(controller, rtuAddr, dV2, dataVo);
+            this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV2, 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(dV2.dt).equals(poLast.dt)){
+                        //鍚屼竴澶╂暟鎹�
+                        poLast = this.updateRmIntakeAmountLastByControllerChange(poLast, controller, rtuAddr, dV2, dataVo);
+                        RmIntakeAmountDay poHistory = null ;
+                        if(poLast.lastHistoryId != null){
+                            poHistory = sv.getRmIntakeAmountDay(poLast.lastHistoryId) ;
+                        }
+                        if(poHistory == null){
+                            this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV2, dataVo, poLast);
+                        }else{
+                            poHistory = this.updateRmIntakeAmountByControllerChange(poHistory, poLast, controller, rtuAddr, dV2, dataVo);
+                            sv.updateRmIntakeAmountDay(poHistory);
+                        }
+                    }else{
+                        //闈炲悓涓�澶╋紝鎵�浠ユ柊鐢熸垚涓�涓巻鍙茶褰�
+                        poLast = this.updateRmIntakeAmountLastByControllerChange(poLast, controller, rtuAddr, dV2, dataVo);
+                        this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV2, dataVo, poLast);
+                    }
+                }else{
+                    //鏈洿鎹㈡帶鍒跺櫒
+                    if(DateTime.dateFrom_yyyy_MM_dd1(dV2.dt).equals(poLast.dt)){
+                        //鍚屼竴澶╂暟鎹�
+                        poLast = this.updateRmIntakeAmountLastBySameDateNewData(poLast, controller, rtuAddr, dV2, dataVo);
+                        RmIntakeAmountDay poHistory = null ;
+                        if(poLast.lastHistoryId != null){
+                            poHistory = sv.getRmIntakeAmountDay(poLast.lastHistoryId) ;
+                        }
+                        if(poHistory == null){
+                            this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV2, dataVo, poLast);
+                        }else{
+                            poHistory = this.updateRmIntakeAmountBySameDateNewData(poHistory, poLast, controller, rtuAddr, dV2, dataVo);
+                            sv.updateRmIntakeAmountDay(poHistory);
+                        }
+                    }else if(DateTime.dateFrom_yyyy_MM_dd1(dV2.dt).after(poLast.dt)){
+                        //鏂扮殑鏃ユ湡
+                        poLast = this.updateRmIntakeAmountLastByNewDateNewData(poLast, controller, rtuAddr, dV2, dataVo);
+                        this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV2, dataVo, poLast);
+                    }else{
+                        //杩欑鎯呭喌涓嶅瓨鍦�
+                    }
+                }
+            }
+            //鏇存柊鏈�鏂版暟鎹�
+            sv.updateRmIntakeAmountLast(poLast);
+        }
+    }
+
+    /**
+     * 鐢熸垚鏂扮殑鎺у埗鍣ㄦ紡鎹熸棩缁熻鏈�鏂拌褰�
+     * @param controller
+     * @param rtuAddr
+     * @param dV2
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmIntakeAmountDayLast newRmIntakeAmountLast(PrController controller, String rtuAddr, DataV2 dV2, 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(dV2.dt);
+        po.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV2.dt);
+        po.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
+        po.amount = 0.0D ;
+        po.rtuAddrLast = rtuAddr;
+        return po ;
+    }
+
+    /**
+     * 鐢熸垚鏂扮殑鎺у埗鍣ㄦ紡鎹熸棩缁熻鍘嗗彶璁板綍
+     * @param controller
+     * @param rtuAddr
+     * @param dV2
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmIntakeAmountDay newRmIntakeAmountDay(PrController controller, String rtuAddr, DataV2 dV2, UpDataVo cdData, RmIntakeAmountDayLast lastPo)throws Exception {
+        RmIntakeAmountDay po = new RmIntakeAmountDay() ;
+        po.intakeId = controller==null?null:controller.getIntakeId();
+        po.controllerIdLast = controller==null?null:controller.getId();
+        po.rtuAddrLast = rtuAddr;
+        po.dt = DateTime.dateFrom_yyyy_MM_dd1(dV2.dt);
+        po.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV2.dt);
+        po.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
+        if(lastPo != null){
+            po.amount = lastPo.amount ;
+        }else{
+            po.amount = 0.0D ;
+        }
+        po.totalAmountLast = cdData.totalAmount ;
+        return po ;
+    }
+
+
+    /**
+     * 淇濆瓨鏂扮殑鍘嗗彶鏁版嵁璁板綍锛屽苟鎶奍D璧嬪�肩粰鏈�鏂拌褰曠殑 lastHistoryId
+     * @param sv
+     * @param controller
+     * @param rtuAddr
+     * @param dV2
+     * @param dataCdC0Vo
+     * @param poLast
+     * @throws Exception
+     * @return RmIntakeAmountDay
+     */
+    private RmIntakeAmountDay newAndSaveHistoryDataDeal(DbSv sv, PrController controller, String rtuAddr, DataV2 dV2, UpDataVo dataCdC0Vo, RmIntakeAmountDayLast poLast)throws Exception {
+        RmIntakeAmountDay poHistory = this.newRmIntakeAmountDay(controller, rtuAddr, dV2, dataCdC0Vo, poLast) ;
+        sv.saveRmIntakeAmountDay(poHistory);
+        //鐢辨渶鏂版暟鎹寔鏈夊巻鍙叉暟鎹腑鐨勬渶鏂拌褰旾D锛屼互鏂逛究蹇�熸煡璇�
+        poLast.lastHistoryId = poHistory == null ? null: poHistory.id ;
+        return poHistory ;
+    }
+
+
+    /**
+     * 鐢熸垚鏂扮殑鎺у埗鍣ㄦ紡鎹熸棩缁熻鏈�鏂拌褰�
+     * @param controller
+     * @param rtuAddr
+     * @param dV2
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmIntakeAmountDayLast updateRmIntakeAmountLastByControllerChange(RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV2 dV2, 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(dV2.dt);
+        lastPo.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV2.dt);
+        lastPo.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
+        //lastPo.amount = lastPo.amount ; //鏃ョ疮璁″彇姘撮噺涓嶅彉
+        lastPo.totalAmountLast = cdData.totalAmount ;
+        return lastPo ;
+    }
+
+    /**
+     * 鏇存柊鏈�鏂拌褰�
+     * @param controller
+     * @param rtuAddr
+     * @param dV2
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmIntakeAmountDayLast updateRmIntakeAmountLastBySameDateNewData(RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV2 dV2, 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(dV2.dt);//鏃ユ湡娌″彉
+        lastPo.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV2.dt);
+        lastPo.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
+        Double added = cdData.totalAmount - lastPo.totalAmountLast ;
+        if(added > 0){
+            if(lastPo.amount == null){
+                lastPo.amount = added ;
+            }else{
+                lastPo.amount += added ;
+            }
+        }else{
+            //po.amount = po.amount ; //鏃ョ疮璁″彇姘撮噺涓嶅彉
+        }
+        lastPo.totalAmountLast = cdData.totalAmount ;
+        return lastPo ;
+    }
+
+    /**
+     * 鏇存柊鏈�鏂拌褰�
+     * @param controller
+     * @param rtuAddr
+     * @param dV2
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmIntakeAmountDayLast updateRmIntakeAmountLastByNewDateNewData(RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV2 dV2, 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(dV2.dt);//鏃ユ湡鍙樹簡
+        lastPo.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV2.dt);
+        lastPo.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
+        Double added = cdData.totalAmount - lastPo.totalAmountLast ;
+        if(added > 0){
+            //鏂扮殑涓�澶╃殑澶勭悊鏂瑰紡涓庡悓涓�澶╃殑澶勭悊鏂瑰紡涓嶄竴鏍�
+            lastPo.amount = added;
+        }else{
+            lastPo.amount = 0.0D; //鏃ョ疮璁℃按閲忓綊0
+        }
+        lastPo.totalAmountLast = cdData.totalAmount ;
+        return lastPo ;
+    }
+
+    /**
+     * 鐢熸垚鏂扮殑鎺у埗鍣ㄦ紡鎹熸棩缁熻鏈�鏂拌褰�
+     * @param controller
+     * @param rtuAddr
+     * @param dV2
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmIntakeAmountDay updateRmIntakeAmountByControllerChange(RmIntakeAmountDay po, RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV2 dV2, 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.amount = lastPo.amount ;
+        po.totalAmountLast = lastPo.totalAmountLast ;
+
+        return po ;
+    }
+
+    /**
+     * 鏇存柊鍘嗗彶璁板綍
+     * @param controller
+     * @param rtuAddr
+     * @param dV2
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmIntakeAmountDay updateRmIntakeAmountBySameDateNewData(RmIntakeAmountDay po, RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV2 dV2, 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.amount = lastPo.amount ;//姝ゆ椂lastPo.amount宸茬粡澧炲姞涓婁簡澧為噺
+        po.totalAmountLast = lastPo.totalAmountLast ;
+
+        return po ;
+    }
+
+
+    public class UpDataVo{
+        public Double totalAmount; //绱娴侀噺锛�5瀛楄妭BCD鐮侊紝鍙栧�艰寖鍥�0~9999999999锛屽崟浣嶄负m3銆�
+        public String rtuDt ;//鎺у埗鍣ㄦ椂閽�
+
+        public void valueFrom(DataCdC0Vo voC0, DataCd84Vo vo84, DataCd83OpenVo vo83Op, DataCd83CloseVo vo83Cl){
+            if(voC0 != null){
+                this.totalAmount = voC0.totalAmount ;
+                this.rtuDt = voC0.rtuDt ;
+            }else if(vo84 != null){
+                this.totalAmount = vo84.totalAmount ;
+                this.rtuDt = vo84.rtuDt ;
+            }else if(vo83Op != null){
+                this.totalAmount = vo83Op.totalAmount ;
+                this.rtuDt = vo83Op.rtuDt ;
+            }else if(vo83Cl != null){
+                this.totalAmount = vo83Cl.totalAmount ;
+                this.rtuDt = vo83Cl.rtuDt ;
+            }
+        }
+
+    }
+
+
+
+}

--
Gitblit v1.8.0