This commit is contained in:
Guoqs
2024-08-02 15:45:20 +08:00
3 changed files with 98 additions and 14 deletions

View File

@@ -1073,6 +1073,44 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
return new LocalDateTime[]{startDateTime, endDateTime};
}
/**
* 获取去年这个月第一天的日期
* @return 去年这个月第一天的日期,格式为 "yyyy-MM-dd"
*/
public static String getFirstDayOfLastYearMonth() {
// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 获取去年这个月的年份
int lastYear = currentDate.getYear() - 1;
// 获取这个月的月份
int currentMonth = currentDate.getMonthValue();
// 获取去年这个月第一天的日期
LocalDate firstDayOfLastYearMonth = LocalDate.of(lastYear, currentMonth, 1);
// 格式化日期为 "yyyy-MM-dd"
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
return firstDayOfLastYearMonth.format(formatter);
}
/**
* 获取当前年月最后一天的日期
* @return 当前年月最后一天的日期,格式为 "yyyy-MM-dd"
*/
public static String getLastDayOfCurrentMonth() {
// 获取当前的年份和月份
YearMonth currentYearMonth = YearMonth.now();
// 获取该年月的最后一天
LocalDate lastDayOfMonth = currentYearMonth.atEndOfMonth();
// 格式化日期为 "yyyy-MM-dd"
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
return lastDayOfMonth.format(formatter);
}
public static void main(String[] args) {
String startTime = "22:00:00";
String endTime1 = "05:30:00";

View File

@@ -47,6 +47,8 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
@@ -956,16 +958,22 @@ public class PileStationInfoServiceImpl implements PileStationInfoService {
*/
@Override
public StationBusinessAnalyzeInfoVO getStationMonthlyBusinessAnalyzeInfo(StationBusinessAnalyzeInfoDTO dto) {
// 获取目标日期(年-月)
String dateTime = dto.getDateTime();
// 设置开始时间、结束时间
String stationId = dto.getStationId();
Calendar instance = Calendar.getInstance();
instance.add(Calendar.YEAR, -1);
String startTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, instance.getTime());
String endTime = DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD);
String startTime = DateUtils.getLastDayOfCurrentMonth(); // 去年月份第一天
String endTime = DateUtils.getFirstDayOfLastYearMonth(); // 当前月份最后一天
// 查询订单日报表过去一年的数据
List<SettleOrderReport> list = settleOrderReportService.queryOrderReport(Lists.newArrayList(stationId), startTime, endTime);
// 按照日期汇总数据
Map<String, SettleOrderReport> collect = list.stream()
.peek(report -> {
LocalDate date = LocalDate.parse(report.getTradeDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd"));
String formattedDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM"));
report.setTradeDate(formattedDate);
})
.sorted(Comparator.comparing(SettleOrderReport::getTradeDate))
.collect(Collectors.toMap(SettleOrderReport::getTradeDate, Function.identity(),
(a, b) -> {
@@ -979,17 +987,52 @@ public class PileStationInfoServiceImpl implements PileStationInfoService {
TreeMap<String, SettleOrderReport> map = new TreeMap<>(collect);
List<SettleOrderReport> settleOrderReports = new ArrayList<>(map.values());
// StationBusinessAnalyzeInfoVO vo = StationBusinessAnalyzeInfoVO.builder()
// .electricityGrowthRate()
// .orderAmountGrowthRate()
// .serviceAmountGrowthRate()
//
// .businessOrderDetailInfoVOList()
// .build();
SettleOrderReport nowReportInfo = new SettleOrderReport();
SettleOrderReport lastMonthReportInfo = new SettleOrderReport();
if(dateTime == null) {
// 为空默认对比最后一个月和前一个月的数据
nowReportInfo = settleOrderReports.get(settleOrderReports.size() - 1);
lastMonthReportInfo = settleOrderReports.get(settleOrderReports.size() - 2);
}else {
// 对比目标日期和目标日期前一个月数据
nowReportInfo = map.get(dateTime);
Date lastMonth = DateUtils.addMonths(DateUtils.parseDate(dateTime), -1);
String lastMonthStr = DateUtils.parseDateToStr(DateUtils.YYYY_MM, lastMonth);
lastMonthReportInfo = map.get(lastMonthStr);
}
String electricityGrowthRate = "-";
String orderAmountGrowthRate = "";
String serviceAmountGrowthRate = "";
// 充电量增长率
BigDecimal useElectricity = nowReportInfo.getUseElectricity();
BigDecimal lastMonthUseElectricity = lastMonthReportInfo.getUseElectricity();
if (lastMonthUseElectricity.compareTo(BigDecimal.ZERO) != 0) {
BigDecimal usedElectricityRate = useElectricity.subtract(lastMonthUseElectricity).divide(lastMonthUseElectricity, 2, BigDecimal.ROUND_HALF_UP);
electricityGrowthRate = usedElectricityRate.multiply(new BigDecimal("100")) + "%";
}
// 订单金额增长率
BigDecimal totalAmount = nowReportInfo.getTotalAmount();
BigDecimal lastTotalAmount = lastMonthReportInfo.getTotalAmount();
if (lastTotalAmount.compareTo(BigDecimal.ZERO) != 0) {
BigDecimal totalAmountRate = totalAmount.subtract(lastTotalAmount).divide(lastTotalAmount, 2, BigDecimal.ROUND_HALF_UP);
orderAmountGrowthRate = totalAmountRate.multiply(new BigDecimal("100")) + "%";
}
// 服务费增长率
BigDecimal serviceAmount = nowReportInfo.getServiceAmount();
BigDecimal lastMonthServiceAmount = lastMonthReportInfo.getServiceAmount();
if (lastMonthServiceAmount.compareTo(BigDecimal.ZERO) != 0) {
BigDecimal serviceAmountRate = serviceAmount.subtract(lastMonthServiceAmount).divide(lastMonthServiceAmount, 2, BigDecimal.ROUND_HALF_UP);
serviceAmountGrowthRate = serviceAmountRate.multiply(new BigDecimal("100")) + "%";
}
StationBusinessAnalyzeInfoVO vo = StationBusinessAnalyzeInfoVO.builder()
.electricityGrowthRate(electricityGrowthRate)
.orderAmountGrowthRate(orderAmountGrowthRate)
.serviceAmountGrowthRate(serviceAmountGrowthRate)
.settleOrderReportList(settleOrderReports)
.build();
return null;
return vo;
}
}

View File

@@ -1,5 +1,6 @@
package com.jsowell.pile.vo;
import com.jsowell.pile.domain.SettleOrderReport;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -35,4 +36,6 @@ public class StationBusinessAnalyzeInfoVO {
private String serviceAmountGrowthRate;
private List<BusinessOrderDetailInfoVO> businessOrderDetailInfoVOList;
private List<SettleOrderReport> settleOrderReportList;
}