Browse Source

登录功能完成;获取用户信息功能完成

Huanyi 1 week ago
parent
commit
c55275e735
21 changed files with 263 additions and 36 deletions
  1. 16 0
      ruoyi-admin/src/main/java/com/yingpaipay/web/constant/UserAppletStatusConst.java
  2. 6 8
      ruoyi-admin/src/main/java/com/yingpaipay/web/controller/AppletAuthController.java
  3. 30 0
      ruoyi-admin/src/main/java/com/yingpaipay/web/controller/AppletUserController.java
  4. 1 3
      ruoyi-admin/src/main/java/com/yingpaipay/web/domain/bo/AppletLoginBo.java
  5. 19 0
      ruoyi-admin/src/main/java/com/yingpaipay/web/domain/vo/AppletUserInfoVo.java
  6. 14 0
      ruoyi-admin/src/main/java/com/yingpaipay/web/service/IAppletUserService.java
  7. 29 0
      ruoyi-admin/src/main/java/com/yingpaipay/web/service/factory/AppletAuthStrategyFactory.java
  8. 39 0
      ruoyi-admin/src/main/java/com/yingpaipay/web/service/impl/AppletUserServiceImpl.java
  9. 21 21
      ruoyi-admin/src/main/java/com/yingpaipay/web/service/strategy/PasswordAppletAuthService.java
  10. 4 2
      ruoyi-admin/src/main/resources/i18n/messages_en_US.properties
  11. 4 2
      ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties
  12. 10 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java
  13. 1 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java
  14. 1 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java
  15. 2 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java
  16. 8 0
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
  17. 16 0
      ruoyi-modules/yingpaipay-setting/src/main/java/com/yingpaipay/setting/controller/AppletSettingController.java
  18. 19 0
      ruoyi-modules/yingpaipay-setting/src/main/java/com/yingpaipay/setting/domain/vo/AppletSettingPrivacyVo.java
  19. 19 0
      ruoyi-modules/yingpaipay-setting/src/main/java/com/yingpaipay/setting/domain/vo/AppletSettingUserVo.java
  20. 2 0
      ruoyi-modules/yingpaipay-setting/src/main/java/com/yingpaipay/setting/service/IAppletSettingService.java
  21. 2 0
      ruoyi-modules/yingpaipay-setting/src/main/java/com/yingpaipay/setting/service/impl/AppletSettingServiceImpl.java

+ 16 - 0
ruoyi-admin/src/main/java/com/yingpaipay/web/constant/UserAppletStatusConst.java

@@ -0,0 +1,16 @@
+package com.yingpaipay.web.constant;
+
+/**
+ * @Author: Huanyi
+ * @CreateTime: 2025-12-04
+ * @Description:
+ * @Version: 1.0
+ */
+
+public interface UserAppletStatusConst {
+
+    String NORMAL = "0";
+
+    String BANNED = "1";
+
+}

+ 6 - 8
ruoyi-admin/src/main/java/com/yingpaipay/web/controller/AppletAuthController.java

@@ -4,13 +4,11 @@ import cn.dev33.satoken.annotation.SaIgnore;
 import com.yingpaipay.web.domain.bo.AppletLoginBo;
 import com.yingpaipay.web.domain.vo.AppletLoginVo;
 import com.yingpaipay.web.service.IAppletAuthService;
+import com.yingpaipay.web.service.factory.AppletAuthStrategyFactory;
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.domain.R;
 import org.dromara.web.domain.vo.LoginVo;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @Author: Huanyi
