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 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;
|
|
private static final int IntakeAmountDayFlag = 800 ;//2024-12-14统计元谋数据库实时数据,发现大于800的正确的数据不存在,而小于800的基本为正确数据
|
|
@Autowired
|
private void setDao(ChangeMapper dao){
|
this.dao = dao;
|
}
|
|
|
////////////////////////////////////////
|
//
|
// 有关日统计
|
//
|
///////////////////////////////////////
|
|
/**
|
* 调整取水口日取水量统计
|
* @throws Exception
|
*/
|
public void chIntakeAmountDay() throws Exception{
|
RmIntakeAmountDay lastAd = null ;
|
List<VoIntake> list = dao.selectAllPrIntakes() ;
|
if(list != null && list.size() > 0){
|
for(VoIntake vo : list){
|
lastAd = null ;
|
List<RmIntakeAmountDay> 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 > IntakeAmountDayFlag){
|
this.doUpdateOneIntakeAmountDay(lastAd.id, 0.0);
|
}
|
}else{
|
if(ad.amount != null && ad.amount > 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 > IntakeAmountDayFlag){
|
//计算日取水量后,仍大于IntakeAmountDayFlag
|
log.info("出现调整后的日取水量仍大于"
|
+ 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("出现相差一天但日取水量大于"
|
+ 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("出现相差多天日取水量大于"
|
+ IntakeAmountDayFlag
|
+ "的情况,数据id=" + ad.id
|
+ ",取水口id=" + ad.intakeId
|
+ ",日期=" + ad.dt
|
+ ",水量保持不变=" + ad.amount
|
);
|
}
|
}
|
}
|
}else{
|
log.info("出现相差多天日取水量大于"
|
+ 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);
|
}
|
|
|
|
////////////////////////////////////////
|
//
|
// 有关月统计
|
//
|
///////////////////////////////////////
|
|
private static final int DealStartYear = 2024 ;
|
private static final int DealStartMonth = 8 ;
|
|
private static final String endDayOfMonth(int year, int month){
|
if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
|
return "31" ;
|
}else{
|
if(month == 2){
|
if(DateTime.isLeapYear(year)){
|
return "29" ;
|
}else{
|
return "28" ;
|
}
|
}else{
|
return "30" ;
|
}
|
}
|
}
|
/**
|
* 删除所有取水口月取水量统计
|
* @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<StIntakeAmountMonth> list ;
|
for(int year = 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 + "-" + 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 + "-" + endDayOfMonth(year, month)) ;
|
list = dao.statisticAllIntakeAmountMonthFromAmountDay(startDt, endDt) ;
|
this.doStatisticsIntakeAmountMonth(year, month, list) ;
|
}
|
}
|
}
|
}
|
@Transactional
|
protected void doStatisticsIntakeAmountMonth(int year, int month, List<StIntakeAmountMonth> 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<StIntakeAmountYear> list ;
|
for(int year = DealStartYear; year <= nowYear; year ++){
|
list = null ;
|
startDt = DateTime.dateFrom_MM_dd(year + "-01-01") ;
|
endDt = DateTime.dateFrom_MM_dd(year + "-12-31") ;
|
list = dao.statisticAllIntakeAmountYearFromAmountDay(startDt, endDt) ;
|
this.doStatisticsIntakeAmountYear(year, list) ;
|
}
|
}
|
@Transactional
|
protected void doStatisticsIntakeAmountYear(int year, List<StIntakeAmountYear> list) throws Exception{
|
if(list != null && list.size() > 0){
|
for(StIntakeAmountYear po : list){
|
po.year = year ;
|
dao.saveOneIntakeAmountYear(po) ;
|
}
|
}
|
}
|
|
}
|