From d9a6844d4daeb24501c6675fa1ba6dd326ce111a Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 23 Sep 2024 16:02:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=88=90=E7=BB=A9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E8=A1=A5=E4=B8=81=E5=92=8C=E5=8F=8C=E6=9D=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Database/database_mgr.py | 57 +++++++++++++++++++++-- LSZXBackend/exercise_backend.py | 36 ++++++++++++-- LSZXBackend/general.py | 1 + LSZXBackend/identified_master.py | 1 + LSZXBackend/identified_master_pure.py | 1 + LSZXBackend/identified_master_xiaofang.py | 1 + LSZXBackend/master.py | 1 + LSZXBackend/slaver.py | 1 + 8 files changed, 91 insertions(+), 8 deletions(-) diff --git a/Database/database_mgr.py b/Database/database_mgr.py index 80e6c06..0b137db 100644 --- a/Database/database_mgr.py +++ b/Database/database_mgr.py @@ -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,7 +858,8 @@ class Database: SCORE_FEATURE_LIST[i]: row[i] for i in range(len(SCORE_FEATURE_LIST)) } - score_data.append(r) + if r['score_type']: + score_data.append(r) if score_data: return score_data except Exception as e: @@ -961,7 +964,8 @@ class Database: SCORE_FEATURE_LIST[i]: row[i] for i in range(len(SCORE_FEATURE_LIST)) } - score_data.append(r) + if r['score_type']: + score_data.append(r) if score_data: for s in score_data: for p in person_data: @@ -990,7 +994,8 @@ class Database: SCORE_FEATURE_LIST[i]: row[i] for i in range(len(SCORE_FEATURE_LIST)) } - score_data.append(r) + if r['score_type']: + score_data.append(r) return score_data # 获得所有人员的成绩 @@ -1020,7 +1025,8 @@ class Database: SCORE_FEATURE_LIST[i]: row[i] for i in range(len(SCORE_FEATURE_LIST)) } - score_data.append(r) + if r['score_type']: + score_data.append(r) for s in score_data: for p in person_data: if s['id'] == p['id']: @@ -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 diff --git a/LSZXBackend/exercise_backend.py b/LSZXBackend/exercise_backend.py index 4e830ee..79bb4c0 100644 --- a/LSZXBackend/exercise_backend.py +++ b/LSZXBackend/exercise_backend.py @@ -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) diff --git a/LSZXBackend/general.py b/LSZXBackend/general.py index 721aa8f..030458b 100644 --- a/LSZXBackend/general.py +++ b/LSZXBackend/general.py @@ -14,6 +14,7 @@ SITUP = "situp" OVERHANG = "overhang" RUNAROUND = "runaround" RUNNING = "running" +TRICEDIP = "tricepdip" TASK_HAD_DONE = "task_had_done" TASK_NUMBER = "task_number" diff --git a/LSZXBackend/identified_master.py b/LSZXBackend/identified_master.py index ac42ba5..e083ca4 100644 --- a/LSZXBackend/identified_master.py +++ b/LSZXBackend/identified_master.py @@ -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]) diff --git a/LSZXBackend/identified_master_pure.py b/LSZXBackend/identified_master_pure.py index 8148b18..3634a9f 100644 --- a/LSZXBackend/identified_master_pure.py +++ b/LSZXBackend/identified_master_pure.py @@ -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]) diff --git a/LSZXBackend/identified_master_xiaofang.py b/LSZXBackend/identified_master_xiaofang.py index f4f5a00..5cceb24 100644 --- a/LSZXBackend/identified_master_xiaofang.py +++ b/LSZXBackend/identified_master_xiaofang.py @@ -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]) diff --git a/LSZXBackend/master.py b/LSZXBackend/master.py index 2cb458c..fde6b4f 100644 --- a/LSZXBackend/master.py +++ b/LSZXBackend/master.py @@ -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]) diff --git a/LSZXBackend/slaver.py b/LSZXBackend/slaver.py index eed2ebe..32b214a 100644 --- a/LSZXBackend/slaver.py +++ b/LSZXBackend/slaver.py @@ -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])