From 308d3b3b7883a92a761dfaf4f607a9f4658213cf Mon Sep 17 00:00:00 2001
From: Codex Assistant <codex@example.com>
Date: 星期四, 06 十一月 2025 09:58:25 +0800
Subject: [PATCH] 修改页面

---
 tmp/upload-test-result.png                                                                       |    0 
 backend/bin/pom.xml                                                                              |  202 ++
 backend/bin/src/main/resources/graphql/region.graphqls                                           |   73 +
 .codebuddy/sandbox/sandbox.json                                                                  |    3 
 test-image.svg                                                                                   |    4 
 backend/bin/src/main/resources/graphql/user.graphqls                                             |  110 +
 tmp/test-video.mp4                                                                               |    1 
 wx/pages/index/index.wxml                                                                        |    7 
 backend/bin/src/main/resources/graphql/dashboard.graphqls                                        |   52 
 .codebuddy/sandbox/sandbox_setting.json                                                          |   20 
 backend/bin/src/main/resources/graphql/media.graphqls                                            |   82 +
 backend/bin/src/main/resources/graphql/rating.graphqls                                           |   87 +
 wx/pages/index/index.js                                                                          |    2 
 backend/bin/src/main/java/com/rongyichuang/activity/repository/ActivityRepository.java.backup    | 1589 +++++++++++++++++++++
 backend/bin/src/main/resources/application.yml                                                   |  102 +
 backend/bin/db.sql                                                                               |  424 +++++
 backend/bin/src/main/resources/graphql/auth.graphqls                                             |  100 +
 wx/pages/registration/registration.js                                                            |   18 
 backend/bin/src/main/resources/graphql/activity.graphqls                                         |  225 +++
 wx/pages/activity/detail.js                                                                      |    2 
 backend/bin/src/main/resources/graphql/role.graphqls                                             |   51 
 backend/bin/src/main/resources/graphql/player.graphqls                                           |  347 ++++
 backend/bin/src/main/resources/graphql/schema.graphqls                                           |   30 
 backend/bin/src/main/resources/db/migration/V1_2__add_audit_fields_to_wx_login_record.sql        |    9 
 backend/bin/src/main/resources/graphql/carousel.graphqls                                         |   66 
 backend/bin/src/main/resources/db/migration/V1_2__add_state_to_activity_player.sql               |   12 
 backend/bin/src/main/resources/graphql/employee.graphqls                                         |   79 +
 backend/src/main/java/com/rongyichuang/player/dto/response/PromotionCompetitionPageResponse.java |   68 
 tmp/test-image.svg                                                                               |    5 
 backend/src/main/java/com/rongyichuang/common/api/HealthController.java                          |   22 
 wx/pages/registration/registration.wxml                                                          |   38 
 backend/bin/src/main/resources/db/migration/V001__create_carousel_table.sql                      |   17 
 backend/bin/src/main/resources/logback-spring.xml                                                |   66 
 tmp/competition-creation-success.png                                                             |    0 
 backend/bin/src/main/resources/graphql/message.graphqls                                          |   21 
 backend/bin/src/main/resources/graphql/tag.graphqls                                              |   34 
 test_miniprogram_activities_fix.js                                                               |  142 +
 backend/bin/src/main/resources/graphql/review.graphqls                                           |   45 
 backend/bin/src/main/resources/graphql/judge.graphqls                                            |  158 ++
 backend/bin/src/main/resources/db/migration/V1_1__create_wx_login_record_table.sql               |   23 
 .roo/mcp.json                                                                                    |   22 
 backend/bin/src/main/resources/db/migration/V2__add_judge_fields.sql                             |    7 
 42 files changed, 4,324 insertions(+), 41 deletions(-)

