mirror of
https://github.com/thousmile/molly-multi-tenant.git
synced 2025-12-30 04:32:26 +00:00
1.添加 反射查询 新增和修改 用户!
This commit is contained in:
@@ -64,7 +64,15 @@ Authorization: Bearer {{tokenValue}}
|
||||
|
||||
|
||||
### 获取租户列表
|
||||
GET {{baseUrl}}/sys/tenant/query
|
||||
GET {{baseUrl}}/sys/tenant/query?includeCauu=true
|
||||
Content-Type: application/json
|
||||
x-tenant-id: {{tenantId}}
|
||||
#x-tenant-id: apple
|
||||
Authorization: Bearer {{tokenValue}}
|
||||
|
||||
|
||||
### 获取租户列表[简单字段]
|
||||
GET {{baseUrl}}/sys/tenant/simple/query?includeCauu=true
|
||||
Content-Type: application/json
|
||||
x-tenant-id: {{tenantId}}
|
||||
#x-tenant-id: apple
|
||||
|
||||
@@ -16,7 +16,7 @@ User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Fi
|
||||
"username": "admin",
|
||||
"password": "123456",
|
||||
"codeKey": "5jXzuwcoUzbtnHNh",
|
||||
"codeText": "jap5"
|
||||
"codeText": "yjvm"
|
||||
}
|
||||
|
||||
> {%
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
### 分页查询设备
|
||||
GET {{baseUrl}}/cms/device/query?includeCauu=true
|
||||
Content-Type: application/json
|
||||
x-tenant-id: {{tenantId}}
|
||||
x-project-id: {{projectId}}
|
||||
Authorization: Bearer {{tokenValue}}
|
||||
|
||||
|
||||
### 查询设备
|
||||
GET {{baseUrl}}/cms/device/list
|
||||
GET {{baseUrl}}/cms/device/list?includeCauu=true
|
||||
Content-Type: application/json
|
||||
x-tenant-id: {{tenantId}}
|
||||
x-project-id: {{projectId}}
|
||||
|
||||
@@ -26,4 +26,10 @@ public class SearchPO extends PagePO implements java.io.Serializable {
|
||||
@Schema(description = "关键字搜索")
|
||||
private String keywords;
|
||||
|
||||
/**
|
||||
* 包含创建和修改用户信息
|
||||
*/
|
||||
@Schema(description = "包含创建和修改用户信息")
|
||||
private Boolean includeCauu;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.xaaef.molly.internal.api;
|
||||
|
||||
import com.xaaef.molly.internal.dto.OperateUserDTO;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 反射 填充 操作用户信息
|
||||
* </p>
|
||||
*
|
||||
* @author WangChenChen
|
||||
* @version 1.1
|
||||
* @date 2023/10/31 10:53
|
||||
*/
|
||||
|
||||
public interface ApiOperateUserService {
|
||||
|
||||
/**
|
||||
* 根据 用户ID 获取 操作用户
|
||||
*/
|
||||
void reflectionFill(Object objList);
|
||||
|
||||
|
||||
/**
|
||||
* 根据 用户ID 获取 操作用户
|
||||
*/
|
||||
Map<Long, OperateUserDTO> mapOperateUser(Set<Long> userIds);
|
||||
|
||||
}
|
||||
@@ -16,9 +16,6 @@ public interface ApiSysUserService {
|
||||
|
||||
/**
|
||||
* 根据 用户ID 获取 租户ID
|
||||
*
|
||||
* @author WangChenChen
|
||||
* @date 2023/2/14 10:53
|
||||
*/
|
||||
Set<String> listHaveTenantIds(Long userId);
|
||||
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.xaaef.molly.internal.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 操作用户
|
||||
* </p>
|
||||
*
|
||||
* @author WangChenChen
|
||||
* @version 1.1
|
||||
* @date 2023/10/31 13:39
|
||||
*/
|
||||
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Accessors(chain = true)
|
||||
public class OperateUserDTO implements java.io.Serializable {
|
||||
|
||||
/**
|
||||
* 用户唯一id
|
||||
*/
|
||||
@Schema(description = "用户唯一id")
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 头像
|
||||
*/
|
||||
@Schema(description = "头像")
|
||||
private String avatar;
|
||||
|
||||
/**
|
||||
* 昵称
|
||||
*/
|
||||
@Schema(description = "昵称")
|
||||
private String nickname;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
package com.xaaef.molly.perms.api.impl;
|
||||
|
||||
import cn.hutool.core.util.ReflectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.xaaef.molly.common.consts.MbpConst;
|
||||
import com.xaaef.molly.internal.api.ApiOperateUserService;
|
||||
import com.xaaef.molly.internal.api.ApiSysTenantService;
|
||||
import com.xaaef.molly.internal.dto.OperateUserDTO;
|
||||
import com.xaaef.molly.perms.entity.PmsUser;
|
||||
import com.xaaef.molly.perms.mapper.PmsUserMapper;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.xaaef.molly.tenant.util.DelegateUtils.delegate;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 反射 填充 操作用户信息
|
||||
* </p>
|
||||
*
|
||||
* @author WangChenChen
|
||||
* @version 1.1
|
||||
* @date 2023/10/31 10:53
|
||||
*/
|
||||
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
public class ApiOperateUserServiceImpl implements ApiOperateUserService {
|
||||
|
||||
private final ApiSysTenantService apiSysTenantService;
|
||||
|
||||
private final PmsUserMapper userMapper;
|
||||
|
||||
@Override
|
||||
public void reflectionFill(Object objList) {
|
||||
if (objList instanceof Collection<?> list) {
|
||||
var userIds = new HashSet<Long>();
|
||||
list.forEach(obj -> {
|
||||
if (ReflectUtil.getFieldValue(obj, MbpConst.ATTR_CREATE_USER) instanceof Long createUserId) {
|
||||
userIds.add(createUserId);
|
||||
}
|
||||
if (ReflectUtil.getFieldValue(obj, MbpConst.ATTR_LAST_UPDATE_USER) instanceof Long lastUpdateUserId) {
|
||||
userIds.add(lastUpdateUserId);
|
||||
}
|
||||
});
|
||||
if (!userIds.isEmpty()) {
|
||||
Map<Long, OperateUserDTO> operateUserMaps = mapOperateUser(userIds);
|
||||
if (!operateUserMaps.isEmpty()) {
|
||||
list.forEach(obj -> {
|
||||
if (ReflectUtil.getFieldValue(obj, MbpConst.ATTR_CREATE_USER) instanceof Long createUserId) {
|
||||
var operateUser = operateUserMaps.get(createUserId);
|
||||
ReflectUtil.setFieldValue(obj, MbpConst.ATTR_CREATE_USER + "Entity", operateUser);
|
||||
}
|
||||
if (ReflectUtil.getFieldValue(obj, MbpConst.ATTR_LAST_UPDATE_USER) instanceof Long lastUpdateUserId) {
|
||||
var operateUser = operateUserMaps.get(lastUpdateUserId);
|
||||
ReflectUtil.setFieldValue(obj, MbpConst.ATTR_LAST_UPDATE_USER + "Entity", operateUser);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Long, OperateUserDTO> mapOperateUser(Set<Long> userIds) {
|
||||
var operateUserMaps = new HashMap<Long, OperateUserDTO>();
|
||||
// 从 默认租户中,获取 用户信息
|
||||
var defaultTenantId = apiSysTenantService.getByDefaultTenantId();
|
||||
var defaultTenantUser = delegate(defaultTenantId, () -> listOperateUser(userIds));
|
||||
if (!defaultTenantUser.isEmpty()) {
|
||||
operateUserMaps.putAll(defaultTenantUser);
|
||||
}
|
||||
// 从 当前租户中,获取 用户信息
|
||||
var currentTenantUser = listOperateUser(userIds);
|
||||
if (!currentTenantUser.isEmpty()) {
|
||||
operateUserMaps.putAll(currentTenantUser);
|
||||
}
|
||||
return operateUserMaps;
|
||||
}
|
||||
|
||||
private Map<Long, OperateUserDTO> listOperateUser(Set<Long> userIds) {
|
||||
var wrapper = new LambdaQueryWrapper<PmsUser>()
|
||||
.select(List.of(PmsUser::getUserId, PmsUser::getAvatar, PmsUser::getNickname))
|
||||
.in(PmsUser::getUserId, userIds);
|
||||
return userMapper.selectList(wrapper)
|
||||
.stream()
|
||||
.map(p -> new OperateUserDTO(p.getUserId(), p.getAvatar(), p.getNickname()))
|
||||
.collect(Collectors.toMap(OperateUserDTO::getUserId, p -> p));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import com.xaaef.molly.common.enums.StatusEnum;
|
||||
import com.xaaef.molly.common.util.IdUtils;
|
||||
import com.xaaef.molly.internal.api.ApiPmsUserService;
|
||||
import com.xaaef.molly.internal.api.ApiSysConfigService;
|
||||
import com.xaaef.molly.internal.api.ApiSysTenantService;
|
||||
import com.xaaef.molly.internal.dto.InitUserDTO;
|
||||
import com.xaaef.molly.internal.dto.PmsUserDTO;
|
||||
import com.xaaef.molly.perms.entity.PmsDept;
|
||||
@@ -47,6 +48,8 @@ public class ApiPmsUserServiceImpl implements ApiPmsUserService {
|
||||
|
||||
private final ApiSysConfigService configService;
|
||||
|
||||
private final ApiSysTenantService tenantService;
|
||||
|
||||
private final PmsUserMapper userMapper;
|
||||
|
||||
private final PmsDeptMapper deptMapper;
|
||||
|
||||
@@ -25,10 +25,10 @@ public class ApiSysUserServiceImpl implements ApiSysUserService {
|
||||
|
||||
private final SysUserService userService;
|
||||
|
||||
|
||||
@Override
|
||||
public Set<String> listHaveTenantIds(Long userId) {
|
||||
return userService.listHaveTenantIds(userId);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.xaaef.molly.system.cron;
|
||||
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.xaaef.molly.auth.service.JwtTokenService;
|
||||
import com.xaaef.molly.common.util.IdUtils;
|
||||
import com.xaaef.molly.common.util.JsonUtils;
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.xaaef.molly.common.enums.StatusEnum;
|
||||
import com.xaaef.molly.common.po.SearchPO;
|
||||
import com.xaaef.molly.internal.api.ApiCmsProjectService;
|
||||
import com.xaaef.molly.internal.api.ApiOperateUserService;
|
||||
import com.xaaef.molly.internal.api.ApiPmsUserService;
|
||||
import com.xaaef.molly.internal.api.ApiSysConfigService;
|
||||
import com.xaaef.molly.internal.dto.InitUserDTO;
|
||||
@@ -72,6 +73,8 @@ public class SysTenantServiceImpl extends BaseServiceImpl<SysTenantMapper, SysTe
|
||||
|
||||
private final ApiCmsProjectService projectService;
|
||||
|
||||
private final ApiOperateUserService operateUserService;
|
||||
|
||||
|
||||
/**
|
||||
* uuid
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.xaaef.molly.tenant.base;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.xaaef.molly.internal.dto.OperateUserDTO;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
@@ -26,37 +28,50 @@ public class BaseEntity implements java.io.Serializable {
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*
|
||||
* @date 2019/12/11 21:12
|
||||
*/
|
||||
@Schema(description = "创建时间")
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
protected LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 创建人 id
|
||||
*
|
||||
* @date 2019/12/11 21:12
|
||||
*/
|
||||
@Schema(description = "创建人 id")
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
protected Long createUser;
|
||||
|
||||
/**
|
||||
* 创建人信息
|
||||
*/
|
||||
@Schema(description = "创建人信息")
|
||||
@TableField(exist = false)
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
protected OperateUserDTO createUserEntity;
|
||||
|
||||
/**
|
||||
* 最后一次修改时间
|
||||
*
|
||||
* @date 2019/12/11 21:12
|
||||
*/
|
||||
@Schema(description = "最后一次修改时间")
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
protected LocalDateTime lastUpdateTime;
|
||||
|
||||
/**
|
||||
* 最后一次修改人 id
|
||||
*
|
||||
* @date 2019/12/11 21:12
|
||||
*/
|
||||
@Schema(description = "最后一次修改人 id")
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
protected Long lastUpdateUser;
|
||||
|
||||
/**
|
||||
* 最后一次修改人信息
|
||||
*/
|
||||
@Schema(description = "最后一次修改人信息")
|
||||
@TableField(exist = false)
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
protected OperateUserDTO lastUpdateUserEntity;
|
||||
|
||||
}
|
||||
|
||||
@@ -28,6 +28,10 @@ import java.util.Map;
|
||||
|
||||
public interface BaseService<T extends BaseEntity> extends IService<T> {
|
||||
|
||||
/**
|
||||
* 根据 用户ID 获取 操作用户
|
||||
*/
|
||||
void reflectionFill(Object objList);
|
||||
|
||||
/**
|
||||
* 插入时 填写
|
||||
@@ -62,7 +66,7 @@ public interface BaseService<T extends BaseEntity> extends IService<T> {
|
||||
/**
|
||||
* 根据关键字查询
|
||||
*
|
||||
* @param params 参数
|
||||
* @param params 参数
|
||||
* @param columns 实体类字段
|
||||
* @author Wang Chen Chen
|
||||
* @date 2021/8/25 9:41
|
||||
|
||||
@@ -10,10 +10,13 @@ import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.xaaef.molly.common.po.SearchPO;
|
||||
import com.xaaef.molly.internal.api.ApiOperateUserService;
|
||||
import com.xaaef.molly.tenant.base.BaseEntity;
|
||||
import com.xaaef.molly.tenant.base.service.BaseService;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Collection;
|
||||
@@ -35,6 +38,16 @@ import static com.xaaef.molly.common.consts.MbpConst.CREATE_TIME;
|
||||
@Slf4j
|
||||
public class BaseServiceImpl<M extends BaseMapper<T>, T extends BaseEntity> extends ServiceImpl<M, T> implements BaseService<T> {
|
||||
|
||||
@Lazy
|
||||
@Resource
|
||||
private ApiOperateUserService apiOperateUserService;
|
||||
|
||||
|
||||
@Override
|
||||
public void reflectionFill(Object objList) {
|
||||
apiOperateUserService.reflectionFill(objList);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean save(T entity) {
|
||||
@@ -126,7 +139,11 @@ public class BaseServiceImpl<M extends BaseMapper<T>, T extends BaseEntity> exte
|
||||
public IPage<T> pageKeywords(SearchPO params, Collection<SFunction<T, ?>> columns) {
|
||||
Page<T> pageRequest = Page.of(params.getPageIndex(), params.getPageSize());
|
||||
QueryWrapper<T> wrapper = getKeywordsQueryWrapper(params, columns);
|
||||
return super.page(pageRequest, wrapper);
|
||||
Page<T> result = super.page(pageRequest, wrapper);
|
||||
if (params.getIncludeCauu() != null && params.getIncludeCauu()) {
|
||||
reflectionFill(result.getRecords());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user