update emf implement

Change-Id: Id967eb0034a7fad33755b7e805b3d73ff49cd79f
diff --git a/src/test/java/cheattest/cheatsystest.java b/src/test/java/cheattest/cheatsystest.java
index 4f3a035..98ebf73 100644
--- a/src/test/java/cheattest/cheatsystest.java
+++ b/src/test/java/cheattest/cheatsystest.java
@@ -30,6 +30,7 @@
 import entity.config;
 
 public class cheatsystest {
+
     private static EntityManagerFactory emf;
     private static EntityManager em;
     private static Cheat cheat;
@@ -43,19 +44,15 @@
         Map<String, Object> props = new HashMap<>();
         config cfg = new config();
         String jdbcUrl = String.format(
-            "jdbc:mysql://%s/%s?useSSL=false&serverTimezone=UTC",
-            cfg.SqlURL, cfg.TestDatabase);
+                "jdbc:mysql://%s/%s?useSSL=false&serverTimezone=UTC",
+                cfg.SqlURL, cfg.TestDatabase);
         props.put("javax.persistence.jdbc.url", jdbcUrl);
         props.put("javax.persistence.jdbc.user", cfg.SqlUsername);
         props.put("javax.persistence.jdbc.password", cfg.SqlPassword);
         props.put("javax.persistence.jdbc.driver", "com.mysql.cj.jdbc.Driver");
         emf = Persistence.createEntityManagerFactory("myPersistenceUnit", props);
         em = emf.createEntityManager();
-        cheat = new Cheat();
-        // 通过反射注入 entityManager
-        java.lang.reflect.Field f = Cheat.class.getDeclaredField("entityManager");
-        f.setAccessible(true);
-        f.set(cheat, em);
+        cheat = new Cheat(emf);
     }
 
     @AfterAll