diff --git a/.codebuddy/sandbox/sandbox.json b/.codebuddy/sandbox/sandbox.json
new file mode 100644
index 0000000..dcb057e
--- /dev/null
+++ b/.codebuddy/sandbox/sandbox.json
@@ -0,0 +1,3 @@
+{
+  "d:\\code\\new-ryc": "28ffb73d35d1424ebc319383e29f2b78"
+}
\ No newline at end of file
diff --git a/.codebuddy/sandbox/sandbox_setting.json b/.codebuddy/sandbox/sandbox_setting.json
new file mode 100644
index 0000000..21cd8c2
--- /dev/null
+++ b/.codebuddy/sandbox/sandbox_setting.json
@@ -0,0 +1,20 @@
+{
+  "path": "d:\\code\\new-ryc",
+  "desc": "鍓嶅悗绔竴浣撻」鐩細鍚庣 Spring Boot(8080, context-path /api)锛屽墠绔� Vite+Vue(3000) 閫氳繃 /api 浠g悊鍒板悗绔�",
+  "id": "28ffb73d35d1424ebc319383e29f2b78",
+  "data": {
+    "spaceKey": "28ffb73d35d1424ebc319383e29f2b78",
+    "connections": {
+      "webIDE": "https://28ffb73d35d1424ebc319383e29f2b78.ap-singapore.cloudstudio.club",
+      "preview": "https://28ffb73d35d1424ebc319383e29f2b78--{port}.ap-singapore.cloudstudio.club",
+      "api": "https://28ffb73d35d1424ebc319383e29f2b78--api.ap-singapore.cloudstudio.club",
+      "pty": "https://28ffb73d35d1424ebc319383e29f2b78--pty.ap-singapore.cloudstudio.club"
+    }
+  },
+  "config": {
+    "api": "https://28ffb73d35d1424ebc319383e29f2b78--api.ap-singapore.cloudstudio.club",
+    "pty": "https://28ffb73d35d1424ebc319383e29f2b78--pty.ap-singapore.cloudstudio.club",
+    "region": "ap-shanghai",
+    "spaceKey": "28ffb73d35d1424ebc319383e29f2b78"
+  }
+}
\ No newline at end of file
diff --git a/.roo/mcp.json b/.roo/mcp.json
new file mode 100644
index 0000000..83122ae
--- /dev/null
+++ b/.roo/mcp.json
@@ -0,0 +1,22 @@
+{
+  "mcpServers": {
+    "mysql-ryc": {
+      "command": "D:\\\\code\\\\mcp\\\\mysql_mcp_server\\\\venv\\\\Scripts\\\\python.exe",
+      "args": [
+        "-m",
+        "mysql_mcp_server.server"
+      ],
+      "env": {
+        "MYSQL_DATABASE": "ryc",
+        "MYSQL_HOST": "139.155.104.10",
+        "MYSQL_PASSWORD": "KiYap3E8X8RLcM6T",
+        "MYSQL_PORT": "3306",
+        "MYSQL_USER": "ryc"
+      }
+    },
+    "chrome-devtools": {
+      "command": "chrome-devtools-mcp",
+      "args": []
+    }
+  }
+}
diff --git a/backend/bin/db.sql b/backend/bin/db.sql
new file mode 100644
index 0000000..e5f882b
--- /dev/null
+++ b/backend/bin/db.sql
@@ -0,0 +1,424 @@
+-- Database Schema for RYC
+-- Generated on 2025-09-27T11:36:57.338Z
+
+-- Table: t_activity
+CREATE TABLE `t_activity` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `pid` bigint NOT NULL DEFAULT '0',
+  `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
+  `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,
+  `signup_deadline` datetime NOT NULL,
+  `match_time` datetime DEFAULT NULL,
+  `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `rating_scheme_id` bigint NOT NULL,
+  `player_max` int DEFAULT NULL COMMENT '浜烘暟涓婇檺',
+  `sort_order` int DEFAULT NULL COMMENT '闃舵鎺掑簭锛屼粠1寮�濮嬭繛缁�',
+  `state` int NOT NULL DEFAULT '1' COMMENT '0:鏈彂甯冿紝 1锛氬彂甯冿細2锛氬叧闂�',
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`) USING BTREE,
+  KEY `fk_t_activity_rating_scheme` (`rating_scheme_id`) USING BTREE,
+  KEY `idx_t_activity_deadline` (`signup_deadline`) USING BTREE,
+  KEY `idx_t_activity_sort` (`pid`, `sort_order`) USING BTREE,
+  CONSTRAINT `fk_t_activity_rating_scheme` FOREIGN KEY (`rating_scheme_id`) REFERENCES `t_rating_scheme` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE=InnoDB AUTO_INCREMENT=62 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_activity_judge
+CREATE TABLE `t_activity_judge` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `activity_id` bigint NOT NULL,
+  `stage_id` bigint NOT NULL,
+  `judge_id` bigint NOT NULL,
+  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `state` int DEFAULT NULL,
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE KEY `uq_stage_judge` (`stage_id`,`judge_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_activity_player
+CREATE TABLE `t_activity_player` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `activity_id` bigint NOT NULL,
+  `stage_id` bigint NOT NULL COMMENT '姣旇禌闃舵锛岄�昏緫鍜宼_activity_judge 淇濇寔涓�鑷淬��',
+  `player_id` bigint NOT NULL,
+  `region_id` bigint DEFAULT NULL COMMENT '鍖哄煙id',
+  `project_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '鍙傝禌椤圭洰鏍囬',
+  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `reject_reason` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `judge_id` bigint DEFAULT NULL COMMENT '璇勫',
+  `feedback` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,
+  `total_score` decimal(19,4) DEFAULT NULL COMMENT '浣庡垎',
+  `rank` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '鍚嶆',
+  `state` int NOT NULL DEFAULT '0' COMMENT '0绛夊緟瀹℃牳锛�1锛氬鏍搁�氳繃锛�2锛氫笉閫氳繃',
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_activity_player_rating
+CREATE TABLE `t_activity_player_rating` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `activity_id` bigint NOT NULL,
+  `activity_player_id` bigint DEFAULT NULL,
+  `rating_scheme_id` bigint DEFAULT NULL COMMENT '璇勫垎鏂规ID',
+  `stage_id` bigint NOT NULL,
+  `player_id` bigint NOT NULL COMMENT '鍐椾綑瀛楁',
+  `judge_id` bigint DEFAULT NULL,
+  `total_score` decimal(19,2) DEFAULT NULL,
+  `feedback` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '璇勪环鍐呭',
+  `state` int NOT NULL,
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
+
+-- Table: t_activity_player_rating_item
+CREATE TABLE `t_activity_player_rating_item` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `activity_id` bigint NOT NULL,
+  `activity_player_id` bigint NOT NULL,
+  `activity_player_rating_id` bigint NOT NULL,
+  `stage_id` bigint NOT NULL,
+  `player_id` bigint NOT NULL,
+  `judge_id` bigint NOT NULL,
+  `rating_scheme_id` bigint NOT NULL,
+  `rating_item_id` bigint NOT NULL,
+  `score` decimal(10,2) NOT NULL,
+  `feedback` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,
+  `state` int NOT NULL DEFAULT '1',
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_carousel
+CREATE TABLE `t_carousel` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `title` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `sort_order` int DEFAULT NULL,
+  `state` int NOT NULL DEFAULT '1' COMMENT '0:鍏抽棴锛�1锛氫娇鐢�',
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='杞挱鍥�';
+
+-- Table: t_employee
+CREATE TABLE `t_employee` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `role_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `user_id` bigint NOT NULL,
+  `state` int NOT NULL,
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  `description` varchar(255) DEFAULT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE KEY `phone` (`phone`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_employee_role
+CREATE TABLE `t_employee_role` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `employee_id` bigint NOT NULL,
+  `role_id` bigint NOT NULL,
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`) USING BTREE,
+  KEY `fk_t_user_role_role` (`role_id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_judge
+CREATE TABLE `t_judge` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `user_id` bigint DEFAULT NULL,
+  `phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `gender` int DEFAULT NULL,
+  `state` int NOT NULL DEFAULT '1',
+  `role_id` bigint DEFAULT NULL,
+  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  `title` varchar(128) DEFAULT NULL COMMENT '鑱屼綅/澶磋',
+  `company` varchar(128) DEFAULT NULL COMMENT '鍏徃/鏈烘瀯',
+  `introduction` text COMMENT '涓汉浠嬬粛',
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE KEY `phone` (`phone`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_judge_tag
+CREATE TABLE `t_judge_tag` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `judge_id` bigint NOT NULL,
+  `tag_id` bigint NOT NULL,
+  `state` int NOT NULL DEFAULT '1',
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`) USING BTREE,
+  KEY `fk_t_judge_major_tag` (`tag_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=76 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_media
+CREATE TABLE `t_media` (
+  `id` int NOT NULL AUTO_INCREMENT,
+  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `target_type` int NOT NULL,
+  `target_id` bigint NOT NULL,
+  `media_type` int NOT NULL,
+  `path` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '鑵捐浜戠殑瀛樺偍妗跺湴鍧�',
+  `thumb_path` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `file_ext` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `file_size` int NOT NULL,
+  `duration` int DEFAULT NULL COMMENT '瑙嗛鐨勯暱搴︾',
+  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `state` int NOT NULL DEFAULT '1',
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_notification_task
+CREATE TABLE `t_notification_task` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `channel` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `target_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '1:瀛﹀憳锛�2锛氳瘎濮旓紝3锛氬伐浣滀汉鍛�',
+  `target_id` bigint NOT NULL,
+  `payload` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '娑堟伅鍐呭',
+  `error_message` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `retry_count` int NOT NULL,
+  `next_retry_at` datetime DEFAULT NULL,
+  `state` tinyint(1) NOT NULL DEFAULT '1',
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_permission
+CREATE TABLE `t_permission` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `category` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `state` tinyint(1) NOT NULL DEFAULT '1',
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE KEY `code` (`code`) USING BTREE,
+  KEY `idx_t_permission_code` (`code`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_player
+CREATE TABLE `t_player` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
+  `phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `role_id` bigint NOT NULL,
+  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `gender` int DEFAULT NULL COMMENT '0:濂筹紝1锛氱敺',
+  `education` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `introduction` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,
+  `reject_reason` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `final_score` decimal(10,2) DEFAULT NULL,
+  `state` int NOT NULL,
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  `user_id` bigint NOT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE KEY `phone` (`phone`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_rating_item
+CREATE TABLE `t_rating_item` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `scheme_id` bigint NOT NULL,
+  `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `max_score` int NOT NULL,
+  `order_no` int NOT NULL,
+  `state` int NOT NULL,
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`) USING BTREE,
+  KEY `idx_t_rating_item_scheme` (`scheme_id`) USING BTREE,
+  CONSTRAINT `fk_t_rating_item_scheme` FOREIGN KEY (`scheme_id`) REFERENCES `t_rating_scheme` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
+) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_rating_scheme
+CREATE TABLE `t_rating_scheme` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `description` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `state` int NOT NULL,
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_region
+CREATE TABLE `t_region` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `pid` bigint NOT NULL COMMENT '鑷叧鑱�',
+  `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `level` int NOT NULL,
+  `leaf_flag` tinyint(1) NOT NULL DEFAULT '0',
+  `full_path` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `state` int NOT NULL,
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE KEY `code` (`code`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_role
+CREATE TABLE `t_role` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `state` int NOT NULL,
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE KEY `code` (`code`) USING BTREE,
+  KEY `idx_t_role_code` (`code`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_role_permission
+CREATE TABLE `t_role_permission` (
+  `id` int NOT NULL AUTO_INCREMENT,
+  `role_id` bigint NOT NULL,
+  `permission_id` bigint NOT NULL,
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`) USING BTREE,
+  KEY `fk_t_role_permission_perm` (`permission_id`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_tag
+CREATE TABLE `t_tag` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `category` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `state` int NOT NULL,
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE KEY `code` (`code`) USING BTREE,
+  KEY `idx_t_tag_category` (`category`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_user
+CREATE TABLE `t_user` (
+  `id` bigint NOT NULL AUTO_INCREMENT,
+  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `gender` int DEFAULT NULL,
+  `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `birthday` date DEFAULT NULL,
+  `wx_openid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `wx_unionid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `wx_oa_openid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  `state` int NOT NULL,
+  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  `create_user_id` bigint DEFAULT NULL,
+  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `update_user_id` bigint DEFAULT NULL,
+  `version` bigint NOT NULL DEFAULT '0',
+  `mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE KEY `uq_wx_open_id` (`wx_openid`) USING BTREE,
+  UNIQUE KEY `uq_phone` (`phone`)
+) ENGINE=InnoDB AUTO_INCREMENT=62 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- Table: t_wx_login_record
+CREATE TABLE `t_wx_login_record` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '涓婚敭ID',
+  `wx_openid` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '寰俊openid',
+  `wx_unionid` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '寰俊unionid',
+  `user_id` bigint DEFAULT NULL COMMENT '鍏宠仈鐨勭敤鎴稩D',
+  `login_time` datetime NOT NULL COMMENT '鐧诲綍鏃堕棿',
+  `login_ip` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '鐧诲綍IP鍦板潃',
+  `device_info` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '璁惧淇℃伅',
+  `session_key` varchar(128) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '寰俊session_key',
+  `phone_authorized` tinyint(1) DEFAULT '0' COMMENT '鏄惁宸叉巿鏉冩墜鏈哄彿锛�0-鏈巿鏉冿紝1-宸叉巿鏉�',
+  `phone_auth_time` datetime DEFAULT NULL COMMENT '鎵嬫満鍙锋巿鏉冩椂闂�',
+  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '鍒涘缓鏃堕棿',
+  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿',
+  `state` tinyint(1) DEFAULT '1' COMMENT '鐘舵�侊細0-绂佺敤锛�1-鍚敤',
+  PRIMARY KEY (`id`),
+  KEY `idx_wx_openid` (`wx_openid`),
+  KEY `idx_wx_unionid` (`wx_unionid`),
+  KEY `idx_user_id` (`user_id`),
+  KEY `idx_login_time` (`login_time`),
+  KEY `idx_phone_authorized` (`phone_authorized`)
+) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='寰俊鐧诲綍璁板綍琛�';
+
diff --git a/backend/bin/pom.xml b/backend/bin/pom.xml
new file mode 100644
index 0000000..18701af
--- /dev/null
+++ b/backend/bin/pom.xml
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.rongyichuang</groupId>
+    <artifactId>ryc-backend</artifactId>
+    <version>1.0.0</version>
+    <packaging>jar</packaging>
+
+    <name>钃夋槗鍒涘悗绔湇鍔�</name>
+    <description>钃夋槗鍒涙瘮璧涚鐞嗙郴缁熷悗绔湇鍔�</description>
+
+    <properties>
+        <maven.compiler.source>21</maven.compiler.source>
+        <maven.compiler.target>21</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <spring.boot.version>3.2.0</spring.boot.version>
+        <graphql.version>22.0</graphql.version>
+    </properties>
+
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>3.2.0</version>
+        <relativePath/>
+    </parent>
+
+    <dependencies>
+        <!-- Spring Boot Starters -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-amqp</artifactId>
+        </dependency>
+
+        <!-- GraphQL -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-graphql</artifactId>
+        </dependency>
+        
+        <!-- GraphQL Extended Scalars -->
+        <dependency>
+            <groupId>com.graphql-java</groupId>
+            <artifactId>graphql-java-extended-scalars</artifactId>
+            <version>21.0</version>
+        </dependency>
+
+        <!-- Database -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.33</version>
+        </dependency>
+
+        <!-- JWT -->
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-api</artifactId>
+            <version>0.11.5</version>
+        </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-impl</artifactId>
+            <version>0.11.5</version>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-jackson</artifactId>
+            <version>0.11.5</version>
+            <scope>runtime</scope>
+        </dependency>
+
+        <!-- 鑵捐浜� COS -->
+        <dependency>
+            <groupId>com.qcloud</groupId>
+            <artifactId>cos_api</artifactId>
+            <version>5.6.155</version>
+        </dependency>
+        
+        <!-- 鑵捐浜� SDK -->
+        <dependency>
+            <groupId>com.tencentcloudapi</groupId>
+            <artifactId>tencentcloud-sdk-java</artifactId>
+            <version>3.1.677</version>
+        </dependency>
+
+        <!-- 宸ュ叿绫� -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+        </dependency>
+        
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+        </dependency>
+
+        <!-- Lombok -->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.36</version>
+            <optional>true</optional>
+        </dependency>
+
+        <!-- 寮�鍙戝伐鍏� -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <scope>runtime</scope>
+            <optional>true</optional>
+        </dependency>
+
+        <!-- 娴嬭瘯 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.springframework.security</groupId>
+            <artifactId>spring-security-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <!-- 绂佺敤 Spring Boot 鑳栧寘閲嶆墦鍖咃紝鏀逛负鐦﹀寘 + 澶栫疆渚濊禆 -->
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
+            <!-- 鍦ㄦ墦鍖呴樁娈靛鍒舵墍鏈変緷璧栧埌 target/lib -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>3.6.1</version>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                            <includeScope>runtime</includeScope>
+                            <overWriteReleases>false</overWriteReleases>
+                            <overWriteSnapshots>false</overWriteSnapshots>
+                            <overWriteIfNewer>true</overWriteIfNewer>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!-- 鐢熸垚鍙墽琛岀槮 JAR锛氬啓鍏� Main-Class 涓� Class-Path 鎸囧悜 lib/ -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <version>3.4.2</version>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <addClasspath>true</addClasspath>
+                            <classpathPrefix>lib/</classpathPrefix>
+                            <mainClass>com.rongyichuang.RycBackendApplication</mainClass>
+                        </manifest>
+                    </archive>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file
diff --git a/backend/bin/src/main/java/com/rongyichuang/activity/repository/ActivityRepository.java.backup b/backend/bin/src/main/java/com/rongyichuang/activity/repository/ActivityRepository.java.backup
new file mode 100644
index 0000000..d67f2b3
--- /dev/null
+++ b/backend/bin/src/main/java/com/rongyichuang/activity/repository/ActivityRepository.java.backup
@@ -0,0 +1,1589 @@
+package com.rongyichuang.activity.repository;
+
+import com.rongyichuang.activity.entity.Activity;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+
+import java.util.List;
+
+public interface ActivityRepository extends JpaRepository<Activity, Long> {
+
+    Page<Activity> findByPidAndStateAndNameContainingOrderByCreateTimeDesc(Long pid, int state, String name, Pageable pageable);
+
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     */
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁ID鍒楄〃鏌ヨ姣旇禌
+     *
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/application.yml b/backend/bin/src/main/resources/application.yml
new file mode 100644
index 0000000..0718406
--- /dev/null
+++ b/backend/bin/src/main/resources/application.yml
@@ -0,0 +1,102 @@
+server:
+  port: 8080
+  servlet:
+    context-path: /api
+
+spring:
+  application:
+    name: ryc-backend
+  
+  # 鏁版嵁搴撻厤缃�
+  datasource:
+    url: jdbc:mysql://139.155.104.10:3306/ryc?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&connectTimeout=60000&socketTimeout=60000&autoReconnect=true
+    username: ryc
+    password: KiYap3E8X8RLcM6T
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    hikari:
+      connection-timeout: 60000
+      idle-timeout: 300000
+      max-lifetime: 1800000
+      maximum-pool-size: 10
+      minimum-idle: 5
+      validation-timeout: 5000
+      leak-detection-threshold: 60000
+    
+  # JPA閰嶇疆
+  jpa:
+    hibernate:
+      ddl-auto: none
+    show-sql: true
+    properties:
+      hibernate:
+        dialect: org.hibernate.dialect.MySQLDialect
+        format_sql: true
+    
+  # GraphQL閰嶇疆
+  graphql:
+    path: /graphql
+    graphiql:
+      enabled: true
+      path: /graphiql
+    cors:
+      allow-credentials: true
+      allowed-headers: '*'
+      allowed-methods: '*'
+    schema:
+      locations:
+        - classpath*:graphql/**/
+      file-extensions:
+        - .graphqls
+        - .gqls
+      printer:
+        enabled: true
+      
+  # RabbitMQ閰嶇疆
+  rabbitmq:
+    host: 139.155.104.10
+    port: 5672
+    virtual-host: ryc_prod
+    username: admin
+    password: ycl@2020
+    connection-timeout: 15000
+    
+  # 鏂囦欢涓婁紶閰嶇疆
+  servlet:
+    multipart:
+      max-file-size: 300MB
+      max-request-size: 300MB
+
+# 鑵捐浜慍OS閰嶇疆
+cos:
+  secret-id: AKIDfSG2e3Gev1xgBTaVDiz2rTr790d3FH8l
+  secret-key: VmqgIh1B9aopcCYklbBdsthaHkeS3RbY
+  bucket: ryc-1379367838
+  region: ap-chengdu
+
+# 鏃ュ織閰嶇疆
+logging:
+  level:
+    com.rongyichuang: DEBUG
+    org.springframework.security: DEBUG
+    org.springframework.transaction: DEBUG
+    org.springframework.orm.jpa: DEBUG
+    org.hibernate.SQL: DEBUG
+    org.hibernate.type.descriptor.sql.BasicBinder: TRACE
+    org.hibernate.engine.transaction: DEBUG
+
+# 搴旂敤閰嶇疆
+app:
+  base-url: https://rych.9village.cn
+  jwt:
+    secret: ryc-jwt-secret-key-2024-secure-256bit-hmac-sha-algorithm-compatible
+    expiration: 86400000 # 24灏忔椂
+  media-url:  https://ryc-1379367838.cos.ap-chengdu.myqcloud.com
+
+# 寰俊灏忕▼搴忛厤缃�
+wechat:
+  miniprogram:
+    app-id: wxaa13026a14b1d784  # 灏忕▼搴廇ppID
+    app-secret: b7a7acc1063a83b9cd3173fb08919f84  # 闇�瑕侀厤缃幆澧冨彉閲廤ECHAT_APP_SECRET
+    api:
+      code2session: https://api.weixin.qq.com/sns/jscode2session
+      get-phone-number: https://api.weixin.qq.com/wxa/business/getuserphonenumber
diff --git a/backend/bin/src/main/resources/db/migration/V001__create_carousel_table.sql b/backend/bin/src/main/resources/db/migration/V001__create_carousel_table.sql
new file mode 100644
index 0000000..4056644
--- /dev/null
+++ b/backend/bin/src/main/resources/db/migration/V001__create_carousel_table.sql
@@ -0,0 +1,17 @@
+-- 鍒涘缓杞挱鍥捐〃
+CREATE TABLE IF NOT EXISTS t_carousel (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY,
+    title VARCHAR(100) NOT NULL COMMENT '鏂伴椈鏍囬',
+    content TEXT COMMENT '鏂伴椈鍐呭',
+    sort_order INT DEFAULT 99999 COMMENT '鎾斁椤哄簭',
+    state TINYINT DEFAULT 1 COMMENT '鐘舵�侊細1-姝e父锛�0-鍒犻櫎',
+    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '鍒涘缓鏃堕棿',
+    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿',
+    create_by BIGINT COMMENT '鍒涘缓浜篒D',
+    update_by BIGINT COMMENT '鏇存柊浜篒D'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='杞挱鍥撅紙鏂伴椈涓庢帹骞匡級琛�';
+
+-- 鍒涘缓绱㈠紩
+CREATE INDEX idx_carousel_sort_order ON t_carousel(sort_order);
+CREATE INDEX idx_carousel_state ON t_carousel(state);
+CREATE INDEX idx_carousel_create_time ON t_carousel(create_time);
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/db/migration/V1_1__create_wx_login_record_table.sql b/backend/bin/src/main/resources/db/migration/V1_1__create_wx_login_record_table.sql
new file mode 100644
index 0000000..8ed8364
--- /dev/null
+++ b/backend/bin/src/main/resources/db/migration/V1_1__create_wx_login_record_table.sql
@@ -0,0 +1,23 @@
+-- 鍒涘缓寰俊鐧诲綍璁板綍琛�
+CREATE TABLE t_wx_login_record (
+    id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '涓婚敭ID',
+    wx_openid VARCHAR(64) NOT NULL COMMENT '寰俊openid',
+    wx_unionid VARCHAR(64) COMMENT '寰俊unionid',
+    user_id BIGINT COMMENT '鍏宠仈鐨勭敤鎴稩D',
+    login_time DATETIME NOT NULL COMMENT '鐧诲綍鏃堕棿',
+    login_ip VARCHAR(64) COMMENT '鐧诲綍IP鍦板潃',
+    device_info VARCHAR(255) COMMENT '璁惧淇℃伅',
+    session_key VARCHAR(128) COMMENT '寰俊session_key',
+    phone_authorized TINYINT(1) DEFAULT 0 COMMENT '鏄惁宸叉巿鏉冩墜鏈哄彿锛�0-鏈巿鏉冿紝1-宸叉巿鏉�',
+    phone_auth_time DATETIME COMMENT '鎵嬫満鍙锋巿鏉冩椂闂�',
+    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '鍒涘缓鏃堕棿',
+    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿',
+    state TINYINT(1) DEFAULT 1 COMMENT '鐘舵�侊細0-绂佺敤锛�1-鍚敤'
+) COMMENT='寰俊鐧诲綍璁板綍琛�';
+
+-- 鍒涘缓绱㈠紩
+CREATE INDEX idx_wx_openid ON t_wx_login_record(wx_openid);
+CREATE INDEX idx_wx_unionid ON t_wx_login_record(wx_unionid);
+CREATE INDEX idx_user_id ON t_wx_login_record(user_id);
+CREATE INDEX idx_login_time ON t_wx_login_record(login_time);
+CREATE INDEX idx_phone_authorized ON t_wx_login_record(phone_authorized);
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/db/migration/V1_2__add_audit_fields_to_wx_login_record.sql b/backend/bin/src/main/resources/db/migration/V1_2__add_audit_fields_to_wx_login_record.sql
new file mode 100644
index 0000000..f5e6151
--- /dev/null
+++ b/backend/bin/src/main/resources/db/migration/V1_2__add_audit_fields_to_wx_login_record.sql
@@ -0,0 +1,9 @@
+-- 涓哄井淇$櫥褰曡褰曡〃娣诲姞瀹¤瀛楁
+ALTER TABLE t_wx_login_record 
+ADD COLUMN create_user_id BIGINT COMMENT '鍒涘缓鐢ㄦ埛ID',
+ADD COLUMN update_user_id BIGINT COMMENT '鏇存柊鐢ㄦ埛ID',
+ADD COLUMN version BIGINT NOT NULL DEFAULT 0 COMMENT '鐗堟湰鍙凤紙涔愯閿侊級';
+
+-- 涓烘柊瀛楁鍒涘缓绱㈠紩
+CREATE INDEX idx_create_user_id ON t_wx_login_record(create_user_id);
+CREATE INDEX idx_update_user_id ON t_wx_login_record(update_user_id);
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/db/migration/V1_2__add_state_to_activity_player.sql b/backend/bin/src/main/resources/db/migration/V1_2__add_state_to_activity_player.sql
new file mode 100644
index 0000000..2cbefc8
--- /dev/null
+++ b/backend/bin/src/main/resources/db/migration/V1_2__add_state_to_activity_player.sql
@@ -0,0 +1,12 @@
+-- 涓� t_activity_player 琛ㄦ坊鍔� state 瀛楁锛堝鏋滀笉瀛樺湪锛�
+-- 杩欎釜杩佺Щ鑴氭湰纭繚 state 瀛楁瀛樺湪骞舵湁姝g‘鐨勯粯璁ゅ��
+
+-- 妫�鏌ュ苟娣诲姞 state 瀛楁
+ALTER TABLE t_activity_player 
+ADD COLUMN IF NOT EXISTS state INT NOT NULL DEFAULT 1 COMMENT '鐘舵�侊細0-鍒犻櫎锛�1-姝e父';
+
+-- 涓哄凡瀛樺湪鐨勮褰曡缃粯璁ょ姸鎬�
+UPDATE t_activity_player SET state = 1 WHERE state IS NULL OR state = 0;
+
+-- 娣诲姞绱㈠紩浠ユ彁楂樻煡璇㈡�ц兘
+CREATE INDEX IF NOT EXISTS idx_activity_player_state ON t_activity_player(state);
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/db/migration/V2__add_judge_fields.sql b/backend/bin/src/main/resources/db/migration/V2__add_judge_fields.sql
new file mode 100644
index 0000000..5e375c1
--- /dev/null
+++ b/backend/bin/src/main/resources/db/migration/V2__add_judge_fields.sql
@@ -0,0 +1,7 @@
+-- 涓簍_judge琛ㄦ坊鍔犵己澶辩殑瀛楁
+ALTER TABLE t_judge 
+ADD COLUMN title VARCHAR(128) COMMENT '鑱屼綅/澶磋',
+ADD COLUMN company VARCHAR(128) COMMENT '鍏徃/鏈烘瀯',
+ADD COLUMN introduction TEXT COMMENT '涓汉浠嬬粛',
+ADD COLUMN avatar_url VARCHAR(512) COMMENT '澶村儚URL',
+ADD COLUMN avatar_media_id BIGINT COMMENT '澶村儚濯掍綋ID';
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/graphql/activity.graphqls b/backend/bin/src/main/resources/graphql/activity.graphqls
new file mode 100644
index 0000000..ba530a4
--- /dev/null
+++ b/backend/bin/src/main/resources/graphql/activity.graphqls
@@ -0,0 +1,225 @@
+extend type Query {
+
+    activity(id: ID!): Activity
+
+    activities(page: Int!, size: Int!, name: String, state: Int): PageResponse
+
+    allActivities: [Activity]
+
+    allActivityStages: [Activity]
+
+    activityStages(activityId: ID!): [Activity]
+
+    ongoingActivities: [Activity]
+
+    # 瀵邦喕淇婄粩顖濆箯閸欐牗妞块崝銊ュ灙鐞�?
+
+    getActivities: [Activity]
+
+    # 閼惧嘲褰囨稉璇插閺傚湱绮虹拋鈩冩殶閹�?
+
+    organizerStats: OrganizerStatsResponse
+
+}
+
+
+
+extend type Mutation {
+
+    saveActivity(input: ActivityInput!): Activity
+
+    deleteActivity(id: ID!): Boolean
+    updateActivityState(id: ID!, state: Int!): Boolean
+
+}
+
+
+
+type Activity {
+
+    id: ID
+
+    pid: ID
+
+    path: String
+
+    name: String
+
+    description: String
+
+    signupDeadline: String
+
+    matchTime: String
+
+    address: String
+
+    ratingSchemeId: ID
+
+    ratingScheme: RatingSchemeResponse
+
+    playerCount: Int
+
+    playerMax: Int
+
+    sortOrder: Int
+
+    state: Int
+
+    stateName: String
+
+    createTime: String
+
+    updateTime: String
+
+    coverImage: MediaResponse
+
+    images: [MediaResponse]
+
+    videos: [MediaResponse]
+
+    stages: [Activity]
+
+    parent: Activity
+
+    judges: [ActivityJudgeResponse]
+
+}
+
+
+
+type PageResponse {
+
+    content: [Activity]
+
+    page: Int
+
+    size: Int
+
+    total: Int
+
+    totalPages: Int
+
+    totalElements: Int
+
+    number: Int
+
+    first: Boolean
+
+    last: Boolean
+
+}
+
+
+
+input ActivityInput {
+
+    id: ID
+
+    pid: ID
+
+    name: String!
+
+    description: String
+
+    signupDeadline: String
+
+    matchTime: String
+
+    address: String
+
+    ratingSchemeId: ID
+
+    playerMax: Int
+
+    sortOrder: Int
+
+    state: Int
+
+    stages: [ActivityStageInput]
+
+    judges: [ActivityJudgeInput]
+
+}
+
+
+
+input ActivityStageInput {
+
+    id: ID
+
+    name: String!
+
+    description: String
+
+    matchTime: String
+
+    address: String
+
+    ratingSchemeId: ID
+
+    playerMax: Int
+
+    sortOrder: Int
+
+    state: Int
+
+}
+
+
+
+input ActivityJudgeInput {
+
+    judgeId: ID!
+
+    judgeName: String
+
+    stageIds: [ID]
+
+}
+
+
+
+type ActivityJudgeResponse {
+
+    id: ID
+
+    name: String
+
+    phone: String
+
+    description: String
+
+    stageIds: [ID]
+
+}
+
+
+
+# 濞茶濮╃拠锔藉剰閸滃瞼濮搁幀浣告惙鎼存梻琚崹瀣剁礄瀵邦喕淇婄粩顖欏▏閻㈩煉绱�
+
+type ActivityDetailAndStatusResponse {
+
+    activity: Activity
+
+    registrationStatus: String
+
+    canRegister: Boolean
+
+    playerRegistration: ActivityPlayer
+
+}
+
+
+
+# 娑撹濮欓弬鍦埠鐠佲�虫惙鎼存梻琚崹?
+
+type OrganizerStatsResponse {
+
+    activeActivities: Int!
+
+    totalParticipants: Int!
+
+    totalActivities: Int!
+
+}
+
diff --git a/backend/bin/src/main/resources/graphql/auth.graphqls b/backend/bin/src/main/resources/graphql/auth.graphqls
new file mode 100644
index 0000000..7addfa7
--- /dev/null
+++ b/backend/bin/src/main/resources/graphql/auth.graphqls
@@ -0,0 +1,100 @@
+extend type Query {
+    # 璁よ瘉鐩稿叧鎺ュ彛宸茶縼绉诲埌RESTful API
+    _: Boolean
+}
+
+extend type Mutation {
+    # 寰俊鐧诲綍
+    wxLogin(input: WxLoginRequest!): WxLoginResponse
+    
+    # Web绔櫥褰�
+    webLogin(input: LoginRequest!): LoginResponse
+    
+    # 瑙e瘑寰俊鎵嬫満鍙凤紙鏃х増API锛�
+    decryptPhoneNumber(encryptedData: String!, iv: String!, sessionKey: String!): PhoneDecryptResponse
+    
+    # 鑾峰彇寰俊鎵嬫満鍙凤紙鏂扮増API锛�
+    getPhoneNumberByCode(code: String!): PhoneDecryptResponse
+}
+
+input LoginRequest {
+    phone: String!
+    password: String!
+}
+
+input WxLoginRequest {
+    code: String
+    wxOpenid: String
+    wxUnionid: String
+    phone: String
+    loginIp: String
+    deviceInfo: String
+    phoneAuthorized: Boolean
+    sessionKey: String
+}
+
+type LoginResponse {
+    token: String
+    userInfo: UserInfo
+}
+
+type WxLoginResponse {
+    token: String
+    userInfo: UserInfo
+    isNewUser: Boolean
+    loginRecordId: Long
+    sessionKey: String
+    success: Boolean
+    message: String
+    hasEmployee: Boolean
+    hasJudge: Boolean
+    hasPlayer: Boolean
+}
+
+type UserInfo {
+    userId: Long
+    name: String
+    phone: String
+    userType: String
+    avatarUrl: String
+    employee: EmployeeInfo
+    judge: JudgeInfo
+    player: PlayerInfo
+}
+
+type EmployeeInfo {
+    id: Long
+    name: String
+    roleId: String
+    description: String
+}
+
+type JudgeInfo {
+    id: Long
+    name: String
+    title: String
+    company: String
+    description: String
+}
+
+type PlayerInfo {
+    id: ID!
+    name: String!
+    phone: String
+    description: String
+    userInfo: PlayerUserInfo
+}
+
+type PlayerUserInfo {
+    userId: Long
+    name: String
+    phone: String
+    avatarUrl: String
+    avatar: MediaInfo
+}
+
+type PhoneDecryptResponse {
+    phoneNumber: String
+    purePhoneNumber: String
+    countryCode: String
+}
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/graphql/carousel.graphqls b/backend/bin/src/main/resources/graphql/carousel.graphqls
new file mode 100644
index 0000000..3e6a73d
--- /dev/null
+++ b/backend/bin/src/main/resources/graphql/carousel.graphqls
@@ -0,0 +1,66 @@
+# 杞挱鍥撅紙鏂伴椈涓庢帹骞匡級GraphQL Schema
+
+# 杞挱鍥捐緭鍏ョ被鍨�
+input CarouselInput {
+    id: ID
+    title: String!
+    content: String
+    sortOrder: Int
+}
+
+# 杞挱鍥惧搷搴旂被鍨�
+type CarouselResponse {
+    id: ID!
+    title: String!
+    content: String
+    sortOrder: Int
+    mediaCount: Int
+    createTime: String
+    updateTime: String
+    
+    # 濯掍綋鏂囦欢
+    coverImage: MediaResponse
+    images: [MediaResponse!]!
+    videos: [MediaResponse!]!
+}
+
+# 杞挱鍥惧垎椤靛搷搴旂被鍨�
+type CarouselPageResponse {
+    content: [CarouselResponse!]!
+    totalElements: Int!
+    page: Int!
+    size: Int!
+}
+
+# 鎵╁睍鏌ヨ
+extend type Query {
+    # 鍒嗛〉鏌ヨ杞挱鍥�
+    carousels(page: Int!, size: Int!, title: String): CarouselPageResponse!
+    
+    # 鏍规嵁ID鏌ヨ杞挱鍥�
+    carousel(id: ID!): CarouselResponse
+    
+    # 鑾峰彇鎾斁鍒楄〃
+    carouselPlayList: [CarouselResponse!]!
+    
+    # 鑾峰彇杞挱鍥惧垪琛紙寰俊绔娇鐢級
+    getBanners: [CarouselResponse!]!
+}
+
+# 鎵╁睍鍙樻洿
+extend type Mutation {
+    # 淇濆瓨杞挱鍥�
+    saveCarousel(carousel: CarouselInput!): CarouselResponse!
+    
+    # 鍒犻櫎杞挱鍥�
+    deleteCarousel(id: ID!): Boolean!
+    
+    # 鎵归噺鏇存柊鎾斁椤哄簭
+    updateCarouselSortOrders(sortOrders: [CarouselSortOrderInput!]!): Boolean!
+}
+
+# 鎺掑簭杈撳叆绫诲瀷
+input CarouselSortOrderInput {
+    id: ID!
+    sortOrder: Int!
+}
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/graphql/dashboard.graphqls b/backend/bin/src/main/resources/graphql/dashboard.graphqls
new file mode 100644
index 0000000..8016add
--- /dev/null
+++ b/backend/bin/src/main/resources/graphql/dashboard.graphqls
@@ -0,0 +1,52 @@
+# Dashboard 缁熻鏁版嵁 GraphQL Schema
+
+# Dashboard 缁熻鏁版嵁鍝嶅簲绫诲瀷
+type DashboardStats {
+    # 褰撳墠杩涜姣旇禌鏁伴噺
+    activeActivities: Int!
+    
+    # 鍙傝禌鎬讳汉鏁�
+    totalPlayers: Int!
+    
+    # 鎶ュ悕寰呭鏍镐汉鏁�
+    pendingReviews: Int!
+    
+    # 璇勫鎬绘暟
+    totalJudges: Int!
+}
+
+# 鎶ュ悕瓒嬪娍鏁版嵁鐐�
+type RegistrationTrendPoint {
+    # 鏃ユ湡锛坹yyy-MM-dd锛�
+    date: String!
+
+    # 鎶ュ悕鏁伴噺
+    count: Long!
+}
+
+# 鍖哄煙鎶ュ悕缁熻
+type RegionRegistrationStat {
+    # 鍖哄煙ID锛堝彲鑳戒负鏁板瓧鎴朥UID瀛楃涓诧紝鏈�夋嫨鏃朵负绌猴級
+    regionId: ID
+
+    # 鍖哄煙鍚嶇О
+    regionName: String!
+
+    # 鏄惁鍙跺瓙鑺傜偣锛堟暟鎹己澶辨椂涓虹┖锛�
+    leafFlag: Boolean
+
+    # 鎶ュ悕鏁伴噺
+    count: Long!
+}
+
+# 鎵╁睍鏌ヨ
+extend type Query {
+    # 鑾峰彇Dashboard缁熻鏁版嵁
+    dashboardStats: DashboardStats!
+
+    # 鑾峰彇鏈�杩戞姤鍚嶈秼鍔�
+    registrationTrend(days: Int): [RegistrationTrendPoint!]!
+
+    # 鑾峰彇鍖哄煙鎶ュ悕鍒嗗竷
+    registrationRegionStats: [RegionRegistrationStat!]!
+}
diff --git a/backend/bin/src/main/resources/graphql/employee.graphqls b/backend/bin/src/main/resources/graphql/employee.graphqls
new file mode 100644
index 0000000..621d614
--- /dev/null
+++ b/backend/bin/src/main/resources/graphql/employee.graphqls
@@ -0,0 +1,79 @@
+# 鍛樺伐鐩稿叧鐨凣raphQL Schema瀹氫箟
+
+# 鍛樺伐鍝嶅簲绫诲瀷
+type EmployeeResponse {
+    id: Long!
+    name: String!
+    phone: String!
+    roleId: String!
+    description: String
+    state: Int!
+    createTime: String
+    updateTime: String
+}
+
+# 鍛樺伐杈撳叆绫诲瀷
+input EmployeeInput {
+    id: Long
+    name: String!
+    phone: String!
+    password: String
+    roleId: String!
+    description: String
+}
+
+# 鍒嗛〉缁撴灉绫诲瀷 - 绠�鍖栫増鏈紝鐩存帴浣跨敤Spring Data Page瀵硅薄
+# Spring Data鐨凱age瀵硅薄浼氳嚜鍔ㄦ槧灏勫埌GraphQL
+
+# 鎵╁睍鏌ヨ绫诲瀷
+
+
+type EmployeeReviewApplication {
+    id: Long!
+    playerName: String
+    projectName: String
+    activityName: String
+    state: Int
+    stateText: String
+    stateType: String
+    applyTime: String
+}
+
+type EmployeeReviewPage {
+    content: [EmployeeReviewApplication!]!
+    totalElements: Int!
+    page: Int!
+    size: Int!
+}
+
+type EmployeeReviewStats {
+    pendingCount: Int!
+    approvedCount: Int!
+    rejectedCount: Int!
+}
+
+extend type Query {
+    # 鑾峰彇鎵�鏈夊憳宸ュ垪琛�
+    employees: [EmployeeResponse!]!
+    
+    # 鏍规嵁鍚嶇О鎼滅储鍛樺伐
+    employeesByName(name: String): [EmployeeResponse!]!
+    
+    # 鏍规嵁ID鑾峰彇鍛樺伐璇︽儏
+    employee(id: Long!): EmployeeResponse
+
+    # 鍛樺伐瀹℃牳缁熻
+    employeeReviewStats(keyword: String): EmployeeReviewStats!
+
+    # 鍛樺伐瀹℃牳鍒楄〃
+    employeeReviewApplications(keyword: String, state: Int, page: Int, size: Int): EmployeeReviewPage!
+}
+
+# 鎵╁睍鍙樻洿绫诲瀷
+extend type Mutation {
+    # 淇濆瓨鍛樺伐锛堟柊澧炴垨鏇存柊锛�
+    saveEmployee(input: EmployeeInput!): EmployeeResponse!
+    
+    # 鍒犻櫎鍛樺伐
+    deleteEmployee(id: Long!): Boolean!
+}
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/graphql/judge.graphqls b/backend/bin/src/main/resources/graphql/judge.graphqls
new file mode 100644
index 0000000..6b6c37e
--- /dev/null
+++ b/backend/bin/src/main/resources/graphql/judge.graphqls
@@ -0,0 +1,158 @@
+extend type Query {
+    "鑾峰彇鎵�鏈夎瘎濮斿垪琛�"
+    judges: [JudgeResponse]
+    
+    "鏍规嵁鍚嶇О鎼滅储璇勫"
+    judgesByName(name: String): [JudgeResponse]
+    
+    "鏍规嵁ID鑾峰彇璇勫璇︽儏"
+    judge(id: ID): JudgeResponse
+    
+    "鑾峰彇鑵捐浜慍OS涓存椂涓婁紶鍑瘉"
+    getUploadCredentials: CosCredentials
+    
+    # 璇勫璇勫鐩稿叧鏌ヨ
+    "鑾峰彇鎻愪氦璇︽儏"
+    getSubmissionDetail(submissionId: ID!): SubmissionDetailResponse
+
+    # 妫�鏌ヨ瘎瀹$姸鎬�
+    checkReviewStatus(submissionId: ID!): ReviewStatusResponse
+    
+    # 鑾峰彇璇勫缁熻鏁版嵁
+    judgeStats: JudgeStatsResponse
+}
+
+extend type Mutation {
+    "淇濆瓨璇勫淇℃伅锛堟柊澧炴垨淇敼锛�"
+    saveJudge(input: JudgeInput): JudgeResponse
+    
+    "鍒犻櫎璇勫"
+    deleteJudge(id: ID): Boolean
+    
+    # 璇勫鐩稿叧mutation
+    "淇濆瓨璇勫鑽夌"
+    saveReviewDraft(input: ReviewDraftInput!): ReviewDraftResponse
+    
+    "鎻愪氦璇勫"
+    submitReview(input: ReviewSubmitInput!): ReviewSubmitResponse
+}
+
+"璇勫杈撳叆绫诲瀷"
+input JudgeInput {
+    id: ID
+    name: String
+    title: String
+    company: String
+    phone: String
+    password: String
+    gender: Int
+    description: String
+    introduction: String
+    avatarUrl: String
+    avatarMediaId: ID
+    majorIds: [ID]
+    tagNames: [String]
+}
+
+"璇勫鍝嶅簲绫诲瀷"
+type JudgeResponse {
+    id: ID
+    name: String
+    title: String
+    company: String
+    phone: String
+    gender: Int
+    description: String
+    introduction: String
+    avatarUrl: String
+    specialties: [TagResponse]
+    tags: [TagResponse]
+}
+
+# 鏍囩鍝嶅簲绫诲瀷锛堢敤浜庤瘎濮斾笓涓氶鍩燂級
+type TagResponse {
+    id: Long!
+    name: String!
+    code: String
+}
+
+
+
+"鑵捐浜慍OS涓存椂鍑瘉绫诲瀷"
+type CosCredentials {
+    bucket: String
+    region: String
+    key: String
+    presignedUrl: String
+    expiration: String
+}
+
+# 鎻愪氦璇︽儏鍝嶅簲绫诲瀷
+type SubmissionDetailResponse {
+    id: ID!
+    activityId: ID!
+    playerId: ID!
+    playerName: String
+    projectName: String
+    description: String
+    submissionFiles: [SubmissionMediaResponse]
+    currentScore: Float
+    maxScore: Int
+    reviewStatus: String
+}
+
+# 璇勫鐘舵�佸搷搴旂被鍨�
+type ReviewStatusResponse {
+    submissionId: ID!
+    reviewStatus: String
+    canReview: Boolean
+    hasReviewed: Boolean
+    currentScore: Float
+    reviewTime: String
+}
+
+# 璇勫鑽夌杈撳叆绫诲瀷
+input ReviewDraftInput {
+    submissionId: ID!
+    scores: [ReviewScoreInput!]!
+    comments: String
+}
+
+# 璇勫鎻愪氦杈撳叆绫诲瀷
+input ReviewSubmitInput {
+    submissionId: ID!
+    scores: [ReviewScoreInput!]!
+    comments: String
+    finalScore: Float!
+}
+
+# 璇勫鍒嗘暟杈撳叆绫诲瀷
+input ReviewScoreInput {
+    itemId: ID!
+    score: Float!
+}
+
+# 璇勫鑽夌鍝嶅簲绫诲瀷
+type ReviewDraftResponse {
+    id: ID!
+    submissionId: ID!
+    status: String
+    saveTime: String
+}
+
+# 璇勫鎻愪氦鍝嶅簲绫诲瀷
+type ReviewSubmitResponse {
+    id: ID!
+    submissionId: ID!
+    finalScore: Float!
+    status: String
+    submitTime: String
+}
+
+# 璇勫缁熻鍝嶅簲绫诲瀷
+type JudgeStatsResponse {
+    pendingReviews: Int!
+    completedReviews: Int!
+    totalReviews: Int!
+}
+
diff --git a/backend/bin/src/main/resources/graphql/media.graphqls b/backend/bin/src/main/resources/graphql/media.graphqls
new file mode 100644
index 0000000..0e2b1d7
--- /dev/null
+++ b/backend/bin/src/main/resources/graphql/media.graphqls
@@ -0,0 +1,82 @@
+extend type Query {
+    media(id: ID!): Media
+    mediasByTarget(targetType: Int!, targetId: ID!): [MediaResponse]
+}
+
+extend type Mutation {
+    saveMedia(input: MediaInput!): Media
+    deleteMedia(id: ID!): Boolean
+    # 寰俊绔繚瀛樺獟浣撴枃浠禫2
+    saveMediaV2(input: MediaSaveInput!): MediaSaveResponse
+    # 淇濆瓨閫夋墜澶村儚
+    savePlayerAvatar(playerId: ID!, path: String!, fileName: String!, fileSize: Long!): MediaSaveResponse
+    # 淇濆瓨娲诲姩鎶ュ悕闄勪欢
+    saveActivityPlayerAttachment(activityPlayerId: ID!, path: String!, fileName: String!, fileSize: Long!, mediaType: Int!): MediaSaveResponse
+}
+
+type Media {
+    id: ID
+    name: String
+    path: String
+    fileSize: Int
+    fileExt: String
+    mediaType: Int
+    targetType: Int
+    targetId: Long
+    thumbPath: String
+    duration: Int
+    description: String
+    fullUrl: String
+    fullThumbUrl: String
+}
+
+# 涓庡悗绔� DTO 瀵归綈鐨勫搷搴旂被鍨嬶紝渚� Carousel/Activity 绛変娇鐢�
+type MediaResponse {
+    id: ID
+    name: String
+    path: String
+    fileSize: Int
+    fileExt: String
+    mediaType: Int
+    targetType: Int
+    targetId: Long
+    thumbPath: String
+    duration: Int
+    description: String
+    fullUrl: String
+    fullThumbUrl: String
+}
+
+# 濯掍綋杈撳叆绫诲瀷
+input MediaInput {
+    name: String!
+    path: String!
+    fileSize: Int
+    fileExt: String
+    mediaType: Int!
+    targetType: Int!
+    targetId: Long!
+    thumbPath: String
+    duration: Int
+    description: String
+}
+
+# 濯掍綋淇濆瓨杈撳叆绫诲瀷锛圴2鐗堟湰锛�
+input MediaSaveInput {
+    targetType: String!
+    targetId: Long!
+    path: String!
+    thumbPath: String
+    fileName: String
+    fileExt: String
+    fileSize: Long
+    duration: Int
+    mediaType: Int!
+}
+
+# 濯掍綋淇濆瓨鍝嶅簲绫诲瀷
+type MediaSaveResponse {
+    success: Boolean!
+    message: String!
+    mediaId: Long
+}
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/graphql/message.graphqls b/backend/bin/src/main/resources/graphql/message.graphqls
new file mode 100644
index 0000000..a788aee
--- /dev/null
+++ b/backend/bin/src/main/resources/graphql/message.graphqls
@@ -0,0 +1,21 @@
+# 娑堟伅鐩稿叧鐨凣raphQL Schema
+
+# 娑堟伅绫诲瀷
+type Message {
+    id: Long!
+    userId: Long!
+    content: String!
+    templateContent: String
+    wxMsgSuccess: Boolean!
+    wxMsgErrCount: Int!
+    wxMsgLastErr: String
+    state: String!
+    createTime: String!
+    updateTime: String!
+}
+
+# 鎵╁睍鏌ヨ绫诲瀷
+extend type Query {
+    # 鏍规嵁鐢ㄦ埛ID鑾峰彇娑堟伅鍒楄〃锛屾寜鏃堕棿鍊掑簭
+    getMessagesByUserId(userId: Long!): [Message!]!
+}
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/graphql/player.graphqls b/backend/bin/src/main/resources/graphql/player.graphqls
new file mode 100644
index 0000000..ee07e45
--- /dev/null
+++ b/backend/bin/src/main/resources/graphql/player.graphqls
@@ -0,0 +1,347 @@
+extend type Query {
+    myActivityPlayer(activityId: ID!): ActivityPlayer
+    activityPlayerApplications(name: String, activityId: ID, state: Int, page: Int, size: Int): PlayerApplicationPageResponse
+    # 椤圭洰璇勫涓撶敤鏌ヨ锛屽寘鍚墍鏈夐樁娈垫暟鎹紙鍖呮嫭澶嶈禌銆佸喅璧涳級
+    projectReviewApplications(name: String, activityId: ID, regionId: ID, state: Int, page: Int, size: Int): ProjectReviewApplicationPageResponse
+    # 鑾峰彇鎸囧畾閫夋墜鐨勬墍鏈夎瘎濮旇瘎鍒嗙姸鎬�
+    judgeRatingsForPlayer(activityPlayerId: ID!): [JudgeRatingStatusResponse!]!
+    # 鑾峰彇鎸囧畾閫夋墜鐨勫钩鍧囧垎
+    averageScoreForPlayer(activityPlayerId: ID!): Float
+
+    # 鑾峰彇褰撳墠璇勫淇℃伅
+    currentJudgeInfo: CurrentJudgeInfoResponse
+    # 妫�鏌ヨ瘎濮旀槸鍚﹀湪鎸囧畾姣旇禌闃舵鐨勮瘎濮斿垪琛ㄤ腑
+    isJudgeInActivity(stageId: ID!, judgeId: ID!): Boolean
+    # 鑾峰彇鎸囧畾璇勫瀵归�夋墜鐨勮瘎鍒嗘槑缁�
+    judgeRatingDetail(activityPlayerId: ID!, judgeId: ID!): CurrentJudgeRatingResponse
+    # 鑾峰彇褰撳墠璇勫瀵归�夋墜鐨勮瘎鍒�
+    currentJudgeRating(activityPlayerId: ID!): CurrentJudgeRatingResponse
+    activityPlayerDetail(id: ID!): ActivityPlayerDetailResponse
+    # 鑾峰彇鍙傝禌椤圭洰闃舵鏃堕棿杞村強璇勫垎姒傚喌
+    projectStageTimeline(activityPlayerId: ID!): ProjectStageTimelineResponse
+    # 鑾峰彇鎸囧畾闃舵鐨勮瘎濮旇瘎鍒嗚鎯�
+    stageJudgeRatings(activityPlayerId: ID!): StageJudgeRatingDetailResponse
+    # 寰俊绔幏鍙栭�夋墜鎶ュ悕鐘舵��
+    getPlayerRegistrationState(activityId: ID!): PlayerRegistrationResponse
+    # 鑾峰彇姣旇禌鏅嬬骇鍒楄〃
+    promotionCompetitions(name: String, page: Int, size: Int): [PromotionCompetitionResponse!]!
+    # 鑾峰彇鍙檵绾у弬璧涜�呭垪琛�
+    promotableParticipants(currentStageId: ID!): PromotableParticipantsResponse
+}
+
+extend type Mutation {
+    approveActivityPlayer(activityPlayerId: ID!, feedback: String): Boolean
+    rejectActivityPlayer(activityPlayerId: ID!, feedback: String!): Boolean
+    updatePlayerFeedback(activityPlayerId: ID!, feedback: String!): Boolean
+    # 寰俊绔彁浜ゆ椿鍔ㄦ姤鍚�
+    submitActivityRegistration(input: ActivityRegistrationInput!): ActivityRegistrationResponse
+    # 淇濆瓨璇勫璇勫垎
+    saveActivityPlayerRating(input: ActivityPlayerRatingInput!): Boolean
+    # 鎵ц瀛﹀憳鏅嬬骇鎿嶄綔
+    promoteParticipants(input: PromotionInput!): PromotionResult
+}
+
+type ActivityPlayer {
+    id: ID!
+    activityId: ID!
+    playerId: ID!
+    stageId: ID
+    state: Int
+    stateName: String
+    createTime: String
+    player: Player
+    activity: Activity
+}
+
+type Player {
+    id: ID!
+    name: String
+    phone: String @deprecated(reason: "姝ゅ瓧娈靛凡搴熷純锛岃浣跨敤鍏宠仈User瀹炰綋鐨刾hone瀛楁")
+}
+
+type PlayerApplicationPageResponse {
+    content: [ActivityPlayerApplicationResponse]
+    totalElements: Int
+    page: Int
+    size: Int
+}
+
+type ProjectReviewApplicationPageResponse {
+    content: [ActivityPlayerApplicationResponse]
+    totalElements: Int
+    page: Int
+    size: Int
+}
+
+# 璇勫璇勫垎鐘舵�佸搷搴�
+type JudgeRatingStatusResponse {
+    judgeId: ID!
+    judgeName: String!
+    hasRated: Boolean!
+    ratingTime: String
+    totalScore: Float
+}
+
+# 褰撳墠璇勫淇℃伅鍝嶅簲
+type CurrentJudgeInfoResponse {
+    judgeId: ID!
+    judgeName: String!
+    title: String
+    company: String
+}
+
+# 褰撳墠璇勫璇勫垎鍝嶅簲
+type CurrentJudgeRatingResponse {
+    id: ID!
+    totalScore: Float
+    status: Int
+    remark: String
+    ratedAt: String
+    items: [CurrentJudgeRatingItemResponse!]!
+}
+
+# 璇勫垎椤瑰搷搴�
+type CurrentJudgeRatingItemResponse {
+    ratingItemId: ID!
+    ratingItemName: String!
+    score: Float
+    weightedScore: Float
+    maxScore: Float
+}
+
+type ProjectStageTimelineResponse {
+    activityId: ID!
+    activityName: String
+    stages: [ProjectStageTimelineItemResponse!]!
+}
+
+type ProjectStageTimelineItemResponse {
+    stageId: ID!
+    stageName: String!
+    matchTime: String
+    sortOrder: Int
+    participated: Boolean!
+    activityPlayerId: ID
+    averageScore: Float
+    ratingCount: Int!
+    hasRating: Boolean!
+    latestRatingTime: String
+}
+
+type StageJudgeRatingDetailResponse {
+    activityPlayerId: ID!
+    stageId: ID
+    stageName: String
+    matchTime: String
+    ratingCount: Int!
+    averageScore: Float
+    judgeRatings: [StageJudgeRatingItemResponse!]!
+}
+
+type StageJudgeRatingItemResponse {
+    judgeId: ID!
+    judgeName: String!
+    totalScore: Float
+    feedback: String
+    ratingTime: String
+}
+
+type ActivityPlayerApplicationResponse {
+    id: ID
+    playerName: String
+    activityName: String
+    projectName: String
+    phone: String
+    applyTime: String
+    state: Int
+    ratingCount: Int
+    averageScore: Float
+}
+
+type ActivityPlayerDetailResponse {
+    id: ID
+    playerInfo: PlayerInfoResponse
+    regionInfo: RegionInfoResponse
+    activityName: String
+    projectName: String
+    description: String
+    feedback: String
+    state: Int
+    stageId: ID
+    submissionFiles: [SubmissionMediaResponse]
+    ratingForm: RatingFormResponse
+}
+
+type PlayerInfoResponse {
+    id: ID
+    name: String
+    phone: String @deprecated(reason: "姝ゅ瓧娈靛凡搴熷純锛岃浣跨敤userInfo.phone瀛楁")
+    gender: Int
+    birthday: String
+    education: String
+    introduction: String
+    description: String
+    avatarUrl: String
+    avatar: MediaResponse
+    userInfo: PlayerUserInfoResponse
+}
+
+type PlayerUserInfoResponse {
+    userId: ID
+    name: String
+    phone: String
+    avatarUrl: String
+    avatar: MediaResponse
+}
+
+type RegionInfoResponse {
+    id: ID
+    name: String
+    fullPath: String
+}
+
+type SubmissionMediaResponse {
+    id: ID
+    name: String
+    path: String
+    url: String
+    fullUrl: String
+    fullThumbUrl: String
+    fileExt: String
+    fileSize: Int
+    mediaType: Int
+    thumbUrl: String
+}
+
+type RatingFormResponse {
+    schemeId: ID
+    schemeName: String
+    items: [RatingItemResponse]
+    totalMaxScore: Int
+}
+
+# 閫夋墜鎶ュ悕鐘舵�佸搷搴旂被鍨�
+type PlayerRegistrationStateResponse {
+    activityId: ID!
+    playerId: ID
+    registrationState: String
+    canRegister: Boolean
+    registrationTime: String
+    projectName: String
+}
+
+# 閫夋墜鎶ュ悕鍝嶅簲绫诲瀷锛堢敤浜巔layerRegistration鍜実etPlayerRegistrationState鏌ヨ锛�
+type PlayerRegistrationResponse {
+    id: ID
+    status: Int
+    registrationTime: String
+    reviewStatus: Int
+    reviewComment: String
+}
+
+# 濯掍綋鏂囦欢杈撳叆绫诲瀷
+input MediaFileInput {
+    name: String
+    path: String
+    fileExt: String
+    fileSize: Int
+    mediaType: Int
+}
+
+# 閫夋墜鎶ュ悕淇℃伅杈撳叆绫诲瀷
+input PlayerRegistrationInput {
+    name: String!
+    phone: String!
+    birthDate: String
+    gender: Int
+    education: String
+    introduction: String
+    description: String
+    avatarMediaId: String
+}
+
+# 娲诲姩鎶ュ悕杈撳叆绫诲瀷
+input ActivityRegistrationInput {
+    activityId: ID!
+    playerInfo: PlayerRegistrationInput!
+    regionId: ID
+    projectName: String!
+    description: String
+    mediaFiles: [MediaFileInput]
+    attachmentMediaIds: [String]
+}
+
+# 娲诲姩鎶ュ悕鍝嶅簲绫诲瀷
+type ActivityRegistrationResponse {
+    success: Boolean!
+    message: String
+    registrationId: ID
+    playerId: ID
+    userId: ID
+    activityPlayerId: ID
+}
+
+# 璇勫璇勫垎杈撳叆绫诲瀷
+input ActivityPlayerRatingInput {
+    activityPlayerId: ID!
+    stageId: ID
+    ratings: [ActivityPlayerRatingItemInput!]!
+    comment: String
+}
+
+# 璇勫垎椤硅緭鍏ョ被鍨�
+input ActivityPlayerRatingItemInput {
+    itemId: ID!
+    score: Float!
+}
+
+# 姣旇禌鏅嬬骇鍒楄〃鍝嶅簲绫诲瀷
+type PromotionCompetitionResponse {
+    id: ID!
+    competitionId: ID!
+    competitionName: String!
+    stageName: String!
+    maxParticipants: Int
+    currentCount: Int!
+    status: Int
+    startTime: String
+    endTime: String
+    sortOrder: Int
+    state: Int
+}
+
+# 鍙檵绾у弬璧涜�呭垪琛ㄥ搷搴旂被鍨�
+type PromotableParticipantsResponse {
+    participants: [PromotableParticipantResponse!]!
+    selectableCount: Int
+    totalCount: Int
+    previousStageName: String
+    currentStageName: String
+}
+
+# 鍙檵绾у弬璧涜�呭搷搴旂被鍨�
+type PromotableParticipantResponse {
+    id: ID!
+    playerName: String
+    projectName: String
+    phone: String
+    averageScore: Float
+    ratingCount: Int
+    applyTime: String
+    state: Int
+    playerId: ID
+}
+
+# 鏅嬬骇鎿嶄綔杈撳叆绫诲瀷
+input PromotionInput {
+    competitionId: ID!
+    participantIds: [ID!]!
+    targetStageId: ID!
+}
+
+# 鏅嬬骇鎿嶄綔缁撴灉绫诲瀷
+type PromotionResult {
+    success: Boolean!
+    message: String
+    promotedCount: Int
+}
diff --git a/backend/bin/src/main/resources/graphql/rating.graphqls b/backend/bin/src/main/resources/graphql/rating.graphqls
new file mode 100644
index 0000000..ff44496
--- /dev/null
+++ b/backend/bin/src/main/resources/graphql/rating.graphqls
@@ -0,0 +1,87 @@
+# 璇勫垎妯℃澘GraphQL Schema
+
+# 鎵╁睍鏌ヨ绫诲瀷
+extend type Query {
+    # 鍒嗛〉鏌ヨ璇勫垎妯℃澘鍒楄〃
+    ratingSchemes(page: Int, size: Int, name: String): RatingSchemePageResponse!
+    
+    # 鏍规嵁ID鑾峰彇璇勫垎妯℃澘璇︽儏
+    ratingScheme(id: ID!): RatingSchemeResponse
+    
+    # 鑾峰彇鎵�鏈夎瘎鍒嗘ā鏉匡紙鐢ㄤ簬涓嬫媺閫夋嫨锛�
+    allRatingSchemes: [RatingSchemeResponse!]!
+}
+
+# 鎵╁睍鍙樻洿绫诲瀷
+extend type Mutation {
+    # 淇濆瓨璇勫垎妯℃澘
+    saveRatingScheme(input: RatingSchemeInput!): RatingSchemeResponse!
+    
+    # 鍒犻櫎璇勫垎妯℃澘
+    deleteRatingScheme(id: ID!): Boolean!
+}
+
+# 璇勫垎妯℃澘鍝嶅簲绫诲瀷
+type RatingScheme {
+    id: ID!
+    name: String!
+    description: String
+    totalScore: Int!
+    state: Int!
+    stateName: String!
+    items: [RatingItemResponse!]
+    createTime: String
+    updateTime: String
+}
+
+# 璇勫垎妯℃澘鍝嶅簲绫诲瀷锛堝埆鍚嶏紝淇濇寔鍏煎鎬э級
+type RatingSchemeResponse {
+    id: ID!
+    name: String!
+    description: String
+    totalScore: Int!
+    state: Int!
+    stateName: String!
+    items: [RatingItemResponse!]
+    createTime: String
+    updateTime: String
+}
+
+# 璇勫垎鏉$洰鍝嶅簲绫诲瀷
+type RatingItemResponse {
+    id: ID!
+    name: String!
+    description: String
+    maxScore: Int!
+    weight: Float
+    orderNo: Int!
+    sortOrder: Int
+}
+
+# 璇勫垎妯℃澘鍒嗛〉鍝嶅簲绫诲瀷
+type RatingSchemePageResponse {
+    content: [RatingSchemeResponse!]!
+    totalElements: ID!
+    totalPages: Int!
+    number: Int!
+    page: Int!
+    size: Int!
+    first: Boolean!
+    last: Boolean!
+}
+
+# 璇勫垎妯℃澘杈撳叆绫诲瀷
+input RatingSchemeInput {
+    id: ID
+    name: String!
+    description: String
+    items: [RatingItemInput!]
+}
+
+# 璇勫垎鏉$洰杈撳叆绫诲瀷
+input RatingItemInput {
+    id: ID
+    name: String!
+    maxScore: Int!
+    orderNo: Int
+}
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/graphql/region.graphqls b/backend/bin/src/main/resources/graphql/region.graphqls
new file mode 100644
index 0000000..5eda079
--- /dev/null
+++ b/backend/bin/src/main/resources/graphql/region.graphqls
@@ -0,0 +1,73 @@
+# 鍖哄煙绠$悊 GraphQL Schema锛堜慨姝d笉鏀寔鐨� Long 鏍囬噺涓烘爣鍑嗙被鍨嬶級
+
+type Region {
+    id: ID!
+    pid: ID
+    name: String!
+    code: String
+    level: Int
+    leafFlag: Boolean
+    fullPath: String
+    state: Int!
+    createTime: String
+    createUserId: ID
+    updateTime: String
+    updateUserId: ID
+    version: Int
+}
+
+type RegionPageResult {
+    content: [Region!]!
+    totalElements: Int!
+    totalPages: Int!
+    currentPage: Int!
+    pageSize: Int!
+}
+
+input RegionInput {
+    id: ID
+    name: String!
+    pid: ID
+    code: String
+    level: Int
+    leafFlag: Boolean
+    fullPath: String
+    state: Int!
+}
+
+extend type Query {
+    # 鍒嗛〉鏌ヨ鍖哄煙
+    regions(name: String, state: Int, page: Int!, size: Int!): RegionPageResult!
+    
+    # 鏌ヨ鎵�鏈夊尯鍩�
+    allRegions: [Region!]!
+    
+    # 鏍规嵁ID鏌ヨ鍖哄煙
+    region(id: ID!): Region
+    
+    # 鑾峰彇鐪佺骇鍖哄煙鍒楄〃
+    provinces: [Region!]!
+    
+    # 鑾峰彇鎸囧畾鐪佷唤涓嬬殑鍩庡競鍒楄〃
+    cities(provinceId: ID!): [Region!]!
+    
+    # 鑾峰彇鎸囧畾鍩庡競涓嬬殑鍖哄幙鍒楄〃
+    districts(cityId: ID!): [Region!]!
+    
+    # 鑾峰彇瀛愬尯鍩熷垪琛�
+    regionChildren(parentId: ID!): [Region!]!
+    
+    # 鑾峰彇鍙跺瓙鍖哄煙鍒楄〃
+    leafRegions: [Region!]!
+}
+
+extend type Mutation {
+    # 淇濆瓨鍖哄煙锛堟柊澧炴垨鏇存柊锛�
+    saveRegion(input: RegionInput!): Region!
+    
+    # 鍒犻櫎鍖哄煙
+    deleteRegion(id: ID!): Boolean!
+    
+    # 鍒囨崲鍖哄煙鐘舵��
+    toggleRegionState(id: ID!): Region!
+}
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/graphql/review.graphqls b/backend/bin/src/main/resources/graphql/review.graphqls
new file mode 100644
index 0000000..6c3e122
--- /dev/null
+++ b/backend/bin/src/main/resources/graphql/review.graphqls
@@ -0,0 +1,45 @@
+# 璇勫绠$悊鐩稿叧鐨凣raphQL Schema瀹氫箟
+
+# 鎵╁睍鏌ヨ绫诲瀷
+extend type Query {
+    # 鑾峰彇鎴戞湭璇勫鐨勯」鐩垪琛�
+    unReviewedProjects(page: Int!, pageSize: Int!, searchKeyword: String): ReviewProjectPageResponse!
+    
+    # 鑾峰彇鎴戝凡璇勫鐨勯」鐩垪琛�
+    reviewedProjects(page: Int!, pageSize: Int!, searchKeyword: String): ReviewProjectPageResponse!
+    
+    # 鑾峰彇瀛﹀憳鏈瘎瀹$殑椤圭洰鍒楄〃
+    studentUnReviewedProjects(page: Int!, pageSize: Int!, searchKeyword: String): ReviewProjectPageResponse!
+    
+    # 鑾峰彇璇勫缁熻鏁版嵁
+    reviewStatistics: ReviewStatisticsResponse!
+}
+
+# 璇勫椤圭洰鍒嗛〉鍝嶅簲绫诲瀷
+type ReviewProjectPageResponse {
+    items: [ReviewProjectResponse!]!
+    total: Int!
+    hasMore: Boolean!
+}
+
+# 璇勫椤圭洰鍝嶅簲绫诲瀷
+type ReviewProjectResponse {
+    id: ID!
+    activityId: ID!
+    stageId: ID!
+    projectName: String!
+    activityName: String!
+    stageName: String!
+    studentName: String!
+    submitTime: String
+    reviewTime: String
+    score: Float
+    status: String!
+}
+
+# 璇勫缁熻鍝嶅簲绫诲瀷
+type ReviewStatisticsResponse {
+    unReviewedCount: Int!
+    reviewedCount: Int!
+    studentUnReviewedCount: Int!
+}
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/graphql/role.graphqls b/backend/bin/src/main/resources/graphql/role.graphqls
new file mode 100644
index 0000000..bfe4d31
--- /dev/null
+++ b/backend/bin/src/main/resources/graphql/role.graphqls
@@ -0,0 +1,51 @@
+# 瑙掕壊鐩稿叧鐨凣raphQL Schema瀹氫箟
+
+# 瑙掕壊鍝嶅簲绫诲瀷
+type RoleResponse {
+    id: Long!
+    code: String!
+    name: String!
+    description: String
+    state: Int!
+    createTime: String
+    updateTime: String
+}
+
+# 瑙掕壊杈撳叆绫诲瀷
+input RoleInput {
+    id: Long
+    code: String!
+    name: String!
+    description: String
+    state: Int
+}
+
+# 鎵╁睍鏌ヨ绫诲瀷
+extend type Query {
+    # 鑾峰彇鎵�鏈夎鑹插垪琛�
+    roles: [RoleResponse!]!
+    
+    # 鑾峰彇鎵�鏈夊惎鐢ㄧ姸鎬佺殑瑙掕壊
+    activeRoles: [RoleResponse!]!
+    
+    # 鏍规嵁ID鑾峰彇瑙掕壊璇︽儏
+    role(id: Long!): RoleResponse
+    
+    # 鏍规嵁瑙掕壊浠g爜鑾峰彇瑙掕壊
+    roleByCode(code: String!): RoleResponse
+    
+    # 鏍规嵁鐘舵�佽幏鍙栬鑹�
+    rolesByState(state: Int!): [RoleResponse!]!
+    
+    # 鏍规嵁鍚嶇О妯$硦鏌ヨ瑙掕壊
+    rolesByName(name: String!): [RoleResponse!]!
+}
+
+# 鎵╁睍鍙樻洿绫诲瀷
+extend type Mutation {
+    # 淇濆瓨瑙掕壊锛堟柊澧炴垨鏇存柊锛�
+    saveRole(input: RoleInput!): RoleResponse!
+    
+    # 鍒犻櫎瑙掕壊
+    deleteRole(id: Long!): Boolean!
+}
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/graphql/schema.graphqls b/backend/bin/src/main/resources/graphql/schema.graphqls
new file mode 100644
index 0000000..96f318a
--- /dev/null
+++ b/backend/bin/src/main/resources/graphql/schema.graphqls
@@ -0,0 +1,30 @@
+# GraphQL Schema 瀹氫箟
+
+# 鑷畾涔夋爣閲忕被鍨�
+scalar Long
+
+# 鏌ヨ鏍圭被鍨�
+type Query {
+    # 娴嬭瘯鏌ヨ
+    hello: String
+    
+    # 搴旂敤閰嶇疆鏌ヨ
+    appConfig: AppConfig
+}
+
+# 搴旂敤閰嶇疆绫诲瀷
+type AppConfig {
+    mediaBaseUrl: String!
+}
+
+# 鍙樻洿鏍圭被鍨�  
+type Mutation {
+    # 娴嬭瘯鍙樻洿
+    echo(message: String!): String
+}
+
+# 璁㈤槄鏍圭被鍨�
+type Subscription {
+    # 娴嬭瘯璁㈤槄
+    messageAdded: String
+}
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/graphql/tag.graphqls b/backend/bin/src/main/resources/graphql/tag.graphqls
new file mode 100644
index 0000000..014c0b1
--- /dev/null
+++ b/backend/bin/src/main/resources/graphql/tag.graphqls
@@ -0,0 +1,34 @@
+# 鏍囩鐩稿叧鐨凣raphQL Schema瀹氫箟
+
+# 鏍囩杈撳叆绫诲瀷
+input TagInput {
+    id: Long
+    name: String!
+    category: String
+    description: String
+    state: Int
+}
+
+# 鎵╁睍鏌ヨ绫诲瀷
+extend type Query {
+    # 鑾峰彇鎵�鏈夋爣绛�
+    tags: [TagResponse!]!
+    
+    # 鏍规嵁鍒嗙被鑾峰彇鏍囩
+    tagsByCategory(category: String!): [TagResponse!]!
+    
+    # 鏍规嵁ID鑾峰彇鏍囩璇︽儏
+    tag(id: Long!): TagResponse
+    
+    # 鏍规嵁鍚嶇О妯$硦鏌ヨ鏍囩
+    tagsByName(name: String!): [TagResponse!]!
+}
+
+# 鎵╁睍鍙樻洿绫诲瀷
+extend type Mutation {
+    # 淇濆瓨鏍囩锛堟柊澧炴垨鏇存柊锛�
+    saveTag(input: TagInput!): TagResponse!
+    
+    # 鍒犻櫎鏍囩
+    deleteTag(id: Long!): Boolean!
+}
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/graphql/user.graphqls b/backend/bin/src/main/resources/graphql/user.graphqls
new file mode 100644
index 0000000..36d96e3
--- /dev/null
+++ b/backend/bin/src/main/resources/graphql/user.graphqls
@@ -0,0 +1,110 @@
+# 鐢ㄦ埛鐩稿叧鐨凣raphQL Schema瀹氫箟
+
+# 鐢ㄦ埛妗f鍝嶅簲绫诲瀷
+type UserProfile {
+    id: ID!
+    name: String!
+    avatar: String
+    phone: String
+    email: String
+    school: String
+    major: String
+    grade: String
+    gender: String
+    birthday: String
+    roles: [String!]!
+    userType: String
+    createdAt: String
+    # 瑙掕壊鐩稿叧淇℃伅
+    employee: EmployeeInfo
+    judge: JudgeInfo
+    player: PlayerInfo
+}
+
+# 鐢ㄦ埛缁熻鏁版嵁绫诲瀷
+type UserStats {
+    totalRegistrations: Int!
+    ongoingActivities: Int!
+    completedActivities: Int!
+    awards: Int!
+}
+
+# 鐢ㄦ埛鎶ュ悕璁板綍绫诲瀷
+type UserRegistration {
+    id: ID!
+    activity: ActivityInfo!
+    status: String!
+    registrationTime: String!
+}
+
+# 娲诲姩淇℃伅绫诲瀷
+type ActivityInfo {
+    id: ID!
+    title: String!
+    coverImage: MediaInfo
+    startTime: String!
+    status: String!
+}
+
+# 濯掍綋淇℃伅绫诲瀷
+type MediaInfo {
+    id: ID!
+    name: String!
+    path: String!
+    fullUrl: String!
+    fullThumbUrl: String!
+    mediaType: String!
+}
+
+# 鐢ㄦ埛椤圭洰绫诲瀷
+type UserProject {
+    id: ID!
+    projectName: String!
+    activityName: String!
+    status: String!
+    statusText: String!
+    createTime: String!
+    submissionFiles: [SubmissionMediaResponse]
+}
+
+# 鐢ㄦ埛杈撳叆绫诲瀷
+input UserInput {
+    name: String!
+    avatar: String
+    phone: String!
+    gender: String!
+    birthday: String
+}
+
+# 鐢ㄦ埛淇℃伅鍝嶅簲绫诲瀷
+type UserProfileInfo {
+    id: ID!
+    name: String!
+    avatar: String
+    phone: String!
+    gender: String!
+    birthday: String
+    wxOpenId: String
+    unionId: String
+}
+
+# 鎵╁睍鏌ヨ绫诲瀷
+extend type Query {
+    # 鑾峰彇褰撳墠鐢ㄦ埛妗f
+    userProfile: UserProfile
+    
+    # 鑾峰彇鐢ㄦ埛缁熻鏁版嵁
+    userStats: UserStats
+    
+    # 鑾峰彇鎴戠殑鎶ュ悕璁板綍
+    myRegistrations(limit: Int): [UserRegistration!]!
+    
+    # 鑾峰彇鎴戠殑椤圭洰鍒楄〃
+    myProjects: [UserProject!]!
+}
+
+# 鎵╁睍鍙樻洿绫诲瀷
+extend type Mutation {
+    # 淇濆瓨鐢ㄦ埛淇℃伅
+    saveUserInfo(input: UserInput!): UserProfileInfo!
+}
\ No newline at end of file
diff --git a/backend/bin/src/main/resources/logback-spring.xml b/backend/bin/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..d35e2d2
--- /dev/null
+++ b/backend/bin/src/main/resources/logback-spring.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <!-- 鎺у埗鍙拌緭鍑� -->
+    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+    </appender>
+
+    <!-- 鏂囦欢杈撳嚭 -->
+    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>./logs/ryc-backend.log</file>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>./logs/ryc-backend.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <maxFileSize>100MB</maxFileSize>
+            <maxHistory>30</maxHistory>
+            <totalSizeCap>1GB</totalSizeCap>
+        </rollingPolicy>
+    </appender>
+
+    <!-- 绠�鍗曟枃浠惰緭鍑猴紙鐢ㄤ簬璋冭瘯锛� -->
+    <appender name="DEBUG_FILE" class="ch.qos.logback.core.FileAppender">
+        <file>./logs/debug.log</file>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+        <append>true</append>
+    </appender>
+
+    <!-- 搴旂敤绋嬪簭鏃ュ織绾у埆 -->
+    <logger name="com.rongyichuang" level="DEBUG" additivity="false">
+        <appender-ref ref="CONSOLE"/>
+        <appender-ref ref="FILE"/>
+        <appender-ref ref="DEBUG_FILE"/>
+    </logger>
+
+    <!-- SQL鏃ュ織 -->
+    <logger name="org.hibernate.SQL" level="DEBUG" additivity="false">
+        <appender-ref ref="CONSOLE"/>
+        <appender-ref ref="FILE"/>
+    </logger>
+
+    <!-- SQL鍙傛暟缁戝畾鏃ュ織 -->
+    <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" additivity="false">
+        <appender-ref ref="CONSOLE"/>
+        <appender-ref ref="FILE"/>
+    </logger>
+
+    <!-- Spring Security鏃ュ織 -->
+    <logger name="org.springframework.security" level="DEBUG" additivity="false">
+        <appender-ref ref="CONSOLE"/>
+        <appender-ref ref="FILE"/>
+    </logger>
+
+    <!-- 鏍规棩蹇楃骇鍒� -->
+    <root level="INFO">
+        <appender-ref ref="CONSOLE"/>
+        <appender-ref ref="FILE"/>
+    </root>
+</configuration>
\ No newline at end of file
diff --git a/backend/src/main/java/com/rongyichuang/common/api/HealthController.java b/backend/src/main/java/com/rongyichuang/common/api/HealthController.java
new file mode 100644
index 0000000..8b8fbba
--- /dev/null
+++ b/backend/src/main/java/com/rongyichuang/common/api/HealthController.java
@@ -0,0 +1,22 @@
+package com.rongyichuang.common.api;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/health")
+public class HealthController {
+
+    @GetMapping
+    public Map<String, Object> health() {
+        Map<String, Object> response = new HashMap<>();
+        response.put("status", "UP");
+        response.put("timestamp", System.currentTimeMillis());
+        response.put("service", "ryc-backend");
+        return response;
+    }
+}
\ No newline at end of file
diff --git a/backend/src/main/java/com/rongyichuang/player/dto/response/PromotionCompetitionPageResponse.java b/backend/src/main/java/com/rongyichuang/player/dto/response/PromotionCompetitionPageResponse.java
new file mode 100644
index 0000000..fde9b22
--- /dev/null
+++ b/backend/src/main/java/com/rongyichuang/player/dto/response/PromotionCompetitionPageResponse.java
@@ -0,0 +1,68 @@
+package com.rongyichuang.player.dto.response;
+
+import com.rongyichuang.player.dto.PromotionCompetitionResponse;
+import java.util.List;
+
+/**
+ * 姣旇禌鏅嬬骇鍒嗛〉鍝嶅簲绫�
+ */
+public class PromotionCompetitionPageResponse {
+    
+    private List<PromotionCompetitionResponse> content;
+    private Long totalElements;
+    private Integer page;
+    private Integer size;
+    private Integer totalPages;
+    
+    public PromotionCompetitionPageResponse() {}
+    
+    public PromotionCompetitionPageResponse(List<PromotionCompetitionResponse> content, 
+                                          Long totalElements, Integer page, Integer size) {
+        this.content = content;
+        this.totalElements = totalElements;
+        this.page = page;
+        this.size = size;
+        this.totalPages = size > 0 ? (int) Math.ceil((double) totalElements / size) : 0;
+    }
+    
+    // Getters and Setters
+    public List<PromotionCompetitionResponse> getContent() {
+        return content;
+    }
+    
+    public void setContent(List<PromotionCompetitionResponse> content) {
+        this.content = content;
+    }
+    
+    public Long getTotalElements() {
+        return totalElements;
+    }
+    
+    public void setTotalElements(Long totalElements) {
+        this.totalElements = totalElements;
+    }
+    
+    public Integer getPage() {
+        return page;
+    }
+    
+    public void setPage(Integer page) {
+        this.page = page;
+    }
+    
+    public Integer getSize() {
+        return size;
+    }
+    
+    public void setSize(Integer size) {
+        this.size = size;
+    }
+    
+    public Integer getTotalPages() {
+        return totalPages;
+    }
+    
+    public void setTotalPages(Integer totalPages) {
+        this.totalPages = totalPages;
+    }
+}
\ No newline at end of file
diff --git a/test-image.svg b/test-image.svg
new file mode 100644
index 0000000..4746b23
--- /dev/null
+++ b/test-image.svg
@@ -0,0 +1,4 @@
+<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
+  <rect width="100" height="100" fill="#4CAF50"/>
+  <text x="50" y="55" text-anchor="middle" fill="white" font-family="Arial" font-size="14">娴嬭瘯鍥剧墖</text>
+</svg>
\ No newline at end of file
diff --git a/test_miniprogram_activities_fix.js b/test_miniprogram_activities_fix.js
new file mode 100644
index 0000000..c9772ac
--- /dev/null
+++ b/test_miniprogram_activities_fix.js
@@ -0,0 +1,142 @@
+const mysql = require('mysql2/promise');
+
+// 鏁版嵁搴撻厤缃�
+const dbConfig = {
+  host: '139.155.104.10',
+  port: 3306,
+  user: 'ryc',
+  password: 'KiYap3E8X8RLcM6T',
+  database: 'ryc'
+};
+
+async function testActivityStatesAndMapping() {
+  let connection;
+  
+  try {
+    console.log('=== 灏忕▼搴忔椿鍔ㄧ姸鎬佹槧灏勪慨澶嶆祴璇� ===\n');
+    
+    // 杩炴帴鏁版嵁搴�
+    connection = await mysql.createConnection(dbConfig);
+    console.log('鉁� 鏁版嵁搴撹繛鎺ユ垚鍔�');
+    
+    // 1. 妫�鏌ユ暟鎹簱涓殑娲诲姩鐘舵�佸垎甯�
+    console.log('\n馃搳 鏁版嵁搴撴椿鍔ㄧ姸鎬佸垎甯�:');
+    const [stateStats] = await connection.execute(`
+      SELECT 
+        state,
+        COUNT(*) as count,
+        CASE 
+          WHEN state = 0 THEN '鏈彂甯�(鍒犻櫎)'
+          WHEN state = 1 THEN '鍙戝竷'
+          WHEN state = 2 THEN '鍏抽棴'
+          ELSE '鏈煡鐘舵��'
+        END as state_name
+      FROM t_activity 
+      WHERE pid = 0 
+      GROUP BY state 
+      ORDER BY state
+    `);
+    
+    stateStats.forEach(row => {
+      console.log(`  State ${row.state} (${row.state_name}): ${row.count} 涓椿鍔╜);
+    });
+    
+    // 2. 楠岃瘉淇鍚庣殑鐘舵�佹槧灏勯�昏緫
+    console.log('\n馃敡 淇鍚庣殑鐘舵�佹槧灏勯�昏緫:');
+    console.log('  upcoming (鍗冲皢寮�濮�) -> state=1 (鍙戝竷)');
+    console.log('  ongoing (杩涜涓�) -> state=1 (鍙戝竷)');
+    console.log('  ended (宸茬粨鏉�) -> state=2 (鍏抽棴)');
+    console.log('  all (鍏ㄩ儴) -> state=null (鍚庣杩囨护 state!=0)');
+    
+    // 3. 妯℃嫙涓嶅悓绛涢�夋潯浠剁殑鏌ヨ缁撴灉
+    console.log('\n馃И 妯℃嫙灏忕▼搴忕瓫閫夋煡璇�:');
+    
+    // 妯℃嫙 filterStatus = 'all' (state = null)
+    const [allActivities] = await connection.execute(`
+      SELECT id, name, state, 
+        CASE 
+          WHEN state = 0 THEN '鏈彂甯�(鍒犻櫎)'
+          WHEN state = 1 THEN '鍙戝竷'
+          WHEN state = 2 THEN '鍏抽棴'
+          ELSE '鏈煡鐘舵��'
+        END as state_name
+      FROM t_activity 
+      WHERE pid = 0 AND state != 0 
+      ORDER BY create_time DESC 
+      LIMIT 5
+    `);
+    console.log(`\n  绛涢�夋潯浠�: 鍏ㄩ儴 (all) - 搴旇鎺掗櫎宸插垹闄ゆ椿鍔�:`);
+    console.log(`  鏌ヨ缁撴灉: ${allActivities.length} 涓椿鍔╜);
+    allActivities.forEach(activity => {
+      console.log(`    - ${activity.name} (state=${activity.state}, ${activity.state_name})`);
+    });
+    
+    // 妯℃嫙 filterStatus = 'upcoming' 鎴� 'ongoing' (state = 1)
+    const [publishedActivities] = await connection.execute(`
+      SELECT id, name, state,
+        CASE 
+          WHEN state = 0 THEN '鏈彂甯�(鍒犻櫎)'
+          WHEN state = 1 THEN '鍙戝竷'
+          WHEN state = 2 THEN '鍏抽棴'
+          ELSE '鏈煡鐘舵��'
+        END as state_name
+      FROM t_activity 
+      WHERE pid = 0 AND state = 1 
+      ORDER BY create_time DESC 
+      LIMIT 5
+    `);
+    console.log(`\n  绛涢�夋潯浠�: 鍗冲皢寮�濮�/杩涜涓� (upcoming/ongoing) - state=1:`);
+    console.log(`  鏌ヨ缁撴灉: ${publishedActivities.length} 涓椿鍔╜);
+    publishedActivities.forEach(activity => {
+      console.log(`    - ${activity.name} (state=${activity.state}, ${activity.state_name})`);
+    });
+    
+    // 妯℃嫙 filterStatus = 'ended' (state = 2)
+    const [closedActivities] = await connection.execute(`
+      SELECT id, name, state,
+        CASE 
+          WHEN state = 0 THEN '鏈彂甯�(鍒犻櫎)'
+          WHEN state = 1 THEN '鍙戝竷'
+          WHEN state = 2 THEN '鍏抽棴'
+          ELSE '鏈煡鐘舵��'
+        END as state_name
+      FROM t_activity 
+      WHERE pid = 0 AND state = 2 
+      ORDER BY create_time DESC 
+      LIMIT 5
+    `);
+    console.log(`\n  绛涢�夋潯浠�: 宸茬粨鏉� (ended) - state=2:`);
+    console.log(`  鏌ヨ缁撴灉: ${closedActivities.length} 涓椿鍔╜);
+    closedActivities.forEach(activity => {
+      console.log(`    - ${activity.name} (state=${activity.state}, ${activity.state_name})`);
+    });
+    
+    // 4. 楠岃瘉鏄惁杩樻湁state=0鐨勬椿鍔ㄤ細琚樉绀�
+    const [deletedActivities] = await connection.execute(`
+      SELECT id, name, state 
+      FROM t_activity 
+      WHERE pid = 0 AND state = 0
+    `);
+    
+    console.log(`\n鉁� 楠岃瘉缁撴灉:`);
+    console.log(`  - 鏁版嵁搴撲腑鏈� ${deletedActivities.length} 涓凡鍒犻櫎娲诲姩 (state=0)`);
+    console.log(`  - 淇鍚庣殑鏄犲皠纭繚杩欎簺娲诲姩涓嶄細鍦ㄤ换浣曠瓫閫夋潯浠朵笅鏄剧ず`);
+    console.log(`  - 'all' 绛涢�変細鎺掗櫎 state=0 鐨勬椿鍔╜);
+    console.log(`  - 鍏朵粬绛涢�夋潯浠跺彧浼氭煡璇� state=1 鎴� state=2 鐨勬椿鍔╜);
+    
+    if (deletedActivities.length === 0) {
+      console.log(`  - 褰撳墠鏁版嵁搴撲腑娌℃湁宸插垹闄ょ殑娲诲姩锛屼慨澶嶄富瑕佽В鍐充簡鐘舵�佹槧灏勯棶棰榒);
+    }
+    
+  } catch (error) {
+    console.error('鉂� 娴嬭瘯澶辫触:', error.message);
+  } finally {
+    if (connection) {
+      await connection.end();
+      console.log('\n馃攲 鏁版嵁搴撹繛鎺ュ凡鍏抽棴');
+    }
+  }
+}
+
+// 杩愯娴嬭瘯
+testActivityStatesAndMapping();
\ No newline at end of file
diff --git a/tmp/competition-creation-success.png b/tmp/competition-creation-success.png
new file mode 100644
index 0000000..2843b1e
--- /dev/null
+++ b/tmp/competition-creation-success.png
Binary files differ
diff --git a/tmp/test-image.svg b/tmp/test-image.svg
new file mode 100644
index 0000000..24775d9
--- /dev/null
+++ b/tmp/test-image.svg
@@ -0,0 +1,5 @@
+<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
+  <rect width="200" height="200" fill="#4CAF50"/>
+  <circle cx="100" cy="100" r="50" fill="#FFF"/>
+  <text x="100" y="110" text-anchor="middle" fill="#4CAF50" font-family="Arial" font-size="16">娴嬭瘯鍥剧墖</text>
+</svg>
\ No newline at end of file
diff --git a/tmp/test-video.mp4 b/tmp/test-video.mp4
new file mode 100644
index 0000000..f05abf1
--- /dev/null
+++ b/tmp/test-video.mp4
@@ -0,0 +1 @@
+This is a test video file content for upload testing.
\ No newline at end of file
diff --git a/tmp/upload-test-result.png b/tmp/upload-test-result.png
new file mode 100644
index 0000000..15e64b9
--- /dev/null
+++ b/tmp/upload-test-result.png
Binary files differ
diff --git a/wx/pages/activity/detail.js b/wx/pages/activity/detail.js
index 9e18865..83989e1 100644
--- a/wx/pages/activity/detail.js
+++ b/wx/pages/activity/detail.js
@@ -136,4 +136,4 @@
     }
     return startDate || endDate;
   }
