diff --git a/src/main/java/com/aida/seller/module/order/controller/OrderController.java b/src/main/java/com/aida/seller/module/order/controller/OrderController.java index 5d06246..124e461 100644 --- a/src/main/java/com/aida/seller/module/order/controller/OrderController.java +++ b/src/main/java/com/aida/seller/module/order/controller/OrderController.java @@ -5,6 +5,7 @@ import com.aida.seller.common.result.PageResponse; import com.aida.seller.common.result.Response; import com.aida.seller.module.order.dto.OrderListDTO; import com.aida.seller.module.order.service.OrderService; +import com.aida.seller.module.order.vo.BuyerOrderVO; import com.aida.seller.module.order.vo.OrderSummaryVO; import com.aida.seller.module.order.vo.OrderVO; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -12,10 +13,13 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** * My Orders - 订单管理控制器 */ @@ -61,4 +65,10 @@ public class OrderController { IPage orderPage = orderService.getOrderPage(dto, sellerId); return Response.success(PageResponse.success(orderPage)); } + + @PostMapping("/buyer/orders") + @Operation(summary = "根据买家ID查询订单列表(供远程调用)") + public Response> getOrdersByBuyerId(@RequestParam Long buyerId) { + return Response.success(orderService.getOrdersByBuyerId(buyerId)); + } } diff --git a/src/main/java/com/aida/seller/module/order/entity/OrderInfoEntity.java b/src/main/java/com/aida/seller/module/order/entity/OrderInfoEntity.java index e6ea3ab..8cc02ea 100644 --- a/src/main/java/com/aida/seller/module/order/entity/OrderInfoEntity.java +++ b/src/main/java/com/aida/seller/module/order/entity/OrderInfoEntity.java @@ -31,6 +31,9 @@ public class OrderInfoEntity implements Serializable { /** 订单状态:0-未支付,1-已支付,2-已取消 */ private Integer status; + /** 店铺名称 */ + private String shopName; + /** 订单总金额(HK$) */ private BigDecimal totalPrice; diff --git a/src/main/java/com/aida/seller/module/order/entity/OrderItemEntity.java b/src/main/java/com/aida/seller/module/order/entity/OrderItemEntity.java index b6ebdb2..5a185e2 100644 --- a/src/main/java/com/aida/seller/module/order/entity/OrderItemEntity.java +++ b/src/main/java/com/aida/seller/module/order/entity/OrderItemEntity.java @@ -1,6 +1,7 @@ package com.aida.seller.module.order.entity; import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; @@ -8,6 +9,7 @@ import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.List; /** * 订单商品明细表 @@ -53,4 +55,8 @@ public class OrderItemEntity implements Serializable { /** 是否删除:0-否,1-是 */ @TableLogic private Integer deleted; + + /** 商品分类列表 */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List productCategory; } diff --git a/src/main/java/com/aida/seller/module/order/service/OrderService.java b/src/main/java/com/aida/seller/module/order/service/OrderService.java index d3cca47..666a1b0 100644 --- a/src/main/java/com/aida/seller/module/order/service/OrderService.java +++ b/src/main/java/com/aida/seller/module/order/service/OrderService.java @@ -1,10 +1,13 @@ package com.aida.seller.module.order.service; import com.aida.seller.module.order.dto.OrderListDTO; +import com.aida.seller.module.order.vo.BuyerOrderVO; import com.aida.seller.module.order.vo.OrderSummaryVO; import com.aida.seller.module.order.vo.OrderVO; import com.baomidou.mybatisplus.core.metadata.IPage; +import java.util.List; + /** * 订单服务接口 */ @@ -26,4 +29,12 @@ public interface OrderService { * @return 分页后的订单列表,按下单时间降序排列 */ IPage getOrderPage(OrderListDTO dto, Long sellerId); + + /** + * 根据买家ID查询订单列表(供远程调用) + * + * @param buyerId 买家ID + * @return 买家订单列表 + */ + List getOrdersByBuyerId(Long buyerId); } diff --git a/src/main/java/com/aida/seller/module/order/service/OrderServiceImpl.java b/src/main/java/com/aida/seller/module/order/service/OrderServiceImpl.java index 1f8c2ae..fe093bf 100644 --- a/src/main/java/com/aida/seller/module/order/service/OrderServiceImpl.java +++ b/src/main/java/com/aida/seller/module/order/service/OrderServiceImpl.java @@ -6,6 +6,8 @@ import com.aida.seller.module.order.entity.OrderInfoEntity; import com.aida.seller.module.order.entity.OrderItemEntity; import com.aida.seller.module.order.mapper.OrderInfoMapper; import com.aida.seller.module.order.mapper.OrderItemMapper; +import com.aida.seller.module.order.vo.BuyerOrderItemVO; +import com.aida.seller.module.order.vo.BuyerOrderVO; import com.aida.seller.module.order.vo.OrderSummaryVO; import com.aida.seller.module.order.vo.OrderVO; import com.aida.seller.util.MinioUtil; @@ -123,4 +125,49 @@ public class OrderServiceImpl extends ServiceImpl getOrdersByBuyerId(Long buyerId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(OrderInfoEntity::getBuyerId, buyerId); + wrapper.orderByDesc(OrderInfoEntity::getUpdateTime); + + List orders = this.list(wrapper); + if (orders.isEmpty()) { + return Collections.emptyList(); + } + + List orderIds = orders.stream() + .map(OrderInfoEntity::getId) + .collect(Collectors.toList()); + + Map> itemsMap = orderItemMapper.selectList( + new LambdaQueryWrapper() + .in(OrderItemEntity::getOrderId, orderIds) + ).stream() + .collect(Collectors.groupingBy(OrderItemEntity::getOrderId)); + + return orders.stream().map(order -> { + BuyerOrderVO vo = new BuyerOrderVO(); + vo.setOrderId(order.getId()); + vo.setUpdateTime(order.getUpdateTime()); + vo.setTotalPrice(order.getTotalPrice()); + vo.setStatus(order.getStatus()); + vo.setShopName(order.getShopName()); + + List items = itemsMap.getOrDefault(order.getId(), Collections.emptyList()); + List itemVOs = items.stream().map(item -> { + BuyerOrderItemVO itemVO = new BuyerOrderItemVO(); + itemVO.setId(item.getId()); + itemVO.setThumbnailUrl(minioUtil.processMinioResource(item.getThumbnailUrl(), CommonConstants.MINIO_PATH_TIMEOUT)); + itemVO.setListingName(item.getListingName()); + itemVO.setProductCategory(item.getProductCategory()); + itemVO.setPrice(item.getPrice()); + return itemVO; + }).collect(Collectors.toList()); + vo.setItems(itemVOs); + + return vo; + }).collect(Collectors.toList()); + } } diff --git a/src/main/java/com/aida/seller/module/order/vo/BuyerOrderItemVO.java b/src/main/java/com/aida/seller/module/order/vo/BuyerOrderItemVO.java new file mode 100644 index 0000000..9f27b16 --- /dev/null +++ b/src/main/java/com/aida/seller/module/order/vo/BuyerOrderItemVO.java @@ -0,0 +1,33 @@ +package com.aida.seller.module.order.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +@Data +@Schema(description = "买家订单商品明细") +public class BuyerOrderItemVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "订单商品ID") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @Schema(description = "商品缩略图URL") + private String thumbnailUrl; + + @Schema(description = "商品名称") + private String listingName; + + @Schema(description = "商品分类列表") + private List productCategory; + + @Schema(description = "成交单价(HK$)") + private BigDecimal price; +} diff --git a/src/main/java/com/aida/seller/module/order/vo/BuyerOrderVO.java b/src/main/java/com/aida/seller/module/order/vo/BuyerOrderVO.java new file mode 100644 index 0000000..32539d7 --- /dev/null +++ b/src/main/java/com/aida/seller/module/order/vo/BuyerOrderVO.java @@ -0,0 +1,37 @@ +package com.aida.seller.module.order.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@Schema(description = "买家订单信息") +public class BuyerOrderVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "订货号") + @JsonSerialize(using = ToStringSerializer.class) + private Long orderId; + + @Schema(description = "订单更新时间") + private LocalDateTime updateTime; + + @Schema(description = "订单总金额(HK$)") + private BigDecimal totalPrice; + + @Schema(description = "订单状态:0-未支付,1-已支付,2-已取消") + private Integer status; + + @Schema(description = "店铺名称") + private String shopName; + + @Schema(description = "商品明细列表") + private List items; +} diff --git a/src/main/resources/db/schema.sql b/src/main/resources/db/schema.sql index f0d0c2d..bb3525f 100644 --- a/src/main/resources/db/schema.sql +++ b/src/main/resources/db/schema.sql @@ -88,6 +88,7 @@ CREATE TABLE seller_order_item ( price DECIMAL(10,2) COMMENT '成交单价(HK$)', create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', deleted INT(1) DEFAULT 0 COMMENT '是否删除:0-否,1-是', + product_category JSON COMMENT '商品分类列表', INDEX idx_order_id (order_id), INDEX idx_listing_id (listing_id), INDEX idx_deleted (deleted)