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

75 lines
2.4 KiB
Python

import asyncio
import json
import apps
import dock
from dock.dcm import dcm_api
from tornado.httpclient import HTTPResponse, HTTPRequest
from models.dcm_task import DcmTask
from paste.core.logging import echo_log
from models.dcm_dispose import DcmDispose
from paste.web import requests
async def get_conv_dispose_request(dcm_dispose: DcmDispose, dcm_task: DcmTask):
"""
创建便民批转请求对象。方法仅创建请求对象,并未实际提交请求,具体由调度方法处理。
:param dcm_dispose: 保存在数据库的批转对象
:param dcm_task: 待办工单对象
"""
api_url = '/home/form/formpreview/save'
form_param = {
'recID': dcm_task.rec_id,
'actID': dcm_dispose.act_id
}
component_list = [
{"componentID": 9, "value": dcm_dispose.undertake_user_name}, # 承办人员
{"componentID": 12, "value": dcm_dispose.undertake_phone} # 联系电话
]
body = {
"formID": 377,
"isInsert": "0",
"briefParam": True,
"formParam": json.dumps(form_param, ensure_ascii=False),
"componentList": json.dumps(component_list, ensure_ascii=False)
}
conv_request = await dcm_api.new_api_request(api_url, body)
return conv_request
async def after_conv_dispose_request(response: HTTPResponse, retry_queue: asyncio.Queue[HTTPRequest]):
"""
提交数字城管后的处理程序。
:param response: 响应对象
:param retry_queue: 重试队列
"""
echo_log(response.body.decode())
echo_log('便民批转请求成功.')
# TODO: 这里要做实际的推送成功检查
async def push_conv_dispose_request(dcm_dispose: DcmDispose, dcm_task: DcmTask):
"""
推送批转请求。
:param dcm_dispose: 保存在数据库的批转对象
:param dcm_task: 待办工单对象
"""
echo_log(f"正在准备提交便民批转请求...")
if apps.get_active_env() in ('dev', '', None):
echo_log(f"非生产环境,不实际提交.")
return
request = await get_conv_dispose_request(dcm_dispose, dcm_task)
queue = asyncio.Queue()
await queue.put(request)
# 需要让调用方获取extendInfo参数
return await requests.async_concurrency(
queue, con_count=dock.CONCURRENCY_COUNT, retry=dock.MAX_RETRY_COUNT,
after_request=after_conv_dispose_request
)