-});
\ No newline at end of file
+});
diff --git a/wx/pages/index/index.js b/wx/pages/index/index.js
index f9cba3f..ba5d944 100644
--- a/wx/pages/index/index.js
+++ b/wx/pages/index/index.js
@@ -147,7 +147,7 @@
               type: 'image',
               url: banner.coverImage.fullUrl,
               thumbUrl: banner.coverImage.fullThumbUrl
-            })
+            });
           }
           
           return {
diff --git a/wx/pages/index/index.wxml b/wx/pages/index/index.wxml
index dd5a8d3..caaf876 100644
--- a/wx/pages/index/index.wxml
+++ b/wx/pages/index/index.wxml
@@ -3,7 +3,7 @@
 <view class="container">
   <!-- 椤甸潰澶撮儴鍒嗕韩鍖哄煙 -->
   <view class="header-section">
-    <view class="page-title">钃塭鍒涙瘮璧涘钩鍙�</view>
+    <view class="page-title">鎴愭笣寰风湁璧勫垱涓氬ぇ璧�</view>
     <view class="share-section">
       <!-- <button class="share-btn" open-type="share">
         <text class="share-icon">馃摛</text>
@@ -101,9 +101,10 @@
           <view class="activity-title-lg">{{item.name}}</view>
           
           <view class="deadline">鎶ュ悕鎴锛歿{filters.formatDateYYYYMMDD(item.signupDeadline)}}</view>
