blob: 270f2fd79bfe81eaccc2eae261f533cf9631b435 [file] [log] [blame]
rootcd436562025-05-08 14:09:19 +00001package cheat;
2
Raver5ba779f2025-05-14 12:48:12 +00003import java.util.ArrayList;
root678fd3e2025-06-03 14:20:20 +00004import java.util.HashMap;
Raver5ba779f2025-05-14 12:48:12 +00005import java.util.List;
root678fd3e2025-06-03 14:20:20 +00006import java.util.Map;
Raver5ba779f2025-05-14 12:48:12 +00007
8import javax.persistence.EntityManager;
root678fd3e2025-06-03 14:20:20 +00009import javax.persistence.EntityManagerFactory;
10import javax.persistence.Persistence;
11import javax.persistence.EntityTransaction;
Raver5ba779f2025-05-14 12:48:12 +000012
13import org.apache.commons.lang3.tuple.Pair;
14
15import com.querydsl.jpa.impl.JPAQueryFactory;
16
17import entity.Appeal;
18import entity.QAppeal;
19import entity.QSeed;
20import entity.User;
21import entity.config;
22
23public class Cheat implements CheatInterfnterface {
24
root678fd3e2025-06-03 14:20:20 +000025 private EntityManagerFactory emf;
26
27 public Cheat() {
28 config cfg = new config();
29 Map<String, Object> props = new HashMap<>();
30 props.put("javax.persistence.jdbc.url",
31 "jdbc:mysql://" + cfg.SqlURL + "/" + cfg.Database);
32 props.put("javax.persistence.jdbc.user", cfg.SqlUsername);
33 props.put("javax.persistence.jdbc.password", cfg.SqlPassword);
34 this.emf = Persistence.createEntityManagerFactory("myPersistenceUnit", props);
35 }
36
37 // 测试时注入
38 public Cheat(EntityManagerFactory emf) {
39 this.emf = emf;
40 }
41
42 private EntityManager getEntityManager() {
43 return emf.createEntityManager();
44 }
Raver5ba779f2025-05-14 12:48:12 +000045
46 @Override
Raver5ba779f2025-05-14 12:48:12 +000047 public boolean AddAppeal(Appeal appeal) {
root678fd3e2025-06-03 14:20:20 +000048 EntityManager em = getEntityManager();
49 EntityTransaction tx = em.getTransaction();
Raver5ba779f2025-05-14 12:48:12 +000050 try {
root678fd3e2025-06-03 14:20:20 +000051 tx.begin();
52 em.persist(appeal);
53 tx.commit();
Raver5ba779f2025-05-14 12:48:12 +000054 } catch (Exception e) {
root678fd3e2025-06-03 14:20:20 +000055 if (tx.isActive()) {
56 tx.rollback();
57 }
Raver5ba779f2025-05-14 12:48:12 +000058 e.printStackTrace();
59 return false;
root678fd3e2025-06-03 14:20:20 +000060 } finally {
61 em.close();
Raver5ba779f2025-05-14 12:48:12 +000062 }
63 return true;
64 }
65
66 @Override
67 public Appeal GetAppeal(String appealid) {
root678fd3e2025-06-03 14:20:20 +000068 EntityManager em = getEntityManager();
Raver5ba779f2025-05-14 12:48:12 +000069 try {
root678fd3e2025-06-03 14:20:20 +000070 JPAQueryFactory queryFactory = new JPAQueryFactory(em);
Raver5ba779f2025-05-14 12:48:12 +000071 QAppeal qAppeal = QAppeal.appeal;
72 Appeal appeal = queryFactory
root678fd3e2025-06-03 14:20:20 +000073 .selectFrom(qAppeal)
74 .where(qAppeal.appealid.eq(appealid))
75 .fetchOne();
Raver5ba779f2025-05-14 12:48:12 +000076 return appeal;
77 } catch (Exception e) {
78 e.printStackTrace();
79 return null;
root678fd3e2025-06-03 14:20:20 +000080 } finally {
81 em.close();
Raver5ba779f2025-05-14 12:48:12 +000082 }
83 }
84
85 @Override
86 public Appeal[] GetAppealList() {
root678fd3e2025-06-03 14:20:20 +000087 EntityManager em = getEntityManager();
Raver5ba779f2025-05-14 12:48:12 +000088 try {
root678fd3e2025-06-03 14:20:20 +000089 JPAQueryFactory queryFactory = new JPAQueryFactory(em);
Raver5ba779f2025-05-14 12:48:12 +000090 QAppeal qAppeal = QAppeal.appeal;
91 List<Appeal> appeals = queryFactory
root678fd3e2025-06-03 14:20:20 +000092 .selectFrom(qAppeal)
93 .fetch();
Raver5ba779f2025-05-14 12:48:12 +000094 return appeals.toArray(new Appeal[0]);
95 } catch (Exception e) {
96 e.printStackTrace();
97 return null;
root678fd3e2025-06-03 14:20:20 +000098 } finally {
99 em.close();
Raver5ba779f2025-05-14 12:48:12 +0000100 }
101 }
102
103 @Override
104 public boolean HandleAppeal(String appealid, Integer status) {
root678fd3e2025-06-03 14:20:20 +0000105 EntityManager em = getEntityManager();
106 EntityTransaction tx = em.getTransaction();
Raver5ba779f2025-05-14 12:48:12 +0000107 try {
root678fd3e2025-06-03 14:20:20 +0000108 tx.begin();
109 Appeal appeal = em.find(Appeal.class, appealid);
Raver5ba779f2025-05-14 12:48:12 +0000110 if (appeal != null) {
111 appeal.status = status;
root678fd3e2025-06-03 14:20:20 +0000112 em.merge(appeal);
113 User user = em.find(User.class, appeal.appealuserid);
Raver5ba779f2025-05-14 12:48:12 +0000114 if (user != null && user.accountstate != false) {
115 if (status == 1) {
116 user.accountstate = false;
117 }
root678fd3e2025-06-03 14:20:20 +0000118 em.merge(user);
Raver5ba779f2025-05-14 12:48:12 +0000119 }
root678fd3e2025-06-03 14:20:20 +0000120 tx.commit();
Raver5ba779f2025-05-14 12:48:12 +0000121 return true;
122 }
123 return false;
124 } catch (Exception e) {
125 e.printStackTrace();
126 return false;
root678fd3e2025-06-03 14:20:20 +0000127 } finally {
128 if (tx.isActive()) {
129 tx.rollback();
130 }
131 em.close();
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<>();
root678fd3e2025-06-03 14:20:20 +0000138 EntityManager em = getEntityManager();
Raver5ba779f2025-05-14 12:48:12 +0000139 try {
root678fd3e2025-06-03 14:20:20 +0000140 JPAQueryFactory queryFactory = new JPAQueryFactory(em);
Raver5ba779f2025-05-14 12:48:12 +0000141 QSeed qSeed = QSeed.seed;
142 List<com.querydsl.core.Tuple> results = queryFactory
root678fd3e2025-06-03 14:20:20 +0000143 .select(qSeed.seedid, qSeed.seeduserid)
144 .from(qSeed)
145 .where(qSeed.faketime.gt(new config().FakeTime))
146 .fetch();
Raver5ba779f2025-05-14 12:48:12 +0000147 for (com.querydsl.core.Tuple result : results) {
148 String seedid = result.get(qSeed.seedid);
root678fd3e2025-06-03 14:20:20 +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;
root678fd3e2025-06-03 14:20:20 +0000155 } finally {
156 em.close();
Raver5ba779f2025-05-14 12:48:12 +0000157 }
158 return fakeSeeds.toArray(new Pair[0]);
159 }
160
161 @Override
162 public String[] GetPunishedUserList() {
163 List<String> punishedUsers = new ArrayList<>();
root678fd3e2025-06-03 14:20:20 +0000164 EntityManager em = getEntityManager();
Raver5ba779f2025-05-14 12:48:12 +0000165 try {
root678fd3e2025-06-03 14:20:20 +0000166 JPAQueryFactory queryFactory = new JPAQueryFactory(em);
Raver5ba779f2025-05-14 12:48:12 +0000167 entity.QUser qUser = entity.QUser.user;
168 List<String> results = queryFactory
root678fd3e2025-06-03 14:20:20 +0000169 .select(qUser.userid)
170 .from(qUser)
171 .where(qUser.accountstate.isTrue())
172 .fetch();
Raver5ba779f2025-05-14 12:48:12 +0000173 for (String userid : results) {
174 punishedUsers.add(userid);
175 }
176 } catch (Exception e) {
177 e.printStackTrace();
178 return null;
root678fd3e2025-06-03 14:20:20 +0000179 } finally {
180 em.close();
Raver5ba779f2025-05-14 12:48:12 +0000181 }
182 return punishedUsers.toArray(new String[0]);
183 }
184
185 @Override
186 public void DetectTrans() {
187 // JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
188 // QSeed qSeed = QSeed.seed;
189 // List<Seed> seeds = queryFactory
190 // .selectFrom(qSeed)
191 // .fetch();
192 // for (Seed seed : seeds) {
193 // QTransRecord qTransRecord = QTransRecord.transRecord;
194 // List<TransRecord> tasks = queryFactory
195 // .selectFrom(qTransRecord)
196 // .where(qTransRecord.seedid.eq(seed.seedid))
197 // .fetch();
198
199 // int n = tasks.size();
200 // if (n == 0) continue;
Raver5ba779f2025-05-14 12:48:12 +0000201 // double[] xArr = new double[n];
202 // for (int i = 0; i < n; i++) {
203 // TransRecord t = tasks.get(i);
204 // xArr[i] = Math.max(0, t.upload - t.download);
205 // }
Raver5ba779f2025-05-14 12:48:12 +0000206 // double sum = 0;
207 // for (double x : xArr) sum += x;
208 // double mu = sum / n;
Raver5ba779f2025-05-14 12:48:12 +0000209 // double sqSum = 0;
210 // for (double x : xArr) sqSum += (x - mu) * (x - mu);
211 // double sigma = Math.sqrt(sqSum / n);
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
root678fd3e2025-06-03 14:20:20 +0000226 public void DetectFakeSeed() {
Raver5ba779f2025-05-14 12:48:12 +0000227 }
228
229 @Override
root678fd3e2025-06-03 14:20:20 +0000230 public boolean DetectFakeSeed(String seedid) {
Raver5ba779f2025-05-14 12:48:12 +0000231 return false;
232 }
233
234 @Override
root678fd3e2025-06-03 14:20:20 +0000235 public void PunishUser() {
236 EntityManager em = getEntityManager();
237 EntityTransaction tx = em.getTransaction();
238 try {
239 tx.begin();
240 JPAQueryFactory queryFactory = new JPAQueryFactory(em);
241 entity.QUser qUser = entity.QUser.user;
242 List<User> users = queryFactory
243 .selectFrom(qUser)
244 .where(qUser.detectedCount.gt(new entity.config().CheatTime)
245 .or(qUser.fakeDetectedCount.gt(new entity.config().FakeTime)))
246 .fetch();
Raver5ba779f2025-05-14 12:48:12 +0000247
root678fd3e2025-06-03 14:20:20 +0000248 for (User user : users) {
249 user.accountstate = true;
250 em.merge(user);
251 }
252 tx.commit();
253 } catch (Exception e) {
254 if (tx.isActive()) tx.rollback();
255 } finally {
256 em.close();
Raver5ba779f2025-05-14 12:48:12 +0000257 }
258 }
root678fd3e2025-06-03 14:20:20 +0000259}