""" 上报 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"推送工单操作结果完成...")