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

76 lines
2.6 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_rollback import DcmRollback
from paste.web import requests
async def get_conv_rollback_request(rollback: DcmRollback, dcm_task: DcmTask):
"""
创建便民回退请求对象。方法仅创建请求对象,并未实际提交请求,具体由调度方法处理。
:param rollback: 保存在数据库的回退对象
:param dcm_task: 待办工单对象
"""
api_url = '/home/form/formpreview/save'
form_param = {
'recID': dcm_task.rec_id,
'actID': rollback.act_id
}
component_list = [
{"componentID": 8, "value": rollback.not_assigned_reason}, # 不交办原因
{"componentID": 4, "value": rollback.not_assigned}, # 是否不交办
{"componentID": 9, "value": rollback.undertake_user_name}, # 承办人员
{"componentID": 12, "value": rollback.undertake_phone}, # 联系电话
]
body = {
"formID": 352,
"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_rollback_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_rollback_request(dcm_rollback: DcmRollback, dcm_task: DcmTask):
"""
推送回退请求。
:param dcm_rollback: 保存在数据库的回退对象
:param dcm_task: 待办工单对象
"""
echo_log(f"正在准备提交便民回退请求...")
if apps.get_active_env() in ('dev', '', None):
echo_log(f"非生产环境,不实际提交.")
return
request = await get_conv_rollback_request(dcm_rollback, 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_rollback_request
)