LISHUZUOXUN_yangjiang/PureBackend/data_manager.py

365 lines
15 KiB
Python
Raw Normal View History

2024-09-23 14:54:15 +08:00
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>Һ<EFBFBD>
# coding: gb2312
from Database.database_pyqt import *
from PureBackend.base_driver import MODEL_MEDIAPIPE
from PureBackend.exam_driver import ExamDriver
from PureBackend.general import *
from LogRecord.log_recorder import GLOBAL_LOG
from typing import List
def format_time(seconds):
"""<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>Ϊ HH:mm:ss <20><>ʽ"""
seconds = float(seconds)
m, s = divmod(seconds, 60)
h, m = divmod(m, 60)
return f"{int(h):02d}:{int(m):02d}:{int(s):02d}"
class DataManager(ExamDriver):
def __init__(self, master_mode=True, positioning=True, camera=True, model=MODEL_MEDIAPIPE, speaker=True,
multi_positioning_mode=True, device_type=UNKNOWN, pure_mode=False):
super().__init__(master_mode, positioning, camera, model, speaker, multi_positioning_mode, device_type,
pure_mode)
# ¼<><C2BC><EFBFBD><EFBFBD>ѵ<EFBFBD>ɼ<EFBFBD>
def update_score(self):
try:
person_id = self.project.info[ID]
name = self.project.info[NAME]
person_class = self.project.info['class']
result = self.project.get_result()
score = result["score"]
had_done = result['had_done']
if score == '<EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD>':
real_score = 0
else:
real_score = float(score)
count = result["count"]
self.synchronization_info[self.exercise_tag] = {}
self.send_score_signal.set()
self._statistics_sql_score = {
self.exercise_tag: {person_id: {'record': count, 'score': real_score}}}
if had_done:
self.send_sql_score_signal.set()
_count = count
_score = real_score
else:
_count = -1
_score = 0
_result = self.manager.select_a_score(person_id=person_id, score_type=self.exercise_tag)
if _result is None:
self.manager.insert_a_score(record=count, score=real_score, person_id=person_id,
score_type=self.exercise_tag,
person_class=person_class, name=name)
else:
_record = float(_result[0]['record'])
_score = float(_result[0]['score'])
if self.exercise_tag in {PUSHUP, PULLUP, SITUP, OVERHANG}:
if float(count) > _record or real_score > _score:
self.manager.update_counting_score(record=count, score=real_score,
person_id=person_id,
score_type=self.exercise_tag)
elif self.exercise_tag == RUNAROUND:
if count != -1 and (float(count) < _record or real_score > _score):
self.manager.update_timekeeping_score(record=_count, score=real_score,
person_id=person_id,
score_type=self.exercise_tag,
)
return True
except Exception as e:
GLOBAL_LOG.write(f"¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѵ<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return False
# ȷ<>ϳ<EFBFBD><CFB3>ܳɼ<DCB3><C9BC><EFBFBD>Ч
def update_running_score(self):
try:
final_score = self.running.get_valid_score()
self.synchronization_info[RUNNING] = []
self.send_score_signal.set()
self._statistics_sql_score = {RUNNING: {}}
for score in final_score:
result = self.manager.select_a_score(person_id=score[ID], score_type=RUNNING)
if result is None:
self.manager.insert_a_score(record=score["total_time"], score=score['score'],
person_id=score[ID],
score_type=RUNNING,
person_class=score['class'], name=score[NAME])
else:
_record = float(result[0]['record'])
_score = float(result[0]['score'])
if float(score["total_time"]) < _record or float(score['score']) > _score:
self.manager.update_timekeeping_score(record=score["total_time"], score=score['score'],
person_id=score[ID], score_type=RUNNING,
)
self._statistics_sql_score[RUNNING][score[ID]] = {'record': score["total_time"],
'score': score['score']}
if final_score:
self.send_sql_score_signal.set()
return True
except Exception as e:
GLOBAL_LOG.write(f"ȷ<EFBFBD>ϳ<EFBFBD><EFBFBD>ܳɼ<EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return False
# <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ա
def add_person(self, data):
try:
data = {key: value if value != '' else None for key, value in data.items()}
if all(data[key] is not None for key in ['name', 'id', 'class', 'gender', 'age']):
response_code = self.manager.insert_a_info(data)
else:
response_code = NO_OBJ
self.speak_driver.add_speak("ȱ<EFBFBD>ٹؼ<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>")
if response_code == OK:
self.speak_driver.add_speak("<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>")
return True
else:
self.speak_driver.add_speak("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Աʧ<EFBFBD>ܣ<EFBFBD>")
return False
except Exception as e:
GLOBAL_LOG.write(f"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}", need_print=True)
return False
# <20><><EFBFBD><EFBFBD>excel
def load_xlsx(self, file):
try:
# if not os.path.exists(CACHE_DIR):
# os.makedirs(CACHE_DIR)
# save_file_dir = CACHE_DIR + "person.xlsx"
# file.save(CACHE_DIR + "person.xlsx")
response_code = self.manager.insert_many_person_from_xlsx(file)
if response_code == OK:
self.speak_driver.add_speak("<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>")
return True
else:
self.speak_driver.add_speak("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>Ϣʧ<EFBFBD>ܣ<EFBFBD>")
return False
except Exception as e:
GLOBAL_LOG.write(f"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>excel<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}", need_print=True)
return False
# <20><><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>
def update_person(self, data):
try:
data = {key: value if value != '' else None for key, value in data.items()}
if all(data[key] is not None for key in ['name', 'id', 'class', 'gender', 'age']):
response_code = self.manager.update_a_person(data)
else:
response_code = NO_OBJ
self.speak_driver.add_speak("ȱ<EFBFBD>ٹؼ<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>")
if response_code == OK:
self.speak_driver.add_speak("<EFBFBD>ɹ<EFBFBD><EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>")
return True
else:
self.speak_driver.add_speak("<EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>Ϣʧ<EFBFBD>ܣ<EFBFBD>")
return False
except Exception as e:
GLOBAL_LOG.write(f"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return False
# ɾ<><C9BE>ij<EFBFBD><C4B3><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>
def delete_person(self, _id_list):
try:
person_to_be_del = _id_list
if isinstance(person_to_be_del, List):
for person in person_to_be_del:
response_code = self.manager.delete_a_person(person)
if response_code == OK:
self.manager.delete_a_score(person)
else:
response_code = self.manager.delete_a_person(_id_list)
if response_code == OK:
self.manager.delete_a_score(_id_list)
self.speak_driver.add_speak("<EFBFBD>ɹ<EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>")
return True
except Exception as e:
GLOBAL_LOG.write(f"ɾ<EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return False
# ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>Ϣ
def delete_all_person(self):
try:
response_code = self.manager.delete_all_person()
if response_code == OK:
return True
else:
return False
except Exception as e:
GLOBAL_LOG.write(f"ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return False
# <20><><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>excel
def load_score_xlsx(self, file):
try:
if not os.path.exists(CACHE_DIR):
os.makedirs(CACHE_DIR)
save_file_dir = CACHE_DIR + "score.xlsx"
file.save(CACHE_DIR + "score.xlsx")
response_code = self.manager.insert_many_score_from_xlsx(save_file_dir)
if response_code == OK:
return True
else:
return False
except Exception as e:
GLOBAL_LOG.write(f"ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return False
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>Ϣ
def get_a_name_score(self, name, batch=None):
try:
response_data = self.manager.select_a_score_from_name(name=name, batch=batch)
return response_data
except Exception as e:
GLOBAL_LOG.write(f"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return None
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
def get_a_name_person(self, name):
try:
response_data = self.manager.select_a_person_from_name(name)
return response_data
except Exception as e:
GLOBAL_LOG.write(f"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return None
# ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>ɼ<EFBFBD>
def delete_all_score(self):
try:
response_code = self.manager.clear_all_score()
if response_code == OK:
self.speak_driver.add_speak("<EFBFBD>ɹ<EFBFBD>ɾ<EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>")
return True
else:
self.speak_driver.add_speak("ɾ<EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD>Ϣʧ<EFBFBD>ܣ<EFBFBD>")
return False
except Exception as e:
GLOBAL_LOG.write(f"ɾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return None
# <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><E0BCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
def get_person(self, _class, name):
try:
response_data = self.manager.select_person_manager_pyqt(_class=_class, name=name)
return response_data
except Exception as e:
GLOBAL_LOG.write(f"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return None
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<D0B0>б<EFBFBD>
def get_all_class(self):
try:
response_data = self.manager.get_all_class()
return response_data
except Exception as e:
GLOBAL_LOG.write(f"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return False
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>Ϣ
def get_all_person(self):
try:
response_data = self.manager.select_all_person()
return response_data
except Exception as e:
GLOBAL_LOG.write(f"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return None
# <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɼ<EFBFBD>
def get_score(self, _class=None, batch=None, name=None):
try:
response_data = self.manager.select_score_manager_pyqt(_class=_class, batch=batch, name=name)
return response_data
except Exception as e:
GLOBAL_LOG.write(f"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return None
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>Ϣ<EFBFBD>ɼ<EFBFBD>
def get_all_score(self, batch):
try:
response_data = self.manager.select_all_score(batch=batch)
return response_data
except Exception as e:
GLOBAL_LOG.write(f"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>Ϣ<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return None
def get_band_mes(self, band_id):
try:
if band_id:
raw_info = self.manager.select_a_person_from_band(band_id)
if not raw_info:
GLOBAL_LOG.write(f"׼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD>ֻ<EFBFBD>û<EFBFBD><C3BB>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա", need_print=True)
return None
info = raw_info[0]
return info
else:
return None
except Exception as e:
GLOBAL_LOG.write(f"get_band_mes<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return None
def select_exercise_score(self, exercise_type):
try:
all_data = self.get_all_score()
if exercise_type == 'runaround':
exercise_score = 'run_bf_score'
exercise_count = 'run_bf_count'
elif exercise_type == 'running':
response_data = [
{
'is_choose': False,
NAME: score["name"],
ID: score["id"],
SCORE: int(score['running_score']),
COUNT: format_time(score['running_count']),
CLASS: score['class'],
BAND_ID: score["band_id"]
}
for score in all_data
]
return response_data
elif '_' in exercise_type:
_exercise_type = exercise_type.replace('_', '')
exercise_score = _exercise_type + '_score'
exercise_count = _exercise_type + '_count'
else:
exercise_score = exercise_type + '_score'
exercise_count = exercise_type + '_count'
response_data = [
{
'is_choose': False,
NAME: score["name"],
ID: score["id"],
SCORE: score[exercise_score],
COUNT: score[exercise_count],
CLASS: score['class'],
BAND_ID: score["band_id"]
}
for score in all_data
]
return response_data
except Exception as e:
GLOBAL_LOG.write(f"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>Ϣ<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return None
def get_person_xlsx(self, folder):
try:
self.manager.dump_person(folder + '/' + "person.xlsx")
self.speak_driver.add_speak("<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>")
return True
except Exception as e:
GLOBAL_LOG.write(f"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>Ϣ<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return None
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>Ϣ<EFBFBD>ɼ<EFBFBD>
def get_score_xlsx(self, folder):
try:
self.manager.dump_score(folder + '/' + "score.xlsx")
self.speak_driver.add_speak("<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>")
return True
except Exception as e:
GLOBAL_LOG.write(f"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>Ϣ<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{str(e)}<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>{traceback.format_exc()}")
return None