@@ -25,11 +23,11 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/applet/auth")
 public class AppletAuthController {
 
-    private final IAppletAuthService appletAuthService;
+    private final AppletAuthStrategyFactory factory;
 
-    @PostMapping("/login")
-    public R<AppletLoginVo> login(@RequestBody AppletLoginBo bo) {
-        return R.ok(appletAuthService.login(bo));
+    @PostMapping("/login/{strategy}")
+    public R<AppletLoginVo> login(@PathVariable("strategy") String strategy, @RequestBody AppletLoginBo bo) {
+        return R.ok(factory.getInstance(strategy).login(bo));
     }
 
 }

+ 30 - 0
ruoyi-admin/src/main/java/com/yingpaipay/web/controller/AppletUserController.java

@@ -0,0 +1,30 @@
+package com.yingpaipay.web.controller;
+
+import com.yingpaipay.web.domain.vo.AppletUserInfoVo;
+import com.yingpaipay.web.service.IAppletUserService;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.domain.R;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Author: Huanyi
+ * @CreateTime: 2025-12-04
+ * @Description:
+ * @Version: 1.0
+ */
+
+@RestController
+@RequestMapping("/applet/user")
+@RequiredArgsConstructor
+public class AppletUserController {
+
+    private final IAppletUserService userService;
+
+    @GetMapping("/getInfo")
+    public R<AppletUserInfoVo> getInfo() {
+        return R.ok(userService.getInfo());
+    }
+
+}

+ 1 - 3
ruoyi-admin/src/main/java/com/yingpaipay/web/domain/bo/AppletLoginBo.java

@@ -14,8 +14,6 @@ public class AppletLoginBo {
 
     private String clientId;
 
-    private String phoneNumber;
-
-    private String password;
+    private String content;
 
 }

+ 19 - 0
ruoyi-admin/src/main/java/com/yingpaipay/web/domain/vo/AppletUserInfoVo.java

@@ -0,0 +1,19 @@
+package com.yingpaipay.web.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: Huanyi
+ * @CreateTime: 2025-12-04
+ * @Description:
+ * @Version: 1.0
+ */
+
+@Data
+public class AppletUserInfoVo {
+
+    private String nickname;
+
+    private String avatar;
+
+}

+ 14 - 0
ruoyi-admin/src/main/java/com/yingpaipay/web/service/IAppletUserService.java

@@ -0,0 +1,14 @@
+package com.yingpaipay.web.service;
+
+import com.yingpaipay.web.domain.vo.AppletUserInfoVo;
+
+/**
+ * @Author: Huanyi
+ * @CreateTime: 2025-12-04
+ * @Description:
+ * @Version: 1.0
+ */
+
+public interface IAppletUserService {
+    AppletUserInfoVo getInfo();
+}

+ 29 - 0
ruoyi-admin/src/main/java/com/yingpaipay/web/service/factory/AppletAuthStrategyFactory.java

@@ -0,0 +1,29 @@
+package com.yingpaipay.web.service.factory;
+
+import com.yingpaipay.web.service.IAppletAuthService;
+import org.dromara.common.core.exception.BusinessException;
+import org.dromara.common.core.utils.MessageUtils;
+import org.dromara.common.core.utils.SpringUtils;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Author: Huanyi
+ * @CreateTime: 2025-12-04
+ * @Description:
+ * @Version: 1.0
+ */
+
+@Component
+public class AppletAuthStrategyFactory {
+
+    private static final String BASE_SERVICE = "AppletAuthService";
+
+    public IAppletAuthService getInstance(String strategy) {
+        String beanName = strategy + BASE_SERVICE;
+        if (!SpringUtils.containsBean(beanName)) {
+            throw new BusinessException(MessageUtils.message("applet.auth.nostrategy"));
+        }
+        return SpringUtils.getBean(beanName);
+    }
+
+}

+ 39 - 0
ruoyi-admin/src/main/java/com/yingpaipay/web/service/impl/AppletUserServiceImpl.java

@@ -0,0 +1,39 @@
+package com.yingpaipay.web.service.impl;
+
+import com.yingpaipay.web.domain.vo.AppletUserInfoVo;
+import com.yingpaipay.web.service.IAppletUserService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.system.domain.SysUser;
+import org.dromara.system.mapper.SysUserMapper;
+import org.dromara.system.service.ISysOssService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author: Huanyi
+ * @CreateTime: 2025-12-04
+ * @Description:
+ * @Version: 1.0
+ */
+
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class AppletUserServiceImpl implements IAppletUserService {
+
+    private final SysUserMapper userMapper;
+
+    private final ISysOssService ossService;
+
+    @Override
+    public AppletUserInfoVo getInfo() {
+        SysUser sysUser = userMapper.selectById(LoginHelper.getUserId());
+        AppletUserInfoVo vo = new AppletUserInfoVo();
+        vo.setNickname(sysUser.getNickName());
+        if (sysUser.getAvatar() != null) {
+            vo.setAvatar(ossService.getById(sysUser.getAvatar()).getUrl());
+        }
+        return vo;
+    }
+}

+ 21 - 21
ruoyi-admin/src/main/java/com/yingpaipay/web/service/impl/AppletAuthServiceImpl.java → ruoyi-admin/src/main/java/com/yingpaipay/web/service/strategy/PasswordAppletAuthService.java

@@ -1,9 +1,11 @@
-package com.yingpaipay.web.service.impl;
+package com.yingpaipay.web.service.strategy;
 
 import cn.dev33.satoken.stp.StpUtil;
 import cn.dev33.satoken.stp.parameter.SaLoginParameter;
+import cn.hutool.core.lang.Dict;
 import cn.hutool.crypto.digest.BCrypt;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.yingpaipay.web.constant.UserAppletStatusConst;
 import com.yingpaipay.web.domain.bo.AppletLoginBo;
 import com.yingpaipay.web.domain.vo.AppletLoginVo;
 import com.yingpaipay.web.service.IAppletAuthService;
@@ -12,12 +14,13 @@ import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.core.domain.model.LoginUser;
 import org.dromara.common.core.exception.BusinessException;
 import org.dromara.common.core.utils.MessageUtils;
+import org.dromara.common.json.utils.JsonUtils;
 import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.system.domain.SysUser;
 import org.dromara.system.domain.vo.SysClientVo;
 import org.dromara.system.domain.vo.SysUserVo;
 import org.dromara.system.mapper.SysUserMapper;
-import org.dromara.system.service.*;
+import org.dromara.system.service.ISysClientService;
 import org.dromara.web.service.SysLoginService;
 import org.springframework.stereotype.Service;
 
@@ -25,7 +28,7 @@ import java.util.List;
 
 /**
  * @Author: Huanyi
- * @CreateTime: 2025-11-26
+ * @CreateTime: 2025-12-04
  * @Description:
  * @Version: 1.0
  */
@@ -33,7 +36,7 @@ import java.util.List;
 @Service
 @RequiredArgsConstructor
 @Slf4j
-public class AppletAuthServiceImpl implements IAppletAuthService {
+public class PasswordAppletAuthService implements IAppletAuthService {
 
     private final SysUserMapper userMapper;
 
@@ -42,36 +45,33 @@ public class AppletAuthServiceImpl implements IAppletAuthService {
 
     @Override
     public AppletLoginVo login(AppletLoginBo bo) {
-
+        Dict map = JsonUtils.parseMap(bo.getContent());
         List<SysUserVo> userList = userMapper.selectVoList(
             Wrappers.lambdaQuery(SysUser.class)
-                .eq(SysUser::getPhonenumber, bo.getPhoneNumber())
-                .orderByDesc(SysUser::getUserId)
+                .eq(SysUser::getAppletStatus, UserAppletStatusConst.NORMAL)
+                .eq(SysUser::getPhonenumber, map.getStr("phoneNumber"))
         );
         if (userList.isEmpty()) {
-            throw new BusinessException(MessageUtils.message("applet.auth.notexists"));
+            throw new BusinessException(MessageUtils.message("applet.auth.login.notexists"));
         }
         for (SysUserVo sysUser : userList) {
-            if (BCrypt.checkpw(bo.getPassword(), sysUser.getPassword())) {
-                SysClientVo client = clientService.queryByClientId(bo.getClientId());
+            if (BCrypt.checkpw(map.getStr("password"), sysUser.getPassword())) {
                 LoginUser loginUser = loginService.buildLoginUser(sysUser);
+                SysClientVo client = clientService.queryByClientId(bo.getClientId());
                 loginUser.setClientKey(client.getClientKey());
                 loginUser.setDeviceType(client.getDeviceType());
-                SaLoginParameter model = new SaLoginParameter();
-                model.setDeviceType(client.getDeviceType());
-                // 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置
-                // 例如: 后台用户30分钟过期 app用户1天过期
-                model.setTimeout(client.getTimeout());
-                model.setActiveTimeout(client.getActiveTimeout());
-                model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId());
-                // 生成token
-                LoginHelper.login(loginUser, model);
+                SaLoginParameter parameter = new SaLoginParameter();
+                parameter.setTimeout(client.getTimeout());
+                parameter.setDeviceType(client.getDeviceType());
+                parameter.setActiveTimeout(client.getActiveTimeout());
+                parameter.setExtra(LoginHelper.CLIENT_KEY, client.getClientId());
+                LoginHelper.login(loginUser, parameter);
+
                 AppletLoginVo vo = new AppletLoginVo();
                 vo.setToken(StpUtil.getTokenValue());
                 return vo;
             }
         }
-        throw new BusinessException(MessageUtils.message("applet.auth.passworderror"));
+        throw new BusinessException(MessageUtils.message("applet.auth.login.passworderror"));
     }
-
 }

+ 4 - 2
ruoyi-admin/src/main/resources/i18n/messages_en_US.properties

@@ -66,7 +66,9 @@ r.fail=Fail
 ##分页返回体
 table.data.info.success=Query success.
 table.data.info.fail=Query fail.
+
 ## 小程序
 # 登录
-applet.auth.notexists=User is not exists.
-applet.auth.passworderror=Password incorrect.
+applet.auth.login.notexists=User is not exists.
+applet.auth.login.passworderror=Password incorrect.
+applet.auth.nostrategy=The method is not supported.

+ 4 - 2
ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties

@@ -66,7 +66,9 @@ r.fail=操作失败
 ##分页返回体
 table.data.info.success=查询成功
 table.data.info.fail=查询失败
+
 ## 小程序
 # 登录
-applet.auth.notexists=用户不存在
-applet.auth.passworderror=密码错误
+applet.auth.login.notexists=用户不存在
+applet.auth.login.passworderror=密码错误
+applet.auth.nostrategy=该方式不支持

+ 10 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java

@@ -254,6 +254,16 @@ public class SysUserController extends BaseController {
         return toAjax(userService.updateUserStatus(user.getUserId(), user.getStatus()));
     }
 
+    @SaCheckPermission("system:user:edit")
+    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping("/changeAppletStatus")
+    public R<Void> changeAppletStatus(@RequestBody SysUserBo user) {
+        userService.checkUserAllowed(user.getUserId());
+        userService.checkUserDataScope(user.getUserId());
+        return toAjax(userService.updateUserAppletStatus(user.getUserId(), user.getAppletStatus()));
+    }
+
     /**
      * 根据用户编号获取授权角色
      *

+ 1 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java

@@ -81,6 +81,7 @@ public class SysUserBo extends BaseEntity {
      * 帐号状态(0正常 1停用)
      */
     private String status;
+    private Integer appletStatus;
 
     /**
      * 备注

+ 1 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java

@@ -92,6 +92,7 @@ public class SysUserVo implements Serializable {
      * 帐号状态(0正常 1停用)
      */
     private String status;
+    private Integer appletStatus;
 
     /**
      * 最后登录IP

+ 2 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java

@@ -228,4 +228,6 @@ public interface ISysUserService {
      * @return 结果
      */
     List<SysUserVo> selectUserListByDept(Long deptId);
+
+    int updateUserAppletStatus(Long userId, Integer appletStatus);
 }

+ 8 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java

@@ -579,6 +579,14 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
         return baseMapper.selectVoList(lqw);
     }
 
+    @Override
+    public int updateUserAppletStatus(Long userId, Integer appletStatus) {
+        return baseMapper.update(null,
+            new LambdaUpdateWrapper<SysUser>()
+                .set(SysUser::getAppletStatus, appletStatus)
+                .eq(SysUser::getUserId, userId));
+    }
+
     /**
      * 通过用户ID查询用户账户
      *

+ 16 - 0
ruoyi-modules/yingpaipay-setting/src/main/java/com/yingpaipay/setting/controller/AppletSettingController.java

@@ -2,6 +2,9 @@ package com.yingpaipay.setting.controller;
 
 import java.util.List;
 
+import cn.dev33.satoken.annotation.SaIgnore;
+import com.yingpaipay.setting.domain.vo.AppletSettingPrivacyVo;
+import com.yingpaipay.setting.domain.vo.AppletSettingUserVo;
 import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
@@ -102,4 +105,17 @@ public class AppletSettingController extends BaseController {
                           @PathVariable Long[] ids) {
         return toAjax(appletSettingService.deleteWithValidByIds(List.of(ids), true));
     }
+
+    @SaIgnore
+    @GetMapping("/user")
+    public R<AppletSettingUserVo> getUser() {
+        return R.ok(new AppletSettingUserVo(appletSettingService.queryById(1L).getUserAgreement()));
+    }
+
+    @SaIgnore
+    @GetMapping("/privacy")
+    public R<AppletSettingPrivacyVo> getPrivacy() {
+        return R.ok(new AppletSettingPrivacyVo(appletSettingService.queryById(1L).getPrivacyAgreement()));
+    }
+
 }

+ 19 - 0
ruoyi-modules/yingpaipay-setting/src/main/java/com/yingpaipay/setting/domain/vo/AppletSettingPrivacyVo.java

@@ -0,0 +1,19 @@
+package com.yingpaipay.setting.domain.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+/**
+ * @Author: Huanyi
+ * @CreateTime: 2025-12-04
+ * @Description:
+ * @Version: 1.0
+ */
+
+@Data
+@AllArgsConstructor
+public class AppletSettingPrivacyVo {
+
+    private String content;
+
+}

+ 19 - 0
ruoyi-modules/yingpaipay-setting/src/main/java/com/yingpaipay/setting/domain/vo/AppletSettingUserVo.java

@@ -0,0 +1,19 @@
+package com.yingpaipay.setting.domain.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+/**
+ * @Author: Huanyi
+ * @CreateTime: 2025-12-04
+ * @Description:
+ * @Version: 1.0
+ */
+
+@Data
+@AllArgsConstructor
+public class AppletSettingUserVo {
+
+    private String content;
+
+}

+ 2 - 0
ruoyi-modules/yingpaipay-setting/src/main/java/com/yingpaipay/setting/service/IAppletSettingService.java

@@ -1,5 +1,6 @@
 package com.yingpaipay.setting.service;
 
+import com.yingpaipay.setting.domain.vo.AppletSettingUserVo;
 import com.yingpaipay.setting.domain.vo.AppletSettingVo;
 import com.yingpaipay.setting.domain.bo.AppletSettingBo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -65,4 +66,5 @@ public interface IAppletSettingService {
      * @return 是否删除成功
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
 }

+ 2 - 0
ruoyi-modules/yingpaipay-setting/src/main/java/com/yingpaipay/setting/service/impl/AppletSettingServiceImpl.java

@@ -1,5 +1,6 @@
 package com.yingpaipay.setting.service.impl;
 
+import com.yingpaipay.setting.domain.vo.AppletSettingUserVo;
 import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
@@ -143,4 +144,5 @@ public class AppletSettingServiceImpl implements IAppletSettingService {
         }
         return baseMapper.deleteByIds(ids) > 0;
     }
+
 }