From bea1783c7c11f9db90eefae698a99a0116f61fdb Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 10 Sep 2026 16:38:26 +0800 Subject: [PATCH] 11 --- .../hard/api/dto/hard/HardCreateOrderDto.java | 15 ++++++++ .../impl/order/HardOrderServiceImpl.java | 37 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HardCreateOrderDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HardCreateOrderDto.java index b0f58a0bc..8a4b1ee8b 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HardCreateOrderDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HardCreateOrderDto.java @@ -4,7 +4,9 @@ import com.bsd.pjcloud.hard.api.constant.HardTypeEnum; import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum; import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum; import com.bsd.pjcloud.hard.api.dto.order.HardCreateCarDto; +import com.bsd.pjcloud.hard.api.dto.order.HardOrderEvidenceMetadataDto; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; @@ -78,4 +80,17 @@ public class HardCreateOrderDto { @Schema(description = "离线支付是否成功") private Boolean offlinePaySuccess; + + /** + * 当前终端应用版本,仅用于订单证据问题追溯,不参与订单计价和支付。 + */ + @Schema(description = "终端应用版本") + private String appVersion; + + /** + * 人脸支付成功后需要挂接的证据元数据;旧终端不传时保持订单创建协议兼容。 + */ + @Schema(description = "订单识别证据元数据") + @Valid + private List evidenceMetadataList; } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java index 7d9737b13..d8464702b 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java @@ -109,6 +109,8 @@ import org.springframework.context.annotation.Lazy; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.TransactionSynchronization; +import org.springframework.transaction.support.TransactionSynchronizationManager; import org.springframework.validation.annotation.Validated; import java.math.BigDecimal; @@ -376,6 +378,7 @@ public class HardOrderServiceImpl extends ServiceImpl { + try { + hardOrderEvidenceImageService.registerOrderEvidence(order, dto.getEvidenceMetadataList(), dto.getAppVersion()); + } catch (Exception exception) { + // 终端本地队列仍会按 androidOrderCode 补交,服务端占位失败不得改变订单支付结果。 + log.warn("|{}|订单证据占位登记失败|orderId:{}|error:{}|", TAG, order.getId(), exception.getMessage()); + } + }; + if (!TransactionSynchronizationManager.isSynchronizationActive()) { + action.run(); + return; + } + TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { + /** + * 主订单事务提交后使用独立事务登记证据占位,避免文件或证据表异常污染资金事务。 + */ + @Override + public void afterCommit() { + action.run(); + } + }); + } + /** * 创建设备二维码扫一扫订单 */