添加成绩查询补丁和双杠
This commit is contained in:
parent
aebebe4064
commit
d9a6844d4d
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -14,6 +14,7 @@ SITUP = "situp"
|
|||
OVERHANG = "overhang"
|
||||
RUNAROUND = "runaround"
|
||||
RUNNING = "running"
|
||||
TRICEDIP = "tricepdip"
|
||||
TASK_HAD_DONE = "task_had_done"
|
||||
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_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])
|
||||
|
|
|
@ -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])
|
||||
|
|
|
@ -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])
|
||||
|
|
|
@ -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])
|
||||
|
|
|
@ -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])
|
||||
|
|
Loading…
Reference in New Issue