1.添加 反射查询 新增和修改 用户!

This commit is contained in:
Wang Chen Chen
2023-10-31 14:20:03 +08:00
parent 74e6cbf211
commit a6e89315ed
15 changed files with 252 additions and 18 deletions

View File

@@ -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

View File

@@ -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"
}
> {%

View File

@@ -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}}

View File

@@ -26,4 +26,10 @@ public class SearchPO extends PagePO implements java.io.Serializable {
@Schema(description = "关键字搜索")
private String keywords;
/**
* 包含创建和修改用户信息
*/
@Schema(description = "包含创建和修改用户信息")
private Boolean includeCauu;
}

View File

@@ -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);
}

View File

@@ -16,9 +16,6 @@ public interface ApiSysUserService {
/**
* 根据 用户ID 获取 租户ID
*
* @author WangChenChen
* @date 2023/2/14 10:53
*/
Set<String> listHaveTenantIds(Long userId);

View File

@@ -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;
}

View File

@@ -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));
}
}

View File

@@ -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;

View File

@@ -25,10 +25,10 @@ public class ApiSysUserServiceImpl implements ApiSysUserService {
private final SysUserService userService;
@Override
public Set<String> listHaveTenantIds(Long userId) {
return userService.listHaveTenantIds(userId);
}
}

View File

@@ -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;

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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;
}