商城:增加 stat 统计设计

This commit is contained in:
YunaiV 2023-09-27 19:14:32 +08:00
parent 26dfbfb2ac
commit c5f2d07c87
15 changed files with 466 additions and 1 deletions

View File

@ -15,7 +15,7 @@
<name>${project.artifactId}</name> <name>${project.artifactId}</name>
<description> <description>
商城大模块,由 product 商品、promotion 营销、trade 交易等组成 商城大模块,由 product 商品、promotion 营销、trade 交易、statistics 统计等组成
</description> </description>
<modules> <modules>
<module>yudao-module-promotion-api</module> <module>yudao-module-promotion-api</module>
@ -24,6 +24,8 @@
<module>yudao-module-product-biz</module> <module>yudao-module-product-biz</module>
<module>yudao-module-trade-api</module> <module>yudao-module-trade-api</module>
<module>yudao-module-trade-biz</module> <module>yudao-module-trade-biz</module>
<module>yudao-module-statistics-api</module>
<module>yudao-module-statistics-biz</module>
</modules> </modules>
</project> </project>

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-mall</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yudao-module-statistics-api</artifactId>
<packaging>jar</packaging>
<name>${project.artifactId}</name>
<description>
statistics 模块 API暴露给其它模块调用
</description>
<dependencies>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-common</artifactId>
</dependency>
<!-- 参数校验 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,4 @@
/**
* TODO 占位无特殊含义
*/
package cn.iocoder.yudao.module.statistics.api;

View File

@ -0,0 +1,4 @@
/**
* TODO 占位无特殊含义
*/
package cn.iocoder.yudao.module.statistics.enums;

View File

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-mall</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yudao-module-statistics-biz</artifactId>
<packaging>jar</packaging>
<name>${project.artifactId}</name>
<description>
statistics 模块,主要实现统计相关功能
例如:统计商品、会员、交易等功能。
</description>
<dependencies>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-statistics-api</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-promotion-api</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-product-api</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-trade-api</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-member-api</artifactId>
<version>${revision}</version>
</dependency>
<!-- 业务组件 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-biz-operatelog</artifactId>
</dependency>
<!-- Web 相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-security</artifactId>
</dependency>
<!-- DB 相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-mybatis</artifactId>
</dependency>
<!-- Test 测试相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-test</artifactId>
</dependency>
<!-- 工具类相关 -->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-excel</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-spring-boot-starter-biz-dict</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,9 @@
/**
* TODO
* 1. 会员总数据
* 2. 性别统计
* 3. 渠道统计
* 4. 地域统计
* 5. 会员概览
*/
package cn.iocoder.yudao.module.statistics.controller.member;

View File

@ -0,0 +1 @@
package cn.iocoder.yudao.module.statistics.controller;

View File

@ -0,0 +1,41 @@
package cn.iocoder.yudao.module.statistics.controller.product;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.statistics.dal.mysql.product.ProductSpuStatisticsDO;
import cn.iocoder.yudao.module.statistics.dal.mysql.product.ProductStatisticsDO;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.List;
@Tag(name = "管理后台 - 商品统计")
@RestController
@RequestMapping("/statistics/product")
@Validated
@Slf4j
public class ProductStatisticsController {
// TODO @麦子返回 ProductStatisticsComparisonResp 里面有两个字段一个是选择的时间范围的合计结果一个是对比的时间范围的合计结果
// 例如说选择时间范围是 2023-10-01 ~ 2023-10-02那么对比就是 2023-09-30再倒推 2
public CommonResult<Object> getProductStatisticsComparison() {
return null;
}
// TODO @麦子查询指定时间范围内的商品统计数据DO 到时需要改成 VO
public CommonResult<List<ProductStatisticsDO>> getProductStatisticsList(
LocalDateTime[] times) {
return null;
}
// TODO @麦子查询指定时间范围内的商品 SPU 统计数据DO 到时需要改成 VO
// 入参是分页参数 + 时间范围 + 排序字段
public CommonResult<PageResult<ProductSpuStatisticsDO>> getProductSpuStatisticsPage() {
return null;
}
}

View File

@ -0,0 +1,36 @@
package cn.iocoder.yudao.module.statistics.controller.trade;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.statistics.dal.mysql.trade.TradeStatisticsDO;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.List;
@Tag(name = "管理后台 - 交易统计")
@RestController
@RequestMapping("/statistics/product")
@Validated
@Slf4j
public class TradeStatisticsController {
// TODO @疯狂有个 summary 接口返回昨日本月支付金额本月订单金额等数据具体看 ui
// TODO @疯狂返回 ProductStatisticsComparisonResp 里面有两个字段一个是选择的时间范围的合计结果一个是对比的时间范围的合计结果
// 例如说选择时间范围是 2023-10-01 ~ 2023-10-02那么对比就是 2023-09-30再倒推 2
public CommonResult<Object> getTradeStatisticsComparison() {
return null;
}
// TODO @疯狂查询指定时间范围内的交易统计数据DO 到时需要改成 VO
// 总收入营业额= 订单充值的支付 - 订单充值的退款
public CommonResult<List<TradeStatisticsDO>> getTradeStatisticsList(
LocalDateTime[] times) {
return null;
}
}

