javacodeadmin/AppletController统一响应处理说明.md

9.2 KiB
Raw Blame History

AppletController 统一响应处理修改说明

修改概述

AppletController.java 中的小程序接口进行了统一响应格式处理,按照以下规范:

  • 成功响应: code: 200
  • 业务提示: code: 422
  • Token验证失败: code: 332
  • 系统错误: code: 500

新增统一响应方法

AppletControllerUtil.java 中新增了以下统一响应处理方法:

1. 成功响应方法

// 成功响应 - code: 200
public static AjaxResult appletSuccess(Object data)
public static AjaxResult appletSuccess(String message)  
public static AjaxResult appletSuccess()

2. 业务提示方法

// 业务提示响应 - code: 422
public static AjaxResult appletWarning(String message)
public static AjaxResult appletWarning(String message, Object data)

3. Token验证失败方法

// Token验证失败响应 - code: 332
public static AjaxResult appletUnauthorized()
public static AjaxResult appletUnauthorized(String message)

4. 系统错误方法

// 系统错误响应 - code: 500
public static AjaxResult appletError(String message)

已修改的方法示例

1. 服务分类接口

// 修改前
return success(categoryList);
return error("获取服务分类列表失败:" + e.getMessage());

// 修改后  
return AppletControllerUtil.appletSuccess(categoryList);
return AppletControllerUtil.appletError("获取服务分类列表失败:" + e.getMessage());

2. Token验证相关

// 修改前
return error("用户未登录或token无效");

// 修改后
return AppletControllerUtil.appletUnauthorized();

3. 业务验证相关

// 修改前
return error("地址ID无效");
return error("参数格式错误");

// 修改后
return AppletControllerUtil.appletWarning("地址ID无效");
return AppletControllerUtil.appletWarning("参数格式错误");

4. 积分兑换特殊处理

// 修改前
AjaxResult result = AjaxResult.error("积分不足");
result.put("code", 422);
result.put("data", new ArrayList<>());
return result;

// 修改后
return AppletControllerUtil.appletWarning("积分不足");

修改范围

已完成修改的方法:

  1. getInfo() - 获取服务分类列表
  2. config() - 获取系统配置信息
  3. getconfig() - 获取默认配置信息
  4. getaddresslist() - 查询用户收货地址列表
  5. getAddressInfo() - 根据地址ID查询用户收货地址详情
  6. editAddress() - 修改用户收货地址
  7. addAddress() - 新增用户收货地址
  8. exchangeIntegralProduct() - 积分商品兑换接口

待修改的方法(需要继续处理):

由于文件较大,还有以下方法需要继续修改:

  • 售后返修相关接口
  • 订单查询相关接口
  • 支付相关接口
  • 用户登录验证接口
  • 商品查询相关接口
  • 优惠券相关接口
  • 积分日志相关接口
  • 通知订阅相关接口

统一响应格式

成功响应 (200)

{
  "code": 200,
  "msg": "OK", 
  "data": {...}
}

业务提示 (422)

{
  "code": 422,
  "msg": "提示信息",
  "data": []
}

Token验证失败 (332)

{
  "code": 332,
  "msg": "用户未登录或token无效请重新登录",
  "data": []
}

系统错误 (500)

{
  "code": 500,
  "msg": "系统错误信息", 
  "data": []
}

注意事项

  1. Token验证失败一律返回 332 状态码
  2. 业务验证失败(如参数错误、数据不存在、权限不足)返回 422 状态码
  3. 系统异常(如数据库异常、网络异常)返回 500 状态码
  4. 成功操作返回 200 状态码
  5. 积分不足等特殊业务场景也使用 422 状态码

下一步工作

需要继续对剩余的方法进行统一响应格式处理,确保所有小程序接口都使用统一的响应格式。

AppletController 接口说明

修改的接口

/api/paybefor/info/{id} - 预支付记录查询和金额计算

请求方式: POST
接口描述: 根据预支付记录ID查询详情并根据传递的参数计算支付金额

请求参数:

  • id (路径参数): 预支付记录ID
  • paytype (可选): 支付方式1=微信支付2=余额支付3=组合支付默认为1
  • coupon_id (可选): 优惠券ID
  • mtcode (可选): 美团优惠码

请求示例:

{
  "paytype": 1,
  "coupon_id": 123,
  "mtcode": "MT123456"
}

响应示例:

微信支付示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "id": 1,
    "orderId": "ORDER20250101001",
    "paycode": "PAY20250101001",
    "allmoney": 100.00,
    "finalAmount": 85.10,
    "wxmoney": 85.10,
    "yemoney": 0.00,
    "membermoney": 5.00,
    "shopmoney": 2.00,
    "servicemoney": 3.00,
    "couponmoney": 10.00,
    "mtmoney": 9.90,
    "type": 1,
    "paytype": 1,
    "usersBalance": 50.00,
    "couponId": 123,
    "mtcode": "MT123456",
    "calculationDetail": {
      "originalAmount": 100.00,
      "memberDiscount": 5.00,
      "serviceDiscount": 3.00,
      "shopDiscount": 2.00,
      "couponDiscount": 10.00,
      "mtDiscount": 9.90,
      "finalAmount": 85.10
    }
  }
}

