新增失败预警功能

This commit is contained in:
z66
2025-12-11 09:52:59 +08:00
parent 1e83d5b19a
commit 70c375a34e
3 changed files with 199 additions and 158 deletions
+7 -7
View File
@@ -65,7 +65,7 @@ class F6PluginModule:
Returns: Returns:
tuple: 包含文件保存路径和处理后的数据的元组。如果文件保存成功,返回保存路径和数据;如果失败,返回 None 和数据。 tuple: 包含文件保存路径和处理后的数据的元组。如果文件保存成功,返回保存路径和数据;如果失败,返回 None 和数据。
""" """
data = api_instance.entry_data_get(data=data) data = api_instance.entry_data_get(data=data,replace= True)
print(data) print(data)
try: try:
# 安全地访问附件信息 # 安全地访问附件信息
@@ -191,7 +191,7 @@ class F6PluginModule:
Returns: Returns:
Dict[str, str]: 包含执行状态的字典,{'msg': '正在执行', 'msg_details': '正在执行,请稍后看结果'} Dict[str, str]: 包含执行状态的字典,{'msg': '正在执行', 'msg_details': '正在执行,请稍后看结果'}
""" """
entry_data = api_instance.entry_data_get(data=data) entry_data = api_instance.entry_data_get(data=data,replace= True)
print('执行 品牌批量新建') print('执行 品牌批量新建')
username = entry_data['data']['账号'] username = entry_data['data']['账号']
password = entry_data['data']['密码'] password = entry_data['data']['密码']
@@ -232,7 +232,7 @@ class F6PluginModule:
Returns: Returns:
Dict[str, str]: 包含执行状态的字典 Dict[str, str]: 包含执行状态的字典
""" """
entry_data = api_instance.entry_data_get(data=data) entry_data = api_instance.entry_data_get(data=data,replace= True)
username = entry_data['data']['账号'] username = entry_data['data']['账号']
password = entry_data['data']['密码'] password = entry_data['data']['密码']
company_name = entry_data['data']['公司名称'] company_name = entry_data['data']['公司名称']
@@ -279,7 +279,7 @@ class F6PluginModule:
Dict[str, str]: 包含执行状态的字典 Dict[str, str]: 包含执行状态的字典
""" """
print('执行 删除客户') print('执行 删除客户')
entry_data = api_instance.entry_data_get(data=data) entry_data = api_instance.entry_data_get(data=data,replace= True)
username = entry_data['data']['账号'] username = entry_data['data']['账号']
password = entry_data['data']['密码'] password = entry_data['data']['密码']
company_name = entry_data['data']['公司名称'] company_name = entry_data['data']['公司名称']
@@ -318,7 +318,7 @@ class F6PluginModule:
Returns: Returns:
Dict[str, str]: 包含执行状态的字典 Dict[str, str]: 包含执行状态的字典
""" """
entry_data = api_instance.entry_data_get(data=data) entry_data = api_instance.entry_data_get(data=data,replace= True)
username = entry_data['data']['账号'] username = entry_data['data']['账号']
password = entry_data['data']['密码'] password = entry_data['data']['密码']
company_name = entry_data['data']['公司名称'] company_name = entry_data['data']['公司名称']
@@ -364,7 +364,7 @@ class F6PluginModule:
Returns: Returns:
Dict[str, str]: 包含执行状态的字典 Dict[str, str]: 包含执行状态的字典
""" """
entry_data = api_instance.entry_data_get(data=data) entry_data = api_instance.entry_data_get(data=data,replace= True)
username = entry_data['data']['账号'] username = entry_data['data']['账号']
password = entry_data['data']['密码'] password = entry_data['data']['密码']
company_name = entry_data['data']['公司名称'] company_name = entry_data['data']['公司名称']
@@ -403,7 +403,7 @@ class F6PluginModule:
Returns: Returns:
Dict[str, str]: 包含执行状态的字典,{'msg': '正在执行', 'msg_details': '正在执行,请稍后看结果'} Dict[str, str]: 包含执行状态的字典,{'msg': '正在执行', 'msg_details': '正在执行,请稍后看结果'}
""" """
entry_data = api_instance.entry_data_get(data=data) entry_data = api_instance.entry_data_get(data=data,replace= True)
print('执行 BI任务') print('执行 BI任务')
# 获取必要的参数(根据实际需求调整) # 获取必要的参数(根据实际需求调整)
+22
View File
@@ -117,6 +117,28 @@ def approve_workflow(data: Dict[str, Any]):
logger.error(f"简道云工作流任务提交失败: {e}") logger.error(f"简道云工作流任务提交失败: {e}")
def execute_failure_handler(data: Dict[str, Any]):
"""
简道云失败流程通知
函数执行失败时调用,通过钉钉webhook通知到指定人员
"""
now = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
pay_load = {
"api_key":"6694d3c4fcb69ca9a111a6c4",
"entry_id":"6938e011b360a1132522a62a",
"data": {
"_widget_1765335060501": {"value": now}, # 失败时间
"_widget_1765335060502": {"value": data['failure_name']}, # 任务名称
"_widget_1765335060503": {"value": data['failure_details']} # 失败明细
}
}
api_instance.data_batch_create(pay_load)
def get_operate_org_id(cookies: Dict[str, str]) -> Optional[str]: def get_operate_org_id(cookies: Dict[str, str]) -> Optional[str]:
""" """
获取操作门店ID 获取操作门店ID
+34 -15
View File
@@ -16,7 +16,8 @@ import time
from typing import Dict, Any, List, Optional from typing import Dict, Any, List, Optional
from datetime import datetime from datetime import datetime
from tqdm import tqdm from tqdm import tqdm
from app.tasks.common import update_jiandaoyun, approve_workflow, get_operate_org_id, get_card_list from app.tasks.common import update_jiandaoyun, approve_workflow, get_operate_org_id, get_card_list, \
execute_failure_handler
logger = logging.getLogger('app') logger = logging.getLogger('app')
@@ -37,6 +38,8 @@ def delete_history_background(data: Dict[str, Any], cookies: Dict[str, str], org
Returns: Returns:
None None
""" """
try:
url = f'https://yunxiu.f6car.cn/maintain-dump/maintainHistory/?orgid={org_id}' # 删除url url = f'https://yunxiu.f6car.cn/maintain-dump/maintainHistory/?orgid={org_id}' # 删除url
res = requests.delete(url=url, cookies=cookies) res = requests.delete(url=url, cookies=cookies)
res_data = res.json() res_data = res.json()
@@ -47,7 +50,9 @@ def delete_history_background(data: Dict[str, Any], cookies: Dict[str, str], org
logger.info(f"删除 {org_name} 历史维修记录成功") logger.info(f"删除 {org_name} 历史维修记录成功")
else: else:
results = f'删除 {org_name} 历史维修记录失败: {res_data.get("message")}' results = f'删除 {org_name} 历史维修记录失败: {res_data.get("message")}'
print(results) data["failure_name"] = "删除历史维修记录后台任务"
data["failure_details"] = results
execute_failure_handler(data)
logger.error(f"删除 {org_name} 历史维修记录失败: {res_data.get('message')}") logger.error(f"删除 {org_name} 历史维修记录失败: {res_data.get('message')}")
# 调用api回写改掉 执行明细与执行状态 # 调用api回写改掉 执行明细与执行状态
@@ -57,9 +62,15 @@ def delete_history_background(data: Dict[str, Any], cookies: Dict[str, str], org
if msg.get('msg'): if msg.get('msg'):
approve_workflow(data) approve_workflow(data)
print('表单已自动提交至下一步') print('表单已自动提交至下一步')
except Exception as e:
logger.error(f"删除 {org_name} 历史维修记录失败: {e}")
logger.error(traceback.format_exc())
data["failure_name"] = "删除历史维修记录后台任务"
data["failure_details"] = traceback.format_exc()
execute_failure_handler(data)
def delete_customer_background(data: Dict[str, Any], cookies: Dict[str, str], total:int ): def delete_customer_background(data: Dict[str, Any], cookies: Dict[str, str], total: int):
""" """
删除客户信息后台任务 删除客户信息后台任务
@@ -78,17 +89,18 @@ def delete_customer_background(data: Dict[str, Any], cookies: Dict[str, str], to
- 8-20点之间每3.5秒删除一条数据,其余时间每1.5秒删除一条数据 - 8-20点之间每3.5秒删除一条数据,其余时间每1.5秒删除一条数据
- 执行结果会更新到简道云表单 - 执行结果会更新到简道云表单
""" """
print('开始删除客户信息') try:
logger.info("开始删除客户信息")
success = 0 success = 0
fail = 0 fail = 0
json_data = [] json_data = []
total_page = total // 100 + (total % 100 > 0) total_page = total // 100 + (total % 100 > 0)
logger.info("正在加载客户信息")
for page in tqdm(range(1, total_page + 1)): for page in tqdm(range(1, total_page + 1)):
url = f"https://yunxiu.f6car.cn/member/customer/listForPermission?pageSize=100&pageNo={page}" url = f"https://yunxiu.f6car.cn/member/customer/listForPermission?pageSize=100&pageNo={page}"
res = requests.get(url, cookies=cookies) res = requests.get(url, cookies=cookies)
json_data.extend(res.json().get('data', {}).get('data',[])) json_data.extend(res.json().get('data', {}).get('data', []))
# 获取门店ID # 获取门店ID
operate_org_id = get_operate_org_id(cookies) operate_org_id = get_operate_org_id(cookies)
@@ -98,7 +110,7 @@ def delete_customer_background(data: Dict[str, Any], cookies: Dict[str, str], to
approve_workflow(data) approve_workflow(data)
return return
print(operate_org_id)
# 获取会员卡列表(提取客户ID # 获取会员卡列表(提取客户ID
card_list_customers = get_card_list(cookies, operate_org_id) card_list_customers = get_card_list(cookies, operate_org_id)
@@ -182,6 +194,13 @@ def delete_customer_background(data: Dict[str, Any], cookies: Dict[str, str], to
if msg.get('msg'): if msg.get('msg'):
approve_workflow(data) approve_workflow(data)
print('表单已自动提交至下一步') print('表单已自动提交至下一步')
except Exception as e:
logger.error(f"删除客户信息时发生错误: {str(e)}")
logger.error(traceback.format_exc())
data["failure_name"] = "删除客户信息后台任务"
data["failure_details"] = traceback.format_exc()
execute_failure_handler(data)
def delete_car_background(data: Dict[str, Any], url: str, cookies: Dict[str, str], header: Dict[str, Any], def delete_car_background(data: Dict[str, Any], url: str, cookies: Dict[str, str], header: Dict[str, Any],
@@ -208,6 +227,7 @@ def delete_car_background(data: Dict[str, Any], url: str, cookies: Dict[str, str
- 有会员卡或最近消费记录的车辆会被跳过 - 有会员卡或最近消费记录的车辆会被跳过
- 执行结果会更新到简道云表单 - 执行结果会更新到简道云表单
""" """
try:
print(cookies) print(cookies)
success = 0 success = 0
fail = 0 fail = 0
@@ -228,7 +248,7 @@ def delete_car_background(data: Dict[str, Any], url: str, cookies: Dict[str, str
# 注意:需要获取所有车辆的ID,所以不能直接使用 get_card_list # 注意:需要获取所有车辆的ID,所以不能直接使用 get_card_list
# 需要自定义提取逻辑,返回所有车辆的ID列表 # 需要自定义提取逻辑,返回所有车辆的ID列表
card_list_cars = [] card_list_cars = []
try:
# 获取第一页,确定总页数 # 获取第一页,确定总页数
card_url = f"https://yunxiu.f6car.cn/marketing/card/paging?useStationIdOwnOrgList={operate_org_id}&pageSize=100&pageNo=1" card_url = f"https://yunxiu.f6car.cn/marketing/card/paging?useStationIdOwnOrgList={operate_org_id}&pageSize=100&pageNo=1"
card_res = requests.get(url=card_url, cookies=cookies) card_res = requests.get(url=card_url, cookies=cookies)
@@ -329,16 +349,15 @@ def delete_car_background(data: Dict[str, Any], url: str, cookies: Dict[str, str
print(f"完成: 成功删除 {success} 辆车, 失败 {fail} 辆车") print(f"完成: 成功删除 {success} 辆车, 失败 {fail} 辆车")
logger.info(f"完成: 成功删除 {success} 辆车, 失败 {fail} 辆车") logger.info(f"完成: 成功删除 {success} 辆车, 失败 {fail} 辆车")
except ValueError as e:
print(f"Error converting all_page to integer: {e}")
traceback.print_exc() # 打印堆栈跟踪信息
except Exception as e:
print(f"An unexpected error occurred: {e}")
traceback.print_exc() # 打印堆栈跟踪信息
msg = update_jiandaoyun(data, f'成功次数{success},失败次数{fail}') msg = update_jiandaoyun(data, f'成功次数{success},失败次数{fail}')
if msg.get('msg'): if msg.get('msg'):
approve_workflow(data) approve_workflow(data)
print('表单已自动提交至下一步') print('表单已自动提交至下一步')
except Exception as e:
logger.error(f"删除客户车辆信息时发生错误: {str(e)}")
logger.error(traceback.format_exc())
data["failure_name"] = "删除客户车辆信息后台任务"
data["failure_details"] = traceback.format_exc()
execute_failure_handler(data)