更新求种后端函数

Change-Id: I9e593e5eecfc6337120f75b3f6338f8279579dd1
diff --git a/src/main/java/api/ApiApplication.java b/src/main/java/api/ApiApplication.java
index 1f39e69..c28da07 100644
--- a/src/main/java/api/ApiApplication.java
+++ b/src/main/java/api/ApiApplication.java
@@ -16,18 +16,4 @@
         }
         SpringApplication.run(ApiApplication.class, args);
     }
-
-    // @Bean
-    // public WebMvcConfigurer corsConfigurer() {
-    //     return new WebMvcConfigurer() {
-    //         @Override
-    //         public void addCorsMappings(CorsRegistry registry) {
-    //             registry.addMapping("/**")
-    //                     .allowedOrigins("*")
-    //                     .allowedMethods("*")
-    //                     .allowedHeaders("*")
-    //                     .exposedHeaders(HttpHeaders.CONTENT_DISPOSITION);
-    //         }
-    //     };
-    // }
 }
\ No newline at end of file
diff --git a/src/main/java/api/ApiController.java b/src/main/java/api/ApiController.java
index c2562bc..2c37f8b 100644
--- a/src/main/java/api/ApiController.java
+++ b/src/main/java/api/ApiController.java
@@ -1,6 +1,11 @@
 package api;
 
 import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+import java.text.ParseException;
 
 import javax.annotation.PostConstruct;
 
@@ -15,19 +20,27 @@
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.PostMapping;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import database.Database1;
 import tracker.Tracker;
+import cheat.Cheat;
 
 import entity.Seed;
 import entity.User;
 import entity.Post;
+import entity.BegSeedDetail;
 import entity.PostReply;
+import entity.Profile;
 import entity.UserPT;
+import entity.config;
+import entity.Appeal;
+import entity.BegInfo;
+import entity.BegInfoDetail;
+import entity.UserStar;
+import entity.SeedWithVotes;
 
 import java.util.UUID;
 
@@ -36,12 +49,14 @@
 
     private static Database1 db1;
     private static Tracker tracker;
+    private static Cheat cheat;
     private static ObjectMapper mapper;
     private static HttpHeaders headers;
     private static HttpHeaders errorHeaders;
 
     @PostConstruct
     public void init() {
+        cheat = new Cheat();
         db1 = new Database1();
         tracker = new Tracker();
         mapper = new ObjectMapper();
@@ -77,7 +92,7 @@
                 // 如果注册种子失败,返回错误状态
                 return new ResponseEntity<>(ret, headers, HttpStatus.INTERNAL_SERVER_ERROR);
             }
-            File tempFile = File.createTempFile(seed.seedid, file.getOriginalFilename());
+            File tempFile = File.createTempFile(userid, file.getOriginalFilename());
             file.transferTo(tempFile);
             tracker.SaveTorrent(seed.seedid, tempFile);
             return new ResponseEntity<>(0, headers, HttpStatus.OK); // 返回 0 表示成功
