数据统计

This commit is contained in:
Tankaikai
2025-03-11 17:46:49 +08:00
parent 52cb628bf2
commit 35f1f54b20
7 changed files with 137 additions and 13 deletions

View File

@@ -1,16 +1,26 @@
package com.czg.service.order.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import com.czg.order.entity.OrderInfo;
import com.czg.order.entity.ShopOrderStatistic;
import com.czg.order.enums.PayEnums;
import com.czg.order.param.DataSummaryProductSaleParam;
import com.czg.order.param.DataSummaryTradeParam;
import com.czg.order.service.DataSummaryService;
import com.czg.order.vo.DataSummaryDateAmountVo;
import com.czg.order.vo.DataSummaryPayTypeVo;
import com.czg.order.vo.DataSummaryProductSaleVo;
import com.czg.service.order.mapper.OrderInfoMapper;
import com.czg.service.order.mapper.ShopOrderStatisticMapper;
import com.mybatisflex.core.query.QueryWrapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
/**
* 数据统计Service实现类
*
@@ -22,6 +32,8 @@ public class DataSummaryServiceImpl implements DataSummaryService {
@Resource
private ShopOrderStatisticMapper shopOrderStatisticMapper;
@Resource
private OrderInfoMapper orderInfoMapper;
@Override
public ShopOrderStatistic getTradeData(DataSummaryTradeParam param) {
@@ -41,11 +53,73 @@ public class DataSummaryServiceImpl implements DataSummaryService {
@Override
public DataSummaryDateAmountVo getSummaryAmountData(Long shopId, Integer day) {
return new DataSummaryDateAmountVo();
LocalDate now = LocalDate.now();
LocalDate beginDate = now.plusDays(-day);
DataSummaryDateAmountVo data = new DataSummaryDateAmountVo();
List<DataSummaryDateAmountVo.TotalVo> total = new ArrayList<>();
for (int i = 1; i <= day; i++) {
String thisDay = beginDate.plusDays(i).format(DatePattern.NORM_DATE_FORMATTER);
OrderInfo orderInfo = orderInfoMapper.selectOneByQuery(QueryWrapper.create()
.select("ifnull(sum(order_amount),0) as order_amount,ifnull(sum(pay_amount),0) as pay_amount,ifnull(sum(order_amount-pay_amount),0) as discount_amount")
.eq(OrderInfo::getShopId, shopId)
.eq(OrderInfo::getTradeDay, thisDay)
.isNotNull(OrderInfo::getPaidTime)
);
DataSummaryDateAmountVo.TotalVo totalVo = new DataSummaryDateAmountVo.TotalVo();
if (orderInfo != null) {
totalVo.setOrderAmount(orderInfo.getOrderAmount());
totalVo.setActualAmount(orderInfo.getPayAmount());
totalVo.setDiscountAmount(orderInfo.getDiscountAmount());
}
totalVo.setTradeDay(thisDay);
total.add(totalVo);
}
data.setTotal(total);
return data;
}
@Override
public DataSummaryPayTypeVo getSummaryPayTypeData(Long shopId, Integer day) {
return new DataSummaryPayTypeVo();
LocalDate now = LocalDate.now();
LocalDate beginDate = now.plusDays(-day);
DataSummaryPayTypeVo data = new DataSummaryPayTypeVo();
List<DataSummaryPayTypeVo.CountPayTypeVo> total = new ArrayList<>();
List<String> days = new ArrayList<>();
for (int i = 1; i <= day; i++) {
String thisDay = beginDate.plusDays(i).format(DatePattern.NORM_DATE_FORMATTER);
days.add(thisDay);
}
List<OrderInfo> orderList = orderInfoMapper.selectListByQuery(QueryWrapper.create()
.select("pay_type,count(1) as place_num")
.eq(OrderInfo::getShopId, shopId)
.in(OrderInfo::getTradeDay, days)
.isNotNull(OrderInfo::getPaidTime)
.groupBy(OrderInfo::getPayType)
);
PayEnums[] pays = PayEnums.values();
if (CollUtil.isEmpty(orderList)) {
for (PayEnums pay : pays) {
DataSummaryPayTypeVo.CountPayTypeVo payTypeVo = new DataSummaryPayTypeVo.CountPayTypeVo();
payTypeVo.setPayType(pay.getMsg());
payTypeVo.setCount(0);
total.add(payTypeVo);
}
data.setCountPayType(total);
return data;
}
for (PayEnums pay : pays) {
OrderInfo orderInfo = orderList.stream().filter(order -> pay.getValue().equals(order.getPayType())).findFirst().orElse(null);
DataSummaryPayTypeVo.CountPayTypeVo payTypeVo = new DataSummaryPayTypeVo.CountPayTypeVo();
payTypeVo.setPayType(pay.getMsg());
payTypeVo.setCount(0);
if (orderInfo != null) {
payTypeVo.setPayType(PayEnums.getText(orderInfo.getPayType()));
payTypeVo.setCount(orderInfo.getPlaceNum());
}
total.add(payTypeVo);
}
data.setCountPayType(total);
return data;
}
}

View File

@@ -26,7 +26,8 @@
sum(cash_pay_amount) as cash_pay_amount,
sum(recharge_amount) as recharge_amount,
avg(customer_unit_price) as customer_unit_price,
avg(table_turnover_rate) as table_turnover_rate
avg(table_turnover_rate) as table_turnover_rate,
max(update_time) as update_time
from tb_shop_order_statistic
where shop_id = #{shopId}
<if test="beginTime != null">