浏览代码

用户查询基本做完

skyfffire 2 月之前
父节点
当前提交
715a80d18c

+ 48 - 0
src/main/java/modules/user/UserController.java

@@ -287,6 +287,54 @@ public class UserController extends MyController {
         }
     }
 
+    @Before(LoginInterceptor.class)
+    @RequiredRoleInterface({UserController.ROLE_SUPER_ADMIN})
+    public void count() {
+        renderJson(MyRet.ok("查询成功").setData(service.count()));
+    }
+
+    @Before(LoginInterceptor.class)
+    @RequiredRoleInterface({UserController.ROLE_SUPER_ADMIN})
+    @EmptyInterface({"page_size", "page_number"})
+    public void users() {
+        JSONObject requestBodyJson = MyController.getJsonModelByRequestAndType(getRequest(), JSONObject.class);
+        
+        // 页面大小
+        String pageSizeStr = requestBodyJson.getString("page_size");
+        int pageSizeInt;
+        try {
+            pageSizeInt = Integer.parseInt(pageSizeStr);
+
+            if (pageSizeInt <= 0) {
+                renderJson(MyRet.fail("页面大小(page_size)期待是正整数,你传的是: " + pageSizeStr));
+                return;
+            }
+        } catch (NumberFormatException e) {
+            renderJson(MyRet.fail("页面大小(page_size)格式不正确: " + pageSizeStr));
+            return;
+        }
+
+        // 页码
+        String pageNumberStr = requestBodyJson.getString("page_number");
+        int pageNumberInt;
+        try {
+            pageNumberInt = Integer.parseInt(pageNumberStr);
+            
+            if (pageNumberInt <= 0) {
+                renderJson(MyRet.fail("页码(page_number)期待是正整数,你传的是: " + pageNumberStr));
+                return;
+            }
+        } catch (NumberFormatException e) {
+            renderJson(MyRet.fail("页码(page_number)格式不正确: " + pageNumberStr));
+            return;
+        }
+
+        // 查询条件
+        String keywords = requestBodyJson.getString("keywords");
+        
+        renderJson(MyRet.ok("查询成功").setData(service.users(pageNumberInt, pageSizeInt, keywords)));
+    }
+    
     /*
     * 
     ### 验证码修改密码

+ 40 - 1
src/main/java/modules/user/UserService.java

@@ -1,9 +1,12 @@
 package modules.user;
 
+import com.jfinal.kit.StrKit;
 import com.jfinal.plugin.activerecord.Db;
 import common.model.User;
 import common.utils.http.MyRet;
 
+import java.util.List;
+
 public class UserService {
     public String hello() {
         return "Hello User";
@@ -57,7 +60,7 @@ public class UserService {
     }
     
     public User findUserByMobileNumber(String MobileNumber) {
-        String columns = "id, nickname, mobile_number, role, referrer_id, integral, create_time, update_time, is_deleted";
+        String columns = "id, nickname, mobile_number, role, referrer_id, integral, login_time, create_time, update_time, is_deleted";
         String sql = "select " + columns + " from t_user where mobile_number = ?";
         
         return User.dao.findFirst(sql, MobileNumber);
@@ -66,4 +69,40 @@ public class UserService {
     public boolean isUserExists(String mobileNumber) {        
         return Db.queryLong("SELECT COUNT(1) FROM t_user WHERE mobile_number = ?", mobileNumber) > 0;
     }
+    
+    public Integer count() {
+        return Db.queryInt("SELECT COUNT(1) FROM t_user");
+    }
+
+    public List<User> users(int pageNumber, int pageSize, String keywords) {
+        // limit 的第一个参数是偏移量,第二个参数是查询数量
+        // 正确的 limit 是 LIMIT offset, count
+        // offset = (pageNumber - 1) * pageSize
+        // count = pageSize
+        System.out.println(pageNumber);
+        System.out.println(pageSize);
+        int offset = (pageNumber - 1) * pageSize;
+
+        String searchKeyWord = "%" + keywords + "%";
+        String columns = "id, nickname, mobile_number, role, referrer_id, integral, login_time, create_time, update_time, is_deleted";
+
+        // SQL 语句构建修正
+        // 基础 SQL 部分:SELECT ... FROM ... ORDER BY ... LIMIT
+        String baseSql = "select " + columns + " from t_user order by login_time desc limit ?, ?";
+
+        // 包含搜索条件的 WHERE 子句
+        String whereClause = " where id like ? or nickname like ? or mobile_number like ?"; // 注意 id 的模糊查询
+
+        // 如果没有关键词,只使用基础 SQL
+        if (StrKit.isBlank(keywords)) {
+            return User.dao.find(baseSql, offset, pageSize);
+        } else {
+            // 如果有关键词,将 WHERE 子句插入到 ORDER BY 前面
+            // 完整的 SQL 结构应该是:SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT
+            String fullSql = "select " + columns + " from t_user " + whereClause + " order by login_time desc limit ?, ?";
+
+            // 参数顺序:先是 WHERE 子句的参数,然后是 LIMIT 的参数
+            return User.dao.find(fullSql, searchKeyWord, searchKeyWord, searchKeyWord, offset, pageSize);
+        }
+    }
 }

+ 29 - 13
src/test/rest/UserControllerTest.http

@@ -1,3 +1,14 @@
+### 登录,可以选择传入pwd_md5(密码登录)或verify_code(验证码登录)。如果两者都传入了,后台会优先使用pwd_md5
+### 登录成功后会返token回来,后面请求需要用户状态的接口都需要携带到headers里面,key是dl-token
+POST {{ baseUrl }}/user/login
+Content-Type: application/json
+
+{
+  "mobile_number": "17781855864",
+  "pwd_md5": "e10adc3949ba59abbe56e057f20f883e",
+  "verify_code": ""
+}
+
 ### 发送验证码
 POST {{ baseUrl }}/user/sendVerifyCode
 Content-Type: application/json
@@ -14,18 +25,7 @@ Content-Type: application/json
   "mobile_number": "17781855864",
   "pwd_md5": "e10adc3949ba59abbe56e057f20f883e",
   "repeat_pwd_md5": "e10adc3949ba59abbe56e057f20f883e",
-  "verify_code": "9184"
-}
-
-### 登录,可以选择传入pwd_md5(密码登录)或verify_code(验证码登录)。如果两者都传入了,后台会优先使用pwd_md5
-### 登录成功后会返token回来,后面请求需要用户状态的接口都需要携带到headers里面,key是dl-token
-POST {{ baseUrl }}/user/login
-Content-Type: application/json
-
-{
-  "mobile_number": "17781855864",
-  "pwd_md5": "e10adc3949ba59abbe56e057f20f883e",
-  "verify_code": ""
+  "verify_code": "2756"
 }
 
 ### 登出
@@ -37,7 +37,7 @@ POST {{ baseUrl }}/user/getUserInfo
 Content-Type: application/json
 dl-token: 3814944677224469098
 
-### 更新用户的方法,传什么更新什么,不传就不更新,id必须传
+### 【超级管理员】更新用户的方法,传什么更新什么,不传就不更新,id必须传
 POST {{ baseUrl }}/user/updateByAdmin
 Content-Type: application/json
 dl-token: 7324757096464221038
@@ -47,3 +47,19 @@ dl-token: 7324757096464221038
   "nickname": "skyfffire",
   "integral": 10
 }
+
+### 【超级管理员】统计已注册用户数量,用于分页
+POST {{ baseUrl }}/user/count
+Content-Type: application/json
+dl-token: -3169813842449683959
+
+### 【超级管理员】获取用户列表,keywords当前版本支持手机号、id、昵称的模糊查询
+POST {{ baseUrl }}/user/users
+Content-Type: application/json
+dl-token: -3973429148011133173
+
+{
+  "page_number": 1,
+  "page_size": 100,
+  "keywords": "177"
+}