gunshi-project-ss/src/main/java/com/gunshi/project/xyt/service/StatisticsService.java

287 lines
9.5 KiB
Java
Raw Normal View History

package com.gunshi.project.xyt.service;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.gunshi.db.dto.DateRangeSo;
import com.gunshi.project.xyt.entity.vo.SdJyRbVo;
import com.gunshi.project.xyt.entity.vo.SdSwRbVo;
import com.gunshi.project.xyt.entity.vo.StRzVo;
import com.gunshi.project.xyt.mapper.StPptnRHMapper;
import com.gunshi.project.xyt.model.StPptnRH;
import com.gunshi.project.xyt.util.DateUtil;
import com.gunshi.project.xyt.util.ExcelUtil;
import jakarta.servlet.http.HttpServletResponse;
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.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* :
* author: xusan
* date: 2024-07-08 17:30:37
*/
@Service
@Slf4j
@Transactional(rollbackFor = Exception.class)
public class StatisticsService {
@Autowired
private StPptnRHMapper stPptnRHMapper;
private static final String TIME_END_PREFIX = " 08:00:00";
private static final String ZERO_TIME_END_PREFIX = " 00:00:00";
public List<SdJyRbVo> sdJyRb(DateRangeSo dateRangeSo) {
List<SdJyRbVo> res = new ArrayList<>();
String start = DateUtil.convertDateToString(dateRangeSo.getStart()) + TIME_END_PREFIX;
String end = DateUtil.getPlusDate(dateRangeSo.getEnd(), 1) + TIME_END_PREFIX;
List<String> dates = DateUtil.getDatesBetween(dateRangeSo.getStart(), dateRangeSo.getEnd(), false);
List<StPptnRH> list = stPptnRHMapper.queryList(start, end);
for (String date : dates) {
SdJyRbVo vo = new SdJyRbVo();
vo.setDate(date);
getDrp(vo, list);
res.add(vo);
}
return res;
}
private void getDrp(SdJyRbVo vo, List<StPptnRH> list) {
if (CollectionUtils.isNotEmpty(list)) {
String date = vo.getDate();
BigDecimal drpD = new BigDecimal(0);
Date start = DateUtil.convertStringToDate(date + TIME_END_PREFIX);
String end = DateUtil.getPlusTime(date + TIME_END_PREFIX, 24);
List<StPptnRH> dayList = list.stream().filter(o -> o.getTm().compareTo(start) > 0 && o.getTm().compareTo(DateUtil.convertStringToDate(end)) <= 0).collect(Collectors.toList());
SimpleDateFormat simpleDateFormatHH = new SimpleDateFormat("HH");
for (int i = 0; i < dayList.size(); i++) {
StPptnRH stPptnRH = dayList.get(i);
if (stPptnRH.getDrp() != null) {
vo = setHourDrp(vo, simpleDateFormatHH.format(stPptnRH.getTm()), stPptnRH.getDrp());
drpD = drpD.add(stPptnRH.getDrp());
}
}
vo.setDrpD(drpD);
}
}
private SdJyRbVo setHourDrp(SdJyRbVo vo, String HH, BigDecimal drp) {
switch (HH) {
case "01":
vo.setDrpH1(drp);
break;
case "02":
vo.setDrpH2(drp);
break;
case "03":
vo.setDrpH3(drp);
break;
case "04":
vo.setDrpH4(drp);
break;
case "05":
vo.setDrpH5(drp);
break;
case "06":
vo.setDrpH6(drp);
break;
case "07":
vo.setDrpH7(drp);
break;
case "08":
vo.setDrpH8(drp);
break;
case "09":
vo.setDrpH9(drp);
break;
case "10":
vo.setDrpH10(drp);
break;
case "11":
vo.setDrpH11(drp);
break;
case "12":
vo.setDrpH12(drp);
break;
case "13":
vo.setDrpH13(drp);
break;
case "14":
vo.setDrpH14(drp);
break;
case "15":
vo.setDrpH15(drp);
break;
case "16":
vo.setDrpH16(drp);
break;
case "17":
vo.setDrpH17(drp);
break;
case "18":
vo.setDrpH18(drp);
break;
case "19":
vo.setDrpH19(drp);
break;
case "20":
vo.setDrpH20(drp);
break;
case "21":
vo.setDrpH21(drp);
break;
case "22":
vo.setDrpH22(drp);
break;
case "23":
vo.setDrpH23(drp);
break;
case "00":
vo.setDrpH24(drp);
break;
}
return vo;
}
public void sdJyRbExport(DateRangeSo dateRangeSo, HttpServletResponse response) {
List<SdJyRbVo> list = sdJyRb(dateRangeSo);
String start = DateUtil.convertDateToChineseYmd(dateRangeSo.getStart());
String end = DateUtil.convertDateToChineseYmd(dateRangeSo.getEnd());
String fileName = start + "-" + end + "小时降雨量日报表";
ExcelUtil.exportExcel(list, fileName, SdJyRbVo.class, response, fileName);
}
public List<SdSwRbVo> sdSwRb(DateRangeSo dateRangeSo) {
List<SdSwRbVo> res = new ArrayList<>();
String start = DateUtil.convertDateToString(dateRangeSo.getStart()) + ZERO_TIME_END_PREFIX;
String end = DateUtil.getPlusDate(dateRangeSo.getEnd(), 1) + ZERO_TIME_END_PREFIX;
List<String> dates = DateUtil.getDatesBetween(dateRangeSo.getStart(), dateRangeSo.getEnd(), false);
List<StRzVo> list = stPptnRHMapper.queryRzList(start,end);
for (String date : dates) {
SdSwRbVo vo = new SdSwRbVo();
vo.setDate(date);
getRz(vo, list);
res.add(vo);
}
return res;
}
private void getRz(SdSwRbVo vo, List<StRzVo> list) {
if (CollectionUtils.isNotEmpty(list)) {
String date = vo.getDate();
BigDecimal rzD = new BigDecimal(0);
Integer count = 0;
String start = date + ZERO_TIME_END_PREFIX;
String end = DateUtil.getPlusTime(date + ZERO_TIME_END_PREFIX, 24);
List<StRzVo> dayList = list.stream().filter(o -> o.getTm().compareTo(start) >= 0 && o.getTm().compareTo(end) < 0).collect(Collectors.toList());
SimpleDateFormat simpleDateFormatHH = new SimpleDateFormat("HH");
for (int i = 0; i < dayList.size(); i++) {
StRzVo stRzVo = dayList.get(i);
if (stRzVo.getRz() != null) {
vo = setHourRz(vo, simpleDateFormatHH.format(DateUtil.convertStringToDate(stRzVo.getTm())), stRzVo.getRz());
rzD = rzD.add(stRzVo.getRz());
count++;
}
}
vo.setRzAvg(rzD.divide(new BigDecimal(count),2, RoundingMode.HALF_UP));
}
}
private SdSwRbVo setHourRz(SdSwRbVo vo, String HH, BigDecimal rz) {
switch (HH) {
case "01":
vo.setRzH1(rz);
break;
case "02":
vo.setRzH2(rz);
break;
case "03":
vo.setRzH3(rz);
break;
case "04":
vo.setRzH4(rz);
break;
case "05":
vo.setRzH5(rz);
break;
case "06":
vo.setRzH6(rz);
break;
case "07":
vo.setRzH7(rz);
break;
case "08":
vo.setRzH8(rz);
break;
case "09":
vo.setRzH9(rz);
break;
case "10":
vo.setRzH10(rz);
break;
case "11":
vo.setRzH11(rz);
break;
case "12":
vo.setRzH12(rz);
break;
case "13":
vo.setRzH13(rz);
break;
case "14":
vo.setRzH14(rz);
break;
case "15":
vo.setRzH15(rz);
break;
case "16":
vo.setRzH16(rz);
break;
case "17":
vo.setRzH17(rz);
break;
case "18":
vo.setRzH18(rz);
break;
case "19":
vo.setRzH19(rz);
break;
case "20":
vo.setRzH20(rz);
break;
case "21":
vo.setRzH21(rz);
break;
case "22":
vo.setRzH22(rz);
break;
case "23":
vo.setRzH23(rz);
break;
case "00":
vo.setRzH24(rz);
break;
}
return vo;
}
public void sdSwRbExport(DateRangeSo dateRangeSo, HttpServletResponse response) {
List<SdSwRbVo> list = sdSwRb(dateRangeSo);
String start = DateUtil.convertDateToChineseYmd(dateRangeSo.getStart());
String end = DateUtil.convertDateToChineseYmd(dateRangeSo.getEnd());
String fileName = start + "-" + end + "时段水位日报表";
ExcelUtil.exportExcel(list, fileName, SdSwRbVo.class, response, fileName);
}
}