feat(api+app): 对话阶段化、回忆录流水线与客户端会话体验
- DB: segments 用户输入文本(Alembic 0002) - Chat: 阶段检测/阶段提示/回复限制,编排与访谈/画像 prompts 调整 - Memoir: 忠实度检查 agent,叙事与分类等链路更新 - Core: agent 日志、Alembic 启动、LangChain/日志/配置等 - Story: time_hints;Memory 检索与相关测试 - Expo: 助手头像、会话页与消息拆分、实时会话与文案/i18n - Docs/scripts/tests: 迁移脚本、LLM JSON/记忆检索文档、新增单测
This commit is contained in:
@@ -57,7 +57,7 @@ class AlipayClient:
|
||||
notify_url=self._config.notify_url,
|
||||
)
|
||||
if order_string:
|
||||
logger.info("支付宝订单创建成功: %s", out_trade_no)
|
||||
logger.info("支付宝订单创建成功: {}", out_trade_no)
|
||||
return PaymentResult(
|
||||
success=True,
|
||||
payment_method="alipay",
|
||||
@@ -68,7 +68,7 @@ class AlipayClient:
|
||||
except PaymentCreateError:
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error("支付宝订单创建异常: %s", e)
|
||||
logger.error("支付宝订单创建异常: {}", e)
|
||||
raise PaymentCreateError(f"支付宝下单异常: {e}")
|
||||
|
||||
def verify_notify(self, params: Dict[str, str]) -> NotifyResult:
|
||||
@@ -96,7 +96,7 @@ class AlipayClient:
|
||||
except PaymentNotifyError:
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error("支付宝回调处理异常: %s", e)
|
||||
logger.error("支付宝回调处理异常: {}", e)
|
||||
raise PaymentNotifyError(f"支付宝回调处理失败: {e}")
|
||||
|
||||
def query_order(self, out_trade_no: str) -> PaymentStatus:
|
||||
@@ -125,7 +125,7 @@ class AlipayClient:
|
||||
except PaymentQueryError:
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error("查询支付宝订单异常: %s", e)
|
||||
logger.error("查询支付宝订单异常: {}", e)
|
||||
raise PaymentQueryError(f"查询支付宝订单异常: {e}")
|
||||
|
||||
def close_order(self, out_trade_no: str) -> bool:
|
||||
@@ -133,11 +133,11 @@ class AlipayClient:
|
||||
try:
|
||||
result = self._client.api_alipay_trade_close(out_trade_no=out_trade_no)
|
||||
if result and result.get("code") == "10000":
|
||||
logger.info("支付宝订单已关闭: %s", out_trade_no)
|
||||
logger.info("支付宝订单已关闭: {}", out_trade_no)
|
||||
return True
|
||||
return False
|
||||
except Exception as e:
|
||||
logger.error("关闭支付宝订单异常: %s", e)
|
||||
logger.error("关闭支付宝订单异常: {}", e)
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
|
||||
@@ -115,7 +115,7 @@ class PaymentOrderService:
|
||||
except Exception as e:
|
||||
order.status = "failed"
|
||||
await self._db.flush()
|
||||
logger.exception("微信支付客户端初始化失败: %s", e)
|
||||
logger.exception("微信支付客户端初始化失败: {}", e)
|
||||
raise HTTPException(status_code=503, detail=f"微信支付暂不可用: {e!s}")
|
||||
|
||||
try:
|
||||
@@ -145,14 +145,14 @@ class PaymentOrderService:
|
||||
except Exception as e:
|
||||
order.status = "failed"
|
||||
await self._db.flush()
|
||||
logger.exception("创建支付订单异常: %s", e)
|
||||
logger.exception("创建支付订单异常: {}", e)
|
||||
raise HTTPException(
|
||||
status_code=500, detail=f"创建支付订单异常: {type(e).__name__}: {e!s}"
|
||||
)
|
||||
|
||||
await self._db.commit()
|
||||
logger.info(
|
||||
"订单创建成功: order_no=%s, payment_method=%s, amount_fen=%s",
|
||||
"订单创建成功: order_no={}, payment_method={}, amount_fen={}",
|
||||
order_no,
|
||||
payment_method,
|
||||
amount_fen,
|
||||
@@ -168,10 +168,10 @@ class PaymentOrderService:
|
||||
result = await self._db.execute(select(Order).where(Order.id == out_trade_no))
|
||||
order = result.scalar_one_or_none()
|
||||
if order is None:
|
||||
logger.warning("支付回调: 订单不存在 %s", out_trade_no)
|
||||
logger.warning("支付回调: 订单不存在 {}", out_trade_no)
|
||||
return
|
||||
if order.status == "paid":
|
||||
logger.info("支付回调: 订单已处理过 %s", out_trade_no)
|
||||
logger.info("支付回调: 订单已处理过 {}", out_trade_no)
|
||||
return
|
||||
now = utc_now()
|
||||
order.status = "paid"
|
||||
@@ -191,14 +191,14 @@ class PaymentOrderService:
|
||||
user.subscription_expires_at = now + timedelta(days=duration_days)
|
||||
user.subscription_type = order.plan_id
|
||||
logger.info(
|
||||
"用户 %s 订阅已升级为 %s,到期: %s",
|
||||
"用户 {} 订阅已升级为 {},到期: {}",
|
||||
user.id,
|
||||
order.plan_id,
|
||||
user.subscription_expires_at,
|
||||
)
|
||||
await self._db.commit()
|
||||
logger.info(
|
||||
"支付成功处理完成: 订单 %s, 第三方交易号 %s", out_trade_no, trade_no
|
||||
"支付成功处理完成: 订单 {}, 第三方交易号 {}", out_trade_no, trade_no
|
||||
)
|
||||
|
||||
async def handle_wechat_notify(self, headers: dict, body: str) -> dict:
|
||||
|
||||
@@ -133,7 +133,7 @@ class PaymentConfig:
|
||||
)
|
||||
key_src = "私钥内容" if config.wechat.private_key.strip() else "私钥路径"
|
||||
logger.info(
|
||||
"微信支付配置已加载: APP_ID=%s, MCH_ID=%s, 模式=%s, 商户私钥=%s",
|
||||
"微信支付配置已加载: APP_ID={}, MCH_ID={}, 模式={}, 商户私钥={}",
|
||||
config.wechat.app_id,
|
||||
config.wechat.mch_id,
|
||||
mode,
|
||||
@@ -142,7 +142,7 @@ class PaymentConfig:
|
||||
else:
|
||||
logger.warning("微信支付配置不完整,微信支付将不可用")
|
||||
if config.alipay.is_configured:
|
||||
logger.info("支付宝配置已加载: APP_ID=%s", config.alipay.app_id)
|
||||
logger.info("支付宝配置已加载: APP_ID={}", config.alipay.app_id)
|
||||
else:
|
||||
logger.warning("支付宝配置不完整,支付宝支付将不可用")
|
||||
return config
|
||||
|
||||
@@ -65,7 +65,7 @@ async def wechat_notify(
|
||||
headers=headers, body=body.decode("utf-8")
|
||||
)
|
||||
except Exception as e:
|
||||
logger.exception("微信支付回调处理失败: %s", e)
|
||||
logger.exception("微信支付回调处理失败: {}", e)
|
||||
return {"code": "FAIL", "message": str(e)}
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ async def alipay_notify(
|
||||
result = await service.handle_alipay_notify(params=params)
|
||||
return PlainTextResponse(result)
|
||||
except Exception as e:
|
||||
logger.exception("支付宝回调处理失败: %s", e)
|
||||
logger.exception("支付宝回调处理失败: {}", e)
|
||||
return PlainTextResponse("fail")
|
||||
|
||||
|
||||
|
||||
@@ -175,7 +175,7 @@ class WeChatPayClient:
|
||||
"sign": pay_params,
|
||||
"packageValue": "Sign=WXPay",
|
||||
}
|
||||
logger.info("微信支付预订单创建成功: %s", out_trade_no)
|
||||
logger.info("微信支付预订单创建成功: {}", out_trade_no)
|
||||
return PaymentResult(
|
||||
success=True,
|
||||
payment_method="wechat",
|
||||
@@ -188,7 +188,7 @@ class WeChatPayClient:
|
||||
except PaymentCreateError:
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error("微信支付预订单创建异常: %s", e)
|
||||
logger.error("微信支付预订单创建异常: {}", e)
|
||||
raise PaymentCreateError(f"微信支付下单异常: {e}")
|
||||
|
||||
def verify_notify(self, headers: Dict[str, str], body: str) -> NotifyResult:
|
||||
@@ -213,7 +213,7 @@ class WeChatPayClient:
|
||||
except PaymentNotifyError:
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error("微信支付回调处理异常: %s", e)
|
||||
logger.error("微信支付回调处理异常: {}", e)
|
||||
raise PaymentNotifyError(f"微信支付回调处理失败: {e}")
|
||||
|
||||
def query_order(self, out_trade_no: str) -> PaymentStatus:
|
||||
@@ -238,7 +238,7 @@ class WeChatPayClient:
|
||||
except PaymentQueryError:
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error("查询微信支付订单异常: %s", e)
|
||||
logger.error("查询微信支付订单异常: {}", e)
|
||||
raise PaymentQueryError(f"查询微信支付订单异常: {e}")
|
||||
|
||||
def close_order(self, out_trade_no: str) -> bool:
|
||||
@@ -246,12 +246,12 @@ class WeChatPayClient:
|
||||
try:
|
||||
code, message = self._client.close(out_trade_no=out_trade_no)
|
||||
if code in range(200, 300):
|
||||
logger.info("微信支付订单已关闭: %s", out_trade_no)
|
||||
logger.info("微信支付订单已关闭: {}", out_trade_no)
|
||||
return True
|
||||
logger.warning("关闭微信支付订单失败: %s - %s", code, message)
|
||||
logger.warning("关闭微信支付订单失败: {} - {}", code, message)
|
||||
return False
|
||||
except Exception as e:
|
||||
logger.error("关闭微信支付订单异常: %s", e)
|
||||
logger.error("关闭微信支付订单异常: {}", e)
|
||||
return False
|
||||
|
||||
def _get_pay_type(self):
|
||||
|
||||
Reference in New Issue
Block a user