促销接口实现

Change-Id: I140945a50a8ee32042aaf8018b336afd86f5fbac
diff --git a/src/main/java/database/Database1.java b/src/main/java/database/Database1.java
index 934a6c5..98effe1 100644
--- a/src/main/java/database/Database1.java
+++ b/src/main/java/database/Database1.java
@@ -43,6 +43,8 @@
 import entity.QUserVotes;
 import entity.QPost;
 import entity.Seed;
+import entity.SeedPromotion;
+import entity.SeedWithPromotionDTO;
 import entity.User;
 import entity.UserPT;
 import entity.UserStar;
@@ -55,6 +57,7 @@
 import entity.QUserStar;
 import entity.SubmitSeed;
 import entity.SubmitSeedId;
+import entity.QSeedPromotion;
 
 
 import org.slf4j.Logger;
@@ -306,17 +309,37 @@
     }
 
     @Override
-    public Seed[] GetSeedListByTag(String tag){
+    public SeedWithPromotionDTO[] GetSeedListByTag(String tag){
         EntityManager em = createEntityManager();
         try {
             JPAQuery<Seed> query = new JPAQuery<>(em);
             QSeed s = QSeed.seed;
             QUser u = QUser.user;
+            QSeedPromotion sp = QSeedPromotion.seedPromotion;
+            
             // 使用 fetch join 预先加载关联的 user 对象,避免懒加载导致的 ResultSet closed 错误
             List<Seed> seeds = query.select(s).from(s)
                     .leftJoin(s.user, u).fetchJoin()
                     .where(s.seedtag.eq(tag)).fetch();
-            return seeds.toArray(new Seed[0]);
+            
+            // 创建结果列表
+            List<SeedWithPromotionDTO> result = new ArrayList<>();
+            Date currentDate = new Date();
+            
+            for (Seed seed : seeds) {
+                // 查询当前有效的促销信息
+                JPAQuery<SeedPromotion> promotionQuery = new JPAQuery<>(em);
+                SeedPromotion promotion = promotionQuery.select(sp).from(sp)
+                        .where(sp.seed.seedid.eq(seed.seedid)
+                                .and(sp.startTime.loe(currentDate))
+                                .and(sp.endTime.goe(currentDate)))
+                        .fetchOne();
+                
+                Integer discount = promotion != null ? promotion.discount : null;
+                result.add(new SeedWithPromotionDTO(seed, discount));
+            }
+            
+            return result.toArray(new SeedWithPromotionDTO[0]);
         } finally {
             em.close();
         }
@@ -1472,7 +1495,7 @@
     //获取迁移信息
     
     @Override
-    public boolean ExamTransmitProfile(String profileid,boolean result){
+    public boolean ExamTransmitProfile(String profileid, boolean result, Integer grantedUpload){
         if (profileid == null || profileid.isEmpty()) {
             logger.warn("参数无效: profileid为空");
             return false;
@@ -1506,9 +1529,9 @@
                     profile.magicgived = String.valueOf(magicToGive);
 
                     // 发放上传量
-                    long uploadToGive = Long.parseLong(profile.uploadtogive);
-                    userPT.upload += uploadToGive;
-                    profile.uploadgived = String.valueOf(uploadToGive);
+                    // long uploadToGive = Long.parseLong(profile.uploadtogive);
+                    userPT.upload += grantedUpload;
+                    profile.uploadgived = String.valueOf(grantedUpload);
 
                     em.merge(userPT);
                     em.merge(profile);
@@ -1722,7 +1745,7 @@
     }
 
     @Override
-    public int UploadMigration(String userid, File file) {
+    public int UploadMigration(String userid, File file, String uploadtogive) {
         if (userid == null || userid.isEmpty() || file == null) {
             return 2; // 参数无效
         }
@@ -1740,7 +1763,7 @@
             Profile migration = new Profile();
             migration.profileurl = java.util.UUID.randomUUID().toString();
             migration.userid = userid;
-            migration.uploadtogive = "0"; // 初始上传量为0
+            migration.uploadtogive = uploadtogive; // 初始上传量为0
             migration.magictogive = "0"; // 初始魔力值为0
             migration.downloadgived = "0"; // 初始下载量为0
             migration.uploadgived = "0"; // 初始上传量为0
@@ -2012,4 +2035,103 @@
             }
         }
     }
+
+    @Override
+    public Seed[] getAllSeeds() {
+        EntityManager entitymanager = createEntityManager();
+        try {
+            JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
+            QSeed s = QSeed.seed;
+            List<Seed> seeds = query.select(s).from(s).fetch();
+            return seeds.toArray(new Seed[0]);
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
+            return new Seed[0];
+        } finally {
+            if (entitymanager != null) {
+                entitymanager.close();
+            }
+        }
+    }
+
+    @Override
+    public SeedPromotion[] getAllSeedPromotions() {
+        EntityManager entitymanager = createEntityManager();
+        try {
+            JPAQuery<SeedPromotion> query = new JPAQuery<>(entitymanager);
+            QSeedPromotion sp = QSeedPromotion.seedPromotion;
+            List<SeedPromotion> promotions = query.select(sp).from(sp).fetch();
+            return promotions.toArray(new SeedPromotion[0]);
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
+            return new SeedPromotion[0];
+        } finally {
+            if (entitymanager != null) {
+                entitymanager.close();
+            }
+        }
+    }
+
+    @Override
+    public int createSeedPromotion(String seedid, Date startTime, Date endTime, Integer discount) {
+        if (seedid == null || seedid.isEmpty() || startTime == null || endTime == null || discount == null) {
+            return 2; // 参数无效
+        }
+
+        EntityManager entitymanager = createEntityManager();
+        EntityTransaction tx = entitymanager.getTransaction();
+
+        try {
+            tx.begin();
+
+            // 检查种子是否存在
+            Seed seed = entitymanager.find(Seed.class, seedid);
+            if (seed == null) {
+                return 1; // 种子不存在
+            }
+
+            // 检查是否已存在相同的促销活动
+            QSeedPromotion sp = QSeedPromotion.seedPromotion;
+            SeedPromotion existingPromotion = new JPAQuery<>(entitymanager)
+                    .select(sp)
+                    .from(sp)
+                    .where(sp.seed.seedid.eq(seedid))
+                    .fetchOne();
+
+            // 创建新的促销活动
+            SeedPromotion promotion = new SeedPromotion();
+            promotion.promotionId = java.util.UUID.randomUUID().toString();
+            promotion.seed = seed;
+            promotion.startTime = startTime;
+            promotion.endTime = endTime;
+            promotion.discount = discount;
+
+            if (existingPromotion != null) {
+                promotion.promotionId = existingPromotion.promotionId; // 如果已存在,则使用现有的ID
+                entitymanager.merge(promotion); // 更新现有的促销活动
+            } else {
+                entitymanager.persist(promotion); // 创建新的促销活动
+            }
+
+            tx.commit();
+            return 0; // 成功
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (tx.isActive()) {
+                tx.rollback();
+            }
+            return 4; // 其他错误
+        } finally {
+            if (entitymanager != null) {
+                entitymanager.close();
+            }
+        }
+    }
 }
\ No newline at end of file