添加成绩查询补丁和双杠
This commit is contained in:
parent
aebebe4064
commit
d9a6844d4d
|
@ -41,13 +41,15 @@ OVERHANG = "overhang"
|
||||||
RUNAROUND = "runaround"
|
RUNAROUND = "runaround"
|
||||||
RUNNING = "running"
|
RUNNING = "running"
|
||||||
PULLUP = "pullup"
|
PULLUP = "pullup"
|
||||||
|
TRICEPDIP = 'tricepdip'
|
||||||
EXERCISE_NAME_LIST = {
|
EXERCISE_NAME_LIST = {
|
||||||
PUSHUP: "俯卧撑",
|
PUSHUP: "俯卧撑",
|
||||||
SITUP: "仰卧起坐",
|
SITUP: "仰卧起坐",
|
||||||
OVERHANG: "曲臂悬垂",
|
OVERHANG: "曲臂悬垂",
|
||||||
RUNAROUND: "30*2蛇形跑",
|
RUNAROUND: "30*2蛇形跑",
|
||||||
RUNNING: "长跑",
|
RUNNING: "长跑",
|
||||||
PULLUP: "引体向上"
|
PULLUP: "引体向上",
|
||||||
|
TRICEPDIP: "双杠臂屈伸"
|
||||||
}
|
}
|
||||||
|
|
||||||
GRADE_GREAT = "GREAT"
|
GRADE_GREAT = "GREAT"
|
||||||
|
@ -856,6 +858,7 @@ class Database:
|
||||||
SCORE_FEATURE_LIST[i]: row[i]
|
SCORE_FEATURE_LIST[i]: row[i]
|
||||||
for i in range(len(SCORE_FEATURE_LIST))
|
for i in range(len(SCORE_FEATURE_LIST))
|
||||||
}
|
}
|
||||||
|
if r['score_type']:
|
||||||
score_data.append(r)
|
score_data.append(r)
|
||||||
if score_data:
|
if score_data:
|
||||||
return score_data
|
return score_data
|
||||||
|
@ -961,6 +964,7 @@ class Database:
|
||||||
SCORE_FEATURE_LIST[i]: row[i]
|
SCORE_FEATURE_LIST[i]: row[i]
|
||||||
for i in range(len(SCORE_FEATURE_LIST))
|
for i in range(len(SCORE_FEATURE_LIST))
|
||||||
}
|
}
|
||||||
|
if r['score_type']:
|
||||||
score_data.append(r)
|
score_data.append(r)
|
||||||
if score_data:
|
if score_data:
|
||||||
for s in score_data:
|
for s in score_data:
|
||||||
|
@ -990,6 +994,7 @@ class Database:
|
||||||
SCORE_FEATURE_LIST[i]: row[i]
|
SCORE_FEATURE_LIST[i]: row[i]
|
||||||
for i in range(len(SCORE_FEATURE_LIST))
|
for i in range(len(SCORE_FEATURE_LIST))
|
||||||
}
|
}
|
||||||
|
if r['score_type']:
|
||||||
score_data.append(r)
|
score_data.append(r)
|
||||||
return score_data
|
return score_data
|
||||||
|
|
||||||
|
@ -1020,6 +1025,7 @@ class Database:
|
||||||
SCORE_FEATURE_LIST[i]: row[i]
|
SCORE_FEATURE_LIST[i]: row[i]
|
||||||
for i in range(len(SCORE_FEATURE_LIST))
|
for i in range(len(SCORE_FEATURE_LIST))
|
||||||
}
|
}
|
||||||
|
if r['score_type']:
|
||||||
score_data.append(r)
|
score_data.append(r)
|
||||||
for s in score_data:
|
for s in score_data:
|
||||||
for p in person_data:
|
for p in person_data:
|
||||||
|
@ -1037,8 +1043,49 @@ class Database:
|
||||||
p[count] = round(float(s['record']), 2)
|
p[count] = round(float(s['record']), 2)
|
||||||
return person_data
|
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):
|
def dump_score(self, save_dir):
|
||||||
data = self.select_all_score()
|
data = self.select_all_score()
|
||||||
df = pd.DataFrame(data)
|
df = pd.DataFrame(data)
|
||||||
df.to_excel(save_dir, index=False)
|
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
|
||||||
|
|
|
@ -19,6 +19,7 @@ from Backend.consensus import *
|
||||||
from DeviceDefine.consensus import UNKNOWN, MASTER, SLAVER
|
from DeviceDefine.consensus import UNKNOWN, MASTER, SLAVER
|
||||||
from Exercise3.base_exercise import base_detect_image
|
from Exercise3.base_exercise import base_detect_image
|
||||||
from Exercise3.overhang import Overhang
|
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_1 import PullUp_1
|
||||||
from Exercise3.pull_up_2 import PullUp_2
|
from Exercise3.pull_up_2 import PullUp_2
|
||||||
from Exercise3.pull_up_3 import PullUp_3
|
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()
|
threading.Thread(target=self.send_sql_score).start()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
self.manager.delete_orphan_batches()
|
||||||
|
self.manager.delete_empty_score_type()
|
||||||
self.sql_data = self.manager.select_all_score()
|
self.sql_data = self.manager.select_all_score()
|
||||||
for i in self.sql_data:
|
for i in self.sql_data:
|
||||||
i.update({'hr': {'hr': '', 'color': 'W'}, 'bo': {'bo': '', 'color': 'W'}})
|
i.update({'hr': {'hr': '', 'color': 'W'}, 'bo': {'bo': '', 'color': 'W'}})
|
||||||
|
@ -396,6 +399,30 @@ class ExerciseBackend(LSZXBackend.base_driver.BaseDriver):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return jsonify({STATUS: ACTION_FAIL, MSG: str(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):
|
def active_sit_up(self):
|
||||||
if self.project:
|
if self.project:
|
||||||
|
@ -562,11 +589,14 @@ class ExerciseBackend(LSZXBackend.base_driver.BaseDriver):
|
||||||
else:
|
else:
|
||||||
_record = float(_result[0]['record'])
|
_record = float(_result[0]['record'])
|
||||||
_score = float(_result[0]['score'])
|
_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:
|
if float(count) > _record or real_score > _score:
|
||||||
|
print(self.exercise_tag)
|
||||||
response_code = self.manager.update_counting_score(record=count, score=real_score,
|
response_code = self.manager.update_counting_score(record=count, score=real_score,
|
||||||
person_id=person_id,
|
person_id=person_id,
|
||||||
score_type=self.exercise_tag)
|
score_type=self.exercise_tag)
|
||||||
|
print(response_code)
|
||||||
elif self.exercise_tag == RUNAROUND:
|
elif self.exercise_tag == RUNAROUND:
|
||||||
if count != -1 and (float(count) < _record or real_score > _score):
|
if count != -1 and (float(count) < _record or real_score > _score):
|
||||||
response_code = self.manager.update_timekeeping_score(record=_count, score=real_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()
|
FACTORY_MODE.set()
|
||||||
cmd = request.json
|
cmd = request.json
|
||||||
data = cmd["data"]
|
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)
|
value_re = re.search("[0-9]+", data)
|
||||||
code = code_re.group() if code_re else None
|
code = code_re.group() if code_re else None
|
||||||
value = value_re.group() if value_re else None
|
value = value_re.group() if value_re else None
|
||||||
mes = "指令不存在!"
|
mes = "指令不存在!"
|
||||||
if code:
|
if code in FUNC_TABLE:
|
||||||
mes = FUNC_TABLE[code](value=value, eb=self)
|
mes = FUNC_TABLE[code](value=value, eb=self)
|
||||||
else:
|
else:
|
||||||
self.speak_driver.add_speak(mes)
|
self.speak_driver.add_speak(mes)
|
||||||
|
|
|
@ -14,6 +14,7 @@ SITUP = "situp"
|
||||||
OVERHANG = "overhang"
|
OVERHANG = "overhang"
|
||||||
RUNAROUND = "runaround"
|
RUNAROUND = "runaround"
|
||||||
RUNNING = "running"
|
RUNNING = "running"
|
||||||
|
TRICEDIP = "tricepdip"
|
||||||
TASK_HAD_DONE = "task_had_done"
|
TASK_HAD_DONE = "task_had_done"
|
||||||
TASK_NUMBER = "task_number"
|
TASK_NUMBER = "task_number"
|
||||||
|
|
||||||
|
|
|
@ -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_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_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_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="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="start_exercise", func=self.start_exercise, methods=[REQUEST_MODE_GET])
|
||||||
self.register(name="stop_exercise", func=self.stop_exercise, methods=[REQUEST_MODE_GET])
|
self.register(name="stop_exercise", func=self.stop_exercise, methods=[REQUEST_MODE_GET])
|
||||||
|
|
|
@ -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_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_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_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="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="start_exercise", func=self.start_exercise, methods=[REQUEST_MODE_GET])
|
||||||
self.register(name="stop_exercise", func=self.stop_exercise, methods=[REQUEST_MODE_GET])
|
self.register(name="stop_exercise", func=self.stop_exercise, methods=[REQUEST_MODE_GET])
|
||||||
|
|
|
@ -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_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_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_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="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="start_exercise", func=self.start_exercise, methods=[REQUEST_MODE_GET])
|
||||||
self.register(name="stop_exercise", func=self.stop_exercise, methods=[REQUEST_MODE_GET])
|
self.register(name="stop_exercise", func=self.stop_exercise, methods=[REQUEST_MODE_GET])
|
||||||
|
|
|
@ -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_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_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_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="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="start_exercise", func=self.start_exercise, methods=[REQUEST_MODE_GET])
|
||||||
self.register(name="stop_exercise", func=self.stop_exercise, methods=[REQUEST_MODE_GET])
|
self.register(name="stop_exercise", func=self.stop_exercise, methods=[REQUEST_MODE_GET])
|
||||||
|
|
|
@ -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_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_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_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="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="start_exercise", func=self.start_exercise, methods=[REQUEST_MODE_GET])
|
||||||
self.register(name="stop_exercise", func=self.stop_exercise, methods=[REQUEST_MODE_GET])
|
self.register(name="stop_exercise", func=self.stop_exercise, methods=[REQUEST_MODE_GET])
|
||||||
|
|
Loading…
Reference in New Issue