102 lines
4.2 KiB
Python
102 lines
4.2 KiB
Python
from typing import Optional
|
|
import logging
|
|
|
|
from apps.api import govs
|
|
from apps.app_handler import AppHandler
|
|
from paste.web.decorators import route
|
|
from paste.core import aio_pool
|
|
from paste.core.logging import echo_log
|
|
from dock.govs import govs_create_order_delay
|
|
from models.govs_order_master import GovsOrderMaster
|
|
from models.govs_create_delay import GovsApplicationForDelay
|
|
|
|
|
|
@route(f'{govs.ApiPrefix}/application-for-delay-formal/create')
|
|
class CreateDelayHandler(AppHandler):
|
|
"""
|
|
申请延期接口。
|
|
|
|
对接省12345的申请延期接口,请求后本接口先将数据保存本地,然后响应客户端,然后开始后台启动推送。
|
|
"""
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
|
|
self.govs_order: Optional[GovsOrderMaster] = None
|
|
self.govs_delay: Optional[GovsApplicationForDelay] = None
|
|
|
|
def _params_for_db(self, **kwargs: dict) -> dict:
|
|
"""
|
|
提取数据库所需参数。
|
|
"""
|
|
return {
|
|
GovsApplicationForDelay.master_id.key: kwargs.get('gdId', ''),
|
|
GovsApplicationForDelay.gd_id.key: kwargs.get('gdId', ''),
|
|
GovsApplicationForDelay.finally_time_after_approve.key: kwargs.get('finallyTimeAfterApprove', ''),
|
|
GovsApplicationForDelay.finally_time_before_approve.key: kwargs.get('finallyTimeBeforeApprove', ''),
|
|
GovsApplicationForDelay.request_delay.key: kwargs.get('requestDelay', ''),
|
|
GovsApplicationForDelay.is_nature_day.key: kwargs.get('isNatureDay', ''),
|
|
GovsApplicationForDelay.already_notify_order_user.key: kwargs.get('alreadyNotifyOrderUser', ''),
|
|
GovsApplicationForDelay.request_reason.key: kwargs.get('requestReason', ''),
|
|
GovsApplicationForDelay.remarks.key: kwargs.get('remarks', ''),
|
|
GovsApplicationForDelay.contact_name.key: kwargs.get('contactName', ''),
|
|
GovsApplicationForDelay.contact_time.key: kwargs.get('contactTime', ''),
|
|
GovsApplicationForDelay.contact_type.key: kwargs.get('contactType', ''),
|
|
GovsApplicationForDelay.contact_type_name.key: kwargs.get('contactTypeName', ''),
|
|
GovsApplicationForDelay.reply_script.key: kwargs.get('replyScript', ''),
|
|
GovsApplicationForDelay.file_id_str.key: kwargs.get('fileIdStr', ''),
|
|
GovsApplicationForDelay.request_delay_time.key: kwargs.get('requestDelayTime', ''),
|
|
GovsApplicationForDelay.flow_token.key: kwargs.get('flowToken', '')
|
|
}
|
|
|
|
async def create_delay(self, **kwargs) -> dict:
|
|
# 必填参数校验
|
|
required_keys = [
|
|
'gdId', 'flowToken', 'finallyTimeAfterApprove', 'requestDelay', 'isNatureDay',
|
|
'alreadyNotifyOrderUser', 'requestReason'
|
|
]
|
|
missing = [
|
|
k for k in required_keys
|
|
if k not in kwargs or kwargs[k] is None
|
|
]
|
|
if missing:
|
|
raise ValueError(f"缺少必要参数: {missing}")
|
|
|
|
# 读取待办任务对象
|
|
govs_task_id = kwargs.get('gdId', '')
|
|
self.govs_order = await GovsOrderMaster.async_find_by_id(govs_task_id)
|
|
|
|
# 保存请求数据
|
|
params = self._params_for_db(**kwargs)
|
|
self.govs_delay = GovsApplicationForDelay().copy_from_dict(params)
|
|
self.govs_delay.status = 0
|
|
await self.govs_delay.async_save()
|
|
|
|
# 后台执行提交申请延期请求到省12345
|
|
await aio_pool.run_background_task(
|
|
govs_create_order_delay.create_delay(self.govs_delay, self.govs_order)
|
|
)
|
|
|
|
return {
|
|
'msg': '申请延期成功.'
|
|
}
|
|
|
|
# @auth_token
|
|
async def post(self):
|
|
"""
|
|
处理 POST 请求。
|
|
|
|
---
|
|
tags:
|
|
- D3I API
|
|
summary: 申请延期接口
|
|
"""
|
|
try:
|
|
echo_log(self.request.body.decode())
|
|
_, params = self.get_request_params()
|
|
_result = await self.create_delay(**params)
|
|
self.response_ok(code=0, data=_result)
|
|
except Exception as e:
|
|
self.response_error(e, status_code=200, api_status_code=500)
|
|
self.log(msg=e, level=logging.ERROR, is_log_exc=True)
|