Browse Source

1、修改系统租户用户初始化;2、修改添加部门代码;

tags/v1.0.0^2
wanjing 1 year ago
parent
commit
f00d8f5b21
9 changed files with 154 additions and 72 deletions
  1. +6
    -5
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/controller/UserController.java
  2. +3
    -0
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/mapper/UserMapper.java
  3. +36
    -0
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/request/user/UserInitRequest.java
  4. +20
    -14
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/dept/add/AddDeptService.java
  5. +2
    -1
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/IUserService.java
  6. +3
    -2
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/UserServiceImpl.java
  7. +5
    -14
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/add/AddUserService.java
  8. +62
    -36
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/init/SystemUserInitService.java
  9. +17
    -0
      tuoheng-service/tuoheng-admin/src/main/resources/mapper/UserMapper.xml

+ 6
- 5
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/controller/UserController.java View File



import com.tuoheng.admin.entity.User; import com.tuoheng.admin.entity.User;
import com.tuoheng.admin.request.user.QueryUserPageListRequest; import com.tuoheng.admin.request.user.QueryUserPageListRequest;
import com.tuoheng.admin.request.user.UserInitRequest;
import com.tuoheng.admin.request.user.UserResetPwdRequest; import com.tuoheng.admin.request.user.UserResetPwdRequest;
import com.tuoheng.admin.service.user.IUserService; import com.tuoheng.admin.service.user.IUserService;
import com.tuoheng.common.core.utils.JsonResult; import com.tuoheng.common.core.utils.JsonResult;
} }


/** /**
* 初始化系统超级管理员用户
* 初始化系统用户
* *
* @param username
* @param request
* @return * @return
*/ */
@PostMapping("/init/{username}/{password}")
public JsonResult init(@PathVariable("username") String username, @PathVariable("password") String password) {
return userService.init(username, password);
@PostMapping("/init")
public JsonResult init(@RequestBody UserInitRequest request) {
return userService.init(request);
} }


} }

+ 3
- 0
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/mapper/UserMapper.java View File

import com.tuoheng.admin.request.user.QueryUserPageListRequest; import com.tuoheng.admin.request.user.QueryUserPageListRequest;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;


import java.util.List;
import java.util.Map; import java.util.Map;


/** /**


Integer updateByIdList(Map<String, Object> map); Integer updateByIdList(Map<String, Object> map);


Integer updateDeptIdByIdList(Map<String, Object> map);

/** /**
* 查询任务问题分页列表 * 查询任务问题分页列表
* *

+ 36
- 0
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/request/user/UserInitRequest.java View File

package com.tuoheng.admin.request.user;

import lombok.Data;

/**
* 重置密码
*/
@Data
public class UserInitRequest {

/**
* 名称
*/
private String name;

/**
* 密码
*/
private String password;

/**
* 租户编号
*/
private String tenantCode;

/**
* 是否租户:0(否);1(是)
*/
private Integer tenantFlag;

/**
* 机场平台url
*/
private String airportUrl;

}

+ 20
- 14
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/dept/add/AddDeptService.java View File

package com.tuoheng.admin.service.dept.add; package com.tuoheng.admin.service.dept.add;


