mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 11:05:18 +08:00
update 获取站点运营分析信息接口(12个月)
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user