登陆注册后端接口

Change-Id: Ida548e4f32a505259dd180a5ae1ff8989ccfc076
diff --git a/src/main/java/api/ApiController.java b/src/main/java/api/ApiController.java
index 41d9052..b8ee0c1 100644
--- a/src/main/java/api/ApiController.java
+++ b/src/main/java/api/ApiController.java
@@ -25,6 +25,7 @@
 
 import entity.Seed;
 import entity.User;
+import entity.Post;
 
 import java.util.UUID;
 
@@ -308,4 +309,189 @@
             return new ResponseEntity<>("{}", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
         }
     }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<String> loginUser(
+        @RequestBody String requestBody
+    ) {
+        try {
+            // 解析前端发送的JSON数据 {email: xxx, password: xxx}
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            
+            // 获取email和password字段
+            com.fasterxml.jackson.databind.JsonNode emailNode = jsonNode.get("email");
+            com.fasterxml.jackson.databind.JsonNode passwordNode = jsonNode.get("password");
+
+            if (emailNode == null || passwordNode == null) {
+                com.fasterxml.jackson.databind.node.ObjectNode errorJson = mapper.createObjectNode();
+                errorJson.put("message", "缺少必要参数");
+                String jsonError = mapper.writeValueAsString(errorJson);
+                return new ResponseEntity<>(jsonError, HttpStatus.BAD_REQUEST);
+            }
+            
+            String email = emailNode.asText();
+            String password = passwordNode.asText();
+
+            // 参数验证
+            if (email == null || email.trim().isEmpty() || 
+                password == null || password.trim().isEmpty()) {
+                com.fasterxml.jackson.databind.node.ObjectNode errorJson = mapper.createObjectNode();
+                errorJson.put("message", "邮箱和密码不能为空");
+                String jsonError = mapper.writeValueAsString(errorJson);
+                return new ResponseEntity<>(jsonError, HttpStatus.BAD_REQUEST);
+            }
+            
+            // 创建User对象进行登录验证
+            User user = new User();
+            user.email = email.trim();
+            user.password = password;
+            
+            String userid = db1.LoginUser(user);
+            if (userid != null) {
+                com.fasterxml.jackson.databind.node.ObjectNode responseJson = mapper.createObjectNode();
+                responseJson.put("userId", userid);
+                responseJson.put("userid", userid);
+                responseJson.put("message", "登录成功");
+                String jsonResponse = mapper.writeValueAsString(responseJson);
+                return new ResponseEntity<>(jsonResponse, HttpStatus.OK);
+            } else {
+                // 返回JSON格式的错误信息
+                com.fasterxml.jackson.databind.node.ObjectNode errorJson = mapper.createObjectNode();
+                errorJson.put("message", "登录失败,请检查账号密码");
+                String jsonError = mapper.writeValueAsString(errorJson);
+                return new ResponseEntity<>(jsonError, HttpStatus.UNAUTHORIZED);
+            }
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            com.fasterxml.jackson.databind.node.ObjectNode errorJson = mapper.createObjectNode();
+            try {
+                errorJson.put("message", "服务器内部错误");
+                String jsonError = mapper.writeValueAsString(errorJson);
+                return new ResponseEntity<>(jsonError, HttpStatus.INTERNAL_SERVER_ERROR);
+            } catch (JsonProcessingException ex) {
+                return new ResponseEntity<>("{\"message\":\"服务器内部错误\"}", HttpStatus.INTERNAL_SERVER_ERROR);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            com.fasterxml.jackson.databind.node.ObjectNode errorJson = mapper.createObjectNode();
+            try {
+                errorJson.put("message", "服务器内部错误");
+                String jsonError = mapper.writeValueAsString(errorJson);
+                return new ResponseEntity<>(jsonError, HttpStatus.INTERNAL_SERVER_ERROR);
+            } catch (JsonProcessingException ex) {
+                return new ResponseEntity<>("{\"message\":\"服务器内部错误\"}", HttpStatus.INTERNAL_SERVER_ERROR);
+            }
+        }
+    }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> registerUser(
+        @RequestBody String requestBody
+    ) {
+        try {
+            System.out.println("Register request body: " + requestBody);
+            // 解析 JSON 数据
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            
+            // 安全地获取字段
+            com.fasterxml.jackson.databind.JsonNode usernameNode = jsonNode.get("username");
+            com.fasterxml.jackson.databind.JsonNode passwordNode = jsonNode.get("password");
+            com.fasterxml.jackson.databind.JsonNode inviteEmailNode = jsonNode.get("invite_email");
+            
+            if (usernameNode == null || passwordNode == null || inviteEmailNode == null) {
+                return new ResponseEntity<>(2, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+            
+            String username = usernameNode.asText();
+            String password = passwordNode.asText();
+            String inviteEmail = inviteEmailNode.asText();
+            
+            // 参数验证
+            if (username == null || username.trim().isEmpty() || 
+                password == null || password.trim().isEmpty() ||
+                inviteEmail == null || inviteEmail.trim().isEmpty()) {
+                return new ResponseEntity<>(2, HttpStatus.BAD_REQUEST);
+            }
+            
+            // 创建 User 对象
+            User user = new User();
+            user.userid = java.util.UUID.randomUUID().toString(); // 生成唯一用户ID
+            user.username = username.trim();
+            user.password = password;
+            user.email = inviteEmail.trim(); // 使用邀请邮箱作为用户邮箱
+            
+            // 设置默认值
+            user.sex = "m"; // 默认性别
+            user.school = ""; // 默认学校
+            user.pictureurl = ""; // 默认头像URL
+            user.profile = ""; // 默认个人简介
+            user.accountstate = false; // 默认账号状态为正常
+            user.invitetimes = 5; // 默认邀请次数
+            
+            // 设置时间字段
+            user.lastDetectedTime = new java.util.Date();
+            user.fakeLastDetectedTime = new java.util.Date();
+            
+            // 调用数据库注册方法
+            int ret = db1.RegisterUser(user);
+            System.out.println("Register result: " + ret);
+            
+            // // 如果注册成功,还需要创建对应的 UserPT 记录
+            // if (ret == 0) {
+            //     try {
+            //         entity.UserPT userPT = new entity.UserPT();
+            //         userPT.userid = user.userid;
+            //         userPT.magic = 100; // 初始魔力值
+            //         userPT.upload = 0L; // 初始上传量
+            //         userPT.download = 0L; // 初始下载量
+            //         userPT.share = 0.0; // 初始分享率
+            //         userPT.farmurl = ""; // 默认做种路径
+            //         userPT.viptime = 0; // 初始VIP次数
+            //         userPT.user = user; // 设置关联
+                    
+            //         int ptRet = db1.RegisterUserPT(userPT);
+            //         if (ptRet != 0) {
+            //             // 如果 UserPT 创建失败,记录日志但不影响主要注册流程
+            //             System.err.println("Warning: Failed to create UserPT for user " + user.userid);
+            //         }
+            //     } catch (Exception e) {
+            //         System.err.println("Warning: Exception creating UserPT: " + e.getMessage());
+            //     }
+            // }
+            
+            if (ret == 0) {
+                return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示注册成功
+            } else if (ret == 1) {
+                return new ResponseEntity<>(1, HttpStatus.CONFLICT); // 返回 1 表示邮箱重复
+            } else {
+                return new ResponseEntity<>(ret, HttpStatus.BAD_REQUEST); // 返回 2 表示未被邀请或其他错误
+            }
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(2, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 2 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(2, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    public ResponseEntity<String> getForum() {
+        try {
+            Post[] posts = db1.GetPostList();
+            if (posts == null || posts.length == 0) {
+                return new ResponseEntity<>("[]", HttpStatus.OK); // 返回空数组表示没有帖子
+            }
+            String json = mapper.writeValueAsString(posts);
+            return new ResponseEntity<>(json, HttpStatus.OK);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", HttpStatus.INTERNAL_SERVER_ERROR);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/api/ApiInterface.java b/src/main/java/api/ApiInterface.java
index 2b4a3a3..4a2c02e 100644
--- a/src/main/java/api/ApiInterface.java
+++ b/src/main/java/api/ApiInterface.java
@@ -62,4 +62,17 @@
     ResponseEntity<String> getUserStat(
         @RequestParam("userid") String userid
     );
+
+    @PostMapping("/login")
+    ResponseEntity<String> loginUser(
+        @RequestBody String requestBody
+    );
+
+    @PostMapping("/register")
+    ResponseEntity<Integer> registerUser(
+        @RequestBody String requestBody
+    );
+
+    @GetMapping("/forum")
+    ResponseEntity<String> getForum();
 }
\ No newline at end of file
diff --git a/src/main/java/database/DataManagerInterface.java b/src/main/java/database/DataManagerInterface.java
index 1f4b510..c1df413 100644
--- a/src/main/java/database/DataManagerInterface.java
+++ b/src/main/java/database/DataManagerInterface.java
@@ -50,6 +50,7 @@
     public int SubmitSeed(String begid,Seed seed);//提交种子,返回状态:0 success,1 重复,2其他原因
     public void SettleBeg();//结算所有求种信息,求种信息中需要增加Beg截止日期,默认14天,期间投票>的则Beg成功,否则Beg失败,并发放对应奖励
 
+    public Post[] GetPostList();//获取用户的帖子列表
     public int AddPost(Post post);//添加一个新的帖子,返回状态:0 success,1 重复,2其他原因
     public int UpdatePost(Post post);//更新一个帖子,返回状态:0 success,1 不存在,2其他原因
     public int DeletePost(String postid);//删除一个帖子,返回状态:0 success,1 不存在,2其他原因
diff --git a/src/main/java/database/Database1.java b/src/main/java/database/Database1.java
index e67dcb0..030abdd 100644
--- a/src/main/java/database/Database1.java
+++ b/src/main/java/database/Database1.java
@@ -20,6 +20,7 @@
 import entity.QUserPT;
 import entity.QUserStar;
 import entity.QUserInvite;
+import entity.QPost;
 import entity.Seed;
 import entity.User;
 import entity.UserPT;
@@ -47,12 +48,10 @@
                 return null;
             }
             
-            // 用户名和邮箱应该有且仅有一个不为空
-            boolean hasUsername = userinfo.username != null && !userinfo.username.isEmpty();
             boolean hasEmail = userinfo.email != null && !userinfo.email.isEmpty();
             
             // 如果两个都为空或两个都不为空,返回null
-            if ((!hasUsername && !hasEmail) || (hasUsername && hasEmail)) {
+            if (!hasEmail) {
                 return null;
             }
             
@@ -60,21 +59,13 @@
             QUser u = QUser.user;
             User foundUser = null;
             
-            if (hasUsername) {
-                // 通过用户名和密码查找
-                foundUser = query.select(u)
-                    .from(u)
-                    .where(u.username.eq(userinfo.username)
-                        .and(u.password.eq(userinfo.password)))
-                    .fetchOne();
-            } else {
-                // 通过邮箱和密码查找
-                foundUser = query.select(u)
-                    .from(u)
-                    .where(u.email.eq(userinfo.email)
-                        .and(u.password.eq(userinfo.password)))
-                    .fetchOne();
-            }
+            
+            // 通过邮箱和密码查找
+            foundUser = query.select(u)
+                .from(u)
+                .where(u.email.eq(userinfo.email)
+                    .and(u.password.eq(userinfo.password)))
+                .fetchOne();
             
             // 如果找到匹配的用户则返回用户ID,否则返回null
             return foundUser != null ? foundUser.userid : null;
@@ -108,13 +99,18 @@
                 return 1; // 邮箱重复
             }
 
-             entitymanager.persist(userinfo);
-             return 0; // 注册成功
+            entitymanager.getTransaction().begin();
+            entitymanager.persist(userinfo);
+            entitymanager.getTransaction().commit();
+            return 0; // 注册成功
 
-         }catch(Exception e){
-             e.printStackTrace();
-            return 3;
-         }
+        }catch(Exception e){
+            e.printStackTrace();
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }   
+            return 4;
+        }
          
     }
 
@@ -199,16 +195,24 @@
     @Override
     public int RegisterUserPT(UserPT userinfo){
         try {
+            entitymanager.getTransaction().begin();
+            
             JPAQuery<UserPT> query = new JPAQuery<>(entitymanager);
             QUserPT u = QUserPT.userPT;
             UserPT checkUserPT = query.select(u).from(u).where(u.userid.eq(userinfo.userid)).fetchOne();
             if (checkUserPT != null) {
+                entitymanager.getTransaction().rollback();
                 return 1;
             }
+            
             entitymanager.persist(userinfo);
+            entitymanager.getTransaction().commit();
             return 0;
         } catch (Exception e) {
             e.printStackTrace();
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
             return 2;
         }
     }
@@ -596,5 +600,13 @@
     }
     //获取所有迁移信息
 
+    @Override
+    public Post[] GetPostList() {
+        JPAQuery<Post> query = new JPAQuery<>(entitymanager);
+        QPost p = QPost.post;
+        List<Post> posts = query.select(p).from(p).fetch();
+        return posts.toArray(new Post[0]);
+    }
+
 }
 
diff --git a/src/main/java/database/Database2.java b/src/main/java/database/Database2.java
index 0e6dadf..7a58953 100644
--- a/src/main/java/database/Database2.java
+++ b/src/main/java/database/Database2.java
@@ -1101,4 +1101,9 @@
             }
         }
     }
