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

331 lines
9.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AppletController 统一响应处理修改说明
## 修改概述
`AppletController.java` 中的小程序接口进行了统一响应格式处理,按照以下规范:
- **成功响应**: code: 200
- **业务提示**: code: 422
- **Token验证失败**: code: 332
- **系统错误**: code: 500
## 新增统一响应方法
`AppletControllerUtil.java` 中新增了以下统一响应处理方法:
### 1. 成功响应方法
```java
// 成功响应 - code: 200
public static AjaxResult appletSuccess(Object data)
public static AjaxResult appletSuccess(String message)
public static AjaxResult appletSuccess()
```
### 2. 业务提示方法
```java
// 业务提示响应 - code: 422
public static AjaxResult appletWarning(String message)
public static AjaxResult appletWarning(String message, Object data)
```
### 3. Token验证失败方法
```java
// Token验证失败响应 - code: 332
public static AjaxResult appletUnauthorized()
public static AjaxResult appletUnauthorized(String message)
```
### 4. 系统错误方法
```java
// 系统错误响应 - code: 500
public static AjaxResult appletError(String message)
```
## 已修改的方法示例
### 1. 服务分类接口
```java
// 修改前
return success(categoryList);
return error("获取服务分类列表失败:" + e.getMessage());
// 修改后
return AppletControllerUtil.appletSuccess(categoryList);
return AppletControllerUtil.appletError("获取服务分类列表失败:" + e.getMessage());
```
### 2. Token验证相关
```java
// 修改前
return error("用户未登录或token无效");
// 修改后
return AppletControllerUtil.appletUnauthorized();
```
### 3. 业务验证相关
```java
// 修改前
return error("地址ID无效");
return error("参数格式错误");
// 修改后
return AppletControllerUtil.appletWarning("地址ID无效");
return AppletControllerUtil.appletWarning("参数格式错误");
```
### 4. 积分兑换特殊处理
```java
// 修改前
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)
```json
{
"code": 200,
"msg": "OK",
"data": {...}
}
```
### 业务提示 (422)
```json
{
"code": 422,
"msg": "提示信息",
"data": []
}
```
### Token验证失败 (332)
```json
{
"code": 332,
"msg": "用户未登录或token无效请重新登录",
"data": []
}
```
### 系统错误 (500)
```json
{
"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` (可选): 美团优惠码
**请求示例**:
```json
{
"paytype": 1,
"coupon_id": 123,
"mtcode": "MT123456"
}
```
**响应示例**:
**微信支付示例**:
```json
{
"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元):
```json
{
"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` 字段保持不变