fix(退款): 修复创建退款申请插入审批尝试记录失败
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m23s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m23s
创建路径把审批尝试记录在事务外预构造后原样插入,缺失只能在事务内生成的 attempt_no 与 package_usage_snapshot,触发 NOT NULL 与 CHECK 约束, 接口统一返回 2002 数据库错误(5xx 脱敏掩盖了具体消息)。 - 尝试记录收敛为事务内唯一构造点 buildAttempt,CreateCommand 与 ResubmitCommand 只传按冻结商户派生的渠道退款请求号 - TriggerHistorical 补上缺失的尝试记录插入,此前 attempt.ID 恒为 0, 必然以「关联已变化」冲突收场 - 按「首次接入企业微信审批的实例」语义回写 tb_refund_request.approval_instance_id,恢复本地人工终审的 IS NULL 防重保护与退款导出投影
This commit is contained in:
@@ -254,20 +254,12 @@ func validateFrozenRefundAmount(amount, frozenActualReceivedAmount int64) error
|
||||
return nil
|
||||
}
|
||||
|
||||
// buildAttemptFromDecision 依据方式判定结果构造一条不可变审批尝试记录。
|
||||
func buildAttemptFromDecision(decision *refundMethodDecision, refund *model.RefundRequest, config *model.WechatConfig, now time.Time) *model.RefundRequestAttempt {
|
||||
attempt := &model.RefundRequestAttempt{
|
||||
RefundID: refund.ID,
|
||||
Method: refund.Method,
|
||||
RefundAmount: refund.RequestedRefundAmount,
|
||||
FrozenActualReceivedAmount: decision.FrozenActualReceivedAmount,
|
||||
RefundReason: refund.RefundReason,
|
||||
CustomerAccountInfo: refund.CustomerAccountInfo,
|
||||
CustomerVoucherKeys: refund.RefundVoucherKey,
|
||||
SubmittedByAccountID: refund.Creator,
|
||||
// buildChannelRefundRequestNo 仅在原路退款方式下按冻结商户派生本次尝试的渠道退款请求号。
|
||||
// 请求号由收口审批申请用例冻结到不可变尝试记录上,同一尝试的渠道重试复用它作为幂等标识,
|
||||
// 重提生成新值;非原路方式返回空串。
|
||||
func buildChannelRefundRequestNo(method string, config *model.WechatConfig) string {
|
||||
if method != constants.RefundMethodOriginalRoute {
|
||||
return ""
|
||||
}
|
||||
if refund.Method == constants.RefundMethodOriginalRoute {
|
||||
attempt.ChannelRefundRequestNo = requestChannelRefundNo(config, now)
|
||||
}
|
||||
return attempt
|
||||
return requestChannelRefundNo(config, time.Now())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user