mirror of
https://gitee.com/y_project/RuoYi-Cloud.git
synced 2026-01-26 11:51:55 +08:00
[feat] 新增通过微信unionId注册的功能
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
<parent>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi</artifactId>
|
||||
<version>3.6.5</version>
|
||||
<version>3.6.5.0.1</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-modules</artifactId>
|
||||
<version>3.6.5</version>
|
||||
<version>3.6.5.0.1</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-modules</artifactId>
|
||||
<version>3.6.5</version>
|
||||
<version>3.6.5.0.1</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-modules</artifactId>
|
||||
<version>3.6.5</version>
|
||||
<version>3.6.5.0.1</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-modules</artifactId>
|
||||
<version>3.6.5</version>
|
||||
<version>3.6.5.0.1</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@ import com.ruoyi.common.security.annotation.InnerAuth
|
||||
import com.ruoyi.common.security.service.TokenService
|
||||
import com.ruoyi.system.api.domain.SysUser
|
||||
import com.ruoyi.system.api.model.LoginUser
|
||||
import com.ruoyi.system.service.IKSysUserService
|
||||
import com.ruoyi.system.service.ISysConfigService
|
||||
import com.ruoyi.system.service.ISysPermissionService
|
||||
import com.ruoyi.system.service.ISysUserService
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
@@ -29,12 +31,18 @@ open class InnerSysUserController : BaseController() {
|
||||
@Autowired
|
||||
open lateinit var userService: ISysUserService
|
||||
|
||||
@Autowired
|
||||
open lateinit var kSysUserService: IKSysUserService
|
||||
|
||||
@Autowired
|
||||
open lateinit var permissionService: ISysPermissionService
|
||||
|
||||
@Autowired
|
||||
open lateinit var tokenService: TokenService
|
||||
|
||||
@Autowired
|
||||
open lateinit var configService: ISysConfigService
|
||||
|
||||
|
||||
/**
|
||||
* 获取当前用户信息
|
||||
@@ -84,6 +92,27 @@ open class InnerSysUserController : BaseController() {
|
||||
return R.ok(sysUserVo)
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据微信unionid获取用户信息
|
||||
*/
|
||||
@InnerAuth
|
||||
@GetMapping("/detail/wx/unionid/{unionid}")
|
||||
fun infoByWxUnionId(@PathVariable("unionid") unionid: String): R<LoginUser> {
|
||||
val sysUser = kSysUserService.selectUserByWxUnionId(unionid)
|
||||
if (StringUtils.isNull(sysUser)) {
|
||||
return R.fail("wx_unionid错误")
|
||||
}
|
||||
// 角色集合
|
||||
val roles: Set<String> = permissionService.getRolePermission(sysUser)
|
||||
// 权限集合
|
||||
val permissions: Set<String> = permissionService.getMenuPermission(sysUser)
|
||||
val sysUserVo = LoginUser()
|
||||
sysUserVo.sysUser = sysUser
|
||||
sysUserVo.roles = roles
|
||||
sysUserVo.permissions = permissions
|
||||
return R.ok(sysUserVo)
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改用户
|
||||
*/
|
||||
@@ -112,4 +141,22 @@ open class InnerSysUserController : BaseController() {
|
||||
tokenService.setLoginUser(loginUser)
|
||||
return success(loginUser)
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册用户信息
|
||||
*/
|
||||
@InnerAuth
|
||||
@PostMapping("/register/wx/unionid")
|
||||
fun registerUserByWxUnionId(@RequestBody params: Map<String, String?>): R<Boolean> {
|
||||
if (!("true" == configService.selectConfigByKey("sys.account.registerUser"))) {
|
||||
return R.fail("当前系统没有开启注册功能!")
|
||||
}
|
||||
val unionid = params.get("unionId")
|
||||
val deptId = params.get("deptId")?.toLong()
|
||||
if (unionid == null) return R.fail("微信unionid不存在无法注册")
|
||||
if (!kSysUserService.checkWxUnionIdUnique(unionid)) {
|
||||
return R.fail("保存用户'$unionid'失败,注册账号已存在")
|
||||
}
|
||||
return R.ok(kSysUserService.registerUserByWxUnionId(unionid, deptId))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.ruoyi.system.mapper
|
||||
|
||||
import com.ruoyi.system.api.domain.SysUser
|
||||
|
||||
/**
|
||||
* 用户表 数据层
|
||||
*
|
||||
* @author hsdllcw
|
||||
*/
|
||||
interface KSysUserMapper {
|
||||
/**
|
||||
* 通过用户名查询用户
|
||||
*
|
||||
* @param wxUnionId 微信unionid
|
||||
* @return 用户对象信息
|
||||
*/
|
||||
fun selectUserByWxUnionId(wxUnionId: String): SysUser?
|
||||
|
||||
/**
|
||||
* 校验微信unionid是否唯一
|
||||
*
|
||||
* @param wxUnionId 微信unionid
|
||||
* @return 结果
|
||||
*/
|
||||
fun checkWxUnionIdUnique(wxUnionId: String): SysUser?
|
||||
|
||||
fun insert(params: Map<String, Any>): Int
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.ruoyi.system.service
|
||||
|
||||
import com.ruoyi.system.api.domain.SysUser
|
||||
|
||||
interface IKSysUserService {
|
||||
fun getISysUserService(): ISysUserService
|
||||
|
||||
/**
|
||||
* 通过微信unionid查询用户
|
||||
*
|
||||
* @param wxUnionId 微信unionid
|
||||
* @return 用户对象信息
|
||||
*/
|
||||
fun selectUserByWxUnionId(wxUnionId: String): SysUser?
|
||||
|
||||
/**
|
||||
* 校验微信unionid是否唯一
|
||||
*
|
||||
* @param wxUnionId 微信unionid
|
||||
* @return 用户对象信息
|
||||
*/
|
||||
fun checkWxUnionIdUnique(wxUnionId: String): Boolean
|
||||
|
||||
/**
|
||||
* 注册用户信息
|
||||
*
|
||||
* @param wxUnionId 微信unionId
|
||||
* @return 结果
|
||||
*/
|
||||
fun registerUserByWxUnionId(wxUnionId: String, deptId: Long?): Boolean
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.ruoyi.system.service.impl
|
||||
|
||||
import com.ruoyi.common.core.constant.UserConstants
|
||||
import com.ruoyi.common.core.utils.uuid.IdUtils
|
||||
import com.ruoyi.common.security.utils.SecurityUtils
|
||||
import com.ruoyi.system.api.domain.SysUser
|
||||
import com.ruoyi.system.mapper.KSysUserMapper
|
||||
import com.ruoyi.system.service.IKSysUserService
|
||||
import com.ruoyi.system.service.ISysUserService
|
||||
import org.springframework.beans.factory.annotation.Autowired
|
||||
import org.springframework.stereotype.Service
|
||||
|
||||
@Service
|
||||
open class KSysUserServiceImpl : IKSysUserService {
|
||||
@Autowired
|
||||
lateinit var sysUserService: ISysUserService
|
||||
|
||||
@Autowired
|
||||
lateinit var kSysUserMapper: KSysUserMapper
|
||||
override fun getISysUserService() = sysUserService
|
||||
override fun selectUserByWxUnionId(wxUnionId: String) = kSysUserMapper.selectUserByWxUnionId(wxUnionId)
|
||||
override fun checkWxUnionIdUnique(wxUnionId: String) =
|
||||
kSysUserMapper.checkWxUnionIdUnique(wxUnionId)?.run { UserConstants.NOT_UNIQUE } ?: UserConstants.UNIQUE
|
||||
|
||||
/**
|
||||
* 注册用户信息
|
||||
*
|
||||
* @param wxUnionId 微信unionId
|
||||
* @return 结果
|
||||
*/
|
||||
override fun registerUserByWxUnionId(wxUnionId: String, deptId: Long?): Boolean {
|
||||
val user = SysUser().apply {
|
||||
userName = IdUtils.randomUUID().replace("-".toRegex(), "").substring(0, 30)
|
||||
nickName = "嘉迪微信用户"
|
||||
password = SecurityUtils.encryptPassword(IdUtils.randomUUID())
|
||||
this.deptId = deptId
|
||||
}
|
||||
return sysUserService.registerUser(user).apply {
|
||||
sysUserService.selectUserByUserName(user.userName)
|
||||
kSysUserMapper.insert(mapOf(
|
||||
"userId" to user.userId,
|
||||
"wxUnionId" to wxUnionId,
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.system.mapper.KSysUserMapper">
|
||||
|
||||
<resultMap type="SysUser" id="SysUserResult">
|
||||
<id property="userId" column="user_id" />
|
||||
<result property="deptId" column="dept_id" />
|
||||
<result property="userName" column="user_name" />
|
||||
<result property="nickName" column="nick_name" />
|
||||
<result property="email" column="email" />
|
||||
<result property="phonenumber" column="phonenumber" />
|
||||
<result property="sex" column="sex" />
|
||||
<result property="avatar" column="avatar" />
|
||||
<result property="password" column="password" />
|
||||
<result property="status" column="status" />
|
||||
<result property="delFlag" column="del_flag" />
|
||||
<result property="loginIp" column="login_ip" />
|
||||
<result property="loginDate" column="login_date" />
|
||||
<result property="createBy" column="create_by" />
|
||||
<result property="createTime" column="create_time" />
|
||||
<result property="updateBy" column="update_by" />
|
||||
<result property="updateTime" column="update_time" />
|
||||
<result property="remark" column="remark" />
|
||||
<association property="dept" javaType="SysDept" resultMap="deptResult" />
|
||||
<collection property="roles" javaType="java.util.List" resultMap="RoleResult" />
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="deptResult" type="SysDept">
|
||||
<id property="deptId" column="dept_id" />
|
||||
<result property="parentId" column="parent_id" />
|
||||
<result property="deptName" column="dept_name" />
|
||||
<result property="ancestors" column="ancestors" />
|
||||
<result property="orderNum" column="order_num" />
|
||||
<result property="leader" column="leader" />
|
||||
<result property="status" column="dept_status" />
|
||||
</resultMap>
|
||||
|
||||
<resultMap id="RoleResult" type="SysRole">
|
||||
<id property="roleId" column="role_id" />
|
||||
<result property="roleName" column="role_name" />
|
||||
<result property="roleKey" column="role_key" />
|
||||
<result property="roleSort" column="role_sort" />
|
||||
<result property="dataScope" column="data_scope" />
|
||||
<result property="status" column="role_status" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectUserVo">
|
||||
select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
|
||||
d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
|
||||
r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
|
||||
from sys_user u
|
||||
left join sys_user_account ua on ua.user_id=u.user_id
|
||||
left join sys_dept d on u.dept_id = d.dept_id
|
||||
left join sys_user_role ur on u.user_id = ur.user_id
|
||||
left join sys_role r on r.role_id = ur.role_id
|
||||
</sql>
|
||||
|
||||
<select id="selectUserByWxUnionId" parameterType="String" resultMap="SysUserResult">
|
||||
<include refid="selectUserVo"/>
|
||||
where ua.wx_unionid = #{wxUnionId} and u.del_flag = '0'
|
||||
</select>
|
||||
|
||||
<select id="checkWxUnionIdUnique" parameterType="String" resultMap="SysUserResult">
|
||||
select u.user_id, u.user_name from sys_user u left join sys_user_account ua on ua.user_id=u.user_id where ua.wx_unionid = #{wxUnionId} and u.del_flag = '0' limit 1
|
||||
</select>
|
||||
|
||||
<insert id="insert">
|
||||
insert into sys_user_account(user_id, wx_unionid) values (#{userId},#{wxUnionId})
|
||||
</insert>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user