From d9546840d3cdb0fe19cc97906397586a8ebd2850 Mon Sep 17 00:00:00 2001 From: zhaogd Date: Sat, 26 Sep 2026 14:28:08 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=8F=91=E5=8D=A1=E5=BC=82=E6=AD=A5?= =?UTF-8?q?=E6=BF=80=E6=B4=BB=E7=AB=9E=E6=80=81=E4=BF=AE=E5=A4=8D=EF=BC=8C?= =?UTF-8?q?=E4=BC=99=E4=BC=B4=E5=8D=A1=E6=94=AF=E6=8C=81=E9=87=8D=E8=AF=95?= =?UTF-8?q?=E6=BF=80=E6=B4=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - consume() 异步激活改为事务提交后(afterCommit)触发,避免新设备未提交时激活报"设备不存在" - 激活重试任务覆盖无订单号的伙伴代销卡 - 移除废弃的 start.sh --- .../service/impl/DayCardOrderServiceImpl.java | 31 ++++++----- .../service/PartnerCardPoolService.java | 8 +++ .../impl/PartnerCardPoolServiceImpl.java | 25 ++++++++- start.sh | 52 ------------------- 4 files changed, 50 insertions(+), 66 deletions(-) delete mode 100755 start.sh diff --git a/src/main/java/io/as/modules/daycard/service/impl/DayCardOrderServiceImpl.java b/src/main/java/io/as/modules/daycard/service/impl/DayCardOrderServiceImpl.java index 54298e1..cb78ea0 100644 --- a/src/main/java/io/as/modules/daycard/service/impl/DayCardOrderServiceImpl.java +++ b/src/main/java/io/as/modules/daycard/service/impl/DayCardOrderServiceImpl.java @@ -24,6 +24,7 @@ import io.as.modules.device.dto.DeviceOrgContext; import io.as.modules.device.entity.DeviceEntity; import io.as.modules.device.service.DeviceResolveService; import io.as.modules.openapi.sign.ApiDeviceSignService; +import io.as.modules.openapi.service.PartnerCardPoolService; import io.as.modules.jst.service.JushitingApiService; import io.as.modules.jst.service.JstActivateCardResult; import io.as.modules.payment.service.WechatPayService; @@ -89,6 +90,9 @@ public class DayCardOrderServiceImpl extends ServiceImpl * @return 实际回退数量 */ int revert(String partnerId, int quantity); + + /** + * 重试激活伙伴消耗的天卡(无订单场景,供激活失败补偿任务调用) + * + * @param poolId 天卡池ID + * @param deviceId 设备ID + */ + void retryActivate(Long poolId, Long deviceId); } diff --git a/src/main/java/io/as/modules/openapi/service/impl/PartnerCardPoolServiceImpl.java b/src/main/java/io/as/modules/openapi/service/impl/PartnerCardPoolServiceImpl.java index 6810aa9..8e4a5d1 100644 --- a/src/main/java/io/as/modules/openapi/service/impl/PartnerCardPoolServiceImpl.java +++ b/src/main/java/io/as/modules/openapi/service/impl/PartnerCardPoolServiceImpl.java @@ -27,6 +27,8 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.task.TaskExecutor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.TransactionSynchronization; +import org.springframework.transaction.support.TransactionSynchronizationManager; import java.util.*; @@ -243,9 +245,19 @@ public class PartnerCardPoolServiceImpl extends ServiceImpl activateCardAsync(poolId, deviceId)); + if (TransactionSynchronizationManager.isSynchronizationActive()) { + TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { + @Override + public void afterCommit() { + activateExecutor.execute(() -> activateCardAsync(poolId, deviceId)); + } + }); + } else { + activateExecutor.execute(() -> activateCardAsync(poolId, deviceId)); + } // 8. 返回天卡信息(异步激活中,客户端通过checkBenefits轮询确认) // thirdCardNo不暴露给第三方,App通过init+checkBenefits自行获取播放凭证 @@ -290,6 +302,17 @@ public class PartnerCardPoolServiceImpl extends ServiceImpl activateCardAsync(poolId, deviceId)); + } + /** 按设备标识查找已有设备,找不到返回新实体(标识优先级:mac > wifiMac > deviceUid > deviceSn) */ private DeviceEntity findOrCreateDevice(String mac, String wifiMac, String deviceUid, String deviceSn) { DeviceEntity existing = null; diff --git a/start.sh b/start.sh deleted file mode 100755 index 805ea17..0000000 --- a/start.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash -# =========================================================== -# start.sh — daycard-openapi 后端一键启动脚本 -# 项目: Spring Boot 2.6.6 / Java 17 / 端口 8084 -# -# 用法: -# ./start.sh # clean 后启动(推荐) -# ./start.sh --no-clean # 跳过 clean,加速重复启动 -# ./start.sh -Dspring-boot.run.jvmArguments="-Dserver.port=8090" -# # 透传任意 maven / spring-boot 参数 -# =========================================================== -set -euo pipefail -cd "$(dirname "$0")" - -# ---- 1. 选定 Java 17(找不到则回退 Java 8)---- -JDK17_PREF="/Users/zhaoguodong/Library/Java/JavaVirtualMachines/jbr-17.0.14/Contents/Home" -if [[ -d "$JDK17_PREF" ]]; then - export JAVA_HOME="$JDK17_PREF" -elif JDK17_AUTO="$(/usr/libexec/java_home -v 17 2>/dev/null)"; then - export JAVA_HOME="$JDK17_AUTO" -elif JDK8_AUTO="$(/usr/libexec/java_home -v 1.8 2>/dev/null)"; then - export JAVA_HOME="$JDK8_AUTO" - echo "⚠️ 未找到 Java 17,回退到 Java 8" >&2 -else - echo "❌ 找不到 Java 17 或 Java 8,请安装 JDK 或修改本脚本里的 JAVA_HOME" >&2 - exit 1 -fi -echo "==> JAVA_HOME=$JAVA_HOME" -"$JAVA_HOME/bin/java" -version - -# ---- 2. 解析参数 ---- -DO_CLEAN=1 -PASSTHRU=() -for arg in "$@"; do - case "$arg" in - --no-clean) DO_CLEAN=0 ;; - --clean) DO_CLEAN=1 ;; - *) PASSTHRU+=("$arg") ;; - esac -done - -# ---- 3. 启动 ---- -# clean 可清掉 target 中残留的 stale class(曾出现 AsApplication 2.class -# 导致“找到两个 main class”无法启动的问题)。 -GOAL="spring-boot:run" -if [[ "$DO_CLEAN" -eq 1 ]]; then - GOAL="clean spring-boot:run" - echo "==> mvn clean spring-boot:run" -else - echo "==> mvn spring-boot:run" -fi -mvn $GOAL "${PASSTHRU[@]+"${PASSTHRU[@]}"}"