@@ -88,7 +85,7 @@
         if (em != null && em.isOpen()) {
             em.getTransaction().begin();
             List<String> insertedUserIds = em.createQuery("SELECT u.userid FROM User u WHERE u.accountstate = true", String.class)
-                                             .getResultList();
+                    .getResultList();
             for (String userId : insertedUserIds) {
                 User user = em.find(User.class, userId);
                 if (user != null) {
@@ -99,54 +96,58 @@
         }
 
         // 关闭 EntityManager 和 EntityManagerFactory
-        if (em != null && em.isOpen()) em.close();
-        if (emf != null && emf.isOpen()) emf.close();
+        if (em != null && em.isOpen()) {
+            em.close();
+        }
+        if (emf != null && emf.isOpen()) {
+            emf.close();
+        }
     }
 
     @TestFactory
     Collection<DynamicTest> testAddAppeal() {
         // 查询数据库中已存在的一个用户
         String userId = em.createQuery("SELECT u.userid FROM User u", String.class)
-                          .setMaxResults(1)
-                          .getSingleResult();
+                .setMaxResults(1)
+                .getSingleResult();
 
         return IntStream.range(0, 10)
-            .mapToObj(i -> DynamicTest.dynamicTest("AddAppeal test #" + i, () -> {
-                // 插入 Appeal
-                String appealId = UUID.randomUUID().toString();
-                Appeal appeal = new Appeal();
-                appeal.appealid = appealId;
-                appeal.appealuserid = userId;
-                appeal.content = "Test appeal content " + i;
-                appeal.fileURL = "http://example.com/file" + i;
-                appeal.status = 0;
+                .mapToObj(i -> DynamicTest.dynamicTest("AddAppeal test #" + i, () -> {
+            // 插入 Appeal
+            String appealId = UUID.randomUUID().toString();
+            Appeal appeal = new Appeal();
+            appeal.appealid = appealId;
+            appeal.appealuserid = userId;
+            appeal.content = "Test appeal content " + i;
+            appeal.fileURL = "http://example.com/file" + i;
+            appeal.status = 0;
 
-                em.getTransaction().begin();
-                boolean result = cheat.AddAppeal(appeal);
-                em.getTransaction().commit();
+            em.getTransaction().begin();
+            boolean result = cheat.AddAppeal(appeal);
+            em.getTransaction().commit();
 
-                Assertions.assertTrue(result, "AddAppeal 应返回 true");
+            Assertions.assertTrue(result, "AddAppeal 应返回 true");
 
-                // 验证 Appeal 是否插入
-                Appeal fetched = em.find(Appeal.class, appealId);
-                Assertions.assertNotNull(fetched, "数据库应能查到新插入的 Appeal");
-                Assertions.assertEquals(userId, fetched.appealuserid);
-                Assertions.assertEquals("Test appeal content " + i, fetched.content);
+            // 验证 Appeal 是否插入
+            Appeal fetched = em.find(Appeal.class, appealId);
+            Assertions.assertNotNull(fetched, "数据库应能查到新插入的 Appeal");
+            Assertions.assertEquals(userId, fetched.appealuserid);
+            Assertions.assertEquals("Test appeal content " + i, fetched.content);
 
-                // 清理
-                em.getTransaction().begin();
-                em.remove(fetched);
-                em.getTransaction().commit();
-            }))
-            .collect(Collectors.toList());
+            // 清理
+            em.getTransaction().begin();
+            em.remove(fetched);
+            em.getTransaction().commit();
+        }))
+                .collect(Collectors.toList());
     }
 
     @TestFactory
     Collection<DynamicTest> testGetAppeal() {
         // 查询数据库中已存在的10个Appeal
         List<Appeal> appeals = em.createQuery("SELECT a FROM Appeal a", Appeal.class)
-                             .setMaxResults(10)
-                             .getResultList();
+                .setMaxResults(10)
+                .getResultList();
 
         List<DynamicTest> tests = new ArrayList<>();
 
@@ -178,140 +179,140 @@
     Collection<DynamicTest> testGetAppealList() {
         // 查询数据库中已存在的一个用户
         String userId = em.createQuery("SELECT u.userid FROM User u", String.class)
-                      .setMaxResults(1)
-                      .getSingleResult();
+                .setMaxResults(1)
+                .getSingleResult();
         // 用于记录测试过程中插入的 Appeal ID
 
         return IntStream.range(0, 10)
-            .mapToObj(i -> DynamicTest.dynamicTest("GetAppealList test #" + i, () -> {
-                // 插入一个新的 Appeal
-                String appealId = UUID.randomUUID().toString();
-                Appeal appeal = new Appeal();
-                appeal.appealid = appealId;
-                appeal.appealuserid = userId;
-                appeal.content = "GetAppealList test content " + i;
-                appeal.fileURL = "http://example.com/file" + i;
-                appeal.status = 0;
+                .mapToObj(i -> DynamicTest.dynamicTest("GetAppealList test #" + i, () -> {
+            // 插入一个新的 Appeal
+            String appealId = UUID.randomUUID().toString();
+            Appeal appeal = new Appeal();
+            appeal.appealid = appealId;
+            appeal.appealuserid = userId;
+            appeal.content = "GetAppealList test content " + i;
+            appeal.fileURL = "http://example.com/file" + i;
+            appeal.status = 0;
 
-                em.getTransaction().begin();
-                em.persist(appeal);
-                em.getTransaction().commit();
+            em.getTransaction().begin();
+            em.persist(appeal);
+            em.getTransaction().commit();
 
-                // 记录插入的 Appeal ID
-                insertedAppealIds.add(appealId);
+            // 记录插入的 Appeal ID
+            insertedAppealIds.add(appealId);
 
-                // 调用 GetAppealList 并验证
-                Appeal[] appeals = cheat.GetAppealList();
-                Assertions.assertNotNull(appeals, "GetAppealList 应返回非空");
+            // 调用 GetAppealList 并验证
+            Appeal[] appeals = cheat.GetAppealList();
+            Assertions.assertNotNull(appeals, "GetAppealList 应返回非空");
 
-                // 检查整个列表是否包含所有插入的数据
-                for (String id : insertedAppealIds) {
-                    boolean found = Arrays.stream(appeals)
-                                           .anyMatch(a -> a.appealid.equals(id));
-                    Assertions.assertTrue(found, "GetAppealList 应包含插入的 Appeal ID: " + id);
-                }
-            }))
-            .collect(Collectors.toList());
+            // 检查整个列表是否包含所有插入的数据
+            for (String id : insertedAppealIds) {
+                boolean found = Arrays.stream(appeals)
+                        .anyMatch(a -> a.appealid.equals(id));
+                Assertions.assertTrue(found, "GetAppealList 应包含插入的 Appeal ID: " + id);
+            }
+        }))
+                .collect(Collectors.toList());
     }
 
     @TestFactory
     Collection<DynamicTest> testHandleAppeal() {
         // 查询数据库中已存在的一个用户
         String userId = em.createQuery("SELECT u.userid FROM User u", String.class)
-                          .setMaxResults(1)
-                          .getSingleResult();
+                .setMaxResults(1)
+                .getSingleResult();
 
         return IntStream.range(0, 10)
-            .mapToObj(i -> DynamicTest.dynamicTest("HandleAppeal test #" + i, () -> {
-                // 插入一个新的 Appeal
-                String appealId = UUID.randomUUID().toString();
-                Appeal appeal = new Appeal();
-                appeal.appealid = appealId;
-                appeal.appealuserid = userId;
-                appeal.content = "HandleAppeal test content " + i;
-                appeal.fileURL = "http://example.com/file" + i;
-                appeal.status = 0;
+                .mapToObj(i -> DynamicTest.dynamicTest("HandleAppeal test #" + i, () -> {
+            // 插入一个新的 Appeal
+            String appealId = UUID.randomUUID().toString();
+            Appeal appeal = new Appeal();
+            appeal.appealid = appealId;
+            appeal.appealuserid = userId;
+            appeal.content = "HandleAppeal test content " + i;
+            appeal.fileURL = "http://example.com/file" + i;
+            appeal.status = 0;
 
+            em.getTransaction().begin();
+            em.persist(appeal);
+            em.getTransaction().commit();
+
+            // 如果 newStatus 为 1,先将用户的 account_status 设置为 true
+            if (i % 2 == 0) { // 偶数索引对应 newStatus = 1
                 em.getTransaction().begin();
-                em.persist(appeal);
+                User user = em.find(User.class, userId);
+                Assertions.assertNotNull(user, "数据库应能查到相关用户");
+                user.accountstate = true; // 设置为 true
                 em.getTransaction().commit();
+            }
 
-                // 如果 newStatus 为 1,先将用户的 account_status 设置为 true
-                if (i % 2 == 0) { // 偶数索引对应 newStatus = 1
-                    em.getTransaction().begin();
-                    User user = em.find(User.class, userId);
-                    Assertions.assertNotNull(user, "数据库应能查到相关用户");
-                    user.accountstate = true; // 设置为 true
-                    em.getTransaction().commit();
-                }
+            // 测试处理申诉
+            int newStatus = (i % 2 == 0) ? 1 : 2; // 偶数索引通过申诉,奇数索引拒绝申诉
+            boolean result = cheat.HandleAppeal(appealId, newStatus);
+            Assertions.assertTrue(result, "HandleAppeal 应返回 true");
 
-                // 测试处理申诉
-                int newStatus = (i % 2 == 0) ? 1 : 2; // 偶数索引通过申诉,奇数索引拒绝申诉
-                boolean result = cheat.HandleAppeal(appealId, newStatus);
-                Assertions.assertTrue(result, "HandleAppeal 应返回 true");
+            // 验证 Appeal 状态是否更新
+            Appeal updatedAppeal = em.find(Appeal.class, appealId);
+            Assertions.assertNotNull(updatedAppeal, "数据库应能查到更新后的 Appeal");
+            Assertions.assertEquals(newStatus, updatedAppeal.status, "Appeal 的状态应被更新为: " + newStatus);
 
-                // 验证 Appeal 状态是否更新
-                Appeal updatedAppeal = em.find(Appeal.class, appealId);
-                Assertions.assertNotNull(updatedAppeal, "数据库应能查到更新后的 Appeal");
-                Assertions.assertEquals(newStatus, updatedAppeal.status, "Appeal 的状态应被更新为: " + newStatus);
+            // 如果申诉通过,验证用户的 account_status 是否被设置为 false
+            if (newStatus == 1) {
+                User user = em.find(User.class, userId);
+                Assertions.assertNotNull(user, "数据库应能查到相关用户");
+                Assertions.assertFalse(user.accountstate, "通过申诉后用户的 account_status 应为 false");
+            }
 
-                // 如果申诉通过,验证用户的 account_status 是否被设置为 false
-                if (newStatus == 1) {
-                    User user = em.find(User.class, userId);
-                    Assertions.assertNotNull(user, "数据库应能查到相关用户");
-                    Assertions.assertFalse(user.accountstate, "通过申诉后用户的 account_status 应为 false");
-                }
-
-                // 清理测试数据
-                em.getTransaction().begin();
-                em.remove(updatedAppeal);
-                em.getTransaction().commit();
-            }))
-            .collect(Collectors.toList());
+            // 清理测试数据
+            em.getTransaction().begin();
+            em.remove(updatedAppeal);
+            em.getTransaction().commit();
+        }))
+                .collect(Collectors.toList());
     }
 
     @TestFactory
     Collection<DynamicTest> testGetFakeSeed() {
         return IntStream.range(0, 10)
-            .mapToObj(i -> DynamicTest.dynamicTest("GetFakeSeed test #" + i, () -> {
-                // 插入一个新的假种子
-                String seedId = UUID.randomUUID().toString();
-                String userId = em.createQuery("SELECT u.userid FROM User u", String.class)
-                                  .setMaxResults(1)
-                                  .getSingleResult();
+                .mapToObj(i -> DynamicTest.dynamicTest("GetFakeSeed test #" + i, () -> {
+            // 插入一个新的假种子
+            String seedId = UUID.randomUUID().toString();
+            String userId = em.createQuery("SELECT u.userid FROM User u", String.class)
+                    .setMaxResults(1)
+                    .getSingleResult();
 
-                Seed seed = new Seed();
-                seed.seedid = seedId;
-                seed.seeduserid = userId;
-                seed.faketime = 100 + i; // 设置为大于 config.FakeTime 的值
-                seed.lastfakecheck = new Date();
-                seed.outurl = "http://example.com/fake" + i;
-                seed.title = "Fake Seed " + i;
-                seed.subtitle = "Subtitle " + i;
-                seed.seedsize = "100MB";
-                seed.seedtag = "test,fake";
-                seed.downloadtimes = 0;
-                seed.url = "http://example.com/seed" + i;
+            Seed seed = new Seed();
+            seed.seedid = seedId;
+            seed.seeduserid = userId;
+            seed.faketime = 100 + i; // 设置为大于 config.FakeTime 的值
+            seed.lastfakecheck = new Date();
+            seed.outurl = "http://example.com/fake" + i;
+            seed.title = "Fake Seed " + i;
+            seed.subtitle = "Subtitle " + i;
+            seed.seedsize = "100MB";
+            seed.seedtag = "test,fake";
+            seed.downloadtimes = 0;
+            seed.url = "http://example.com/seed" + i;
 
-                em.getTransaction().begin();
-                em.persist(seed);
-                em.getTransaction().commit();
+            em.getTransaction().begin();
+            em.persist(seed);
+            em.getTransaction().commit();
 
-                // 记录插入的 Seed ID
-                insertedSeedIds.add(seedId);
+            // 记录插入的 Seed ID
+            insertedSeedIds.add(seedId);
 
-                // 调用 GetFakeSeed 并验证
-                Pair<String, String>[] fakeSeeds = cheat.GetFakeSeed();
-                Assertions.assertNotNull(fakeSeeds, "GetFakeSeed 应返回非空");
+            // 调用 GetFakeSeed 并验证
+            Pair<String, String>[] fakeSeeds = cheat.GetFakeSeed();
+            Assertions.assertNotNull(fakeSeeds, "GetFakeSeed 应返回非空");
 
-                // 验证返回的假种子列表是否包含所有插入的假种子
-                for (String id : insertedSeedIds) {
-                    boolean found = Arrays.stream(fakeSeeds)
-                                           .anyMatch(pair -> pair.getLeft().equals(id));
-                    Assertions.assertTrue(found, "GetFakeSeed 应包含插入的假种子 ID: " + id);
-                }
-            }))
-            .collect(Collectors.toList());
+            // 验证返回的假种子列表是否包含所有插入的假种子
+            for (String id : insertedSeedIds) {
+                boolean found = Arrays.stream(fakeSeeds)
+                        .anyMatch(pair -> pair.getLeft().equals(id));
+                Assertions.assertTrue(found, "GetFakeSeed 应包含插入的假种子 ID: " + id);
+            }
+        }))
+                .collect(Collectors.toList());
     }
 
     @TestFactory
@@ -319,47 +320,47 @@
         List<String> insertedUserIds = new ArrayList<>(); // 用于记录插入的用户 ID
 
         return IntStream.range(0, 10)
-            .mapToObj(i -> DynamicTest.dynamicTest("GetPunishedUserList test #" + i, () -> {
-                // 插入一个新的用户,accountstate 设置为 true
-                String userId = UUID.randomUUID().toString();
-                User user = new User();
-                user.userid = userId;
-                user.email = "test" + i + "@example.com";
-                user.username = "TestUser" + i;
-                user.password = "password" + i;
-                user.sex = "M";
-                user.detectedCount = 0;
-                user.lastDetectedTime = new Date();
-                user.school = "TestSchool";
-                user.pictureurl = "http://example.com/avatar" + i;
-                user.profile = "Test profile " + i;
-                user.accountstate = true; // 设置为 true
-                user.invitetimes = 5;
+                .mapToObj(i -> DynamicTest.dynamicTest("GetPunishedUserList test #" + i, () -> {
+            // 插入一个新的用户,accountstate 设置为 true
+            String userId = UUID.randomUUID().toString();
+            User user = new User();
+            user.userid = userId;
+            user.email = "test" + i + "@example.com";
+            user.username = "TestUser" + i;
+            user.password = "password" + i;
+            user.sex = "M";
+            user.detectedCount = 0;
+            user.lastDetectedTime = new Date();
+            user.school = "TestSchool";
+            user.pictureurl = "http://example.com/avatar" + i;
+            user.profile = "Test profile " + i;
+            user.accountstate = true; // 设置为 true
+            user.invitetimes = 5;
 
-                // 创建并设置 UserPT 实例
-                UserPT userPT = new UserPT();
-                userPT.user = user; // 关联 User 实例
-                user.userPT = userPT;
+            // 创建并设置 UserPT 实例
+            UserPT userPT = new UserPT();
+            userPT.user = user; // 关联 User 实例
+            user.userPT = userPT;
 
-                em.getTransaction().begin();
-                em.persist(user);
-                em.persist(userPT); // 持久化 UserPT 实例
-                em.getTransaction().commit();
+            em.getTransaction().begin();
+            em.persist(user);
+            em.persist(userPT); // 持久化 UserPT 实例
+            em.getTransaction().commit();
 
-                // 记录插入的用户 ID
-                insertedUserIds.add(userId);
+            // 记录插入的用户 ID
+            insertedUserIds.add(userId);
 
-                // 调用 GetPunishedUserList 并验证
-                String[] punishedUsers = cheat.GetPunishedUserList();
-                Assertions.assertNotNull(punishedUsers, "GetPunishedUserList 应返回非空");
+            // 调用 GetPunishedUserList 并验证
+            String[] punishedUsers = cheat.GetPunishedUserList();
+            Assertions.assertNotNull(punishedUsers, "GetPunishedUserList 应返回非空");
 
-                // 验证返回的用户列表是否包含所有插入的用户
-                for (String id : insertedUserIds) {
-                    boolean found = Arrays.stream(punishedUsers).anyMatch(returnedId -> returnedId.equals(id));
-                    Assertions.assertTrue(found, "GetPunishedUserList 应包含插入的用户 ID: " + id);
-                }
-            }))
-            .collect(Collectors.toList());
+            // 验证返回的用户列表是否包含所有插入的用户
+            for (String id : insertedUserIds) {
+                boolean found = Arrays.stream(punishedUsers).anyMatch(returnedId -> returnedId.equals(id));
+                Assertions.assertTrue(found, "GetPunishedUserList 应包含插入的用户 ID: " + id);
+            }
+        }))
+                .collect(Collectors.toList());
     }
 
     @TestFactory
@@ -367,76 +368,76 @@
         List<String> insertedUserIds = new ArrayList<>(); // 用于记录插入的用户 ID
 
         return IntStream.range(0, 10)
-            .mapToObj(i -> DynamicTest.dynamicTest("PunishUser test #" + i, () -> {
-                // 配置参数
-                int cheatTime = config.CheatTime;
-                int fakeTime = config.FakeTime;
+                .mapToObj(i -> DynamicTest.dynamicTest("PunishUser test #" + i, () -> {
+            // 配置参数
+            int cheatTime = config.CheatTime;
+            int fakeTime = config.FakeTime;
 
-                // 插入用户 1(作弊用户)
-                String userId1 = UUID.randomUUID().toString();
-                User user1 = new User();
-                user1.userid = userId1;
-                user1.email = "cheater" + i + "_" + UUID.randomUUID().toString() + "@example.com"; // 确保唯一性
-                user1.username = "Cheater" + i;
-                user1.password = "password" + i;
-                user1.sex = "M";
-                user1.detectedCount = cheatTime + 1; // detectedCount 超过 cheatTime
-                user1.fakeDetectedCount = 0;
-                user1.lastDetectedTime = new Date();
-                user1.fakeLastDetectedTime = new Date();
-                user1.accountstate = false; // 初始状态为未封禁
-                user1.invitetimes = 5;
+            // 插入用户 1(作弊用户)
+            String userId1 = UUID.randomUUID().toString();
+            User user1 = new User();
+            user1.userid = userId1;
+            user1.email = "cheater" + i + "_" + UUID.randomUUID().toString() + "@example.com"; // 确保唯一性
+            user1.username = "Cheater" + i;
+            user1.password = "password" + i;
+            user1.sex = "M";
+            user1.detectedCount = cheatTime + 1; // detectedCount 超过 cheatTime
+            user1.fakeDetectedCount = 0;
+            user1.lastDetectedTime = new Date();
+            user1.fakeLastDetectedTime = new Date();
+            user1.accountstate = false; // 初始状态为未封禁
+            user1.invitetimes = 5;
 
-                // 创建并设置 UserPT 实例
-                UserPT userPT1 = new UserPT();
-                userPT1.user = user1; // 关联 User 实例
-                user1.userPT = userPT1;
+            // 创建并设置 UserPT 实例
+            UserPT userPT1 = new UserPT();
+            userPT1.user = user1; // 关联 User 实例
+            user1.userPT = userPT1;
 
-                // 插入用户 2(非作弊用户)
-                String userId2 = UUID.randomUUID().toString();
-                User user2 = new User();
-                user2.userid = userId2;
-                user2.email = "normal" + i + "_" + UUID.randomUUID().toString() + "@example.com"; // 确保唯一性
-                user2.username = "NormalUser" + i;
-                user2.password = "password" + i;
-                user2.sex = "F";
-                user2.detectedCount = 0;
-                user2.fakeDetectedCount = fakeTime - 1; // fakeDetectedCount 未超过 fakeTime
-                user2.lastDetectedTime = new Date();
-                user2.fakeLastDetectedTime = new Date();
-                user2.accountstate = false; // 初始状态为未封禁
-                user2.invitetimes = 5;
+            // 插入用户 2(非作弊用户)
+            String userId2 = UUID.randomUUID().toString();
+            User user2 = new User();
+            user2.userid = userId2;
+            user2.email = "normal" + i + "_" + UUID.randomUUID().toString() + "@example.com"; // 确保唯一性
+            user2.username = "NormalUser" + i;
+            user2.password = "password" + i;
+            user2.sex = "F";
+            user2.detectedCount = 0;
+            user2.fakeDetectedCount = fakeTime - 1; // fakeDetectedCount 未超过 fakeTime
+            user2.lastDetectedTime = new Date();
+            user2.fakeLastDetectedTime = new Date();
+            user2.accountstate = false; // 初始状态为未封禁
+            user2.invitetimes = 5;
 
-                // 创建并设置 UserPT 实例
-                UserPT userPT2 = new UserPT();
-                userPT2.user = user2; // 关联 User 实例
-                user2.userPT = userPT2;
+            // 创建并设置 UserPT 实例
+            UserPT userPT2 = new UserPT();
+            userPT2.user = user2; // 关联 User 实例
+            user2.userPT = userPT2;
 
-                em.getTransaction().begin();
-                em.persist(user1);
-                em.persist(userPT1); // 持久化 UserPT 实例
-                em.persist(user2);
-                em.persist(userPT2); // 持久化 UserPT 实例
-                em.getTransaction().commit();
+            em.getTransaction().begin();
+            em.persist(user1);
+            em.persist(userPT1); // 持久化 UserPT 实例
+            em.persist(user2);
+            em.persist(userPT2); // 持久化 UserPT 实例
+            em.getTransaction().commit();
 
-                // 记录插入的用户 ID
-                insertedUserIds.add(userId1);
-                insertedUserIds.add(userId2);
+            // 记录插入的用户 ID
+            insertedUserIds.add(userId1);
+            insertedUserIds.add(userId2);
 
-                // 调用 PunishUser 方法
-                cheat.PunishUser();
+            // 调用 PunishUser 方法
+            cheat.PunishUser();
 
-                // 验证用户 1 是否被封禁
-                User punishedUser1 = em.find(User.class, userId1);
-                Assertions.assertNotNull(punishedUser1, "数据库应能查到用户 1");
-                Assertions.assertTrue(punishedUser1.accountstate, "作弊用户应被封禁");
+            // 验证用户 1 是否被封禁
+            User punishedUser1 = em.find(User.class, userId1);
+            Assertions.assertNotNull(punishedUser1, "数据库应能查到用户 1");
+            Assertions.assertTrue(punishedUser1.accountstate, "作弊用户应被封禁");
 
-                // 验证用户 2 是否未被封禁
-                User punishedUser2 = em.find(User.class, userId2);
-                Assertions.assertNotNull(punishedUser2, "数据库应能查到用户 2");
-                Assertions.assertFalse(punishedUser2.accountstate, "非作弊用户不应被封禁");
-            }))
-            .collect(Collectors.toList());
+            // 验证用户 2 是否未被封禁
+            User punishedUser2 = em.find(User.class, userId2);
+            Assertions.assertNotNull(punishedUser2, "数据库应能查到用户 2");
+            Assertions.assertFalse(punishedUser2.accountstate, "非作弊用户不应被封禁");
+        }))
+                .collect(Collectors.toList());
     }
 
     // @TestFactory