@@ -112,7 +127,7 @@
     ) {
         try {
             Seed[] seeds = db1.GetSeedListByTag(tag);
-            if (seeds == null || seeds.length == 0) {
+            if (seeds == null) {
                 return new ResponseEntity<>("[]", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 404 表示未找到种子
             }
             String json = mapper.writeValueAsString(seeds);
@@ -227,7 +242,7 @@
     ) {
         try {
             Seed[] seeds = db1.GetSeedListByUser(userid);
-            if (seeds == null || seeds.length == 0) {
+            if (seeds == null) {
                 return new ResponseEntity<>("[]", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 404 表示未找到种子
             }
             String json = mapper.writeValueAsString(seeds);
@@ -484,7 +499,7 @@
     public ResponseEntity<String> getForum() {
         try {
             Post[] posts = db1.GetPostList();
-            if (posts == null || posts.length == 0) {
+            if (posts == null) {
                 return new ResponseEntity<>("[]", HttpStatus.OK); // 返回空数组表示没有帖子
             }
             String json = mapper.writeValueAsString(posts);
@@ -645,7 +660,7 @@
     ) {
         try {
             Seed[] seeds = db1.SearchSeed(query);
-            if (seeds == null || seeds.length == 0) {
+            if (seeds == null) {
                 return new ResponseEntity<>("[]", errorHeaders, HttpStatus.NOT_FOUND); // 返回 404 表示未找到种子
             }
             
@@ -680,7 +695,7 @@
     ) {
         try {
             Post[] posts = db1.SearchPost(query);
-            if (posts == null || posts.length == 0) {
+            if (posts == null) {
                 return new ResponseEntity<>("[]", errorHeaders, HttpStatus.NOT_FOUND); // 返回 404 表示未找到帖子
             }
             String json = mapper.writeValueAsString(posts);
@@ -713,4 +728,820 @@
             return new ResponseEntity<>("", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
         }
     }
+
+    @Override
+    public ResponseEntity<String> getConfig(
+        @RequestParam("userid") String userid
+    ) {
+        try {
+            int ret = db1.CheckAdmin(userid);
+            if (ret != 0) {
+                return new ResponseEntity<>("", errorHeaders, HttpStatus.UNAUTHORIZED); // 返回 401 表示未授权
+            }
+            // 创建配置信息的 JSON 对象
+            Map<String, Object> configData = new HashMap<>();
+            configData.put("FarmNumber", config.getFarmNumber());
+            configData.put("FakeTime", config.getFakeTime());
+            configData.put("BegVote", config.getBegVote());
+            configData.put("CheatTime", config.getCheatTime());
+            
+            String json = mapper.writeValueAsString(configData);
+            return new ResponseEntity<>(json, headers, HttpStatus.OK);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    public ResponseEntity<String> getCheatUsers(
+        @RequestParam("userid") String userid
+    ) {
+        try {
+            int ret = db1.CheckAdmin(userid);
+            if (ret != 0) {
+                return new ResponseEntity<>("", errorHeaders, HttpStatus.UNAUTHORIZED); // 返回 401 表示未授权
+            }
+            User[] cheatUsers = cheat.GetCheatUsers();
+            if (cheatUsers == null) {
+                return new ResponseEntity<>("[]", errorHeaders, HttpStatus.NOT_FOUND); // 返回 404 表示未找到作弊用户
+            }
+            String json = mapper.writeValueAsString(cheatUsers);
+            return new ResponseEntity<>(json, headers, HttpStatus.OK);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    public ResponseEntity<String> getSuspiciousUsers(
+        @RequestParam("userid") String userid
+    ) {
+        try {
+            int ret = db1.CheckAdmin(userid);
+            if (ret != 0) {
+                return new ResponseEntity<>("", errorHeaders, HttpStatus.UNAUTHORIZED); // 返回 401 表示未授权
+            }
+            User[] suspiciousUsers = cheat.GetSuspiciousUsers();
+            if (suspiciousUsers == null) {
+                return new ResponseEntity<>("[]", errorHeaders, HttpStatus.NOT_FOUND); // 返回 404 表示未找到可疑用户
+            }
+            String json = mapper.writeValueAsString(suspiciousUsers);
+            return new ResponseEntity<>(json, headers, HttpStatus.OK);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> unbanUser(
+        @RequestBody String requestBody
+    ) {
+        try {
+            // 解析 JSON 数据
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            com.fasterxml.jackson.databind.JsonNode useridNode = jsonNode.get("userid");
+            if (useridNode == null) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+            String userid = useridNode.asText();
+            
+            // 添加参数验证
+            if (userid == null || userid.trim().isEmpty()) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST);
+            }
+            
+            int ret = cheat.UnbanUser(userid);
+            if (ret == 0) {
+                return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示成功
+            } else if (ret == 1) {
+                return new ResponseEntity<>(1, HttpStatus.NOT_FOUND); // 返回 1 表示用户不存在
+            } else if (ret == 2) {
+                return new ResponseEntity<>(2, HttpStatus.CONFLICT); // 返回 2 表示用户未被封禁
+            } else {
+                return new ResponseEntity<>(3, HttpStatus.INTERNAL_SERVER_ERROR); // 返回其他状态表示失败
+            }
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> banUser(
+        @RequestBody String requestBody
+    ) {
+        try {
+            // 解析 JSON 数据
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            com.fasterxml.jackson.databind.JsonNode useridNode = jsonNode.get("userid");
+            if (useridNode == null) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+            String userid = useridNode.asText();
+            
+            // 添加参数验证
+            if (userid == null || userid.trim().isEmpty()) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST);
+            }
+            
+            int ret = cheat.BanUser(userid);
+            if (ret == 0) {
+                return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示成功
+            } else if (ret == 1) {
+                return new ResponseEntity<>(1, HttpStatus.NOT_FOUND); // 返回 1 表示用户不存在
+            } else if (ret == 2) {
+                return new ResponseEntity<>(2, HttpStatus.CONFLICT); // 返回 2 表示用户已被封禁
+            } else {
+                return new ResponseEntity<>(3, HttpStatus.INTERNAL_SERVER_ERROR); // 返回其他状态表示失败
+            }
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    public ResponseEntity<String> getAppeals() {
+        try {
+            Appeal[] appeals = cheat.GetAppealList();
+            if (appeals == null) {
+                return new ResponseEntity<>("[]", errorHeaders, HttpStatus.NOT_FOUND); // 返回 404 表示未找到申诉
+            }
+            String json = mapper.writeValueAsString(appeals);
+            return new ResponseEntity<>(json, headers, HttpStatus.OK);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    public ResponseEntity<String> getMigrations() {
+        try {
+            Profile[] migrations = db1.GetTransmitProfileList();
+            if (migrations == null) {
+                return new ResponseEntity<>("[]", errorHeaders, HttpStatus.NOT_FOUND); // 返回 404 表示未找到迁移记录
+            }
+            String json = mapper.writeValueAsString(migrations);
+            return new ResponseEntity<>(json, headers, HttpStatus.OK);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> approveAppeal(
+        @RequestBody String requestBody
+    ) {
+        try {
+            // 解析 JSON 数据
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            com.fasterxml.jackson.databind.JsonNode appealidNode = jsonNode.get("appealid");
+            if (appealidNode == null) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+            String appealid = appealidNode.asText();
+            
+            // 添加参数验证
+            if (appealid == null || appealid.trim().isEmpty()) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST);
+            }
+            
+            boolean ret = cheat.HandleAppeal(appealid, 1);
+            if (ret) {
+                return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示成功
+            } else {
+                return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回其他状态表示失败
+            }
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> rejectAppeal(
+        @RequestBody String requestBody
+    ) {
+        try {
+            // 解析 JSON 数据
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            com.fasterxml.jackson.databind.JsonNode appealidNode = jsonNode.get("appealid");
+            if (appealidNode == null) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+            String appealid = appealidNode.asText();
+            
+            // 添加参数验证
+            if (appealid == null || appealid.trim().isEmpty()) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST);
+            }
+            
+            boolean ret = cheat.HandleAppeal(appealid, 2);
+            if (ret) {
+                return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示成功
+            } else {
+                return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回其他状态表示失败
+            }
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> approveMigration(
+        @RequestBody String requestBody
+    ) {
+        try {
+            // 解析 JSON 数据
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            com.fasterxml.jackson.databind.JsonNode migrationidNode = jsonNode.get("migration_id");
+            if (migrationidNode == null) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+            String migrationid = migrationidNode.asText();
+            System.out.println("Migration ID: " + migrationid);
+            
+            // 添加参数验证
+            if (migrationid == null || migrationid.trim().isEmpty()) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST);
+            }
+            
+            boolean ret = db1.ExamTransmitProfile(migrationid, true);
+            System.out.println("Migration approval result: " + ret);
+            if (ret) {
+                return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示成功
+            } else {
+                return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回其他状态表示失败
+            }
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> rejectMigration(
+        @RequestBody String requestBody
+    ) {
+        try {
+            // 解析 JSON 数据
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            com.fasterxml.jackson.databind.JsonNode migrationidNode = jsonNode.get("migration_id");
+            if (migrationidNode == null) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+            String migrationid = migrationidNode.asText();
+            
+            // 添加参数验证
+            if (migrationid == null || migrationid.trim().isEmpty()) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST);
+            }
+            
+            boolean ret = db1.ExamTransmitProfile(migrationid, false);
+            if (ret) {
+                return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示成功
+            } else {
+                return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回其他状态表示失败
+            }
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> inviteUser(
+        @RequestBody String requestBody
+    ) {
+        try {
+            // 解析 JSON 数据
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            com.fasterxml.jackson.databind.JsonNode useridNode = jsonNode.get("userid");
+            com.fasterxml.jackson.databind.JsonNode emailNode = jsonNode.get("invite_email");
+            if (useridNode == null || emailNode == null) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+            String userid = useridNode.asText();
+            String email = emailNode.asText();
+            
+            // 添加参数验证
+            if (email == null || email.trim().isEmpty()) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST);
+            }
+            
+            int ret = db1.InviteNewUser(userid, email);
+            if (ret == 0) {
+                return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示成功
+            } else if (ret == 1) {
+                return new ResponseEntity<>(1, HttpStatus.CONFLICT); // 返回 1 表示邀请已存在
+            } else {
+                return new ResponseEntity<>(2, HttpStatus.INTERNAL_SERVER_ERROR); // 返回其他状态表示失败
+            }
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+    
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> submitAppeal(
+        @RequestParam("userid") String userid,
+        @RequestParam("content") String content,
+        @RequestParam("file") MultipartFile file
+    ) {
+        try {
+            System.out.println("Submit appeal request: userid=" + userid + ", content=" + content);
+            // 先进行参数验证
+            if (userid == null || userid.trim().isEmpty() || 
+                content == null || content.trim().isEmpty() ||
+                file == null || file.isEmpty()) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST);
+            }
+            
+            if (file.getSize() > 100 * 1024 * 1024) {
+                System.out.println("File size exceeds limit: " + file.getSize() + " bytes");
+                return new ResponseEntity<>(3, HttpStatus.PAYLOAD_TOO_LARGE); // 返回 3 表示文件过大
+            }
+            
+            System.out.println("Submit appeal request: userid=" + userid + ", content=" + content);
+            File tempFile = File.createTempFile(userid, file.getOriginalFilename());
+            file.transferTo(tempFile);
+            
+            int ret = cheat.SubmitAppeal(userid, content, tempFile);
+            System.out.println("Submit appeal result: " + ret);
+            if (ret == 0) {
+                return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示成功
+            } else if (ret == 1) {
+                return new ResponseEntity<>(1, HttpStatus.CONFLICT); // 返回 1 表示用户未被封禁或其他错误
+            } else {
+                return new ResponseEntity<>(2, HttpStatus.INTERNAL_SERVER_ERROR); // 返回其他状态表示失败
+            }
+        } catch (org.springframework.web.multipart.MaxUploadSizeExceededException e) {
+            System.out.println("File upload size exceeded: " + e.getMessage());
+            return new ResponseEntity<>(3, HttpStatus.PAYLOAD_TOO_LARGE); // 返回 3 表示文件过大
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    public ResponseEntity<String> getUserStats(
+        @RequestParam("userid") String userid
+    ) {
+        try {
+            if (userid == null || userid.trim().isEmpty()) {
+                return new ResponseEntity<>("", errorHeaders, HttpStatus.BAD_REQUEST); // 返回 400 表示参数不完整
+            }
+
+            UserPT userPT = db1.GetInformationPT(userid);
+            if (userPT == null) {
+                return new ResponseEntity<>("", errorHeaders, HttpStatus.NOT_FOUND); // 返回 404 表示未找到用户PT信息
+            }   
+
+            String json = mapper.writeValueAsString(userPT);
+            return new ResponseEntity<>(json, headers, HttpStatus.OK);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 500 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> magicExchange(
+        @RequestBody String requestBody
+    ) {
+        try {
+            // 解析 JSON 数据
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            com.fasterxml.jackson.databind.JsonNode useridNode = jsonNode.get("userid");
+            com.fasterxml.jackson.databind.JsonNode magicNode = jsonNode.get("magic");
+            com.fasterxml.jackson.databind.JsonNode typeNode = jsonNode.get("exchangeType");
+
+            if (useridNode == null || magicNode == null || typeNode == null) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+            String userid = useridNode.asText();
+            int magic = magicNode.asInt();
+            String exchangeType = typeNode.asText();
+
+            boolean ret = false;
+            if( "uploaded".equals(exchangeType) ) {
+                ret = db1.ExchangeMagicToUpload(userid, magic);
+            } else if( "downloaded".equals(exchangeType) ) {
+                ret = db1.ExchangeMagicToDownload(userid, magic);
+            } else if( "vip_downloads".equals(exchangeType) ) {
+                ret = db1.ExchangeMagicToVip(userid, magic);
+            } else {
+                System.out.println("Invalid exchange type: " + exchangeType);
+                return new ResponseEntity<>(2, HttpStatus.BAD_REQUEST); // 返回 2 表示交换类型错误
+            }
+            if (!ret) {
+                return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示处理失败
+            }
+            return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示成功
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    public ResponseEntity<String> getUserFavorites(
+        @RequestParam("userid") String userid
+    ) {
+        try {
+            if (userid == null || userid.trim().isEmpty()) {
+                return new ResponseEntity<>("[]", errorHeaders, HttpStatus.BAD_REQUEST); // 返回 400 表示参数不完整
+            }
+
+            UserStar[] favorites = db1.GetUserStarList(userid);
+            if (favorites == null) {
+                return new ResponseEntity<>("[]", errorHeaders, HttpStatus.NOT_FOUND); // 返回 404 表示未找到用户收藏
+            }
+
+            String json = mapper.writeValueAsString(favorites);
+            return new ResponseEntity<>(json, headers, HttpStatus.OK);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 500 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> removeFavorite(
+        @RequestBody String requestBody
+    ) {
+        try {
+            // 解析 JSON 数据
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            com.fasterxml.jackson.databind.JsonNode useridNode = jsonNode.get("userid");
+            com.fasterxml.jackson.databind.JsonNode seedidNode = jsonNode.get("seedid");
+            if (useridNode == null || seedidNode == null) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+
+            String userid = useridNode.asText();
+            String seedid = seedidNode.asText();
+
+            // 添加参数验证
+            if (userid == null || userid.trim().isEmpty() || 
+                seedid == null || seedid.trim().isEmpty()) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST);
+            }
+
+            boolean ret = db1.DeleteCollect(userid, seedid);
+            if (ret) {
+                return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示成功
+            } else {
+                return new ResponseEntity<>(2, HttpStatus.INTERNAL_SERVER_ERROR); // 返回其他状态表示失败
+            }
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> addFavorite(
+        @RequestBody String requestBody
+    ) {
+        try {
+            // 解析 JSON 数据
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            com.fasterxml.jackson.databind.JsonNode useridNode = jsonNode.get("userid");
+            com.fasterxml.jackson.databind.JsonNode seedidNode = jsonNode.get("seedid");
+            if (useridNode == null || seedidNode == null) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+
+            String userid = useridNode.asText();
+            String seedid = seedidNode.asText();
+
+            // 添加参数验证
+            if (userid == null || userid.trim().isEmpty() || 
+                seedid == null || seedid.trim().isEmpty()) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST);
+            }
+
+            boolean ret = db1.AddCollect(userid, seedid);
+            if (ret) {
+                return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示成功
+            } else {
+                return new ResponseEntity<>(2, HttpStatus.INTERNAL_SERVER_ERROR); // 返回其他状态表示失败
+            }
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> migrateAccount(
+        @RequestParam("userid") String userid,
+        @RequestParam("file") MultipartFile file
+    ) {
+        try {
+            // 先进行参数验证
+            if (userid == null || userid.trim().isEmpty() || 
+                file == null || file.isEmpty()) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST);
+            }
+            
+            if (file.getSize() > 100 * 1024 * 1024) {
+                System.out.println("File size exceeds limit: " + file.getSize() + " bytes");
+                return new ResponseEntity<>(3, HttpStatus.PAYLOAD_TOO_LARGE); // 返回 3 表示文件过大
+            }
+            
+            File tempFile = File.createTempFile(userid, file.getOriginalFilename());
+            file.transferTo(tempFile);
+
+            int ret = db1.UploadMigration(userid, tempFile);
+            if (ret == 0) {
+                return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示成功
+            } else if (ret == 1) {
+                return new ResponseEntity<>(1, HttpStatus.CONFLICT); // 返回 1 表示用户已存在或其他错误
+            } else {
+                return new ResponseEntity<>(2, HttpStatus.INTERNAL_SERVER_ERROR); // 返回其他状态表示失败
+            }
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    public ResponseEntity<String> getBegSeedList() {
+        try {
+            BegSeedDetail[] begSeedList = db1.GetBegList();
+            if (begSeedList == null) {
+                return new ResponseEntity<>("[]", errorHeaders, HttpStatus.NOT_FOUND); // 返回 404 表示未找到种子列表
+            }
+            String json = mapper.writeValueAsString(begSeedList);
+            return new ResponseEntity<>(json, headers, HttpStatus.OK);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 500 表示处理失败
+        }
+    }
+
+    @Override
+    public ResponseEntity<String> getBegSeedDetail(
+        @RequestParam("begid") String begid
+    ) {
+        try {
+            System.out.println("getBegSeedDetail called with begid: " + begid);
+            if (begid == null || begid.trim().isEmpty()) {
+                return new ResponseEntity<>("", errorHeaders, HttpStatus.BAD_REQUEST); // 返回 400 表示参数不完整
+            }
+
+            BegSeedDetail begSeedDetail = db1.GetBegSeedDetail(begid);
+            if (begSeedDetail == null) {
+                return new ResponseEntity<>("", errorHeaders, HttpStatus.NOT_FOUND); // 返回 404 表示未找到种子详情
+            }
+            String json = mapper.writeValueAsString(begSeedDetail);
+            return new ResponseEntity<>(json, headers, HttpStatus.OK);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 500 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    public ResponseEntity<String> getBegSeedSubmissions(
+        @RequestParam("begid") String begid
+    ) {
+        try {
+            if (begid == null || begid.trim().isEmpty()) {
+                return new ResponseEntity<>("[]", errorHeaders, HttpStatus.BAD_REQUEST); // 返回 400 表示参数不完整
+            }
+
+            SeedWithVotes[] submissionsWithVotes = db1.GetBegSeedListWithVotes(begid);
+            if (submissionsWithVotes == null) {
+                return new ResponseEntity<>("[]", errorHeaders, HttpStatus.NOT_FOUND); // 返回 404 表示未找到提交记录
+            }
+
+            String json = mapper.writeValueAsString(submissionsWithVotes);
+            return new ResponseEntity<>(json, headers, HttpStatus.OK);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 500 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> submitSeed(
+        @RequestBody String requestBody
+    ) {
+        try {
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            com.fasterxml.jackson.databind.JsonNode begidNode = jsonNode.get("begid");
+            com.fasterxml.jackson.databind.JsonNode useridNode = jsonNode.get("userid");
+            com.fasterxml.jackson.databind.JsonNode seedidNode = jsonNode.get("seedid");
+            
+            if (begidNode == null || useridNode == null || seedidNode == null) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+
+            String begid = begidNode.asText();
+            String userid = useridNode.asText();
+            String seedid = seedidNode.asText();
+
+            if (begid == null || begid.trim().isEmpty() || 
+                userid == null || userid.trim().isEmpty() || 
+                seedid == null || seedid.trim().isEmpty()) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+
+            int ret = db1.SubmitBegSeed(begid, seedid, userid);
+            if (ret == 0) {
+                return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示成功
+            } else if (ret == 1) {
+                return new ResponseEntity<>(1, HttpStatus.CONFLICT); // 返回 1 表示提交失败或其他错误
+            } else {
+                return new ResponseEntity<>(2, HttpStatus.INTERNAL_SERVER_ERROR); // 返回其他状态表示失败
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示处理失败
+        }
+    }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> voteSeed(
+        @RequestBody String requestBody
+    ) {
+        try {
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            com.fasterxml.jackson.databind.JsonNode begidNode = jsonNode.get("begid");
+            com.fasterxml.jackson.databind.JsonNode useridNode = jsonNode.get("userid");
+            com.fasterxml.jackson.databind.JsonNode seedidNode = jsonNode.get("seedid");
+
+            if (begidNode == null || useridNode == null || seedidNode == null) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+
+            String begid = begidNode.asText();
+            String userid = useridNode.asText();
+            String seedid = seedidNode.asText();
+
+            if (begid == null || begid.trim().isEmpty() || 
+                userid == null || userid.trim().isEmpty() || 
+                seedid == null || seedid.trim().isEmpty()) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+
+            int ret = db1.VoteSeed(begid, seedid, userid);
+            if (ret == 0) {
+                return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示成功
+            } else if (ret == 1) {
+                return new ResponseEntity<>(3, HttpStatus.CONFLICT); // 返回 1 表示投票失败或其他错误
+            } else {
+                return new ResponseEntity<>(2, HttpStatus.INTERNAL_SERVER_ERROR); // 返回其他状态表示失败
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示处理失败
+        }
+    }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> createBegSeed(
+        @RequestBody String requestBody
+    ) {
+        try {
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            com.fasterxml.jackson.databind.JsonNode useridNode = jsonNode.get("userid");
+            com.fasterxml.jackson.databind.JsonNode infoNode = jsonNode.get("info");
+            com.fasterxml.jackson.databind.JsonNode rewardNode = jsonNode.get("reward_magic");
+            com.fasterxml.jackson.databind.JsonNode dedlineNode = jsonNode.get("deadline");
+
+            if (useridNode == null || infoNode == null || rewardNode == null || dedlineNode == null) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+
+            String userid = useridNode.asText();
+            String info = infoNode.asText();
+
+            if (userid == null || userid.trim().isEmpty() ||
+                info == null || info.trim().isEmpty() ||
+                rewardNode.asInt() <= 0 ){
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+
+            // 解析日期字符串
+            Date endTime;
+            try {
+                String deadlineStr = dedlineNode.asText();
+                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm");
+                endTime = dateFormat.parse(deadlineStr);
+            } catch (ParseException e) {
+                return new ResponseEntity<>(1, HttpStatus.BAD_REQUEST); // 日期格式错误
+            }
+
+            BegInfo beg = new BegInfo();
+            beg.begid = java.util.UUID.randomUUID().toString();
+            beg.begnumbers = 0; // 初始提交数为0
+            beg.magic = rewardNode.asInt();
+            beg.endtime = endTime;
+            beg.hasseed = 0; // 初始状态为未开始
+
+            // int ret = db1.AddBegSeed(beg);
+            int ret = db1.createBagSeed(beg, userid, info);
+            if (ret == 0) {
+                return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示成功
+            } else if (ret == 1) {
+                return new ResponseEntity<>(2, HttpStatus.CONFLICT); // 返回 1 表示创建失败或其他错误
+            } else {
+                return new ResponseEntity<>(3, HttpStatus.INTERNAL_SERVER_ERROR); // 返回其他状态表示失败
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(1, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 1 表示处理失败
+        }
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/api/ApiInterface.java b/src/main/java/api/ApiInterface.java
index 2d79fa7..475b5d2 100644
--- a/src/main/java/api/ApiInterface.java
+++ b/src/main/java/api/ApiInterface.java
@@ -101,4 +101,126 @@
     ResponseEntity<String> getUserPT(
         @RequestParam("userid") String userid
     );
+
+    @GetMapping("/admin/config")
+    ResponseEntity<String> getConfig(
+        @RequestParam("userid") String userid
+    );
+
+    @GetMapping("/admin/cheat-users")
+    ResponseEntity<String> getCheatUsers(
+        @RequestParam("userid") String userid
+    );
+
+    @GetMapping("/admin/suspicious-users")
+    ResponseEntity<String> getSuspiciousUsers(
+        @RequestParam("userid") String userid
+    );
+
+    @PostMapping("/admin/unban-user")
+    ResponseEntity<Integer> unbanUser(
+        @RequestBody String requestBody
+    );
+
+    @PostMapping("/admin/ban-user")
+    ResponseEntity<Integer> banUser(
+        @RequestBody String requestBody
+    );
+
+    @GetMapping("/appeals")
+    ResponseEntity<String> getAppeals();
+
+    @GetMapping("/migrations")
+    ResponseEntity<String> getMigrations();
+
+    @PostMapping("/appeals-approve")
+    ResponseEntity<Integer> approveAppeal(
+        @RequestBody String requestBody
+    );
+
+    @PostMapping("/appeals-reject")
+    ResponseEntity<Integer> rejectAppeal(
+        @RequestBody String requestBody
+    );
+
+    @PostMapping("/migrations-approve")
+    ResponseEntity<Integer> approveMigration(
+        @RequestBody String requestBody
+    );
+
+    @PostMapping("/migrations-reject")
+    ResponseEntity<Integer> rejectMigration(
+        @RequestBody String requestBody
+    );
+
+    @PostMapping("/invite")
+    ResponseEntity<Integer> inviteUser(
+        @RequestBody String requestBody
+    );
+
+    @PostMapping("/submit-appeal")
+    ResponseEntity<Integer> submitAppeal(
+        @RequestParam("userid") String userid,
+        @RequestParam("content") String content,
+        @RequestParam("file") MultipartFile file
+    );
+    
+    @GetMapping("/user-stats")
+    ResponseEntity<String> getUserStats(
+        @RequestParam("userid") String userid
+    );
+
+    @PostMapping("/exchange")
+    ResponseEntity<Integer> magicExchange(
+        @RequestBody String requestBody
+    );
+
+    @GetMapping("/user-favorites")
+    ResponseEntity<String> getUserFavorites(
+        @RequestParam("userid") String userid
+    );
+
+    @PostMapping("/remove-favorite")
+    ResponseEntity<Integer> removeFavorite(
+        @RequestBody String requestBody
+    );
+
+    @PostMapping("/add-favorite")
+    ResponseEntity<Integer> addFavorite(
+        @RequestBody String requestBody
+    );
+
+    @PostMapping("/migrate-account")
+    ResponseEntity<Integer> migrateAccount(
+        @RequestParam("userid") String userid,
+        @RequestParam("file") MultipartFile file
+    );
+
+    @GetMapping("/begseed-list")
+    ResponseEntity<String> getBegSeedList();
+
+    @GetMapping("/begseed-detail")
+    ResponseEntity<String> getBegSeedDetail(
+        @RequestParam("begid") String begid
+    );
+
+    @GetMapping("/begseed-submissions")
+    ResponseEntity<String> getBegSeedSubmissions(
+        @RequestParam("begid") String begid
+    );
+
+    @PostMapping("/submit-seed")
+    ResponseEntity<Integer> submitSeed(
+        @RequestBody String requestBody
+    );
+
+    @PostMapping("/vote-seed")
+    ResponseEntity<Integer> voteSeed(
+        @RequestBody String requestBody
+    );
+
+    @PostMapping("/create-begseed")
+    ResponseEntity<Integer> createBegSeed(
+        @RequestBody String requestBody
+    );
 }
\ No newline at end of file
diff --git a/src/main/java/cheat/Cheat.java b/src/main/java/cheat/Cheat.java
index 3eecaff..cb35c05 100644
--- a/src/main/java/cheat/Cheat.java
+++ b/src/main/java/cheat/Cheat.java
@@ -1,13 +1,22 @@
 package cheat;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 import javax.persistence.PersistenceContext;
 import javax.transaction.Transactional;
 
 import org.apache.commons.lang3.tuple.Pair;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
 
 import com.querydsl.jpa.impl.JPAQueryFactory;
 
@@ -16,19 +25,37 @@
 import entity.QSeed;
 import entity.User;
 import entity.config;
+import entity.QUser;
+import entity.TTorent;
 
 public class Cheat implements CheatInterfnterface {
 
     @PersistenceContext
-    private EntityManager entityManager;
+    private EntityManagerFactory emf;
+
+    public Cheat() {
+        config cfg = new config();
+        Map<String,Object> props = new HashMap<>();
+        props.put("javax.persistence.jdbc.url",
+                  "jdbc:mysql://" + cfg.SqlURL + "/" + cfg.Database);
+        props.put("javax.persistence.jdbc.user", cfg.SqlUsername);
+        props.put("javax.persistence.jdbc.password", cfg.SqlPassword);
+        this.emf = Persistence.createEntityManagerFactory("myPersistenceUnit", props);
+    }
 
     @Override
     @Transactional
     public boolean AddAppeal(Appeal appeal) {
+        EntityManager entityManager = emf.createEntityManager();
         try {
+            entityManager.getTransaction().begin();
             entityManager.persist(appeal);
+            entityManager.getTransaction().commit();
         } catch (Exception e) {
             e.printStackTrace();
+            if (entityManager.getTransaction().isActive()) {
+                entityManager.getTransaction().rollback();
+            }
             return false;
         }
         return true;
@@ -37,6 +64,7 @@
     @Override
     public Appeal GetAppeal(String appealid) {
         try {
+            EntityManager entityManager = emf.createEntityManager();
             JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
             QAppeal qAppeal = QAppeal.appeal;
             Appeal appeal = queryFactory
@@ -52,6 +80,7 @@
 
     @Override
     public Appeal[] GetAppealList() {
+        EntityManager entityManager = emf.createEntityManager();
         try {
             JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
             QAppeal qAppeal = QAppeal.appeal;
@@ -62,29 +91,44 @@
         } catch (Exception e) {
             e.printStackTrace();
             return null;
+        } finally {
+            if (entityManager != null) {
+                entityManager.close();
+            }
         }
     }
 
     @Override
     public boolean HandleAppeal(String appealid, Integer status) {
+        EntityManager entityManager = emf.createEntityManager();
         try {
             Appeal appeal = GetAppeal(appealid);
             if (appeal != null) {
                 appeal.status = status;
+                entityManager.getTransaction().begin();
                 entityManager.merge(appeal);
                 User user = entityManager.find(User.class, appeal.appealuserid);
-                if (user != null && user.accountstate != false) {
+                // if (user != null && user.accountstate != false) {
+                if (user != null) {
                     if (status == 1) {
                         user.accountstate = false;
                     }
                     entityManager.merge(user);
                 }
+                entityManager.getTransaction().commit();
                 return true;
             }
             return false;
         } catch (Exception e) {
             e.printStackTrace();
+            if (emf.createEntityManager().getTransaction().isActive()) {
+                emf.createEntityManager().getTransaction().rollback();
+            }
             return false;
+        } finally {
+            if (entityManager != null) {
+                entityManager.close();
+            }
         }
     }
 
@@ -92,12 +136,13 @@
     public Pair<String, String>[] GetFakeSeed() {
         List<Pair<String, String>> fakeSeeds = new ArrayList<>();
         try {
+            EntityManager entityManager = emf.createEntityManager();
             JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
             QSeed qSeed = QSeed.seed;
             List<com.querydsl.core.Tuple> results = queryFactory
                 .select(qSeed.seedid, qSeed.seeduserid)
                 .from(qSeed)
-                .where(qSeed.faketime.gt(new config().FakeTime))
+                .where(qSeed.faketime.gt(config.getFakeTime()))
                 .fetch();
             for (com.querydsl.core.Tuple result : results) {
                 String seedid = result.get(qSeed.seedid);
@@ -115,6 +160,7 @@
     public String[] GetPunishedUserList() {
         List<String> punishedUsers = new ArrayList<>();
         try {
+            EntityManager entityManager = emf.createEntityManager();
             JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
             entity.QUser qUser = entity.QUser.user;
             List<String> results = queryFactory
@@ -187,12 +233,13 @@
 
     @Override
     public void PunishUser(){
+        EntityManager entityManager = emf.createEntityManager();
         JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
         entity.QUser qUser = entity.QUser.user;
         List<User> users = queryFactory
             .selectFrom(qUser)
-            .where(qUser.detectedCount.gt(new entity.config().CheatTime) 
-                .or(qUser.fakeDetectedCount.gt(new entity.config().FakeTime)))
+            .where(qUser.detectedCount.gt(config.getCheatTime()) 
+                .or(qUser.fakeDetectedCount.gt(config.getFakeTime())))
             .fetch();
 
         for (User user : users) {
@@ -200,4 +247,147 @@
             entityManager.merge(user);
         }
     }
+
+    @Override
+    public User[] GetCheatUsers() {
+        EntityManager entityManager = emf.createEntityManager();
+        List<User> cheatUsers = new ArrayList<>();
+        try {
+            JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
+            QUser qUser = QUser.user;
+            cheatUsers = queryFactory
+                .selectFrom(qUser)
+                .where(qUser.accountstate.eq(true))
+                .fetch();
+            return cheatUsers.toArray(new User[0]);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        } finally {
+            if (entityManager != null){
+                entityManager.close();
+            }
+        }
+    }
+
+    @Override
+    public User[] GetSuspiciousUsers() {
+        EntityManager entityManager = emf.createEntityManager();
+        List<User> suspiciousUsers = new ArrayList<>();
+        try {
+            JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
+            QUser qUser = QUser.user;
+            suspiciousUsers = queryFactory
+                .selectFrom(qUser)
+                .where((qUser.detectedCount.gt(0)
+                    .or(qUser.fakeDetectedCount.gt(0)))
+                    .and(qUser.accountstate.eq(false)))
+                .fetch();
+            return suspiciousUsers.toArray(new User[0]);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        } finally {
+            if (entityManager != null){
+                entityManager.close();
+            }
+        }
+    }
+    
+    @Override
+    public int UnbanUser(String userid) {
+        EntityManager entityManager = emf.createEntityManager();
+        try {
+            User user = entityManager.find(User.class, userid);
+            if (user == null) {
+                return 1; // 用户不存在
+            }
+            if (user.accountstate) {
+                user.accountstate = false; // 解封用户
+                entityManager.getTransaction().begin();
+                entityManager.merge(user);
+                entityManager.getTransaction().commit();
+                return 0; // 成功解封
+            }
+            return 2; // 用户未被封禁
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (entityManager.getTransaction().isActive()) {
+                entityManager.getTransaction().rollback();
+            }
+            return -1; // 出现异常
+        } finally {
+            if (entityManager != null){
+                entityManager.close();
+            }
+        }
+    }
+
+    @Override
+    public int BanUser(String userid) {
+        EntityManager entityManager = emf.createEntityManager();
+        try {
+            User user = entityManager.find(User.class, userid);
+            if (user == null) {
+                return 1; // 用户不存在
+            }
+            if (!user.accountstate) {
+                user.accountstate = true; // 封禁用户
+                entityManager.getTransaction().begin();
+                entityManager.merge(user);
+                entityManager.getTransaction().commit();
+                return 0; // 成功封禁
+            }
+            return 2; // 用户已被封禁
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (entityManager.getTransaction().isActive()) {
+                entityManager.getTransaction().rollback();
+            }
+            return -1; // 出现异常
+        } finally {
+            if (entityManager != null){
+                entityManager.close();
+            }
+        }
+    }
+
+    @Override
+    public int SubmitAppeal(String userid, String content, File file) {
+        EntityManager entityManager = emf.createEntityManager();
+        try {
+            User user = entityManager.find(User.class, userid);
+            if (user == null) {
+                return 1; // 用户不存在
+            }
+            Appeal appeal = new Appeal();
+            appeal.appealid = java.util.UUID.randomUUID().toString();
+            appeal.appealuserid = userid;
+            appeal.content = content;
+            appeal.user = user; // 设置关联的用户
+            Path storageDir = Paths.get(config.APPEAL_STORAGE_DIR);
+            if (!Files.exists(storageDir)) {
+                Files.createDirectories(storageDir);
+            }
+            String filename = file.getName();
+            Path target = storageDir.resolve(appeal.appealid + "_" + filename);
+            Files.copy(file.toPath(), target, StandardCopyOption.REPLACE_EXISTING);
+            appeal.status = 0; // 初始状态为未处理
+            appeal.fileURL = target.toString(); // 设置文件存储路径
+            entityManager.getTransaction().begin();
+            entityManager.persist(appeal);
+            entityManager.getTransaction().commit();
+            return 0; // 成功提交申诉
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (entityManager.getTransaction().isActive()) {
+                entityManager.getTransaction().rollback();
+            }
+            return -1; // 出现异常
+        } finally {
+            if (entityManager != null){
+                entityManager.close();
+            }
+        }
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/cheat/CheatInterfnterface.java b/src/main/java/cheat/CheatInterfnterface.java
index e7e4942..81aeb2c 100644
--- a/src/main/java/cheat/CheatInterfnterface.java
+++ b/src/main/java/cheat/CheatInterfnterface.java
@@ -1,6 +1,9 @@
 package cheat;
 import org.apache.commons.lang3.tuple.Pair;
 import entity.Appeal;
+import entity.User;
+import java.io.File;
+
 public interface CheatInterfnterface{
     public Pair<String,String>[] GetFakeSeed();//返回做假种的列表,<seedid,userid>
     public void DetectFakeSeed();//检测所有种子是否为假种,并将检测结果写入数据表
@@ -15,4 +18,12 @@
     public Appeal[] GetAppealList();//获取所有申诉列表
     public boolean HandleAppeal(String appealid, Integer status);//处理申诉
     // status = 0表示未处理, = 1表示通过, = 2表示拒绝
+
+    public User[] GetCheatUsers();//获取作弊用户列表,返回User对象数组
+    public User[] GetSuspiciousUsers();//获取可疑用户列表,返回User对象数组
+    public int UnbanUser(String userid);//解封用户,返回0表示成功,1表示用户不存在,2表示用户未被封禁
+    public int BanUser(String userid);//封禁用户,返回0表示成功,1表示用户不存在,2表示用户已被封禁
+
+    public int SubmitAppeal(String userid, String content, File file); // 添加新的申诉,返回0表示成功,1表示用户不存在,2表示内容不合法
+
 }
diff --git a/src/main/java/database/DataManagerInterface.java b/src/main/java/database/DataManagerInterface.java
index b02f4a6..0c4dc7d 100644
--- a/src/main/java/database/DataManagerInterface.java
+++ b/src/main/java/database/DataManagerInterface.java
@@ -1,13 +1,17 @@
 package database;
 
 import entity.BegInfo;
+import entity.BegSeedDetail;
 import entity.Notice;
 import entity.Post;
 import entity.Profile;
 import entity.Seed;
 import entity.User;
 import entity.UserPT;
+import entity.UserStar;
 import entity.PostReply;
+import entity.SeedWithVotes;
+import java.io.File;
 public interface DataManagerInterface{
 //DB1
 
@@ -38,7 +42,9 @@
 
     public boolean AddCollect(String userid,String seedid);//添加一个收藏,返回状态:0 success,1 不存在,2其他原因
     public boolean DeleteCollect(String userid,String seedid);//删除一个收藏,返回状态:0 success,1 不存在,2其他原因
-    
+    public UserStar[] GetUserStarList(String userid);//获取用户的收藏列表
+
+    public int CheckAdmin(String userid);//检查用户是否为管理员,返回状态:0 success,1 不存在,2其他原因
 
 
 // ----------------------------------------------------------------------------------------------------
@@ -50,6 +56,11 @@
     public int VoteSeed(String begId, String seedId, String userId);//求种结果投票,返回状态:0 success,1 重复,2其他原因
     public int SubmitSeed(String begid,Seed seed);//提交种子,返回状态:0 success,1 重复,2其他原因
     public void SettleBeg();//结算所有求种信息,求种信息中需要增加Beg截止日期,默认14天,期间投票>的则Beg成功,否则Beg失败,并发放对应奖励
+    public BegSeedDetail[] GetBegList();//获取所有求种信息(包含BegSeed表内容和BegInfo的Info字段)
+    public BegInfo GetBegDetail(String begid);//获取一个求种信息的详细信息
+    public BegSeedDetail GetBegSeedDetail(String begid);//获取一个求种信息的详细信息(包含BegSeed表数据和BegInfo表的Info字段)
+    public SeedWithVotes[] GetBegSeedListWithVotes(String begid);//获取一个求种信息下的种子列表(包含投票信息)
+    public int SubmitBegSeed(String begid, String seedid, String userid);//提交一个种子到求种信息中,返回状态:0 success,1 重复,2其他原因
 
     public Post[] SearchPost(String userQ);//传入搜索的关键词或句子,返回搜索到的帖子信息(按照公共字符数量排序)
     public Post[] GetPostList();//获取用户的帖子列表
@@ -72,5 +83,7 @@
     public Profile GetTransmitProfile(String profileid);//获取迁移信息
     public boolean ExamTransmitProfile(String profileid,boolean result);//审核迁移信息,0成功,1失败
     public Profile[] GetTransmitProfileList();//获取所有迁移信息
-
+    public int InviteNewUser(String inviterid, String invitedemail);//邀请新用户,返回状态:0 success,1 重复,2其他原因
+    public int UploadMigration(String userid, File file);
+    public int createBagSeed(BegInfo begInfo, String userid, String info);
 }   
\ No newline at end of file
diff --git a/src/main/java/database/Database1.java b/src/main/java/database/Database1.java
index b91e471..26ddc29 100644
--- a/src/main/java/database/Database1.java
+++ b/src/main/java/database/Database1.java
@@ -4,8 +4,14 @@
 import java.util.UUID;
 import java.util.HashMap;
 import java.util.List;
+import java.util.ArrayList;
 import java.util.Map;
 import java.util.Date;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
@@ -17,10 +23,14 @@
 import com.querydsl.core.Tuple;
 
 import entity.BegInfo;
+import entity.BegInfoDetail;
+import entity.BegSeedDetail;
 import entity.Notice;
 import entity.Post;
 import entity.PostReply;
 import entity.Profile;
+import entity.SeedWithVotes;
+import entity.QAdmin;
 import entity.QBegInfo;
 import entity.QNotice;
 import entity.QProfile;
@@ -40,6 +50,12 @@
 import entity.PostReply;
 import entity.QPostReply;
 import entity.UserInvite;
+import entity.QAdmin;
+import entity.UserStar;
+import entity.QUserStar;
+import entity.SubmitSeed;
+import entity.SubmitSeedId;
+
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -210,8 +226,16 @@
     @Override
     public UserPT GetInformationPT(String userid){
         EntityManager entitymanager = createEntityManager();
-        UserPT userPT = entitymanager.find(UserPT.class, userid);
-        return userPT;
+        try {
+            UserPT userPT = entitymanager.find(UserPT.class, userid);
+            if (userPT == null) {
+                return null; // 用户PT信息不存在
+            }
+            return userPT;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null; // 出现异常,返回null
+        }
     }
 
     //返回状态:0 success,1 邮箱重复,2其他原因
@@ -527,8 +551,8 @@
     //邀请用户,返回状态:0 success,1 剩余次数不足,2,3其他原因
     @Override
     public int InviteUser(String inviterid,String inviteemail){
+        EntityManager entitymanager = createEntityManager();
         try {
-            EntityManager entitymanager = createEntityManager();
             User user = entitymanager.find(User.class, inviterid);
             if (user == null || !user.email.equals(inviteemail)) {
                 return 3;
@@ -537,61 +561,88 @@
                 return 1;
             }
             user.invitetimes -= 1;
+            entitymanager.getTransaction().begin();
             entitymanager.merge(user);
+            entitymanager.getTransaction().commit();
             return 0;
         } catch (Exception e) {
             e.printStackTrace();
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
             return 2;
         }
-        
     }
 
     //添加一个收藏,返回状态:0 success,1 不存在,2其他原因
     @Override
     public boolean AddCollect(String userid,String seedid){
         EntityManager entitymanager = createEntityManager();
-        JPAQuery<User> query2 = new JPAQuery<>(entitymanager);
-        QUser u2 = QUser.user;
-        User user = query2.select(u2).from(u2).where(u2.userid.eq(userid)).fetchOne();
-        if (user == null) {
-            return false;
-        }
-        JPAQuery<Seed> query3 = new JPAQuery<>(entitymanager);
-        QSeed p = QSeed.seed;
-        Seed seed = query3.select(p).from(p).where(p.seedid.eq(seedid)).fetchOne();
-        if (seed == null) {
-            return false;
-        }
-        JPAQuery<String> query = new JPAQuery<>(entitymanager);
-        QUserStar u = QUserStar.userStar;
-        List<String> allSeedId = query.select(u.seedid).from(u).where(u.userid.eq(userid)).fetch();
+        try {
+            JPAQuery<User> query2 = new JPAQuery<>(entitymanager);
+            QUser u2 = QUser.user;
+            User user = query2.select(u2).from(u2).where(u2.userid.eq(userid)).fetchOne();
+            if (user == null) {
+                return false;
+            }
+            JPAQuery<Seed> query3 = new JPAQuery<>(entitymanager);
+            QSeed p = QSeed.seed;
+            Seed seed = query3.select(p).from(p).where(p.seedid.eq(seedid)).fetchOne();
+            if (seed == null) {
+                return false;
+            }
+            JPAQuery<String> query = new JPAQuery<>(entitymanager);
+            QUserStar u = QUserStar.userStar;
+            List<String> allSeedId = query.select(u.seedid).from(u).where(u.userid.eq(userid)).fetch();
 
-        if (allSeedId.contains(seedid)) {
+            if (allSeedId.contains(seedid)) {
+                return false;
+            }
+            UserStar userStar = new UserStar();
+            userStar.userid = userid;
+            userStar.seedid = seedid;
+            entitymanager.getTransaction().begin();
+            entitymanager.persist(userStar);
+            entitymanager.getTransaction().commit();
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
             return false;
+        } finally {
+            if (entitymanager != null) {
+                entitymanager.close();
+            }
         }
-        UserStar userStar = new UserStar();
-        userStar.userid = userid;
-        userStar.seedid = seedid;
-        entitymanager.persist(userStar);
-        return true;
     }
 
     //删除一个收藏,返回状态:0 success,1 不存在,2其他原因
     @Override
-    public boolean DeleteCollect(String userid,String seedid){
+    public boolean DeleteCollect(String userid, String seedid){
+        EntityManager entitymanager = createEntityManager();
         try {
-            EntityManager entitymanager = createEntityManager();
             JPAQuery<UserStar> query = new JPAQuery<>(entitymanager);
             QUserStar u = QUserStar.userStar;
             UserStar userStar = query.select(u).from(u).where(u.userid.eq(userid).and(u.seedid.eq(seedid))).fetchOne();
             if (userStar == null) {
                 return true; // 收藏不存在
             }
+            entitymanager.getTransaction().begin();
             entitymanager.remove(userStar);
+            entitymanager.getTransaction().commit();
             return true;
         } catch (Exception e) {
             e.printStackTrace();
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
             return false;
+        } finally {
+            if (entitymanager != null) {
+                entitymanager.close();
+            }
         }
         
     }
@@ -1199,7 +1250,7 @@
 
             // 1:1兑换,直接加上魔力值(假设单位是MB)
             userPT.magic -= magic;
-            userPT.upload += magic;
+            userPT.upload += magic * 10000000;
 
             // 更新分享率
             if (userPT.download > 0) {
@@ -1216,6 +1267,7 @@
             if (tx != null && tx.isActive()) {
                 tx.rollback();
             }
+            e.printStackTrace();
             logger.error("魔力值兑换上传量时发生错误: {}", e.getMessage());
             return false;
         } finally {
@@ -1254,7 +1306,7 @@
 
             // 1:1兑换,直接减去魔力值对应的下载量(假设单位是MB)
             userPT.magic -= magic;
-            userPT.download = Math.max(0, userPT.download - magic);
+            userPT.download = Math.max(0, userPT.download - magic * 10000000);
 
             // 更新分享率
             if (userPT.download > 0) {
@@ -1308,7 +1360,7 @@
 
             // 1:1兑换VIP下载次数
             userPT.magic -= magic;
-            userPT.viptime += magic;
+            userPT.viptime += magic / 100;
 
             em.merge(userPT);
             tx.commit();
@@ -1456,10 +1508,13 @@
                     profile.uploadgived = String.valueOf(uploadToGive);
 
                     em.merge(userPT);
+                    em.merge(profile);
                 }
+            } else {
+                // 如果审核不通过,删除迁移申请
+                em.remove(profile);
+                logger.info("迁移申请 {} 审核不通过,已删除", profileid);
             }
-
-            em.merge(profile);
             tx.commit();
 
             logger.info("成功审核迁移申请 {}, 结果: {}", profileid, result);
@@ -1509,19 +1564,35 @@
     @Override
     public Post[] GetPostList() {
         EntityManager entitymanager = createEntityManager();
-        JPAQuery<Post> query = new JPAQuery<>(entitymanager);
-        QPost p = QPost.post;
-        List<Post> posts = query.select(p).from(p).fetch();
-        return posts.toArray(new Post[0]);
+        try{
+            JPAQuery<Post> query = new JPAQuery<>(entitymanager);
+            QPost p = QPost.post;
+            List<Post> posts = query.select(p).from(p).fetch();
+            return posts.toArray(new Post[0]);
+        } catch (Exception e) {
+            logger.error("获取帖子列表时发生错误: {}", e.getMessage());
+            return new Post[0];
+        } finally {
+            entitymanager.close();
+            logger.info("Post list retrieved successfully.");
+        }
     }
 
     @Override
     public Post GetPost(String postid) {
         EntityManager entitymanager = createEntityManager();
-        JPAQuery<Post> query = new JPAQuery<>(entitymanager);
-        QPost p = QPost.post;
-        Post post = query.select(p).from(p).where(p.postid.eq(postid)).fetchOne();
-        return post;
+        try {
+            JPAQuery<Post> query = new JPAQuery<>(entitymanager);
+            QPost p = QPost.post;
+            Post post = query.select(p).from(p).where(p.postid.eq(postid)).fetchOne();
+            return post;
+        } catch (Exception e) {
+            logger.error("获取帖子列表时发生错误: {}", e.getMessage());
+            return new Post();
+        } finally {
+            entitymanager.close();
+            logger.info("Post list retrieved successfully.");
+        }
     }
 
     @Override
@@ -1536,28 +1607,408 @@
     @Override
     public Post[] SearchPost(String postQ) {
         EntityManager entitymanager = createEntityManager();
-        JPAQuery<Post> query = new JPAQuery<>(entitymanager);
-        QPost p = QPost.post;
-        List<Post> posts = query.select(p).from(p).fetch();
+        try {
+            JPAQuery<Post> query = new JPAQuery<>(entitymanager);
+            QPost p = QPost.post;
+            List<Post> posts = query.select(p).from(p).fetch();
 
-        if (posts == null || postQ == null || postQ.trim().isEmpty()) {
+            if (posts == null || postQ == null || postQ.trim().isEmpty()) {
+                return posts.toArray(new Post[0]);
+            }
+
+            String processedQuery = postQ.toLowerCase().trim();
+            Map<Post, Integer> postCountMap = new HashMap<>();
+            for(Post post : posts){
+                String title = post.posttitle.toLowerCase().trim();
+                int count = countCommonCharacter(processedQuery, title);
+                postCountMap.put(post, count);
+            }
+            posts.sort((s1, s2) -> {
+                int count1 = postCountMap.getOrDefault(s1, 0);
+                int count2 = postCountMap.getOrDefault(s2, 0);
+                return Integer.compare(count2, count1);
+            });
+
             return posts.toArray(new Post[0]);
+        } catch (Exception e) {
+            logger.error("搜索帖子时发生错误: {}", e.getMessage());
+            return new Post[0];
+        } finally {
+            entitymanager.close();
+            logger.info("Post search completed successfully.");
         }
-
-        String processedQuery = postQ.toLowerCase().trim();
-        Map<Post, Integer> postCountMap = new HashMap<>();
-        for(Post post : posts){
-            String title = post.posttitle.toLowerCase().trim();
-            int count = countCommonCharacter(processedQuery, title);
-            postCountMap.put(post, count);
-        }
-        posts.sort((s1, s2) -> {
-            int count1 = postCountMap.getOrDefault(s1, 0);
-            int count2 = postCountMap.getOrDefault(s2, 0);
-            return Integer.compare(count2, count1);
-        });
-
-        return posts.toArray(new Post[0]);
     }
-}
 
+    @Override
+    public int CheckAdmin(String userid) {
+        if (userid == null || userid.isEmpty()) {
+            logger.warn("参数无效: userid为空");
+            return 2; // 参数无效
+        }
+
+        EntityManager entitymanager = createEntityManager();
+        JPAQuery<String> query = new JPAQuery<>(entitymanager);
+        QAdmin a = QAdmin.admin;
+        String adminId = query.select(a.userId).from(a).where(a.userId.eq(userid)).fetchOne();
+        if (adminId == null) {
+            logger.warn("用户 {} 不是管理员", userid);
+            return 1; // 用户不是管理员
+        } else {
+            logger.info("用户 {} 是管理员", userid);
+            return 0; // 用户是管理员
+        }
+    }
+
+    @Override
+    public int InviteNewUser(String inviterid, String invitedemail) {
+        EntityManager entitymanager = createEntityManager();
+        try {
+            User user = entitymanager.find(User.class, inviterid);
+            if (user == null) {
+                return 3;
+            }
+            if (user.invitetimes <= 0) {
+                return 1;
+            }
+            user.invitetimes -= 1;
+
+            UserInvite invite = new UserInvite();
+            invite.userId = inviterid;
+            invite.inviterEmail = invitedemail;
+            invite.inviterRegistered = false;
+            invite.user = user;
+
+            entitymanager.getTransaction().begin();
+            entitymanager.merge(user);
+            entitymanager.persist(invite);
+            entitymanager.getTransaction().commit();
+            return 0;
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
+            return 2;
+        }
+    }
+
+    @Override
+    public UserStar[] GetUserStarList(String userid) {
+        if (userid == null || userid.isEmpty()) {
+            logger.warn("参数无效: userid为空");
+            return new UserStar[0];
+        }
+
+        EntityManager entitymanager = createEntityManager();
+        try {
+            JPAQuery<UserStar> query = new JPAQuery<>(entitymanager);
+            QUserStar us = QUserStar.userStar;
+            List<UserStar> stars = query.select(us).from(us).where(us.userid.eq(userid)).fetch();
+            return stars.toArray(new UserStar[0]);
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
+            return new UserStar[0];
+        } finally {
+            if (entitymanager != null) {
+                entitymanager.close();
+            }
+        }
+    }
+
+    @Override
+    public int UploadMigration(String userid, File file) {
+        if (userid == null || userid.isEmpty() || file == null) {
+            return 2; // 参数无效
+        }
+
+        EntityManager entitymanager = createEntityManager();
+
+        try {
+            // 检查用户是否存在
+            User user = entitymanager.find(User.class, userid);
+            if (user == null) {
+                return 1; // 用户不存在
+            }
+
+            // 创建迁移记录
+            Profile migration = new Profile();
+            migration.profileurl = java.util.UUID.randomUUID().toString();
+            migration.userid = userid;
+            migration.uploadtogive = "0"; // 初始上传量为0
+            migration.magictogive = "0"; // 初始魔力值为0
+            migration.downloadgived = "0"; // 初始下载量为0
+            migration.uploadgived = "0"; // 初始上传量为0
+            migration.magicgived = "0"; // 初始魔力值为0
+            migration.downloadgived = "0"; // 初始下载量为0
+            migration.exampass = false; // 初始审核状态为未通过
+            migration.user = user;
+            Path storageDir = Paths.get(config.MIGRATION_STORAGE_DIR);
+            if (!Files.exists(storageDir)) {
+                Files.createDirectories(storageDir);
+            }
+            String filename = file.getName();
+            Path target = storageDir.resolve(migration.profileurl + "_" + filename);
+            Files.copy(file.toPath(), target, StandardCopyOption.REPLACE_EXISTING);
+            migration.applicationurl = target.toString(); // 设置迁移文件的存储路径
+
+            entitymanager.getTransaction().begin();
+            entitymanager.persist(migration);
+            entitymanager.getTransaction().commit();
+
+            return 0; // 成功
+
+        } catch (Exception e) {
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
+            e.printStackTrace();
+            return 2; // 其他错误
+        } finally {
+            if (entitymanager != null) {
+                entitymanager.close();
+            }
+        }
+    }
+
+    @Override
+    public BegSeedDetail[] GetBegList() {
+        EntityManager entitymanager = createEntityManager();
+        try {
+            JPAQuery<BegInfo> query = new JPAQuery<>(entitymanager);
+            QBegInfo b = QBegInfo.begInfo;
+            List<BegInfo> begList = query.select(b).from(b).fetch();
+            
+            List<BegSeedDetail> begSeedDetailList = new ArrayList<>();
+            for (BegInfo begInfo : begList) {
+                // 查询对应的BegInfo表的Info字段
+                BegInfoDetail begInfoDetail = entitymanager.find(BegInfoDetail.class, begInfo.begid);
+                // 构造BegSeedDetail对象
+                BegSeedDetail begSeedDetail = new BegSeedDetail(begInfo, begInfoDetail);
+                begSeedDetailList.add(begSeedDetail);
+            }
+            
+            return begSeedDetailList.toArray(new BegSeedDetail[0]);
+        } catch (Exception e) {
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
+            e.printStackTrace();
+            return new BegSeedDetail[0];
+        } finally {
+            if(entitymanager != null){
+                entitymanager.close();
+            }
+        }
+    }
+
+    @Override
+    public BegInfo GetBegDetail(String begid) {
+        EntityManager entitymanager = createEntityManager();
+        try {
+            JPAQuery<BegInfo> query = new JPAQuery<>(entitymanager);
+            QBegInfo b = QBegInfo.begInfo;
+            BegInfo begDetail = query.select(b).from(b).where(b.begid.eq(begid)).fetchOne();
+            return begDetail;
+        } catch (Exception e) {
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
+            e.printStackTrace();
+            return null;
+        } finally {
+            if(entitymanager != null){
+                entitymanager.close();
+            }
+        }
+    }
+
+    @Override
+    public BegSeedDetail GetBegSeedDetail(String begid) {
+        if (begid == null || begid.isEmpty()) {
+            return null;
+        }
+
+        EntityManager entitymanager = createEntityManager();
+        try {
+            // 查询 BegSeed 表数据
+            JPAQuery<BegInfo> begQuery = new JPAQuery<>(entitymanager);
+            QBegInfo b = QBegInfo.begInfo;
+            BegInfo begInfo = begQuery.select(b).from(b).where(b.begid.eq(begid)).fetchOne();
+            
+            if (begInfo == null) {
+                return null;
+            }
+
+            // 查询 BegInfo 表的 Info 字段
+            BegInfoDetail begInfoDetail = entitymanager.find(BegInfoDetail.class, begid);
+            
+            // 构造返回对象
+            return new BegSeedDetail(begInfo, begInfoDetail);
+        } catch (Exception e) {
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
+            e.printStackTrace();
+            return null;
+        } finally {
+            if(entitymanager != null){
+                entitymanager.close();
+            }
+        }
+    }
+
+    @Override
+    public SeedWithVotes[] GetBegSeedListWithVotes(String begid) {
+        if (begid == null || begid.isEmpty()) {
+            return new SeedWithVotes[0];
+        }
+
+        EntityManager entitymanager = createEntityManager();
+        try {
+            JPAQuery<Tuple> query = new JPAQuery<>(entitymanager);
+            QSubmitSeed ss = QSubmitSeed.submitSeed;
+            QSeed s = QSeed.seed;
+
+            List<Tuple> results = query.select(s, ss.votes)
+                    .from(ss)
+                    .join(ss.seed, s)
+                    .where(ss.begInfo.begid.eq(begid))
+                    .fetch();
+
+            List<SeedWithVotes> seedsWithVotes = new java.util.ArrayList<>();
+            for (Tuple result : results) {
+                Seed seed = result.get(s);
+                Integer votes = result.get(ss.votes);
+                seedsWithVotes.add(new SeedWithVotes(seed, votes != null ? votes : 0));
+            }
+
+            return seedsWithVotes.toArray(new SeedWithVotes[0]);
+        } catch (Exception e) {
+            return new SeedWithVotes[0];
+        } finally {
+            entitymanager.close();
+        }
+    }
+
+    @Override
+    public int SubmitBegSeed(String begid, String seedid, String userid) {
+        if (begid == null || begid.isEmpty() || seedid == null || seedid.isEmpty() || userid == null || userid.isEmpty()) {
+            return 2; // 参数无效
+        }
+
+        EntityManager entitymanager = createEntityManager();
+        EntityTransaction tx = entitymanager.getTransaction();
+
+        try {
+            tx.begin();
+            
+            // 检查种子信息是否存在
+            Seed seed = entitymanager.find(Seed.class, seedid);
+            if (seed == null || !seed.seeduserid.equals(userid)) {
+                return 1;
+            }
+
+            // int ret = SubmitSeed(begid, seed);
+            BegInfo begInfo = entitymanager.find(BegInfo.class, begid);
+            if (begInfo == null) {
+                return 2;
+            }
+
+            // 检查种子是否已提交过
+            QSubmitSeed ss = QSubmitSeed.submitSeed;
+            SubmitSeed submitSeed = new JPAQuery<>(entitymanager)
+                    .select(ss)
+                    .from(ss)
+                    .where(ss.begInfo.begid.eq(begid))
+                    .where(ss.seed.seedid.eq(seed.seedid))
+                    .fetchOne();
+
+            submitSeed = new SubmitSeed();
+            submitSeed.begInfo = begInfo;
+            submitSeed.seed = seed;
+            submitSeed.votes = 0; // 初始投票数为0
+            BegInfoDetail begInfoDetail = entitymanager.find(BegInfoDetail.class, begid);
+            if (begInfoDetail == null) {
+                return 1;
+            }
+
+            entitymanager.getTransaction().begin();
+            entitymanager.persist(submitSeed);
+            entitymanager.getTransaction().commit();
+
+            // 创建提交记录
+            entitymanager.createNativeQuery("INSERT INTO SubmitSeed (beg_id, seed_id, votes) VALUES (?, ?, 0)")
+                    .setParameter(1, begid)
+                    .setParameter(2, seed.seedid)
+                    .executeUpdate();
+            return 0;
+
+        } catch (Exception e) {
+            if (tx.isActive()) {
+                tx.rollback();
+            }
+            return 3; // 其他错误
+        } finally {
+            if (entitymanager != null) {
+                entitymanager.close();
+            }
+        }
+    }
+
+    @Override
+    public int createBagSeed(BegInfo begInfo, String userid, String info) {
+        if (begInfo == null || begInfo.begid == null || begInfo.begid.isEmpty()) {
+            return 2; // 参数无效
+        }
+
+        EntityManager entitymanager = createEntityManager();
+        try {
+            BegInfoDetail begInfoDetail = entitymanager.find(BegInfoDetail.class, begInfo.begid);
+            if (begInfoDetail != null) {
+                return 1; // 已存在
+            }
+
+            User user = entitymanager.find(User.class, userid);
+            if (user == null) {
+                return 2; // 用户不存在
+            }
+
+            UserPT userPT = entitymanager.find(UserPT.class, userid);
+            if (userPT == null) {
+                return 2; // 用户PT信息不存在
+            }
+
+            if (userPT.magic < begInfo.magic) {
+                return 3; // 魔力值不足
+            }
+
+            begInfoDetail = new BegInfoDetail();
+            begInfoDetail.begId = begInfo.begid;
+            begInfoDetail.info = info;
+            begInfoDetail.userId = userid;
+            begInfoDetail.user = user;
+            userPT.magic -= begInfo.magic; // 扣除魔力值
+
+            entitymanager.getTransaction().begin();
+            entitymanager.persist(userPT);
+            entitymanager.persist(begInfo);
+            entitymanager.persist(begInfoDetail);
+            entitymanager.getTransaction().commit();
+
+            return 0;
+        } catch (Exception e) {
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
+            e.printStackTrace();
+            return 2; // 其他错误
+        } finally {
+            if (entitymanager != null) {
+                entitymanager.close();
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/database/Database2.java b/src/main/java/database/Database2.java
index 0166081..91dc8ff 100644
--- a/src/main/java/database/Database2.java
+++ b/src/main/java/database/Database2.java
@@ -3,9 +3,11 @@
 import java.util.Calendar;
 import java.util.UUID;
 import java.util.List;
+import java.util.ArrayList;
 import java.util.Map;
 import java.util.Date;
 import java.util.HashMap;
+import java.io.File;
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
@@ -25,9 +27,13 @@
 import entity.config;
 import entity.Notice;
 import entity.BegInfo;
+import entity.BegInfoDetail;
+import entity.BegSeedDetail;
 import entity.Post;
 import entity.PostReply;
 import entity.Profile;
+import entity.UserStar;
+import entity.SeedWithVotes;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -1121,4 +1127,108 @@
     public Post[] SearchPost(String userQ) {
         return null;
     }
+
+    @Override
+    public int CheckAdmin(String userid) {
+        return 0;
+    }
+
+    @Override
+    public int InviteNewUser(String inviterid, String invitedemail) {
+        return 0;
+    }
+
+    @Override
+    public UserStar[] GetUserStarList(String userid) {
+        return new UserStar[0];
+    }
+
+    @Override
+    public int UploadMigration(String userid, File file){
+        return 0;
+    }
+
+    @Override
+    public BegSeedDetail[] GetBegList() {
+        EntityManager em = null;
+        try {
+            em = emf.createEntityManager();
+            
+            JPAQuery<BegInfo> query = new JPAQuery<>(em);
+            QBegInfo b = QBegInfo.begInfo;
+            List<BegInfo> begList = query.select(b).from(b).fetch();
+            
+            List<BegSeedDetail> begSeedDetailList = new ArrayList<>();
+            for (BegInfo begInfo : begList) {
+                // 查询对应的BegInfo表的Info字段
+                BegInfoDetail begInfoDetail = em.find(BegInfoDetail.class, begInfo.begid);
+                // 构造BegSeedDetail对象
+                BegSeedDetail begSeedDetail = new BegSeedDetail(begInfo, begInfoDetail);
+                begSeedDetailList.add(begSeedDetail);
+            }
+            
+            return begSeedDetailList.toArray(new BegSeedDetail[0]);
+        } catch (Exception e) {
+            logger.error("Error getting BegList: {}", e.getMessage(), e);
+            return new BegSeedDetail[0];
+        } finally {
+            if (em != null) {
+                em.close();
+            }
+        }
+    }
+
+    @Override
+    public BegInfo GetBegDetail(String begid) {
+        return null;
+    }
+
+    @Override
+    public BegSeedDetail GetBegSeedDetail(String begid) {
+        if (begid == null || begid.isEmpty()) {
+            return null;
+        }
+
+        EntityManager em = null;
+        try {
+            em = emf.createEntityManager();
+            
+            // 查询 BegSeed 表数据
+            JPAQuery<BegInfo> begQuery = new JPAQuery<>(em);
+            QBegInfo b = QBegInfo.begInfo;
+            BegInfo begInfo = begQuery.select(b).from(b).where(b.begid.eq(begid)).fetchOne();
+            
+            if (begInfo == null) {
+                return null;
+            }
+
+            // 查询 BegInfo 表的 Info 字段
+            BegInfoDetail begInfoDetail = em.find(BegInfoDetail.class, begid);
+            
+            // 构造返回对象
+            return new BegSeedDetail(begInfo, begInfoDetail);
+        } catch (Exception e) {
+            logger.error("Error getting BegSeedDetail: {}", e.getMessage(), e);
+            return null;
+        } finally {
+            if (em != null) {
+                em.close();
+            }
+        }
+    }
+
+    @Override
+    public SeedWithVotes[] GetBegSeedListWithVotes(String begid) {
+        return new SeedWithVotes[0];
+    }
+
+    @Override
+    public int SubmitBegSeed(String begid, String seedid, String userid) {
+        return 0;
+    }
+
+    @Override
+    public int createBagSeed(BegInfo begInfo, String userid, String info) {
+        return 0;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/entity/Admin.java b/src/main/java/entity/Admin.java
new file mode 100644
index 0000000..d943295
--- /dev/null
+++ b/src/main/java/entity/Admin.java
@@ -0,0 +1,25 @@
+package entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import com.querydsl.core.annotations.QueryEntity;
+
+@QueryEntity
+@Entity(name = "Admin")
+@Table(name = "admin")
+public class Admin {
+    
+    @Id
+    @Column(name = "user_id", length = 36, nullable = false)
+    public String userId;
+    
+    public Admin() {
+    }
+    
+    public Admin(String userId) {
+        this.userId = userId;
+    }
+}
diff --git a/src/main/java/entity/BegInfoDetail.java b/src/main/java/entity/BegInfoDetail.java
new file mode 100644
index 0000000..75bd842
--- /dev/null
+++ b/src/main/java/entity/BegInfoDetail.java
@@ -0,0 +1,35 @@
+package entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "BegDetail")
+public class BegInfoDetail {
+    @Id
+    @Column(name = "beg_id", length = 64, nullable = false)
+    public String begId;
+
+    @Column(name = "user_id", length = 36, nullable = false)
+    public String userId;
+
+    @Column(name = "Info", nullable = false, columnDefinition = "TEXT")
+    public String info;
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "user_id", insertable = false, updatable = false)
+    public User user;
+
+    public BegInfoDetail() {}
+
+    public BegInfoDetail(String begId, String userId, String info) {
+        this.begId = begId;
+        this.userId = userId;
+        this.info = info;
+    }
+}
diff --git a/src/main/java/entity/BegSeedDetail.java b/src/main/java/entity/BegSeedDetail.java
new file mode 100644
index 0000000..82dd9ec
--- /dev/null
+++ b/src/main/java/entity/BegSeedDetail.java
@@ -0,0 +1,45 @@
+package entity;
+
+import java.util.Date;
+
+/**
+ * 包含 BegSeed 表数据和对应 BegInfo 表 Info 字段的复合类
+ * 用于 getBegSeedDetail 方法返回完整的求种详情
+ */
+public class BegSeedDetail {
+    // BegSeed 表的字段
+    public String begid;
+    public int begnumbers;
+    public int magic;
+    public Date endtime;
+    public int hasseed;
+    
+    // BegInfo 表的 Info 字段
+    public String info;
+
+    public BegSeedDetail() {}
+
+    public BegSeedDetail(String begid, int begnumbers, int magic, Date endtime, int hasseed, String info) {
+        this.begid = begid;
+        this.begnumbers = begnumbers;
+        this.magic = magic;
+        this.endtime = endtime;
+        this.hasseed = hasseed;
+        this.info = info;
+    }
+
+    // 从 BegInfo 和 BegInfoDetail 构造
+    public BegSeedDetail(BegInfo begInfo, BegInfoDetail begInfoDetail) {
+        if (begInfo != null) {
+            this.begid = begInfo.begid;
+            this.begnumbers = begInfo.begnumbers;
+            this.magic = begInfo.magic;
+            this.endtime = begInfo.endtime;
+            this.hasseed = begInfo.hasseed;
+        }
+        
+        if (begInfoDetail != null) {
+            this.info = begInfoDetail.info;
+        }
+    }
+}
diff --git a/src/main/java/entity/SeedWithVotes.java b/src/main/java/entity/SeedWithVotes.java
new file mode 100644
index 0000000..96a2ba1
--- /dev/null
+++ b/src/main/java/entity/SeedWithVotes.java
@@ -0,0 +1,17 @@
+package entity;
+
+/**
+ * 包含种子信息和投票数的复合类
+ */
+public class SeedWithVotes {
+    public Seed seed;
+    public int votes;
+    
+    public SeedWithVotes() {
+    }
+    
+    public SeedWithVotes(Seed seed, int votes) {
+        this.seed = seed;
+        this.votes = votes;
+    }
+}
diff --git a/src/main/java/entity/config.java b/src/main/java/entity/config.java
index 3b9341b..0230066 100644
--- a/src/main/java/entity/config.java
+++ b/src/main/java/entity/config.java
@@ -1,19 +1,88 @@
 package entity;
 
 public class config {
-    public static final String TrackerURL="";
-    public static final int FarmNumber=3;
-    public static final int FakeTime=3;
-    public static final int BegVote=3;
-    public static final int CheatTime=5;
-    // 请根据实际环境修改为可达的地址
+    // 可配置的参数 - 使用静态变量而非final,以便动态修改
+    private static int farmNumber = 3;
+    private static int fakeTime = 3;
+    private static int begVote = 3;
+    private static int cheatTime = 5;
+    
+    // 数据库相关配置 - 保持final,因为运行时不应修改
     public static final String SqlURL = "10.126.59.25:3306";
     public static final String Database = "pt_database_test";
     public static final String TestDatabase = "pt_database_test";
     public static final String SqlPassword = "123456";
     public static final String SqlUsername = "root";
     public static final String TORRENT_STORAGE_DIR = "torrents";
-    public static final String trackerHost="0.0.0.0";
-    public static final int trackerPort=6969;
-    public static final int capturePort=6970;
+    public static final String APPEAL_STORAGE_DIR = "appeals";
+    public static final String MIGRATION_STORAGE_DIR = "migrations";
+    public static final String trackerHost = "0.0.0.0";
+    public static final int trackerPort = 6969;
+    public static final int capturePort = 6970;
+    
+    // FarmNumber 的 getter 和 setter
+    public static int getFarmNumber() {
+        return farmNumber;
+    }
+    
+    public static void setFarmNumber(int farmNumber) {
+        if (farmNumber > 0) {
+            config.farmNumber = farmNumber;
+        } else {
+            throw new IllegalArgumentException("FarmNumber must be positive");
+        }
+    }
+    
+    // FakeTime 的 getter 和 setter
+    public static int getFakeTime() {
+        return fakeTime;
+    }
+    
+    public static void setFakeTime(int fakeTime) {
+        if (fakeTime > 0) {
+            config.fakeTime = fakeTime;
+        } else {
+            throw new IllegalArgumentException("FakeTime must be positive");
+        }
+    }
+    
+    // BegVote 的 getter 和 setter
+    public static int getBegVote() {
+        return begVote;
+    }
+    
+    public static void setBegVote(int begVote) {
+        if (begVote > 0) {
+            config.begVote = begVote;
+        } else {
+            throw new IllegalArgumentException("BegVote must be positive");
+        }
+    }
+    
+    // CheatTime 的 getter 和 setter
+    public static int getCheatTime() {
+        return cheatTime;
+    }
+    
+    public static void setCheatTime(int cheatTime) {
+        if (cheatTime > 0) {
+            config.cheatTime = cheatTime;
+        } else {
+            throw new IllegalArgumentException("CheatTime must be positive");
+        }
+    }
+    
+    // 获取所有配置参数的方法
+    public static String getAllConfigs() {
+        return String.format("Config: FarmNumber=%d, FakeTime=%d, BegVote=%d, CheatTime=%d",
+                farmNumber, fakeTime, begVote, cheatTime);
+    }
+    
+    // 重置所有参数为默认值
+    public static void resetToDefaults() {
+        farmNumber = 3;
+        fakeTime = 3;
+        begVote = 3;
+        cheatTime = 5;
+    }
 }
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index bafddce..3c8a9f3 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1 +1,5 @@
-server.port=8081
\ No newline at end of file
+server.port=8082
+
+# 文件上传配置
+spring.servlet.multipart.max-file-size=100MB
+spring.servlet.multipart.max-request-size=100MB
\ No newline at end of file