Files
d3i-szct/dock/oa/oa_result_notify.py
2026-06-02 17:46:38 +08:00

56 lines
1.8 KiB
Python

"""
上报 D3I 与 DCM 接口对接结果。
对应文档接口:10、上报单条工单的操作结果
"""
import asyncio
import json
from tornado.httpclient import HTTPResponse, HTTPRequest
import dock
from dock.oa import oa_api_request
from paste.core.logging import echo_log
from paste.util import udict
from paste.web import requests
async def after_result_notify_request(response: HTTPResponse, retry_queue: asyncio.Queue[HTTPRequest]):
"""
上报工单操作结果响应后的处理程序。
:param response: 响应对象
:param retry_queue: 重试队列
"""
body = response.body.decode()
echo_log(body)
body_data = json.loads(body)
code = udict.get_by_path(body_data, 'code')
message = udict.get_by_path(body_data, 'msg')
if code == 200:
echo_log(f"上报工单操作结果成功.")
else:
echo_log(f"上报工单操作结果失败:{message}")
if retry_queue:
echo_log(f"上报工单操作结果重试队列中有:{retry_queue.qsize()} 个请求在等待.")
async def push_result_notify(flow_token: str, message: str, return_code: int):
"""
操作工单完成后,推送处理结果
:param flow_token:OA调用本项目接口时提供
:param message:接口调用返回说明
:param return_code:操作类型
"""
echo_log(f"正在准备推送工单操作结果...")
request = await oa_api_request.get_result_notify_request(flow_token, message, return_code)
push_queue = asyncio.Queue()
await push_queue.put(request)
await requests.async_concurrency(
push_queue, con_count=dock.CONCURRENCY_COUNT, retry=dock.MAX_RETRY_COUNT,
after_request=after_result_notify_request
)
echo_log(f"推送工单操作结果完成...")