import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.tuoheng.admin.constant.SystemConstant;
import com.tuoheng.admin.dto.RoadSectionDto;
import com.tuoheng.admin.entity.*; import com.tuoheng.admin.entity.*;
import com.tuoheng.admin.enums.code.dept.AddDeptCodeEnum; import com.tuoheng.admin.enums.code.dept.AddDeptCodeEnum;
import com.tuoheng.admin.mapper.DeptMapper; import com.tuoheng.admin.mapper.DeptMapper;
import com.tuoheng.admin.mapper.SectionDeptMapper; import com.tuoheng.admin.mapper.SectionDeptMapper;
import com.tuoheng.admin.mapper.UserMapper; import com.tuoheng.admin.mapper.UserMapper;
import com.tuoheng.admin.request.dept.AddDeptRequest; import com.tuoheng.admin.request.dept.AddDeptRequest;
import com.tuoheng.admin.dto.RoadSectionDto;
import com.tuoheng.admin.utils.CurrentUserUtil; import com.tuoheng.admin.utils.CurrentUserUtil;
import com.tuoheng.common.core.utils.DateUtils; import com.tuoheng.common.core.utils.DateUtils;
import com.tuoheng.common.core.utils.JsonResult; import com.tuoheng.common.core.utils.JsonResult;
*/ */
public JsonResult add(AddDeptRequest addDeptRequest) { public JsonResult add(AddDeptRequest addDeptRequest) {
log.info("进入添加部门业务接口"); log.info("进入添加部门业务接口");
String userId = CurrentUserUtil.getUserId();
String tenantId = CurrentUserUtil.getTenantId(); String tenantId = CurrentUserUtil.getTenantId();
JsonResult result = this.check(tenantId, addDeptRequest); JsonResult result = this.check(tenantId, addDeptRequest);
if (0 != result.getCode()) { if (0 != result.getCode()) {
return JsonResult.error(AddDeptCodeEnum.ADD_DEPT_IS_FAILED.getCode(), AddDeptCodeEnum.ADD_DEPT_IS_FAILED.getMsg()); return JsonResult.error(AddDeptCodeEnum.ADD_DEPT_IS_FAILED.getCode(), AddDeptCodeEnum.ADD_DEPT_IS_FAILED.getMsg());
} }


this.updateSuperAdminUser(dept);
this.updateSuperAdminUser(userId, dept);


// 新增公路/路段与部门数据 // 新增公路/路段与部门数据
addRoadAndSectionToDept(tenantId, dept.getId(), addDeptRequest.getRoadSectionDtoList()); addRoadAndSectionToDept(tenantId, dept.getId(), addDeptRequest.getRoadSectionDtoList());


/** /**
* 检查参数 * 检查参数
*
* @param tenantId * @param tenantId
* @param addDeptRequest * @param addDeptRequest
* @return * @return
/** /**
* 新增公路/路段与部门数据 * 新增公路/路段与部门数据
* *
* @param tenantId 租户Id
* @param deptId 部门Id
* @param tenantId 租户Id
* @param deptId 部门Id
* @param roadSectionDtoList 公路/路段集合 * @param roadSectionDtoList 公路/路段集合
* @return 结果 * @return 结果
*/ */
map.put("deptId", deptId); map.put("deptId", deptId);
map.put("sectionIdList", sectionIdList); map.put("sectionIdList", sectionIdList);
sectionDeptMapper.deleteBatchByMap(map); sectionDeptMapper.deleteBatchByMap(map);

List<SectionDept> list = new ArrayList<>(); List<SectionDept> list = new ArrayList<>();
SectionDept sectionDept; SectionDept sectionDept;
for (Section section : sectionList) { for (Section section : sectionList) {
sectionDept.setSectionId(section.getId()); sectionDept.setSectionId(section.getId());
list.add(sectionDept); list.add(sectionDept);
} }

if (!CollectionUtils.isEmpty(list)) { if (!CollectionUtils.isEmpty(list)) {
sectionDeptMapper.insertBatch(list); sectionDeptMapper.insertBatch(list);
} }
} }


