From 255e417243a2bdf7b14abb38b5c1f13b9442e74f Mon Sep 17 00:00:00 2001 From: Tian jianyong <11429339@qq.com> Date: Fri, 5 Dec 2025 10:24:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20git=20=E4=BB=93=E5=BA=93?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-fastapi-backend | 1 - ruoyi-fastapi-backend/.env.dev | 150 +++ ruoyi-fastapi-backend/.env.prod | 75 ++ ruoyi-fastapi-backend/.gitignore | 145 +++ ruoyi-fastapi-backend/001测试海康api.py | 96 ++ ruoyi-fastapi-backend/002简单http服务.py | 536 ++++++++ ruoyi-fastapi-backend/003测试海康url.py | 11 + .../004测试compreface方法.py | 57 + .../005测试compreface人脸识别服务.py | 56 + ruoyi-fastapi-backend/006测试定时任务.py | 25 + ruoyi-fastapi-backend/007测试python文件.py | 5 + .../75c03e462769c81b6a8513d90ff2a27d.jpg | Bin 0 -> 147891 bytes ruoyi-fastapi-backend/app.py | 12 + ruoyi-fastapi-backend/assets/font/Arial.ttf | Bin 0 -> 154600 bytes .../compreface_face_detection.json | 18 + .../compreface_face_recognition.json | 33 + ruoyi-fastapi-backend/config/__init__.py | 0 ruoyi-fastapi-backend/config/constant.py | 483 +++++++ ruoyi-fastapi-backend/config/database.py | 30 + ruoyi-fastapi-backend/config/enums.py | 78 ++ ruoyi-fastapi-backend/config/env.py | 353 +++++ ruoyi-fastapi-backend/config/get_db.py | 24 + ruoyi-fastapi-backend/config/get_redis.py | 77 ++ ruoyi-fastapi-backend/config/get_scheduler.py | 279 ++++ ruoyi-fastapi-backend/exceptions/__init__.py | 0 ruoyi-fastapi-backend/exceptions/exception.py | 58 + ruoyi-fastapi-backend/exceptions/handle.py | 71 + ruoyi-fastapi-backend/middlewares/__init__.py | 0 .../middlewares/cors_middleware.py | 25 + .../middlewares/gzip_middleware.py | 12 + ruoyi-fastapi-backend/middlewares/handle.py | 16 + .../middlewares/trace_middleware/__init__.py | 17 + .../middlewares/trace_middleware/ctx.py | 23 + .../middlewares/trace_middleware/middle.py | 47 + .../middlewares/trace_middleware/span.py | 52 + .../module_admin/__init__.py | 0 .../module_admin/annotation/__init__.py | 0 .../module_admin/annotation/log_annotation.py | 266 ++++ .../annotation/pydantic_annotation.py | 84 ++ .../module_admin/aspect/__init__.py | 0 .../module_admin/aspect/data_scope.py | 75 ++ .../module_admin/aspect/interface_auth.py | 68 + .../module_admin/controller/__init__.py | 0 .../controller/cache_controller.py | 89 ++ .../controller/captcha_controller.py | 40 + .../controller/common_controller.py | 36 + .../controller/compreface_controller.py | 58 + .../controller/config_controller.py | 123 ++ .../controller/dept_controller.py | 132 ++ .../controller/dict_controller.py | 239 ++++ .../controller/door_controller.py | 162 +++ .../explanation_content_controller.py | 143 ++ .../explanation_content_type_controller.py | 111 ++ .../explanation_style_controller.py | 105 ++ ...explanation_style_robot_pair_controller.py | 130 ++ .../controller/haikang_controller.py | 81 ++ .../identification_record_controller.py | 106 ++ .../identification_statistics_controller.py | 131 ++ .../controller/info_controller.py | 131 ++ .../module_admin/controller/job_controller.py | 194 +++ .../module_admin/controller/log_controller.py | 150 +++ .../controller/login_controller.py | 155 +++ .../controller/menu_controller.py | 114 ++ .../controller/message_controller.py | 163 +++ .../controller/notice_controller.py | 89 ++ .../controller/online_controller.py | 40 + .../module_admin/controller/post_controler.py | 105 ++ .../controller/ragflow_controller.py | 295 +++++ .../controller/robot_action_controller.py | 106 ++ .../controller/robot_role_controller.py | 110 ++ .../robot_role_pairing_controller.py | 155 +++ .../controller/role_controller.py | 283 ++++ .../controller/scheduler_controller.py | 79 ++ .../controller/server_controller.py | 21 + .../controller/sys_alert_controller.py | 106 ++ .../controller/sys_statistics_controller.py | 240 ++++ .../controller/test_controller.py | 58 + .../controller/user_controller.py | 399 ++++++ .../controller/visitor_type_controller.py | 105 ++ .../controller/words_controller.py | 173 +++ .../module_admin/dao/__init__.py | 0 .../module_admin/dao/config_dao.py | 116 ++ .../module_admin/dao/dept_dao.py | 307 +++++ .../module_admin/dao/dict_dao.py | 281 ++++ .../module_admin/dao/door_dao.py | 154 +++ .../dao/explanation_content_dao.py | 135 ++ .../dao/explanation_content_type_dao.py | 120 ++ .../module_admin/dao/explanation_style_dao.py | 131 ++ .../dao/explanation_style_robot_pair_dao.py | 194 +++ .../dao/identification_record_dao.py | 129 ++ .../dao/identification_statistics_dao.py | 200 +++ .../module_admin/dao/info_dao.py | 173 +++ .../module_admin/dao/job_dao.py | 126 ++ .../module_admin/dao/job_log_dao.py | 79 ++ .../module_admin/dao/log_dao.py | 171 +++ .../module_admin/dao/login_dao.py | 28 + .../module_admin/dao/menu_dao.py | 227 ++++ .../module_admin/dao/message_dao.py | 175 +++ .../module_admin/dao/notice_dao.py | 117 ++ .../module_admin/dao/post_dao.py | 143 ++ .../module_admin/dao/robot_action_dao.py | 119 ++ .../module_admin/dao/robot_role_dao.py | 131 ++ .../dao/robot_role_pairing_dao.py | 153 +++ .../module_admin/dao/role_dao.py | 338 +++++ .../module_admin/dao/sys_alert_dao.py | 132 ++ .../module_admin/dao/sys_statistics_dao.py | 266 ++++ .../module_admin/dao/test_dao.py | 16 + .../module_admin/dao/user_dao.py | 568 ++++++++ .../module_admin/dao/visitor_type_dao.py | 125 ++ .../module_admin/dao/words_dao.py | 161 +++ .../module_admin/entity/__init__.py | 0 .../module_admin/entity/do/__init__.py | 0 .../module_admin/entity/do/config_do.py | 22 + .../module_admin/entity/do/dept_do.py | 26 + .../module_admin/entity/do/dict_do.py | 46 + .../module_admin/entity/do/door_do.py | 24 + .../entity/do/explanation_content_do.py | 25 + .../entity/do/explanation_content_type_do.py | 21 + .../entity/do/explanation_style_do.py | 21 + .../do/explanation_style_robot_pair_do.py | 24 + .../entity/do/identification_record_do.py | 24 + .../entity/do/identification_statistics_do.py | 20 + .../module_admin/entity/do/info_do.py | 33 + .../module_admin/entity/do/job_do.py | 54 + .../module_admin/entity/do/log_do.py | 54 + .../module_admin/entity/do/menu_do.py | 32 + .../module_admin/entity/do/message_do.py | 24 + .../module_admin/entity/do/notice_do.py | 22 + .../module_admin/entity/do/post_do.py | 22 + .../module_admin/entity/do/robot_action_do.py | 21 + .../module_admin/entity/do/robot_role_do.py | 22 + .../entity/do/robot_role_pairing_do.py | 32 + .../module_admin/entity/do/role_do.py | 52 + .../module_admin/entity/do/sys_alert_do.py | 22 + .../entity/do/sys_statistics_do.py | 25 + .../module_admin/entity/do/user_do.py | 53 + .../module_admin/entity/do/visitor_type_do.py | 21 + .../module_admin/entity/do/words_do.py | 26 + .../module_admin/entity/vo/__init__.py | 0 .../module_admin/entity/vo/cache_vo.py | 28 + .../module_admin/entity/vo/common_vo.py | 26 + .../module_admin/entity/vo/config_vo.py | 74 ++ .../module_admin/entity/vo/dept_vo.py | 75 ++ .../module_admin/entity/vo/dict_vo.py | 149 +++ .../module_admin/entity/vo/door_vo.py | 57 + .../entity/vo/explanation_content_type_vo.py | 53 + .../entity/vo/explanation_content_vo.py | 67 + .../vo/explanation_style_robot_pair_vo.py | 83 ++ .../entity/vo/explanation_style_vo.py | 56 + .../module_admin/entity/vo/haikang_vo.py | 24 + .../entity/vo/identification_record_vo.py | 57 + .../entity/vo/identification_statistics_vo.py | 53 + .../module_admin/entity/vo/info_vo.py | 100 ++ .../module_admin/entity/vo/job_vo.py | 134 ++ .../module_admin/entity/vo/log_vo.py | 131 ++ .../module_admin/entity/vo/login_vo.py | 87 ++ .../module_admin/entity/vo/menu_vo.py | 88 ++ .../module_admin/entity/vo/message_vo.py | 104 ++ .../module_admin/entity/vo/notice_vo.py | 63 + .../module_admin/entity/vo/online_vo.py | 42 + .../module_admin/entity/vo/post_vo.py | 73 ++ .../module_admin/entity/vo/ragflow_vo.py | 153 +++ .../module_admin/entity/vo/robot_action_vo.py | 54 + .../entity/vo/robot_role_pairing_vo.py | 94 ++ .../module_admin/entity/vo/robot_role_vo.py | 84 ++ .../module_admin/entity/vo/role_vo.py | 158 +++ .../module_admin/entity/vo/server_vo.py | 67 + .../module_admin/entity/vo/sys_alert_vo.py | 57 + .../entity/vo/sys_statistics_vo.py | 69 + .../module_admin/entity/vo/test_vo.py | 21 + .../module_admin/entity/vo/user_vo.py | 282 ++++ .../module_admin/entity/vo/visitor_type_vo.py | 60 + .../module_admin/entity/vo/words_vo.py | 80 ++ .../module_admin/service/__init__.py | 0 .../module_admin/service/cache_service.py | 124 ++ .../module_admin/service/captcha_service.py | 48 + .../module_admin/service/common_service.py | 91 ++ .../service/compreface_service.py | 185 +++ .../module_admin/service/config_service.py | 231 ++++ .../module_admin/service/dept_service.py | 275 ++++ .../module_admin/service/dict_service.py | 459 +++++++ .../module_admin/service/door_service.py | 178 +++ .../service/explanation_content_service.py | 136 ++ .../explanation_content_type_service.py | 132 ++ .../explanation_style_robot_pair_service.py | 159 +++ .../service/explanation_style_service.py | 132 ++ .../module_admin/service/haikang_service.py | 313 +++++ .../service/identification_record_service.py | 187 +++ .../identification_statistics_service.py | 152 +++ .../module_admin/service/info_service.py | 145 +++ .../module_admin/service/job_log_service.py | 142 ++ .../module_admin/service/job_service.py | 265 ++++ .../module_admin/service/log_service.py | 258 ++++ .../module_admin/service/login_service.py | 606 +++++++++ .../module_admin/service/menu_service.py | 215 +++ .../module_admin/service/message_service.py | 181 +++ .../module_admin/service/notice_service.py | 128 ++ .../module_admin/service/online_service.py | 76 ++ .../module_admin/service/post_service.py | 183 +++ .../module_admin/service/ragflow_service.py | 181 +++ .../service/robot_action_service.py | 132 ++ .../service/robot_role_pairing_service.py | 187 +++ .../service/robot_role_service.py | 133 ++ .../module_admin/service/role_service.py | 356 +++++ .../module_admin/service/server_service.py | 96 ++ .../module_admin/service/sys_alert_service.py | 133 ++ .../service/sys_statistics_service.py | 248 ++++ .../module_admin/service/test_service.py | 10 + .../module_admin/service/user_service.py | 639 +++++++++ .../service/visitor_type_service.py | 136 ++ .../module_admin/service/weather_service.py | 139 ++ .../module_admin/service/words_service.py | 163 +++ .../controller/gen_controller.py | 158 +++ .../module_generator/dao/gen_dao.py | 393 ++++++ .../module_generator/entity/do/gen_do.py | 74 ++ .../module_generator/entity/vo/gen_vo.py | 264 ++++ .../module_generator/service/gen_service.py | 499 +++++++ .../templates/js/api.js.jinja2 | 44 + .../templates/python/controller.py.jinja2 | 125 ++ .../templates/python/dao.py.jinja2 | 213 +++ .../templates/python/do.py.jinja2 | 41 + .../templates/python/service.py.jinja2 | 211 +++ .../templates/python/vo.py.jinja2 | 178 +++ .../module_generator/templates/sql/sql.jinja2 | 47 + .../templates/vue/index-tree.vue.jinja2 | 496 +++++++ .../templates/vue/index.vue.jinja2 | 591 +++++++++ .../templates/vue/v3/index-tree.vue.jinja2 | 463 +++++++ .../templates/vue/v3/index.vue.jinja2 | 580 +++++++++ ruoyi-fastapi-backend/module_task/__init__.py | 1 + .../module_task/scheduler_test.py | 19 + ruoyi-fastapi-backend/output.mp4 | Bin 0 -> 11332839 bytes ruoyi-fastapi-backend/requirements-pg.txt | 18 + ruoyi-fastapi-backend/requirements.txt | 19 + ruoyi-fastapi-backend/ruff.toml | 4 + ruoyi-fastapi-backend/server.py | 131 ++ .../sql/ruoyi-fastapi-pg.sql | 1047 +++++++++++++++ ruoyi-fastapi-backend/sql/ruoyi-fastapi.sql | 713 ++++++++++ .../sub_applications/handle.py | 10 + .../sub_applications/staticfiles.py | 10 + .../test/001测试access_token.py | 5 + .../test/002测试查询门禁点列表.py | 16 + .../test/002测试查询门禁状态.py | 8 + ruoyi-fastapi-backend/test/003测试控制门禁.py | 8 + .../test/004查询门禁点事件.py | 7 + .../test/005测试按条件查询人脸分组.py | 8 + .../test/006测试人脸分组1vN检索.py | 17 + ruoyi-fastapi-backend/utils/__init__.py | 0 ruoyi-fastapi-backend/utils/common_util.py | 274 ++++ .../utils/compreface_util.py | 160 +++ ruoyi-fastapi-backend/utils/cron_util.py | 172 +++ ruoyi-fastapi-backend/utils/excel_util.py | 118 ++ ruoyi-fastapi-backend/utils/gen_util.py | 223 ++++ ruoyi-fastapi-backend/utils/haikang_util.py | 1056 +++++++++++++++ .../utils/lang_graph_util.py | 2 + ruoyi-fastapi-backend/utils/log_util.py | 60 + ruoyi-fastapi-backend/utils/message_util.py | 5 + ruoyi-fastapi-backend/utils/page_util.py | 116 ++ ruoyi-fastapi-backend/utils/pwd_util.py | 30 + .../utils/ragflow_asy_util.py | 1069 +++++++++++++++ .../utils/ragflow_client_manager.py | 54 + ruoyi-fastapi-backend/utils/ragflow_util.py | 1152 +++++++++++++++++ ruoyi-fastapi-backend/utils/response_util.py | 269 ++++ ruoyi-fastapi-backend/utils/string_util.py | 170 +++ ruoyi-fastapi-backend/utils/template_util.py | 470 +++++++ .../utils/time_format_util.py | 141 ++ ruoyi-fastapi-backend/utils/unitree_util.py | 1 + ruoyi-fastapi-backend/utils/upload_util.py | 105 ++ ruoyi-fastapi-backend/utils/weather_client.py | 49 + 268 files changed, 36568 insertions(+), 1 deletion(-) delete mode 160000 ruoyi-fastapi-backend create mode 100644 ruoyi-fastapi-backend/.env.dev create mode 100644 ruoyi-fastapi-backend/.env.prod create mode 100644 ruoyi-fastapi-backend/.gitignore create mode 100644 ruoyi-fastapi-backend/001测试海康api.py create mode 100644 ruoyi-fastapi-backend/002简单http服务.py create mode 100644 ruoyi-fastapi-backend/003测试海康url.py create mode 100644 ruoyi-fastapi-backend/004测试compreface方法.py create mode 100644 ruoyi-fastapi-backend/005测试compreface人脸识别服务.py create mode 100644 ruoyi-fastapi-backend/006测试定时任务.py create mode 100644 ruoyi-fastapi-backend/007测试python文件.py create mode 100644 ruoyi-fastapi-backend/75c03e462769c81b6a8513d90ff2a27d.jpg create mode 100644 ruoyi-fastapi-backend/app.py create mode 100644 ruoyi-fastapi-backend/assets/font/Arial.ttf create mode 100644 ruoyi-fastapi-backend/compreface_face_detection.json create mode 100644 ruoyi-fastapi-backend/compreface_face_recognition.json create mode 100644 ruoyi-fastapi-backend/config/__init__.py create mode 100644 ruoyi-fastapi-backend/config/constant.py create mode 100644 ruoyi-fastapi-backend/config/database.py create mode 100644 ruoyi-fastapi-backend/config/enums.py create mode 100644 ruoyi-fastapi-backend/config/env.py create mode 100644 ruoyi-fastapi-backend/config/get_db.py create mode 100644 ruoyi-fastapi-backend/config/get_redis.py create mode 100644 ruoyi-fastapi-backend/config/get_scheduler.py create mode 100644 ruoyi-fastapi-backend/exceptions/__init__.py create mode 100644 ruoyi-fastapi-backend/exceptions/exception.py create mode 100644 ruoyi-fastapi-backend/exceptions/handle.py create mode 100644 ruoyi-fastapi-backend/middlewares/__init__.py create mode 100644 ruoyi-fastapi-backend/middlewares/cors_middleware.py create mode 100644 ruoyi-fastapi-backend/middlewares/gzip_middleware.py create mode 100644 ruoyi-fastapi-backend/middlewares/handle.py create mode 100644 ruoyi-fastapi-backend/middlewares/trace_middleware/__init__.py create mode 100644 ruoyi-fastapi-backend/middlewares/trace_middleware/ctx.py create mode 100644 ruoyi-fastapi-backend/middlewares/trace_middleware/middle.py create mode 100644 ruoyi-fastapi-backend/middlewares/trace_middleware/span.py create mode 100644 ruoyi-fastapi-backend/module_admin/__init__.py create mode 100644 ruoyi-fastapi-backend/module_admin/annotation/__init__.py create mode 100644 ruoyi-fastapi-backend/module_admin/annotation/log_annotation.py create mode 100644 ruoyi-fastapi-backend/module_admin/annotation/pydantic_annotation.py create mode 100644 ruoyi-fastapi-backend/module_admin/aspect/__init__.py create mode 100644 ruoyi-fastapi-backend/module_admin/aspect/data_scope.py create mode 100644 ruoyi-fastapi-backend/module_admin/aspect/interface_auth.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/__init__.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/cache_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/captcha_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/common_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/compreface_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/config_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/dept_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/dict_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/door_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/explanation_content_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/explanation_content_type_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/explanation_style_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/explanation_style_robot_pair_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/haikang_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/identification_record_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/identification_statistics_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/info_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/job_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/log_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/login_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/menu_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/message_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/notice_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/online_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/post_controler.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/ragflow_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/robot_action_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/robot_role_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/robot_role_pairing_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/role_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/scheduler_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/server_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/sys_alert_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/sys_statistics_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/test_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/user_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/visitor_type_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/controller/words_controller.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/__init__.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/config_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/dept_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/dict_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/door_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/explanation_content_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/explanation_content_type_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/explanation_style_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/explanation_style_robot_pair_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/identification_record_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/identification_statistics_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/info_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/job_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/job_log_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/log_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/login_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/menu_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/message_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/notice_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/post_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/robot_action_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/robot_role_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/robot_role_pairing_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/role_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/sys_alert_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/sys_statistics_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/test_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/user_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/visitor_type_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/dao/words_dao.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/__init__.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/__init__.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/config_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/dept_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/dict_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/door_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/explanation_content_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/explanation_content_type_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/explanation_style_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/explanation_style_robot_pair_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/identification_record_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/identification_statistics_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/info_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/job_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/log_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/menu_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/message_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/notice_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/post_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/robot_action_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/robot_role_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/robot_role_pairing_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/role_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/sys_alert_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/sys_statistics_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/user_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/visitor_type_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/do/words_do.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/__init__.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/cache_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/common_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/config_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/dept_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/dict_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/door_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/explanation_content_type_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/explanation_content_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/explanation_style_robot_pair_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/explanation_style_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/haikang_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/identification_record_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/identification_statistics_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/info_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/job_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/log_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/login_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/menu_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/message_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/notice_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/online_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/post_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/ragflow_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/robot_action_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/robot_role_pairing_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/robot_role_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/role_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/server_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/sys_alert_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/sys_statistics_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/test_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/user_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/visitor_type_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/entity/vo/words_vo.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/__init__.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/cache_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/captcha_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/common_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/compreface_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/config_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/dept_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/dict_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/door_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/explanation_content_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/explanation_content_type_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/explanation_style_robot_pair_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/explanation_style_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/haikang_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/identification_record_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/identification_statistics_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/info_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/job_log_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/job_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/log_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/login_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/menu_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/message_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/notice_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/online_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/post_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/ragflow_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/robot_action_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/robot_role_pairing_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/robot_role_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/role_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/server_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/sys_alert_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/sys_statistics_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/test_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/user_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/visitor_type_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/weather_service.py create mode 100644 ruoyi-fastapi-backend/module_admin/service/words_service.py create mode 100644 ruoyi-fastapi-backend/module_generator/controller/gen_controller.py create mode 100644 ruoyi-fastapi-backend/module_generator/dao/gen_dao.py create mode 100644 ruoyi-fastapi-backend/module_generator/entity/do/gen_do.py create mode 100644 ruoyi-fastapi-backend/module_generator/entity/vo/gen_vo.py create mode 100644 ruoyi-fastapi-backend/module_generator/service/gen_service.py create mode 100644 ruoyi-fastapi-backend/module_generator/templates/js/api.js.jinja2 create mode 100644 ruoyi-fastapi-backend/module_generator/templates/python/controller.py.jinja2 create mode 100644 ruoyi-fastapi-backend/module_generator/templates/python/dao.py.jinja2 create mode 100644 ruoyi-fastapi-backend/module_generator/templates/python/do.py.jinja2 create mode 100644 ruoyi-fastapi-backend/module_generator/templates/python/service.py.jinja2 create mode 100644 ruoyi-fastapi-backend/module_generator/templates/python/vo.py.jinja2 create mode 100644 ruoyi-fastapi-backend/module_generator/templates/sql/sql.jinja2 create mode 100644 ruoyi-fastapi-backend/module_generator/templates/vue/index-tree.vue.jinja2 create mode 100644 ruoyi-fastapi-backend/module_generator/templates/vue/index.vue.jinja2 create mode 100644 ruoyi-fastapi-backend/module_generator/templates/vue/v3/index-tree.vue.jinja2 create mode 100644 ruoyi-fastapi-backend/module_generator/templates/vue/v3/index.vue.jinja2 create mode 100644 ruoyi-fastapi-backend/module_task/__init__.py create mode 100644 ruoyi-fastapi-backend/module_task/scheduler_test.py create mode 100644 ruoyi-fastapi-backend/output.mp4 create mode 100644 ruoyi-fastapi-backend/requirements-pg.txt create mode 100644 ruoyi-fastapi-backend/requirements.txt create mode 100644 ruoyi-fastapi-backend/ruff.toml create mode 100644 ruoyi-fastapi-backend/server.py create mode 100644 ruoyi-fastapi-backend/sql/ruoyi-fastapi-pg.sql create mode 100644 ruoyi-fastapi-backend/sql/ruoyi-fastapi.sql create mode 100644 ruoyi-fastapi-backend/sub_applications/handle.py create mode 100644 ruoyi-fastapi-backend/sub_applications/staticfiles.py create mode 100644 ruoyi-fastapi-backend/test/001测试access_token.py create mode 100644 ruoyi-fastapi-backend/test/002测试查询门禁点列表.py create mode 100644 ruoyi-fastapi-backend/test/002测试查询门禁状态.py create mode 100644 ruoyi-fastapi-backend/test/003测试控制门禁.py create mode 100644 ruoyi-fastapi-backend/test/004查询门禁点事件.py create mode 100644 ruoyi-fastapi-backend/test/005测试按条件查询人脸分组.py create mode 100644 ruoyi-fastapi-backend/test/006测试人脸分组1vN检索.py create mode 100644 ruoyi-fastapi-backend/utils/__init__.py create mode 100644 ruoyi-fastapi-backend/utils/common_util.py create mode 100644 ruoyi-fastapi-backend/utils/compreface_util.py create mode 100644 ruoyi-fastapi-backend/utils/cron_util.py create mode 100644 ruoyi-fastapi-backend/utils/excel_util.py create mode 100644 ruoyi-fastapi-backend/utils/gen_util.py create mode 100644 ruoyi-fastapi-backend/utils/haikang_util.py create mode 100644 ruoyi-fastapi-backend/utils/lang_graph_util.py create mode 100644 ruoyi-fastapi-backend/utils/log_util.py create mode 100644 ruoyi-fastapi-backend/utils/message_util.py create mode 100644 ruoyi-fastapi-backend/utils/page_util.py create mode 100644 ruoyi-fastapi-backend/utils/pwd_util.py create mode 100644 ruoyi-fastapi-backend/utils/ragflow_asy_util.py create mode 100644 ruoyi-fastapi-backend/utils/ragflow_client_manager.py create mode 100644 ruoyi-fastapi-backend/utils/ragflow_util.py create mode 100644 ruoyi-fastapi-backend/utils/response_util.py create mode 100644 ruoyi-fastapi-backend/utils/string_util.py create mode 100644 ruoyi-fastapi-backend/utils/template_util.py create mode 100644 ruoyi-fastapi-backend/utils/time_format_util.py create mode 100644 ruoyi-fastapi-backend/utils/unitree_util.py create mode 100644 ruoyi-fastapi-backend/utils/upload_util.py create mode 100644 ruoyi-fastapi-backend/utils/weather_client.py diff --git a/ruoyi-fastapi-backend b/ruoyi-fastapi-backend deleted file mode 160000 index 443d4d7..0000000 --- a/ruoyi-fastapi-backend +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 443d4d7159d02f696efe2b26808b582bf8738160 diff --git a/ruoyi-fastapi-backend/.env.dev b/ruoyi-fastapi-backend/.env.dev new file mode 100644 index 0000000..940e203 --- /dev/null +++ b/ruoyi-fastapi-backend/.env.dev @@ -0,0 +1,150 @@ +# -------- 应用配置 -------- +# 应用运行环境 +APP_ENV = 'dev' +# 应用名称 +APP_NAME = 'Kangda_robot' +# 应用代理路径 +APP_ROOT_PATH = '/dev-api' +# 应用主机 +APP_HOST = '0.0.0.0' +# 应用端口 +APP_PORT = 9099 +# 应用版本 +APP_VERSION= '1.6.2' +# 应用是否开启热重载 +APP_RELOAD = false +# 应用是否开启IP归属区域查询 +APP_IP_LOCATION_QUERY = true +# 应用是否允许账号同时登录 +APP_SAME_TIME_LOGIN = true + +APP_DOCS_URL = +APP_REDOC_URL = +APP_OPENAPI_URL = + + +# -------- Jwt配置 -------- +# Jwt秘钥 +JWT_SECRET_KEY = 'b01c66dc2c58dc6a0aabfe2144256be36226de378bf87f72c0c795dda67f4d55' +# Jwt算法 +JWT_ALGORITHM = 'HS256' +# 令牌过期时间 +JWT_EXPIRE_MINUTES = 43200 +# redis中令牌过期时间 +JWT_REDIS_EXPIRE_MINUTES = 43100 + + +# -------- 数据库配置 -------- +# 数据库类型,可选的有'mysql'、'postgresql',默认为'mysql' +DB_TYPE = 'mysql' +# 数据库主机 +DB_HOST = '10.0.0.17' +# 数据库端口 +DB_PORT = 3306 +# 数据库用户名 +DB_USERNAME = 'root' +# 数据库密码 +DB_PASSWORD = 'root' +# 数据库名称 +DB_DATABASE = 'ruoyi-fastapi' +# 是否开启sqlalchemy日志 +DB_ECHO = true +# 允许溢出连接池大小的最大连接数 +DB_MAX_OVERFLOW = 10 +# 连接池大小,0表示连接数无限制 +DB_POOL_SIZE = 50 +# 连接回收时间(单位:秒) +DB_POOL_RECYCLE = 3600 +# 连接池中没有线程可用时,最多等待的时间(单位:秒) +DB_POOL_TIMEOUT = 30 + +# -------- Redis配置 -------- +# Redis主机 +REDIS_HOST = '10.0.0.58' +# Redis端口 +REDIS_PORT = 6379 +# Redis用户名 +REDIS_USERNAME = '' +# Redis密码 +REDIS_PASSWORD = '' +# Redis数据库 +REDIS_DATABASE = 3 + + +#------------------海康平台配置------------------ +HAIKANG_URL = 'https://192.168.89.230' +HAIKANG_PORT = 443 + +HAIKANG_AK = '29862915' +HAIKANG_SK = '3QlsmcyadBqu4OpVoxsJ' +HAIKANG_ACCESS_TOKEN_URL = '/api/v1/oauth/token' +# HAIKANG_DOOR_STATES_URL = '/api/v1/door/states' +HAIKANG_DOOR_STATES_URL = '/api/acs/v1/door/states' +HAIKANG_DOOR_DOCONTROL_URL = '/api/acs/v1/door/doControl' +HAIKANG_DOOR_ENVENTS_URL = '/api/acs/v2/door/events' +HAIKANG_DOOR_SEARCH = '/api/resource/v2/door/search' +HAIKANG_DOOR_ONLINE_STATUS = '/api/nms/v1/online/acs_device/get' +HAIKANG_APPLICATION_ONETOMANY_URL = '/api/frs/v1/application/oneToMany' +HAIKANG_PICTURE_CHECK_URL = '/api/frs/v1/face/picture/check' +HAIKANG_FACECAPATURE_SEARCH = '/api/frs/v1/event/face_capture/search' +HAIKANG_FACE_GROUP_URL = '/api/frs/v1/face/group' + +HAIKANG_VISITOR_RECORD_SEARCH = '/api/visitor/v2/appointment/records' +HAIKANG_VISITOR_RECORD_PICTURES = '/api/visitor/v1/record/pictures' + +HAIKANG_PERSON_LIST = '/api/resource/v2/person/personList' +HAIKANG_GET_PERSON_PICTURE = '/api/resource/v1/person/picture' + +HAIKANG_FACE_GROUP_ADDITION = '/api/frs/v1/face/group/single/addition' + +HAIKANG_FACE_SIGLE_ADDITION = '/api/frs/v1/face/single/addition' +HAIKANG_FACE_DELETE = '/api/frs/v1/face/deletion' + +HAIKANG_FACE_SAVE_PATH = "./face_images" + +HAIKANG_VISITOR_PICTURES_SAVE_PATH = "./visitor/face_images/" +HAIKANG_VISITOR_RECORD_TXT = "./visitor/visitorIds.txt" +#---------------------------------海康平台配置end---------------------------------- + + +# # 人脸分组1vN检索 +# HAIKANG_APPLICATION_ONETOMANY_URL = '/api/frs/v1/application/oneToMany' + +# # 人脸评分 +# HAIKANG_PICTURE_CHECK_URL = '/api/frs/v1/face/picture/check' + +# # 按条件查询人脸分组 +# HAIKANG_FACE_GROUP_URL = '/api/frs/v1/face/group' + +# # 查询人脸识别事件 +# HAIKANG_FACECAPATURE_SEARCH = '/api/frs/v1/event/face_capture/search' + +# # 查询访客预约记录 +# HAIKANG_VISITOR_RECORD_SEARCH = '/api/visitor/v2/appointment/records' + + + +#-------------------RAGFlow配置--------------------- + +RAGFLOW_BASE_URL = "http://10.0.0.202:82" +RAGFLOW_API_KEY = "ragflow-hlMjRmNzE2ODNiNTExZjA4ZTNlMDI0Mm" + +#-------------------RAGFlow配置end------------------ + +#-------------------compreface配置------------------- +COMPREFACE_BASE_URL = "http://10.0.0.202" +COMPERFACE_BASE_PORT = "8000" +COMPREFACE_API_KEY = "a5924457-62c9-47dc-a6e7-15462c502d2c" +COMPREFACE_API_KEY_DETECTION = "070283a2-faa3-423b-9772-2cd48ecc5362" +COMPREFACE_FACE_FILE = "./image_face" +COMPREFACE_SIMILARITY_THRESHOLD = 0.995 +#-------------------compreface配置end------------------- + +#-------------------天气服务配置------------------- +WEATHER_API_BASE = 'https://api.openweathermap.org/data/2.5' +WEATHER_API_KEY = '' +WEATHER_DEFAULT_CITY = '北京' +WEATHER_UNITS = 'metric' +WEATHER_LANG = 'zh_cn' +WEATHER_CACHE_TTL = 600 +#-------------------天气服务配置end------------------- \ No newline at end of file diff --git a/ruoyi-fastapi-backend/.env.prod b/ruoyi-fastapi-backend/.env.prod new file mode 100644 index 0000000..28c8919 --- /dev/null +++ b/ruoyi-fastapi-backend/.env.prod @@ -0,0 +1,75 @@ +# -------- 应用配置 -------- +# 应用运行环境 +APP_ENV = 'prod' +# 应用名称 +APP_NAME = 'RuoYi-FastAPI' +# 应用代理路径 +APP_ROOT_PATH = '/prod-api' +# 应用主机 +APP_HOST = '0.0.0.0' +# 应用端口 +APP_PORT = 9099 +# 应用版本 +APP_VERSION= '1.6.2' +# 应用是否开启热重载 +APP_RELOAD = false +# 应用是否开启IP归属区域查询 +APP_IP_LOCATION_QUERY = true +# 应用是否允许账号同时登录 +APP_SAME_TIME_LOGIN = true + +# -------- Jwt配置 -------- +# Jwt秘钥 +JWT_SECRET_KEY = 'b01c66dc2c58dc6a0aabfe2144256be36226de378bf87f72c0c795dda67f4d55' +# Jwt算法 +JWT_ALGORITHM = 'HS256' +# 令牌过期时间 +JWT_EXPIRE_MINUTES = 1440 +# redis中令牌过期时间 +JWT_REDIS_EXPIRE_MINUTES = 30 + + +# -------- 数据库配置 -------- +# 数据库类型,可选的有'mysql'、'postgresql',默认为'mysql' +DB_TYPE = 'mysql' +# 数据库主机 +DB_HOST = '127.0.0.1' +# 数据库端口 +DB_PORT = 3306 +# 数据库用户名 +DB_USERNAME = 'root' +# 数据库密码 +DB_PASSWORD = 'root' +# 数据库名称 +DB_DATABASE = 'ruoyi-fastapi' +# 是否开启sqlalchemy日志 +DB_ECHO = true +# 允许溢出连接池大小的最大连接数 +DB_MAX_OVERFLOW = 10 +# 连接池大小,0表示连接数无限制 +DB_POOL_SIZE = 50 +# 连接回收时间(单位:秒) +DB_POOL_RECYCLE = 3600 +# 连接池中没有线程可用时,最多等待的时间(单位:秒) +DB_POOL_TIMEOUT = 30 + +# -------- Redis配置 -------- +# Redis主机 +REDIS_HOST = '127.0.0.1' +# Redis端口 +REDIS_PORT = 6379 +# Redis用户名 +REDIS_USERNAME = '' +# Redis密码 +REDIS_PASSWORD = '' +# Redis数据库 +REDIS_DATABASE = 2 + +#-------------------天气服务配置------------------- +WEATHER_API_BASE = 'https://api.openweathermap.org/data/2.5' +WEATHER_API_KEY = '' +WEATHER_DEFAULT_CITY = '北京' +WEATHER_UNITS = 'metric' +WEATHER_LANG = 'zh_cn' +WEATHER_CACHE_TTL = 600 +#-------------------天气服务配置end------------------- \ No newline at end of file diff --git a/ruoyi-fastapi-backend/.gitignore b/ruoyi-fastapi-backend/.gitignore new file mode 100644 index 0000000..5686ba6 --- /dev/null +++ b/ruoyi-fastapi-backend/.gitignore @@ -0,0 +1,145 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +vf_admin/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +.idea/ + +# VSCode +.vscode/ + diff --git a/ruoyi-fastapi-backend/001测试海康api.py b/ruoyi-fastapi-backend/001测试海康api.py new file mode 100644 index 0000000..9840850 --- /dev/null +++ b/ruoyi-fastapi-backend/001测试海康api.py @@ -0,0 +1,96 @@ +from utils.haikang_util import HaikangUtil +import asyncio +import base64 + + + + + + +# 查询门禁点列表 +async def get_door_list_service(pageNo: int = 1, pageSize: int = 10): + result = await HaikangUtil.get_door_list_v2(pageNo, pageSize) + print(result) + +# 查询门禁状态 +async def get_door_status_service(door_index_codes): + result = await HaikangUtil.get_door_status(door_index_codes) + print(result) + +# 门禁控制 +async def door_do_control_service(door_index_codes, control_type): + result = await HaikangUtil.door_do_control(door_index_codes, control_type) + print(result) + +# 查询门禁点事件 +async def query_door_events_service(door_index_code,pageNo, pageSize, startTime, endTime): + result = await HaikangUtil.query_door_events_v2(door_index_code, pageNo=pageNo, pageSize=pageSize ,startTime=startTime, endTime=endTime) + print(result) + +# 查看门禁点在线状态 +async def door_online_status_service(door_index_codes): + result = await HaikangUtil.door_online_status(door_index_codes) + print(result) + +# 按条件查询人脸分组, 很重要 +async def get_face_group_service(): + result = await HaikangUtil.get_face_group() + print(result) + +# 人脸分组1vN搜索 +async def face_group_1vN_search_service(image_path): + + with open(image_path, 'rb') as f: + image_data = f.read() + + encoded_image = base64.b64encode(image_data).decode('utf-8') + + result = await HaikangUtil.face_group_1vN_search( + facePicBinaryData=encoded_image, + pageNo=1, + pageSize=10, + searchNum=99, + minSimilarity=50, + faceGroupIndexCodes=['5dc82633-a4cb-4107-b55e-f21bf952f9'] + ) + print(result) + +# 人脸评分 +async def face_picture_check(image_path): + + with open(image_path, 'rb') as f: + image_data = f.read() + + encoded_image = base64.b64encode(image_data).decode('utf-8') + + + result = await HaikangUtil.face_picture_check( + facePicBinaryData=encoded_image + ) + print(result) + +# 查询访客预约记录 +async def query_visitor_record(): + result = await HaikangUtil.query_visitor_record() + print(result) + +if __name__ == '__main__': + # asyncio.run(get_door_list_service()) + # print("*"*100) + # asyncio.run(get_door_status_service(['D01'])) + # print("*"*100) + + # asyncio.run(door_do_control_service(['D01'], 1)) + + # asyncio.run(query_door_events_service('D01',1,10,1640995200,1640995200)) + + # asyncio.run(get_face_group_service()) + + # image_path = "75c03e462769c81b6a8513d90ff2a27d.jpg" + # asyncio.run(face_group_1vN_search_service(image_path)) + # asyncio.run(face_picture_check(image_path)) + + # asyncio.run(query_visitor_record()) + + asyncio.run(door_online_status_service(["xxxxxxxx"])) + diff --git a/ruoyi-fastapi-backend/002简单http服务.py b/ruoyi-fastapi-backend/002简单http服务.py new file mode 100644 index 0000000..a429e5d --- /dev/null +++ b/ruoyi-fastapi-backend/002简单http服务.py @@ -0,0 +1,536 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from http.server import HTTPServer, BaseHTTPRequestHandler +import json +import urllib.parse +import logging + +# 配置日志 +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + + +class CustomHTTPRequestHandler(BaseHTTPRequestHandler): + """自定义HTTP请求处理器""" + + def do_GET(self): + """处理GET请求""" + # 解析URL和查询参数 + parsed_path = urllib.parse.urlparse(self.path) + query_params = urllib.parse.parse_qs(parsed_path.query) + + logger.info(f"GET 请求: {self.path}") + + # 根据路径返回不同的响应 + if parsed_path.path == "/": + self._send_response(200, "text/html", self._get_home_page()) + elif parsed_path.path == "/api/user": + self._handle_user_api(query_params) + elif parsed_path.path == "/api/status": + self._send_json_response(200, {"status": "ok", "message": "服务运行正常"}) + elif parsed_path.path == "/api/time": + import datetime + + current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + self._send_json_response(200, {"time": current_time}) + else: + self._send_json_response(404, {"error": "页面未找到"}) + + def do_POST(self): + """处理POST请求""" + content_length = int(self.headers.get("Content-Length", 0)) + post_data = self.rfile.read(content_length) + + logger.info(f"POST 请求: {self.path}") + + try: + # 尝试解析JSON数据 + if content_length == 0: + logger.info("POST 请求数据为空") + elif self.headers.get("Content-Type") == "application/json": + data = json.loads(post_data.decode("utf-8")) + logger.info(f"接收到JSON数据: {data}") + else: + # 解析表单数据 + data = urllib.parse.parse_qs(post_data.decode("utf-8")) + logger.info(f"接收到表单数据: {data}") + + # print("x"*100) + # 根据路径处理不同的POST请求 + # if self.path == '/api/login': + # self._handle_login(data) + # elif self.path == '/api/echo': + # self._send_json_response(200, {'echo': data, 'message': '数据已接收'}) + # else: + # self._send_json_response(404, {'error': '接口未找到'}) + if self.path == "/api/resource/v2/door/search": + self._send_json_response( + 200, + { + "code": "0", + "msg": "SUCCESS", + "data": { + "total": 3, + "pageNo": 1, + "pageSize": 1, + "list": [ + { + "indexCode": "df8w8cr800283c24c", + "resourceType": "door", + "name": "资源 1", + "doorNo": "123", + "channelNo": "1", + "parentIndexCode": "80d9099q9e991231", + "controlOneId": "11111111", + "controlTwoId": "2222222222", + "readerInId": "ac789y2c0019c", + "readerOutId": "arcew78c710", + "doorSerial": 1, + "treatyType": "hiksdk_net", + "regionIndexCode": "d8a5476e-25c0-4aa2-b7e3-db3788ba1f77", + "regionPath": "@root000000@", + "createTime": "2018-11-28T16:47:27:358+08:00", + "updateTime": "2018-11-28T16:48:34:011+08:00", + "description": "Test", + "channelType": "door", + "regionName": "acs_setUp_42054", + "regionPathName": "@root000000@9ca1eef0-4579-4e7e-a601-caf486442d54@", + "installLocation": "位置 1", + } + ], + }, + }, + ) + elif self.path == "/api/v1/door/states": + self._send_json_response( + 200, + { + "code": "0", + "msg": "success", + "data": { + "authDoorList": [ + { + "doorIndexCode": "e8e3ef5c149243abb4341124ab38fcfc", + "doorState": 0, + } + ], + "noAuthDoorIndexCodeList": [ + "e8e3ef5c149243abb4341124ab38fcfc" + ], + }, + }, + ) + elif self.path == "/api/acs/v1/door/doControl": + self._send_json_response( + 200, + { + "code": "0", + "msg": "success", + "data": [ + { + "doorIndexCode": "2c95c028a809448f962a969e3ab34f", + "controlResultCode": 0, # 0表示反控成功, 其他表示失败 + "controlResultDesc": "success", + } + ], + }, + ) + elif self.path == "/api/acs/v2/door/events": + self._send_json_response( + 200, + { + "code": "0", + "msg": "success", + "data": { + "total": 1, + "totalPage": 1, + "pageNo": 1, + "pageSize": 100, + "list": [ + { + "eventId": "207dd3b1-37a7-4d6c-8e4d-c8bfd343051b", + "eventName": "acs.acs.eventType.successCard", + "eventTime": "2019-11-16T15:44:33+08:00", + "personId": "216e2ba145824269a1cbb423cdc85cb1", + "cardNo": "3891192334", + "personName": "sdk 人员 1zzzcb", + "orgIndexCode": "root000000", + "orgName": "默认组织", + "doorName": "10.40.239.69new_test2_门_1", + "doorIndexCode": "f0b50050d3434f15b4e34f885d5dacfe", + "doorRegionIndexCode": "fd2df06b-1afb-4c9b-b058-5740c2c00076", + "picUri": "no-pcnvr", + "svrIndexCode": "/pic?=d62i7f6e*6a7i125-c838b9--a8c67dea96e65icb1*=sd*=5dpi*=1dpi*m2i1t=4ed35444bb4s=-39", + "eventType": 198914, + "inAndOutType": 1, + "readerDevIndexCode": "378e563bf3e84d5ba6ef5742bbaa8933", + "readerDevName": "读卡器_1", + "devIndexCode": "dcff422aad9c4d60a47b8b2fe2757b71", + "devName": "10.40.239.69new_test2", + "identityCardUri": "/pic?=d62i7f6e*6a7i125-c838b9--a8c67dea96e65icb1*=sd*=5dpi*=1dpi*m2i1t=4ed35444bb4s=-39z422d3", + "receiveTime": "2019-11-16T15:45:13.525+08:00", + "jobNo": "23333", + "studentId": "201900001", + "certNo": "320826199012110005", + } + ], + }, + }, + ) + elif self.path == "/api/frs/v1/face/group": + self._send_json_response( + 200, + { + "code": "0", + "msg": "Success", + "data": [ + { + "indexCode": "5dc82633-a4cb-4107-b55e-f21bf952f9", + "name": "仓库值守人员", + "description": "仓库值守人员是指守着仓库的人", + } + ], + }, + ) + elif self.path == "/api/frs/v1/application/oneToMany": + self._send_json_response( + 200, + { + "code": "0", + "msg": "Success.", + "data": { + "total": 500, + "pageNo": 1, + "pageSize": 10, + "list": [ + { + "similarity": 80, + "indexCode": "7cc0adb2-a3c3-48fd-b432-718103e85c28", + "faceInfo": { + "name": "张三", + "sex": "1", + "certificateType": "111", + "certificateNum": "420204199605121656", + }, + "facePic": { + "faceUrl": "http://10.166.165.121:8080/frs/facepicturetemp/test.jpg" + }, + } + ], + }, + }, + ) + elif self.path == "/api/frs/v1/face/picture/check": + self._send_json_response( + 200, + { + "code": "0", + "msg": "Success", + "data": { + "checkResult": True, + "faceScore": 90, + "facePicAnalysisResult": { + "id": 5566, + "age": 16, + "ageRange": 1, + "ageGroup": "TEENAGER", + "": "male", + "glasses": "NO", + "smile": "NO", + "facePose": { + "pitch": 45, + "yaw": 25, + "roll": 10, + "clearityScore": 0.5, + "colorConfidence": 0.5, + "eyeDistance": 300, + "grayMean": 120, + "visibleScore": 0.5, + }, + "targetModelData": "DD", + "faceRect": { + "height": 12.1, + "width": 16, + "x": 15, + "y": 3, + }, + "recommendFaceRect": { + "height": 4, + "width": 6, + "x": 2, + "y": 1, + }, + "faceMark": { + "leftEye": {"x": 33, "y": 22}, + "rightEye": {"x": 44, "y": 33}, + "noseTip": {"x": 43, "y": 12}, + "leftMouth": {"x": 32, "y": 54}, + "rightMouth": {"x": 67, "y": 12}, + }, + "mask": "NO", + "faceScore": 90, + }, + }, + }, + ) + elif self.path == "/api/visitor/v2/appointment/records": + self._send_json_response( + 200, + { + "code": "0", + "msg": "success", + "data": { + "total": 1, + "pageNo": 1, + "pageSize": 20, + "list": [ + { + "appointRecordId": "321654987", + "receptionistId": "3124126241412", + "receptionistName": "王五", + "receptionistCode": "323JH234KJH23", + "visitStartTime": "2018-07-26T15:00:00 + 08:00", + "visitEndTime": "2018-07-26T19:00:00 + 08:00", + "visitPurpose": "参考", + "visitorName": "张三", + "visitorId": "ASDF454SDAF565613JHU7712332", + "verificationCode": "1234", + "QRCode": "2015468421", + "": 1, + "phoneNo": "13576361254", + "plateNo": "浙 A12345", + "certificateType": 111, + "certificateNo": "311256196602145692", + "picUri": "/pic?adsdqwe21-asafdd-12sfsdfsdf", + "svrIndexCode": "sadsa123-asd21edsfhgsd-23rfdvsr", + "visitorStatus": 1, + "certAddr": "杭州滨江", + "certIssuer": "滨江分局", + "nation": 1, + "birthplace": "杭州", + "visitorWorkUnit": "中国工商银行", + "visitorAddress": "杭州滨江", + "orderId": "d089ady8a0dud87018d0y90ay9d901", + "designatedResources": { + "paramKey": "1", + "paramValues": ["52v72v35762587n75b26"], + }, + "privilegeGroupNames": ["one"], + "identityUri": "/pic?123-scccdf334-3216516516516", + "identitySvrCode": "12ddf53ggg56sss6554", + } + ], + }, + }, + ) + elif self.path == "/api/nms/v1/online/acs_device/get": + self._send_json_response( + 200, + { + "code": "0", + "msg": "success", + "data": { + "pageNo": 1, + "pageSize": 10, + "totalPage": 0, + "total": 1, + "list": [ + { + "deviceType": "HIK%2FDS-9116HW-ST%2F-AF-DVR", + "deviceIndexCode": "null", + "regionIndexCode": "ce91c758-5af4-4539-845a", + "collectTime": "2018-12-28T10:21:40.000+08:00", + "regionName": "NMS 自动化", + "indexCode": "82896441ced946d5a51c6d6ca8e65851", + "cn": "Onvif-IPC(10.67.172.13 )", + "treatyType": "onvif_net", + "manufacturer": "hikvision", + "ip": "10.67.172.13", + "port": 80, + "online": 1, + } + ], + }, + }, + ) + except json.JSONDecodeError: + self._send_json_response(400, {"error": "无效的JSON数据"}) + except Exception as e: + self._send_json_response(500, {"code": 0, "error": f"服务器错误: {str(e)}"}) + + def do_PUT(self): + """处理PUT请求""" + content_length = int(self.headers.get("Content-Length", 0)) + put_data = self.rfile.read(content_length) + + logger.info(f"PUT 请求: {self.path}") + + try: + data = json.loads(put_data.decode("utf-8")) + self._send_json_response(200, {"message": "数据已更新", "data": data}) + except json.JSONDecodeError: + self._send_json_response(400, {"error": "无效的JSON数据"}) + + def do_DELETE(self): + """处理DELETE请求""" + logger.info(f"DELETE 请求: {self.path}") + self._send_json_response(200, {"message": "删除成功", "path": self.path}) + + def _handle_user_api(self, query_params): + """处理用户API请求""" + user_id = query_params.get("id", [""])[0] + if user_id: + user_data = { + "id": user_id, + "name": f"用户{user_id}", + "email": f"user{user_id}@example.com", + "status": "active", + } + self._send_json_response(200, user_data) + else: + # 返回用户列表 + users = [ + {"id": "1", "name": "张三", "email": "zhangsan@example.com"}, + {"id": "2", "name": "李四", "email": "lisi@example.com"}, + {"id": "3", "name": "王五", "email": "wangwu@example.com"}, + ] + self._send_json_response(200, {"users": users}) + + def _handle_login(self, data): + """处理登录请求""" + username = ( + data.get("username", [""])[0] + if isinstance(data, dict) + else data.get("username", "") + ) + password = ( + data.get("password", [""])[0] + if isinstance(data, dict) + else data.get("password", "") + ) + + # 简单的用户验证(仅做演示) + if username == "admin" and password == "123456": + response_data = { + "success": True, + "message": "登录成功", + "token": "fake_jwt_token_here", + "user": {"username": username, "role": "admin"}, + } + self._send_json_response(200, response_data) + else: + self._send_json_response( + 401, {"success": False, "message": "用户名或密码错误"} + ) + + def _send_response(self, status_code, content_type, content): + """发送HTTP响应""" + self.send_response(status_code) + self.send_header("Content-Type", f"{content_type}; charset=utf-8") + self.send_header("Access-Control-Allow-Origin", "*") # 允许跨域 + self.send_header( + "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS" + ) + self.send_header("Access-Control-Allow-Headers", "Content-Type") + self.end_headers() + self.wfile.write(content.encode("utf-8")) + + def _send_json_response(self, status_code, data): + """发送JSON响应""" + json_data = json.dumps(data, ensure_ascii=False, indent=2) + self._send_response(status_code, "application/json", json_data) + + def _get_home_page(self): + """获取首页HTML""" + return """ + + +
+ + +服务运行成功!以下是可用的API接口:
+ +
+# 获取状态
+curl http://localhost:8080/api/status
+
+# 用户登录
+curl -X POST -H "Content-Type: application/json" \\
+ -d '{"username":"admin","password":"123456"}' \\
+ http://localhost:8080/api/login
+
+# 获取用户信息
+curl http://localhost:8080/api/user?id=1
+
+
+
+ """
+
+ def do_OPTIONS(self):
+ """处理预检请求(CORS)"""
+ self.send_response(200)
+ self.send_header("Access-Control-Allow-Origin", "*")
+ self.send_header(
+ "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"
+ )
+ self.send_header("Access-Control-Allow-Headers", "Content-Type")
+ self.end_headers()
+
+ def log_message(self, format, *args):
+ """自定义日志格式"""
+ logger.info(f"{self.address_string()} - {format % args}")
+
+
+def run_server(host="localhost", port=8080):
+ """启动HTTP服务器"""
+ server_address = (host, port)
+ httpd = HTTPServer(server_address, CustomHTTPRequestHandler)
+
+ print(f"🌟 HTTP服务器启动成功!")
+ print(f"📍 地址: http://{host}:{port}")
+ print(f"🔗 在浏览器中访问: http://{host}:{port}")
+ print(f"⏹️ 按 Ctrl+C 停止服务器\n")
+
+ try:
+ httpd.serve_forever()
+ except KeyboardInterrupt:
+ print("\n🛑 服务器已停止")
+ httpd.server_close()
+
+
+if __name__ == "__main__":
+ # 启动服务器
+ run_server(host="10.0.0.202", port=9909)
diff --git a/ruoyi-fastapi-backend/003测试海康url.py b/ruoyi-fastapi-backend/003测试海康url.py
new file mode 100644
index 0000000..be27311
--- /dev/null
+++ b/ruoyi-fastapi-backend/003测试海康url.py
@@ -0,0 +1,11 @@
+from urllib.parse import urlparse
+
+url = "https://192.168.10.251:8001/artemis/test_v1"
+
+parsed = urlparse(url)
+
+path_and_query = parsed.path
+if parsed.query:
+ path_and_query += "?" + parsed.query
+
+print(path_and_query)
\ No newline at end of file
diff --git a/ruoyi-fastapi-backend/004测试compreface方法.py b/ruoyi-fastapi-backend/004测试compreface方法.py
new file mode 100644
index 0000000..aba0084
--- /dev/null
+++ b/ruoyi-fastapi-backend/004测试compreface方法.py
@@ -0,0 +1,57 @@
+from utils.compreface_util import ComprefaceUtil
+import asyncio
+import time
+import json
+
+image_path = "./haotian1.jpg"
+
+with open(image_path, "rb") as f:
+ image_bytes = f.read() # 获取图片的字节流
+
+# # 测试上传人脸图片
+# print(asyncio.run(ComprefaceUtil.face_addition(image_path, '刘昊天_访客')))
+
+# #-----------------------------------------测试人脸识别--------------------------------------------
+# start_time = time.time()
+# result = asyncio.run(
+# ComprefaceUtil.face_recognition(
+# image_bytes,
+# options={
+# "limit": 0,
+# "det_prob_threshold": 0.8,
+# "prediction_count": 1,
+# # 可选参数 age,gender,landmarks,calculator
+# "face_plugins": "gender",
+# "status": "true",
+# },
+# )
+# )
+# print(result)
+# with open("compreface_face_recognition.json", "w", encoding="utf-8") as f:
+# f.write(json.dumps(result, ensure_ascii=False, indent=4))
+
+# print("spend time:", time.time() - start_time)
+
+# #-----------------------------------------测试人脸识别end------------------------------------------
+
+# -----------------------------------------测试人脸检测--------------------------------------------
+start_time = time.time()
+result = asyncio.run(
+ ComprefaceUtil.face_detection(
+ image_bytes,
+ options={
+ "limit": 0,
+ "det_prob_threshold": 0.8,
+ "prediction_count": 1,
+ # 可选参数 age,gender,landmarks,calculator
+ "face_plugins": "pose",
+ "status": "false",
+ }
+ )
+)
+print(result)
+with open("compreface_face_detection.json", "w", encoding="utf-8") as f:
+ f.write(json.dumps(result, ensure_ascii=False, indent=4))
+
+print("spend time:", time.time() - start_time)
+# -----------------------------------------测试人脸检测end-----------------------------------------
diff --git a/ruoyi-fastapi-backend/005测试compreface人脸识别服务.py b/ruoyi-fastapi-backend/005测试compreface人脸识别服务.py
new file mode 100644
index 0000000..195a2c9
--- /dev/null
+++ b/ruoyi-fastapi-backend/005测试compreface人脸识别服务.py
@@ -0,0 +1,56 @@
+import requests
+from compreface import CompreFace
+from compreface.service import RecognitionService, DetectionService
+from compreface.collections import FaceCollection
+from compreface.collections.face_collections import Subjects
+import time
+
+DOMAIN: str = 'http://localhost'
+PORT: str = '8000'
+
+def face_recognition_stream(image_path, url):
+ with open(image_path, 'rb') as f:
+ response = requests.post(url, data=f.read())
+ return response.json()
+
+def face_recognition_file(image_path, url):
+
+ files = {"file": ("test.jpg", open(image_path, "rb"), "image/jpeg")}
+ response = requests.post(url, files=files)
+ return response.json()
+def face_recognition_compreface(image_path):
+
+
+ API_KEY: str = 'a5924457-62c9-47dc-a6e7-15462c502d2c'
+
+ compre_face: CompreFace = CompreFace(DOMAIN, PORT)
+
+ recognition: RecognitionService = compre_face.init_face_recognition(API_KEY)
+
+ start_time = time.time()
+ result = recognition.recognize(image_path=image_path)
+ print("--- %s seconds ---" % (time.time() - start_time))
+ print(result)
+
+def face_detection_compreface(image_path):
+
+
+ API_KEY: str = '070283a2-faa3-423b-9772-2cd48ecc5362'
+
+ compre_face: CompreFace = CompreFace(DOMAIN, PORT)
+
+ detection: DetectionService = compre_face.init_face_detection(API_KEY)
+
+ start_time = time.time()
+ result = detection.detect(image_path=image_path)
+ print("--- %s seconds ---" % (time.time() - start_time))
+ print(result)
+
+
+if __name__ == '__main__':
+ image_path = './moshengren.jpg'
+ url = 'http://10.0.0.202:9099/system/compreface/face_recognition'
+ # print(face_recognition_stream(image_path, url))
+ # print(face_recognition_file(image_path, url))
+ # face_recognition_compreface(image_path)
+ face_detection_compreface(image_path)
\ No newline at end of file
diff --git a/ruoyi-fastapi-backend/006测试定时任务.py b/ruoyi-fastapi-backend/006测试定时任务.py
new file mode 100644
index 0000000..1bd35ad
--- /dev/null
+++ b/ruoyi-fastapi-backend/006测试定时任务.py
@@ -0,0 +1,25 @@
+from apscheduler.schedulers.blocking import BlockingScheduler
+from apscheduler.triggers.cron import CronTrigger
+import datetime
+import time
+
+def my_job():
+ print("任务执行时间:", datetime.datetime.now())
+
+if __name__ == '__main__':
+ scheduler = BlockingScheduler(timezone="Asia/Shanghai")
+
+ # # 每天凌晨 1 点执行
+ # scheduler.add_job(my_job, trigger="cron", hour=1, minute=0)
+
+ # 或者用 CronTrigger
+ trigger = CronTrigger(minute='*', second=0)
+ scheduler.add_job(my_job, trigger=trigger)
+
+ scheduler.start()
+
+ try:
+ while True:
+ time.sleep(1)
+ except (KeyboardInterrupt, SystemExit):
+ scheduler.shutdown()
\ No newline at end of file
diff --git a/ruoyi-fastapi-backend/007测试python文件.py b/ruoyi-fastapi-backend/007测试python文件.py
new file mode 100644
index 0000000..9b53e56
--- /dev/null
+++ b/ruoyi-fastapi-backend/007测试python文件.py
@@ -0,0 +1,5 @@
+import os
+
+txt_path = "./test/image_base64.txt"
+print(os.path.dirname(txt_path))
+# os.makedirs(, exist_ok=True)
\ No newline at end of file
diff --git a/ruoyi-fastapi-backend/75c03e462769c81b6a8513d90ff2a27d.jpg b/ruoyi-fastapi-backend/75c03e462769c81b6a8513d90ff2a27d.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..94a8bd406894951dd61be19d4b77b7151a90f4f8
GIT binary patch
literal 147891
zcmbTe1z40{+b#ag3@y#j9nwg54I(WtAPq_*A)QhVAt>Dl5~G3w(v6^kG)RYth%|_Z
zASoDUkH7bP=Q`&*|Lgz0XNVbQp4iWR_P+0RueCOR=Kd@}l)9Qanh*>IK``(I{rLc?
zLvY*!hWmv8-v|Oc1b7hQ&Cf`k5G!bV}kaE}%P
zAx>bC0rdvPfjayzQ9fMA4p4nHo323k<`h!+m~%sb$l#)qokDJLfQ}jzdsPp955(Pj
z3Ff*OGMBIOr?>t>s^nr*$_W!iCyNtW?}Zy;zi1yHIaLYuS2Tpbc+*hei8bbp)?_WRK`N_;f34*V4d#EmC;dL_PasBjlOC86;yOMgp%{9s(
zZVU-e#HTCo815`1Q=wvenZY$*zFu)NSP>oOS`L!AijErho7SlObWbce`xioZR_(|7
z^;Y@_adAwg%0r0UytQIAZ7E^zd+VUe$^p4JRVpcWcW|6>9bL*2*~H4YaKO`B4uR$;
zJum%dS6nABlZ?aVOyGobe~1LiTIeezJrgcyKRPWYYq8i?uenC7W=0L8LVt;+>+7x-
zUToydINJ;VoVC~8QIwcnD+Xnx`p@ZRF`UjfE?LqdzfKHYkibo9%1Yc*%h*uAdUZX?
zaT#uro9}84dK0q4#fXx(D7uwyDsG-6WU*Vyf(2iouC3 OB5eul$M16kq(am_xJ=TAl>9y&{hL{%g&ogaeCS)%7xqK|139
zOpgKA8F)M&am=8`H39NyqR92df20BX|DF W@KhQvA_%087Z*iZ&Mj(zzlpnWAe5zF4yUP
z`yoQwIjf(_P0M4d_E<~a8JB{J?6UVJc?P}Jrt#N&z#>1p0Tn+g-9ztpTUmP9p%