更新求种后端函数
Change-Id: I9e593e5eecfc6337120f75b3f6338f8279579dd1
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