12-获取今日订单数接口.md 7.3 KB

店铺今日订单数接口文档

接口信息

接口名称

获取店铺今日订单数

接口路径

GET /storeManage/getTodayOrderCount

接口描述

查询指定店铺今日的有效订单数量(排除待支付、已取消、已过期状态的订单)


请求参数

Query 参数

参数名 类型 必填 说明
storeId Integer 店铺ID

请求示例

GET /storeManage/getTodayOrderCount?storeId=102

响应参数

响应数据结构

{
    "code": 200,
    "success": true,
    "data": 15,
    "msg": "查询成功"
}

响应字段说明

字段名 类型 说明
code Integer 响应状态码,200表示成功
success Boolean 是否成功
data Integer 今日有效订单数量
msg String 响应消息

业务逻辑说明

1. 订单统计规则

  • 时间范围:当天 00:00:00 至 23:59:59
  • 排除状态
    • 待支付 (0)
    • 已取消 (4)
    • 已过期 (3)
  • 包含状态
    • 已支付/待使用 (1)
    • 已核销 (2)
    • 已退款 (5)
    • 退款失败 (6)
    • 已完成 (7)

2. 查询条件

// 查询今日的订单
wrapper.eq(LifeUserOrder::getStoreId, storeId)
       .notIn(LifeUserOrder::getStatus, 
              OrderStatusEnum.CANCEL.getStatus(),      // 4-已取消
              OrderStatusEnum.WAIT_PAY.getStatus(),    // 0-待支付
              OrderStatusEnum.EXPIRE.getStatus())      // 3-已过期
       .between(LifeUserOrder::getBuyTime, 
                today + " 00:00:00", 
                today + " 23:59:59");

3. 数据来源

  • 数据表life_user_order
  • 关联实体LifeUserOrder
  • MapperLifeUserOrderMapper

技术实现

Controller 层

文件路径alien-store-platform/src/main/java/shop/alien/storeplatform/controller/StoreManageController.java

@ApiOperation("获取店铺今日订单数")
@ApiOperationSupport(order = 6)
@ApiImplicitParams({
    @ApiImplicitParam(name = "storeId", value = "店铺ID", 
                     dataType = "Integer", paramType = "query", required = true)
})
@GetMapping("/getTodayOrderCount")
public R<Integer> getTodayOrderCount(@RequestParam("storeId") Integer storeId) {
    log.info("StoreManageController.getTodayOrderCount?storeId={}", storeId);
    try {
        Integer count = storeManageService.getTodayOrderCount(storeId);
        return R.data(count, "查询成功");
    } catch (Exception e) {
        log.error("StoreManageController.getTodayOrderCount ERROR: {}", 
                 e.getMessage(), e);
        return R.fail(e.getMessage());
    }
}

Service 层

文件路径alien-store-platform/src/main/java/shop/alien/storeplatform/service/StoreManageService.java

/**
 * 获取店铺今日订单数
 *
 * @param storeId 店铺ID
 * @return 今日订单数
 */
Integer getTodayOrderCount(Integer storeId);

Service 实现层

文件路径alien-store-platform/src/main/java/shop/alien/storeplatform/service/impl/StoreManageServiceImpl.java

@Override
public Integer getTodayOrderCount(Integer storeId) {
    log.info("StoreManageServiceImpl.getTodayOrderCount - 查询店铺今日订单数: storeId={}", 
             storeId);
    
    // 1. 构建查询条件
    LambdaQueryWrapper<LifeUserOrder> wrapper = new LambdaQueryWrapper<>();
    LocalDate today = LocalDate.now();
    
    // 2. 查询今日的订单,排除待支付、已取消、已过期状态
    wrapper.eq(LifeUserOrder::getStoreId, storeId)
           .notIn(LifeUserOrder::getStatus, 
                  OrderStatusEnum.CANCEL.getStatus(), 
                  OrderStatusEnum.WAIT_PAY.getStatus(), 
                  OrderStatusEnum.EXPIRE.getStatus())
           .between(LifeUserOrder::getBuyTime, 
                    today + " 00:00:00", 
                    today + " 23:59:59");
    
    // 3. 统计订单数量
    Integer count = lifeUserOrderMapper.selectCount(wrapper);
    
    log.info("StoreManageServiceImpl.getTodayOrderCount - 查询完成: storeId={}, 今日订单数={}", 
             storeId, count);
    return count;
}

依赖注入

Service 实现类新增依赖

private final LifeUserOrderMapper lifeUserOrderMapper;

新增导入

import shop.alien.entity.store.LifeUserOrder;
import shop.alien.util.common.constant.OrderStatusEnum;

原接口对比

原接口信息

  • 服务:alien-store(app端商户)
  • 路径/alienStore/storeIncomeDetailsRecord/todayOrderCount
  • ControllerStoreIncomeDetailsRecordController
  • ServiceStoreIncomeDetailsRecordService

新接口信息

  • 服务:alien-store-platform(web端商户)
  • 路径/storeManage/getTodayOrderCount
  • ControllerStoreManageController
  • ServiceStoreManageService

命名对比

原接口 新接口 说明
todayOrderCount getTodayOrderCount 符合web端命名规范
/storeIncomeDetailsRecord/ /storeManage/ 统一归类到店铺管理模块

错误处理

异常情况

  1. 参数错误:storeId 为空或无效
  2. 数据库异常:查询失败

错误响应示例

{
    "code": 500,
    "success": false,
    "data": null,
    "msg": "查询失败:数据库连接异常"
}

测试建议

测试场景

  1. 正常场景:查询有订单的店铺
  2. 空数据场景:查询今日无订单的店铺(应返回0)
  3. 边界场景:查询不存在的店铺ID(应返回0)
  4. 状态过滤:验证待支付、已取消、已过期订单是否被排除

测试数据

-- 查询店铺今日订单(用于验证)
SELECT 
    COUNT(*) AS order_count
FROM life_user_order
WHERE store_id = 102
  AND status NOT IN (0, 3, 4)  -- 排除待支付、已过期、已取消
  AND buy_time BETWEEN '2025-11-12 00:00:00' AND '2025-11-12 23:59:59'
  AND delete_flag = 0;

相关接口

  • 今日收益接口GET /storeManage/getTodayIncome
  • 店铺详情接口GET /storeManage/getStoreDetail
  • 店铺入住申请POST /storeManage/applyStore

注意事项

  1. 订单状态枚举:使用 OrderStatusEnum 确保状态码一致性
  2. 时间范围:使用 LocalDate.now() 获取当天日期,确保时区正确
  3. 性能优化:订单数量统计使用 selectCount 而非查询全部数据
  4. 逻辑删除:MyBatis-Plus 自动处理 delete_flag 字段
  5. 日志记录:记录查询参数和结果,便于问题追踪

更新日志

2025-11-12

  • ✅ 完成接口迁移:从 alien-store 迁移到 alien-store-platform
  • ✅ Controller 层:添加 getTodayOrderCount 接口
  • ✅ Service 层:添加 getTodayOrderCount 方法定义
  • ✅ Service 实现层:实现今日订单数查询逻辑
  • ✅ 依赖注入:添加 LifeUserOrderMapperOrderStatusEnum 导入
  • ✅ Linter 检查:无错误
  • ✅ 业务逻辑:完全复用原接口逻辑
  • ✅ 命名规范:符合web端命名规范

开发者信息

  • 迁移时间:2025-11-12
  • 原服务:alien-store(app端商户)
  • 目标服务:alien-store-platform(web端商户)
  • 技术栈:Spring Boot + MyBatis-Plus + Java 8