From d879291f56eb64adffa44f763238ea736b4be99b Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期六, 12 九月 2026 16:16:46 +0800
Subject: [PATCH] feat(payment): 订单固定收款子商户并校验支付回调

---
 talent-card-server/src/main/java/com/talentcard/server/business/order/OrderService.java |   17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/talent-card-server/src/main/java/com/talentcard/server/business/order/OrderService.java b/talent-card-server/src/main/java/com/talentcard/server/business/order/OrderService.java
index bf51ee3..c233c38 100644
--- a/talent-card-server/src/main/java/com/talentcard/server/business/order/OrderService.java
+++ b/talent-card-server/src/main/java/com/talentcard/server/business/order/OrderService.java
@@ -9,6 +9,7 @@
 import com.talentcard.server.business.BusinessIdGenerator;
 import com.talentcard.server.business.DatabaseRows;
 import com.talentcard.server.business.MoneyUtils;
+import com.talentcard.server.business.merchant.MerchantPaymentReadinessService;
 import com.talentcard.server.business.payment.HuifuRefundService;
 import com.talentcard.server.business.PageResult;
 import com.talentcard.server.common.BusinessException;
@@ -25,10 +26,12 @@
 
 	private final JdbcTemplate jdbcTemplate;
 	private final HuifuRefundService refundService;
+	private final MerchantPaymentReadinessService merchantPaymentReadinessService;
 
-	public OrderService(JdbcTemplate jdbcTemplate, HuifuRefundService refundService) {
+	public OrderService(JdbcTemplate jdbcTemplate, HuifuRefundService refundService, MerchantPaymentReadinessService merchantPaymentReadinessService) {
 		this.jdbcTemplate = jdbcTemplate;
 		this.refundService = refundService;
+		this.merchantPaymentReadinessService = merchantPaymentReadinessService;
 	}
 
 	@Transactional
@@ -38,11 +41,16 @@
 		long subsidyAmount = MoneyUtils.yuanToCent(request.subsidyAmount());
 		long payAmount = MoneyUtils.yuanToCent(request.payAmount());
 		LocalDateTime expiresAt = payAmount == 0 ? null : LocalDateTime.now().plusMinutes(15);
+		// 需要支付的订单同样在创建时固定收款子商户,支付请求不再推断收款方。
+		MerchantPaymentReadinessService.CollectingMerchant collectingMerchant = payAmount > 0
+				? merchantPaymentReadinessService.requireCollectingMerchant(request.merchantId(), request.storeId())
+				: null;
 		String cardLevel = jdbcTemplate.query("select card_level from talent_card where id = ? and deleted = 0", rs -> rs.next() ? rs.getString(1) : null, request.cardId());
 		jdbcTemplate.update("""
 				insert into benefit_order(order_no, talent_id, card_id, card_level_snapshot, benefit_id, merchant_id, store_id,
-				                          order_type, order_amount, subsidy_amount, base_pay_amount, pay_amount, expires_at, order_status, verify_status)
-				values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0)
+				                          order_type, order_amount, subsidy_amount, base_pay_amount, pay_amount, expires_at,
+				                          collect_onboarding_id, collect_store_id, collect_huifu_id, order_status, verify_status)
+				values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0)
 				""",
 				orderNo,
 				request.talentId(),
@@ -57,6 +65,9 @@
 				payAmount,
 				payAmount,
 				expiresAt,
+				MerchantPaymentReadinessService.CollectingMerchant.applicationIdOf(collectingMerchant),
+				MerchantPaymentReadinessService.CollectingMerchant.storeIdOf(collectingMerchant),
+				MerchantPaymentReadinessService.CollectingMerchant.huifuIdOf(collectingMerchant),
 				payAmount == 0 ? 1 : 0);
 		return detail(orderNo);
 	}

--
Gitblit v1.7.1