89 lines
3.0 KiB
Python
89 lines
3.0 KiB
Python
"""
|
|
操作数字城管的工单延期接口后,向OA推送更新后的工单时间信息
|
|
|
|
对应文档接口:12、更新流程延期信息
|
|
"""
|
|
import asyncio
|
|
import json
|
|
from datetime import datetime
|
|
|
|
from tornado.httpclient import HTTPResponse, HTTPRequest
|
|
|
|
import dock
|
|
from dock.dcm import dcm_scrape
|
|
from dock.oa import oa_api, oa_api_request
|
|
from models.dcm_task import DcmTask
|
|
from paste.core.logging import echo_log
|
|
from paste.util import udict
|
|
from paste.web import requests
|
|
|
|
|
|
async def get_update_process_delay_request(data: dict):
|
|
api_url = '/externalWorkOrder/digitalCM/updateProcessDelayInfo'
|
|
request_body = data
|
|
# 构造 API 请求
|
|
return await oa_api.new_api_request(api_url, request_body)
|
|
|
|
|
|
async def after_update_process_delay_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 update_process_delay(task_id: int):
|
|
"""
|
|
流程延期更新之后,推送最新的时间信息
|
|
|
|
:param task_id: 对应的工单ID
|
|
"""
|
|
|
|
echo_log(f"本次更新{task_id}的最新时间信息...")
|
|
dcm_task = await DcmTask.async_find_by_id(task_id)
|
|
echo_log(f"开始更新流程延期...")
|
|
await dcm_scrape.fetch_single_dcm_task(dcm_task)
|
|
# 重新获取更新后的任务对象
|
|
dcm_task: DcmTask = await DcmTask.async_find_by_id(task_id)
|
|
if dcm_task is not None:
|
|
bundle_deadline_time_str = datetime.fromtimestamp(
|
|
dcm_task.bundle_deadline_time // 1000
|
|
).strftime("%Y-%m-%d %H:%M:%S") if dcm_task.bundle_deadline_time else ''
|
|
|
|
rollback_deadline_str = datetime.fromtimestamp(
|
|
dcm_task.rollback_deadline // 1000
|
|
).strftime("%Y-%m-%d %H:%M:%S") if dcm_task.rollback_deadline else ''
|
|
|
|
request = await oa_api_request.get_update_process_delay_request(
|
|
str(task_id), bundle_deadline_time_str, rollback_deadline_str
|
|
)
|
|
queue = asyncio.Queue()
|
|
await queue.put(request)
|
|
await requests.async_concurrency(
|
|
queue, con_count=dock.CONCURRENCY_COUNT, retry=dock.MAX_RETRY_COUNT,
|
|
after_request=after_update_process_delay_request
|
|
)
|
|
|
|
echo_log(f"更新流程延期完成...")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
from paste.core import aio_pool
|
|
|
|
_runner = aio_pool.get_aio_runner()
|
|
_runner(update_process_delay(task_id=2054174091228876801))
|