diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/StoreUserController.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/StoreUserController.java index 34ec22e..64c7ae1 100644 --- a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/StoreUserController.java +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/StoreUserController.java @@ -100,9 +100,10 @@ public class StoreUserController { HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = storeUserService.getStoreUserPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "门店-用户绑定.xls", "数据", StoreUserRespVO.class, - BeanUtils.toBean(list, StoreUserRespVO.class)); + List rows = BeanUtils.toBean(list, StoreUserRespVO.class); + // 密码不落库、不落 Excel + rows.forEach(row -> row.setPassword(null)); + ExcelUtils.write(response, "门店-用户绑定.xls", "数据", StoreUserRespVO.class, rows); } @PostMapping("/e3SyncStoreAndUser") diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/vo/StoreUserPageReqVO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/vo/StoreUserPageReqVO.java index 06bc7a3..2f86b23 100644 --- a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/vo/StoreUserPageReqVO.java +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/vo/StoreUserPageReqVO.java @@ -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; } \ No newline at end of file diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/vo/StoreUserRespVO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/vo/StoreUserRespVO.java index 907235f..2ead37a 100644 --- a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/vo/StoreUserRespVO.java +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/storeuser/vo/StoreUserRespVO.java @@ -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; } \ No newline at end of file diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/storeuser/StoreUserDO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/storeuser/StoreUserDO.java index a5992f1..7830f60 100644 --- a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/storeuser/StoreUserDO.java +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/storeuser/StoreUserDO.java @@ -56,4 +56,10 @@ public class StoreUserDO extends BaseDO { */ @TableField(exist = false) private String storeName; + + /** + * 用户角色名称(逗号拼接,非表字段) + */ + @TableField(exist = false) + private String roleNames; } \ No newline at end of file diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/storeuser/StoreUserMapper.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/storeuser/StoreUserMapper.java index cc966d1..8b1041b 100644 --- a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/storeuser/StoreUserMapper.java +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/storeuser/StoreUserMapper.java @@ -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::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) { diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/storeuser/StoreUserServiceImpl.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/storeuser/StoreUserServiceImpl.java index 7855e04..c505e24 100644 --- a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/storeuser/StoreUserServiceImpl.java +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/storeuser/StoreUserServiceImpl.java @@ -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 getStoreUserPage(StoreUserPageReqVO pageReqVO) { - return storeUserMapper.selectPage(pageReqVO); + PageResult pageResult = storeUserMapper.selectPage(pageReqVO); + fillUserRoleNames(pageResult.getList()); + return pageResult; + } + + /** + * 填充系统用户的角色名称(逗号拼接) + */ + private void fillUserRoleNames(List list) { + if (CollUtil.isEmpty(list)) { + return; + } + Set userIds = list.stream() + .map(StoreUserDO::getUserId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + if (CollUtil.isEmpty(userIds)) { + return; + } + List userRoles = userRoleMapper.selectList(new LambdaQueryWrapperX() + .in(UserRoleDO::getUserId, userIds)); + if (CollUtil.isEmpty(userRoles)) { + return; + } + Set roleIds = userRoles.stream().map(UserRoleDO::getRoleId).collect(Collectors.toSet()); + List roles = roleMapper.selectBatchIds(roleIds); + Map roleIdToName = + roles.stream().collect(Collectors.toMap(RoleDO::getId, RoleDO::getName, (a, b) -> a)); + Map> userIdToRoleIds = userRoles.stream() + .collect(Collectors.groupingBy(UserRoleDO::getUserId, + Collectors.mapping(UserRoleDO::getRoleId, Collectors.toList()))); + for (StoreUserDO row : list) { + if (row.getUserId() == null) { + continue; + } + List 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); + } } /**