blob: cb35c05409e6f5237aeb5ff9274afd01577575b7 [file] [log] [blame]
rootcd436562025-05-08 14:09:19 +00001package cheat;
2
Raver5ba779f2025-05-14 12:48:12 +00003import java.util.ArrayList;
rhje18c3f72025-06-08 00:27:01 +08004import java.util.HashMap;
Raver5ba779f2025-05-14 12:48:12 +00005import java.util.List;
rhje18c3f72025-06-08 00:27:01 +08006import java.util.Map;
Raver5ba779f2025-05-14 12:48:12 +00007
8import javax.persistence.EntityManager;
rhje18c3f72025-06-08 00:27:01 +08009import javax.persistence.EntityManagerFactory;
10import javax.persistence.Persistence;
Raverf79fdb62025-06-03 06:02:49 +000011import javax.persistence.PersistenceContext;
12import javax.transaction.Transactional;
Raver5ba779f2025-05-14 12:48:12 +000013
14import org.apache.commons.lang3.tuple.Pair;
rhje18c3f72025-06-08 00:27:01 +080015import java.io.File;
16import java.nio.file.Files;
17import java.nio.file.Path;
18import java.nio.file.Paths;
19import java.nio.file.StandardCopyOption;
Raver5ba779f2025-05-14 12:48:12 +000020
21import com.querydsl.jpa.impl.JPAQueryFactory;
22
23import entity.Appeal;
24import entity.QAppeal;
25import entity.QSeed;
26import entity.User;
27import entity.config;
rhje18c3f72025-06-08 00:27:01 +080028import entity.QUser;
29import entity.TTorent;
Raver5ba779f2025-05-14 12:48:12 +000030
31public class Cheat implements CheatInterfnterface {
32
Raverf79fdb62025-06-03 06:02:49 +000033 @PersistenceContext
rhje18c3f72025-06-08 00:27:01 +080034 private EntityManagerFactory emf;
35
36 public Cheat() {
37 config cfg = new config();
38 Map<String,Object> props = new HashMap<>();
39 props.put("javax.persistence.jdbc.url",
40 "jdbc:mysql://" + cfg.SqlURL + "/" + cfg.Database);
41 props.put("javax.persistence.jdbc.user", cfg.SqlUsername);
42 props.put("javax.persistence.jdbc.password", cfg.SqlPassword);
43 this.emf = Persistence.createEntityManagerFactory("myPersistenceUnit", props);
44 }
Raver5ba779f2025-05-14 12:48:12 +000045
46 @Override
Raverf79fdb62025-06-03 06:02:49 +000047 @Transactional
Raver5ba779f2025-05-14 12:48:12 +000048 public boolean AddAppeal(Appeal appeal) {
rhje18c3f72025-06-08 00:27:01 +080049 EntityManager entityManager = emf.createEntityManager();
Raver5ba779f2025-05-14 12:48:12 +000050 try {
rhje18c3f72025-06-08 00:27:01 +080051 entityManager.getTransaction().begin();
Raverf79fdb62025-06-03 06:02:49 +000052 entityManager.persist(appeal);
rhje18c3f72025-06-08 00:27:01 +080053 entityManager.getTransaction().commit();
Raver5ba779f2025-05-14 12:48:12 +000054 } catch (Exception e) {
55 e.printStackTrace();
rhje18c3f72025-06-08 00:27:01 +080056 if (entityManager.getTransaction().isActive()) {
57 entityManager.getTransaction().rollback();
58 }
Raver5ba779f2025-05-14 12:48:12 +000059 return false;
60 }
61 return true;
62 }
63
64 @Override
65 public Appeal GetAppeal(String appealid) {
66 try {
rhje18c3f72025-06-08 00:27:01 +080067 EntityManager entityManager = emf.createEntityManager();
Raverf79fdb62025-06-03 06:02:49 +000068 JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
Raver5ba779f2025-05-14 12:48:12 +000069 QAppeal qAppeal = QAppeal.appeal;
70 Appeal appeal = queryFactory
Raverf79fdb62025-06-03 06:02:49 +000071 .selectFrom(qAppeal)
72 .where(qAppeal.appealid.eq(appealid))
73 .fetchOne();
Raver5ba779f2025-05-14 12:48:12 +000074 return appeal;
75 } catch (Exception e) {
76 e.printStackTrace();
77 return null;
78 }
79 }
80
81 @Override
82 public Appeal[] GetAppealList() {
rhje18c3f72025-06-08 00:27:01 +080083 EntityManager entityManager = emf.createEntityManager();
Raver5ba779f2025-05-14 12:48:12 +000084 try {
Raverf79fdb62025-06-03 06:02:49 +000085 JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
Raver5ba779f2025-05-14 12:48:12 +000086 QAppeal qAppeal = QAppeal.appeal;
87 List<Appeal> appeals = queryFactory
Raverf79fdb62025-06-03 06:02:49 +000088 .selectFrom(qAppeal)
89 .fetch();
Raver5ba779f2025-05-14 12:48:12 +000090 return appeals.toArray(new Appeal[0]);
91 } catch (Exception e) {
92 e.printStackTrace();
93 return null;
rhje18c3f72025-06-08 00:27:01 +080094 } finally {
95 if (entityManager != null) {
96 entityManager.close();
97 }
Raver5ba779f2025-05-14 12:48:12 +000098 }
99 }
100
101 @Override
102 public boolean HandleAppeal(String appealid, Integer status) {
rhje18c3f72025-06-08 00:27:01 +0800103 EntityManager entityManager = emf.createEntityManager();
Raver5ba779f2025-05-14 12:48:12 +0000104 try {
Raverf79fdb62025-06-03 06:02:49 +0000105 Appeal appeal = GetAppeal(appealid);
Raver5ba779f2025-05-14 12:48:12 +0000106 if (appeal != null) {
107 appeal.status = status;
rhje18c3f72025-06-08 00:27:01 +0800108 entityManager.getTransaction().begin();
Raverf79fdb62025-06-03 06:02:49 +0000109 entityManager.merge(appeal);
110 User user = entityManager.find(User.class, appeal.appealuserid);
rhje18c3f72025-06-08 00:27:01 +0800111 // if (user != null && user.accountstate != false) {
112 if (user != null) {
Raver5ba779f2025-05-14 12:48:12 +0000113 if (status == 1) {
114 user.accountstate = false;
115 }
Raverf79fdb62025-06-03 06:02:49 +0000116 entityManager.merge(user);
Raver5ba779f2025-05-14 12:48:12 +0000117 }
rhje18c3f72025-06-08 00:27:01 +0800118 entityManager.getTransaction().commit();
Raver5ba779f2025-05-14 12:48:12 +0000119 return true;
120 }
121 return false;
122 } catch (Exception e) {
123 e.printStackTrace();
rhje18c3f72025-06-08 00:27:01 +0800124 if (emf.createEntityManager().getTransaction().isActive()) {
125 emf.createEntityManager().getTransaction().rollback();
126 }
Raver5ba779f2025-05-14 12:48:12 +0000127 return false;
rhje18c3f72025-06-08 00:27:01 +0800128 } finally {
129 if (entityManager != null) {
130 entityManager.close();
131 }
Raver5ba779f2025-05-14 12:48:12 +0000132 }
133 }
134
135 @Override
136 public Pair<String, String>[] GetFakeSeed() {
137 List<Pair<String, String>> fakeSeeds = new ArrayList<>();
138 try {
rhje18c3f72025-06-08 00:27:01 +0800139 EntityManager entityManager = emf.createEntityManager();
Raverf79fdb62025-06-03 06:02:49 +0000140 JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
Raver5ba779f2025-05-14 12:48:12 +0000141 QSeed qSeed = QSeed.seed;
142 List<com.querydsl.core.Tuple> results = queryFactory
Raverf79fdb62025-06-03 06:02:49 +0000143 .select(qSeed.seedid, qSeed.seeduserid)
144 .from(qSeed)
rhje18c3f72025-06-08 00:27:01 +0800145 .where(qSeed.faketime.gt(config.getFakeTime()))
Raverf79fdb62025-06-03 06:02:49 +0000146 .fetch();
Raver5ba779f2025-05-14 12:48:12 +0000147 for (com.querydsl.core.Tuple result : results) {
148 String seedid = result.get(qSeed.seedid);
Raverf79fdb62025-06-03 06:02:49 +0000149 String userid = result.get(qSeed.seeduserid);
Raver5ba779f2025-05-14 12:48:12 +0000150 fakeSeeds.add(Pair.of(seedid, userid));
151 }
152 } catch (Exception e) {
153 e.printStackTrace();
154 return null;
155 }
156 return fakeSeeds.toArray(new Pair[0]);
157 }
158
159 @Override
160 public String[] GetPunishedUserList() {
161 List<String> punishedUsers = new ArrayList<>();
162 try {
rhje18c3f72025-06-08 00:27:01 +0800163 EntityManager entityManager = emf.createEntityManager();
Raverf79fdb62025-06-03 06:02:49 +0000164 JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
Raver5ba779f2025-05-14 12:48:12 +0000165 entity.QUser qUser = entity.QUser.user;
166 List<String> results = queryFactory
Raverf79fdb62025-06-03 06:02:49 +0000167 .select(qUser.userid)
168 .from(qUser)
169 .where(qUser.accountstate.isTrue())
170 .fetch();
Raver5ba779f2025-05-14 12:48:12 +0000171 for (String userid : results) {
172 punishedUsers.add(userid);
173 }
174 } catch (Exception e) {
175 e.printStackTrace();
176 return null;
177 }
178 return punishedUsers.toArray(new String[0]);
179 }
180
181 @Override
182 public void DetectTrans() {
183 // JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
184 // QSeed qSeed = QSeed.seed;
185 // List<Seed> seeds = queryFactory
186 // .selectFrom(qSeed)
187 // .fetch();
188 // for (Seed seed : seeds) {
189 // QTransRecord qTransRecord = QTransRecord.transRecord;
190 // List<TransRecord> tasks = queryFactory
191 // .selectFrom(qTransRecord)
192 // .where(qTransRecord.seedid.eq(seed.seedid))
193 // .fetch();
194
195 // int n = tasks.size();
196 // if (n == 0) continue;
Raverf79fdb62025-06-03 06:02:49 +0000197
Raver5ba779f2025-05-14 12:48:12 +0000198 // double[] xArr = new double[n];
199 // for (int i = 0; i < n; i++) {
200 // TransRecord t = tasks.get(i);
201 // xArr[i] = Math.max(0, t.upload - t.download);
202 // }
Raverf79fdb62025-06-03 06:02:49 +0000203
Raver5ba779f2025-05-14 12:48:12 +0000204 // double sum = 0;
205 // for (double x : xArr) sum += x;
206 // double mu = sum / n;
Raverf79fdb62025-06-03 06:02:49 +0000207
Raver5ba779f2025-05-14 12:48:12 +0000208 // double sqSum = 0;
209 // for (double x : xArr) sqSum += (x - mu) * (x - mu);
210 // double sigma = Math.sqrt(sqSum / n);
Raverf79fdb62025-06-03 06:02:49 +0000211
Raver5ba779f2025-05-14 12:48:12 +0000212 // for (int i = 0; i < n; i++) {
213 // if (Math.abs(xArr[i] - mu) > 3 * sigma) {
214 // User user = entityManager.find(User.class, tasks.get(i).downloaduserid);
215 // if (user != null) {
216 // user.detectedCount++;
217 // user.lastDetectedTime = new java.util.Date();
218 // entityManager.merge(user);
219 // }
220 // }
221 // }
222 // }
223 }
224
225 @Override
Raverf79fdb62025-06-03 06:02:49 +0000226 public void DetectFakeSeed(){
Raver5ba779f2025-05-14 12:48:12 +0000227 }
228
229 @Override
Raverf79fdb62025-06-03 06:02:49 +0000230 public boolean DetectFakeSeed(String seedid){
Raver5ba779f2025-05-14 12:48:12 +0000231 return false;
232 }
233
234 @Override
Raverf79fdb62025-06-03 06:02:49 +0000235 public void PunishUser(){
rhje18c3f72025-06-08 00:27:01 +0800236 EntityManager entityManager = emf.createEntityManager();
Raverf79fdb62025-06-03 06:02:49 +0000237 JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
238 entity.QUser qUser = entity.QUser.user;
239 List<User> users = queryFactory
240 .selectFrom(qUser)
rhje18c3f72025-06-08 00:27:01 +0800241 .where(qUser.detectedCount.gt(config.getCheatTime())
242 .or(qUser.fakeDetectedCount.gt(config.getFakeTime())))
Raverf79fdb62025-06-03 06:02:49 +0000243 .fetch();
Raver5ba779f2025-05-14 12:48:12 +0000244
Raverf79fdb62025-06-03 06:02:49 +0000245 for (User user : users) {
246 user.accountstate = true;
247 entityManager.merge(user);
Raver5ba779f2025-05-14 12:48:12 +0000248 }
249 }
rhje18c3f72025-06-08 00:27:01 +0800250
251 @Override
252 public User[] GetCheatUsers() {
253 EntityManager entityManager = emf.createEntityManager();
254 List<User> cheatUsers = new ArrayList<>();
255 try {
256 JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
257 QUser qUser = QUser.user;
258 cheatUsers = queryFactory
259 .selectFrom(qUser)
260 .where(qUser.accountstate.eq(true))
261 .fetch();
262 return cheatUsers.toArray(new User[0]);
263 } catch (Exception e) {
264 e.printStackTrace();
265 return null;
266 } finally {
267 if (entityManager != null){
268 entityManager.close();
269 }
270 }
271 }
272
273 @Override
274 public User[] GetSuspiciousUsers() {
275 EntityManager entityManager = emf.createEntityManager();
276 List<User> suspiciousUsers = new ArrayList<>();
277 try {
278 JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
279 QUser qUser = QUser.user;
280 suspiciousUsers = queryFactory
281 .selectFrom(qUser)
282 .where((qUser.detectedCount.gt(0)
283 .or(qUser.fakeDetectedCount.gt(0)))
284 .and(qUser.accountstate.eq(false)))
285 .fetch();
286 return suspiciousUsers.toArray(new User[0]);
287 } catch (Exception e) {
288 e.printStackTrace();
289 return null;
290 } finally {
291 if (entityManager != null){
292 entityManager.close();
293 }
294 }
295 }
296
297 @Override
298 public int UnbanUser(String userid) {
299 EntityManager entityManager = emf.createEntityManager();
300 try {
301 User user = entityManager.find(User.class, userid);
302 if (user == null) {
303 return 1; // 用户不存在
304 }
305 if (user.accountstate) {
306 user.accountstate = false; // 解封用户
307 entityManager.getTransaction().begin();
308 entityManager.merge(user);
309 entityManager.getTransaction().commit();
310 return 0; // 成功解封
311 }
312 return 2; // 用户未被封禁
313 } catch (Exception e) {
314 e.printStackTrace();
315 if (entityManager.getTransaction().isActive()) {
316 entityManager.getTransaction().rollback();
317 }
318 return -1; // 出现异常
319 } finally {
320 if (entityManager != null){
321 entityManager.close();
322 }
323 }
324 }
325
326 @Override
327 public int BanUser(String userid) {
328 EntityManager entityManager = emf.createEntityManager();
329 try {
330 User user = entityManager.find(User.class, userid);
331 if (user == null) {
332 return 1; // 用户不存在
333 }
334 if (!user.accountstate) {
335 user.accountstate = true; // 封禁用户
336 entityManager.getTransaction().begin();
337 entityManager.merge(user);
338 entityManager.getTransaction().commit();
339 return 0; // 成功封禁
340 }
341 return 2; // 用户已被封禁
342 } catch (Exception e) {
343 e.printStackTrace();
344 if (entityManager.getTransaction().isActive()) {
345 entityManager.getTransaction().rollback();
346 }
347 return -1; // 出现异常
348 } finally {
349 if (entityManager != null){
350 entityManager.close();
351 }
352 }
353 }
354
355 @Override
356 public int SubmitAppeal(String userid, String content, File file) {
357 EntityManager entityManager = emf.createEntityManager();
358 try {
359 User user = entityManager.find(User.class, userid);
360 if (user == null) {
361 return 1; // 用户不存在
362 }
363 Appeal appeal = new Appeal();
364 appeal.appealid = java.util.UUID.randomUUID().toString();
365 appeal.appealuserid = userid;
366 appeal.content = content;
367 appeal.user = user; // 设置关联的用户
368 Path storageDir = Paths.get(config.APPEAL_STORAGE_DIR);
369 if (!Files.exists(storageDir)) {
370 Files.createDirectories(storageDir);
371 }
372 String filename = file.getName();
373 Path target = storageDir.resolve(appeal.appealid + "_" + filename);
374 Files.copy(file.toPath(), target, StandardCopyOption.REPLACE_EXISTING);
375 appeal.status = 0; // 初始状态为未处理
376 appeal.fileURL = target.toString(); // 设置文件存储路径
377 entityManager.getTransaction().begin();
378 entityManager.persist(appeal);
379 entityManager.getTransaction().commit();
380 return 0; // 成功提交申诉
381 } catch (Exception e) {
382 e.printStackTrace();
383 if (entityManager.getTransaction().isActive()) {
384 entityManager.getTransaction().rollback();
385 }
386 return -1; // 出现异常
387 } finally {
388 if (entityManager != null){
389 entityManager.close();
390 }
391 }
392 }
Raverf79fdb62025-06-03 06:02:49 +0000393}