-          <view class="registered">宸叉姤鍚嶏細{{item.playerCount}}浜�</view>
+          <!-- 闅愯棌鎶ュ悕浜烘暟鏄剧ず -->
+          <view class="registered" wx:if="{{false}}">宸叉姤鍚嶏細{{item.playerCount}}浜�</view>
           <view class="btn-row">
-            <button class="ghost-btn" catchtap="onActivityDetailTap" data-idx="{{index}}"  data-id="{{item.id}}" data-xid="{{item.name}}"  >鏌ョ湅璇︽儏</button>
+            <button class="ghost-btn" catchtap="onActivityDetailTap" data-idx="{{index}}"  data-id="{{item.id}}" data-xid="{{item.name}}"  >鎶ュ悕</button>
             <!-- <button class="share-activity-btn" catchtap="onShareActivity" data-idx="{{index}}" data-id="{{item.id}}" data-name="{{item.name}}">
               <text class="share-icon-small">馃摛</text>
             </button> -->
diff --git a/wx/pages/registration/registration.js b/wx/pages/registration/registration.js
index 66dd0d5..2180b15 100644
--- a/wx/pages/registration/registration.js
+++ b/wx/pages/registration/registration.js
@@ -1140,23 +1140,7 @@
       errors.phone = '璇疯緭鍏ユ纭殑鎵嬫満鍙�';
     }
 
