# ap_test **Repository Path**: sunhf_git/ap_test ## Basic Information - **Project Name**: ap_test - **Description**: Java笔试题 实现 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-24 - **Last Updated**: 2026-05-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # APTEST 交易平台 基于领域驱动设计(DDD)架构的交易平台,提供用户充值、商家库存管理、商品购买等核心交易功能。 ## 技术栈 | 技术 | 版本 | 说明 | |------|------|------| | Java | 21 | 编程语言 | | Spring Boot | 3.2.3 | 应用框架 | | MyBatis-Plus | 3.5.7 | ORM框架 | | PostgreSQL | 15 | 数据库 | | Redis | 7.4 | 缓存/分布式锁 | | Sentinel | 1.8.x | 流量控制/熔断降级 | | Docker | - | 容器化部署 | | JaCoCo | 0.8.11 | 代码覆盖率 | ## 项目结构 ``` src/main/java/org/xhy/ ├── api/ # 接口层 │ └── controller/ # REST控制器 ├── application/ # 应用层 │ └── service/ # 应用服务 ├── domain/ # 领域层 │ ├── entity/ # 领域实体 │ ├── repository/ # 仓库接口 │ ├── service/ # 领域服务 │ └── sharedkernel/ # 共享内核 │ ├── exception/ # 领域异常 │ └── vo/ # 值对象 └── infrastructure/ # 基础设施层 ├── config/ # 配置类 ├── handler/ # Sentinel异常处理 ├── job/ # 定时任务 ├── persistence/ # 持久化 │ ├── converter/ # 对象转换器 │ ├── po/ # 持久化对象 │ └── repository/ # 仓库实现 └── service/ # 基础设施服务 ``` ## 核心业务 ### 领域模型 | 实体 | 描述 | |------|------| | AppUser | 平台用户,拥有预存现金账户 | | ShopMerchant | 商家,拥有库存和账户 | | CashAccount | 现金账户,记录余额变动 | | ProductInventory | 商品库存记录 | | TradeOrder | 交易订单 | | PaymentOrder | 支付订单 | | RechargeRecord | 充值记录 | | SettlementReport | 结算报告 | ### 数据库表 | 表名 | 中文名 | 描述 | |------|--------|------| | app_user | 用户表 | 平台用户信息 | | shop_merchant | 商家表 | 商家信息 | | cash_account | 账户表 | 现金账户余额 | | product_inventory | 库存表 | 商品库存记录 | | trade_order | 订单表 | 交易订单记录 | | recharge_record | 充值记录表 | 充值流水记录 | | payment_order | 支付订单表 | 支付订单记录 | | settlement_report | 结算报告表 | 日结算报告 | ### 业务流程 **购买商品流程**: 1. 用户下单 → 验证账户余额 2. 余额充足 → Redis原子扣减库存 3. 扣减用户余额 4. 增加商家余额 5. 扣减数据库库存 6. 创建订单记录 **充值流程**: 1. 用户发起充值请求 2. 创建支付订单 3. 支付回调处理 4. 增加用户账户余额 5. 记录充值流水 **库存添加流程**: 1. 商家发起库存添加请求 2. 验证SKU和数量 3. 增加库存数量(若SKU不存在则创建) 4. 同步到Redis 5. 返回添加结果 ## API接口 ### 用户接口 | 方法 | 路径 | 描述 | |------|------|------| | POST | `/api/users/{userId}/account/recharge` | 用户充值 | | GET | `/api/users/{userId}/account/balance` | 查询余额 | ### 商家接口 | 方法 | 路径 | 描述 | |------|------|------| | POST | `/api/merchants/{merchantId}/inventory` | 添加库存 | | GET | `/api/merchants/{merchantId}/inventory/{sku}` | 查询库存 | | GET | `/api/merchants/{merchantId}/settlement` | 结算对账 | ### 交易接口 | 方法 | 路径 | 描述 | |------|------|------| | POST | `/api/orders` | 下单购买 | | POST | `/api/orders/seckill` | 秒杀下单 | | GET | `/api/orders/{orderId}` | 查询订单 | ## Sentinel限流配置 | 限流类型 | 资源名称 | 阈值 | 处理策略 | |----------|----------|------|----------| | 流量控制 | createOrder | 100 QPS | 快速失败 | | 流量控制 | seckillOrder | 50 QPS | 快速失败 | | 熔断降级 | createOrder | 异常率>50% | 熔断10秒 | | 热点参数 | seckillOrder:sku | 100/分钟 | 快速失败 | | 系统保护 | system | CPU>80% | 拒绝请求 | ## 快速开始 ### 环境要求 - JDK 21+ - Maven 3.8+ - Docker & Docker Compose ### 启动开发环境 ```bash # 启动数据库和Redis docker compose up -d # 编译项目 ./mvnw clean compile # 运行应用 ./mvnw spring-boot:run ``` ### 运行测试 ```bash # 运行所有测试 ./mvnw test # 运行测试并生成覆盖率报告 ./mvnw clean test jacoco:report # 覆盖率报告位置: target/site/jacoco/index.html ``` ### 代码格式化 ```bash ./mvnw spotless:apply ``` ## 配置说明 配置文件位于 `src/main/resources/application.yml`: ```yaml spring: datasource: url: jdbc:postgresql://localhost:5432/ap_test username: postgres password: postgres data: redis: host: localhost port: 6379 ``` ## 定时任务 | 任务 | 执行时间 | 描述 | |------|----------|------| | MerchantDailySettlementJob | 每日 00:00 | 商家日结算,匹配库存卖出商品价值与账户余额 | ## 测试覆盖 项目包含完整的测试套件: | 测试模块 | 测试数量 | 描述 | |----------|----------|------| | Sentinel分支覆盖测试 | 10 | Sentinel限流/熔断/降级分支覆盖 | | Sentinel配置测试 | 2 | Sentinel配置初始化验证 | | 用户模块测试 | 8 | 充值、余额查询、异常场景 | | 商家模块测试 | 13 | 库存管理、结算、异常场景 | | 交易模块测试 | 11 | 购买流程、余额不足、库存不足 | | 高并发测试 | 5 | 并发购买、库存扣减、超卖防护 | | 边界场景测试 | 12 | 余额边界、库存边界、价格边界 | | 强竞争测试 | 4 | 超卖防护、数据一致性 | | 数据持久化测试 | 10 | 数据库操作验证 | | 数据库表测试 | 5 | 表结构验证 | | 分支覆盖率测试 | 56 | 各模块分支覆盖 | **测试统计**: - 测试总数:142 - 成功数:142 - 失败数:0 - 跳过数:0 - 成功率:100.00% **代码覆盖率**: | 覆盖率类型 | 覆盖率 | |------------|--------| | 指令覆盖率 | 83% | | 分支覆盖率 | 61% | | 行覆盖率 | 83% | | 方法覆盖率 | 87% | | 类覆盖率 | 100% | ## 架构设计 项目采用领域驱动设计(DDD)架构,遵循分层原则: - **接口层(API Layer)**:处理HTTP请求,参数验证,响应格式化 - **应用层(Application Layer)**:业务流程编排,事务管理 - **领域层(Domain Layer)**:核心业务逻辑,领域模型 - **基础设施层(Infrastructure Layer)**:技术实现,持久化,外部服务 ### 依赖原则 - ✅ Infrastructure → Domain(基础设施层可以依赖领域层) - ✅ Application → Infrastructure(应用层可以使用基础设施层) - ✅ Application → Domain(应用层可以协调领域层) - ❌ Infrastructure → Application(基础设施层禁止依赖应用层) - ❌ Domain → Infrastructure(领域层禁止依赖基础设施层,通过接口反转) ## 设计文档 详细的设计文档位于 `docs/` 目录: | 文档 | 描述 | |------|------| | [docs/business-architecture.md](./docs/business-architecture.md) | 业务架构设计:领域模型、聚合边界、业务规则、领域服务职责 | | [docs/technical-architecture.md](./docs/technical-architecture.md) | 技术架构设计:DDD分层架构、技术选型、关键设计决策、命名规范 | | [docs/core-flow-design.md](./docs/core-flow-design.md) | 核心流程实现:购买商品流程、充值流程、库存管理、结算流程详细实现 | ## 测试报告 详细的测试报告请查看:[test_report.md](./test_report.md)