expandAdminFunction

Change-Id: If3b875b3017d1922b15150dd735ca2ce5a3a77f0
diff --git a/src/main/java/com/example/g8backend/service/AdminService.java b/src/main/java/com/example/g8backend/service/AdminService.java
index 1f84eec..da672f5 100644
--- a/src/main/java/com/example/g8backend/service/AdminService.java
+++ b/src/main/java/com/example/g8backend/service/AdminService.java
@@ -2,4 +2,8 @@
 
 public interface AdminService {
     boolean grantVip(Long targetUserId);
+    boolean banUser(Long userId, String reason, Long adminId);
+    boolean unbanUser(Long userId, Long adminId);
+    boolean lockPost(Long postId, String reason, Long adminId);
+    boolean unlockPost(Long postId, Long adminId);
 }
\ No newline at end of file
diff --git a/src/main/java/com/example/g8backend/service/impl/AdminServiceImpl.java b/src/main/java/com/example/g8backend/service/impl/AdminServiceImpl.java
index d3be9fe..24434f4 100644
--- a/src/main/java/com/example/g8backend/service/impl/AdminServiceImpl.java
+++ b/src/main/java/com/example/g8backend/service/impl/AdminServiceImpl.java
@@ -1,12 +1,16 @@
 package com.example.g8backend.service.impl;
 
+import com.example.g8backend.entity.Post;
 import com.example.g8backend.entity.User;
 import com.example.g8backend.mapper.UserMapper;
+import com.example.g8backend.mapper.PostMapper;
 import com.example.g8backend.service.AdminService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDateTime;
+
 @Service
 @RequiredArgsConstructor
 public class AdminServiceImpl implements AdminService {
@@ -23,4 +27,62 @@
         userMapper.updateById(user);
         return true;
     }
+
+    private final PostMapper postMapper;
+
+    @Override
+    @Transactional
+    public boolean banUser(Long userId, String reason, Long adminId) {
+        User user = userMapper.selectById(userId);
+        if (user == null) return false;
+
+        user.setIsBanned(true);
+        user.setBannedReason(reason);
+        user.setBannedAt(LocalDateTime.now());
+        user.setBannedBy(adminId);
+
+        return userMapper.updateById(user) > 0;
+    }
+
+    @Override
+    @Transactional
+    public boolean unbanUser(Long userId, Long adminId) {
+        User user = userMapper.selectById(userId);
+        if (user == null) return false;
+
+        user.setIsBanned(false);
+        user.setBannedReason(null);
+        user.setBannedAt(null);
+        user.setBannedBy(null);
+
+        return userMapper.updateById(user) > 0;
+    }
+
+    @Override
+    @Transactional
+    public boolean lockPost(Long postId, String reason, Long adminId) {
+        Post post = postMapper.selectById(postId);
+        if (post == null) return false;
+
+        post.setIsLocked(true);
+        post.setLockedReason(reason);
+        post.setLockedAt(LocalDateTime.now());
+        post.setLockedBy(adminId);
+
+        return postMapper.updateById(post) > 0;
+    }
+
+    @Override
+    @Transactional
+    public boolean unlockPost(Long postId, Long adminId) {
+        Post post = postMapper.selectById(postId);
+        if (post == null) return false;
+
+        post.setIsLocked(false);
+        post.setLockedReason(null);
+        post.setLockedAt(null);
+        post.setLockedBy(null);
+
+        return postMapper.updateById(post) > 0;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/example/g8backend/service/impl/PostServiceImpl.java b/src/main/java/com/example/g8backend/service/impl/PostServiceImpl.java
index 1fda1e2..2a43439 100644
--- a/src/main/java/com/example/g8backend/service/impl/PostServiceImpl.java
+++ b/src/main/java/com/example/g8backend/service/impl/PostServiceImpl.java
@@ -178,7 +178,6 @@
                 .orderByDesc("hot_score"); // 确保排序条件正确
         return postMapper.selectPage(new Page<>(page, size), queryWrapper);
     }
-
     @Override
     public List<PostHistoryDTO> getViewHistoryWithTitles(Long userId) {
         // 1. 查询浏览记录(按时间倒序)
@@ -187,15 +186,12 @@
                         .eq("user_id", userId)
                         .orderByDesc("view_time")
         );
-
-
         // 2. 转换为DTO并填充标题
         return history.stream().map(view -> {
             PostHistoryDTO dto = new PostHistoryDTO();
             dto.setViewId(view.getViewId());
             dto.setPostId(view.getPostId());
             dto.setViewTime(view.getViewTime());
-
             // 3. 查询帖子标题
             Post post = postMapper.selectById(view.getPostId());
             if (post != null) {