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