-    if (formData.gender === null) {
-      errors.gender = '璇烽�夋嫨鎬у埆';
-    }
-
-    // 鍖哄煙楠岃瘉锛堝彲閫夛級
-    // 鏆傛椂涓嶅己鍒惰姹傚尯鍩熼�夋嫨
-    
-    // 澶村儚楠岃瘉锛堝彲閫夛級
-    // 鏆傛椂涓嶅己鍒惰姹傚ご鍍忎笂浼�
-
-    if (!formData.projectName.trim()) {
-      errors.projectName = '璇疯緭鍏ラ」鐩悕绉�';
-    }
-
-    if (!formData.description.trim()) {
-      errors.description = '璇疯緭鍏ラ」鐩弿杩�';
-    }
+    // 淇濇寔鍘熸湁閫昏緫锛氫笉寮哄埗闄勪欢蹇呭~锛屼笉鏍¢獙鎵�灞炲尯鍩熷繀濉�
 
     this.setData({ errors });
     return Object.keys(errors).length === 0;
diff --git a/wx/pages/registration/registration.wxml b/wx/pages/registration/registration.wxml
index d7ecf1f..dbc28e8 100644
--- a/wx/pages/registration/registration.wxml
+++ b/wx/pages/registration/registration.wxml
@@ -11,8 +11,8 @@
     <view class="card">
       <view class="card-title">涓汉淇℃伅</view>
 
