1.提交修改,门店用户加入分配角色 查询角色 门店

This commit is contained in:
2026-04-03 16:51:26 +08:00
parent 2c594a6b3a
commit 72160d47b0
6 changed files with 129 additions and 35 deletions

View File

@@ -100,9 +100,10 @@ public class StoreUserController {
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<StoreUserDO> list = storeUserService.getStoreUserPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "门店-用户绑定.xls", "数据", StoreUserRespVO.class,
BeanUtils.toBean(list, StoreUserRespVO.class));
List<StoreUserRespVO> rows = BeanUtils.toBean(list, StoreUserRespVO.class);
// 密码不落库、不落 Excel
rows.forEach(row -> row.setPassword(null));
ExcelUtils.write(response, "门店-用户绑定.xls", "数据", StoreUserRespVO.class, rows);
}
@PostMapping("/e3SyncStoreAndUser")

View File

@@ -28,4 +28,10 @@ public class StoreUserPageReqVO extends PageParam {
private String username;
private String nickname;
private String mobile;
@Schema(description = "角色编号(按角色筛选用户)", example = "1")
private Long roleId;
@Schema(description = "门店名称(模糊查询)")
private String storeName;
}

View File

@@ -1,14 +1,12 @@
package cn.iocoder.yudao.module.ydoyun.controller.admin.storeuser.vo;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserRespVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import cn.idev.excel.annotation.*;
import cn.idev.excel.annotation.ExcelIgnore;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
@Schema(description = "管理后台 - 门店-用户绑定 Response VO")
@Data
@@ -16,40 +14,61 @@ import cn.idev.excel.annotation.*;
public class StoreUserRespVO {
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8169")
@ExcelProperty("主键ID")
@ExcelProperty(value = "主键ID", index = 0)
private Long id;
@Schema(description = "门店ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "30851")
@ExcelProperty("门店ID")
@ExcelProperty(value = "门店ID", index = 1)
private Long storeId;
@Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15789")
@ExcelProperty("用户ID")
private Long userId;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
// ===== AdminUser 冗余字段 =====
@TableField(exist = false)
private String username;
@TableField(exist = false)
private String nickname;
@TableField(exist = false)
private String password;
@TableField(exist = false)
private String mobile;
/**
* 门店编码
*/
@Schema(description = "门店编码")
@ExcelProperty(value = "门店编码", index = 2)
@TableField(exist = false)
private String storeCode;
/**
* 门店名称
*/
@Schema(description = "门店名称")
@ExcelProperty(value = "门店名称", index = 3)
@TableField(exist = false)
private String storeName;
@Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15789")
@ExcelProperty(value = "用户ID", index = 4)
private Long userId;
// ===== AdminUser 冗余字段 =====
@Schema(description = "用户名称")
@ExcelProperty(value = "用户名称", index = 5)
@TableField(exist = false)
private String username;
@Schema(description = "用户昵称")
@ExcelProperty(value = "用户昵称", index = 6)
@TableField(exist = false)
private String nickname;
@Schema(description = "手机号码")
@ExcelProperty(value = "手机号码", index = 7)
@TableField(exist = false)
private String mobile;
/** 密码不落 Excel */
@Schema(description = "密码", hidden = true)
@ExcelIgnore
@TableField(exist = false)
private String password;
@Schema(description = "角色名称(逗号拼接)")
@ExcelProperty(value = "角色", index = 8)
@TableField(exist = false)
private String roleNames;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty(value = "创建时间", index = 9)
private LocalDateTime createTime;
}

View File

@@ -56,4 +56,10 @@ public class StoreUserDO extends BaseDO {
*/
@TableField(exist = false)
private String storeName;
/**
* 用户角色名称(逗号拼接,非表字段)
*/
@TableField(exist = false)
private String roleNames;
}

View File

@@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.ydoyun.dal.mysql.storeuser;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.ydoyun.controller.admin.storeuser.vo.StoreUserPageReqVO;
import cn.iocoder.yudao.module.ydoyun.dal.dataobject.store.StoreDO;
@@ -38,12 +39,19 @@ public interface StoreUserMapper extends BaseMapperX<StoreUserDO> {
StoreUserDO::getUserId)
.leftJoin(StoreDO.class,
StoreDO::getId,
StoreUserDO::getStoreId)
StoreUserDO::getStoreId);
if (Objects.nonNull(reqVO.getRoleId())) {
wrapper.innerJoin(UserRoleDO.class, UserRoleDO::getUserId, StoreUserDO::getUserId)
.eq(UserRoleDO::getRoleId, reqVO.getRoleId());
}
wrapper
// 条件
.eq(Objects.nonNull(reqVO.getStoreId()),StoreUserDO::getStoreId, reqVO.getStoreId())
.eq(Objects.nonNull(reqVO.getUserId()),StoreUserDO::getUserId, reqVO.getUserId())
.like(Objects.nonNull(reqVO.getUsername()),AdminUserDO::getUsername, reqVO.getUsername())
.like(Objects.nonNull(reqVO.getNickname()),AdminUserDO::getNickname, reqVO.getNickname())
.eq(Objects.nonNull(reqVO.getStoreId()), StoreUserDO::getStoreId, reqVO.getStoreId())
.eq(Objects.nonNull(reqVO.getUserId()), StoreUserDO::getUserId, reqVO.getUserId())
.like(Objects.nonNull(reqVO.getUsername()), AdminUserDO::getUsername, reqVO.getUsername())
.like(Objects.nonNull(reqVO.getNickname()), AdminUserDO::getNickname, reqVO.getNickname())
.like(Objects.nonNull(reqVO.getMobile()), AdminUserDO::getMobile, reqVO.getMobile())
.like(Objects.nonNull(reqVO.getStoreName()), StoreDO::getStoreName, reqVO.getStoreName())
.orderByDesc(StoreUserDO::getId);
if (reqVO.getCreateTime() != null && reqVO.getCreateTime().length == 2) {

View File

@@ -6,7 +6,11 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.dal.mysql.permission.RoleMapper;
import cn.iocoder.yudao.module.system.dal.mysql.permission.UserRoleMapper;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import cn.iocoder.yudao.module.ydoyun.config.ProcedureHttpClient;
import cn.iocoder.yudao.module.ydoyun.controller.admin.store.vo.StoreSaveReqVO;
@@ -59,6 +63,12 @@ public class StoreUserServiceImpl implements StoreUserService {
@Resource
private YdoyunUserExtMapper ydoyunUserExtMapper;
@Resource
private UserRoleMapper userRoleMapper;
@Resource
private RoleMapper roleMapper;
/**
* 创建AdminUser + StoreUser
*/
@@ -148,7 +158,51 @@ public class StoreUserServiceImpl implements StoreUserService {
@Override
public PageResult<StoreUserDO> getStoreUserPage(StoreUserPageReqVO pageReqVO) {
return storeUserMapper.selectPage(pageReqVO);
PageResult<StoreUserDO> pageResult = storeUserMapper.selectPage(pageReqVO);
fillUserRoleNames(pageResult.getList());
return pageResult;
}
/**
* 填充系统用户的角色名称(逗号拼接)
*/
private void fillUserRoleNames(List<StoreUserDO> list) {
if (CollUtil.isEmpty(list)) {
return;
}
Set<Long> userIds = list.stream()
.map(StoreUserDO::getUserId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
if (CollUtil.isEmpty(userIds)) {
return;
}
List<UserRoleDO> userRoles = userRoleMapper.selectList(new LambdaQueryWrapperX<UserRoleDO>()
.in(UserRoleDO::getUserId, userIds));
if (CollUtil.isEmpty(userRoles)) {
return;
}
Set<Long> roleIds = userRoles.stream().map(UserRoleDO::getRoleId).collect(Collectors.toSet());
List<RoleDO> roles = roleMapper.selectBatchIds(roleIds);
Map<Long, String> roleIdToName =
roles.stream().collect(Collectors.toMap(RoleDO::getId, RoleDO::getName, (a, b) -> a));
Map<Long, List<Long>> userIdToRoleIds = userRoles.stream()
.collect(Collectors.groupingBy(UserRoleDO::getUserId,
Collectors.mapping(UserRoleDO::getRoleId, Collectors.toList())));
for (StoreUserDO row : list) {
if (row.getUserId() == null) {
continue;
}
List<Long> rids = userIdToRoleIds.get(row.getUserId());
if (CollUtil.isEmpty(rids)) {
continue;
}
String names = rids.stream()
.map(roleIdToName::get)
.filter(StrUtil::isNotBlank)
.collect(Collectors.joining(""));
row.setRoleNames(names);
}
}
/**