UserService.java 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package modules.user;
  2. import com.jfinal.kit.StrKit;
  3. import com.jfinal.plugin.activerecord.Db;
  4. import common.model.User;
  5. import common.utils.http.MyRet;
  6. import java.util.List;
  7. public class UserService {
  8. public String hello() {
  9. return "Hello User";
  10. }
  11. public MyRet saveUser(User user) {
  12. if (isUserExists(user.getStr("mobile_number"))) {
  13. return MyRet.fail("手机号已被注册。");
  14. }
  15. // 最终保存逻辑
  16. if (!user.save()) {
  17. return MyRet.fail("注册失败,请联系客服。");
  18. }
  19. return MyRet.ok("注册成功。");
  20. }
  21. public MyRet login(String mobileNumber, String pwdMd5Md5) {
  22. String findSQL = "select id, nickname, mobile_number, role, referrer_id, integral, create_time, update_time, is_deleted from t_user where "
  23. + "mobile_number = ? and pwd_md5_md5=?";
  24. User u = User.dao.findFirst(findSQL, mobileNumber, pwdMd5Md5);
  25. if (u == null) {
  26. return MyRet.fail("登录失败,密码错误。");
  27. } else {
  28. return MyRet.ok("登录成功。").setData(u);
  29. }
  30. }
  31. public MyRet verifyCodeLogin(String mobileNumber) {
  32. User u = findUserByMobileNumber(mobileNumber);
  33. if (u == null) {
  34. return MyRet.fail("验证码登录失败,违规操作将封禁ip。");
  35. } else {
  36. return MyRet.ok("登录成功。").setData(u);
  37. }
  38. }
  39. public void updateUserLoginTime(String mobileNumber) {
  40. String sql = "update t_user set login_time = ? where mobile_number = ?";
  41. Db.update(sql, System.currentTimeMillis(), mobileNumber);
  42. }
  43. public void updateToken(String mobileNumber, String token) {
  44. String sql = "update t_user set token = ? where mobile_number = ?";
  45. Db.update(sql, token, mobileNumber);
  46. }
  47. public String findMobileNumberByToken(String token) {
  48. String sql = "select mobile_number from t_user where token = ?";
  49. return Db.queryStr(sql, token);
  50. }
  51. public String findWorkidByToken(String token) {
  52. String sql = "select workid from t_user where token = ?";
  53. return Db.queryStr(sql, token);
  54. }
  55. public User findUserById(String id) {
  56. String sql = "select * from t_user where id = ?";
  57. return User.dao.findFirst(sql, id);
  58. }
  59. public User findUserByMobileNumber(String MobileNumber) {
  60. String columns = "id, nickname, mobile_number, role, referrer_id, integral, login_time, hyg_worker_id, create_time, update_time, is_deleted";
  61. String sql = "select " + columns + " from t_user where mobile_number = ?";
  62. return User.dao.findFirst(sql, MobileNumber);
  63. }
  64. public boolean isUserExists(String mobileNumber) {
  65. return Db.queryLong("SELECT COUNT(1) FROM t_user WHERE mobile_number = ?", mobileNumber) > 0;
  66. }
  67. public Integer count(String keywords) {
  68. String searchKeyWord = "%" + keywords + "%";
  69. String sql = "SELECT COUNT(1) FROM t_user";
  70. String whereClause = " where id like ? or nickname like ? or mobile_number like ?";
  71. if (StrKit.isBlank(keywords)) {
  72. return Db.queryInt(sql);
  73. } else {
  74. return Db.queryInt(sql + whereClause, searchKeyWord, searchKeyWord, searchKeyWord);
  75. }
  76. }
  77. public List<User> users(int pageNumber, int pageSize, String keywords) {
  78. // limit 的第一个参数是偏移量,第二个参数是查询数量
  79. // 正确的 limit 是 LIMIT offset, count
  80. // offset = (pageNumber - 1) * pageSize
  81. // count = pageSize
  82. int offset = (pageNumber - 1) * pageSize;
  83. String searchKeyWord = "%" + keywords + "%";
  84. String columns = "id, nickname, mobile_number, role, referrer_id, integral, login_time, create_time, update_time, is_deleted";
  85. // SQL 语句构建修正
  86. // 基础 SQL 部分:SELECT ... FROM ... ORDER BY ... LIMIT
  87. String baseSql = "select " + columns + " from t_user order by login_time desc limit ?, ?";
  88. // 包含搜索条件的 WHERE 子句
  89. String whereClause = " where id like ? or nickname like ? or mobile_number like ?"; // 注意 id 的模糊查询
  90. // 如果没有关键词,只使用基础 SQL
  91. if (StrKit.isBlank(keywords)) {
  92. return User.dao.find(baseSql, offset, pageSize);
  93. } else {
  94. // 如果有关键词,将 WHERE 子句插入到 ORDER BY 前面
  95. // 完整的 SQL 结构应该是:SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT
  96. String fullSql = "select " + columns + " from t_user " + whereClause + " order by login_time desc limit ?, ?";
  97. // 参数顺序:先是 WHERE 子句的参数,然后是 LIMIT 的参数
  98. return User.dao.find(fullSql, searchKeyWord, searchKeyWord, searchKeyWord, offset, pageSize);
  99. }
  100. }
  101. }