From d148aafb480482407ce4261a7570cec8da7563fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Fri, 7 Mar 2025 17:00:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E4=B8=BB=E9=A1=B5?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/TableOrderStatisticController.java | 35 ----- .../com/czg/controller/NotifyController.java | 9 ++ .../main/java/com/czg/task/StatisticTask.java | 24 ++++ .../java/com/czg/config/SaTokenConfigure.java | 2 +- .../entity/ShopTableOrderStatistic.java | 8 ++ .../czg/order/dto/ShopOrderStatisticDTO.java | 120 +++++++++++++++++ .../czg/order/dto/ShopProdStatisticDTO.java | 65 +++++++++ .../order/dto/ShopTableOrderStatisticDTO.java | 52 ++++++++ .../czg/order/entity/ShopOrderStatistic.java | 126 ++++++++++++++++++ .../czg/order/entity/ShopProdStatistic.java | 71 ++++++++++ .../order/entity/ShopTableOrderStatistic.java | 66 +++++++++ .../service/ShopOrderStatisticService.java | 16 +++ .../service/ShopProdStatisticService.java | 16 +++ .../ShopTableOrderStatisticService.java | 9 +- .../ShopTableOrderStatisticServiceImpl.java | 57 -------- .../mapper/ShopOrderStatisticMapper.java | 14 ++ .../order/mapper/ShopProdStatisticMapper.java | 14 ++ .../mapper/ShopTableOrderStatisticMapper.java | 21 +++ .../impl/ShopOrderStatisticServiceImpl.java | 28 ++++ .../impl/ShopProdStatisticServiceImpl.java | 91 +++++++++++++ .../ShopTableOrderStatisticServiceImpl.java | 116 ++++++++++++++++ .../mapper/ShopOrderStatisticMapper.xml | 7 + .../mapper/ShopProdStatisticMapper.xml | 7 + .../mapper/ShopTableOrderStatisticMapper.xml | 4 +- 24 files changed, 879 insertions(+), 99 deletions(-) delete mode 100644 cash-api/account-server/src/main/java/com/czg/controller/admin/TableOrderStatisticController.java create mode 100644 cash-api/order-server/src/main/java/com/czg/task/StatisticTask.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/order/dto/ShopOrderStatisticDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/order/dto/ShopProdStatisticDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/order/dto/ShopTableOrderStatisticDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopOrderStatistic.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopProdStatistic.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopTableOrderStatistic.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/order/service/ShopOrderStatisticService.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/order/service/ShopProdStatisticService.java rename cash-common/cash-common-service/src/main/java/com/czg/{account => order}/service/ShopTableOrderStatisticService.java (83%) delete mode 100644 cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopTableOrderStatisticServiceImpl.java create mode 100644 cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopOrderStatisticMapper.java create mode 100644 cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopProdStatisticMapper.java create mode 100644 cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopTableOrderStatisticMapper.java create mode 100644 cash-service/order-service/src/main/java/com/czg/service/order/service/impl/ShopOrderStatisticServiceImpl.java create mode 100644 cash-service/order-service/src/main/java/com/czg/service/order/service/impl/ShopProdStatisticServiceImpl.java create mode 100644 cash-service/order-service/src/main/java/com/czg/service/order/service/impl/ShopTableOrderStatisticServiceImpl.java create mode 100644 cash-service/order-service/src/main/resources/mapper/ShopOrderStatisticMapper.xml create mode 100644 cash-service/order-service/src/main/resources/mapper/ShopProdStatisticMapper.xml rename cash-service/{account-service => order-service}/src/main/resources/mapper/ShopTableOrderStatisticMapper.xml (85%) diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/TableOrderStatisticController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/TableOrderStatisticController.java deleted file mode 100644 index b3c88fa8..00000000 --- a/cash-api/account-server/src/main/java/com/czg/controller/admin/TableOrderStatisticController.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.czg.controller.admin; - -import com.czg.account.entity.ShopTableOrderStatistic; -import com.czg.account.service.ShopTableOrderStatisticService; -import com.czg.annotation.SaAdminCheckPermission; -import com.czg.resp.CzgResult; -import com.czg.sa.StpKit; -import com.mybatisflex.core.paginate.Page; -import jakarta.annotation.Resource; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 桌台订单统计 - * @author Administrator - */ -@RestController -@RequestMapping("/admin/tableOrderStatistic") -public class TableOrderStatisticController { - @Resource - private ShopTableOrderStatisticService orderStatisticService; - - /** - * 桌台统计列表 - * @param startTime 开始时间 - * @param endTime 结束时间 - * @return 统计信息 - */ - @SaAdminCheckPermission(value = "tableOrderStatistic:list", name = "台桌订单统计列表") - @GetMapping - public CzgResult> list(String startTime, String endTime) { - return CzgResult.success(orderStatisticService.summary(StpKit.USER.getShopId(), startTime, endTime)); - } -} diff --git a/cash-api/order-server/src/main/java/com/czg/controller/NotifyController.java b/cash-api/order-server/src/main/java/com/czg/controller/NotifyController.java index 56661bb1..5d1d1a58 100644 --- a/cash-api/order-server/src/main/java/com/czg/controller/NotifyController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/NotifyController.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSONObject; import com.czg.CzgPayUtils; import com.czg.entity.CzgBaseRespParams; import com.czg.order.service.OrderInfoService; +import com.czg.task.StatisticTask; import com.czg.utils.AssertUtil; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -24,6 +25,9 @@ public class NotifyController { @Resource private OrderInfoService orderInfoService; + @Resource + private StatisticTask statisticTask; + @RequestMapping("/payCallBack") public String notifyCallBack(@RequestBody CzgBaseRespParams respParams){ @@ -42,4 +46,9 @@ public class NotifyController { orderInfoService.refundCallBackOrder(czg.getString("mchOrderNo"), czg); return SUCCESS; } + + @RequestMapping("/test") + public void test() { + statisticTask.run(); + } } diff --git a/cash-api/order-server/src/main/java/com/czg/task/StatisticTask.java b/cash-api/order-server/src/main/java/com/czg/task/StatisticTask.java new file mode 100644 index 00000000..3ad50046 --- /dev/null +++ b/cash-api/order-server/src/main/java/com/czg/task/StatisticTask.java @@ -0,0 +1,24 @@ +package com.czg.task; + +import com.czg.order.service.ShopOrderStatisticService; +import com.czg.order.service.ShopProdStatisticService; +import com.czg.order.service.ShopTableOrderStatisticService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Component; + +/** + * @author Administrator + */ +@Component +public class StatisticTask { + @Resource + private ShopTableOrderStatisticService shopTableOrderStatisticService; + @Resource + private ShopProdStatisticService shopProdStatisticService; + @Resource + private ShopOrderStatisticService shopOrderStatisticService; + + public void run() { + shopOrderStatisticService.statistic(); + } +} diff --git a/cash-common/cash-common-sa-token/src/main/java/com/czg/config/SaTokenConfigure.java b/cash-common/cash-common-sa-token/src/main/java/com/czg/config/SaTokenConfigure.java index e9433df2..adb382dd 100644 --- a/cash-common/cash-common-sa-token/src/main/java/com/czg/config/SaTokenConfigure.java +++ b/cash-common/cash-common-sa-token/src/main/java/com/czg/config/SaTokenConfigure.java @@ -63,7 +63,7 @@ public class SaTokenConfigure implements WebMvcConfigurer { // 重置根路径,防止satoken切割根路径导致匹配不到路径 ApplicationInfo.routePrefix = ""; - SaRouter.match("/user/**").notMatch("/user/login", "/user/test", "/user/geo/**", "/user/home/**", "/user/home/**", "/user/dict/**") + SaRouter.match("/user/**").notMatch("/user/login", "/user/test", "/user/geo/**", "/user/home/**", "/user/home/**", "/user/dict/**", "/user/openId") .notMatch("/pay/**") .notMatch("/notify/**") .check(r -> MyStpLogic.CLIENT_LOGIC.checkLogin()) diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopTableOrderStatistic.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopTableOrderStatistic.java index 613943c1..30b2cfcc 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopTableOrderStatistic.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopTableOrderStatistic.java @@ -49,6 +49,14 @@ public class ShopTableOrderStatistic implements Serializable { * 订单金额 */ private BigDecimal orderAmount; + /** + * 退款金额 + */ + private BigDecimal refundAmount; + /** + * 退款金额 + */ + private Long refundCount; /** * 店铺id diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/dto/ShopOrderStatisticDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/order/dto/ShopOrderStatisticDTO.java new file mode 100644 index 00000000..b1e56e56 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/dto/ShopOrderStatisticDTO.java @@ -0,0 +1,120 @@ + +package com.czg.order.dto; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Date; +import java.io.Serial; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 实体类。 + * + * @author zs + * @since 2025-03-07 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ShopOrderStatisticDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Integer id; + + /** + * 销售额 + */ + private BigDecimal saleAmount; + + /** + * 销售数量 + */ + private Long saleCount; + + /** + * 优惠金额 + */ + private BigDecimal discountAmount; + + /** + * 优惠笔数 + */ + private Long discountCount; + + /** + * 退款金额 + */ + private BigDecimal refundAmount; + + /** + * 退款笔数 + */ + private Long refundCount; + + /** + * 微信支付笔数 + */ + private Long wechatPayCount; + + /** + * 位置支付金额 + */ + private BigDecimal wechatPayAmount; + + /** + * 支付宝支付笔数 + */ + private Long aliPayCount; + + /** + * 支付宝支付金额 + */ + private BigDecimal aliPayAmount; + + /** + * 挂账支付笔数 + */ + private Long creditPayCount; + + /** + * 挂账支付金额 + */ + private BigDecimal creditPayAmount; + + /** + * 会员支付笔数 + */ + private Long memberPayCount; + + /** + * 会员支付金额 + */ + private BigDecimal memberPayAmount; + + /** + * 主扫支付笔数 + */ + private Long scanPayCount; + + /** + * 主扫支付金额 + */ + private BigDecimal scanPayAmount; + + /** + * 店铺id + */ + private Long shopId; + + /** + * 创建时间 + */ + private Date createDay; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/dto/ShopProdStatisticDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/order/dto/ShopProdStatisticDTO.java new file mode 100644 index 00000000..0d7ba3a1 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/dto/ShopProdStatisticDTO.java @@ -0,0 +1,65 @@ + +package com.czg.order.dto; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Date; +import java.io.Serial; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 实体类。 + * + * @author zs + * @since 2025-03-07 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ShopProdStatisticDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long id; + + /** + * 商品id + */ + private Long prodId; + + /** + * 销售数量 + */ + private Long saleNum; + + /** + * 销售金额 + */ + private BigDecimal saleAmount; + + /** + * 退单量 + */ + private Long refundNum; + + /** + * 退单金额 + */ + private BigDecimal refundAmount; + + /** + * 店铺id + */ + private Long shopId; + + /** + * 创建时间 + */ + private Date createDay; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/dto/ShopTableOrderStatisticDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/order/dto/ShopTableOrderStatisticDTO.java new file mode 100644 index 00000000..87d90321 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/dto/ShopTableOrderStatisticDTO.java @@ -0,0 +1,52 @@ + +package com.czg.order.dto; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Date; +import java.io.Serial; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 台桌订单统计表 实体类。 + * + * @author zs + * @since 2025-03-07 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ShopTableOrderStatisticDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private Long id; + + private Long tableId; + + /** + * 订单数量 + */ + private Long orderCount; + + /** + * 订单金额 + */ + private BigDecimal orderAmount; + + /** + * 店铺id + */ + private Long shopId; + + /** + * 创建日期 年月日 + */ + private Date createDay; + +} 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 new file mode 100644 index 00000000..d512deac --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopOrderStatistic.java @@ -0,0 +1,126 @@ +package com.czg.order.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Date; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 实体类。 + * + * @author zs + * @since 2025-03-07 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("tb_shop_order_statistic") +public class ShopOrderStatistic implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Id(keyType = KeyType.Auto) + private Integer id; + + /** + * 销售额 + */ + private BigDecimal saleAmount; + + /** + * 销售数量 + */ + private Long saleCount; + + /** + * 优惠金额 + */ + private BigDecimal discountAmount; + + /** + * 优惠笔数 + */ + private Long discountCount; + + /** + * 退款金额 + */ + private BigDecimal refundAmount; + + /** + * 退款笔数 + */ + private Long refundCount; + + /** + * 微信支付笔数 + */ + private Long wechatPayCount; + + /** + * 位置支付金额 + */ + private BigDecimal wechatPayAmount; + + /** + * 支付宝支付笔数 + */ + private Long aliPayCount; + + /** + * 支付宝支付金额 + */ + private BigDecimal aliPayAmount; + + /** + * 挂账支付笔数 + */ + private Long creditPayCount; + + /** + * 挂账支付金额 + */ + private BigDecimal creditPayAmount; + + /** + * 会员支付笔数 + */ + private Long memberPayCount; + + /** + * 会员支付金额 + */ + private BigDecimal memberPayAmount; + + /** + * 主扫支付笔数 + */ + private Long scanPayCount; + + /** + * 主扫支付金额 + */ + private BigDecimal scanPayAmount; + + /** + * 店铺id + */ + private Long shopId; + + /** + * 创建时间 + */ + private Date createDay; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopProdStatistic.java b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopProdStatistic.java new file mode 100644 index 00000000..0aa641de --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopProdStatistic.java @@ -0,0 +1,71 @@ +package com.czg.order.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Date; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 实体类。 + * + * @author zs + * @since 2025-03-07 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("tb_shop_prod_statistic") +public class ShopProdStatistic implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Id(keyType = KeyType.Auto) + private Long id; + + /** + * 商品id + */ + private Long prodId; + + /** + * 销售数量 + */ + private BigDecimal saleCount; + + /** + * 销售金额 + */ + private BigDecimal saleAmount; + + /** + * 退单量 + */ + private BigDecimal refundCount; + + /** + * 退单金额 + */ + private BigDecimal refundAmount; + + /** + * 店铺id + */ + private Long shopId; + + /** + * 创建时间 + */ + private Date createDay; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopTableOrderStatistic.java b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopTableOrderStatistic.java new file mode 100644 index 00000000..c398fb21 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/ShopTableOrderStatistic.java @@ -0,0 +1,66 @@ +package com.czg.order.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import java.io.Serializable; +import java.math.BigDecimal; +import java.sql.Date; + +import java.io.Serial; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 台桌订单统计表 实体类。 + * + * @author zs + * @since 2025-03-07 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("tb_shop_table_order_statistic") +public class ShopTableOrderStatistic implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Id(keyType = KeyType.Auto) + private Long id; + + private Long tableId; + + /** + * 订单数量 + */ + private Long orderCount; + + /** + * 订单金额 + */ + private BigDecimal orderAmount; + + /** + * 店铺id + */ + private Long shopId; + + /** + * 创建日期 年月日 + */ + private Date createDay; + /** + * 退款数量 + */ + private long refundCount; + /** + * 退款金额 + */ + private BigDecimal refundAmount; +} + diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/service/ShopOrderStatisticService.java b/cash-common/cash-common-service/src/main/java/com/czg/order/service/ShopOrderStatisticService.java new file mode 100644 index 00000000..3cd54daa --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/service/ShopOrderStatisticService.java @@ -0,0 +1,16 @@ +package com.czg.order.service; + +import com.mybatisflex.core.service.IService; +import com.czg.order.entity.ShopOrderStatistic; + +/** + * 服务层。 + * + * @author zs + * @since 2025-03-07 + */ +public interface ShopOrderStatisticService extends IService { + + void statistic(); + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/service/ShopProdStatisticService.java b/cash-common/cash-common-service/src/main/java/com/czg/order/service/ShopProdStatisticService.java new file mode 100644 index 00000000..b7c27ee5 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/service/ShopProdStatisticService.java @@ -0,0 +1,16 @@ +package com.czg.order.service; + +import com.mybatisflex.core.service.IService; +import com.czg.order.entity.ShopProdStatistic; + +/** + * 服务层。 + * + * @author zs + * @since 2025-03-07 + */ +public interface ShopProdStatisticService extends IService { + + void statistic(); + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopTableOrderStatisticService.java b/cash-common/cash-common-service/src/main/java/com/czg/order/service/ShopTableOrderStatisticService.java similarity index 83% rename from cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopTableOrderStatisticService.java rename to cash-common/cash-common-service/src/main/java/com/czg/order/service/ShopTableOrderStatisticService.java index 510d9405..35082698 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopTableOrderStatisticService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/service/ShopTableOrderStatisticService.java @@ -1,8 +1,8 @@ -package com.czg.account.service; +package com.czg.order.service; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.service.IService; -import com.czg.account.entity.ShopTableOrderStatistic; +import com.czg.order.entity.ShopTableOrderStatistic; import java.math.BigDecimal; @@ -10,10 +10,9 @@ import java.math.BigDecimal; * 台桌订单统计表 服务层。 * * @author zs - * @since 2025-03-03 + * @since 2025-03-07 */ public interface ShopTableOrderStatisticService extends IService { - Page summary(Long shopId, String startTime, String endTime); /** @@ -25,4 +24,6 @@ public interface ShopTableOrderStatisticService extends IService implements ShopTableOrderStatisticService{ - @Resource - private FunUtil funUtil; - - @Override - public Page summary(Long shopId, String startTime, String endTime) { - Page page = PageUtil.buildPage(); - PageHelper.startPage(Math.toIntExact(page.getPageNumber()),Math.toIntExact(page.getPageSize())); - return PageUtil.convert(new PageInfo<>(mapper.selectSummary(shopId, startTime, endTime))); - } - - @Override - public boolean addInfo(long shopId, long tableId, long count, BigDecimal amount) { - return funUtil.runFunAndCheckKey(() -> { - ShopTableOrderStatistic statistic = getOne(new QueryWrapper().eq(ShopTableOrderStatistic::getShopId, shopId).eq(ShopTableOrderStatistic::getTableId, tableId) - .eq(ShopTableOrderStatistic::getCreateDay, DateUtil.date().toDateStr())); - if (statistic == null) { - statistic = new ShopTableOrderStatistic(); - statistic.setShopId(shopId); - statistic.setTableId(tableId); - statistic.setCreateDay(DateUtil.date().toSqlDate()); - statistic.setOrderCount(count); - statistic.setOrderAmount(amount); - save(statistic); - } - return mapper.incrInfo(shopId, tableId, count, amount, DateUtil.date().toDateStr()); - }, RedisCst.getLockKey("add_table_order_statistic", shopId, tableId)); - } -} diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopOrderStatisticMapper.java b/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopOrderStatisticMapper.java new file mode 100644 index 00000000..9ea52681 --- /dev/null +++ b/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopOrderStatisticMapper.java @@ -0,0 +1,14 @@ +package com.czg.service.order.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.czg.order.entity.ShopOrderStatistic; + +/** + * 映射层。 + * + * @author zs + * @since 2025-03-07 + */ +public interface ShopOrderStatisticMapper extends BaseMapper { + +} diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopProdStatisticMapper.java b/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopProdStatisticMapper.java new file mode 100644 index 00000000..a5176080 --- /dev/null +++ b/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopProdStatisticMapper.java @@ -0,0 +1,14 @@ +package com.czg.service.order.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.czg.order.entity.ShopProdStatistic; + +/** + * 映射层。 + * + * @author zs + * @since 2025-03-07 + */ +public interface ShopProdStatisticMapper extends BaseMapper { + +} diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopTableOrderStatisticMapper.java b/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopTableOrderStatisticMapper.java new file mode 100644 index 00000000..946d18c2 --- /dev/null +++ b/cash-service/order-service/src/main/java/com/czg/service/order/mapper/ShopTableOrderStatisticMapper.java @@ -0,0 +1,21 @@ +package com.czg.service.order.mapper; + +import com.mybatisflex.core.BaseMapper; +import com.czg.order.entity.ShopTableOrderStatistic; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 台桌订单统计表 映射层。 + * + * @author zs + * @since 2025-03-07 + */ +public interface ShopTableOrderStatisticMapper extends BaseMapper { + + List selectSummary(Long shopId, String startTime, String endTime); + + boolean incrInfo(long shopId, long tableId, long count, BigDecimal amount, String dateStr); + +} diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/ShopOrderStatisticServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/ShopOrderStatisticServiceImpl.java new file mode 100644 index 00000000..4ffa1e47 --- /dev/null +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/ShopOrderStatisticServiceImpl.java @@ -0,0 +1,28 @@ +package com.czg.service.order.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.czg.order.entity.OrderInfo; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.czg.order.entity.ShopOrderStatistic; +import com.czg.order.service.ShopOrderStatisticService; +import com.czg.service.order.mapper.ShopOrderStatisticMapper; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; + +/** + * 服务层实现。 + * + * @author zs + * @since 2025-03-07 + */ +@Service +public class ShopOrderStatisticServiceImpl extends ServiceImpl implements ShopOrderStatisticService{ + @Override + public void statistic() { + + } +} diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/ShopProdStatisticServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/ShopProdStatisticServiceImpl.java new file mode 100644 index 00000000..a33a831a --- /dev/null +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/ShopProdStatisticServiceImpl.java @@ -0,0 +1,91 @@ +package com.czg.service.order.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.czg.order.entity.OrderDetail; +import com.czg.order.service.OrderDetailService; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.czg.order.entity.ShopProdStatistic; +import com.czg.order.service.ShopProdStatisticService; +import com.czg.service.order.mapper.ShopProdStatisticMapper; +import jakarta.annotation.Resource; +import lombok.Data; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 服务层实现。 + * + * @author zs + * @since 2025-03-07 + */ +@Service +public class ShopProdStatisticServiceImpl extends ServiceImpl implements ShopProdStatisticService{ + @Resource + private OrderDetailService orderDetailService; + @Data + private static class StatisticTask{ + private BigDecimal successCount = BigDecimal.ZERO; + private BigDecimal successAmount = BigDecimal.ZERO; + private BigDecimal refundCount = BigDecimal.ZERO; + private BigDecimal refundAmount = BigDecimal.ZERO; + } + + @Override + public void statistic() { + // 获取前一天 + DateTime yesterday = DateUtil.yesterday(); + // 获取前一天的开始时间(00:00:00) + DateTime startOfDay = DateUtil.beginOfDay(yesterday); + // 获取前一天的结束时间(23:59:59) + DateTime endOfDay = DateUtil.endOfDay(yesterday); + + List orderDetails = orderDetailService.list(new QueryWrapper() + .ge(OrderDetail::getCreateTime, startOfDay) + .le(OrderDetail::getCreateTime, endOfDay) + .ne(OrderDetail::getStatus, "wait-pay")); + + + HashMap> countInfo = new HashMap<>(); + for (OrderDetail item : orderDetails) { + Map map = countInfo.computeIfAbsent(item.getShopId(), k -> new HashMap<>()); + StatisticTask statisticTask = map.get(item.getProductId()); + if (statisticTask == null) { + map.put(item.getProductId(), statisticTask = new StatisticTask()); + } + if ("refunding".equals(item.getStatus()) || "refund".equals(item.getStatus()) || "part-refund".equals(item.getStatus())) { + statisticTask.setRefundAmount(statisticTask.getRefundAmount().add(item.getReturnAmount())); + statisticTask.setRefundCount(statisticTask.getRefundCount().add(item.getRefundNum())); + if (item.getReturnNum().compareTo(item.getNum()) < 0) { + statisticTask.setSuccessAmount(statisticTask.getSuccessAmount().add(item.getPayAmount().subtract(item.getReturnAmount()))); + statisticTask.setSuccessCount(statisticTask.getSuccessCount().add(item.getNum().subtract(item.getReturnAmount()))); + } + }else { + statisticTask.setSuccessCount(statisticTask.getSuccessCount().add(item.getNum())); + statisticTask.setSuccessAmount(statisticTask.getSuccessAmount().add(item.getPayAmount())); + } + } + + countInfo.forEach((shopId, map) -> map.forEach((productId, statisticTask) -> { + ShopProdStatistic statistic = getOne(new QueryWrapper().eq(ShopProdStatistic::getShopId, shopId).eq(ShopProdStatistic::getCreateDay, yesterday.toSqlDate())); + if (statistic == null) { + statistic = new ShopProdStatistic(); + statistic.setShopId(shopId); + statistic.setCreateDay(yesterday.toSqlDate()); + } + statistic.setProdId(productId); + statistic.setSaleCount(statisticTask.getSuccessCount()); + statistic.setSaleAmount(statisticTask.getSuccessAmount()); + statistic.setRefundCount(statisticTask.getRefundCount()); + statistic.setRefundAmount(statisticTask.getRefundAmount()); + saveOrUpdate(statistic); + })); + } + + +} diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/ShopTableOrderStatisticServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/ShopTableOrderStatisticServiceImpl.java new file mode 100644 index 00000000..b2921336 --- /dev/null +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/ShopTableOrderStatisticServiceImpl.java @@ -0,0 +1,116 @@ +package com.czg.service.order.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.czg.config.RedisCst; +import com.czg.order.entity.OrderInfo; +import com.czg.order.service.OrderInfoService; +import com.czg.utils.PageUtil; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.mybatisflex.core.paginate.Page; +import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.spring.service.impl.ServiceImpl; +import com.czg.order.entity.ShopTableOrderStatistic; +import com.czg.order.service.ShopTableOrderStatisticService; +import com.czg.service.order.mapper.ShopTableOrderStatisticMapper; +import jakarta.annotation.Resource; +import lombok.Data; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; + +/** + * 台桌订单统计表 服务层实现。 + * + * @author zs + * @since 2025-03-07 + */ +@Service +public class ShopTableOrderStatisticServiceImpl extends ServiceImpl implements ShopTableOrderStatisticService{ + @Resource + private OrderInfoService orderInfoService; + + @Override + public Page summary(Long shopId, String startTime, String endTime) { + Page page = PageUtil.buildPage(); + PageHelper.startPage(Math.toIntExact(page.getPageNumber()),Math.toIntExact(page.getPageSize())); + return PageUtil.convert(new PageInfo<>(mapper.selectSummary(shopId, startTime, endTime))); + } + + @Override + public boolean addInfo(long shopId, long tableId, long count, BigDecimal amount) { + ShopTableOrderStatistic statistic = getOne(new QueryWrapper().eq(ShopTableOrderStatistic::getShopId, shopId).eq(ShopTableOrderStatistic::getTableId, tableId) + .eq(ShopTableOrderStatistic::getCreateDay, DateUtil.date().toDateStr())); + if (statistic == null) { + statistic = new ShopTableOrderStatistic(); + statistic.setShopId(shopId); + statistic.setTableId(tableId); + statistic.setCreateDay(DateUtil.date().toSqlDate()); + statistic.setOrderCount(count); + statistic.setOrderAmount(amount); + save(statistic); + } + return mapper.incrInfo(shopId, tableId, count, amount, DateUtil.date().toDateStr()); + } + + @Data + private static class StatisticTask{ + private long successCount = 0; + private BigDecimal successAmount = BigDecimal.ZERO; + private long refundCount = 0; + private BigDecimal refundAmount = BigDecimal.ZERO; + } + + @Override + public void statistic() { + // 获取前一天 + DateTime yesterday = DateUtil.yesterday(); + + // 获取前一天的开始时间(00:00:00) + DateTime startOfDay = DateUtil.beginOfDay(yesterday); + + // 获取前一天的结束时间(23:59:59) + DateTime endOfDay = DateUtil.endOfDay(yesterday); + List orderInfos = orderInfoService.list(new QueryWrapper() + .ge(OrderInfo::getCreateTime, startOfDay) + .le(OrderInfo::getCreateTime, endOfDay) + .ne(OrderInfo::getStatus, "unpaid").ne(OrderInfo::getStatus, "cancelled")); + + HashMap countInfo = new HashMap<>(); + for (OrderInfo item : orderInfos) { + StatisticTask statisticTask = countInfo.get(item.getShopId()); + if (statisticTask == null) { + countInfo.put(item.getShopId(), statisticTask = new StatisticTask()); + } + if ("refunding".equals(item.getStatus()) || "refund".equals(item.getStatus()) || "part-refund".equals(item.getStatus())) { + statisticTask.setRefundAmount(statisticTask.getRefundAmount().add(item.getRefundAmount())); + statisticTask.setRefundCount(statisticTask.getRefundCount() + 1); + if (item.getRefundAmount().compareTo(item.getPayAmount()) < 0) { + statisticTask.setSuccessAmount(statisticTask.getSuccessAmount().add(item.getPayAmount().subtract(item.getRefundAmount()))); + } + }else { + statisticTask.setSuccessCount(statisticTask.getSuccessCount() + 1); + statisticTask.setSuccessAmount(statisticTask.getSuccessAmount().add(item.getPayAmount())); + } + } + + countInfo.forEach((shopId, statisticTask) -> { + ShopTableOrderStatistic statistic = getOne(new QueryWrapper().eq(ShopTableOrderStatistic::getShopId, shopId).eq(ShopTableOrderStatistic::getCreateDay, yesterday.toSqlDate())); + if (statistic == null) { + statistic = new ShopTableOrderStatistic(); + statistic.setShopId(shopId); + statistic.setTableId(0L); + statistic.setCreateDay(yesterday.toSqlDate()); + } + statistic.setOrderCount(statisticTask.getSuccessCount()); + statistic.setOrderAmount(statisticTask.getSuccessAmount()); + statistic.setRefundCount(statisticTask.getRefundCount()); + statistic.setRefundAmount(statisticTask.getRefundAmount()); + saveOrUpdate(statistic); + }); + + } +} diff --git a/cash-service/order-service/src/main/resources/mapper/ShopOrderStatisticMapper.xml b/cash-service/order-service/src/main/resources/mapper/ShopOrderStatisticMapper.xml new file mode 100644 index 00000000..d4bd4fa2 --- /dev/null +++ b/cash-service/order-service/src/main/resources/mapper/ShopOrderStatisticMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/cash-service/order-service/src/main/resources/mapper/ShopProdStatisticMapper.xml b/cash-service/order-service/src/main/resources/mapper/ShopProdStatisticMapper.xml new file mode 100644 index 00000000..3df155f3 --- /dev/null +++ b/cash-service/order-service/src/main/resources/mapper/ShopProdStatisticMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/cash-service/account-service/src/main/resources/mapper/ShopTableOrderStatisticMapper.xml b/cash-service/order-service/src/main/resources/mapper/ShopTableOrderStatisticMapper.xml similarity index 85% rename from cash-service/account-service/src/main/resources/mapper/ShopTableOrderStatisticMapper.xml rename to cash-service/order-service/src/main/resources/mapper/ShopTableOrderStatisticMapper.xml index e960007b..aefa01ea 100644 --- a/cash-service/account-service/src/main/resources/mapper/ShopTableOrderStatisticMapper.xml +++ b/cash-service/order-service/src/main/resources/mapper/ShopTableOrderStatisticMapper.xml @@ -2,13 +2,13 @@ - + update tb_shop_table_order_statistic set order_count=order_count + #{count}, order_amount=order_amount + #{count} where shop_id = #{shopId} and table_id = #{tableId} and create_day=#{date} - SELECT a.table_id as tableId, b.name as name, sum(a.order_count) as orderCount, sum(a.order_amount) as orderAmount FROM