/** /**
* 如果创建的是顶级部门,将该部门与超级管理员关联
* 如果创建的是顶级部门,将该部门与超级管理员关联
*/ */
private void updateSuperAdminUser(Dept dept) {
if (!"0".equals(dept.getPid())) {
private void updateSuperAdminUser(String userId, Dept dept) {
if (!SystemConstant.ROOT_DEPT_PID.equals(dept.getPid())) {
return; return;
} }
User user = userMapper.selectOne(new LambdaQueryWrapper<User>()
List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>()
.eq(User::getRoleId, 1) .eq(User::getRoleId, 1)
.eq(User::getMark, 1)); .eq(User::getMark, 1));
if (ObjectUtil.isNull(user)) {
if (CollectionUtils.isEmpty(userList)) {
log.info("用户为空");
return; return;
} }
user.setDeptId(dept.getId());
userMapper.updateById(user);
List<String> userIdList = userList.stream().map(o -> o.getId()).collect(Collectors.toList());
Map<String, Object> map = new HashMap<>();
map.put("deptId", dept.getId());
map.put("idList", userIdList);
map.put("updateUser", userId);
map.put("updateTime", DateUtils.now());
userMapper.updateDeptIdByIdList(map);
} }


} }

+ 2
- 1
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/IUserService.java View File

import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.tuoheng.admin.entity.User; import com.tuoheng.admin.entity.User;
import com.tuoheng.admin.request.user.QueryUserPageListRequest; import com.tuoheng.admin.request.user.QueryUserPageListRequest;
import com.tuoheng.admin.request.user.UserInitRequest;
import com.tuoheng.admin.request.user.UserResetPwdRequest; import com.tuoheng.admin.request.user.UserResetPwdRequest;
import com.tuoheng.common.core.utils.JsonResult; import com.tuoheng.common.core.utils.JsonResult;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
/** /**
* 初始化系统超级管理员用户 * 初始化系统超级管理员用户
*/ */
JsonResult init(String username, String password);
JsonResult init(UserInitRequest request);


} }

+ 3
- 2
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/UserServiceImpl.java View File



import com.tuoheng.admin.entity.User; import com.tuoheng.admin.entity.User;
import com.tuoheng.admin.request.user.QueryUserPageListRequest; import com.tuoheng.admin.request.user.QueryUserPageListRequest;
import com.tuoheng.admin.request.user.UserInitRequest;
import com.tuoheng.admin.request.user.UserResetPwdRequest; import com.tuoheng.admin.request.user.UserResetPwdRequest;
import com.tuoheng.admin.service.user.add.AddUserService; import com.tuoheng.admin.service.user.add.AddUserService;
import com.tuoheng.admin.service.user.delete.DeleteUserService; import com.tuoheng.admin.service.user.delete.DeleteUserService;
* 初始化系统超级管理员用户 * 初始化系统超级管理员用户
*/ */
@Override @Override
public JsonResult init(String username, String password) {
return systemUserInitService.init(username, password);
public JsonResult init(UserInitRequest request) {
return systemUserInitService.init(request);
} }


} }

+ 5
- 14
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/add/AddUserService.java View File

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.tuoheng.admin.constant.SystemConstant; import com.tuoheng.admin.constant.SystemConstant;
import com.tuoheng.admin.entity.Role; import com.tuoheng.admin.entity.Role;
import com.tuoheng.admin.entity.Tenant;
import com.tuoheng.admin.entity.User; import com.tuoheng.admin.entity.User;
import com.tuoheng.admin.enums.code.user.AddUserCodeEnum; import com.tuoheng.admin.enums.code.user.AddUserCodeEnum;
import com.tuoheng.admin.mapper.RoleMapper; import com.tuoheng.admin.mapper.RoleMapper;
log.info("添加用户业务接口:校验失败:{}", result.getMsg()); log.info("添加用户业务接口:校验失败:{}", result.getMsg());
return result; return result;
} }

Tenant tenant = tenantMapper.selectById(tenantId);

// 添加oidc // 添加oidc
result = oidcService.addUser(user, SystemConstant.INIT_PASSWORD, tenant);
result = oidcService.addUser(user, SystemConstant.INIT_PASSWORD, null);
if (0 != result.getCode()) { if (0 != result.getCode()) {
log.info("添加用户业务接口:添加oidc数据失败:{}", result.getMsg()); log.info("添加用户业务接口:添加oidc数据失败:{}", result.getMsg());
return result; return result;
} }

