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"; } public MyRet saveUser(User user) { if (isUserExists(user.getStr("mobile_number"))) { return MyRet.fail("手机号已被注册。"); } // 最终保存逻辑 if (!user.save()) { return MyRet.fail("注册失败,请联系客服。"); } return MyRet.ok("注册成功。"); } public MyRet login(String mobileNumber, String pwdMd5Md5) { String findSQL = "select id, nickname, mobile_number, role, referrer_id, integral, create_time, update_time, is_deleted from t_user where " + "mobile_number = ? and pwd_md5_md5=?"; User u = User.dao.findFirst(findSQL, mobileNumber, pwdMd5Md5); if (u == null) { return MyRet.fail("登录失败,密码错误。"); } else { return MyRet.ok("登录成功。").setData(u); } } public MyRet verifyCodeLogin(String mobileNumber) { User u = findUserByMobileNumber(mobileNumber); if (u == null) { return MyRet.fail("验证码登录失败,违规操作将封禁ip。"); } else { return MyRet.ok("登录成功。").setData(u); } } public void updateUserLoginTime(String mobileNumber) { String sql = "update t_user set login_time = ? where mobile_number = ?"; Db.update(sql, System.currentTimeMillis(), mobileNumber); } public void updateToken(String mobileNumber, String token) { String sql = "update t_user set token = ? where mobile_number = ?"; Db.update(sql, token, mobileNumber); } public String findMobileNumberByToken(String token) { String sql = "select mobile_number from t_user where token = ?"; return Db.queryStr(sql, token); } public String findWorkidByToken(String token) { String sql = "select workid from t_user where token = ?"; return Db.queryStr(sql, token); } public User findUserById(String id) { String sql = "select * from t_user where id = ?"; return User.dao.findFirst(sql, id); } public User findUserByMobileNumber(String MobileNumber) { String columns = "id, nickname, mobile_number, role, referrer_id, integral, login_time, hyg_worker_id, create_time, update_time, is_deleted"; String sql = "select " + columns + " from t_user where mobile_number = ?"; return User.dao.findFirst(sql, MobileNumber); } public boolean isUserExists(String mobileNumber) { return Db.queryLong("SELECT COUNT(1) FROM t_user WHERE mobile_number = ?", mobileNumber) > 0; } public Integer count(String keywords) { String searchKeyWord = "%" + keywords + "%"; String sql = "SELECT COUNT(1) FROM t_user"; String whereClause = " where id like ? or nickname like ? or mobile_number like ?"; if (StrKit.isBlank(keywords)) { return Db.queryInt(sql); } else { return Db.queryInt(sql + whereClause, searchKeyWord, searchKeyWord, searchKeyWord); } } public List users(int pageNumber, int pageSize, String keywords) { // limit 的第一个参数是偏移量,第二个参数是查询数量 // 正确的 limit 是 LIMIT offset, count // offset = (pageNumber - 1) * pageSize // count = 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); } } }