-      <!-- 澶村儚 -->
-      <view class="form-item" bindtap="onChooseAvatar">
+      <!-- 澶村儚锛堟寜闇�姹傞殣钘忥級 -->
+      <view wx:if="{{false}}" class="form-item" bindtap="onChooseAvatar">
         <text class="label">鐓х墖</text>
         <view class="input-wrapper avatar-wrapper">
           <image 
@@ -62,9 +62,9 @@
         <text wx:if="{{errors.phone}}" class="error-text">{{errors.phone}}</text>
       </view>
 
-      <!-- 鎬у埆 -->
-      <view class="form-item {{errors.gender ? 'error' : ''}}">
-        <text class="label required">鎬у埆</text>
+      <!-- 鎬у埆锛堟寜闇�姹傞殣钘忥級 -->
+      <view wx:if="{{false}}" class="form-item {{errors.gender ? 'error' : ''}}">
+        <text class="label">鎬у埆</text>
         <view class="input-wrapper">
           <picker 
             class="picker" 
@@ -81,8 +81,8 @@
         <text wx:if="{{errors.gender}}" class="error-text">{{errors.gender}}</text>
       </view>
 
-      <!-- 鐢熸棩 -->
-      <view class="form-item {{errors.birthDate ? 'error' : ''}}">
+      <!-- 鐢熸棩锛堟寜闇�姹傞殣钘忥級 -->
+      <view wx:if="{{false}}" class="form-item {{errors.birthDate ? 'error' : ''}}">
         <text class="label">鐢熸棩</text>
         <view class="input-wrapper">
           <picker 
