/**
* 获取当前月份往前推12个月的数组,月份正序排列
* eg: [2022-03, 2022-04, 2022-05, 2022-06, 2022-07, 2022-08, 2022-09, 2022-10, 2022-11, 2022-12, 2023-01, 2023-02]
*/
public static List<String> getYearMonthFromNow() {
ArrayList<String> monthList = new ArrayList<>();
LocalDate today = LocalDate.now();
for (long i = 11L; i >= 0L; i--) {
LocalDate localDate = today.minusMonths(i);
String ss = localDate.toString().substring(0, 7);
monthList.add(ss);
}
return monthList;
}
@Override
public StatisticsYearRevenue getLastYearRevenue() {
//倒序获取12个月的充值记录
List<MonthCardRecharge> cardRechargeList = monthCardRechargeService.getRechargeOrderByMonth();
//倒序获取12个月的停车缴费记录
List<ParkingPayment> parkingPaymentList = parkingPaymentService.getParkingPaymentOrderByMonth();
//获取当前月份向前推12个月的列表
List<String> monthList = getYearMonthFromNow();
ArrayList<BigDecimal> revenueList = new ArrayList<>();
//组装月卡充值记录
HashMap<String, BigDecimal> cardRechargeMap = new HashMap<>();
cardRechargeList.forEach(charge ->{
cardRechargeMap.put(charge.getMonth(),charge.getRevenue());
});
//组装缴费记录
HashMap<String, BigDecimal> parkingPaymentMap = new HashMap<>();
parkingPaymentList.forEach(payment ->{
parkingPaymentMap.put(payment.getMonth(),payment.getRevenue());
});
//组装每月收入
monthList.forEach(month ->{
BigDecimal d = new BigDecimal(0);
if (cardRechargeMap.get(month)!= null ){
d= d.add(cardRechargeMap.get(month)) ;
}
if (parkingPaymentMap.get(month)!= null){
d = d.add(parkingPaymentMap.get(month));
}
revenueList.add(d);
});
StatisticsYearRevenue vo = new StatisticsYearRevenue();
vo.setMonthList(monthList);
vo.setRevenueList(revenueList);
return vo;
}
SELECT
DATE_FORMAT( payment_time, '%Y-%m' ) AS month,
sum( actual_charge ) AS revenue
FROM
parking_payment
WHERE
payment_time != ''
GROUP BY
month
ORDER BY
month DESC
LIMIT 12;
SELECT
DATE_FORMAT( create_time, '%Y-%m' ) AS MONTH,
sum( payment_amount ) AS revenue
FROM
month_card_recharge
GROUP BY
MONTH
ORDER BY
MONTH DESC;