Ver Fonte

统一业务异常已完成,登录功能写完待测

Huanyi há 1 semana atrás
pai
commit
93fd8f0c67

+ 16 - 0
ruoyi-admin/src/main/java/com/yingpaipay/web/controller/AppletAuthController.java

@@ -1,6 +1,14 @@
 package com.yingpaipay.web.controller;
 
+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 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;
 
@@ -11,9 +19,17 @@ import org.springframework.web.bind.annotation.RestController;
  * @Version: 1.0
  */
 
+@SaIgnore
 @RestController
 @RequiredArgsConstructor
 @RequestMapping("/applet/auth")
 public class AppletAuthController {
 
+    private final IAppletAuthService appletAuthService;
+
+    @PostMapping("/login")
+    public R<AppletLoginVo> login(@RequestBody AppletLoginBo bo) {
+        return R.ok(appletAuthService.login(bo));
+    }
+
 }

+ 21 - 0
ruoyi-admin/src/main/java/com/yingpaipay/web/domain/bo/AppletLoginBo.java

@@ -0,0 +1,21 @@
+package com.yingpaipay.web.domain.bo;
+
+import lombok.Data;
+
+/**
+ * @Author: Huanyi
+ * @CreateTime: 2025-12-03
+ * @Description:
+ * @Version: 1.0
+ */
+
+@Data
+public class AppletLoginBo {
+
+    private String clientId;
+
+    private String phoneNumber;
+
+    private String password;
+
+}

+ 17 - 0
ruoyi-admin/src/main/java/com/yingpaipay/web/domain/vo/AppletLoginVo.java

@@ -0,0 +1,17 @@
+package com.yingpaipay.web.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: Huanyi
+ * @CreateTime: 2025-12-03
+ * @Description:
+ * @Version: 1.0
+ */
+
+@Data
+public class AppletLoginVo {
+
+    private String token;
+
+}

+ 4 - 0
ruoyi-admin/src/main/java/com/yingpaipay/web/service/IAppletAuthService.java

@@ -1,5 +1,8 @@
 package com.yingpaipay.web.service;
 
+import com.yingpaipay.web.domain.bo.AppletLoginBo;
+import com.yingpaipay.web.domain.vo.AppletLoginVo;
+
 /**
  * @Author: Huanyi
  * @CreateTime: 2025-11-26
@@ -8,4 +11,5 @@ package com.yingpaipay.web.service;
  */
 
 public interface IAppletAuthService {
+    AppletLoginVo login(AppletLoginBo bo);
 }

+ 58 - 0
ruoyi-admin/src/main/java/com/yingpaipay/web/service/impl/AppletAuthServiceImpl.java

@@ -1,10 +1,28 @@
 package com.yingpaipay.web.service.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.stp.parameter.SaLoginParameter;
+import cn.hutool.crypto.digest.BCrypt;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.yingpaipay.web.domain.bo.AppletLoginBo;
+import com.yingpaipay.web.domain.vo.AppletLoginVo;
 import com.yingpaipay.web.service.IAppletAuthService;
 import lombok.RequiredArgsConstructor;
 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.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.web.service.SysLoginService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @Author: Huanyi
  * @CreateTime: 2025-11-26
@@ -16,4 +34,44 @@ import org.springframework.stereotype.Service;
 @RequiredArgsConstructor
 @Slf4j
 public class AppletAuthServiceImpl implements IAppletAuthService {
+
+    private final SysUserMapper userMapper;
+
+    private final SysLoginService loginService;
+    private final ISysClientService clientService;
+
+    @Override
+    public AppletLoginVo login(AppletLoginBo bo) {
+
+        List<SysUserVo> userList = userMapper.selectVoList(
+            Wrappers.lambdaQuery(SysUser.class)
+                .eq(SysUser::getPhonenumber, bo.getPhoneNumber())
+                .orderByDesc(SysUser::getUserId)
+        );
+        if (userList.isEmpty()) {
+            throw new BusinessException(MessageUtils.message("applet.auth.notexists"));
+        }
+        for (SysUserVo sysUser : userList) {
+            if (BCrypt.checkpw(bo.getPassword(), sysUser.getPassword())) {
+                SysClientVo client = clientService.queryByClientId(bo.getClientId());
+                LoginUser loginUser = loginService.buildLoginUser(sysUser);
+                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);
+                AppletLoginVo vo = new AppletLoginVo();
+                vo.setToken(StpUtil.getTokenValue());
+                return vo;
+            }
+        }
+        throw new BusinessException(MessageUtils.message("applet.auth.passworderror"));
+    }
+
 }

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

@@ -66,3 +66,7 @@ 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.

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

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

+ 24 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/exception/BusinessException.java

@@ -0,0 +1,24 @@
+package org.dromara.common.core.exception;
+
+import lombok.Data;
+
+/**
+ * @Author: Huanyi
+ * @CreateTime: 2025-12-03
+ * @Description: 统一的业务异常
+ * @Version: 1.0
+ */
+
+@Data
+public class BusinessException extends RuntimeException {
+
+    private Integer code;
+
+    private String message;
+
+    public BusinessException(String message) {
+        this.code = 501;
+        this.message = message;
+    }
+
+}

+ 7 - 0
ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java

@@ -9,6 +9,7 @@ import jakarta.validation.ConstraintViolation;
 import jakarta.validation.ConstraintViolationException;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.core.domain.R;
+import org.dromara.common.core.exception.BusinessException;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.exception.SseException;
 import org.dromara.common.core.exception.base.BaseException;
@@ -59,6 +60,12 @@ public class GlobalExceptionHandler {
         return ObjectUtil.isNotNull(code) ? R.fail(code, e.getMessage()) : R.fail(e.getMessage());
     }
 
+    @ExceptionHandler(BusinessException.class)
+    public R<Void> handleBusinessException(BusinessException e, HttpServletRequest request) {
+        log.error(e.getMessage());
+        return R.fail(e.getCode(), e.getMessage());
+    }
+
     /**
      * 认证失败
      */

+ 1 - 4
script/sql/business/create.sql

@@ -7,11 +7,8 @@ CREATE TABLE `project`
     `language`    char(1)                     NOT NULL DEFAULT '0' COMMENT '项目语言',
     `type`        char(1)                     NOT NULL DEFAULT '0' COMMENT '项目类型',
     `status`      tinyint(1)                  NOT NULL DEFAULT 0 COMMENT '状态',
-    `pd_gpd`      bigint unsigned COMMENT 'PD/GPD',
-    `pm_gpm`      bigint unsigned COMMENT 'PM/GPM',
-    `cta_gcta`    bigint unsigned COMMENT 'CTA/GCTA',
     `sponsor`     varchar(128) COMMENT '申办方',
-    `cro`         bigint unsigned COMMENT 'CRO',
+    `cro`         varchar(128) COMMENT 'CRO',
     `note`        varchar(255) COMMENT '备注',
     `create_dept` bigint(20) COMMENT '创建部门',
     `create_by`   bigint(20) COMMENT '创建者',

Diff do ficheiro suprimidas por serem muito extensas
+ 134 - 0
script/sql/business/dump/2025/12/20251202_dump.sql


Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff