修改BegInfo UserVotes SubmitSeed实体类
Change-Id: I1a5996ac4a788e334e62e2d8be60b598c1e96935
diff --git a/src/main/java/database/DataManagerInterface.java b/src/main/java/database/DataManagerInterface.java
index 2304567..b92d18d 100644
--- a/src/main/java/database/DataManagerInterface.java
+++ b/src/main/java/database/DataManagerInterface.java
@@ -31,8 +31,8 @@
public int GetUserAvailableInviteTimes(String userid);//获取用户的剩余邀请次数
public int InviteUser(String inviterid,String inviteemail);//邀请用户,返回状态:0 success,1 重复,2其他原因
- public boolean AddCollect(String userid,String postid);//添加一个收藏,返回状态:0 success,1 不存在,2其他原因
- public boolean DeleteCollect(String userid,String postid);//删除一个收藏,返回状态:0 success,1 不存在,2其他原因
+ public boolean AddCollect(String userid,String seedid);//添加一个收藏,返回状态:0 success,1 不存在,2其他原因
+ public boolean DeleteCollect(String userid,String seedid);//删除一个收藏,返回状态:0 success,1 不存在,2其他原因
diff --git a/src/main/java/database/Database1.java b/src/main/java/database/Database1.java
index 9304fa5..ae1fe94 100644
--- a/src/main/java/database/Database1.java
+++ b/src/main/java/database/Database1.java
@@ -1,5 +1,474 @@
package database;
-// public class Database1 implements DataManagerInterface {
+// import java.lang.invoke.TypeDescriptor;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import com.querydsl.jpa.impl.JPAQuery;
+
+import entity.BegInfo;
+import entity.Notice;
+import entity.Post;
+import entity.Profile;
+import entity.QNotice;
+import entity.QSeed;
+import entity.QUser;
+import entity.QUserPT;
+import entity.QUserStar;
+import entity.Seed;
+import entity.User;
+import entity.UserPT;
+import entity.UserStar;
+
+public class Database1 implements DataManagerInterface {
+ @PersistenceContext
+ private EntityManager entitymanager;
+
+ // 返回状态:0 success,1 邮箱重复,2其他原因
+ @Override
+ public int RegisterUser(User userinfo){
+ try{
+ JPAQuery<String> query = new JPAQuery<>(entitymanager);
+ QUser u = QUser.user;
+ List<String> allEmails = query.select(u.email).from(u).fetch();
+
+ if(allEmails.contains(userinfo.email)){
+ return 1;
+ }
+ entitymanager.persist(userinfo);
+ return 0;
+
+ }catch(Exception e){
+ e.printStackTrace();
+ return 2;
+ }
+
+ }
+
+ // 返回状态:0 success,1 不存在,2其他原因
+ @Override
+ public int UpdateInformation(User userinfo){
+ try {
+ if (userinfo.userid == null) {
+ return 2; // userid为null直接返回错误
+ }
+ JPAQuery<User> query = new JPAQuery<>(entitymanager);
+ QUser u = QUser.user;
+ User updateUser = query.select(u).from(u).where(u.userid.eq(userinfo.userid)).fetchOne();
+
+ if(updateUser == null){
+ return 1;
+ }
+ // 只更新需要的字段,避免破坏持久化状态和关联关系
+ updateUser.email = userinfo.email;
+ updateUser.username = userinfo.username;
+ updateUser.password = userinfo.password;
+ updateUser.sex = userinfo.sex;
+ updateUser.school = userinfo.school;
+ updateUser.pictureurl = userinfo.pictureurl;
+ updateUser.profile = userinfo.profile;
+ updateUser.accountstate = userinfo.accountstate;
+ updateUser.invitetimes = userinfo.invitetimes;
+ // 如有其他字段也一并赋值
+ entitymanager.merge(updateUser);
+ return 0;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return 2;
+ }
+
+ }
+
+ // 返回用户的全部基本信息
+ @Override
+ public User GetInformation(String userid){
+ User user = entitymanager.find(User.class, userid);
+ return user;
+ }
+
+ //返回用户的全部pt站信息
+ @Override
+ public UserPT GetInformationPT(String userid){
+ UserPT userPT = entitymanager.find(UserPT.class, userid);
+ return userPT;
+ }
+
+ //返回状态:0 success,1 邮箱重复,2其他原因
+ @Override
+ public int UpdateInformationPT(UserPT userinfo){
+ try{
+ JPAQuery<UserPT> query = new JPAQuery<>(entitymanager);
+ QUserPT u = QUserPT.userPT;
+ UserPT userPT = query.select(u).from(u).where(u.userid.eq(userinfo.userid)).fetchOne();
+
+ if(userPT == null){
+ return 1;
+ }
+ userPT = userinfo;
+ entitymanager.merge(userPT);
+ return 0;
+
+ }catch(Exception e){
+ e.printStackTrace();
+ return 2;
+ }
+ }
+
+ //返回状态:0 success,1 id重复,2其他原因
+ @Override
+ public int RegisterUserPT(UserPT userinfo){
+ try {
+ JPAQuery<UserPT> query = new JPAQuery<>(entitymanager);
+ QUserPT u = QUserPT.userPT;
+ UserPT checkUserPT = query.select(u).from(u).where(u.userid.eq(userinfo.userid)).fetchOne();
+ if (checkUserPT != null) {
+ return 1;
+ }
+ entitymanager.persist(userinfo);
+ return 0;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return 2;
+ }
+ }
+
+ //返回种子的全部信息
+ @Override
+ public Seed GetSeedInformation(String seedid){
+ JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
+ QSeed s = QSeed.seed;
+ Seed seed = query.select(s).from(s).where(s.seedid.eq(seedid)).fetchOne();
+ return seed;
+ }
+
+ //添加一个新的种子,0成功,其他失败信息待定;
+ @Override
+ public int RegisterSeed(Seed seedinfo){
+ try {
+ JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
+ QSeed s = QSeed.seed;
+ Seed seed = query.select(s).from(s).where(s.seedid.eq(seedinfo.seedid)).fetchOne();
+ if (seed != null) {
+ return 1;
+ }
+ entitymanager.persist(seedinfo);
+ return 0;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return 2;
+ }
+ }
+
+ //接收新的种子然后更新其全部属性
+ @Override
+ public int UpdateSeed(Seed seedinfo){
+ try {
+ JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
+ QSeed s = QSeed.seed;
+ Seed seed = query.select(s).from(s).where(s.seedid.eq(seedinfo.seedid)).fetchOne();
+ if (seed == null) {
+ return 1;
+ }
+ seed = seedinfo;
+ entitymanager.merge(seed);
+ return 0;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return 2;
+ }
+ }
+
+ //传入搜索的关键词或句子,返回搜索到的种子信息(按照公共字符数量排序)
+ @Override
+ public Seed[] SearchSeed(String userQ){
+ JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
+ QSeed s = QSeed.seed;
+ List<Seed> seeds = query.select(s).from(s).fetch();
+
+ if (seeds == null || userQ == null || userQ.trim().isEmpty()) {
+ return seeds.toArray(new Seed[0]);
+ }
+
+ String processedQuery = userQ.toLowerCase().trim();
+ Map<Seed, Integer> seedCountMap = new HashMap<>();
+ for(Seed seed : seeds){
+ String title = seed.title.toLowerCase().trim();
+ int count = countCommonCharacter(processedQuery, title);
+ seedCountMap.put(seed, count);
+ }
+ seeds.sort((s1, s2) -> {
+ int count1 = seedCountMap.getOrDefault(s1, 0);
+ int count2 = seedCountMap.getOrDefault(s2, 0);
+ return Integer.compare(count2, count1);
+ });
+
+ return seeds.toArray(new Seed[0]);
+ }
+
+ //计算字符串公共字符数量
+ private int countCommonCharacter(String str1, String str2){
+ Map<Character, Integer> map1 = new HashMap<>();
+ Map<Character, Integer> map2 = new HashMap<>();
+
+ for(char c : str1.toCharArray()){
+ if (!Character.isWhitespace(c)) {
+ map1.put(c, map1.getOrDefault(c, 0) + 1);
+ }
+ }
+
+ for(char c : str2.toCharArray()){
+ if (!Character.isWhitespace(c)) {
+ map2.put(c, map2.getOrDefault(c, 0) + 1);
+ }
+ }
+
+ int res = 0;
+ for(char c : map1.keySet()){
+ if (map2.containsKey(c)) {
+ res += Math.min(map1.get(c), map2.get(c));
+ }
+
+ }
+ return res;
+ }
+
+ //返回状态:0 success,1 重复,2其他原因
+ @Override
+ public int AddNotice(Notice notice){
+ try {
+ JPAQuery<Notice> query = new JPAQuery<>(entitymanager);
+ QNotice n = QNotice.notice;
+ Notice checkNotice = query.select(n).from(n).where(n.noticeid.eq(notice.noticeid)).fetchOne();
+ if (checkNotice != null) {
+ return 1;
+ }
+
+ entitymanager.persist(notice);
+ return 0;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return 2;
+ }
+
+ }
+
+ //返回状态:0 success,1 不存在,2其他原因
+ @Override
+ public boolean UpdateNotice(Notice notice){
+ try {
+ Notice oldNotice = entitymanager.find(Notice.class, notice.noticeid);
+ if (oldNotice == null) {
+ return false;
+ }
+ oldNotice = notice;
+ entitymanager.merge(oldNotice);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ //删除公告,返回状态:0 success,1 不存在,2其他原因
+ @Override
+ public boolean DeleteNotice(String noticeid){
+ try {
+ Notice notice = entitymanager.find(Notice.class, noticeid);
+ if (notice == null) {
+ return false;
+ }
+ entitymanager.remove(notice);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+
+ }
+
+ //获取用户的剩余邀请次数
+ public int GetUserAvailableInviteTimes(String userid){
+ try {
+ JPAQuery<Integer> query = new JPAQuery<>(entitymanager);
+ QUser u = QUser.user;
+ int invite_left = query.select(u.invitetimes).from(u).where(u.userid.eq(userid)).fetchOne();
+
+ return invite_left;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return -1;
+ }
+
+ }
+
+ //邀请用户,返回状态:0 success,1 剩余次数不足,2,3其他原因
+ @Override
+ public int InviteUser(String inviterid,String inviteemail){
+ try {
+ User user = entitymanager.find(User.class, inviterid);
+ if (user == null || !user.email.equals(inviteemail)) {
+ return 3;
+ }
+ if (user.invitetimes <= 0) {
+ return 1;
+ }
+ user.invitetimes -= 1;
+ entitymanager.merge(user);
+ return 0;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return 2;
+ }
+
+ }
+
+ //添加一个收藏,返回状态:0 success,1 不存在,2其他原因
+ @Override
+ public boolean AddCollect(String userid,String seedid){
+ 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)) {
+ return false;
+ }
+ 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){
+ try {
+ 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.remove(userStar);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+
+ }
+
+ @Override
+ public int AddBegSeed(BegInfo info){
+ return 0;
+ }
+
+ @Override
+ public int UpdateBegSeed(BegInfo info){
+ return 0;
+ }
+
+ @Override
+ public int DeleteBegSeed(String begid){
+ return 0;
+ }
+
+ @Override
+ public int VoteSeed(String begId, String seedId, String userId){
+ return 0;
+ }
+
+ @Override
+ public int SubmitSeed(String begid,Seed seed){
+ return 0;
+ }
+
+ @Override
+ public void SettleBeg(){
+
+ }
+
+ @Override
+ public int AddPost(Post post){
+ return 0;
+ }
+
+ @Override
+ public int UpdatePost(Post post){
+ return 0;
+ }
+
+ @Override
+ public int DeletePost(String postid){
+ return 0;
+ }
+
+ @Override
+ public int AddComment(String postid, String userid, String comment){
+ return 0;
+ }
+
+ @Override
+ public int DeleteComment(String postid,String commentid){
+ return 0;
+ }
+
+ @Override
+ public boolean ExchangeMagicToUpload(String userid,int magic)//将魔力值兑换为上传量,返回状态:0 success,1 不存在,2其他原因
+ {
+ return true;
+ }
-// }
+ @Override
+ public boolean ExchangeMagicToDownload(String userid,int magic)
+ {
+ return true;
+ }//将魔力值兑换为下载量,返回状态:0 success,1 不存在,2其他原因
+
+ @Override
+ public boolean ExchangeMagicToVip(String userid,int magic){
+ return true;
+ }
+ //将魔力值兑换为VIP次数,返回状态:0 success,1 不存在,2其他原因
+
+ @Override
+ public boolean UploadTransmitProfile(Profile profile){
+ return true;
+ }
+
+ @Override
+ public Profile GetTransmitProfile(String profileid){
+ Profile profile = new Profile();
+ return profile;
+ }
+ //获取迁移信息
+
+ @Override
+ public boolean ExamTransmitProfile(String profileid,boolean result){
+ return true;
+ }
+ //审核迁移信息,0成功,1失败
+ @Override
+ public Profile[] GetTransmitProfileList(){
+ return new Profile[0];
+ }
+ //获取所有迁移信息
+
+}
+
diff --git a/src/main/java/entity/BegInfo.java b/src/main/java/entity/BegInfo.java
index fe3174d..405e352 100644
--- a/src/main/java/entity/BegInfo.java
+++ b/src/main/java/entity/BegInfo.java
@@ -27,5 +27,5 @@
public Date endtime;
@Column(name = "has_match", nullable = false)
- public boolean hasseed;
+ public int hasseed;
}
diff --git a/src/main/java/entity/SubmitSeed.java b/src/main/java/entity/SubmitSeed.java
index 2cec77d..98986d0 100644
--- a/src/main/java/entity/SubmitSeed.java
+++ b/src/main/java/entity/SubmitSeed.java
@@ -7,28 +7,23 @@
public class SubmitSeed {
@EmbeddedId
- private SubmitSeedId id;
+ @AttributeOverrides({
+ @AttributeOverride(name = "begId", column = @Column(name = "beg_id")),
+ @AttributeOverride(name = "seedId", column = @Column(name = "seed_id"))
+ })
+ public SubmitSeedId id;
@ManyToOne(optional = false)
- @JoinColumn(name = "beg_id", referencedColumnName = "beg_id", foreignKey = @ForeignKey(name = "fk_ss_beg"))
- private BegInfo begInfo;
+ @JoinColumn(name = "beg_id", referencedColumnName = "beg_id", foreignKey = @ForeignKey(name = "fk_ss_beg"), insertable = false, updatable = false)
+ public BegInfo begInfo;
@ManyToOne(optional = false)
- @JoinColumn(name = "seed_id", referencedColumnName = "seed_id", foreignKey = @ForeignKey(name = "fk_ss_seed"))
- private Seed seed;
+ @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)
- private int votes;
+ public int votes;
- public SubmitSeed() {}
-
- public SubmitSeedId getId() {
- return id;
+ public SubmitSeed() {
}
-
- public void setId(SubmitSeedId id) {
- this.id = id;
- }
-
- // getters and setters for begInfo, seed, and votes
-}
+}
\ No newline at end of file
diff --git a/src/main/java/entity/User.java b/src/main/java/entity/User.java
index 6cdafb8..8bc67ae 100644
--- a/src/main/java/entity/User.java
+++ b/src/main/java/entity/User.java
@@ -33,7 +33,7 @@
public int detectedCount = 0;
@Temporal(TemporalType.TIMESTAMP)
- @Column(name = "lastDetectedTime",nullable = false)
+ @Column(name = "lastDetectedTime", nullable = false)
public Date lastDetectedTime = new Date();
@Column(name = "fake_detected_count", nullable = false)
diff --git a/src/main/java/entity/UserStar.java b/src/main/java/entity/UserStar.java
new file mode 100644
index 0000000..c0bf225
--- /dev/null
+++ b/src/main/java/entity/UserStar.java
@@ -0,0 +1,43 @@
+package entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.ForeignKey;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "UserFavorite")
+@IdClass(UserStarId.class)
+public class UserStar {
+ @Id
+ @Column(name = "user_id", length = 36, nullable = false)
+ public String userid;
+
+ @Id
+ @Column(name = "seed_id", length = 64, nullable = false)
+ public String seedid;
+
+ @OneToOne(optional = false)
+ @JoinColumn(
+ name = "user_id",
+ referencedColumnName = "user_id",
+ foreignKey = @ForeignKey(name = "fk_user_id"),
+ insertable = false, updatable = false
+ )
+ public User user;
+
+ @OneToOne(optional = false)
+ @JoinColumn(
+ name = "seed_id",
+ referencedColumnName = "seed_id",
+ foreignKey = @ForeignKey(name = "fk_seed_id"),
+ insertable = false, updatable = false
+ )
+ public Seed seed;
+
+ public UserStar() {}
+}
\ No newline at end of file
diff --git a/src/main/java/entity/UserStarId.java b/src/main/java/entity/UserStarId.java
new file mode 100644
index 0000000..6cc362b
--- /dev/null
+++ b/src/main/java/entity/UserStarId.java
@@ -0,0 +1,29 @@
+package entity;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+public class UserStarId implements Serializable {
+ public String userid;
+ public String seedid;
+
+ public UserStarId() {}
+
+ public UserStarId(String userid, String seedid) {
+ this.userid = userid;
+ this.seedid = seedid;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ UserStarId that = (UserStarId) o;
+ return Objects.equals(userid, that.userid) && Objects.equals(seedid, that.seedid);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(userid, seedid);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/entity/UserVotes.java b/src/main/java/entity/UserVotes.java
index af28e3c..ba7d950 100644
--- a/src/main/java/entity/UserVotes.java
+++ b/src/main/java/entity/UserVotes.java
@@ -8,37 +8,29 @@
public class UserVotes {
@EmbeddedId
- private UserVotesId id;
+ @AttributeOverrides({
+ @AttributeOverride(name = "userId", column = @Column(name = "user_id")),
+ @AttributeOverride(name = "begId", column = @Column(name = "beg_id")),
+ @AttributeOverride(name = "seedId", column = @Column(name = "seed_id"))
+ })
+ public UserVotesId id;
@ManyToOne(optional = false)
- @JoinColumn(name = "user_id", referencedColumnName = "user_id",
- foreignKey = @ForeignKey(name = "fk_user_votes_user"))
- private User user;
+ @JoinColumn(name = "user_id", referencedColumnName = "user_id", foreignKey = @ForeignKey(name = "fk_user_votes_user"), insertable = false, updatable = false)
+ public User user;
@ManyToOne(optional = false)
- @JoinColumn(name = "beg_id", referencedColumnName = "beg_id",
- foreignKey = @ForeignKey(name = "fk_user_votes_beg"))
- private BegInfo begInfo;
+ @JoinColumn(name = "beg_id", referencedColumnName = "beg_id", foreignKey = @ForeignKey(name = "fk_user_votes_beg"), insertable = false, updatable = false)
+ public BegInfo begInfo;
@ManyToOne(optional = false)
- @JoinColumn(name = "seed_id", referencedColumnName = "seed_id",
- foreignKey = @ForeignKey(name = "fk_user_votes_seed"))
- private Seed seed;
+ @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)
- private Date createdAt;
+ public Date createdAt;
- public UserVotes() {}
-
- // getter and setter for the composite key and other fields
- public UserVotesId getId() {
- return id;
+ public UserVotes() {
}
-
- public void setId(UserVotesId id) {
- this.id = id;
- }
-
- // getters and setters for user, begInfo, seed, createdAt
-}
+}
\ No newline at end of file
diff --git a/src/main/java/entity/VipSeed.java b/src/main/java/entity/VipSeed.java
new file mode 100644
index 0000000..72f8abf
--- /dev/null
+++ b/src/main/java/entity/VipSeed.java
@@ -0,0 +1,43 @@
+package entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.ForeignKey;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "VipSeed")
+public class VipSeed {
+ @Id
+ @Column(name = "seed_id", length = 64, nullable = false)
+ public String seedid;
+
+ @OneToOne(optional = false)
+ @JoinColumn(name = "seed_id", referencedColumnName = "seed_id", foreignKey = @ForeignKey(name = "fk_vip_seed"), insertable = false, updatable = false)
+ public Seed seed;
+
+ @Column(name = "seeder_count", nullable = false)
+ public int seedercount;
+
+ @Column(name = "reward_magic", nullable = false)
+ public int rewardmagic;
+
+ @Column(name = "stop_caching", nullable = false)
+ public int stopcaching;
+
+ @Column(name = "bonus", nullable = false)
+ public int bonus;
+
+ @Column(name = "cache_status", nullable = false)
+ public boolean cachestate;
+
+ @Column(name = "farmer_number", nullable = false)
+ public int farmernumber;
+
+ public VipSeed() {
+ // 默认构造函数
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/vip/Vip.java b/src/main/java/vip/Vip.java
index c9d3dc7..e0b3ad1 100644
--- a/src/main/java/vip/Vip.java
+++ b/src/main/java/vip/Vip.java
@@ -1,5 +1,195 @@
package vip;
+import java.io.File;
+import java.util.List;
-// public class Vip implements VipInterface {
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.apache.commons.lang3.tuple.Pair;
+
+import com.querydsl.jpa.impl.JPAQuery;
+
+import entity.QSeed;
+import entity.QUser;
+import entity.QVipSeed;
+import entity.Seed;
+import entity.User;
+import entity.VipSeed;
+
+public class Vip implements VipInterface {
+
+ int seedKeepNumber = 10;
+
+ @PersistenceContext
+ private EntityManager entitymanager;
-// }
+ //获取专线下载的文件,并记录用户的下载行为
+ //如果用户权限足够,文件存在,integer为0,如果用户权限足够,文件不存在,
+ //integer为1,file为null 如果用户权限不足,file为null,integer为2;
+ @Override
+ public Pair<File,Integer> GetTTorent(String seedid,String userid,String ip){
+ EntityManager em = this.entitymanager;
+ File file = null;
+ try {
+ if (seedid == null || userid == null || ip == null) {
+ return Pair.of(null, 2);
+ }
+ Seed seed = em.find(Seed.class, seedid);
+ if (seed == null || seed.url == null) {
+ return Pair.of(null, 1);
+ }
+ User user = em.find(User.class, userid);
+ if (user == null) {
+ return Pair.of(null, 2);
+ }
+ file = new File(seed.url);
+ JPAQuery<Boolean> query = new JPAQuery<>(em);
+ QUser u = QUser.user;
+ Boolean status = query.select(u.accountstate).where(u.userid.eq(userid)).fetchOne();
+ if (!file.exists()) {
+ if (status){
+ return Pair.of(null, 2);
+ } else {
+ return Pair.of(null, 1);
+ }
+ }
+ if (status){
+ return Pair.of(null, 2);
+ }
+
+ // 记录下载行为
+ javax.persistence.EntityTransaction tx = em.getTransaction();
+ tx.begin();
+ entity.SeedDownload sd = new entity.SeedDownload();
+ sd.seedId = seedid;
+ sd.userId = userid;
+ sd.clientIp = ip;
+ java.time.LocalDateTime now = java.time.LocalDateTime.now();
+ sd.downloadStart = now;
+ sd.downloadEnd = now;
+ em.persist(sd);
+ tx.commit();
+ } catch (Exception e) {
+ // ignore persistence errors and still return the file
+ }
+ return Pair.of(file, 0);
+ }
+
+ //种子增加了新的保种人数,返回值:0,写入成功,1写入失败,其他待定
+ @Override
+ public int AddFarmerNumber(int number,String seedid){
+ try {
+ VipSeed vipseed = entitymanager.find(VipSeed.class, seedid);
+ if(vipseed == null){
+ return 1;
+ }
+ vipseed.farmernumber = vipseed.farmernumber + number;
+ entitymanager.merge(vipseed);
+
+ return 0;
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ return 1;
+ }
+
+ }
+
+ //种子降低的保种人数,返回值:0,写入成功,1:写入失败,其他待定
+ @Override
+ public int ReduceFarmerNumber(int number,String seedid){
+ try {
+ VipSeed vipSeed = entitymanager.find(VipSeed.class, seedid);
+ if(vipSeed == null){
+ return 1;
+ }
+ vipSeed.farmernumber = vipSeed.farmernumber - number;
+ entitymanager.merge(vipSeed);
+
+ return 0;
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ return 1;
+ }
+
+ }
+
+ //将种子加入保种列表
+ // @Override
+ public int KeepSeed(String seedid){
+ try {
+ Seed seed = entitymanager.find(Seed.class, seedid);
+ if(seed == null){
+ return 1; //种子不存在
+ }
+ VipSeed vipSeed = new VipSeed();
+ vipSeed.seedid = seedid;
+ vipSeed.seed = seed;
+ vipSeed.seedercount = 1; // 初始保种人数为1
+ vipSeed.rewardmagic = 50; // 初始奖励魔法值为50
+ vipSeed.stopcaching = 0; // 初始停止缓存状态为0
+ vipSeed.bonus = 50; // 初始奖励为50
+ vipSeed.cachestate = true; // 初始缓存状态为true
+ vipSeed.farmernumber = 0; // 初始农民人数为0
+
+ entitymanager.persist(vipSeed);
+ return 0; // 成功添加到保种列表
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ return 2; // 添加失败
+ }
+
+ }
+
+ //将种子移除保种列表
+ @Override
+ public int RemoveSeed(String seedid){
+ try {
+ VipSeed vipSeed = entitymanager.find(VipSeed.class, seedid);
+ if(vipSeed == null){
+ return 0;
+ }
+ entitymanager.remove(vipSeed);
+ return 0;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return 1;
+ }
+
+ }
+
+ //由外部触发,调用类内函数更新保种列表
+ @Override
+ public void CheckSeed(){
+ JPAQuery<VipSeed> query = new JPAQuery<>(entitymanager);
+ QVipSeed v = QVipSeed.vipSeed;
+ // 保证 select(v) 返回 List<VipSeed>
+ List<VipSeed> allVipSeeds = query.select(v).from(v).fetch();
+ for (VipSeed vipSeed : allVipSeeds) {
+ if (vipSeed.farmernumber > seedKeepNumber) {
+ entitymanager.remove(vipSeed);
+ }
+ }
+ }
+
+ //获取当前需要保种的所有种子信息
+ @Override
+ public Seed[] GetSeedToPlant(){
+ JPAQuery<String> query = new JPAQuery<>(entitymanager);
+ QVipSeed v = QVipSeed.vipSeed;
+ List<String> allSeedId = query.select(v.seedid).from(v).fetch();
+
+ if(allSeedId.isEmpty()){
+ return new Seed[0];
+ }
+ JPAQuery<Seed> query2 = new JPAQuery<>(entitymanager);
+ QSeed s = QSeed.seed;
+ List<Seed> allSeeds = query2.select(s).from(s).where(s.seedid.in(allSeedId)).fetch();
+
+ return allSeeds.toArray(new Seed[0]);
+ }
+
+}
+
diff --git a/src/main/java/vip/VipInterface.java b/src/main/java/vip/VipInterface.java
index fd3413c..6348e73 100644
--- a/src/main/java/vip/VipInterface.java
+++ b/src/main/java/vip/VipInterface.java
@@ -1,18 +1,17 @@
package vip;
+import java.io.File;
+
import org.apache.commons.lang3.tuple.Pair;
import entity.Seed;
-import entity.TTorent;
-
-import java.io.File;
public interface VipInterface{
- public Pair<File,Integer> GetTTorent(String seedid,String userid);//获取专线下载的文件,并记录用户的下载行为
+ public Pair<File,Integer> GetTTorent(String seedid,String userid,String ip);//获取专线下载的文件,并记录用户的下载行为
//如果用户权限足够,文件存在,integer为0,如果用户权限足够,文件不存在,integer为1,file为null 如果用户权限不足,file为null,integer为2;
public int AddFarmerNumber(int number,String seedid);//种子增加了新的保种人数,返回值:0,写入成功,1写入失败,其他待定
public int ReduceFarmerNumber(int number,String seedid);//种子降低的保种人数,返回值:0,写入成功,1:写入失败,其他待定
- public int KeepSeed(TTorent seed,String seedid);//将种子加入保种列表
+ public int KeepSeed(String seedid);//将种子加入保种列表
public int RemoveSeed(String seedid);//将种子移除保种列表
public void CheckSeed();//由外部触发,调用类内函数更新保种列表