组合支付示例用户余额30元实际应付85.10元):

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "id": 1,
    "orderId": "ORDER20250101001",
    "paycode": "PAY20250101001",
    "allmoney": 100.00,
    "finalAmount": 85.10,
    "wxmoney": 55.10,
    "yemoney": 30.00,
    "membermoney": 5.00,
    "shopmoney": 2.00,
    "servicemoney": 3.00,
    "couponmoney": 10.00,
    "mtmoney": 9.90,
    "type": 1,
    "paytype": 3,
    "usersBalance": 30.00,
    "couponId": 123,
    "mtcode": "MT123456",
    "calculationDetail": {
      "originalAmount": 100.00,
      "memberDiscount": 5.00,
      "serviceDiscount": 3.00,
      "shopDiscount": 2.00,
      "couponDiscount": 10.00,
      "mtDiscount": 9.90,
      "finalAmount": 85.10
    }
  }
}

响应参数:

  • id: 预支付记录ID
  • orderId: 订单ID
  • paycode: 支付订单号
  • allmoney: 原始总金额(固定不变,这是您最初存储的金额)
  • finalAmount: 实际应付金额基于allmoney计算得出
  • wxmoney: 微信支付金额
  • yemoney: 余额支付金额
  • membermoney: 会员优惠金额(固定不变)
  • shopmoney: 购物金抵扣金额(固定不变)
  • servicemoney: 服务金抵扣金额(固定不变)
  • couponmoney: 优惠券金额(实时计算)
  • mtmoney: 美团优惠金额(实时计算)
  • type: 订单类型
  • paytype: 支付方式
  • usersBalance: 用户余额
  • couponId: 优惠券ID
  • mtcode: 美团优惠码
  • calculationDetail: 计算明细
    • originalAmount: 原始金额allmoney
    • memberDiscount: 会员优惠
    • serviceDiscount: 服务金抵扣
    • shopDiscount: 购物金抵扣
    • couponDiscount: 优惠券金额
    • mtDiscount: 美团优惠
    • finalAmount: 最终应付金额

业务逻辑:

  1. 验证用户登录状态和权限
  2. 获取 allmoney(原始总金额,固定不变)和固定优惠金额(会员优惠、服务金抵扣、购物金抵扣)
  3. 根据优惠券ID查询优惠券信息并验证有效性计算优惠券优惠金额
  4. 计算美团优惠金额每次调用生成2至15的随机整数
  5. 基于 allmoney 减去所有优惠,计算实际应付金额:
    实际应付金额 = allmoney - 会员优惠 - 服务金抵扣 - 购物金抵扣 - 优惠券金额 - 美团优惠
    
  6. 根据支付方式计算各支付渠道金额:
    • 微信支付:全部用微信支付
    • 余额支付:验证余额是否足够,全部用余额支付
    • 组合支付:
      • 余额足够:全部用余额支付
      • 余额不足:优先扣除用户所有余额,剩余部分用微信支付
      • 无余额:全部用微信支付
  7. 更新预支付记录到数据库(注意:allmoney 保持不变)
  8. 返回计算后的支付信息,包含计算明细

错误处理:

  • 用户未登录或token无效
  • 预支付记录不存在
  • 无权查看该预支付记录
  • 优惠券无效或已被使用
  • 优惠券不属于当前用户
  • 优惠券已过期
  • 订单金额未达到优惠券使用条件
  • 余额不足
  • 无效的支付方式
  • 更新预支付记录失败

注意事项:

  • allmoney 是您最初存储的总金额,永远不会改变,所有计算都基于这个金额
  • 每次调用都会基于 allmoney 重新计算,确保前端能实时获取最新的支付信息
  • 会员优惠、服务金抵扣、购物金抵扣金额在每次计算中保持不变
  • 优惠券金额和美团优惠金额根据用户选择实时计算
  • 美团优惠功能每次调用生成2至15的随机整数作为优惠金额用于测试
  • 优惠券验证包括状态、归属权、过期时间、最低消费等
  • 组合支付逻辑:
    • 余额足够全部用余额支付wxmoney=0, yemoney=实际金额)
    • 余额不足优先扣除用户所有余额剩余部分用微信支付wxmoney=差额, yemoney=用户余额)
    • 无余额全部用微信支付wxmoney=实际金额, yemoney=0
  • 所有金额计算都使用BigDecimal确保精度
  • 返回的calculationDetail字段方便前端理解金额构成和计算过程
  • 更新数据库时,allmoney 字段保持不变