feat(order): 新增订单管理功能 V2

- 新增订单创建、查询、备注更新、申请退款等接口
- 添加订单相关实体类和枚举类
- 实现订单事件监听器,处理支付、退款、订单状态变化
- 优化移动端订单创建逻辑,集成订单服务
This commit is contained in:
2025-08-28 18:42:47 +08:00
parent af79a5ffa6
commit e95e0a04ff
28 changed files with 2515 additions and 12 deletions

View File

@@ -1,5 +1,6 @@
package com.ycwl.basic.controller.mobile;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.constant.BaseContextHandler;
import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.pricing.dto.*;
@@ -8,6 +9,10 @@ import com.ycwl.basic.service.pc.FaceService;
import com.ycwl.basic.service.PriceCacheService;
import com.ycwl.basic.model.pc.face.resp.FaceRespVO;
import com.ycwl.basic.dto.MobileOrderRequest;
import com.ycwl.basic.order.service.IOrderService;
import com.ycwl.basic.order.dto.OrderV2DetailResponse;
import com.ycwl.basic.order.dto.OrderV2ListResponse;
import com.ycwl.basic.order.dto.OrderV2PageRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@@ -27,6 +32,7 @@ public class AppOrderV2Controller {
private final IPriceCalculationService priceCalculationService;
private final FaceService faceService;
private final PriceCacheService priceCacheService;
private final IOrderService orderService;
/**
* 移动端价格计算
@@ -157,20 +163,80 @@ public class AppOrderV2Controller {
log.info("价格缓存验证通过: userId={}, scenicId={}, finalAmount={}",
currentUserId, scenicId, cachedResult.getFinalAmount());
// TODO: 实现订单创建逻辑
// 1. 生成订单号
// 2. 创建订单基础信息
// 3. 保存订单商品明细
// 4. 记录使用的优惠券和券码信息
// 5. 更新优惠券和券码状态
// 6. 初始化订单状态为待支付
// 7. 发送订单创建成功通知
// 创建订单
try {
Long orderId = orderService.createOrder(request, currentUserId, scenicId, cachedResult);
log.info("移动端订单创建成功: orderId={}, userId={}, scenicId={}, finalAmount={}",
orderId, currentUserId, scenicId, cachedResult.getFinalAmount());
return ApiResponse.success(orderId.toString());
} catch (Exception e) {
log.error("订单创建失败: userId={}, scenicId={}, error={}", currentUserId, scenicId, e.getMessage(), e);
return ApiResponse.fail("订单创建失败,请稍后重试");
}
}
// ====== 新增移动端订单查询功能 ======
/**
* 用户分页查询自己的订单列表
*/
@PostMapping("/page")
public ApiResponse<PageInfo<OrderV2ListResponse>> pageUserOrders(@RequestBody OrderV2PageRequest request) {
String currentUserIdStr = BaseContextHandler.getUserId();
if (currentUserIdStr == null) {
log.warn("用户未登录");
return ApiResponse.fail("用户未登录");
}
String orderId = "ORDER_" + System.currentTimeMillis(); // 临时订单号生成逻辑
Long currentUserId = Long.valueOf(currentUserIdStr);
request.setMemberId(currentUserId); // 设置当前用户ID,确保只查询自己的订单
log.info("移动端订单创建成功: orderId={}, userId={}, scenicId={}, finalAmount={}",
orderId, currentUserId, scenicId, cachedResult.getFinalAmount());
log.info("用户查询订单列表: userId={}, request={}", currentUserId, request);
return ApiResponse.success(orderId);
try {
PageInfo<OrderV2ListResponse> pageInfo = orderService.pageOrdersByUser(request);
return ApiResponse.success(pageInfo);
} catch (Exception e) {
log.error("查询用户订单列表失败: userId={}", currentUserId, e);
return ApiResponse.fail("查询失败:" + e.getMessage());
}
}
/**
* 用户查询自己的订单详情
*/
@GetMapping("/detail/{orderId}")
public ApiResponse<OrderV2DetailResponse> getUserOrderDetail(@PathVariable("orderId") Long orderId) {
String currentUserIdStr = BaseContextHandler.getUserId();
if (currentUserIdStr == null) {
log.warn("用户未登录");
return ApiResponse.fail("用户未登录");
}
Long currentUserId = Long.valueOf(currentUserIdStr);
log.info("用户查询订单详情: userId={}, orderId={}", currentUserId, orderId);
try {
OrderV2DetailResponse detail = orderService.getOrderDetail(orderId);
if (detail == null) {
return ApiResponse.fail("订单不存在");
}
// 验证订单是否属于当前用户
if (!currentUserId.equals(detail.getMemberId())) {
log.warn("用户尝试访问他人订单: userId={}, orderId={}, orderOwner={}",
currentUserId, orderId, detail.getMemberId());
return ApiResponse.fail("无权访问该订单");
}
return ApiResponse.success(detail);
} catch (Exception e) {
log.error("查询用户订单详情失败: userId={}, orderId={}", currentUserId, orderId, e);
return ApiResponse.fail("查询失败:" + e.getMessage());
}
}
}