root | cd43656 | 2025-05-08 14:09:19 +0000 | [diff] [blame] | 1 | package cheat; |
| 2 | |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 3 | import java.util.ArrayList; |
| 4 | import java.util.List; |
| 5 | |
| 6 | import javax.persistence.EntityManager; |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 7 | import javax.persistence.PersistenceContext; |
| 8 | import javax.transaction.Transactional; |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 9 | |
| 10 | import org.apache.commons.lang3.tuple.Pair; |
| 11 | |
| 12 | import com.querydsl.jpa.impl.JPAQueryFactory; |
| 13 | |
| 14 | import entity.Appeal; |
| 15 | import entity.QAppeal; |
| 16 | import entity.QSeed; |
| 17 | import entity.User; |
| 18 | import entity.config; |
| 19 | |
| 20 | public class Cheat implements CheatInterfnterface { |
| 21 | |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 22 | @PersistenceContext |
| 23 | private EntityManager entityManager; |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 24 | |
| 25 | @Override |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 26 | @Transactional |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 27 | public boolean AddAppeal(Appeal appeal) { |
| 28 | try { |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 29 | entityManager.persist(appeal); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 30 | } catch (Exception e) { |
| 31 | e.printStackTrace(); |
| 32 | return false; |
| 33 | } |
| 34 | return true; |
| 35 | } |
| 36 | |
| 37 | @Override |
| 38 | public Appeal GetAppeal(String appealid) { |
| 39 | try { |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 40 | JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 41 | QAppeal qAppeal = QAppeal.appeal; |
| 42 | Appeal appeal = queryFactory |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 43 | .selectFrom(qAppeal) |
| 44 | .where(qAppeal.appealid.eq(appealid)) |
| 45 | .fetchOne(); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 46 | return appeal; |
| 47 | } catch (Exception e) { |
| 48 | e.printStackTrace(); |
| 49 | return null; |
| 50 | } |
| 51 | } |
| 52 | |
| 53 | @Override |
| 54 | public Appeal[] GetAppealList() { |
| 55 | try { |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 56 | JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 57 | QAppeal qAppeal = QAppeal.appeal; |
| 58 | List<Appeal> appeals = queryFactory |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 59 | .selectFrom(qAppeal) |
| 60 | .fetch(); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 61 | return appeals.toArray(new Appeal[0]); |
| 62 | } catch (Exception e) { |
| 63 | e.printStackTrace(); |
| 64 | return null; |
| 65 | } |
| 66 | } |
| 67 | |
| 68 | @Override |
| 69 | public boolean HandleAppeal(String appealid, Integer status) { |
| 70 | try { |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 71 | Appeal appeal = GetAppeal(appealid); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 72 | if (appeal != null) { |
| 73 | appeal.status = status; |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 74 | entityManager.merge(appeal); |
| 75 | User user = entityManager.find(User.class, appeal.appealuserid); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 76 | if (user != null && user.accountstate != false) { |
| 77 | if (status == 1) { |
| 78 | user.accountstate = false; |
| 79 | } |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 80 | entityManager.merge(user); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 81 | } |
| 82 | return true; |
| 83 | } |
| 84 | return false; |
| 85 | } catch (Exception e) { |
| 86 | e.printStackTrace(); |
| 87 | return false; |
| 88 | } |
| 89 | } |
| 90 | |
| 91 | @Override |
| 92 | public Pair<String, String>[] GetFakeSeed() { |
| 93 | List<Pair<String, String>> fakeSeeds = new ArrayList<>(); |
| 94 | try { |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 95 | JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 96 | QSeed qSeed = QSeed.seed; |
| 97 | List<com.querydsl.core.Tuple> results = queryFactory |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 98 | .select(qSeed.seedid, qSeed.seeduserid) |
| 99 | .from(qSeed) |
| 100 | .where(qSeed.faketime.gt(new config().FakeTime)) |
| 101 | .fetch(); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 102 | for (com.querydsl.core.Tuple result : results) { |
| 103 | String seedid = result.get(qSeed.seedid); |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 104 | String userid = result.get(qSeed.seeduserid); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 105 | fakeSeeds.add(Pair.of(seedid, userid)); |
| 106 | } |
| 107 | } catch (Exception e) { |
| 108 | e.printStackTrace(); |
| 109 | return null; |
| 110 | } |
| 111 | return fakeSeeds.toArray(new Pair[0]); |
| 112 | } |
| 113 | |
| 114 | @Override |
| 115 | public String[] GetPunishedUserList() { |
| 116 | List<String> punishedUsers = new ArrayList<>(); |
| 117 | try { |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 118 | JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 119 | entity.QUser qUser = entity.QUser.user; |
| 120 | List<String> results = queryFactory |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 121 | .select(qUser.userid) |
| 122 | .from(qUser) |
| 123 | .where(qUser.accountstate.isTrue()) |
| 124 | .fetch(); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 125 | for (String userid : results) { |
| 126 | punishedUsers.add(userid); |
| 127 | } |
| 128 | } catch (Exception e) { |
| 129 | e.printStackTrace(); |
| 130 | return null; |
| 131 | } |
| 132 | return punishedUsers.toArray(new String[0]); |
| 133 | } |
| 134 | |
| 135 | @Override |
| 136 | public void DetectTrans() { |
| 137 | // JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); |
| 138 | // QSeed qSeed = QSeed.seed; |
| 139 | // List<Seed> seeds = queryFactory |
| 140 | // .selectFrom(qSeed) |
| 141 | // .fetch(); |
| 142 | // for (Seed seed : seeds) { |
| 143 | // QTransRecord qTransRecord = QTransRecord.transRecord; |
| 144 | // List<TransRecord> tasks = queryFactory |
| 145 | // .selectFrom(qTransRecord) |
| 146 | // .where(qTransRecord.seedid.eq(seed.seedid)) |
| 147 | // .fetch(); |
| 148 | |
| 149 | // int n = tasks.size(); |
| 150 | // if (n == 0) continue; |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 151 | |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 152 | // double[] xArr = new double[n]; |
| 153 | // for (int i = 0; i < n; i++) { |
| 154 | // TransRecord t = tasks.get(i); |
| 155 | // xArr[i] = Math.max(0, t.upload - t.download); |
| 156 | // } |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 157 | |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 158 | // double sum = 0; |
| 159 | // for (double x : xArr) sum += x; |
| 160 | // double mu = sum / n; |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 161 | |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 162 | // double sqSum = 0; |
| 163 | // for (double x : xArr) sqSum += (x - mu) * (x - mu); |
| 164 | // double sigma = Math.sqrt(sqSum / n); |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 165 | |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 166 | // for (int i = 0; i < n; i++) { |
| 167 | // if (Math.abs(xArr[i] - mu) > 3 * sigma) { |
| 168 | // User user = entityManager.find(User.class, tasks.get(i).downloaduserid); |
| 169 | // if (user != null) { |
| 170 | // user.detectedCount++; |
| 171 | // user.lastDetectedTime = new java.util.Date(); |
| 172 | // entityManager.merge(user); |
| 173 | // } |
| 174 | // } |
| 175 | // } |
| 176 | // } |
| 177 | } |
| 178 | |
| 179 | @Override |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 180 | public void DetectFakeSeed(){ |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 181 | } |
| 182 | |
| 183 | @Override |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 184 | public boolean DetectFakeSeed(String seedid){ |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 185 | return false; |
| 186 | } |
| 187 | |
| 188 | @Override |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 189 | public void PunishUser(){ |
| 190 | JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); |
| 191 | entity.QUser qUser = entity.QUser.user; |
| 192 | List<User> users = queryFactory |
| 193 | .selectFrom(qUser) |
| 194 | .where(qUser.detectedCount.gt(new entity.config().CheatTime) |
| 195 | .or(qUser.fakeDetectedCount.gt(new entity.config().FakeTime))) |
| 196 | .fetch(); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 197 | |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 198 | for (User user : users) { |
| 199 | user.accountstate = true; |
| 200 | entityManager.merge(user); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 201 | } |
| 202 | } |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 203 | } |