添加成绩查询补丁和双杠

This commit is contained in:
Your Name 2024-09-23 16:02:54 +08:00
parent aebebe4064
commit d9a6844d4d
8 changed files with 91 additions and 8 deletions

View File

@ -41,13 +41,15 @@ OVERHANG = "overhang"
RUNAROUND = "runaround"
RUNNING = "running"
PULLUP = "pullup"
TRICEPDIP = 'tricepdip'
EXERCISE_NAME_LIST = {
PUSHUP: "俯卧撑",
SITUP: "仰卧起坐",
OVERHANG: "曲臂悬垂",
RUNAROUND: "30*2蛇形跑",
RUNNING: "长跑",
PULLUP: "引体向上"
PULLUP: "引体向上",
TRICEPDIP: "双杠臂屈伸"
}
GRADE_GREAT = "GREAT"
@ -856,6 +858,7 @@ class Database:
SCORE_FEATURE_LIST[i]: row[i]
for i in range(len(SCORE_FEATURE_LIST))
}
if r['score_type']:
score_data.append(r)
if score_data:
return score_data
@ -961,6 +964,7 @@ class Database:
SCORE_FEATURE_LIST[i]: row[i]
for i in range(len(SCORE_FEATURE_LIST))
}
if r['score_type']:
score_data.append(r)
if score_data:
for s in score_data:
@ -990,6 +994,7 @@ class Database:
SCORE_FEATURE_LIST[i]: row[i]
for i in range(len(SCORE_FEATURE_LIST))
}
if r['score_type']:
score_data.append(r)
return score_data
@ -1020,6 +1025,7 @@ class Database:
SCORE_FEATURE_LIST[i]: row[i]
for i in range(len(SCORE_FEATURE_LIST))
}
if r['score_type']:
score_data.append(r)
for s in score_data:
for p in person_data:
@ -1037,8 +1043,49 @@ class Database:
p[count] = round(float(s['record']), 2)
return person_data
# 删除空成绩
def delete_empty_score_type(self):
sql = "DELETE FROM SCORE WHERE score_type IS NULL OR score_type = '';"
try:
self.database.execute(sql)
self.database.commit()
return OK
except Exception as e:
print(f"数据库错误,错误原因{e.args}\n{traceback.format_exc()}")
return UNKNOWN_ERROR
# 导出所有人员成绩
def dump_score(self, save_dir):
data = self.select_all_score()
df = pd.DataFrame(data)
df.to_excel(save_dir, index=False)
# 删除空batch
def delete_orphan_batches(self):
# 获取所有批次的列表
all_batches = self.get_all_batch()
# 获取SCORE表中存在的批次列表
existing_batches = self.get_existing_batches()
# 找到需要删除的批次
batches_to_delete = [batch for batch in all_batches if batch not in existing_batches]
for batch in batches_to_delete:
sql = "DELETE FROM BATCH_INFO WHERE batch = ?;"
try:
self.database.execute(sql, (batch,))
self.database.commit()
except Exception as e:
print(f"数据库错误,错误原因{e.args}\n{traceback.format_exc()}")
return UNKNOWN_ERROR
return OK
def get_existing_batches(self):
sql = "SELECT DISTINCT batch FROM SCORE WHERE batch IS NOT NULL;"
try:
data = self.database.execute(sql)
result = [row[0] for row in data]
return result
except Exception as e:
print(f"数据库错误,错误原因{e.args}\n{traceback.format_exc()}")
return None

View File

