fix: response_code持久化到数据库 + 工单客户端加tenant-id

1. wechat_service: save/get_response_code 改为内存+数据库双写,
   容器重启后边缘resolve仍能更新企微卡片
2. work_order_client: 请求头加 tenant-id,签名公式加 query_str 参数
3. config: WorkOrderConfig 新增 tenant_id 字段

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-13 13:37:34 +08:00
parent 2a9bf7d575
commit c2c272c298
3 changed files with 54 additions and 13 deletions

View File

@@ -83,12 +83,51 @@ class WeChatService:
return self._access_token
def save_response_code(self, task_id: str, response_code: str):
"""保存卡片的 response_code用于后续更新卡片状态"""
"""保存卡片的 response_code内存缓存 + 数据库持久化"""
self._response_codes[task_id] = response_code
try:
from app.models import get_session, AlarmEventExt
db = get_session()
try:
ext = db.query(AlarmEventExt).filter(
AlarmEventExt.alarm_id == task_id,
AlarmEventExt.ext_type == "WECHAT_RESPONSE_CODE",
).first()
if ext:
ext.ext_data = {"response_code": response_code}
else:
ext = AlarmEventExt(
alarm_id=task_id,
ext_type="WECHAT_RESPONSE_CODE",
ext_data={"response_code": response_code},
)
db.add(ext)
db.commit()
finally:
db.close()
except Exception as e:
logger.warning(f"持久化 response_code 失败: {e}")
def get_response_code(self, task_id: str) -> Optional[str]:
"""获取并消耗 response_code只能用一次"""
return self._response_codes.pop(task_id, None)
"""获取 response_code优先内存缓存,回退数据库查询"""
code = self._response_codes.pop(task_id, None)
if code:
return code
try:
from app.models import get_session, AlarmEventExt
db = get_session()
try:
ext = db.query(AlarmEventExt).filter(
AlarmEventExt.alarm_id == task_id,
AlarmEventExt.ext_type == "WECHAT_RESPONSE_CODE",
).first()
if ext and ext.ext_data:
return ext.ext_data.get("response_code", "")
finally:
db.close()
except Exception as e:
logger.warning(f"查询 response_code 失败: {e}")
return None
# ==================== 媒体上传 ====================