@@ -100,9 +100,9 @@
         <text wx:if="{{errors.birthDate}}" class="error-text">{{errors.birthDate}}</text>
       </view>
 
-      <!-- 鎵�鍦ㄥ尯鍩� -->
+      <!-- 鎵�灞炲尯鍩� -->
       <view class="form-item {{errors.regionId ? 'error' : ''}}">
-        <text class="label">鎵�鍦ㄥ尯鍩�</text>
+        <text class="label">鎵�灞炲尯鍩�</text>
         <view class="input-wrapper">
           <picker 
             class="picker" 
@@ -113,15 +113,15 @@
             bindchange="onRegionChange"
           >
             <view class="picker-text {{formData.regionId === null ? 'placeholder' : ''}}">
-              {{formData.regionId !== null && regionIndex >= 0 ? regions[regionIndex].name : '璇烽�夋嫨鎵�鍦ㄥ尯鍩�'}}
+              {{formData.regionId !== null && regionIndex >= 0 ? regions[regionIndex].name : '璇烽�夋嫨鎵�灞炲尯鍩�'}}
             </view>
           </picker>
         </view>
         <text wx:if="{{errors.regionId}}" class="error-text">{{errors.regionId}}</text>
       </view>
 
-      <!-- 鏁欒偛鑳屾櫙 -->
-      <view class="form-item {{errors.education ? 'error' : ''}}">
+      <!-- 鏁欒偛鑳屾櫙锛堟寜闇�姹傞殣钘忥級 -->
+      <view wx:if="{{false}}" class="form-item {{errors.education ? 'error' : ''}}">
         <text class="label">鏁欒偛鑳屾櫙</text>
         <view class="input-wrapper">
           <picker 
