修改Vip部分接口,实现Vip和DB1接口功能及单元测试,新增VipSeed和UserStar实体类
Change-Id: I0479a68f3ff8c8ccd0fd7e9e5894e5b48cb7ffec
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();//由外部触发,调用类内函数更新保种列表