From 35f1f54b20eaed390efc703048eba43420ca9510 Mon Sep 17 00:00:00 2001 From: Tankaikai Date: Tue, 11 Mar 2025 17:46:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/DataSummaryController.java | 6 ++ .../czg/order/entity/ShopOrderStatistic.java | 4 +- .../java/com/czg/order/enums/PayEnums.java | 48 ++++++++++-- .../order/param/DataSummaryTradeParam.java | 4 + .../czg/order/vo/DataSummaryDateAmountVo.java | 7 +- .../service/impl/DataSummaryServiceImpl.java | 78 ++++++++++++++++++- .../mapper/ShopOrderStatisticMapper.xml | 3 +- 7 files changed, 137 insertions(+), 13 deletions(-) diff --git a/cash-api/order-server/src/main/java/com/czg/controller/admin/DataSummaryController.java b/cash-api/order-server/src/main/java/com/czg/controller/admin/DataSummaryController.java index 5704c29a2..b1fdc72b0 100644 --- a/cash-api/order-server/src/main/java/com/czg/controller/admin/DataSummaryController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/admin/DataSummaryController.java @@ -10,6 +10,9 @@ import com.czg.order.vo.DataSummaryPayTypeVo; import com.czg.order.vo.DataSummaryProductSaleVo; import com.czg.resp.CzgResult; import com.czg.sa.StpKit; +import com.czg.utils.AssertUtil; +import com.czg.validator.ValidatorUtil; +import com.czg.validator.group.DefaultGroup; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -36,6 +39,7 @@ public class DataSummaryController { @OperationLog("营业板块-上半部分") //@SaAdminCheckPermission("dataSummary:trade") public CzgResult getTradeData(DataSummaryTradeParam param) { + ValidatorUtil.validateEntity(param, DefaultGroup.class); Long shopId = StpKit.USER.getShopId(0L); param.setShopId(shopId); ShopOrderStatistic data = dataSummaryService.getTradeData(param); @@ -64,8 +68,10 @@ public class DataSummaryController { @OperationLog("销售趋势柱状图 左下") //@SaAdminCheckPermission("dataSummary:dateAmount") public CzgResult getDateAmount(@RequestParam Integer day) { + AssertUtil.isNull(day, "天数不能为空"); Long shopId = StpKit.USER.getShopId(0L); DataSummaryDateAmountVo data = dataSummaryService.getSummaryAmountData(shopId, day); + return CzgResult.success(data); } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopOrderStatistic.java b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopOrderStatistic.java index 80900f656..cd5bdc138 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopOrderStatistic.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopOrderStatistic.java @@ -141,11 +141,11 @@ public class ShopOrderStatistic implements Serializable { * 创建时间 */ @JSONField(format = "yyyy-MM-dd") - private LocalDate createDay = LocalDate.now(); + private LocalDate createDay; /** * 最近一次统计时间 */ @JSONField(format = "yyyy-MM-dd HH:mm:ss") - private LocalDateTime updateTime = LocalDateTime.now(); + private LocalDateTime updateTime; } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/enums/PayEnums.java b/cash-common/cash-common-service/src/main/java/com/czg/order/enums/PayEnums.java index 73a85068a..fe4350729 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/enums/PayEnums.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/enums/PayEnums.java @@ -1,29 +1,67 @@ package com.czg.order.enums; import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; +import java.util.List; /** * @author ww */ @Getter +@RequiredArgsConstructor public enum PayEnums { - + + /** + * 主扫 + */ MAIN_SCAN("main_scan", "主扫"), + /** + * 被扫 + */ BACK_SCAN("back_scan", "被扫"), + /** + * 微信小程序 + */ WECHAT_MINI("wechat_mini", "微信小程序"), + /** + * 支付宝小程序 + */ ALIPAY_MINI("alipay_mini", "支付宝小程序"), + /** + * 会员支付 + */ VIP_PAY("vip_pay", "会员支付"), + /** + * 现金支付 + */ CASH_PAY("cash_pay", "现金支付"), + /** + * 挂账支付 + */ CREDIT_PAY("credit_pay", "挂账支付"), - H5_PAY("h5_pay", "h5支付"); + /** + * h5支付 + */ + H5_PAY("h5_pay", "H5支付"); private final String value; private final String msg; - PayEnums(String value, String msg) { - this.value = value; - this.msg = msg; + + public static List getValues() { + return Arrays.stream(values()).map(PayEnums::getValue).toList(); } + + public static String getText(String value) { + PayEnums item = Arrays.stream(values()).filter(obj -> value.equals(obj.getValue())).findFirst().orElse(null); + if (item != null) { + return item.getMsg(); + } + return "未知支付方式"; + } + } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/param/DataSummaryTradeParam.java b/cash-common/cash-common-service/src/main/java/com/czg/order/param/DataSummaryTradeParam.java index 97eb9dea9..83c025dc3 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/param/DataSummaryTradeParam.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/param/DataSummaryTradeParam.java @@ -1,6 +1,8 @@ package com.czg.order.param; import com.alibaba.fastjson2.annotation.JSONField; +import com.czg.validator.group.DefaultGroup; +import jakarta.validation.constraints.NotBlank; import lombok.Data; import java.io.Serial; @@ -21,10 +23,12 @@ public class DataSummaryTradeParam implements Serializable { /** * 开始时间 格式:yyyy-MM-dd */ + @NotBlank(message = "开始日期不能为空", groups = DefaultGroup.class) private String beginTime; /** * 结束时间 格式:yyyy-MM-dd */ + @NotBlank(message = "结束日期不能为空", groups = DefaultGroup.class) private String endTime; /** * 店铺id diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/vo/DataSummaryDateAmountVo.java b/cash-common/cash-common-service/src/main/java/com/czg/order/vo/DataSummaryDateAmountVo.java index 35ed28af0..bf280ca47 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/vo/DataSummaryDateAmountVo.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/vo/DataSummaryDateAmountVo.java @@ -5,6 +5,7 @@ import lombok.NoArgsConstructor; import java.io.Serial; import java.io.Serializable; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -34,15 +35,15 @@ public class DataSummaryDateAmountVo implements Serializable { /** * 实收金额 */ - private Integer actualAmount; + private BigDecimal actualAmount = BigDecimal.ZERO; /** * 优惠金额 */ - private Integer discountAmount; + private BigDecimal discountAmount = BigDecimal.ZERO; /** * 订单金额 */ - private Integer orderAmount; + private BigDecimal orderAmount = BigDecimal.ZERO; /** * 日期 */ diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/DataSummaryServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/DataSummaryServiceImpl.java index 1af0be056..3aab06b38 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/DataSummaryServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/DataSummaryServiceImpl.java @@ -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 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 total = new ArrayList<>(); + List days = new ArrayList<>(); + for (int i = 1; i <= day; i++) { + String thisDay = beginDate.plusDays(i).format(DatePattern.NORM_DATE_FORMATTER); + days.add(thisDay); + } + List 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; } } diff --git a/cash-service/order-service/src/main/resources/mapper/ShopOrderStatisticMapper.xml b/cash-service/order-service/src/main/resources/mapper/ShopOrderStatisticMapper.xml index 1834ac6a3..cdbef80ca 100644 --- a/cash-service/order-service/src/main/resources/mapper/ShopOrderStatisticMapper.xml +++ b/cash-service/order-service/src/main/resources/mapper/ShopOrderStatisticMapper.xml @@ -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}