@@ -444,7 +445,6 @@
     //     List<String> insertedUserIds = new ArrayList<>(); // 用于记录插入的用户 ID
     //     List<String> insertedSeedIds = new ArrayList<>(); // 用于记录插入的种子 ID
     //     List<String> insertedTransIds = new ArrayList<>(); // 用于记录插入的传输记录 ID
-
     //     return IntStream.range(0, 10)
     //         .mapToObj(i -> DynamicTest.dynamicTest("DetectTrans test #" + i, () -> {
     //             // 插入上传用户
@@ -461,12 +461,10 @@
     //             uploader.fakeLastDetectedTime = new Date();
     //             uploader.accountstate = false;
     //             uploader.invitetimes = 5;
-
     //             // 创建并设置 UserPT 实例
     //             UserPT uploaderPT = new UserPT();
     //             uploaderPT.user = uploader; // 关联 User 实例
     //             uploader.userPT = uploaderPT;
-
     //             // 插入下载用户
     //             String downloaderId = UUID.randomUUID().toString();
     //             User downloader = new User();
@@ -481,12 +479,10 @@
     //             downloader.fakeLastDetectedTime = new Date();
     //             downloader.accountstate = false;
     //             downloader.invitetimes = 5;
-
     //             // 创建并设置 UserPT 实例
     //             UserPT downloaderPT = new UserPT();
     //             downloaderPT.user = downloader; // 关联 User 实例
     //             downloader.userPT = downloaderPT;
