更新求种后端函数
Change-Id: I9e593e5eecfc6337120f75b3f6338f8279579dd1
diff --git a/.gitignore b/.gitignore
index 1d72d10..3c68961 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,6 @@
target/
.vscode/
torrents/
+appeals/
+migrations/
front/node_modules
\ No newline at end of file
diff --git a/appeals/0a905651-b07b-418c-9256-561ffef6fd27_550e8400-e29b-41d4-a716-4466554400006127619759885714672C8-Main+Memory.pdf b/appeals/0a905651-b07b-418c-9256-561ffef6fd27_550e8400-e29b-41d4-a716-4466554400006127619759885714672C8-Main+Memory.pdf
new file mode 100644
index 0000000..4249fe9
--- /dev/null
+++ b/appeals/0a905651-b07b-418c-9256-561ffef6fd27_550e8400-e29b-41d4-a716-4466554400006127619759885714672C8-Main+Memory.pdf
Binary files differ
diff --git a/appeals/1ec0d417-3e95-4db5-a09f-c969e0750310_550e8400-e29b-41d4-a716-44665544000019228163651766111265555.png b/appeals/1ec0d417-3e95-4db5-a09f-c969e0750310_550e8400-e29b-41d4-a716-44665544000019228163651766111265555.png
new file mode 100644
index 0000000..2b1f4cd
--- /dev/null
+++ b/appeals/1ec0d417-3e95-4db5-a09f-c969e0750310_550e8400-e29b-41d4-a716-44665544000019228163651766111265555.png
Binary files differ
diff --git a/appeals/3cd801c1-21a5-4d2c-a2ad-c038d10337db_550e8400-e29b-41d4-a716-44665544000014156435666049132835C8-Main+Memory.pdf b/appeals/3cd801c1-21a5-4d2c-a2ad-c038d10337db_550e8400-e29b-41d4-a716-44665544000014156435666049132835C8-Main+Memory.pdf
new file mode 100644
index 0000000..4249fe9
--- /dev/null
+++ b/appeals/3cd801c1-21a5-4d2c-a2ad-c038d10337db_550e8400-e29b-41d4-a716-44665544000014156435666049132835C8-Main+Memory.pdf
Binary files differ
diff --git a/migrations/1b19b0fa-c565-43c7-99f3-ed45f7df69e5_550e8400-e29b-41d4-a716-44665544000011275178369492505304C8-Main+Memory.pdf b/migrations/1b19b0fa-c565-43c7-99f3-ed45f7df69e5_550e8400-e29b-41d4-a716-44665544000011275178369492505304C8-Main+Memory.pdf
new file mode 100644
index 0000000..4249fe9
--- /dev/null
+++ b/migrations/1b19b0fa-c565-43c7-99f3-ed45f7df69e5_550e8400-e29b-41d4-a716-44665544000011275178369492505304C8-Main+Memory.pdf
Binary files differ
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
diff --git a/src/test/java/cheattest/cheatsystest.java b/src/test/java/cheattest/cheatsystest.java
index 72873dc..a70de9b 100644
--- a/src/test/java/cheattest/cheatsystest.java
+++ b/src/test/java/cheattest/cheatsystest.java
@@ -283,7 +283,7 @@
Seed seed = new Seed();
seed.seedid = seedId;
seed.seeduserid = userId;
- seed.faketime = 100 + i; // 设置为大于 config.FakeTime 的值
+ seed.faketime = 100 + i; // 设置为大于 config.getFakeTime() 的值
seed.lastfakecheck = new Date();
seed.outurl = "http://example.com/fake" + i;
seed.title = "Fake Seed " + i;
@@ -369,8 +369,8 @@
return IntStream.range(0, 10)
.mapToObj(i -> DynamicTest.dynamicTest("PunishUser test #" + i, () -> {
// 配置参数
- int cheatTime = config.CheatTime;
- int fakeTime = config.FakeTime;
+ int cheatTime = config.getCheatTime();
+ int fakeTime = config.getFakeTime();
// 插入用户 1(作弊用户)
String userId1 = UUID.randomUUID().toString();
diff --git "a/\345\274\200\345\217\221\346\226\207\346\241\243/create.sql" "b/\345\274\200\345\217\221\346\226\207\346\241\243/create.sql"
index 24fe897..2f66b7c 100644
--- "a/\345\274\200\345\217\221\346\226\207\346\241\243/create.sql"
+++ "b/\345\274\200\345\217\221\346\226\207\346\241\243/create.sql"
@@ -190,6 +190,8 @@
FOREIGN KEY (`seed_id`) REFERENCES `Seed` (`seed_id`) ON DELETE CASCADE
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
+<<<<<<< Updated upstream
+<<<<<<< Updated upstream
-- 种子促销表
CREATE TABLE `SeedPromotion` (
`promotion_id` VARCHAR(64) NOT NULL,
@@ -199,4 +201,15 @@
`discount` TINYINT NOT NULL DEFAULT 1 COMMENT '折扣率, 1表示无折扣',
PRIMARY KEY (`promotion_id`),
FOREIGN KEY (`seed_id`) REFERENCES `Seed` (`seed_id`) ON DELETE CASCADE
-) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
\ No newline at end of file
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
+
+CREATE TABLE `BegInfo` (
+ `beg_id` varchar(64) NOT NULL,
+ `user_id` varchar(36) NOT NULL,
+ `Info` text NOT NULL,
+ PRIMARY KEY (`beg_id`),
+ CONSTRAINT `fk_BegInfo_BegSeed` FOREIGN KEY (`beg_id`) REFERENCES `BegSeed` (`beg_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT `fk_BegInfo_User` FOREIGN KEY (`user_id`) REFERENCES `User` (`user_id`) ON DELETE CASCADE
+
+) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci
+