|
@@ -829,11 +829,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
@Override
|
|
@Override
|
|
|
public List<Map<String, Object>> getUserOrderListWithProducts(Long userId, Integer status) {
|
|
public List<Map<String, Object>> getUserOrderListWithProducts(Long userId, Integer status) {
|
|
|
List<Order> orders = getOrderListByUserId(userId, status);
|
|
List<Order> orders = getOrderListByUserId(userId, status);
|
|
|
- List<Map<String, Object>> orderList = new ArrayList<>();
|
|
|
|
|
- for (Order order : orders) {
|
|
|
|
|
- orderList.add(buildOrderMap(order));
|
|
|
|
|
|
|
+ if (orders.isEmpty()) {
|
|
|
|
|
+ return new ArrayList<>();
|
|
|
}
|
|
}
|
|
|
- return orderList;
|
|
|
|
|
|
|
+ return buildOrderListBatch(orders);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -980,6 +979,85 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
return cancelUserOrder(userId, orderId);
|
|
return cancelUserOrder(userId, orderId);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 批量构建订单列表(一次查询商品和退款数据,避免 N+1)
|
|
|
|
|
+ */
|
|
|
|
|
+ private List<Map<String, Object>> buildOrderListBatch(List<Order> orders) {
|
|
|
|
|
+ List<Long> orderIds = orders.stream().map(Order::getId).collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ // 批量查询所有订单的商品
|
|
|
|
|
+ Map<Long, List<OrderItemVO>> goodsMap = orderGoodsService.getVOByOrderIds(orderIds);
|
|
|
|
|
+
|
|
|
|
|
+ // 批量查询所有订单的退款商品数量
|
|
|
|
|
+ Map<Long, Map<Long, Integer>> refundQtyMap = null;
|
|
|
|
|
+ if (refundService != null) {
|
|
|
|
|
+ refundQtyMap = refundService.getRefundedQuantityMapByOrderIds(orderIds);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ List<Map<String, Object>> orderList = new ArrayList<>();
|
|
|
|
|
+ for (Order order : orders) {
|
|
|
|
|
+ Map<String, Object> orderMap = buildOrderMapBase(order);
|
|
|
|
|
+ List<OrderItemVO> goodsList = goodsMap.getOrDefault(order.getId(), new ArrayList<>());
|
|
|
|
|
+ Map<Long, Integer> refundQtys = refundQtyMap != null
|
|
|
|
|
+ ? refundQtyMap.getOrDefault(order.getId(), new HashMap<>())
|
|
|
|
|
+ : new HashMap<>();
|
|
|
|
|
+ orderMap.put("products", buildProductList(goodsList, refundQtys));
|
|
|
|
|
+ orderList.add(orderMap);
|
|
|
|
|
+ }
|
|
|
|
|
+ return orderList;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 构建订单Map基础字段(不含 products)
|
|
|
|
|
+ */
|
|
|
|
|
+ private Map<String, Object> buildOrderMapBase(Order order) {
|
|
|
|
|
+ Map<String, Object> orderMap = new HashMap<>();
|
|
|
|
|
+ orderMap.put("id", order.getId());
|
|
|
|
|
+ orderMap.put("orderNo", order.getOrderNo());
|
|
|
|
|
+ orderMap.put("orderName", order.getOrderName() != null ? order.getOrderName() : "");
|
|
|
|
|
+ orderMap.put("outTradeNo", order.getOutTradeNo());
|
|
|
|
|
+ orderMap.put("deviceId", order.getDeviceId());
|
|
|
|
|
+ orderMap.put("storeName", order.getStoreName() != null ? order.getStoreName() : "");
|
|
|
|
|
+ orderMap.put("totalAmount", order.getTotalAmount());
|
|
|
|
|
+ orderMap.put("discountAmount", order.getDiscountAmount() != null ? order.getDiscountAmount() : 0);
|
|
|
|
|
+ orderMap.put("paidAmount", order.getPaidAmount() != null ? order.getPaidAmount() : order.getTotalAmount());
|
|
|
|
|
+ orderMap.put("payStatus", order.getPayStatus());
|
|
|
|
|
+ orderMap.put("payChannel", order.getPayChannel());
|
|
|
|
|
+ orderMap.put("status", order.getStatus());
|
|
|
|
|
+ orderMap.put("createTime", order.getCreateTime());
|
|
|
|
|
+ orderMap.put("payTime", order.getPayTime());
|
|
|
|
|
+ orderMap.put("confidence", order.getConfidence());
|
|
|
|
|
+ orderMap.put("refundStatus", order.getRefundStatus());
|
|
|
|
|
+ orderMap.put("refundAmount", order.getRefundAmount());
|
|
|
|
|
+ orderMap.put("currentRefundId", order.getCurrentRefundId());
|
|
|
|
|
+ orderMap.put("payScoreOrderId", order.getPayScoreOrderId());
|
|
|
|
|
+ return orderMap;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 构建商品列表(使用预查询数据)
|
|
|
|
|
+ */
|
|
|
|
|
+ private List<Map<String, Object>> buildProductList(List<OrderItemVO> goodsList, Map<Long, Integer> refundQtys) {
|
|
|
|
|
+ List<Map<String, Object>> products = new ArrayList<>();
|
|
|
|
|
+ for (OrderItemVO goods : goodsList) {
|
|
|
|
|
+ Map<String, Object> product = new HashMap<>();
|
|
|
|
|
+ product.put("id", goods.getId());
|
|
|
|
|
+ product.put("orderGoodsId", goods.getId());
|
|
|
|
|
+ product.put("productId", goods.getProductId());
|
|
|
|
|
+ product.put("name", goods.getProductName());
|
|
|
|
|
+ product.put("price", goods.getPrice());
|
|
|
|
|
+ product.put("quantity", goods.getProductNum());
|
|
|
|
|
+ product.put("image", normalizeImageUrl(goods.getPic()));
|
|
|
|
|
+ product.put("pic", goods.getPic());
|
|
|
|
|
+ product.put("subtotal", goods.getPrice() != null && goods.getProductNum() != null
|
|
|
|
|
+ ? goods.getPrice().multiply(new BigDecimal(goods.getProductNum()))
|
|
|
|
|
+ : new BigDecimal(0));
|
|
|
|
|
+ product.put("refundedQuantity", refundQtys.getOrDefault(goods.getId(), 0));
|
|
|
|
|
+ products.add(product);
|
|
|
|
|
+ }
|
|
|
|
|
+ return products;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 构建订单Map(含商品信息)
|
|
* 构建订单Map(含商品信息)
|
|
|
*/
|
|
*/
|