blob: e0b3ad1fc757e38bc9a47f27e9f057c6f97c733a [file] [log] [blame]
rootcd436562025-05-08 14:09:19 +00001package vip;
root0dbc9812025-05-19 04:41:57 +00002import java.io.File;
3import java.util.List;
rootcd436562025-05-08 14:09:19 +00004
root0dbc9812025-05-19 04:41:57 +00005import javax.persistence.EntityManager;
6import javax.persistence.PersistenceContext;
7
8import org.apache.commons.lang3.tuple.Pair;
9
10import com.querydsl.jpa.impl.JPAQuery;
11
12import entity.QSeed;
13import entity.QUser;
14import entity.QVipSeed;
15import entity.Seed;
16import entity.User;
17import entity.VipSeed;
18
19public class Vip implements VipInterface {
20
21 int seedKeepNumber = 10;
22
23 @PersistenceContext
24 private EntityManager entitymanager;
rootcd436562025-05-08 14:09:19 +000025
root0dbc9812025-05-19 04:41:57 +000026 //获取专线下载的文件,并记录用户的下载行为
27 //如果用户权限足够,文件存在,integer为0,如果用户权限足够,文件不存在,
28 //integer为1,file为null 如果用户权限不足,file为null,integer为2;
29 @Override
30 public Pair<File,Integer> GetTTorent(String seedid,String userid,String ip){
31 EntityManager em = this.entitymanager;
32 File file = null;
33 try {
34 if (seedid == null || userid == null || ip == null) {
35 return Pair.of(null, 2);
36 }
37 Seed seed = em.find(Seed.class, seedid);
38 if (seed == null || seed.url == null) {
39 return Pair.of(null, 1);
40 }
41 User user = em.find(User.class, userid);
42 if (user == null) {
43 return Pair.of(null, 2);
44 }
45 file = new File(seed.url);
46 JPAQuery<Boolean> query = new JPAQuery<>(em);
47 QUser u = QUser.user;
48 Boolean status = query.select(u.accountstate).where(u.userid.eq(userid)).fetchOne();
49 if (!file.exists()) {
50 if (status){
51 return Pair.of(null, 2);
52 } else {
53 return Pair.of(null, 1);
54 }
55 }
56 if (status){
57 return Pair.of(null, 2);
58 }
59
60 // 记录下载行为
61 javax.persistence.EntityTransaction tx = em.getTransaction();
62 tx.begin();
63 entity.SeedDownload sd = new entity.SeedDownload();
64 sd.seedId = seedid;
65 sd.userId = userid;
66 sd.clientIp = ip;
67 java.time.LocalDateTime now = java.time.LocalDateTime.now();
68 sd.downloadStart = now;
69 sd.downloadEnd = now;
70 em.persist(sd);
71 tx.commit();
72 } catch (Exception e) {
73 // ignore persistence errors and still return the file
74 }
75 return Pair.of(file, 0);
76 }
77
78 //种子增加了新的保种人数,返回值:0,写入成功,1写入失败,其他待定
79 @Override
80 public int AddFarmerNumber(int number,String seedid){
81 try {
82 VipSeed vipseed = entitymanager.find(VipSeed.class, seedid);
83 if(vipseed == null){
84 return 1;
85 }
86 vipseed.farmernumber = vipseed.farmernumber + number;
87 entitymanager.merge(vipseed);
88
89 return 0;
90
91 } catch (Exception e) {
92 e.printStackTrace();
93 return 1;
94 }
95
96 }
97
98 //种子降低的保种人数,返回值:0,写入成功,1:写入失败,其他待定
99 @Override
100 public int ReduceFarmerNumber(int number,String seedid){
101 try {
102 VipSeed vipSeed = entitymanager.find(VipSeed.class, seedid);
103 if(vipSeed == null){
104 return 1;
105 }
106 vipSeed.farmernumber = vipSeed.farmernumber - number;
107 entitymanager.merge(vipSeed);
108
109 return 0;
110
111 } catch (Exception e) {
112 e.printStackTrace();
113 return 1;
114 }
115
116 }
117
118 //将种子加入保种列表
119 // @Override
120 public int KeepSeed(String seedid){
121 try {
122 Seed seed = entitymanager.find(Seed.class, seedid);
123 if(seed == null){
124 return 1; //种子不存在
125 }
126 VipSeed vipSeed = new VipSeed();
127 vipSeed.seedid = seedid;
128 vipSeed.seed = seed;
129 vipSeed.seedercount = 1; // 初始保种人数为1
130 vipSeed.rewardmagic = 50; // 初始奖励魔法值为50
131 vipSeed.stopcaching = 0; // 初始停止缓存状态为0
132 vipSeed.bonus = 50; // 初始奖励为50
133 vipSeed.cachestate = true; // 初始缓存状态为true
134 vipSeed.farmernumber = 0; // 初始农民人数为0
135
136 entitymanager.persist(vipSeed);
137 return 0; // 成功添加到保种列表
138
139 } catch (Exception e) {
140 e.printStackTrace();
141 return 2; // 添加失败
142 }
143
144 }
145
146 //将种子移除保种列表
147 @Override
148 public int RemoveSeed(String seedid){
149 try {
150 VipSeed vipSeed = entitymanager.find(VipSeed.class, seedid);
151 if(vipSeed == null){
152 return 0;
153 }
154 entitymanager.remove(vipSeed);
155 return 0;
156 } catch (Exception e) {
157 e.printStackTrace();
158 return 1;
159 }
160
161 }
162
163 //由外部触发,调用类内函数更新保种列表
164 @Override
165 public void CheckSeed(){
166 JPAQuery<VipSeed> query = new JPAQuery<>(entitymanager);
167 QVipSeed v = QVipSeed.vipSeed;
168 // 保证 select(v) 返回 List<VipSeed>
169 List<VipSeed> allVipSeeds = query.select(v).from(v).fetch();
170 for (VipSeed vipSeed : allVipSeeds) {
171 if (vipSeed.farmernumber > seedKeepNumber) {
172 entitymanager.remove(vipSeed);
173 }
174 }
175 }
176
177 //获取当前需要保种的所有种子信息
178 @Override
179 public Seed[] GetSeedToPlant(){
180 JPAQuery<String> query = new JPAQuery<>(entitymanager);
181 QVipSeed v = QVipSeed.vipSeed;
182 List<String> allSeedId = query.select(v.seedid).from(v).fetch();
183
184 if(allSeedId.isEmpty()){
185 return new Seed[0];
186 }
187 JPAQuery<Seed> query2 = new JPAQuery<>(entitymanager);
188 QSeed s = QSeed.seed;
189 List<Seed> allSeeds = query2.select(s).from(s).where(s.seedid.in(allSeedId)).fetch();
190
191 return allSeeds.toArray(new Seed[0]);
192 }
193
194}
195