@ -19,6 +19,7 @@ from Backend.consensus import *
from DeviceDefine.consensus import UNKNOWN, MASTER, SLAVER
from Exercise3.base_exercise import base_detect_image
from Exercise3.overhang import Overhang
from Exercise3.tricep_dip import Tricep_dip_1
from Exercise3.pull_up_1 import PullUp_1
from Exercise3.pull_up_2 import PullUp_2
from Exercise3.pull_up_3 import PullUp_3
@ -168,6 +169,8 @@ class ExerciseBackend(LSZXBackend.base_driver.BaseDriver):
threading.Thread(target=self.send_sql_score).start()
else:
self.manager.delete_orphan_batches()
self.manager.delete_empty_score_type()
self.sql_data = self.manager.select_all_score()
for i in self.sql_data:
i.update({'hr': {'hr': '', 'color': 'W'}, 'bo': {'bo': '', 'color': 'W'}})
@ -396,6 +399,30 @@ class ExerciseBackend(LSZXBackend.base_driver.BaseDriver):
except Exception as e:
return jsonify({STATUS: ACTION_FAIL, MSG: str(e)})
# 准备进行双杠臂屈伸
def active_tricep_dip(self):
if self.project:
self.project.kill()
data = request.json
person_id = data.get(ID)
band_id = data.get(BAND_ID)
if person_id:
info = self.manager.select_a_person(person_id)[0]
else:
if band_id:
raw_info = self.manager.select_a_person_from_band(band_id)
if not raw_info:
return jsonify({STATUS: ID_ERROR, MSG: "该手环没有匹配的人员"})
info = raw_info[0]
else:
return jsonify({STATUS: ILLEGAL_CONFIG, MSG: "参数缺失"})
try:
self.project = Tricep_dip_1(info, camera=self.camera)
self.exercise_tag = TRICEDIP
return jsonify({STATUS: STATUS_OK})
except Exception as e:
return jsonify({STATUS: ACTION_FAIL, MSG: str(e)})
# 准备进行仰卧起坐
def active_sit_up(self):
if self.project:
@ -562,11 +589,14 @@ class ExerciseBackend(LSZXBackend.base_driver.BaseDriver):
else:
_record = float(_result[0]['record'])
_score = float(_result[0]['score'])
if self.exercise_tag in {PUSHUP, PULLUP, SITUP, OVERHANG}:
if self.exercise_tag in {PUSHUP, PULLUP, SITUP, OVERHANG, TRICEDIP}:
print(111111)
if float(count) > _record or real_score > _score:
print(self.exercise_tag)
response_code = self.manager.update_counting_score(record=count, score=real_score,
person_id=person_id,
score_type=self.exercise_tag)
print(response_code)
elif self.exercise_tag == RUNAROUND:
if count != -1 and (float(count) < _record or real_score > _score):
response_code = self.manager.update_timekeeping_score(record=_count, score=real_score,
@ -1967,12 +1997,12 @@ class ExerciseBackend(LSZXBackend.base_driver.BaseDriver):
FACTORY_MODE.set()
cmd = request.json
data = cmd["data"]
code_re = re.search("[a-zA-z]+", data)
code_re = re.search("[a-zA-Z0-9]+(?=@)", data)
value_re = re.search("[0-9]+", data)
code = code_re.group() if code_re else None
value = value_re.group() if value_re else None
mes = "指令不存在!"
if code:
if code in FUNC_TABLE:
mes = FUNC_TABLE[code](value=value, eb=self)
else:
self.speak_driver.add_speak(mes)

View File

@ -14,6 +14,7 @@ SITUP = "situp"
OVERHANG = "overhang"
RUNAROUND = "runaround"
RUNNING = "running"
TRICEDIP = "tricepdip"
TASK_HAD_DONE = "task_had_done"
TASK_NUMBER = "task_number"

View File

@ -15,6 +15,7 @@ class IdentifiedMaster(LSZXBackend.exercise_backend.ExerciseBackend):
self.register(name="active_push_up", func=self.active_push_up, methods=[REQUEST_MODE_POST])
self.register(name="active_pull_up", func=self.active_pull_up, methods=[REQUEST_MODE_POST])
self.register(name="active_sit_up", func=self.active_sit_up, methods=[REQUEST_MODE_POST])
self.register(name="active_tricep_dip", func=self.active_tricep_dip, methods=[REQUEST_MODE_POST])
self.register(name="active_run_around", func=self.active_run_around, methods=[REQUEST_MODE_POST])
self.register(name="start_exercise", func=self.start_exercise, methods=[REQUEST_MODE_GET])
self.register(name="stop_exercise", func=self.stop_exercise, methods=[REQUEST_MODE_GET])

View File

@ -17,6 +17,7 @@ class IdentifiedMasterPD(LSZXBackend.exercise_backend.ExerciseBackend):
self.register(name="active_push_up", func=self.active_push_up, methods=[REQUEST_MODE_POST])
self.register(name="active_pull_up", func=self.active_pull_up, methods=[REQUEST_MODE_POST])
self.register(name="active_sit_up", func=self.active_sit_up, methods=[REQUEST_MODE_POST])
self.register(name="active_tricep_dip", func=self.active_tricep_dip, methods=[REQUEST_MODE_POST])
self.register(name="active_run_around", func=self.active_run_around, methods=[REQUEST_MODE_POST])
self.register(name="start_exercise", func=self.start_exercise, methods=[REQUEST_MODE_GET])
self.register(name="stop_exercise", func=self.stop_exercise, methods=[REQUEST_MODE_GET])

View File

@ -15,6 +15,7 @@ class IdentifiedMasterXF(LSZXBackend.exercise_backend.ExerciseBackend):
self.register(name="active_push_up", func=self.active_push_up, methods=[REQUEST_MODE_POST])
self.register(name="active_pull_up", func=self.active_pull_up, methods=[REQUEST_MODE_POST])
self.register(name="active_sit_up", func=self.active_sit_up, methods=[REQUEST_MODE_POST])
self.register(name="active_tricep_dip", func=self.active_tricep_dip, methods=[REQUEST_MODE_POST])
self.register(name="active_run_around", func=self.active_run_around, methods=[REQUEST_MODE_POST])
self.register(name="start_exercise", func=self.start_exercise, methods=[REQUEST_MODE_GET])
self.register(name="stop_exercise", func=self.stop_exercise, methods=[REQUEST_MODE_GET])

View File

@ -15,6 +15,7 @@ class Master(LSZXBackend.exercise_backend.ExerciseBackend):
self.register(name="active_push_up", func=self.active_push_up, methods=[REQUEST_MODE_POST])
self.register(name="active_pull_up", func=self.active_pull_up, methods=[REQUEST_MODE_POST])
self.register(name="active_sit_up", func=self.active_sit_up, methods=[REQUEST_MODE_POST])
self.register(name="active_tricep_dip", func=self.active_tricep_dip, methods=[REQUEST_MODE_POST])
self.register(name="active_run_around", func=self.active_run_around, methods=[REQUEST_MODE_POST])
self.register(name="start_exercise", func=self.start_exercise, methods=[REQUEST_MODE_GET])
self.register(name="stop_exercise", func=self.stop_exercise, methods=[REQUEST_MODE_GET])

View File

@ -15,6 +15,7 @@ class Slaver(LSZXBackend.exercise_backend.ExerciseBackend):
self.register(name="active_push_up", func=self.active_push_up, methods=[REQUEST_MODE_POST])
self.register(name="active_pull_up", func=self.active_pull_up, methods=[REQUEST_MODE_POST])
self.register(name="active_sit_up", func=self.active_sit_up, methods=[REQUEST_MODE_POST])
self.register(name="active_tricep_dip", func=self.active_tricep_dip, methods=[REQUEST_MODE_POST])
self.register(name="active_run_around", func=self.active_run_around, methods=[REQUEST_MODE_POST])
self.register(name="start_exercise", func=self.start_exercise, methods=[REQUEST_MODE_GET])
self.register(name="stop_exercise", func=self.stop_exercise, methods=[REQUEST_MODE_GET])