11
This commit is contained in:
1 parent
10eec976c2
commit
bea1783c7c
2 files changed
+52
No files matched your search
+15
@@ -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<HardOrderEvidenceMetadataDto> evidenceMetadataList;
|
||||
}
|
||||
+37
@@ -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<HardOrderMapper, HardOrder
|
||||
orderObj.setWalletId(wallet.getId());
|
||||
}
|
||||
baseMapper.insert(orderObj);
|
||||
registerEvidenceAfterCommit(orderObj, dto);
|
||||
// 扣减库存
|
||||
getSelf().fastenerInventory(orderObj, YesNoEnum.YES);
|
||||
// 钱包支付或者核销
|
||||
@@ -424,6 +427,40 @@ public class HardOrderServiceImpl extends ServiceImpl<HardOrderMapper, HardOrder
|
||||
return orderObj.getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* 仅为人脸支付订单在主事务提交后登记证据占位,证据库异常不回滚已成功的订单和资金结果。
|
||||
*
|
||||
* @param order 已写入主库的人脸支付订单
|
||||
* @param dto 终端订单请求及可选证据元数据
|
||||
*/
|
||||
private void registerEvidenceAfterCommit(HardOrderEntity order, HardCreateOrderDto dto) {
|
||||
if (!Objects.equals(order.getPayType(), HardPayTypeEnum.FACE.getType())
|
||||
|| dto.getEvidenceMetadataList() == null || dto.getEvidenceMetadataList().isEmpty()) {
|
||||
return;
|
||||
}
|
||||
Runnable action = () -> {
|
||||
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();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建设备二维码扫一扫订单
|
||||
*/
|
||||
|
||||
Reference in new issue
Block a user