Commit 8d8f8c0f authored by xianyang's avatar xianyang

优化导出

parent 221cf658
...@@ -148,50 +148,6 @@ class TableToFile(object): ...@@ -148,50 +148,6 @@ class TableToFile(object):
zip_file.write(file_path) zip_file.write(file_path)
return zip_file_name return zip_file_name
def main_method(self):
"""主函数"""
Logger().logger.info('开始导出')
user = query_token(self.db, self.header)
params = {"source": self.name, "method": "data_to_file", "status": 1}
if len(self.data) == 0:
params["status"] = 3
crud.create_export_data(self.db, params, user)
Logger().logger.info(f'导出没有数据')
return None
folder_name = datetime.now().strftime('%m%d%H%M%S')
try:
os.mkdir(f"static/{folder_name}")
Logger().logger.info("文件夹已创建!")
except OSError as error:
uid = random.randint(1, 1000)
Logger().logger.info(f"无法创建目录:{folder_name},原因:{error},重新创建随机文件夹")
folder_name = folder_name + str(uid)
os.mkdir(f"static/{folder_name}")
# 判断多少条线程
number, count = self.th_number(len(self.data))
Logger().logger.info(f"开启线程:{number}, 每个数量:{count}")
# 起线程
ths = []
for x in range(number):
ths.append(threading.Thread(target=self.th_task,
args=[self.data[x * count:(1 + x) * count], folder_name, x]))
# 启动线程
for y in range(number):
ths[y].start()
# 等待所有线程完成
for z in range(number):
ths[z].join()
Logger().logger.info(f"线程结束,压缩文件!!!")
zip_folder = self.compress_folder(folder_name)
# 记录导出
crud.create_export_data(self.db, params, user)
with open(zip_folder, 'rb') as f:
data = f.read()
response = Response(content=data)
response.headers["Content-Disposition"] = "attachment; filename=example.zip"
Logger().logger.info(f"返回压缩文件!!!")
return response
# def main_method(self): # def main_method(self):
# """主函数""" # """主函数"""
# Logger().logger.info('开始导出') # Logger().logger.info('开始导出')
...@@ -202,35 +158,79 @@ class TableToFile(object): ...@@ -202,35 +158,79 @@ class TableToFile(object):
# crud.create_export_data(self.db, params, user) # crud.create_export_data(self.db, params, user)
# Logger().logger.info(f'导出没有数据') # Logger().logger.info(f'导出没有数据')
# return None # return None
# folder_name = datetime.now().strftime('%m%d%H%M%S')
# try: # try:
# bk = pd.DataFrame(self.data) # os.mkdir(f"static/{folder_name}")
# if self.data[0].get('create_time'): # Logger().logger.info("文件夹已创建!")
# if isinstance(self.data[0]['create_time'], int): # except OSError as error:
# bk['create_time'] = bk['create_time'].apply( # uid = random.randint(1, 1000)
# lambda x: time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(x))) # Logger().logger.info(f"无法创建目录:{folder_name},原因:{error},重新创建随机文件夹")
# bk.columns = self.field_list # 修改pandas头 # folder_name = folder_name + str(uid)
# write_data = bk.to_dict(orient='records') # os.mkdir(f"static/{folder_name}")
# with pd.ExcelWriter(f'static/{self.name}.xlsx') as writer: # # 判断多少条线程
# # bk.to_excel(writer, sheet_name='Sheet1', index=False) # number, count = self.th_number(len(self.data))
# threads = [] # Logger().logger.info(f"开启线程:{number}, 每个数量:{count}")
# rows_per_thread = math.ceil(len(write_data) / 5) # # 起线程
# for i in range(5): # ths = []
# sheet_name = 'sheet' + str(i + 1) # for x in range(number):
# threads.append(threading.Thread(target=self.thread_task, # ths.append(threading.Thread(target=self.th_task,
# args=[bk.iloc[i * rows_per_thread: rows_per_thread * (i+1)], writer, sheet_name])) # args=[self.data[x * count:(1 + x) * count], folder_name, x]))
# # 启动线程 # # 启动线程
# for y in threads: # for y in range(number):
# y.start() # ths[y].start()
# # 等待所有线程完成 # # 等待所有线程完成
# for z in threads: # for z in range(number):
# z.join() # ths[z].join()
# file = open(writer, 'rb') # Logger().logger.info(f"线程结束,压缩文件!!!")
# # 记录导出 # zip_folder = self.compress_folder(folder_name)
# crud.create_export_data(self.db, params, user) # # 记录导出
# return StreamingResponse(file, # crud.create_export_data(self.db, params, user)
# media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') # with open(zip_folder, 'rb') as f:
# except Exception as e: # data = f.read()
# Logger().logger.info(f'导出异常:{str(e)}') # response = Response(content=data)
# params["status"] = 2 # response.headers["Content-Disposition"] = "attachment; filename=example.zip"
# crud.create_export_data(self.db, params, user) # Logger().logger.info(f"返回压缩文件!!!")
# return response
def main_method(self):
"""主函数"""
Logger().logger.info('开始导出')
user = query_token(self.db, self.header)
params = {"source": self.name, "method": "data_to_file", "status": 1}
if len(self.data) == 0:
params["status"] = 3
crud.create_export_data(self.db, params, user)
Logger().logger.info(f'导出没有数据')
return None
try:
bk = pd.DataFrame(self.data)
if self.data[0].get('create_time'):
if isinstance(self.data[0]['create_time'], int):
bk['create_time'] = bk['create_time'].apply(
lambda x: time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(x)))
bk.columns = self.field_list # 修改pandas头
write_data = bk.to_dict(orient='records')
with pd.ExcelWriter(f'static/{self.name}.xlsx') as writer:
# bk.to_excel(writer, sheet_name='Sheet1', index=False)
threads = []
rows_per_thread = math.ceil(len(write_data) / 5)
for i in range(5):
sheet_name = 'sheet' + str(i + 1)
threads.append(threading.Thread(target=self.thread_task,
args=[bk.iloc[i * rows_per_thread: rows_per_thread * (i+1)], writer, sheet_name]))
# 启动线程
for y in threads:
y.start()
# 等待所有线程完成
for z in threads:
z.join()
file = open(writer, 'rb')
# 记录导出
crud.create_export_data(self.db, params, user)
return StreamingResponse(file,
media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
except Exception as e:
Logger().logger.info(f'导出异常:{str(e)}')
params["status"] = 2
crud.create_export_data(self.db, params, user)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment