修改Vip部分接口,实现Vip和DB1接口功能及单元测试,新增VipSeed和UserStar实体类

Change-Id: I0479a68f3ff8c8ccd0fd7e9e5894e5b48cb7ffec
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];
+    }
+    //获取所有迁移信息
+
+}
+