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; |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 4 | import java.util.HashMap; |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 5 | import java.util.List; |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 6 | import java.util.Map; |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 7 | |
| 8 | import javax.persistence.EntityManager; |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 9 | import javax.persistence.EntityManagerFactory; |
| 10 | import javax.persistence.Persistence; |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 11 | import javax.persistence.PersistenceContext; |
| 12 | import javax.transaction.Transactional; |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 13 | |
| 14 | import org.apache.commons.lang3.tuple.Pair; |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 15 | import java.io.File; |
| 16 | import java.nio.file.Files; |
| 17 | import java.nio.file.Path; |
| 18 | import java.nio.file.Paths; |
| 19 | import java.nio.file.StandardCopyOption; |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 20 | |
| 21 | import com.querydsl.jpa.impl.JPAQueryFactory; |
| 22 | |
| 23 | import entity.Appeal; |
| 24 | import entity.QAppeal; |
| 25 | import entity.QSeed; |
| 26 | import entity.User; |
| 27 | import entity.config; |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 28 | import entity.QUser; |
| 29 | import entity.TTorent; |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 30 | |
| 31 | public class Cheat implements CheatInterfnterface { |
| 32 | |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 33 | @PersistenceContext |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 34 | 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 | } |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 45 | |
| 46 | @Override |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 47 | @Transactional |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 48 | public boolean AddAppeal(Appeal appeal) { |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 49 | EntityManager entityManager = emf.createEntityManager(); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 50 | try { |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 51 | entityManager.getTransaction().begin(); |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 52 | entityManager.persist(appeal); |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 53 | entityManager.getTransaction().commit(); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 54 | } catch (Exception e) { |
| 55 | e.printStackTrace(); |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 56 | if (entityManager.getTransaction().isActive()) { |
| 57 | entityManager.getTransaction().rollback(); |
| 58 | } |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 59 | return false; |
| 60 | } |
| 61 | return true; |
| 62 | } |
| 63 | |
| 64 | @Override |
| 65 | public Appeal GetAppeal(String appealid) { |
| 66 | try { |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 67 | EntityManager entityManager = emf.createEntityManager(); |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 68 | JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 69 | QAppeal qAppeal = QAppeal.appeal; |
| 70 | Appeal appeal = queryFactory |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 71 | .selectFrom(qAppeal) |
| 72 | .where(qAppeal.appealid.eq(appealid)) |
| 73 | .fetchOne(); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 74 | return appeal; |
| 75 | } catch (Exception e) { |
| 76 | e.printStackTrace(); |
| 77 | return null; |
| 78 | } |
| 79 | } |
| 80 | |
| 81 | @Override |
| 82 | public Appeal[] GetAppealList() { |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 83 | EntityManager entityManager = emf.createEntityManager(); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 84 | try { |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 85 | JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 86 | QAppeal qAppeal = QAppeal.appeal; |
| 87 | List<Appeal> appeals = queryFactory |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 88 | .selectFrom(qAppeal) |
| 89 | .fetch(); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 90 | return appeals.toArray(new Appeal[0]); |
| 91 | } catch (Exception e) { |
| 92 | e.printStackTrace(); |
| 93 | return null; |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 94 | } finally { |
| 95 | if (entityManager != null) { |
| 96 | entityManager.close(); |
| 97 | } |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 98 | } |
| 99 | } |
| 100 | |
| 101 | @Override |
| 102 | public boolean HandleAppeal(String appealid, Integer status) { |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 103 | EntityManager entityManager = emf.createEntityManager(); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 104 | try { |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 105 | Appeal appeal = GetAppeal(appealid); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 106 | if (appeal != null) { |
| 107 | appeal.status = status; |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 108 | entityManager.getTransaction().begin(); |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 109 | entityManager.merge(appeal); |
| 110 | User user = entityManager.find(User.class, appeal.appealuserid); |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 111 | // if (user != null && user.accountstate != false) { |
| 112 | if (user != null) { |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 113 | if (status == 1) { |
| 114 | user.accountstate = false; |
| 115 | } |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 116 | entityManager.merge(user); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 117 | } |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 118 | entityManager.getTransaction().commit(); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 119 | return true; |
| 120 | } |
| 121 | return false; |
| 122 | } catch (Exception e) { |
| 123 | e.printStackTrace(); |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 124 | if (emf.createEntityManager().getTransaction().isActive()) { |
| 125 | emf.createEntityManager().getTransaction().rollback(); |
| 126 | } |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 127 | return false; |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 128 | } finally { |
| 129 | if (entityManager != null) { |
| 130 | entityManager.close(); |
| 131 | } |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 132 | } |
| 133 | } |
| 134 | |
| 135 | @Override |
| 136 | public Pair<String, String>[] GetFakeSeed() { |
| 137 | List<Pair<String, String>> fakeSeeds = new ArrayList<>(); |
| 138 | try { |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 139 | EntityManager entityManager = emf.createEntityManager(); |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 140 | JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 141 | QSeed qSeed = QSeed.seed; |
| 142 | List<com.querydsl.core.Tuple> results = queryFactory |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 143 | .select(qSeed.seedid, qSeed.seeduserid) |
| 144 | .from(qSeed) |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 145 | .where(qSeed.faketime.gt(config.getFakeTime())) |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 146 | .fetch(); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 147 | for (com.querydsl.core.Tuple result : results) { |
| 148 | String seedid = result.get(qSeed.seedid); |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 149 | String userid = result.get(qSeed.seeduserid); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 150 | 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 { |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 163 | EntityManager entityManager = emf.createEntityManager(); |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 164 | JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 165 | entity.QUser qUser = entity.QUser.user; |
| 166 | List<String> results = queryFactory |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 167 | .select(qUser.userid) |
| 168 | .from(qUser) |
| 169 | .where(qUser.accountstate.isTrue()) |
| 170 | .fetch(); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 171 | 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; |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 197 | |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 198 | // 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 | // } |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 203 | |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 204 | // double sum = 0; |
| 205 | // for (double x : xArr) sum += x; |
| 206 | // double mu = sum / n; |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 207 | |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 208 | // double sqSum = 0; |
| 209 | // for (double x : xArr) sqSum += (x - mu) * (x - mu); |
| 210 | // double sigma = Math.sqrt(sqSum / n); |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 211 | |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 212 | // 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 |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 226 | public void DetectFakeSeed(){ |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 227 | } |
| 228 | |
| 229 | @Override |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 230 | public boolean DetectFakeSeed(String seedid){ |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 231 | return false; |
| 232 | } |
| 233 | |
| 234 | @Override |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 235 | public void PunishUser(){ |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 236 | EntityManager entityManager = emf.createEntityManager(); |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 237 | JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); |
| 238 | entity.QUser qUser = entity.QUser.user; |
| 239 | List<User> users = queryFactory |
| 240 | .selectFrom(qUser) |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 241 | .where(qUser.detectedCount.gt(config.getCheatTime()) |
| 242 | .or(qUser.fakeDetectedCount.gt(config.getFakeTime()))) |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 243 | .fetch(); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 244 | |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 245 | for (User user : users) { |
| 246 | user.accountstate = true; |
| 247 | entityManager.merge(user); |
Raver | 5ba779f | 2025-05-14 12:48:12 +0000 | [diff] [blame] | 248 | } |
| 249 | } |
rhj | e18c3f7 | 2025-06-08 00:27:01 +0800 | [diff] [blame^] | 250 | |
| 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 | } |
Raver | f79fdb6 | 2025-06-03 06:02:49 +0000 | [diff] [blame] | 393 | } |