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