pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealIntakeAmountDay.java
@@ -22,7 +22,7 @@
 */
public class TkDealIntakeAmountDay extends TaskSurpport {
    private static final Logger log = LogManager.getLogger(TkDealLoss.class.getName());
    private static final Logger log = LogManager.getLogger(TkDealIntakeAmountDay.class.getName());
    //类ID,一定与Tree.xml配置文件中配置一致
    public static final String taskId = "TkDealIntakeAmountDay";
@@ -73,23 +73,40 @@
    private void doDeal(DbSv sv, PrController controller, String rtuAddr, DataV1_0_1 dV1_0_1, UpDataVo dataVo) throws Exception {
        RmIntakeAmountDayLast poLast = sv.getRmIntakeAmountLast(controller.getIntakeId());
        if (poLast == null) {
            //数据库中不存在该取水口的漏损数据
            //数据库中不存在该取水口的日取水量数据
            //首先生成最新数据及历史数据,并先保存
            poLast = this.newRmIntakeAmountLast(controller, rtuAddr, dV1_0_1, dataVo);
            this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV1_0_1, dataVo, poLast);
            sv.saveRmIntakeAmountLast(poLast);
        } else {
            if(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataVo.rtuDt).before(poLast.rtuDtLast)){
                //RTU时钟早于本地RTU时钟,是补报,补报没法计算取水口日累计取水量,因为采用的是累计流量相差的计算方法
                //RTU时钟早于本地RTU时钟,是补报,不用补报来计算取水口日累计取水量,因为采用的是累计流量相差的计算方法,
                //其实补报的量值,基于前面上报数据已经计算包含了,只是量值归结的日期不正确罢了。
            }else if(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataVo.rtuDt).equals(poLast.rtuDtLast)){
                //RTU时钟等于本地RTU时钟,重复上报数据,不进行任何处理
            }else{
                //上行数据中的日期时间符合可计算的条件
                //上行数据中的日期时间符合计算的条件
                if(!rtuAddr.equals(poLast.rtuAddrLast)){
                    //更换了控制器,只更换控制器地址,不进行水量计算
                    poLast = this.updateRmIntakeAmountLastByControllerChange(poLast, controller, rtuAddr, dV1_0_1, dataVo);
                    //因为上行数据中的日期时间是可进行计算的,所以新生成一个历史记录
                    this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV1_0_1, dataVo, poLast);
                    //更换了控制器,处理方法:只更换控制器地址,不进行水量计算
                    //因为上行数据中的日期时间是可进行计算的
                    if(DateTime.dateFrom_yyyy_MM_dd1(dV1_0_1.dt).equals(poLast.dt)){
                        //同一天数据
                        poLast = this.updateRmIntakeAmountLastByControllerChange(poLast, controller, rtuAddr, dV1_0_1, dataVo);
                        RmIntakeAmountDay poHistory = null ;
                        if(poLast.lastHistoryId != null){
                            poHistory = sv.getRmIntakeAmountDay(poLast.lastHistoryId) ;
                        }
                        if(poHistory == null){
                            this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV1_0_1, dataVo, poLast);
                        }else{
                            poHistory = this.updateRmIntakeAmountByControllerChange(poHistory, poLast, controller, rtuAddr, dV1_0_1, dataVo);
                            sv.updateRmIntakeAmountDay(poHistory);
                        }
                    }else{
                        //非同一天,所以新生成一个历史记录
                        poLast = this.updateRmIntakeAmountLastByControllerChange(poLast, controller, rtuAddr, dV1_0_1, dataVo);
                        this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV1_0_1, dataVo, poLast);
                    }
                    sv.saveRmIntakeAmountLast(poLast);
                }else{
                    //未更换控制器
@@ -117,6 +134,8 @@
                    }
                }
            }
            //更新最新数据
            sv.updateRmIntakeAmountLast(poLast);
        }
    }
@@ -164,14 +183,13 @@
        }else{
            po.amount = 0.0D ;
        }
        po.amount = lastPo==null?0.0D:lastPo.amount ;
        po.totalAmountLast = cdData.totalAmount ;
        return po ;
    }
    /**
     * 保存新的开阀上报历史数据记录,并把ID赋值给最新记录的 lastHistoryId
     * 保存新的历史数据记录,并把ID赋值给最新记录的 lastHistoryId
     * @param sv
     * @param controller
     * @param rtuAddr
@@ -206,7 +224,7 @@
        lastPo.dt = DateTime.dateFrom_yyyy_MM_dd1(dV1_0_1.dt);
        lastPo.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1_0_1.dt);
        lastPo.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
        //lastPo.amount = lastPo.amount ; //累计取水量不变
        //lastPo.amount = lastPo.amount ; //日累计取水量不变
        lastPo.totalAmountLast = cdData.totalAmount ;
        return lastPo ;
    }
@@ -231,12 +249,11 @@
        if(difference > 0){
            lastPo.amount = difference;
        }else{
            //po.amount = po.amount ; //累计取水量不变
            //po.amount = po.amount ; //日累计取水量不变
        }
        lastPo.totalAmountLast = cdData.totalAmount ;
        return lastPo ;
    }
    /**
     * 更新最新记录
@@ -265,6 +282,29 @@
    }
    /**
     * 生成新的控制器漏损日统计最新记录
     * @param controller
     * @param rtuAddr
     * @param dV1_0_1
     * @param cdData
     * @return
     * @throws Exception
     */
    private RmIntakeAmountDay updateRmIntakeAmountByControllerChange(RmIntakeAmountDay po, RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV1_0_1 dV1_0_1, 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