促销接口实现
Change-Id: I140945a50a8ee32042aaf8018b336afd86f5fbac
diff --git a/src/main/java/database/DataManagerInterface.java b/src/main/java/database/DataManagerInterface.java
index 0c4dc7d..cf98f46 100644
--- a/src/main/java/database/DataManagerInterface.java
+++ b/src/main/java/database/DataManagerInterface.java
@@ -6,12 +6,15 @@
import entity.Post;
import entity.Profile;
import entity.Seed;
+import entity.SeedPromotion;
+import entity.SeedWithPromotionDTO;
import entity.User;
import entity.UserPT;
import entity.UserStar;
import entity.PostReply;
import entity.SeedWithVotes;
import java.io.File;
+import java.util.Date;
public interface DataManagerInterface{
//DB1
@@ -30,7 +33,7 @@
public int DeleteSeed(String seedid);//删除一个种子,返回状态:0 success,1 不存在,2其他原因
public Seed[] SearchSeed(String userQ);//传入搜索的关键词或句子,返回搜索到的种子信息(按照公共字符数量排序)
- public Seed[] GetSeedListByTag(String tag);//获取某个标签下的种子列表
+ public SeedWithPromotionDTO[] GetSeedListByTag(String tag);//获取某个标签下的种子列表
public Seed[] GetSeedListByUser(String userid);//获取某个用户的种子列表
public int AddNotice(Notice notice);//返回状态:0 success,1 重复,2其他原因
@@ -81,9 +84,12 @@
public boolean UploadTransmitProfile(Profile profile);
public Profile GetTransmitProfile(String profileid);//获取迁移信息
- public boolean ExamTransmitProfile(String profileid,boolean result);//审核迁移信息,0成功,1失败
+ public boolean ExamTransmitProfile(String profileid, boolean result, Integer grantedUpload);//审核迁移信息,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 UploadMigration(String userid, File file, String uploadtogive);
public int createBagSeed(BegInfo begInfo, String userid, String info);
+ public Seed[] getAllSeeds(); // 获取所有种子信息
+ public SeedPromotion[] getAllSeedPromotions(); // 获取所有种子推广信息
+ public int createSeedPromotion(String seedid, Date startTime, Date endTime, Integer discount); // 添加种子推广信息
}
\ No newline at end of file
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
diff --git a/src/main/java/database/Database2.java b/src/main/java/database/Database2.java
index 91dc8ff..3fe0c9c 100644
--- a/src/main/java/database/Database2.java
+++ b/src/main/java/database/Database2.java
@@ -22,6 +22,8 @@
import entity.QProfile;
import entity.QSeed;
import entity.Seed;
+import entity.SeedPromotion;
+import entity.SeedWithPromotionDTO;
import entity.User;
import entity.UserPT;
import entity.config;
@@ -139,8 +141,8 @@
}
@Override
- public Seed[] GetSeedListByTag(String tag) {
- return new Seed[0];
+ public SeedWithPromotionDTO[] GetSeedListByTag(String tag) {
+ return new SeedWithPromotionDTO[0];
}
@Override
@@ -1020,7 +1022,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;
@@ -1144,7 +1146,7 @@
}
@Override
- public int UploadMigration(String userid, File file){
+ public int UploadMigration(String userid, File file, String uploadtogive){
return 0;
}
@@ -1231,4 +1233,19 @@
public int createBagSeed(BegInfo begInfo, String userid, String info) {
return 0;
}
+
+ @Override
+ public Seed[] getAllSeeds() {
+ return null;
+ }
+
+ @Override
+ public SeedPromotion[] getAllSeedPromotions() {
+ return null;
+ }
+
+ @Override
+ public int createSeedPromotion(String seedid, Date startTime, Date endTime, Integer discount) {
+ return 0;
+ }
}
\ No newline at end of file