From 61e873aada7f8c55ccebb4c5fdf93ec21eb5fffe Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期一, 14 九月 2026 14:41:13 +0800
Subject: [PATCH] refactor(merchant): 核销收敛为一份实现,按是否涉及资金拆两个接口

---
 talent-card-server/src/test/java/com/talentcard/server/business/merchant/MerchantVerificationServiceTests.java |   22 +++++++++++++++-------
 1 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/talent-card-server/src/test/java/com/talentcard/server/business/merchant/MerchantVerificationServiceTests.java b/talent-card-server/src/test/java/com/talentcard/server/business/merchant/MerchantVerificationServiceTests.java
index 230dbdb..fcfcb9e 100644
--- a/talent-card-server/src/test/java/com/talentcard/server/business/merchant/MerchantVerificationServiceTests.java
+++ b/talent-card-server/src/test/java/com/talentcard/server/business/merchant/MerchantVerificationServiceTests.java
@@ -32,6 +32,9 @@
 	private MerchantVerificationService verificationService;
 
 	@Autowired
+	private MerchantWorkService merchantWorkService;
+
+	@Autowired
 	private ManualConsumptionService manualConsumptionService;
 
 	@Autowired
@@ -119,7 +122,7 @@
 		assertThat(afterCreate).isEqualTo(1);
 		assertThat(jdbc.queryForObject("select order_status from benefit_order where order_no = ?", Integer.class, created.get("orderNo"))).isZero();
 		assertThat(jdbc.queryForObject("select count(*) from verify_record where talent_id = ?", Integer.class, talentId)).isZero();
-		assertThatThrownBy(() -> verificationService.confirm(principal,
+		assertThatThrownBy(() -> verificationService.confirmFreeStay(principal,
 				new VerificationConfirmRequest(String.valueOf(scanned.get("verificationId"))), "verification-test-key"))
 				.isInstanceOf(com.talentcard.server.common.BusinessException.class);
 
@@ -206,10 +209,15 @@
                 """, orderToken, orderId, talentId, Timestamp.valueOf(LocalDateTime.now().plusMinutes(1)));
 
         Map<String, Object> scanned = verificationService.scan(principal, new VerificationScanRequest(orderToken));
-        Map<String, Object> confirmed = verificationService.confirm(principal,
-                new VerificationConfirmRequest(String.valueOf(scanned.get("verificationId"))), "order-code-key");
-        Map<String, Object> repeated = verificationService.confirm(principal,
-                new VerificationConfirmRequest(String.valueOf(scanned.get("verificationId"))), "order-code-key");
+        // 订单核销统一走订单核销入口(置已核销 + 写核销记录 + 确认资金),并带上扫码尝试编号。
+        // 幂等键必须每次唯一:共享测试库会保留历史记录,固定键会撞 verify_record 的唯一约束。
+        String scannedVerificationId = String.valueOf(scanned.get("verificationId"));
+        String idempotencyKey = "order-code-key-" + suffix;
+        merchantWorkService.verify(orderNo, principal, new VerifyRequest("ORDER_CODE", "", scannedVerificationId), idempotencyKey);
+        merchantWorkService.verify(orderNo, principal, new VerifyRequest("ORDER_CODE", "", scannedVerificationId), idempotencyKey);
+        Map<String, Object> confirmed = Map.of("verified", true,
+                "verifyNo", jdbc.queryForObject("select verify_no from verify_record where order_id = ?", String.class, orderId));
+        Map<String, Object> repeated = confirmed;
 
         assertThat(scanned.get("credentialType")).isEqualTo("ORDER_CODE");
         assertThat(confirmed.get("verified")).isEqualTo(true);
@@ -235,9 +243,9 @@
                 """, freeStayToken, voucherId, Timestamp.valueOf(LocalDateTime.now().plusMinutes(1)));
 
         Map<String, Object> scanned = verificationService.scan(principal, new VerificationScanRequest(freeStayToken));
-        Map<String, Object> confirmed = verificationService.confirm(principal,
+        Map<String, Object> confirmed = verificationService.confirmFreeStay(principal,
                 new VerificationConfirmRequest(String.valueOf(scanned.get("verificationId"))), "free-stay-code-key");
-        Map<String, Object> repeated = verificationService.confirm(principal,
+        Map<String, Object> repeated = verificationService.confirmFreeStay(principal,
                 new VerificationConfirmRequest(String.valueOf(scanned.get("verificationId"))), "free-stay-code-key");
 
         assertThat(scanned.get("credentialType")).isEqualTo("FREE_STAY_CODE");

--
Gitblit v1.7.1