this.buildUser(user, tenantId); this.buildUser(user, tenantId);

Integer rowCount = userMapper.insert(user); Integer rowCount = userMapper.insert(user);
if (rowCount <= 0) { if (rowCount <= 0) {
return JsonResult.error(AddUserCodeEnum.ADD_IS_FAILED.getCode(), AddUserCodeEnum.ADD_IS_FAILED.getMsg()); return JsonResult.error(AddUserCodeEnum.ADD_IS_FAILED.getCode(), AddUserCodeEnum.ADD_IS_FAILED.getMsg());


/** /**
* 检查参数 * 检查参数
*
* @param tenantId * @param tenantId
* @param user * @param user
* @return * @return
return JsonResult.error(AddUserCodeEnum.PHONE_NOT_IMATCH.getCode(), AddUserCodeEnum.PHONE_NOT_IMATCH.getMsg()); return JsonResult.error(AddUserCodeEnum.PHONE_NOT_IMATCH.getCode(), AddUserCodeEnum.PHONE_NOT_IMATCH.getMsg());
} }
Integer count = userMapper.selectCount(new LambdaQueryWrapper<User>() Integer count = userMapper.selectCount(new LambdaQueryWrapper<User>()
.eq(User::getTenantId, tenantId)
.eq(User::getUsername, user.getUsername())
.eq(User::getMark, 1));
.eq(User::getTenantId, tenantId)
.eq(User::getUsername, user.getUsername())
.eq(User::getMark, 1));
if (count > 0) { if (count > 0) {
return JsonResult.error(AddUserCodeEnum.USERNAME_ALREADY_EXISTS.getCode(), AddUserCodeEnum.USERNAME_ALREADY_EXISTS.getMsg()); return JsonResult.error(AddUserCodeEnum.USERNAME_ALREADY_EXISTS.getCode(), AddUserCodeEnum.USERNAME_ALREADY_EXISTS.getMsg());
} }
} }


/** /**
*
* 构建实体字段数据 * 构建实体字段数据
* *
* @param user * @param user
// 默认密码 // 默认密码
user.setPassword(CommonUtils.password(SystemConstant.INIT_PASSWORD)); user.setPassword(CommonUtils.password(SystemConstant.INIT_PASSWORD));
} }

if (StringUtils.isNotNull(user.getAvatar()) && user.getAvatar().contains(CommonConfig.imageURL)) { if (StringUtils.isNotNull(user.getAvatar()) && user.getAvatar().contains(CommonConfig.imageURL)) {
user.setAvatar(user.getAvatar().replaceAll(CommonConfig.imageURL, "")); user.setAvatar(user.getAvatar().replaceAll(CommonConfig.imageURL, ""));
} else { } else {
//添加默认头像 //添加默认头像
user.setAvatar("imagedir/n1o1j9ndau_1670488066287.png"); user.setAvatar("imagedir/n1o1j9ndau_1670488066287.png");
} }

//id
user.setCityName(""); user.setCityName("");
user.setTenantId(tenantId); user.setTenantId(tenantId);
user.setCreateUser(CurrentUserUtil.getUserId()); user.setCreateUser(CurrentUserUtil.getUserId());

+ 62
- 36
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/init/SystemUserInitService.java View File



import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.tuoheng.admin.entity.Role; import com.tuoheng.admin.entity.Role;
import com.tuoheng.admin.entity.Tenant; import com.tuoheng.admin.entity.Tenant;
import com.tuoheng.admin.entity.User; import com.tuoheng.admin.entity.User;
import com.tuoheng.admin.mapper.RoleMapper; import com.tuoheng.admin.mapper.RoleMapper;
import com.tuoheng.admin.mapper.TenantMapper; import com.tuoheng.admin.mapper.TenantMapper;
import com.tuoheng.admin.mapper.UserMapper; import com.tuoheng.admin.mapper.UserMapper;
import com.tuoheng.admin.request.user.UserInitRequest;
import com.tuoheng.admin.service.third.oidc.OidcService; import com.tuoheng.admin.service.third.oidc.OidcService;
import com.tuoheng.common.core.utils.CommonUtils; import com.tuoheng.common.core.utils.CommonUtils;
import com.tuoheng.common.core.utils.DateUtils; import com.tuoheng.common.core.utils.DateUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;


/** /**
* 初始化系统用户业务层处理
* 初始化系统租户用户业务层处理
* *
* @author wanjing * @author wanjing
* @team tuoheng * @team tuoheng
private OidcService oidcService; private OidcService oidcService;


/** /**
* 添加用户数据
* 添加租户用户数据
* *
* @return * @return
*/ */
public JsonResult init(String username, String password) {
log.info("进入初始化系统用户业务接口");
Tenant tenant = tenantMapper.selectOne(new LambdaQueryWrapper<Tenant>()
.eq(Tenant::getMark, 1));
String tenantId = "";
if (ObjectUtil.isNotNull(tenant)) {
tenantId = tenant.getId();
}
User user = this.buildUser(username, password, tenantId);
JsonResult result = this.check(username, password, tenantId);
public JsonResult init(UserInitRequest request) {
log.info("进入初始化系统租户用户业务接口");
JsonResult result = this.check(request, null);
if (0 != result.getCode()) { if (0 != result.getCode()) {
log.info("初始化系统用户业务接口:校验失败:{}", result.getMsg());
log.info("初始化系统租户用户业务接口:校验失败:{}", result.getMsg());
return result; return result;
} }
Tenant tenant = null;
if (1 == request.getTenantFlag()) {
tenant = this.addTenant(request);
}
User user = this.buildUser(request);
// 添加oidc // 添加oidc
result = oidcService.addUser(user, password, tenant);
result = oidcService.addUser(user, request.getPassword(), tenant);
if (0 != result.getCode()) { if (0 != result.getCode()) {
log.info("初始化系统用户业务接口:添加oidc数据失败:{}", result.getMsg());
log.info("初始化系统租户用户业务接口:添加oidc数据失败:{}", result.getMsg());
return result; return result;
} }
// 此次不能放在上面,要等oicd添加完之后,防止tenant不为空的话,创建都是租户
if (0 == request.getTenantFlag()) {
tenant = tenantMapper.selectOne(Wrappers.<Tenant>lambdaQuery()
.eq(Tenant::getMark, 1)
.eq(Tenant::getCode, request.getTenantCode()));
if (ObjectUtil.isNotNull(tenant)) {
user.setTenantId(tenant.getId());
} else {
log.info("租户不存在,tenantCode:{}", request.getTenantCode());
}
}
Integer rowCount = userMapper.insert(user); Integer rowCount = userMapper.insert(user);
if (rowCount <= 0) { if (rowCount <= 0) {
return JsonResult.error(400, "初始化系统用户失败");
return JsonResult.error(400, "初始化系统租户用户失败");
} }
return JsonResult.success(); return JsonResult.success();
} }


/** /**
* 构建实体字段数据
* 添加租户
*/ */
private User buildUser(String username, String password, String tenantId) {
if (StringUtils.isEmpty(username)) {
username = "THJS";
private Tenant addTenant(UserInitRequest request) {
// 如果是租户先去创建
Tenant tenant = new Tenant();
tenant.setName(request.getName());
tenant.setUsername(request.getName());
tenant.setCode(request.getTenantCode());
tenant.setAirportUrl(request.getAirportUrl());

Tenant tenantTmp = tenantMapper.selectOne(Wrappers.<Tenant>lambdaQuery()
.eq(Tenant::getMark, 1)
.eq(Tenant::getStatus, 1)
.eq(Tenant::getName, request.getName())
.eq(Tenant::getCode, request.getTenantCode()));
if (ObjectUtil.isNull(tenantTmp)) {
tenantMapper.insert(tenant);
} }
return tenant;
}

/**
* 构建实体字段数据
*/
private User buildUser(UserInitRequest request) {
User user = new User(); User user = new User();
user.setCode("gs"); user.setCode("gs");
user.setUsername(username);
user.setUsername(request.getName());
user.setRealname("超级管理员"); user.setRealname("超级管理员");
user.setNickname("超级管理员"); user.setNickname("超级管理员");
user.setCityName(""); user.setCityName("");
user.setPassword(CommonUtils.password(password));
user.setPassword(CommonUtils.password(request.getPassword()));
user.setAvatar("imagedir/n1o1j9ndau_1670488066287.png"); user.setAvatar("imagedir/n1o1j9ndau_1670488066287.png");
user.setClientId("1,2"); user.setClientId("1,2");
user.setRoleId(1); user.setRoleId(1);
user.setDeptId(""); user.setDeptId("");
user.setStatus(1); user.setStatus(1);
user.setTenantId(tenantId);
user.setCreateTime(DateUtils.now()); user.setCreateTime(DateUtils.now());
return user; return user;
} }
/** /**
* 检查参数 * 检查参数
* *
* @param username
* @param password
* @param request
* @param
*
* @return * @return
*/ */
private JsonResult check(String username, String password, String tenantId) {
if (StringUtils.isEmpty(username)) {
private JsonResult check(UserInitRequest request, String tenantId) {
if (StringUtils.isEmpty(request.getName())) {
return JsonResult.error(400, "用户名为空"); return JsonResult.error(400, "用户名为空");
} }
if (StringUtils.isEmpty(password)) {
if (StringUtils.isEmpty(request.getPassword())) {
return JsonResult.error(400, "密码为空"); return JsonResult.error(400, "密码为空");
} }
Integer count = userMapper.selectCount(new LambdaQueryWrapper<User>()
.eq(User::getTenantId, tenantId)
.eq(User::getRoleId, 1)
.eq(User::getMark, 1));
if (count > 0) {
return JsonResult.error(400, "系统中已经存在超级管理员");
if (StringUtils.isEmpty(request.getTenantCode())) {
return JsonResult.error(400, "租户编号");
} }
count = userMapper.selectCount(new LambdaQueryWrapper<User>()
Integer count = userMapper.selectCount(new LambdaQueryWrapper<User>()
.eq(User::getTenantId, tenantId) .eq(User::getTenantId, tenantId)
.eq(User::getUsername, username)
.eq(User::getUsername, request.getName())
.eq(User::getMark, 1)); .eq(User::getMark, 1));
if (count > 0) { if (count > 0) {
return JsonResult.error(400, "系统中已经存在该用户名"); return JsonResult.error(400, "系统中已经存在该用户名");

+ 17
- 0
tuoheng-service/tuoheng-admin/src/main/resources/mapper/UserMapper.xml View File

</where> </where>
</update> </update>


<update id="updateDeptIdByIdList" parameterType="hashmap">
update th_oauth_user
<trim prefix="SET" suffixOverrides=",">
<if test="deptId != null"> dept_d = #{deptId}, </if>
<if test="updateUser != null and updateUser != ''"> update_user = #{updateUser}, </if>
<if test="updateTime != null"> update_time = #{updateTime}, </if>
</trim>
<where>
<if test="idList != null and idList.size() > 0">
and id in
<foreach collection="idList" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</if>
</where>
</update>

<select id="selectPageList" parameterType="com.tuoheng.admin.request.user.QueryUserPageListRequest" resultMap="UserResult"> <select id="selectPageList" parameterType="com.tuoheng.admin.request.user.QueryUserPageListRequest" resultMap="UserResult">
select <include refid="selectUserVo"/> select <include refid="selectUserVo"/>
from th_oauth_user from th_oauth_user

Loading…
Cancel
Save