+
+    @Override
+    public Post[] GetPostList(){
+        return null;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/entity/Post.java b/src/main/java/entity/Post.java
index 1593ca0..5245d1c 100644
--- a/src/main/java/entity/Post.java
+++ b/src/main/java/entity/Post.java
@@ -12,7 +12,9 @@
 import javax.persistence.Table;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
+import com.querydsl.core.annotations.QueryEntity;
 
+@QueryEntity
 @Entity
 @Table(name = "Post")
 public class Post {
diff --git a/src/main/java/entity/Seed.java b/src/main/java/entity/Seed.java
index 0106325..6c3f98c 100644
--- a/src/main/java/entity/Seed.java
+++ b/src/main/java/entity/Seed.java
@@ -11,9 +11,9 @@
 import javax.persistence.Table;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
-import com.querydsl.core.annotations.QueryEntity;
+// import com.querydsl.core.annotations.QueryEntity;
 
-@QueryEntity
+// @QueryEntity
 @Entity
 @Table(name = "Seed")
 public class Seed {
diff --git a/src/main/java/entity/User.java b/src/main/java/entity/User.java
index 0a706ae..f4c64bf 100644
--- a/src/main/java/entity/User.java
+++ b/src/main/java/entity/User.java
@@ -29,7 +29,7 @@
     public String username;
     @Column(name = "password", length = 255, nullable = false)
     public String password;
-    @Column(name = "gender", nullable = false)
+    @Column(name = "gender")
     @JsonProperty("gender")
     public String sex;
 
@@ -62,8 +62,8 @@
     @Column(name = "invite_left", nullable = false)
     @JsonProperty("invite_left")
     public int invitetimes;
-    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
-    public UserPT userPT;
+    // @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
+    // public UserPT userPT;
 
     // Constructors, getters, setters
     public User() {
diff --git a/src/main/java/entity/UserPT.java b/src/main/java/entity/UserPT.java
index 13c707b..44af840 100644
--- a/src/main/java/entity/UserPT.java
+++ b/src/main/java/entity/UserPT.java
@@ -8,7 +8,7 @@
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.MapsId;
-import javax.persistence.OneToOne;
+import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 
 import com.querydsl.core.annotations.QueryEntity;
@@ -21,9 +21,8 @@
     @Column(name = "user_id", length = 36, nullable = false)
     public String userid;
 
-    @OneToOne(optional = false, fetch = FetchType.LAZY)
-    @MapsId
-    @JoinColumn(name = "user_id", referencedColumnName = "user_id", foreignKey = @ForeignKey(name = "fk_pt_user"))
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "user_id", referencedColumnName = "user_id", foreignKey = @ForeignKey(name = "fk_appeal_user"), insertable = false, updatable = false)
     public User user;
 
     @Column(name = "magic", nullable = false)
diff --git a/src/test/java/cheattest/cheatsystest.java b/src/test/java/cheattest/cheatsystest.java
index 4f3a035..72873dc 100644
--- a/src/test/java/cheattest/cheatsystest.java
+++ b/src/test/java/cheattest/cheatsystest.java
@@ -339,7 +339,7 @@
                 // 创建并设置 UserPT 实例
                 UserPT userPT = new UserPT();
                 userPT.user = user; // 关联 User 实例
-                user.userPT = userPT;
+                // user.userPT = userPT;
 
                 em.getTransaction().begin();
                 em.persist(user);
@@ -390,7 +390,7 @@
                 // 创建并设置 UserPT 实例
                 UserPT userPT1 = new UserPT();
                 userPT1.user = user1; // 关联 User 实例
-                user1.userPT = userPT1;
+                // user1.userPT = userPT1;
 
                 // 插入用户 2(非作弊用户)
                 String userId2 = UUID.randomUUID().toString();
@@ -410,7 +410,7 @@
                 // 创建并设置 UserPT 实例
                 UserPT userPT2 = new UserPT();
                 userPT2.user = user2; // 关联 User 实例
-                user2.userPT = userPT2;
+                // user2.userPT = userPT2;
 
                 em.getTransaction().begin();
                 em.persist(user1);
diff --git a/src/test/java/databasetest/databasesystest.java b/src/test/java/databasetest/databasesystest.java
index 22a9b1e..5f883f9 100644
--- a/src/test/java/databasetest/databasesystest.java
+++ b/src/test/java/databasetest/databasesystest.java
@@ -106,7 +106,7 @@
                     existingUserPT.farmurl = null;
                     existingUserPT.viptime = 0;
                     existingUserPT.user = existingUser;
-                    existingUser.userPT = existingUserPT;
+                    // existingUser.userPT = existingUserPT;
                     
                     em.persist(existingUser);
                     existingUsers.add(existingUser);
@@ -159,7 +159,7 @@
                 invitedUserPT.farmurl = null;
                 invitedUserPT.viptime = 0;
                 invitedUserPT.user = invitedUser;
-                invitedUser.userPT = invitedUserPT;
+                // invitedUser.userPT = invitedUserPT;
                 
                 int ret1 = db.RegisterUser(invitedUser);
                 Assertions.assertEquals(0, ret1, "RegisterUser should return 0 for invited user's first registration");
@@ -241,7 +241,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.flush();
                 // 更新信息
@@ -317,7 +317,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.flush();
                 // 查询
@@ -372,7 +372,7 @@
                 userPT.farmurl = "/data/seeds/" + userId;
                 userPT.viptime = 3 + i;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 em.flush();
@@ -424,7 +424,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 em.flush();
@@ -495,7 +495,7 @@
                 userPT.farmurl = "/path/to/seed" + i;
                 userPT.viptime = 3 + i;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 // em.persist(user);
                 // em.persist(userPT);
                 // em.flush();
@@ -549,7 +549,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 // 再插入Seed
@@ -619,7 +619,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 // 再插入Seed
@@ -713,7 +713,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 // 再插入Seed
@@ -827,7 +827,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 em.flush();
@@ -1011,7 +1011,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 em.flush();
@@ -1058,7 +1058,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 em.flush();
@@ -1118,7 +1118,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 em.flush();
@@ -1190,7 +1190,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 em.flush();
diff --git a/src/test/java/viptest/vipsystest.java b/src/test/java/viptest/vipsystest.java
index 3323b26..07dc979 100644
--- a/src/test/java/viptest/vipsystest.java
+++ b/src/test/java/viptest/vipsystest.java
@@ -88,7 +88,7 @@
                     userPT.farmurl = null;
                     userPT.viptime = 0;
                     userPT.user = user;
-                    user.userPT = userPT;
+                    // user.userPT = userPT;
                     em.persist(user);
                     em.persist(userPT);
                     // 插入Seed
@@ -167,7 +167,7 @@
                     userPT.farmurl = null;
                     userPT.viptime = 0;
                     userPT.user = user;
-                    user.userPT = userPT;
+                    // user.userPT = userPT;
                     em.persist(user);
                     em.persist(userPT);
                     entity.Seed seed = new entity.Seed();
@@ -245,7 +245,7 @@
                     userPT.farmurl = null;
                     userPT.viptime = 0;
                     userPT.user = user;
-                    user.userPT = userPT;
+                    // user.userPT = userPT;
                     em.persist(user);
                     em.persist(userPT);
                     entity.Seed seed = new entity.Seed();
@@ -317,7 +317,7 @@
                     userPT.farmurl = null;
                     userPT.viptime = 0;
                     userPT.user = user;
-                    user.userPT = userPT;
+                    // user.userPT = userPT;
                     em.persist(user);
                     em.persist(userPT);
                     entity.Seed seed = new entity.Seed();
@@ -388,7 +388,7 @@
                     userPT.farmurl = null;
                     userPT.viptime = 0;
                     userPT.user = user;
-                    user.userPT = userPT;
+                    // user.userPT = userPT;
                     em.persist(user);
                     em.persist(userPT);
                     entity.Seed seed = new entity.Seed();
@@ -459,7 +459,7 @@
                     userPT.farmurl = null;
                     userPT.viptime = 0;
                     userPT.user = user;
-                    user.userPT = userPT;
+                    // user.userPT = userPT;
                     em.persist(user);
                     em.persist(userPT);
                     entity.Seed seed = new entity.Seed();
@@ -560,7 +560,7 @@
                     userPT.farmurl = null;
                     userPT.viptime = 0;
                     userPT.user = user;
-                    user.userPT = userPT;
+                    // user.userPT = userPT;
                     em.persist(user);
                     em.persist(userPT);
                     // 插入Seed