202 lines
7.3 KiB
Python
202 lines
7.3 KiB
Python
import time
|
|
import requests
|
|
import os
|
|
import json
|
|
from config import *
|
|
import base64
|
|
import urllib.parse
|
|
from urllib.parse import urlparse, parse_qs
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def req_tool_jdy(url, data):
|
|
#调用简道云接口
|
|
headers = {"Authorization": f"Bearer {apikey}"}
|
|
while 1:
|
|
try:
|
|
res = requests.post(url, headers=headers, json=data, timeout=15, verify=False).json()
|
|
if "code" in res.keys():
|
|
logger.info(f"req_tool_jdy请求错误 - url: {url}, "
|
|
f"请求参数: {data}, 返回结果: {res}")
|
|
time.sleep(2)
|
|
continue
|
|
return res
|
|
except Exception as e:
|
|
print(e)
|
|
|
|
|
|
def query_data(query_data_info):
|
|
#调用批量查询数据接口
|
|
query_data_url = f'{base_path}/api/v5/app/entry/data/list'
|
|
try:
|
|
query_data_res = req_tool_jdy(query_data_url, query_data_info)
|
|
return query_data_res
|
|
except Exception as e:
|
|
logger.error(f"query_data请求异常 - url: {query_data_url}, "
|
|
f"请求参数: {query_data_info}, 异常信息: {e}")
|
|
return None
|
|
|
|
|
|
def update_data(instance_id, workflow_entry_id, withdrawal_reason):
|
|
# 调用更新数据接口
|
|
update_data_url = f'{base_path}/api/v5/app/entry/data/update'
|
|
update_data_info = {
|
|
"app_id": app_id,
|
|
"entry_id": workflow_entry_id,
|
|
"data_id": instance_id,
|
|
"is_start_trigger": True,
|
|
"data": {
|
|
"withdrawal_opinion": {"value": "是"},
|
|
"withdrawal_reason": {"value": withdrawal_reason}
|
|
}
|
|
}
|
|
try:
|
|
logger.info(f"update_data请求 - url: {update_data_url}, update_data_info: {update_data_info} ")
|
|
update_data_res = req_tool_jdy(update_data_url, update_data_info)
|
|
logger.info(f"更新数据完成\nupdate_data_res: {update_data_res}")
|
|
return update_data_res
|
|
except Exception as e:
|
|
logger.error(f"update_data请求异常 - url: {update_data_url}, "
|
|
f"请求参数: {update_data_info}, 异常信息: {e}")
|
|
return None
|
|
|
|
|
|
def get_workflow(lossseqno, lossseqcategory):
|
|
# 调用查询流程信息接口
|
|
get_workflow_url = f'{base_path}/api/v6/workflow/instance/get'
|
|
if lossseqcategory == "车损":
|
|
workflow_entry_id = vehicle_damage_id
|
|
elif lossseqcategory == "物损":
|
|
workflow_entry_id = item_damage_id
|
|
elif lossseqcategory == "人伤":
|
|
workflow_entry_id = human_injury_id
|
|
else:
|
|
logger.error(f"未知的损失类别: {lossseqcategory}")
|
|
return None
|
|
query_data_info = {
|
|
"app_id": app_id,
|
|
"entry_id": workflow_entry_id,
|
|
"limit": 100,
|
|
"fields": ["_id", "appId", "entryId", "reportno", "lossseqno", "lossseqname", "lossseqtype"],
|
|
"filter": {
|
|
"rel": "and",
|
|
"cond": [
|
|
{
|
|
"field": "lossseqno",
|
|
"method": "eq",
|
|
"value": [lossseqno]
|
|
}
|
|
]
|
|
}
|
|
}
|
|
try:
|
|
query_result = query_data(query_data_info)
|
|
instance_id = query_result['data'][0]['_id']
|
|
get_workflow_info = {
|
|
"instance_id": instance_id,
|
|
"tasks_type":1
|
|
}
|
|
get_workflow_res = req_tool_jdy(get_workflow_url, get_workflow_info)
|
|
logger.info(f"完成流程查询\nstatus:{get_workflow_res['status']}, instance_id:{instance_id}, workflow_entry_id:{workflow_entry_id}")
|
|
return {"status":get_workflow_res['status'], "instance_id":instance_id, "workflow_entry_id":workflow_entry_id}
|
|
except Exception as e:
|
|
logger.error(f"get_workflow请求异常 - url: {get_workflow_url}, "
|
|
f"请求参数: {query_data_info}, 异常信息: {e}")
|
|
return None
|
|
|
|
|
|
def close_workflow(close_workflow_info):
|
|
# 调用结束流程接口
|
|
close_workflow_url = f'{base_path}/api/v1/workflow/instance/close'
|
|
try:
|
|
query_data_res = req_tool_jdy(close_workflow_url, close_workflow_info)
|
|
return query_data_res
|
|
except Exception as e:
|
|
logger.error(f"query_data请求异常 - url: {close_workflow_url}, "
|
|
f"请求参数: {close_workflow_info}, 异常信息: {e}")
|
|
return None
|
|
|
|
|
|
def get_lossseqcategory_info(lossseqtype):
|
|
# 调用查询损失类别信息接口
|
|
get_lossseqcategory_info_url = f'{base_path}/api/v5/app/entry/data/list'
|
|
get_lossseqcategory_info_data = {
|
|
"app_id": app_id,
|
|
"entry_id": lossseqcategory_id,
|
|
"limit": 100,
|
|
"fields": ["_id", "appId", "entryId", "lossseqtype", "lossseqcategory"],
|
|
"filter": {
|
|
"rel": "and",
|
|
"cond": [
|
|
{
|
|
"field": "lossseqtype",
|
|
"method": "eq",
|
|
"value": [lossseqtype]
|
|
}
|
|
]
|
|
}
|
|
}
|
|
query_data_res = req_tool_jdy(get_lossseqcategory_info_url, get_lossseqcategory_info_data)
|
|
if not query_data_res.get('data'):
|
|
logger.error("查询结果为空")
|
|
return None
|
|
lossseqcategory = query_data_res['data'][0]['lossseqcategory']
|
|
return lossseqcategory
|
|
|
|
|
|
def withdraw_a_case(reportno, withdrawal_reason):
|
|
query_data_info = {
|
|
"app_id": app_id,
|
|
"entry_id": "67ab117682b769eeef2549df",
|
|
"limit": 100,
|
|
"fields": ["_id", "appId", "entryId", "reportno", "lossseq_info"],
|
|
"filter": {
|
|
"rel": "and",
|
|
"cond": [
|
|
{
|
|
"field": "reportno",
|
|
"method": "eq",
|
|
"value": [reportno]
|
|
}
|
|
]
|
|
}
|
|
}
|
|
querydata = query_data(query_data_info)
|
|
# 提取所有 lossseqno 和 lossseqtype
|
|
query_result = []
|
|
for item in querydata['data']:
|
|
if not item.get('lossseq_info'):
|
|
logger.info(f"没有任务信息: {item}")
|
|
return 1
|
|
for lossseq in item['lossseq_info']:
|
|
lossseqcategory = get_lossseqcategory_info(lossseq['lossseqtype'])
|
|
query_result.append({
|
|
'lossseqno': lossseq['lossseqno'],
|
|
'lossseqtype': lossseq['lossseqtype'],
|
|
'lossseqcategory': lossseqcategory
|
|
})
|
|
|
|
for task in query_result:
|
|
workflow_res = get_workflow(task['lossseqno'], task['lossseqcategory'])
|
|
if workflow_res['status'] == 0:
|
|
instance_id = workflow_res['instance_id']
|
|
workflow_entry_id = workflow_res['workflow_entry_id']
|
|
close_workflow_info = {
|
|
"instance_id": instance_id
|
|
}
|
|
close_workflow_res = close_workflow(close_workflow_info)
|
|
if close_workflow_res['status'] == "success":
|
|
update_data_res = update_data(instance_id, workflow_entry_id , withdrawal_reason)
|
|
if update_data_res['data'] :
|
|
logger.info(f"撤回成功,回写成功 - 报案号: {reportno}, 流程实例ID: {instance_id}")
|
|
return 1
|
|
else:
|
|
logger.error(f"撤回成功,回写失败 - 报案号: {reportno}, 流程实例ID: {instance_id}")
|
|
return 1
|
|
else:
|
|
logger.error(f"撤回失败 - 报案号: {reportno}, 流程实例ID: {instance_id}")
|
|
return 0
|
|
|
|
|