新增SubmitSeed和UserVotes实体类

Change-Id: Id463803db4e94f5d71b2ab7d6509e7374f3185a1
diff --git a/src/main/java/database/Database2.java b/src/main/java/database/Database2.java
index 2e37a99..79c55f9 100644
--- a/src/main/java/database/Database2.java
+++ b/src/main/java/database/Database2.java
@@ -1,5 +1,987 @@
 package database;
 
+import java.util.Calendar;
+import java.util.UUID;
+import java.util.List;
+import java.util.Date;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
+import javax.persistence.Persistence;
+
+import com.querydsl.jpa.impl.JPAQuery;
+import com.querydsl.core.Tuple;
+import object.QBegInfo;
+import object.QUserVotes;
+import object.QSubmitSeed;
+import object.QProfile;
+import object.QSeed;
+import object.Seed;
+import object.User;
+import object.UserPT;
+import object.Notice;
+import object.BegInfo;
+import object.Post;
+import object.PostReply;
+import object.Profile;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 // public class Database2 implements DataManagerInterface {
-    
-// }
+
+//     private EntityManagerFactory emf;
+//     private static final Logger logger = LoggerFactory.getLogger(Database2.class);
+
+//     // 构造函数,初始化EntityManagerFactory
+//     public Database2() {
+//         this.emf = Persistence.createEntityManagerFactory("myPersistenceUnit"); // 使用 persistence.xml 中定义的持久化单元名称。
+//     }
+
+//     @Override
+//     public int AddBegSeed(BegInfo info) {
+//         if (info == null || info.begid == null || info.begid.isEmpty()) {
+//             logger.warn("Invalid parameter: info is null or begid is empty");
+//             return 2;
+//         }
+
+//         EntityManager em = null;
+//         EntityTransaction tx = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             tx = em.getTransaction();
+//             tx.begin();
+
+//             // 检查是否重复
+//             BegInfo existingBeg = em.find(BegInfo.class, info.begid);
+//             if (existingBeg != null) {
+//                 logger.warn("BegSeed with ID {} already exists", info.begid);
+//                 return 1;
+//             }
+
+//             // 设置默认值
+//             if (info.endtime == null) {
+//                 // 设置默认14天截止期
+//                 Calendar calendar = Calendar.getInstance();
+//                 calendar.add(Calendar.DAY_OF_MONTH, 14);
+//                 info.endtime = calendar.getTime();
+//             }
+//             info.hasseed = false;
+
+//             // 保存新的求种信息
+//             em.persist(info);
+//             tx.commit();
+
+//             logger.info("Successfully added new BegSeed with ID: {}", info.begid);
+//             return 0;
+
+//         } catch (Exception e) {
+//             if (tx != null && tx.isActive()) {
+//                 tx.rollback();
+//             }
+//             logger.error("Error adding BegSeed: {}", e.getMessage());
+//             return 2;
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public int UpdateBegSeed(BegInfo info) {
+//         if (info == null || info.begid == null || info.begid.isEmpty()) {
+//             logger.warn("Invalid parameter: info is null or begid is empty");
+//             return 2;
+//         }
+
+//         EntityManager em = null;
+//         EntityTransaction tx = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             tx = em.getTransaction();
+//             tx.begin();
+
+//             // 检查是否存在
+//             BegInfo existingBeg = em.find(BegInfo.class, info.begid);
+//             if (existingBeg == null) {
+//                 logger.warn("BegSeed with ID {} does not exist", info.begid);
+//                 return 1;
+//             }
+
+//             // 保持原有值不变的字段
+//             info.hasseed = existingBeg.hasseed;
+//             if (info.endtime == null) {
+//                 info.endtime = existingBeg.endtime;
+//             }
+
+//             // 更新求种信息
+//             em.merge(info);
+//             tx.commit();
+
+//             logger.info("Successfully updated BegSeed with ID: {}", info.begid);
+//             return 0;
+
+//         } catch (Exception e) {
+//             if (tx != null && tx.isActive()) {
+//                 tx.rollback();
+//             }
+//             logger.error("Error updating BegSeed: {}", e.getMessage());
+//             return 2;
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public int DeleteBegSeed(String begid) {
+//         if (begid == null || begid.isEmpty()) {
+//             logger.warn("Invalid parameter: begid is null or empty");
+//             return 2;
+//         }
+
+//         EntityManager em = null;
+//         EntityTransaction tx = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             tx = em.getTransaction();
+//             tx.begin();
+
+//             // 查找要删除的求种信息
+//             BegInfo begInfo = em.find(BegInfo.class, begid);
+//             if (begInfo == null) {
+//                 logger.warn("BegSeed with ID {} does not exist", begid);
+//                 return 1;
+//             }
+
+//             // 删除求种信息
+//             em.remove(begInfo);
+//             tx.commit();
+
+//             logger.info("Successfully deleted BegSeed with ID: {}", begid);
+//             return 0;
+
+//         } catch (Exception e) {
+//             if (tx != null && tx.isActive()) {
+//                 tx.rollback();
+//             }
+//             logger.error("Error deleting BegSeed: {}", e.getMessage());
+//             return 2;
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public int VoteSeed(String begId, String seedId, String userId) {
+//         if (begId == null || seedId == null || userId == null ||
+//                 begId.isEmpty() || seedId.isEmpty() || userId.isEmpty()) {
+//             logger.warn("Invalid parameters: begId, seedId or userId is null or empty");
+//             return 2;
+//         }
+
+//         EntityManager em = null;
+//         EntityTransaction tx = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             tx = em.getTransaction();
+//             tx.begin();
+
+//             // 检查求种信息是否存在
+//             BegInfo begInfo = em.find(BegInfo.class, begId);
+//             if (begInfo == null) {
+//                 logger.warn("BegSeed with ID {} does not exist", begId);
+//                 return 2;
+//             }
+
+//             // 检查用户是否已投票
+//             QUserVotes uv = QUserVotes.userVotes;
+//             Long voteCount = new JPAQuery<>(em)
+//                     .select(uv.count())
+//                     .from(uv)
+//                     .where(uv.userId.eq(userId)
+//                             .and(uv.begId.eq(begId))
+//                             .and(uv.seedId.eq(seedId)))
+//                     .fetchOne();
+
+//             if (voteCount > 0) {
+//                 logger.warn("User {} has already voted for seed {} in beg {}", userId, seedId, begId);
+//                 return 1;
+//             }
+
+//             // 创建新的投票记录
+//             em.createNativeQuery("INSERT INTO UserVotes (user_id, beg_id, seed_id, created_at) " +
+//                     "VALUES (?, ?, ?, CURRENT_TIMESTAMP)")
+//                     .setParameter(1, userId)
+//                     .setParameter(2, begId)
+//                     .setParameter(3, seedId)
+//                     .executeUpdate();
+
+//             // 更新SubmitSeed表中的投票数
+//             em.createQuery("UPDATE SubmitSeed s SET s.votes = s.votes + 1 " +
+//                     "WHERE s.begId = :begId AND s.seedId = :seedId")
+//                     .setParameter("begId", begId)
+//                     .setParameter("seedId", seedId)
+//                     .executeUpdate();
+
+//             tx.commit();
+//             logger.info("Successfully added vote from user {} for seed {} in beg {}",
+//                     userId, seedId, begId);
+//             return 0;
+
+//         } catch (Exception e) {
+//             if (tx != null && tx.isActive()) {
+//                 tx.rollback();
+//             }
+//             logger.error("Error voting for seed: {}", e.getMessage());
+//             return 2;
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public int SubmitSeed(String begid, Seed seed) {
+//         if (begid == null || seed == null || begid.isEmpty() || seed.seedid == null) {
+//             logger.warn("Invalid parameters: begid or seed is null or empty");
+//             return 2;
+//         }
+
+//         EntityManager em = null;
+//         EntityTransaction tx = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             tx = em.getTransaction();
+//             tx.begin();
+
+//             // 检查求种信息是否存在
+//             BegInfo begInfo = em.find(BegInfo.class, begid);
+//             if (begInfo == null) {
+//                 logger.warn("BegSeed with ID {} does not exist", begid);
+//                 return 2;
+//             }
+
+//             // 检查种子是否已提交过
+//             QSubmitSeed ss = QSubmitSeed.submitSeed;
+//             Long submitCount = new JPAQuery<>(em)
+//                     .select(ss.count())
+//                     .from(ss)
+//                     .where(ss.begId.eq(begid)
+//                             .and(ss.seedId.eq(seed.seedid)))
+//                     .fetchOne();
+
+//             if (submitCount > 0) {
+//                 logger.warn("Seed {} has already been submitted for beg {}", seed.seedid, begid);
+//                 return 1;
+//             }
+
+//             // 保存种子信息(如果不存在)
+//             if (em.find(Seed.class, seed.seedid) == null) {
+//                 em.persist(seed);
+//             }
+
+//             // 创建提交记录
+//             em.createNativeQuery("INSERT INTO SubmitSeed (beg_id, seed_id, votes) VALUES (?, ?, 0)")
+//                     .setParameter(1, begid)
+//                     .setParameter(2, seed.seedid)
+//                     .executeUpdate();
+
+//             tx.commit();
+//             logger.info("Successfully submitted seed {} for beg {}", seed.seedid, begid);
+//             return 0;
+
+//         } catch (Exception e) {
+//             if (tx != null && tx.isActive()) {
+//                 tx.rollback();
+//             }
+//             logger.error("Error submitting seed: {}", e.getMessage());
+//             return 2;
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public void SettleBeg() {
+//         EntityManager em = null;
+//         EntityTransaction tx = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             tx = em.getTransaction();
+//             tx.begin();
+
+//             // 1. 获取所有已过期且未完成的求种信息
+//             QBegInfo b = QBegInfo.begInfo;
+//             List<BegInfo> expiredBegs = new JPAQuery<>(em)
+//                     .select(b)
+//                     .from(b)
+//                     .where(b.endtime.loe(new Date())
+//                             .and(b.hasseed.eq(false)))
+//                     .fetch();
+
+//             for (BegInfo beg : expiredBegs) {
+//                 // 2. 查找投票最多的提交任务
+//                 QSubmitSeed ss = QSubmitSeed.submitSeed;
+//                 Tuple topSubmission = new JPAQuery<>(em)
+//                         .select(ss.seedId, ss.votes)
+//                         .from(ss)
+//                         .where(ss.begId.eq(beg.begid))
+//                         .orderBy(ss.votes.desc())
+//                         .limit(1)
+//                         .fetchOne();
+
+//                 if (topSubmission != null && topSubmission.get(ss.votes) > 0) {
+//                     String seedId = topSubmission.get(ss.seedId);
+
+//                     // 3. 获取上传者ID
+//                     QSeed s = QSeed.seed;
+//                     String ownerId = new JPAQuery<>(em)
+//                             .select(s.seeduserid)
+//                             .from(s)
+//                             .where(s.seedid.eq(seedId))
+//                             .fetchOne();
+
+//                     // 4. 获取上传者的PT信息并更新魔力值
+//                     UserPT ownerPT = em.find(UserPT.class, ownerId);
+//                     if (ownerPT != null) {
+//                         // 5. 发放奖励
+//                         ownerPT.magic += beg.magic;
+//                         em.merge(ownerPT);
+
+//                         // 6. 更新求种状态
+//                         beg.hasseed = true;
+//                         em.merge(beg);
+
+//                         logger.info("Reward {} magic points awarded to user {} for beg {}",
+//                                 beg.magic, ownerId, beg.begid);
+//                     }
+//                 }
+//             }
+
+//             tx.commit();
+//             logger.info("Successfully settled {} expired beg requests", expiredBegs.size());
+
+//         } catch (Exception e) {
+//             if (tx != null && tx.isActive()) {
+//                 tx.rollback();
+//             }
+//             logger.error("Error settling beg requests: {}", e.getMessage(), e);
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public int AddPost(Post post) {
+//         if (post == null || post.postid == null || post.postid.isEmpty()) {
+//             logger.warn("Invalid parameter: post is null or postid is empty");
+//             return 2;
+//         }
+
+//         EntityManager em = null;
+//         EntityTransaction tx = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             tx = em.getTransaction();
+//             tx.begin();
+
+//             // 检查是否重复
+//             Post existingPost = em.find(Post.class, post.postid);
+//             if (existingPost != null) {
+//                 logger.warn("Post with ID {} already exists", post.postid);
+//                 return 1;
+//             }
+
+//             // 检查用户是否存在
+//             User user = em.find(User.class, post.postuserid);
+//             if (user == null) {
+//                 logger.warn("User with ID {} does not exist", post.postuserid);
+//                 return 2;
+//             }
+
+//             // 设置初始值
+//             if (post.posttime == null) {
+//                 post.posttime = new Date();
+//             }
+//             post.replytime = 0;
+//             post.readtime = 0;
+
+//             // 保存帖子
+//             em.persist(post);
+//             tx.commit();
+
+//             logger.info("Successfully added new post with ID: {}", post.postid);
+//             return 0;
+
+//         } catch (Exception e) {
+//             if (tx != null && tx.isActive()) {
+//                 tx.rollback();
+//             }
+//             logger.error("Error adding post: {}", e.getMessage());
+//             return 2;
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public int UpdatePost(Post post) {
+//         if (post == null || post.postid == null || post.postid.isEmpty()) {
+//             logger.warn("Invalid parameter: post is null or postid is empty");
+//             return 2;
+//         }
+
+//         EntityManager em = null;
+//         EntityTransaction tx = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             tx = em.getTransaction();
+//             tx.begin();
+
+//             // 检查帖子是否存在
+//             Post existingPost = em.find(Post.class, post.postid);
+//             if (existingPost == null) {
+//                 logger.warn("Post with ID {} does not exist", post.postid);
+//                 return 1;
+//             }
+
+//             // 保持原有不可修改的字段
+//             post.postuserid = existingPost.postuserid;
+//             post.posttime = existingPost.posttime;
+//             post.replytime = existingPost.replytime;
+//             post.readtime = existingPost.readtime;
+
+//             // 更新帖子
+//             em.merge(post);
+//             tx.commit();
+
+//             logger.info("Successfully updated post with ID: {}", post.postid);
+//             return 0;
+
+//         } catch (Exception e) {
+//             if (tx != null && tx.isActive()) {
+//                 tx.rollback();
+//             }
+//             logger.error("Error updating post: {}", e.getMessage());
+//             return 2;
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public int DeletePost(String postid) {
+//         if (postid == null || postid.isEmpty()) {
+//             logger.warn("Invalid parameter: postid is null or empty");
+//             return 2;
+//         }
+
+//         EntityManager em = null;
+//         EntityTransaction tx = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             tx = em.getTransaction();
+//             tx.begin();
+
+//             // 查找要删除的帖子
+//             Post post = em.find(Post.class, postid);
+//             if (post == null) {
+//                 logger.warn("Post with ID {} does not exist", postid);
+//                 return 1;
+//             }
+
+//             // 删除帖子(由于设置了级联删除,相关的回复会自动删除)
+//             em.remove(post);
+//             tx.commit();
+
+//             logger.info("Successfully deleted post with ID: {}", postid);
+//             return 0;
+
+//         } catch (Exception e) {
+//             if (tx != null && tx.isActive()) {
+//                 tx.rollback();
+//             }
+//             logger.error("Error deleting post: {}", e.getMessage());
+//             return 2;
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public int AddComment(String postid, String userid, String comment) {
+//         if (postid == null || postid.isEmpty() ||
+//                 userid == null || userid.isEmpty() ||
+//                 comment == null || comment.isEmpty()) {
+//             logger.warn("Invalid parameters: postid, userid or comment is null or empty");
+//             return 2;
+//         }
+
+//         EntityManager em = null;
+//         EntityTransaction tx = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             tx = em.getTransaction();
+//             tx.begin();
+
+//             // 检查帖子是否存在
+//             Post post = em.find(Post.class, postid);
+//             if (post == null) {
+//                 logger.warn("Post with ID {} does not exist", postid);
+//                 return 1;
+//             }
+
+//             // 检查评论用户是否存在
+//             User user = em.find(User.class, userid);
+//             if (user == null) {
+//                 logger.warn("User with ID {} does not exist", userid);
+//                 return 1;
+//             }
+
+//             // 创建新的回复
+//             PostReply reply = new PostReply();
+//             reply.replyid = UUID.randomUUID().toString();
+//             reply.postid = postid;
+//             reply.content = comment;
+//             reply.authorid = userid;
+//             reply.createdAt = new Date();
+
+//             // 保存回复
+//             em.persist(reply);
+
+//             // 更新帖子的回复数
+//             post.replytime += 1;
+//             em.merge(post);
+
+//             tx.commit();
+
+//             logger.info("Successfully added comment by user {} to post {}, reply ID: {}",
+//                     userid, postid, reply.replyid);
+//             return 0;
+
+//         } catch (Exception e) {
+//             if (tx != null && tx.isActive()) {
+//                 tx.rollback();
+//             }
+//             logger.error("Error adding comment: {}", e.getMessage());
+//             return 2;
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public int DeleteComment(String postid, String commentid) {
+//         if (postid == null || postid.isEmpty() || commentid == null || commentid.isEmpty()) {
+//             logger.warn("Invalid parameters: postid or commentid is null or empty");
+//             return 2;
+//         }
+
+//         EntityManager em = null;
+//         EntityTransaction tx = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             tx = em.getTransaction();
+//             tx.begin();
+
+//             // 检查帖子是否存在
+//             Post post = em.find(Post.class, postid);
+//             if (post == null) {
+//                 logger.warn("Post with ID {} does not exist", postid);
+//                 return 1;
+//             }
+
+//             // 检查评论是否存在且属于该帖子
+//             PostReply reply = em.find(PostReply.class, commentid);
+//             if (reply == null || !reply.postid.equals(postid)) {
+//                 logger.warn("Comment {} does not exist or does not belong to post {}", commentid, postid);
+//                 return 1;
+//             }
+
+//             // 删除评论
+//             em.remove(reply);
+
+//             // 更新帖子的回复数
+//             post.replytime = Math.max(0, post.replytime - 1);
+//             em.merge(post);
+
+//             tx.commit();
+
+//             logger.info("Successfully deleted comment {} from post {}", commentid, postid);
+//             return 0;
+
+//         } catch (Exception e) {
+//             if (tx != null && tx.isActive()) {
+//                 tx.rollback();
+//             }
+//             logger.error("Error deleting comment: {}", e.getMessage());
+//             return 2;
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public boolean ExchangeMagicToUpload(String userid, int magic) {
+//         if (userid == null || userid.isEmpty() || magic <= 0) {
+//             logger.warn("参数无效: userid为空或magic <= 0");
+//             return false;
+//         }
+
+//         EntityManager em = null;
+//         EntityTransaction tx = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             tx = em.getTransaction();
+//             tx.begin();
+
+//             UserPT userPT = em.find(UserPT.class, userid);
+//             if (userPT == null) {
+//                 logger.warn("未找到用户 {} 的PT信息", userid);
+//                 return false;
+//             }
+
+//             if (userPT.magic < magic) {
+//                 logger.warn("用户 {} 的魔力值不足", userid);
+//                 return false;
+//             }
+
+//             // 1:1兑换,直接加上魔力值(假设单位是MB)
+//             userPT.magic -= magic;
+//             userPT.upload += magic;
+
+//             // 更新分享率
+//             if (userPT.download > 0) {
+//                 userPT.share = (double) userPT.upload / userPT.download;
+//             }
+
+//             em.merge(userPT);
+//             tx.commit();
+
+//             logger.info("用户 {} 成功将 {} 点魔力值兑换为 {}MB 上传量", userid, magic, magic);
+//             return true;
+
+//         } catch (Exception e) {
+//             if (tx != null && tx.isActive()) {
+//                 tx.rollback();
+//             }
+//             logger.error("魔力值兑换上传量时发生错误: {}", e.getMessage());
+//             return false;
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public boolean ExchangeMagicToDownload(String userid, int magic) {
+//         if (userid == null || userid.isEmpty() || magic <= 0) {
+//             logger.warn("参数无效: userid为空或magic <= 0");
+//             return false;
+//         }
+
+//         EntityManager em = null;
+//         EntityTransaction tx = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             tx = em.getTransaction();
+//             tx.begin();
+
+//             UserPT userPT = em.find(UserPT.class, userid);
+//             if (userPT == null) {
+//                 logger.warn("未找到用户 {} 的PT信息", userid);
+//                 return false;
+//             }
+
+//             if (userPT.magic < magic) {
+//                 logger.warn("用户 {} 的魔力值不足", userid);
+//                 return false;
+//             }
+
+//             // 1:1兑换,直接减去魔力值对应的下载量(假设单位是MB)
+//             userPT.magic -= magic;
+//             userPT.download = Math.max(0, userPT.download - magic);
+
+//             // 更新分享率
+//             if (userPT.download > 0) {
+//                 userPT.share = (double) userPT.upload / userPT.download;
+//             }
+
+//             em.merge(userPT);
+//             tx.commit();
+
+//             logger.info("用户 {} 成功将 {} 点魔力值兑换为 {}MB 下载量减免", userid, magic, magic);
+//             return true;
+
+//         } catch (Exception e) {
+//             if (tx != null && tx.isActive()) {
+//                 tx.rollback();
+//             }
+//             logger.error("魔力值兑换下载量时发生错误: {}", e.getMessage());
+//             return false;
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public boolean ExchangeMagicToVip(String userid, int magic) {
+//         if (userid == null || userid.isEmpty() || magic <= 0) {
+//             logger.warn("参数无效: userid为空或magic <= 0");
+//             return false;
+//         }
+
+//         EntityManager em = null;
+//         EntityTransaction tx = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             tx = em.getTransaction();
+//             tx.begin();
+
+//             UserPT userPT = em.find(UserPT.class, userid);
+//             if (userPT == null) {
+//                 logger.warn("未找到用户 {} 的PT信息", userid);
+//                 return false;
+//             }
+
+//             if (userPT.magic < magic) {
+//                 logger.warn("用户 {} 的魔力值不足", userid);
+//                 return false;
+//             }
+
+//             // 1:1兑换VIP下载次数
+//             userPT.magic -= magic;
+//             userPT.viptime += magic;
+
+//             em.merge(userPT);
+//             tx.commit();
+
+//             logger.info("用户 {} 成功将 {} 点魔力值兑换为 {} 次VIP下载次数", userid, magic, magic);
+//             return true;
+
+//         } catch (Exception e) {
+//             if (tx != null && tx.isActive()) {
+//                 tx.rollback();
+//             }
+//             logger.error("魔力值兑换VIP下载次数时发生错误: {}", e.getMessage());
+//             return false;
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public boolean UploadTransmitProfile(Profile profile) {
+//         if (profile == null || profile.profileurl == null || profile.profileurl.isEmpty() ||
+//                 profile.userid == null || profile.userid.isEmpty()) {
+//             logger.warn("参数无效: profile为空或必要字段为空");
+//             return false;
+//         }
+
+//         EntityManager em = null;
+//         EntityTransaction tx = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             tx = em.getTransaction();
+//             tx.begin();
+
+//             // 检查用户是否存在
+//             User user = em.find(User.class, profile.userid);
+//             if (user == null) {
+//                 logger.warn("用户 {} 不存在", profile.userid);
+//                 return false;
+//             }
+
+//             // 检查是否已存在相同的迁移申请
+//             Profile existingProfile = em.find(Profile.class, profile.profileurl);
+//             if (existingProfile != null) {
+//                 logger.warn("迁移申请 {} 已存在", profile.profileurl);
+//                 return false;
+//             }
+
+//             // 设置初始值
+//             profile.exampass = false;
+//             profile.magicgived = "0";
+//             profile.uploadgived = "0";
+
+//             // 保存迁移申请
+//             em.persist(profile);
+//             tx.commit();
+
+//             logger.info("成功上传迁移申请 {}", profile.profileurl);
+//             return true;
+
+//         } catch (Exception e) {
+//             if (tx != null && tx.isActive()) {
+//                 tx.rollback();
+//             }
+//             logger.error("上传迁移申请时发生错误: {}", e.getMessage());
+//             return false;
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public Profile GetTransmitProfile(String profileid) {
+//         if (profileid == null || profileid.isEmpty()) {
+//             logger.warn("参数无效: profileid为空");
+//             return null;
+//         }
+
+//         EntityManager em = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             Profile profile = em.find(Profile.class, profileid);
+//             if (profile == null) {
+//                 logger.warn("未找到迁移申请 {}", profileid);
+//                 return null;
+//             }
+
+//             logger.info("成功获取迁移申请 {}", profileid);
+//             return profile;
+
+//         } catch (Exception e) {
+//             logger.error("获取迁移申请时发生错误: {}", e.getMessage());
+//             return null;
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public boolean ExamTransmitProfile(String profileid, boolean result) {
+//         if (profileid == null || profileid.isEmpty()) {
+//             logger.warn("参数无效: profileid为空");
+//             return false;
+//         }
+
+//         EntityManager em = null;
+//         EntityTransaction tx = null;
+
+//         try {
+//             em = emf.createEntityManager();
+//             tx = em.getTransaction();
+//             tx.begin();
+
+//             Profile profile = em.find(Profile.class, profileid);
+//             if (profile == null) {
+//                 logger.warn("未找到迁移申请 {}", profileid);
+//                 return false;
+//             }
+
+//             if (profile.exampass != result) {
+//                 profile.exampass = result;
+
+//                 if (result) {
+//                     // 如果审核通过,更新用户的PT信息
+//                     UserPT userPT = em.find(UserPT.class, profile.userid);
+//                     if (userPT != null) {
+//                         // 发放魔力值
+//                         int magicToGive = Integer.parseInt(profile.magictogive);
+//                         userPT.magic += magicToGive;
+//                         profile.magicgived = String.valueOf(magicToGive);
+
+//                         // 发放上传量
+//                         long uploadToGive = Long.parseLong(profile.uploadtogive);
+//                         userPT.upload += uploadToGive;
+//                         profile.uploadgived = String.valueOf(uploadToGive);
+
+//                         em.merge(userPT);
+//                     }
+//                 }
+
+//                 em.merge(profile);
+//             }
+
+//             tx.commit();
+
+//             logger.info("成功审核迁移申请 {}, 结果: {}", profileid, result);
+//             return true;
+
+//         } catch (Exception e) {
+//             if (tx != null && tx.isActive()) {
+//                 tx.rollback();
+//             }
+//             logger.error("审核迁移申请时发生错误: {}", e.getMessage());
+//             return false;
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+
+//     @Override
+//     public Profile[] GetTransmitProfileList() {
+//         EntityManager em = null;
+
+//         try {
+//             em = emf.createEntityManager();
+
+//             // 获取所有迁移申请
+//             QProfile p = QProfile.profile;
+//             List<Profile> profiles = new JPAQuery<>(em)
+//                     .select(p)
+//                     .from(p)
+//                     .fetch();
+
+//             logger.info("成功获取所有迁移申请,共 {} 条", profiles.size());
+//             return profiles.toArray(new Profile[0]);
+
+//         } catch (Exception e) {
+//             logger.error("获取迁移申请列表时发生错误: {}", e.getMessage());
+//             return new Profile[0];
+//         } finally {
+//             if (em != null) {
+//                 em.close();
+//             }
+//         }
+//     }
+// }
\ No newline at end of file
diff --git a/src/main/java/object/SubmitSeed.java b/src/main/java/object/SubmitSeed.java
new file mode 100644
index 0000000..3b22811
--- /dev/null
+++ b/src/main/java/object/SubmitSeed.java
@@ -0,0 +1,32 @@
+package object;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.ForeignKey;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "SubmitSeed")
+public class SubmitSeed {
+    @Id
+    @Column(name = "beg_id", length = 64, nullable = false)
+    public String begId;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "beg_id", referencedColumnName = "beg_id", foreignKey = @ForeignKey(name = "fk_ss_beg"), insertable = false, updatable = false)
+    public BegInfo begInfo;
+
+    @Id
+    @Column(name = "seed_id", length = 64, nullable = false)
+    public String seedId;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "seed_id", referencedColumnName = "seed_id", foreignKey = @ForeignKey(name = "fk_ss_seed"), insertable = false, updatable = false)
+    public Seed seed;
+
+    @Column(name = "votes", nullable = false)
+    public int votes;
+}
\ No newline at end of file
diff --git a/src/main/java/object/UserVotes.java b/src/main/java/object/UserVotes.java
new file mode 100644
index 0000000..813c292
--- /dev/null
+++ b/src/main/java/object/UserVotes.java
@@ -0,0 +1,42 @@
+package object;
+
+import java.util.Date;
+import javax.persistence.*;
+
+@Entity
+@Table(name = "UserVotes")
+public class UserVotes {
+    @Id
+    @Column(name = "user_id", length = 36, nullable = false)
+    public String userId;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "user_id", referencedColumnName = "user_id", 
+                foreignKey = @ForeignKey(name = "fk_user_votes_user"), 
+                insertable = false, updatable = false)
+    public User user;
+
+    @Id
+    @Column(name = "beg_id", length = 64, nullable = false)
+    public String begId;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "beg_id", referencedColumnName = "beg_id", 
+                foreignKey = @ForeignKey(name = "fk_user_votes_beg"), 
+                insertable = false, updatable = false)
+    public BegInfo begInfo;
+
+    @Id
+    @Column(name = "seed_id", length = 64, nullable = false)
+    public String seedId;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "seed_id", referencedColumnName = "seed_id", 
+                foreignKey = @ForeignKey(name = "fk_user_votes_seed"), 
+                insertable = false, updatable = false)
+    public Seed seed;
+
+    @Column(name = "created_at", nullable = false)
+    @Temporal(TemporalType.TIMESTAMP)
+    public Date createdAt;
+}