diff --git a/src/main/java/com/ptp/ptplatform/config/MybatisPlusConfig.java b/src/main/java/com/ptp/ptplatform/config/MybatisPlusConfig.java
new file mode 100644
index 0000000..5b34097
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/config/MybatisPlusConfig.java
@@ -0,0 +1,19 @@
+package com.ptp.ptplatform.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class MybatisPlusConfig {
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        interceptor.addInnerInterceptor(
+                new PaginationInnerInterceptor(DbType.MYSQL)
+        );
+        return interceptor;
+    }
+}
diff --git a/src/main/java/com/ptp/ptplatform/controller/HelpCommentController.java b/src/main/java/com/ptp/ptplatform/controller/HelpCommentController.java
new file mode 100644
index 0000000..15504be
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/controller/HelpCommentController.java
@@ -0,0 +1,24 @@
+package com.ptp.ptplatform.controller;
+
+import com.ptp.ptplatform.service.HelpCommentService;
+import com.ptp.ptplatform.utils.Result;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/help/comments")
+@AllArgsConstructor
+public class HelpCommentController {
+
+    private final HelpCommentService commentService;
+
+    /**
+     * 点赞评论
+     * POST /help/comments/{commentId}/like
+     */
+    @PostMapping("/{commentId}/like")
+    public Result like(@PathVariable int commentId) {
+        commentService.incrementLike(commentId);
+        return Result.ok();
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/controller/HelpPostController.java b/src/main/java/com/ptp/ptplatform/controller/HelpPostController.java
new file mode 100644
index 0000000..5fb626c
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/controller/HelpPostController.java
@@ -0,0 +1,83 @@
+package com.ptp.ptplatform.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ptp.ptplatform.entity.HelpComment;
+import com.ptp.ptplatform.entity.HelpPost;
+import com.ptp.ptplatform.entity.SeedPost;
+import com.ptp.ptplatform.service.HelpCommentService;
+import com.ptp.ptplatform.service.HelpPostService;
+import com.ptp.ptplatform.utils.Result;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import java.util.List;
+
+@RestController
+@RequestMapping("/help/posts")
+@AllArgsConstructor
+public class HelpPostController {
+    private final HelpPostService postService;
+    private final HelpCommentService commentService;
+
+    // 创建帖子
+    @PostMapping
+    public Result createPost(@RequestBody HelpPost post) {
+        postService.save(post);
+        return Result.ok().data("post", post);
+    }
+
+
+
+    // 列表分页
+    @GetMapping
+    public Result listPosts(@RequestParam(defaultValue = "1") int page,
+                            @RequestParam(defaultValue = "10") int size) {
+        IPage<HelpPost> ipage = postService.page(
+                new Page<>(page, size),
+                new QueryWrapper<HelpPost>().orderByDesc("create_time")
+        );
+        return Result.ok()
+                .data("records", ipage.getRecords())
+                .data("total",    ipage.getTotal());
+    }
+
+    // 帖子详情 + 评论
+    @GetMapping("/{postId}")
+    public Result getPost(@PathVariable int postId) {
+        HelpPost post = postService.getById(postId);
+        List<HelpComment> comments = commentService.list(
+                new QueryWrapper<HelpComment>()
+                        .eq("post_id", postId)
+                        .orderByAsc("create_time")
+        );
+        return Result.ok()
+                .data("post",     post)
+                .data("comments", comments);
+    }
+
+    // 点赞帖子
+    @PostMapping("/{postId}/like")
+    public Result likePost(@PathVariable int postId) {
+        postService.incrementLike(postId);
+        return Result.ok();
+    }
+    // 发布评论
+    @PostMapping("/{postId}/comments")
+    public Result comment(@PathVariable int postId,
+                          @RequestBody HelpComment comment) {
+        comment.setPostId(postId);
+        commentService.save(comment);
+        postService.incrementReplyCount(postId);
+        return Result.ok()
+                .data("commentId", comment.getId());
+    }
+
+    @Data
+    @AllArgsConstructor
+    static class HelpDetailResponse {
+        private HelpPost post;
+        private List<HelpComment> comments;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/controller/SeedCommentController.java b/src/main/java/com/ptp/ptplatform/controller/SeedCommentController.java
new file mode 100644
index 0000000..635080f
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/controller/SeedCommentController.java
@@ -0,0 +1,19 @@
+package com.ptp.ptplatform.controller;
+
+import com.ptp.ptplatform.service.SeedCommentService;
+import com.ptp.ptplatform.utils.Result;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/seed/comments")
+@AllArgsConstructor
+public class SeedCommentController {
+    private final SeedCommentService commentService;
+
+    @PostMapping("/{commentId}/like")
+    public Result like(@PathVariable int commentId) {
+        commentService.incrementLike(commentId);
+        return Result.ok();
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/controller/SeedPostController.java b/src/main/java/com/ptp/ptplatform/controller/SeedPostController.java
new file mode 100644
index 0000000..f481b9b
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/controller/SeedPostController.java
@@ -0,0 +1,82 @@
+package com.ptp.ptplatform.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ptp.ptplatform.entity.HelpPost;
+import com.ptp.ptplatform.entity.SeedComment;
+import com.ptp.ptplatform.entity.SeedPost;
+import com.ptp.ptplatform.service.SeedCommentService;
+import com.ptp.ptplatform.service.SeedPostService;
+import com.ptp.ptplatform.utils.Result;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import java.util.List;
+
+@RestController
+@RequestMapping("/seed/posts")
+@AllArgsConstructor
+public class SeedPostController {
+    private final SeedPostService postService;
+    private final SeedCommentService commentService;
+
+    // 创建帖子
+    @PostMapping
+    public Result createPost(@RequestBody SeedPost post) {
+        postService.save(post);
+        return Result.ok().data("post", post);
+    }
+
+
+    // 列表分页
+    @GetMapping
+    public Result listPosts(@RequestParam(defaultValue = "1") int page,
+                            @RequestParam(defaultValue = "10") int size) {
+        IPage<SeedPost> ipage = postService.page(
+                new Page<>(page, size),
+                new QueryWrapper<SeedPost>().orderByDesc("create_time")
+        );
+        return Result.ok()
+                .data("records", ipage.getRecords())
+                .data("total",    ipage.getTotal());
+    }
+
+    // 帖子详情 + 评论
+    @GetMapping("/{postId}")
+    public Result getPost(@PathVariable int postId) {
+        SeedPost post = postService.getById(postId);
+        List<SeedComment> comments = commentService.list(
+                new QueryWrapper<SeedComment>()
+                        .eq("post_id", postId)
+                        .orderByAsc("create_time")
+        );
+        return Result.ok()
+                .data("post",     post)
+                .data("comments", comments);
+    }
+
+    // 点赞帖子
+    @PostMapping("/{postId}/like")
+    public Result likePost(@PathVariable int postId) {
+        postService.incrementLike(postId);
+        return Result.ok();
+    }
+    // 发布评论
+    @PostMapping("/{postId}/comments")
+    public Result comment(@PathVariable int postId,
+                          @RequestBody SeedComment comment) {
+        comment.setPostId(postId);
+        commentService.save(comment);
+        postService.incrementReplyCount(postId);
+        return Result.ok()
+                .data("commentId", comment.getId());
+    }
+
+    @Data
+    @AllArgsConstructor
+    static class SeedDetailResponse {
+        private SeedPost post;
+        private List<SeedComment> comments;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/entity/HelpComment.java b/src/main/java/com/ptp/ptplatform/entity/HelpComment.java
new file mode 100644
index 0000000..405e91d
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/entity/HelpComment.java
@@ -0,0 +1,19 @@
+package com.ptp.ptplatform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("help_comments")
+public class HelpComment {
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;        // 使用包装类型以支持 null
+    private Integer postId;
+    private Integer authorId;
+    private String content;
+    private Integer likeCount;
+    private LocalDateTime createTime;
+}
diff --git a/src/main/java/com/ptp/ptplatform/entity/HelpPost.java b/src/main/java/com/ptp/ptplatform/entity/HelpPost.java
new file mode 100644
index 0000000..b77fe0b
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/entity/HelpPost.java
@@ -0,0 +1,20 @@
+package com.ptp.ptplatform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("help_posts")
+public class HelpPost {
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;        // 使用包装类型以支持 null
+    private Integer authorId;
+    private String title;
+    private String content;
+    private Integer likeCount;
+    private Integer replyCount;
+    private LocalDateTime createTime;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/entity/SeedComment.java b/src/main/java/com/ptp/ptplatform/entity/SeedComment.java
new file mode 100644
index 0000000..48121b5
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/entity/SeedComment.java
@@ -0,0 +1,19 @@
+package com.ptp.ptplatform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("seed_comments")
+public class SeedComment {
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;        // 使用包装类型以支持 null
+    private Integer postId;
+    private Integer authorId;
+    private String content;
+    private Integer likeCount;
+    private LocalDateTime createTime;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/entity/SeedPost.java b/src/main/java/com/ptp/ptplatform/entity/SeedPost.java
new file mode 100644
index 0000000..b8f74ef
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/entity/SeedPost.java
@@ -0,0 +1,20 @@
+package com.ptp.ptplatform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("seed_posts")
+public class SeedPost {
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;        // 使用包装类型以支持 null
+    private Integer authorId;
+    private String title;
+    private String content;
+    private Integer likeCount;
+    private Integer replyCount;
+    private LocalDateTime createTime;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/mapper/HelpCommentMapper.java b/src/main/java/com/ptp/ptplatform/mapper/HelpCommentMapper.java
new file mode 100644
index 0000000..00ed3e3
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/mapper/HelpCommentMapper.java
@@ -0,0 +1,8 @@
+package com.ptp.ptplatform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ptp.ptplatform.entity.HelpComment;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface HelpCommentMapper extends BaseMapper<HelpComment> {}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/mapper/HelpPostMapper.java b/src/main/java/com/ptp/ptplatform/mapper/HelpPostMapper.java
new file mode 100644
index 0000000..29260da
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/mapper/HelpPostMapper.java
@@ -0,0 +1,8 @@
+package com.ptp.ptplatform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ptp.ptplatform.entity.HelpPost;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface HelpPostMapper extends BaseMapper<HelpPost> {}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/mapper/SeedCommentMapper.java b/src/main/java/com/ptp/ptplatform/mapper/SeedCommentMapper.java
new file mode 100644
index 0000000..d72619b
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/mapper/SeedCommentMapper.java
@@ -0,0 +1,8 @@
+package com.ptp.ptplatform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ptp.ptplatform.entity.SeedComment;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SeedCommentMapper extends BaseMapper<SeedComment> {}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/mapper/SeedPostMapper.java b/src/main/java/com/ptp/ptplatform/mapper/SeedPostMapper.java
new file mode 100644
index 0000000..134212d
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/mapper/SeedPostMapper.java
@@ -0,0 +1,8 @@
+package com.ptp.ptplatform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ptp.ptplatform.entity.SeedPost;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SeedPostMapper extends BaseMapper<SeedPost> {}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/service/HelpCommentService.java b/src/main/java/com/ptp/ptplatform/service/HelpCommentService.java
new file mode 100644
index 0000000..dcab060
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/service/HelpCommentService.java
@@ -0,0 +1,8 @@
+package com.ptp.ptplatform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ptp.ptplatform.entity.HelpComment;
+
+public interface HelpCommentService extends IService<HelpComment> {
+    void incrementLike(int commentId);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/service/HelpPostService.java b/src/main/java/com/ptp/ptplatform/service/HelpPostService.java
new file mode 100644
index 0000000..541f927
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/service/HelpPostService.java
@@ -0,0 +1,9 @@
+package com.ptp.ptplatform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ptp.ptplatform.entity.HelpPost;
+
+public interface HelpPostService extends IService<HelpPost> {
+    void incrementLike(int postId);
+    void incrementReplyCount(int postId);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/service/SeedCommentService.java b/src/main/java/com/ptp/ptplatform/service/SeedCommentService.java
new file mode 100644
index 0000000..dec7f16
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/service/SeedCommentService.java
@@ -0,0 +1,8 @@
+package com.ptp.ptplatform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ptp.ptplatform.entity.SeedComment;
+
+public interface SeedCommentService extends IService<SeedComment> {
+    void incrementLike(int commentId);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/service/SeedPostService.java b/src/main/java/com/ptp/ptplatform/service/SeedPostService.java
new file mode 100644
index 0000000..40605a8
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/service/SeedPostService.java
@@ -0,0 +1,9 @@
+package com.ptp.ptplatform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ptp.ptplatform.entity.SeedPost;
+
+public interface SeedPostService extends IService<SeedPost> {
+    void incrementLike(int postId);
+    void incrementReplyCount(int postId);
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/service/impl/HelpCommentServiceImpl.java b/src/main/java/com/ptp/ptplatform/service/impl/HelpCommentServiceImpl.java
new file mode 100644
index 0000000..dbaed2a
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/service/impl/HelpCommentServiceImpl.java
@@ -0,0 +1,21 @@
+package com.ptp.ptplatform.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ptp.ptplatform.entity.HelpComment;
+import com.ptp.ptplatform.mapper.HelpCommentMapper;
+import com.ptp.ptplatform.service.HelpCommentService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class HelpCommentServiceImpl extends ServiceImpl<HelpCommentMapper, HelpComment> implements HelpCommentService {
+    @Override
+    @Transactional
+    public void incrementLike(int commentId) {
+        this.update(null,
+                new com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper<HelpComment>()
+                        .eq("id", commentId)
+                        .setSql("like_count = like_count + 1")
+        );
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/service/impl/HelpPostServiceImpl.java b/src/main/java/com/ptp/ptplatform/service/impl/HelpPostServiceImpl.java
new file mode 100644
index 0000000..5e8d5d0
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/service/impl/HelpPostServiceImpl.java
@@ -0,0 +1,31 @@
+package com.ptp.ptplatform.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ptp.ptplatform.entity.HelpPost;
+import com.ptp.ptplatform.mapper.HelpPostMapper;
+import com.ptp.ptplatform.service.HelpPostService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class HelpPostServiceImpl extends ServiceImpl<HelpPostMapper, HelpPost> implements HelpPostService {
+    @Override
+    @Transactional
+    public void incrementLike(int postId) {
+        this.update(null,
+                new com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper<HelpPost>()
+                        .eq("id", postId)
+                        .setSql("like_count = like_count + 1")
+        );
+    }
+
+    @Override
+    @Transactional
+    public void incrementReplyCount(int postId) {
+        this.update(null,
+                new com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper<HelpPost>()
+                        .eq("id", postId)
+                        .setSql("reply_count = reply_count + 1")
+        );
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/service/impl/SeedCommentServiceImpl.java b/src/main/java/com/ptp/ptplatform/service/impl/SeedCommentServiceImpl.java
new file mode 100644
index 0000000..537194a
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/service/impl/SeedCommentServiceImpl.java
@@ -0,0 +1,21 @@
+package com.ptp.ptplatform.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ptp.ptplatform.entity.SeedComment;
+import com.ptp.ptplatform.mapper.SeedCommentMapper;
+import com.ptp.ptplatform.service.SeedCommentService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class SeedCommentServiceImpl extends ServiceImpl<SeedCommentMapper, SeedComment> implements SeedCommentService {
+    @Override
+    @Transactional
+    public void incrementLike(int commentId) {
+        this.update(null,
+                new com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper<SeedComment>()
+                        .eq("id", commentId)
+                        .setSql("like_count = like_count + 1")
+        );
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/service/impl/SeedPostServiceImpl.java b/src/main/java/com/ptp/ptplatform/service/impl/SeedPostServiceImpl.java
new file mode 100644
index 0000000..05cf06c
--- /dev/null
+++ b/src/main/java/com/ptp/ptplatform/service/impl/SeedPostServiceImpl.java
@@ -0,0 +1,31 @@
+package com.ptp.ptplatform.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ptp.ptplatform.entity.SeedPost;
+import com.ptp.ptplatform.mapper.SeedPostMapper;
+import com.ptp.ptplatform.service.SeedPostService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class SeedPostServiceImpl extends ServiceImpl<SeedPostMapper, SeedPost> implements SeedPostService {
+    @Override
+    @Transactional
+    public void incrementLike(int postId) {
+        this.update(null,
+                new com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper<SeedPost>()
+                        .eq("id", postId)
+                        .setSql("like_count = like_count + 1")
+        );
+    }
+
+    @Override
+    @Transactional
+    public void incrementReplyCount(int postId) {
+        this.update(null,
+                new com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper<SeedPost>()
+                        .eq("id", postId)
+                        .setSql("reply_count = reply_count + 1")
+        );
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ptp/ptplatform/utils/resultCode.java b/src/main/java/com/ptp/ptplatform/utils/resultCode.java
index abd93d9..70afcb7 100644
--- a/src/main/java/com/ptp/ptplatform/utils/resultCode.java
+++ b/src/main/java/com/ptp/ptplatform/utils/resultCode.java
@@ -4,5 +4,4 @@
 public interface resultCode {
     public static Integer SUCCESS = 200;
     public static Integer ERROR = 500;
-
 }
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index e1226b0..588221c 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -17,7 +17,8 @@
 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
 spring.datasource.url=jdbc:mysql://localhost:3306/ptpdata?useUnicode=true&characterEncoding=utf8
 spring.datasource.username=root
-spring.datasource.password=yumu1412
+#spring.datasource.password=yumu1412
+spring.datasource.password=root
 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
 
 # Hibernate properties