@@ -139,8 +139,8 @@
         <text wx:if="{{errors.education}}" class="error-text">{{errors.education}}</text>
       </view>
 
-      <!-- 绠�浠� -->
-      <view class="form-item vertical-layout {{errors.introduction ? 'error' : ''}}">
+      <!-- 绠�浠嬶紙鎸夐渶姹傞殣钘忥級 -->
+      <view wx:if="{{false}}" class="form-item vertical-layout {{errors.introduction ? 'error' : ''}}">
         <text class="label">绠�浠�</text>
         <view class="input-wrapper">
           <textarea 
@@ -157,12 +157,12 @@
       </view>
     </view>
 
-    <!-- 椤圭洰淇℃伅鍗$墖 -->
-    <view class="card">
+    <!-- 椤圭洰淇℃伅鍗$墖锛堟寜闇�姹傞殣钘忥級 -->
+    <view wx:if="{{false}}" class="card">
       <view class="card-title">椤圭洰淇℃伅</view>
       <!-- 椤圭洰鍚嶇О -->
       <view class="form-item {{errors.projectName ? 'error' : ''}}">
-        <text class="label required">椤圭洰鍚嶇О</text>
+        <text class="label">椤圭洰鍚嶇О</text>
         <view class="input-wrapper">
           <input 
             class="input" 
@@ -178,7 +178,7 @@
 
       <!-- 椤圭洰鎻忚堪 -->
       <view class="form-item vertical-layout {{errors.description ? 'error' : ''}}">
-        <text class="label required">椤圭洰鎻忚堪</text>
+        <text class="label">椤圭洰鎻忚堪</text>
         <view class="input-wrapper">
           <textarea 
             class="textarea" 
@@ -225,7 +225,7 @@
           <view class="upload-icon">馃搸</view>
           <text class="upload-text">娣诲姞闄勪欢</text>
           <view class="upload-hint">
-            鏀寔瑙嗛/鍥剧墖/PDF/Word绛夛紝鏈�澶歿{maxAttachments}}涓�
+            鏀寔瑙嗛/鍥剧墖/PDF/Word/PPT绛夛紝鏈�澶歿{maxAttachments}}涓�
           </view>
         </view>
       </view>

--
Gitblit v1.8.0