会员积分改版V9

This commit is contained in:
2026-08-11 14:27:21 +08:00
parent 81ef619ad3
commit 45b9409fe8
2 changed files with 45 additions and 10 deletions
@@ -61,7 +61,7 @@ async def amain(argv: list[str]) -> int:
description="历史用户积分迁移",
source_type=CreditBalanceSourceType.LEGACY_MIGRATION.value,
valid_from=migration_time,
expires_at=add_natural_months(migration_time, 1),
expires_at=add_natural_months(migration_time, 12),
credit_level=CreditLevel.GENERAL.value,
source_id=user_id,
related_id=user_id,
+38 -3
View File
@@ -625,8 +625,32 @@ async def _close_wechat_order(db: AsyncSession, order: PaymentOrder, db_configs:
if code == 204:
logger.info(f"WeChat order closed: order_no={order.order_no}")
return True
else:
logger.error(f"WeChat close failed: order_no={order.order_no}, code={code}, result={result}")
data = _parse_wechat_result(result)
error_code = str(
data.get("code")
or data.get("err_code")
or data.get("error_code")
or ""
).upper()
raw_result = str(result).upper()
# 微信明确返回“订单不存在”时,同样视为没有远端订单需要继续关闭。
# 只兼容明确的订单不存在错误,不吞掉签名、网络、系统等其他异常。
if error_code in {"ORDER_NOT_EXIST", "ORDERNOTEXIST"} or (
code == 404
and ("ORDER_NOT_EXIST" in raw_result or "ORDERNOTEXIST" in raw_result)
):
logger.info(
f"WeChat order not exist, treat as closed for local expiry: "
f"order_no={order.order_no}, code={code}, error_code={error_code or 'unknown'}"
)
return True
logger.error(
f"WeChat close failed: order_no={order.order_no}, "
f"code={code}, result={result}"
)
return False
except Exception as e:
logger.exception(f"WeChat close exception: order_no={order.order_no}")
@@ -885,7 +909,18 @@ async def _close_alipay_order(db: AsyncSession, order: PaymentOrder, db_configs:
if response.is_success():
logger.info(f"Alipay order closed: order_no={order.order_no}")
return True
else:
# 支付宝明确返回“交易不存在”时,远端没有可继续关闭的交易。
# 对本地已经达到超时时间的 pending 订单,可视为关单目标已经满足,
# 避免 Celery 每分钟对同一订单无限重复调用 trade.close。
if str(response.sub_code or "").upper() == "ACQ.TRADE_NOT_EXIST":
logger.info(
f"Alipay trade not exist, treat as closed for local expiry: "
f"order_no={order.order_no}, code={response.code}, "
f"sub_code={response.sub_code}"
)
return True
logger.error(
f"Alipay close failed: code={response.code}, "
f"msg={response.msg}, sub_code={response.sub_code}, "