From 941e1e04af93f0ee4532994d34d630f858219141 Mon Sep 17 00:00:00 2001 From: xupei Date: Tue, 26 May 2026 17:41:18 +0800 Subject: [PATCH] =?UTF-8?q?TASK:=E4=B9=B0=E5=AE=B6=E7=AB=AF/=E5=8D=96?= =?UTF-8?q?=E5=AE=B6=E7=AB=AF=E6=8E=A5=E5=85=A5=E6=94=AF=E4=BB=98=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 +++ .../order/controller/OrderController.java | 10 ++++++ .../order/dto/UpdateOrderStatusDTO.java | 13 +++++-- .../module/order/dto/UpdatePaymentIdDTO.java | 23 ++++++++++++ .../module/order/entity/OrderInfoEntity.java | 3 ++ .../module/order/service/OrderService.java | 7 ++++ .../order/service/OrderServiceImpl.java | 35 ++++++++++++++++--- src/main/resources/db/schema.sql | 7 ++++ 8 files changed, 95 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/aida/seller/module/order/dto/UpdatePaymentIdDTO.java diff --git a/pom.xml b/pom.xml index a99708b..0bf414b 100644 --- a/pom.xml +++ b/pom.xml @@ -176,6 +176,11 @@ org.springframework.cloud spring-cloud-starter-loadbalancer + + + org.springframework.boot + spring-boot-starter-aop + 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 d4f4f8b..46a0076 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 @@ -9,6 +9,7 @@ import com.aida.seller.module.order.dto.CreateOrderDTO; import com.aida.seller.module.order.dto.OrderListDTO; import com.aida.seller.module.order.dto.BuyerOrdersDTO; import com.aida.seller.module.order.dto.UpdateOrderStatusDTO; +import com.aida.seller.module.order.dto.UpdatePaymentIdDTO; import com.aida.seller.module.order.service.OrderService; import com.aida.seller.module.order.vo.AssetsItemVO; import com.aida.seller.module.order.vo.BuyerOrderVO; @@ -96,4 +97,13 @@ public class OrderController { public Response> getAssetsPage(@RequestBody AssetsDTO dto) { return Response.success(PageResponse.success(orderService.getAssetsPage(dto))); } + + @InternalOnly + @PutMapping("/payment-id/batch") + @Operation(summary = "批量回填PaymentId(仅内部服务调用)") + public Response updatePaymentIdByIds(@RequestBody UpdatePaymentIdDTO dto) { + orderService.updatePaymentIdByIds(dto.getOrderIds(), dto.getPaymentId()); + return Response.success(); + } + } diff --git a/src/main/java/com/aida/seller/module/order/dto/UpdateOrderStatusDTO.java b/src/main/java/com/aida/seller/module/order/dto/UpdateOrderStatusDTO.java index dc2522a..f5ce601 100644 --- a/src/main/java/com/aida/seller/module/order/dto/UpdateOrderStatusDTO.java +++ b/src/main/java/com/aida/seller/module/order/dto/UpdateOrderStatusDTO.java @@ -2,22 +2,29 @@ package com.aida.seller.module.order.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import lombok.NoArgsConstructor; import java.io.Serializable; import java.util.List; -/** - * 批量修改订单状态请求参数 - */ @Data +@NoArgsConstructor @Schema(description = "批量修改订单状态请求参数") public class UpdateOrderStatusDTO implements Serializable { private static final long serialVersionUID = 1L; + @Schema(description = "交易流水号") + private Long paymentId; + @Schema(description = "订单ID列表") private List orderIds; @Schema(description = "目标状态:0-未支付,1-已支付,2-已取消") private Integer status; + + public UpdateOrderStatusDTO(Integer status, Long paymentId) { + this.status = status; + this.paymentId = paymentId; + } } diff --git a/src/main/java/com/aida/seller/module/order/dto/UpdatePaymentIdDTO.java b/src/main/java/com/aida/seller/module/order/dto/UpdatePaymentIdDTO.java new file mode 100644 index 0000000..b74e7a4 --- /dev/null +++ b/src/main/java/com/aida/seller/module/order/dto/UpdatePaymentIdDTO.java @@ -0,0 +1,23 @@ +package com.aida.seller.module.order.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 批量回填PaymentId请求参数 + */ +@Data +@Schema(description = "批量回填PaymentId请求参数") +public class UpdatePaymentIdDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "订单ID列表") + private List orderIds; + + @Schema(description = "支付单ID") + private Long paymentId; +} 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 8cc02ea..8888298 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 @@ -57,4 +57,7 @@ public class OrderInfoEntity implements Serializable { /** 是否删除:0-否,1-是 */ @TableLogic private Integer deleted; + + /** 交易流水号 */ + private String paymentId; } 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 4977f4f..de3349b 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 @@ -75,4 +75,11 @@ public interface OrderService { * @return 已购买的商品ID列表 */ List getPurchasedListingIds(List listingIds, Long buyerId); + + /** + * 根据订单号回填交易流水号 + * @param orderIds 订单编号列表 + * @param paymentId 交易流水号(仅供内部使用,不对外) + */ + void updatePaymentIdByIds(List orderIds, Long paymentId); } 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 13bf065..3e3f341 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 @@ -28,6 +28,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -43,6 +44,7 @@ import java.util.stream.Collectors; /** * 订单服务实现 */ +@Slf4j @Service @RequiredArgsConstructor public class OrderServiceImpl extends ServiceImpl implements OrderService { @@ -296,19 +298,31 @@ public class OrderServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.in(OrderInfoEntity::getId, dto.getOrderIds()) - .set(OrderInfoEntity::getStatus, dto.getStatus()); - boolean updated = this.update(updateWrapper); + if (dto.getPaymentId() != null) { + updateWrapper.eq(OrderInfoEntity::getPaymentId, dto.getPaymentId()) + .set(OrderInfoEntity::getStatus, dto.getStatus()); + } else { + updateWrapper.in(OrderInfoEntity::getId, dto.getOrderIds()) + .set(OrderInfoEntity::getStatus, dto.getStatus()); + } + updated = this.update(updateWrapper); + if (!updated) { throw new BusinessException("订单不存在或无权修改"); + } else { + log.info("[Order] PaymentId:{} / OrderId:{}, 更新订单状态", dto.getPaymentId(), dto.getOrderIds()); } } @@ -346,4 +360,15 @@ public class OrderServiceImpl extends ServiceImpl orderIds, Long paymentId) { + if (CollectionUtils.isEmpty(orderIds)) { + throw new BusinessException("订单ID列表不能为空"); + } + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.in(OrderInfoEntity::getId, orderIds) + .set(OrderInfoEntity::getPaymentId, paymentId); + this.update(updateWrapper); + } } diff --git a/src/main/resources/db/schema.sql b/src/main/resources/db/schema.sql index 82543be..0b96b44 100644 --- a/src/main/resources/db/schema.sql +++ b/src/main/resources/db/schema.sql @@ -18,6 +18,9 @@ CREATE TABLE seller_listing ( INDEX idx_deleted (deleted) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表'; +ALTER TABLE seller_listing + ADD COLUMN sales_volume INT DEFAULT 0 COMMENT '销量'; + -- 商品图片表 CREATE TABLE seller_listing_image ( id BIGINT PRIMARY KEY COMMENT '图片ID', @@ -93,3 +96,7 @@ CREATE TABLE seller_order_item ( INDEX idx_listing_id (listing_id), INDEX idx_deleted (deleted) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单商品明细表'; + +-- 新增 payment_id 字段 +ALTER TABLE seller_orders + ADD COLUMN payment_id VARCHAR(64) DEFAULT NULL COMMENT '交易流水号(关联支付表)'; \ No newline at end of file