87 lines
3.1 KiB
Python
87 lines
3.1 KiB
Python
"""
|
|
BI相关后台任务模块
|
|
|
|
本模块包含BI相关的后台任务,包括:
|
|
- BI数据处理
|
|
- BI报表生成
|
|
|
|
这些任务在后台线程中执行,不会阻塞主请求。
|
|
执行完成后会更新简道云表单并自动提交工作流。
|
|
"""
|
|
import logging
|
|
import os
|
|
import requests
|
|
import pandas as pd
|
|
from typing import Dict, Any
|
|
from tqdm import tqdm
|
|
from app.tasks.common import update_jiandaoyun, approve_workflow
|
|
|
|
logger = logging.getLogger('app')
|
|
|
|
|
|
def bi_task_background(data: Dict[str, Any], cookies: Dict[str, str], df: pd.DataFrame = None, save_path: str = None):
|
|
"""
|
|
BI任务后台执行函数
|
|
|
|
在后台线程中执行BI相关任务,如数据处理、报表生成等。
|
|
执行完成后会更新简道云表单并自动提交工作流。
|
|
|
|
Args:
|
|
data: 包含表单ID(api_key)、表单ID(entry_id)、数据ID(data_id)的字典
|
|
cookies: 用户登录 F6 系统的 cookies 信息(如果需要)
|
|
df: Excel 文件读取的内容,DataFrame 格式(如果需要)
|
|
save_path: Excel 文件保存的地址,执行完成后会删除此文件(如果需要)
|
|
|
|
Returns:
|
|
None
|
|
|
|
注意:
|
|
- 这是一个示例函数,需要根据实际BI任务需求进行实现
|
|
- 执行完成后会自动删除上传的文件(如果提供了save_path)
|
|
- 执行结果会更新到简道云表单
|
|
"""
|
|
try:
|
|
# TODO: 在这里实现具体的BI任务逻辑
|
|
# 例如:数据处理、报表生成、数据同步等
|
|
|
|
# 示例:处理数据
|
|
results = []
|
|
if df is not None:
|
|
df = df.where(pd.notnull(df), None)
|
|
for index, row in tqdm(df.iterrows(), total=df.shape[0], desc="处理BI数据"):
|
|
# TODO: 实现具体的数据处理逻辑
|
|
# 例如:调用BI API、生成报表、数据转换等
|
|
result_item = {
|
|
'行号': index + 1,
|
|
'状态': '处理成功'
|
|
}
|
|
results.append(result_item)
|
|
else:
|
|
# 如果没有DataFrame,执行其他BI任务
|
|
# TODO: 实现其他BI任务逻辑
|
|
results.append({'状态': 'BI任务执行成功'})
|
|
|
|
# 删除文件(如果提供了save_path)
|
|
if save_path and os.path.exists(save_path):
|
|
os.remove(save_path)
|
|
logger.info(f'{save_path}已删除')
|
|
|
|
# 格式化结果
|
|
results_str = f'{results}' if results else 'BI任务执行完成'
|
|
logger.info(f"BI任务执行结果: {results_str}")
|
|
|
|
# 调用api回写改掉 执行明细与执行状态
|
|
msg = update_jiandaoyun(data, results_str)
|
|
|
|
if msg.get('msg'):
|
|
approve_workflow(data)
|
|
logger.info('表单已自动提交至下一步')
|
|
|
|
except Exception as e:
|
|
error_msg = f'BI任务执行失败: {str(e)}'
|
|
logger.error(error_msg, exc_info=True)
|
|
msg = update_jiandaoyun(data, error_msg)
|
|
if msg.get('msg'):
|
|
approve_workflow(data)
|
|
|