-
     //             em.getTransaction().begin();
     //             em.persist(uploader);
     //             em.persist(uploaderPT); // 持久化 UserPT 实例
@@ -495,7 +491,6 @@
     //             em.getTransaction().commit();
     //             insertedUserIds.add(uploaderId);
     //             insertedUserIds.add(downloaderId);
-
     //             // 插入种子
     //             String seedId = UUID.randomUUID().toString();
     //             Seed seed = new Seed();
@@ -510,12 +505,10 @@
     //             seed.seedtag = "test";
     //             seed.downloadtimes = 0;
     //             seed.url = "http://example.com/seed" + i;
-
     //             em.getTransaction().begin();
     //             em.persist(seed);
     //             em.getTransaction().commit();
     //             insertedSeedIds.add(seedId);
-
     //             // 插入正常和异常的传输记录
     //             List<TransRecord> transRecords = new ArrayList<>();
     //             for (int j = 0; j < 15; j++) {
@@ -528,17 +521,14 @@
     //                 transRecord.download = (j < 13) ? 90 : 10; // 异常数据的上传量远大于下载量
     //                 transRecord.maxupload = 200;
     //                 transRecord.maxdownload = 200;
-
     //                 em.getTransaction().begin();
     //                 em.persist(transRecord);
     //                 em.getTransaction().commit();
     //                 insertedTransIds.add(transRecord.taskid);
     //                 transRecords.add(transRecord);
     //             }
-
     //             // 调用 DetectTrans 方法
     //             cheat.DetectTrans();
-
     //             // 验证下载用户的 detectedCount 是否增加
     //             User detectedDownloader = em.find(User.class, downloaderId);
     //             Assertions.assertNotNull(detectedDownloader, "数据库应能查到上传用户");