取水口日取水量表中,出现一些大数,明显不正确,发析系统日志,发现一些阀控器会上报一些累计流量为0的数据,且无规律,推测是其不能从水表读取到累计流量时会上报0值。如果间歇上报0值,间歇上报一些非0值,非0值减去0值,就会出现大数,一天中出现几次那么会大数进行累加,数值将更大。为此变更算法,规避这种情况,但也会丢失一些流量值。
1个文件已修改
29 ■■■■■ 已修改文件
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealIntakeAmountDay.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealIntakeAmountDay.java
@@ -221,7 +221,7 @@
        lastPo.dt = DateTime.dateFrom_yyyy_MM_dd1(dV1.dt);
        lastPo.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1.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 ;
    }
@@ -242,6 +242,14 @@
        //lastPo.dt = DateTime.dateFrom_yyyy_MM_dd1(dV1.dt);//日期没变
        lastPo.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1.dt);
        lastPo.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
        if(cdData.totalAmount == 0.0F){
            //发现阀控器一个bug,经常上报累计流量为0,推测是阀控器未能从水表采集到数据时会上报0值
            //这种情况数据不做处理
            //如果水表初安装,未进行过任务取水,那么累计流量会是0,这种情况当bug处理也无防
            //上面时标作了更新,也正常,相当于本次上报的累计流量与上次上报的累计流量数值相等
            //lastPo.totalAmountLast = lastPo.totalAmountLast ;
            //lastPo.amount = lastPo.amount; //本日的日累计水量保持不变
        }else{
        Double added = cdData.totalAmount - lastPo.totalAmountLast ;
        if(added > 0){
            if(lastPo.amount == null){
@@ -250,9 +258,13 @@
                lastPo.amount += added ;
            }
        }else{
            //po.amount = po.amount ; //日累计取水量不变
                //可能是更换水表了,新表底值对原表底值小。
                //本次置量值不变,下次再上报时,就能正常计算了。
                //lastPo.amount = lastPo.amount ; //日累计取水量不变
        }
        lastPo.totalAmountLast = cdData.totalAmount ;
        }
        return lastPo ;
    }
@@ -272,14 +284,27 @@
        lastPo.dt = DateTime.dateFrom_yyyy_MM_dd1(dV1.dt);//日期变了
        lastPo.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1.dt);
        lastPo.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt);
        if(cdData.totalAmount == 0.0F){
            //发现阀控器一个bug,经常上报累计流量为0,推测是阀控器未能从水表采集到数据时会上报0值
            //这种情况数据不做处理
            //如果水表初安装,未进行过任务取水,那么累计流量会是0,这种情况当bug处理也无防
            //上面时标作了更新,也正常,相当于本次上报的累计流量与上次上报的累计流量数值相等
            //lastPo.totalAmountLast = lastPo.totalAmountLast ;
            lastPo.amount = 0.0D; //新的一天的日累计水量置0
        }else{
        Double added = cdData.totalAmount - lastPo.totalAmountLast ;
        if(added > 0){
            //新的一天的处理方式与同一天的处理方式不一样
            lastPo.amount = added;
        }else{
                //可能是更换水表了,新表底值比原表底值小。
                //本次置0,下次再上报时,就能正常计算了。
            lastPo.amount = 0.0D; //日累计水量归0
        }
        lastPo.totalAmountLast = cdData.totalAmount ;
        }
        return lastPo ;
    }