56 lines
1.8 KiB
Python
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"推送工单操作结果完成...")
|