pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/DateTime.java
@@ -1491,7 +1491,22 @@ "09", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23" }; } public static int[] dayGrpInMonth(int year, int month){ if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){ return new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31} ; }else{ if(month == 2){ if(isLeapYear(year)){ return new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29} ; }else{ return new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28} ; } }else{ return new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30} ; } } } public static String getWeek(int wk) { if (wk == 1) { pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoTmp/ChangeMapper.java
@@ -42,11 +42,40 @@ * @return 影响实体数 */ int updateOneIntakeAmountDay(@Param("id")Long id, @Param("amount")Double amount); /** * 更新一个取水口的日用水量统计 * * @return 影响实体数 */ /** * 更新一个取水口的日用水量统计 * * @return 影响实体数 */ int updateOneIntakeAmountDay1(@Param("intakeId")Long intakeId, @Param("dt")Date dt, @Param("amount")Double amount, @Param("money")Double money, @Param("times")Integer times); /** * 删除所有取水口的日用水量统计 * @return 影响实体数 */ int deleteAllIntakeAmountDay(); /** * 统计所有取水口的日用水量 * @return 实体集合 */ List<RmIntakeAmountDay> statisticAllIntakeAmountDayFromOpenCloseValveHistory(@Param("startDt")Date startDt, @Param("endDt")Date endDt); List<RmIntakeAmountDay> selectStIntakeDayStatisticsByDate(@Param("intakeId")Long intakeId, @Param("date")Date date); /** * 删除所有取水口的月用水量统计 * @return 影响实体数 */ pipIrr-platform/pipIrr-global/src/main/resources/mapper/Temp4ChangeMapper.xml
@@ -34,6 +34,39 @@ where id = #{id, jdbcType=BIGINT} </update> <update id="updateOneIntakeAmountDay1" > update rm_intake_amount_day set amount = #{amount, jdbcType=FLOAT}, money = #{money, jdbcType=FLOAT}, times = #{times, jdbcType=INTEGER} where intake_id = #{intakeId, jdbcType=BIGINT} and dt = #{dt, jdbcType=DATE} </update> <delete id="deleteAllIntakeAmountDay"> delete from rm_intake_amount_day </delete> <!-- --> <select id="statisticAllIntakeAmountDayFromOpenCloseValveHistory" resultType="com.dy.pipIrrGlobal.pojoRm.RmIntakeAmountDay"> select intake_id as intakeId , sum(cl_this_amount) as amount, sum(cl_this_money) as money, count(id) as times from rm_open_close_valve_history where cl_dt <![CDATA[>=]]> #{startDt, jdbcType=DATE} and cl_dt <![CDATA[<=]]> #{endDt, jdbcType=DATE} group by intake_id </select> <select id="selectStIntakeDayStatisticsByDate" resultType="com.dy.pipIrrGlobal.pojoRm.RmIntakeAmountDay"> select * from rm_intake_amount_day where rm_intake_amount_day.intake_id = #{intakeId, jdbcType=BIGINT} and dt = #{date, jdbcType=DATE} </select> <delete id="deleteAllIntakeAmountMonth"> delete from st_intake_amount_month pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealIntakeAmountDay.java
@@ -37,22 +37,34 @@ Data d = (Data) data; DataV1 dV1 = (DataV1) d.getSubData();//前面任务已经判断不为null Object cdObj = dV1.subData; if (cdObj != null && (cdObj instanceof DataCdC0Vo || cdObj instanceof DataCd84Vo || cdObj instanceof DataCd83OpenVo || cdObj instanceof DataCd83CloseVo)){ /** * 2025-01-11 * 原来实现本任务功能,数据从84,83,C0功能码数据中获得统计数据,但后来数据中增加了金额与开关阀次数, * 从而使得从三种数据中统计数据相当困难与自相矛盾,所以修改实现方式,只从83数据中统计本数据,并且从几 * 个月来运行数据看,只要设备能上线,基本上各种上报数据都能上报上来,所以没有必须从84及C0数据中统计数据了 * 至此,本实现方式主永久实现方式,不再修改回去了,实践证明,以前的实现方式数据是统计不准确的。 */ if (cdObj != null && ( //cdObj instanceof DataCdC0Vo || //cdObj instanceof DataCd84Vo || //cdObj instanceof DataCd83OpenVo || cdObj instanceof DataCd83CloseVo )){ Object[] objs = this.getTaskResults(TkPreGenObjs.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){ }else */ if(cdObj instanceof DataCd83CloseVo){ vo.valueFrom(null,null,null, (DataCd83CloseVo)cdObj); } this.doDeal(sv, controller, d.getRtuAddr(), dV1, vo); @@ -76,7 +88,7 @@ //数据库中不存在该取水口的日取水量数据 //首先生成最新数据及历史数据,并先保存 poLast = this.newRmIntakeAmountLast(controller, rtuAddr, dV1, dataVo); this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV1, dataVo, poLast); this.newAndSaveRmIntakeAmountHistory(sv, controller, rtuAddr, dV1, dataVo, poLast); sv.saveRmIntakeAmountLast(poLast); } else { if(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataVo.rtuDt).before(poLast.rtuDtLast)){ @@ -91,21 +103,21 @@ //因为上行数据中的日期时间是可进行计算的 if(DateTime.dateFrom_yyyy_MM_dd1(dV1.dt).equals(poLast.dt)){ //同一天数据 poLast = this.updateRmIntakeAmountLastByControllerChange(poLast, controller, rtuAddr, dV1, dataVo); poLast = this.updateRmIntakeAmountLastBySameDateByControllerChange(poLast, controller, rtuAddr, dV1, dataVo); RmIntakeAmountDay poHistory = null ; if(poLast.lastHistoryId != null){ poHistory = sv.getRmIntakeAmountDay(poLast.lastHistoryId) ; } if(poHistory == null){ this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV1, dataVo, poLast); this.newAndSaveRmIntakeAmountHistory(sv, controller, rtuAddr, dV1, dataVo, poLast); }else{ poHistory = this.updateRmIntakeAmountByControllerChange(poHistory, poLast, controller, rtuAddr, dV1, dataVo); poHistory = this.updateRmIntakeAmountBySameDateByControllerChange(poHistory, poLast, controller, rtuAddr, dV1, dataVo); sv.updateRmIntakeAmountDay(poHistory); } }else{ //非同一天,所以新生成一个历史记录 poLast = this.updateRmIntakeAmountLastByControllerChange(poLast, controller, rtuAddr, dV1, dataVo); this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV1, dataVo, poLast); poLast = this.updateRmIntakeAmountLastByNewDateByControllerChange(poLast, controller, rtuAddr, dV1, dataVo); this.newAndSaveRmIntakeAmountHistory(sv, controller, rtuAddr, dV1, dataVo, poLast); } }else{ //未更换控制器 @@ -117,7 +129,7 @@ poHistory = sv.getRmIntakeAmountDay(poLast.lastHistoryId) ; } if(poHistory == null){ this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV1, dataVo, poLast); this.newAndSaveRmIntakeAmountHistory(sv, controller, rtuAddr, dV1, dataVo, poLast); }else{ poHistory = this.updateRmIntakeAmountBySameDateNewData(poHistory, poLast, controller, rtuAddr, dV1, dataVo); sv.updateRmIntakeAmountDay(poHistory); @@ -125,7 +137,7 @@ }else if(DateTime.dateFrom_yyyy_MM_dd1(dV1.dt).after(poLast.dt)){ //新的日期 poLast = this.updateRmIntakeAmountLastByNewDateNewData(poLast, controller, rtuAddr, dV1, dataVo); this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV1, dataVo, poLast); this.newAndSaveRmIntakeAmountHistory(sv, controller, rtuAddr, dV1, dataVo, poLast); }else{ //这种情况不存在 } @@ -153,6 +165,11 @@ po.dt = DateTime.dateFrom_yyyy_MM_dd1(dV1.dt); po.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1.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 ; @@ -161,41 +178,10 @@ po.amount = 0.0D ; po.money = 0.0D ; po.times = 0 ; } }*/ po.rtuAddrLast = rtuAddr; return po ; } /** * 生成新的取水口用水统计历史记录 * @param controller * @param rtuAddr * @param dV1 * @param cdData * @return * @throws Exception */ private RmIntakeAmountDay newRmIntakeAmountDay(PrController controller, String rtuAddr, DataV1 dV1, 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(dV1.dt); po.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1.dt); po.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt); if(lastPo != null){ po.amount = lastPo.amount ; po.money = lastPo.money ; po.times = lastPo.times ; }else{ po.amount = 0.0D ; po.money = 0.0D ; po.times = 0 ; } po.totalAmountLast = cdData.totalAmount ; return po ; } /** * 保存新的历史数据记录,并把ID赋值给最新记录的 lastHistoryId @@ -203,13 +189,32 @@ * @param controller * @param rtuAddr * @param dV1 * @param dataCdC0Vo * @param cdData * @param poLast * @throws Exception * @return RmIntakeAmountDay */ private RmIntakeAmountDay newAndSaveHistoryDataDeal(DbSv sv, PrController controller, String rtuAddr, DataV1 dV1, UpDataVo dataCdC0Vo, RmIntakeAmountDayLast poLast)throws Exception { RmIntakeAmountDay poHistory = this.newRmIntakeAmountDay(controller, rtuAddr, dV1, dataCdC0Vo, poLast) ; private RmIntakeAmountDay newAndSaveRmIntakeAmountHistory(DbSv sv, PrController controller, String rtuAddr, DataV1 dV1, 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(dV1.dt); poHistory.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1.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); //由最新数据持有历史数据中的最新记录ID,以方便快速查询 poLast.lastHistoryId = poHistory == null ? null: poHistory.id ; @@ -218,7 +223,7 @@ /** * 取水口更换了控制器,此时只更新部分属性 * 取水口更换了控制器,同一天数据,此时只更新部分属性 * @param controller * @param rtuAddr * @param dV1 @@ -226,17 +231,110 @@ * @return * @throws Exception */ private RmIntakeAmountDayLast updateRmIntakeAmountLastByControllerChange(RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV1 dV1, UpDataVo cdData)throws Exception { private RmIntakeAmountDayLast updateRmIntakeAmountLastBySameDateByControllerChange(RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV1 dV1, 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(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.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 ; } /** * 取水口更换了控制器在,此时只更新部分属性 * @param controller * @param rtuAddr * @param dV1 * @param cdData * @return * @throws Exception */ private RmIntakeAmountDay updateRmIntakeAmountBySameDateByControllerChange(RmIntakeAmountDay po, RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV1 dV1, 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 ; } /** * 取水口更换了控制器,非同一天数据,此时更新部分属性 * @param controller * @param rtuAddr * @param dV1 * @param cdData * @return * @throws Exception */ private RmIntakeAmountDayLast updateRmIntakeAmountLastByNewDateByControllerChange(RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV1 dV1, 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(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.totalAmountLast = cdData.totalAmount ; //阀控器更换了,并且是新一天数据 2025-01-11 lastPo.amount = cdData.amount ; lastPo.money = cdData.money ; lastPo.times = 1 ; return lastPo ; } /** * 收到同一天的新的数据,进行更新数据 @@ -261,37 +359,58 @@ //上面时标作了更新,也正常,相当于本次上报的累计流量与上次上报的累计流量数值相等 //lastPo.totalAmountLast = lastPo.totalAmountLast ; //lastPo.amount = lastPo.amount; //本日的日累计水量保持不变 }else{ 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{ lastPo.money = 0.0D ; lastPo.times = 1 ; } lastPo.totalAmountLast = cdData.totalAmount ; }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 ; } @@ -312,6 +431,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); lastPo.totalAmountLast = cdData.totalAmount ; //新的一天数据 2025-01-11 lastPo.amount = cdData.amount ; lastPo.money = cdData.money ; lastPo.times = 1 ; /* if(cdData.totalAmount == 0.0F){ //发现阀控器一个bug,经常上报累计流量为0,推测是阀控器未能从水表采集到数据时会上报0值 //这种情况数据不做处理 @@ -329,45 +456,20 @@ //本次置0,下次再上报时,就能正常计算了。 lastPo.amount = 0.0D; //日累计水量归0 } lastPo.totalAmountLast = cdData.totalAmount ; } if(cdData.isCloseValve != null && cdData.isCloseValve.booleanValue()){ //是从关阀报中得到的数据 lastPo.money = cdData.money ; lastPo.times = 1 ; }else{ lastPo.money = 0.0D ; lastPo.times = 0 ; //非关阀报数据 //不作为 } */ return lastPo ; } /** * 取水口更换了控制器在,此时只更新部分属性 * @param controller * @param rtuAddr * @param dV1 * @param cdData * @return * @throws Exception */ private RmIntakeAmountDay updateRmIntakeAmountByControllerChange(RmIntakeAmountDay po, RmIntakeAmountDayLast lastPo, PrController controller, String rtuAddr, DataV1 dV1, 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.money = lastPo.money ; po.times = lastPo.times ; po.totalAmountLast = lastPo.totalAmountLast ; return po ; } /** * 更新历史记录 @@ -385,11 +487,11 @@ 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已经增加上了增量 po.totalAmountLast = lastPo.totalAmountLast ; return po ; } @@ -403,6 +505,7 @@ 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 ; @@ -412,13 +515,13 @@ }else if(vo83Op != null){ this.totalAmount = vo83Op.totalAmount ; this.rtuDt = vo83Op.rtuDt ; }else if(vo83Cl != null){ }else if(vo83Cl != null){ */ this.totalAmount = vo83Cl.totalAmount ; this.amount = vo83Cl.thisAmount ; this.money = vo83Cl.thisMoney ; this.isCloseValve = true ; this.rtuDt = vo83Cl.rtuDt ; } /*} */ } } pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/RtuDataDealTree.xml
@@ -23,7 +23,7 @@ <task id="TkDealOpenValveReport" name="控制器开阀上报(功能码83)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V1.TkDealOpenValveReport" /> <task id="TkDealCloseValveReport" name="控制器关阀上报(功能码83)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V1.TkDealCloseValveReport" /> <task id="TkDealLoss" name="取水口日漏损量(功能码C0)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V1.TkDealLoss" /> <task id="TkDealIntakeAmountDay" name="取水口日用水量(功能码84、功能码83、功能码C0)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V1.TkDealIntakeAmountDay" /> <task id="TkDealIntakeAmountDay" name="取水口日用水量(功能码83)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V1.TkDealIntakeAmountDay" /> <task id="TkDealClientAmountDay" name="农户日用水量(功能码83)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V1.TkDealClientAmountDay" /> <task id="TkDealIcRemainMoney" name="IC卡剩余金额(功能码84、功能码83)" enable="true" class="com.dy.rtuMw.server.rtuData.p206V1.TkDealIcRemainMoney" /> </task> pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/changeSome/ChSomeCtrl.java
@@ -54,6 +54,18 @@ return BaseResponseUtils.buildSuccess(true); } /** * 重新统计取水口月取水量 * @return */ @GetMapping(path = "reStatisticsAllIntakeDayAmount") @SsoAop() public BaseResponse<Boolean> reStatisticsAllIntakeDayAmount() throws Exception{ this.intakeAmountSv.deleteAllIntakeAmountDay(); this.intakeAmountSv.statisticsIntakeAmountDay(); return BaseResponseUtils.buildSuccess(true); } /** * 重新统计取水口月取水量 pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/changeSome/ChSomeIntakeAmountSv.java
@@ -6,6 +6,7 @@ import com.dy.pipIrrGlobal.pojoSt.StIntakeAmountMonth; import com.dy.pipIrrGlobal.pojoSt.StIntakeAmountYear; import com.dy.pipIrrGlobal.voSt.VoIntake; import com.dy.pipIrrTemp.util.StClientAmountConstant; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -26,8 +27,6 @@ public class ChSomeIntakeAmountSv { private ChangeMapper dao; private static final int IntakeAmountDayFlag = 800 ;//2024-12-14统计元谋数据库实时数据,发现大于800的正确的数据不存在,而小于800的基本为正确数据 @Autowired private void setDao(ChangeMapper dao){ @@ -57,11 +56,11 @@ for(RmIntakeAmountDay ad : adList){ if(lastAd == null){ lastAd = ad ; if(lastAd.amount != null && lastAd.amount > IntakeAmountDayFlag){ if(lastAd.amount != null && lastAd.amount > StClientAmountConstant.IntakeAmountDayFlag){ this.doUpdateOneIntakeAmountDay(lastAd.id, 0.0); } }else{ if(ad.amount != null && ad.amount > IntakeAmountDayFlag){ if(ad.amount != null && ad.amount > StClientAmountConstant.IntakeAmountDayFlag){ if(ad.totalAmountLast != null && lastAd.totalAmountLast != null){ //重新计算日取水量 ad.amount = ad.totalAmountLast - lastAd.totalAmountLast; @@ -74,10 +73,10 @@ ); ad.amount = 0.0 ; } if(ad.amount > IntakeAmountDayFlag){ if(ad.amount > StClientAmountConstant.IntakeAmountDayFlag){ //计算日取水量后,仍大于IntakeAmountDayFlag log.info("出现调整后的日取水量仍大于" + IntakeAmountDayFlag + StClientAmountConstant.IntakeAmountDayFlag + "的情况,数据id=" + ad.id + ",取水口id=" + ad.intakeId + ",日期=" + ad.dt @@ -87,7 +86,7 @@ if(DateTime.daysBetweenyyyy_MM_dd(ad.dt, lastAd.dt) == 1){ //只相差一天 log.info("出现相差一天但日取水量大于" + IntakeAmountDayFlag + StClientAmountConstant.IntakeAmountDayFlag + "的情况,数据id=" + ad.id + ",取水口id=" + ad.intakeId + ",日期=" + ad.dt @@ -99,7 +98,7 @@ //已经修改后的数值仍然大于IntakeAmountDayFlag,说明是大日未上报数据而积累下来,可以大于IntakeAmountDayFlag //ad.amount = ad.amount ; log.info("出现相差多天日取水量大于" + IntakeAmountDayFlag + StClientAmountConstant.IntakeAmountDayFlag + "的情况,数据id=" + ad.id + ",取水口id=" + ad.intakeId + ",日期=" + ad.dt @@ -110,7 +109,7 @@ } }else{ log.info("出现相差多天日取水量大于" + IntakeAmountDayFlag + StClientAmountConstant.IntakeAmountDayFlag + "并且属性totalAmountLast为null的情况,数据id=" + ad.id + ",取水口id=" + ad.intakeId + ",日期=" + ad.dt @@ -134,6 +133,53 @@ return dao.updateOneIntakeAmountDay(id, amount); } /** * 删除所有取水口日取水量统计 * @throws Exception */ @Transactional public void deleteAllIntakeAmountDay(){ dao.deleteAllIntakeAmountDay(); } /** * 统计取水口日取水量 * @throws Exception */ public void statisticsIntakeAmountDay() throws Exception{ int nowYear = Integer.parseInt(DateTime.yyyy()) ; int nowMonth = Integer.parseInt(DateTime.mm()) ; int nowDay = Integer.parseInt(DateTime.dd()) ; Date startDt ; Date endDt ; List<RmIntakeAmountDay> list ; boolean stop = false ; for(int[] ym : StClientAmountConstant.yearMonthGrp) { int[] dates = DateTime.dayGrpInMonth(ym[0], ym[1]); for(int day: dates){ if(ym[0] == nowYear && ym[1] == nowMonth && day > nowDay){ stop = true ; } if(!stop){ startDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(ym[0] + "-" + ym[1] + "-" + day + " 00:00:00") ; endDt = DateTime.dateFrom_yyyy_MM_dd(ym[0] + "-" + ym[1] + "-" + day + " 23:59:59") ; list = dao.statisticAllIntakeAmountDayFromOpenCloseValveHistory(startDt, endDt) ; this.doStatisticsIntakeAmountDay(ym[0], ym[1], day, list) ; }else{ break ; } } } } @Transactional protected void doStatisticsIntakeAmountDay(int year, int month, int day, List<RmIntakeAmountDay> list) throws Exception{ if(list != null && list.size() > 0){ Date date = DateTime.dateFrom_yyyy_MM_dd(year + "-" + month + "-" + day) ; for(RmIntakeAmountDay po : list){ dao.updateOneIntakeAmountDay1(po.intakeId, date, po.amount, po.money, po.times); } } } //////////////////////////////////////// @@ -141,9 +187,6 @@ // 有关月统计 // /////////////////////////////////////// private static final int DealStartYear = 2024 ; private static final int DealStartMonth = 8 ; /** * 删除所有取水口月取水量统计 @@ -164,7 +207,7 @@ Date startDt ; Date endDt ; List<StIntakeAmountMonth> list ; for(int year = DealStartYear; year <= nowYear; year ++){ for(int year = StClientAmountConstant.DealStartYear; year <= nowYear; year ++){ list = null ; if(year < nowYear){ for(int month = 1 ; month <= 12 ; month ++){ @@ -218,7 +261,7 @@ Date startDt ; Date endDt ; List<StIntakeAmountYear> list ; for(int year = DealStartYear; year <= nowYear; year ++){ for(int year = StClientAmountConstant.DealStartYear; year <= nowYear; year ++){ list = null ; startDt = DateTime.dateFrom_yyyy_MM_dd(year + "-01-01") ; endDt = DateTime.dateFrom_yyyy_MM_dd(year + "-12-31") ; pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/changeSome/ChSomeIntakeLossSv.java
@@ -9,6 +9,7 @@ import com.dy.pipIrrGlobal.pojoSt.StLossMonth; import com.dy.pipIrrGlobal.pojoSt.StLossYear; import com.dy.pipIrrGlobal.voSt.VoIntake; import com.dy.pipIrrTemp.util.StClientAmountConstant; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -27,9 +28,6 @@ public class ChSomeIntakeLossSv { private ChangeMapper dao; private static final int IntakeLossDayFlag = 800 ;//2024-12-14统计元谋数据库实时数据,发现大于800的正确的数据不存在,而小于800的基本为正确数据 @Autowired private void setDao(ChangeMapper dao){ this.dao = dao; @@ -52,7 +50,7 @@ if(adList != null && adList.size() > 0){ //adList中数据以id升序排列 for(RmLossDay ad : adList){ if(ad.lossAmount != null && ad.lossAmount > IntakeLossDayFlag){ if(ad.lossAmount != null && ad.lossAmount > StClientAmountConstant.IntakeLossDayFlag){ this.doUpdateOneIntakeLossDay(ad.id, 0.0); } } pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/statistics/StClientAmountConstant.java
File was deleted pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/statistics/StClientAmountDaySv.java
@@ -5,10 +5,8 @@ import com.dy.pipIrrGlobal.daoRm.RmClientAmountDayMapper; import com.dy.pipIrrGlobal.daoSt.StClientAmountDayMapper; import com.dy.pipIrrGlobal.pojoSt.StClientAmountDay; import com.dy.pipIrrGlobal.pojoSt.StConsumeClientMonth; import com.dy.pipIrrGlobal.pojoSt.StConsumeClientYear; import com.dy.pipIrrGlobal.voSt.VoClientAmountStatistics; import com.dy.pipIrrGlobal.voSt.VoClientConsumeStatistics; import com.dy.pipIrrTemp.util.StClientAmountConstant; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/statistics/StClientAmountMonthSv.java
@@ -1,14 +1,11 @@ package com.dy.pipIrrTemp.statistics; import com.dy.common.util.DateTime; import com.dy.common.util.IDLongGenerator; import com.dy.pipIrrGlobal.daoSt.StClientAmountDayMapper; import com.dy.pipIrrGlobal.daoSt.StClientAmountMonthMapper; import com.dy.pipIrrGlobal.pojoSt.StClientAmountMonth; import com.dy.pipIrrGlobal.pojoSt.StConsumeClientMonth; import com.dy.pipIrrGlobal.pojoSt.StConsumeClientYear; import com.dy.pipIrrGlobal.voSt.VoClientAmountStatistics; import com.dy.pipIrrGlobal.voSt.VoClientConsumeStatistics; import com.dy.pipIrrTemp.util.StClientAmountConstant; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/statistics/StClientAmountYearSv.java
@@ -4,9 +4,9 @@ import com.dy.pipIrrGlobal.daoSt.StClientAmountDayMapper; import com.dy.pipIrrGlobal.daoSt.StClientAmountMonthMapper; import com.dy.pipIrrGlobal.daoSt.StClientAmountYearMapper; import com.dy.pipIrrGlobal.pojoSt.StClientAmountMonth; import com.dy.pipIrrGlobal.pojoSt.StClientAmountYear; import com.dy.pipIrrGlobal.voSt.VoClientAmountStatistics; import com.dy.pipIrrTemp.util.StClientAmountConstant; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; pipIrr-platform/pipIrr-web/pipIrr-web-temp/src/main/java/com/dy/pipIrrTemp/util/StClientAmountConstant.java
New file @@ -0,0 +1,19 @@ package com.dy.pipIrrTemp.util; /** * @Author: liurunyu * @Date: 2024/12/30 13:49 * @Description */ public class StClientAmountConstant { public static final int IntakeLossDayFlag = 800 ;//2024-12-14统计元谋数据库实时数据,发现大于800的正确的数据不存在,而小于800的基本为正确数据 public static final int IntakeAmountDayFlag = 800 ;//2024-12-14统计元谋数据库实时数据,发现大于800的正确的数据不存在,而小于800的基本为正确数据 public static final int DealStartYear = 2024 ; public static final int DealStartMonth = 8 ; public static final int[][] yearMonthGrp = {{2024, 9}, {2024, 10}, {2024, 11}, {2024, 12}, {2025, 1}, {2025, 2}, {2025, 3}, {2025, 4}}; }