| | |
| | | */ |
| | | 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"; |
| | |
| | | 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{ |
| | | //未更换控制器 |
| | |
| | | } |
| | | } |
| | | } |
| | | //更新最新数据 |
| | | sv.updateRmIntakeAmountLast(poLast); |
| | | } |
| | | } |
| | | |
| | |
| | | }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 |
| | |
| | | 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 ; |
| | | } |
| | |
| | | if(difference > 0){ |
| | | lastPo.amount = difference; |
| | | }else{ |
| | | //po.amount = po.amount ; //累计取水量不变 |
| | | //po.amount = po.amount ; //日累计取水量不变 |
| | | } |
| | | lastPo.totalAmountLast = cdData.totalAmount ; |
| | | return lastPo ; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 更新最新记录 |
| | |
| | | } |
| | | |
| | | /** |
| | | * 生成新的控制器漏损日统计最新记录 |
| | | * @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 |