View File

@ -0,0 +1,4 @@
/**
* 占位 todo
*/
package cn.iocoder.yudao.module.statistics.dal.dataobject;

View File

@ -0,0 +1,74 @@
package cn.iocoder.yudao.module.statistics.dal.mysql.product;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import java.time.LocalDateTime;
/**
* 商品 SPU 统计 DO
*
* 以天为维度统计商品 SPU 的数据
*
* @author 芋道源码
*/
@TableName("product_spu_statistics")
@KeySequence("product_spu_statistics_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductSpuStatisticsDO extends BaseDO {
/**
* 编号主键自增
*/
@TableId
private Long id;
/**
* 商品 SPU 编号
*
* 关联 ProductSpuDO id 字段
*/
private Long spuId;
/**
* 统计日期
*/
private LocalDateTime time;
/**
* 浏览量
*/
private Integer browseCount;
/**
* 收藏量
*/
private Integer favoriteCount;
/**
* 添加购物车次数
*
* 以商品被添加到购物车的 createTime 计算后续多次添加不会增加该值
* 直到该次被下单或者被删除后续再次被添加到购物车
*/
private Integer addCartCount;
/**
* 创建订单商品数
*/
private Integer createOrderCount;
/**
* 支付订单商品数
*/
private Integer payOrderCount;
/**
* 总支付金额单位
*/
private Integer payPrice;
}

View File

@ -0,0 +1,70 @@
package cn.iocoder.yudao.module.statistics.dal.mysql.product;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import java.time.LocalDateTime;
/**
* 商品统计 DO
*
* 以天为维度统计全部的数据
*
* {@link ProductSpuStatisticsDO} 的差异是它是全局的统计
*
* @author 芋道源码
*/
@TableName("product_spu_statistics")
@KeySequence("product_spu_statistics_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductStatisticsDO extends BaseDO {
/**
* 编号主键自增
*/
@TableId
private Long id;
/**
* 统计日期
*/
private LocalDateTime time;
/**
* 浏览量
*/
private Integer browseCount;
/**
* 收藏量
*/
private Integer favoriteCount;
/**
* 添加购物车次数
*
* 以商品被添加到购物车的 createTime 计算后续多次添加不会增加该值
* 直到该次被下单或者被删除后续再次被添加到购物车
*/
private Integer addCartCount;
/**
* 创建订单商品数
*/
private Integer createOrderCount;
/**
* 支付订单商品数
*/
private Integer payOrderCount;
/**
* 总支付金额单位
*/
private Integer payPrice;
}

View File

@ -0,0 +1,89 @@
package cn.iocoder.yudao.module.statistics.dal.mysql.trade;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import java.time.LocalDateTime;
/**
* 交易统计 DO
*
* 以天为维度统计全部的数据
*
* @author 芋道源码
*/
@TableName("trade_statistics")
@KeySequence("trade_statistics_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TradeStatisticsDO extends BaseDO {
/**
* 编号主键自增
*/
@TableId
private Long id;
/**
* 统计日期
*/
private LocalDateTime time;
/**
* 创建订单数
*/
private Integer orderCreateCount;
/**
* 支付订单商品数
*/
private Integer orderPayCount;
/**
* 总支付金额单位
*/
private Integer orderPayPrice;
/**
* 总支付金额余额单位
*/
private Integer orderWalletPayPrice;
/**
* 退款订单数
*/
private Integer afterSaleCount;
/**
* 总退款金额单位
*/
private Integer afterSaleRefundPrice;
/**
* 佣金金额已结算单位
*/
private Integer brokerageSettlementPrice;
/**
* 充值订单数
*
* PayWalletRechargeDO 计算
*/
private Integer rechargePayCount;
/**
* 充值金额单位
*/
private Integer rechargePayPrice;
/**
* 充值退款订单数
*/
private Integer rechargeRefundCount;
/**
* 充值退款金额单位
*/
private Integer rechargeRefundPrice;
}

View File

@ -0,0 +1,4 @@
/**
* TODO 芋艿占坑无特殊含义
*/
package cn.iocoder.yudao.module.statistics.job;

View File

@ -0,0 +1,8 @@
/**
* statistics 模块主要实现统计相关功能
* 例如统计商品会员交易等功能
*
* 1. Controller URL /statistics/ 开头避免和其它 Module 冲突
* 2. DataObject 表名 statistics_ 为后缀方便在数据库中区分特殊
*/
package cn.iocoder.yudao.module.statistics;