package com.dy.pipIrrTemp.changeSome; import com.dy.common.util.DateTime; import com.dy.pipIrrGlobal.daoTmp.ChangeMapper; import com.dy.pipIrrGlobal.pojoRm.RmIntakeAmountDay; import com.dy.pipIrrGlobal.pojoSt.StIntakeAmountMonth; import com.dy.pipIrrGlobal.pojoSt.StIntakeAmountYear; import com.dy.pipIrrGlobal.voSt.VoIntake; import com.dy.pipIrrGlobal.voTmp.VoRmIntakeAmountDay; import com.dy.pipIrrTemp.util.StClientAmountConstant; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; /** * @Author: liurunyu * @Date: 2024/12/14 9:25 * @Description */ @Slf4j @Service public class ChSomeIntakeAmountSv { private ChangeMapper dao; @Autowired private void setDao(ChangeMapper dao){ this.dao = dao; } //////////////////////////////////////// // // 有关日统计 // /////////////////////////////////////// /** * 调整取水口日取水量统计 * @throws Exception */ public void chIntakeAmountDay() throws Exception{ RmIntakeAmountDay lastAd = null ; List list = dao.selectAllPrIntakes() ; if(list != null && list.size() > 0){ for(VoIntake vo : list){ lastAd = null ; List adList = dao.selectOneIntakeAllAmountDay(vo.getIntakeId()) ; if(adList != null && adList.size() > 0){ //adList中数据以id升序排列 for(RmIntakeAmountDay ad : adList){ if(lastAd == null){ lastAd = ad ; if(lastAd.amount != null && lastAd.amount > StClientAmountConstant.IntakeAmountDayFlag){ this.doUpdateOneIntakeAmountDay(lastAd.id, 0.0); } }else{ if(ad.amount != null && ad.amount > StClientAmountConstant.IntakeAmountDayFlag){ if(ad.totalAmountLast != null && lastAd.totalAmountLast != null){ //重新计算日取水量 ad.amount = ad.totalAmountLast - lastAd.totalAmountLast; if(ad.amount < 0){//计算日取水量后,可能会有这种情况发生(负值) log.info("出现调整后的日取水量出现负值" + ad.amount + "情况,数据id=" + ad.id + ",取水口id=" + ad.intakeId + ",日期=" + ad.dt + ",设置水量=0.0" ); ad.amount = 0.0 ; } if(ad.amount > StClientAmountConstant.IntakeAmountDayFlag){ //计算日取水量后,仍大于IntakeAmountDayFlag log.info("出现调整后的日取水量仍大于" + StClientAmountConstant.IntakeAmountDayFlag + "的情况,数据id=" + ad.id + ",取水口id=" + ad.intakeId + ",日期=" + ad.dt + ad.amount ); if(ad.dt != null && lastAd.dt != null){ if(DateTime.daysBetweenyyyy_MM_dd(ad.dt, lastAd.dt) == 1){ //只相差一天 log.info("出现相差一天但日取水量大于" + StClientAmountConstant.IntakeAmountDayFlag + "的情况,数据id=" + ad.id + ",取水口id=" + ad.intakeId + ",日期=" + ad.dt + ",设置水量=0.0" + ",设置前水量= " + ad.amount ); ad.amount = 0.0 ; }else{ //已经修改后的数值仍然大于IntakeAmountDayFlag,说明是大日未上报数据而积累下来,可以大于IntakeAmountDayFlag //ad.amount = ad.amount ; log.info("出现相差多天日取水量大于" + StClientAmountConstant.IntakeAmountDayFlag + "的情况,数据id=" + ad.id + ",取水口id=" + ad.intakeId + ",日期=" + ad.dt + ",水量保持不变=" + ad.amount ); } } } }else{ log.info("出现相差多天日取水量大于" + StClientAmountConstant.IntakeAmountDayFlag + "并且属性totalAmountLast为null的情况,数据id=" + ad.id + ",取水口id=" + ad.intakeId + ",日期=" + ad.dt + ",设置水量=0.0" + ",设置前水量= " + ad.amount ); ad.amount = 0.0 ; } this.doUpdateOneIntakeAmountDay(ad.id, ad.amount); } } lastAd = ad ; } } } } } @Transactional protected int doUpdateOneIntakeAmountDay(Long id, Double amount){ return dao.updateOneIntakeAmountDay(id, amount); } /** * 删除所有取水口日取水量统计 * @throws Exception */ //@Transactional //public void deleteAllIntakeAmountDay(){ // dao.deleteAllIntakeAmountDay(); //} /** * 删除一些取水口日取水量统计 * @throws Exception */ @Transactional public void deleteSomeIntakeAmountDay(){ dao.deleteSomeIntakeAmountDay(); } /** * 统计取水口日取水量 * @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 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_HH_mm_ss(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 list) throws Exception{ if(list != null && list.size() > 0){ Date date = DateTime.dateFrom_yyyy_MM_dd(year + "-" + month + "-" + day) ; for(VoRmIntakeAmountDay vo : list){ dao.updateOneIntakeAmountDay1(vo.intakeId, date, vo.amount, vo.money, vo.times); } } } //////////////////////////////////////// // // 有关月统计 // /////////////////////////////////////// /** * 删除所有取水口月取水量统计 * @throws Exception */ @Transactional public void deleteAllIntakeAmountMonth(){ dao.deleteAllIntakeAmountMonth(); } /** * 统计取水口月取水量 * @throws Exception */ public void statisticsIntakeAmountMonth() throws Exception{ int nowYear = Integer.parseInt(DateTime.yyyy()) ; int nowMonth = Integer.parseInt(DateTime.MM()) ; Date startDt ; Date endDt ; List list ; for(int year = StClientAmountConstant.DealStartYear; year <= nowYear; year ++){ list = null ; if(year < nowYear){ for(int month = 1 ; month <= 12 ; month ++){ startDt = DateTime.dateFrom_yyyy_MM_dd(year + "-" + month + "-01") ; endDt = DateTime.dateFrom_yyyy_MM_dd(year + "-" + month + "-" + DateTime.endDayOfMonth(year, month)) ; list = dao.statisticAllIntakeAmountMonthFromAmountDay(startDt, endDt) ; this.doStatisticsIntakeAmountMonth(year, month, list) ; } }else{ for(int month = 1 ; month <= nowMonth ; month ++){ startDt = DateTime.dateFrom_yyyy_MM_dd(year + "-" + month + "-01") ; endDt = DateTime.dateFrom_yyyy_MM_dd(year + "-" + month + "-" + DateTime.endDayOfMonth(year, month)) ; list = dao.statisticAllIntakeAmountMonthFromAmountDay(startDt, endDt) ; this.doStatisticsIntakeAmountMonth(year, month, list) ; } } } } @Transactional protected void doStatisticsIntakeAmountMonth(int year, int month, List list) throws Exception{ if(list != null && list.size() > 0){ for(StIntakeAmountMonth po : list){ po.year = year ; po.month = month ; dao.saveOneIntakeAmountMonth(po) ; } } } //////////////////////////////////////// // // 有关年统计 // /////////////////////////////////////// /** * 删除所有取水口年取水量统计 * @throws Exception */ @Transactional public void deleteAllIntakeAmountYear(){ dao.deleteAllIntakeAmountYear(); } /** * 统计取水口月取水量 * @throws Exception */ public void statisticsIntakeAmountYear() throws Exception{ int nowYear = Integer.parseInt(DateTime.yyyy()) ; Date startDt ; Date endDt ; List list ; 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") ; list = dao.statisticAllIntakeAmountYearFromAmountDay(startDt, endDt) ; this.doStatisticsIntakeAmountYear(year, list) ; } } @Transactional protected void doStatisticsIntakeAmountYear(int year, List list) throws Exception{ if(list != null && list.size() > 0){ for(StIntakeAmountYear po : list){ po.year = year ; dao.saveOneIntakeAmountYear(po) ; } } } }