|
|
@@ -1,6 +1,5 @@
|
|
|
package org.dromara.system.service.impl;
|
|
|
|
|
|
-import cn.dev33.satoken.context.SaHolder;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.convert.Convert;
|
|
|
import cn.hutool.core.util.ArrayUtil;
|
|
|
@@ -15,6 +14,7 @@ import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.dromara.common.core.constant.CacheNames;
|
|
|
import org.dromara.common.core.constant.SystemConstants;
|
|
|
+import org.dromara.common.core.constant.TenantConstants;
|
|
|
import org.dromara.common.core.exception.ServiceException;
|
|
|
import org.dromara.common.core.utils.*;
|
|
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
@@ -22,25 +22,22 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
import org.dromara.common.platform.Platform;
|
|
|
import org.dromara.common.platform.PlatformUtils;
|
|
|
import org.dromara.common.satoken.utils.LoginHelper;
|
|
|
-import org.dromara.system.domain.SysUser;
|
|
|
-import org.dromara.system.domain.SysUserPost;
|
|
|
-import org.dromara.system.domain.SysUserRole;
|
|
|
+import org.dromara.system.domain.*;
|
|
|
import org.dromara.system.domain.bo.SysUserBo;
|
|
|
import org.dromara.system.domain.vo.SysPostVo;
|
|
|
import org.dromara.system.domain.vo.SysRoleVo;
|
|
|
import org.dromara.system.domain.vo.SysUserExportVo;
|
|
|
import org.dromara.system.domain.vo.SysUserVo;
|
|
|
import org.dromara.system.mapper.*;
|
|
|
+import org.dromara.system.service.ISysRoleService;
|
|
|
import org.dromara.system.service.ISysUserService;
|
|
|
import org.springframework.cache.annotation.CacheEvict;
|
|
|
import org.springframework.cache.annotation.Cacheable;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Arrays;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 用户 业务层处理
|
|
|
@@ -58,6 +55,10 @@ public class SysUserServiceImpl implements ISysUserService {
|
|
|
private final SysPostMapper postMapper;
|
|
|
private final SysUserRoleMapper userRoleMapper;
|
|
|
private final SysUserPostMapper userPostMapper;
|
|
|
+ private final SysUserStoreMapper userStoreMapper;
|
|
|
+ private final SysStoreMapper storeMapper;
|
|
|
+
|
|
|
+ private final ISysRoleService roleService;
|
|
|
|
|
|
@Override
|
|
|
public TableDataInfo<SysUserVo> selectPageUserList(SysUserBo user, PageQuery pageQuery) {
|
|
|
@@ -315,6 +316,8 @@ public class SysUserServiceImpl implements ISysUserService {
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public int insertUser(SysUserBo user) {
|
|
|
SysUser sysUser = MapstructUtils.convert(user, SysUser.class);
|
|
|
+ // 增加平台信息 @author: Huanyi
|
|
|
+ sysUser.setPlatformId(PlatformUtils.getId());
|
|
|
// 新增用户信息
|
|
|
int rows = baseMapper.insert(sysUser);
|
|
|
user.setUserId(sysUser.getUserId());
|
|
|
@@ -322,9 +325,28 @@ public class SysUserServiceImpl implements ISysUserService {
|
|
|
insertUserPost(user, false);
|
|
|
// 新增用户与角色管理
|
|
|
insertUserRole(user, false);
|
|
|
+ // 新增用户与门店关联 @author: Huanyi
|
|
|
+ insertUserStore(user, false);
|
|
|
return rows;
|
|
|
}
|
|
|
|
|
|
+ private void insertUserStore(SysUserBo user, boolean clean) {
|
|
|
+ if (clean) {
|
|
|
+ userStoreMapper.delete(Wrappers.lambdaQuery(SysUserStore.class).eq(SysUserStore::getUserId, user.getUserId()));
|
|
|
+ }
|
|
|
+ if (user.getStoreIds().length == 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<SysUserStore> list = Arrays.stream(user.getStoreIds())
|
|
|
+ .map(storeId -> {
|
|
|
+ SysUserStore e = new SysUserStore();
|
|
|
+ e.setUserId(user.getUserId());
|
|
|
+ e.setStoreId(storeId);
|
|
|
+ return e;
|
|
|
+ }).toList();
|
|
|
+ userStoreMapper.insertBatch(list);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 注册用户信息
|
|
|
*
|
|
|
@@ -354,6 +376,8 @@ public class SysUserServiceImpl implements ISysUserService {
|
|
|
insertUserRole(user, true);
|
|
|
// 新增用户与岗位管理
|
|
|
insertUserPost(user, true);
|
|
|
+ // 新增用户与门店关联 @author: Huanyi
|
|
|
+ insertUserStore(user, true);
|
|
|
SysUser sysUser = MapstructUtils.convert(user, SysUser.class);
|
|
|
// 防止错误更新后导致的数据误删除
|
|
|
int flag = baseMapper.updateById(sysUser);
|
|
|
@@ -590,6 +614,51 @@ public class SysUserServiceImpl implements ISysUserService {
|
|
|
return StreamUtils.toList(userRoles, SysUserRole::getUserId);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public TableDataInfo<SysUserVo> selectPageUserListOnMerchant(SysUserBo user, PageQuery pageQuery) {
|
|
|
+ Page<SysUserVo> page = baseMapper.selectPageUserList(pageQuery.build(), this.buildQueryWrapper(user));
|
|
|
+
|
|
|
+ if (!page.getRecords().isEmpty()) {
|
|
|
+ List<Long> userIds = page.getRecords().stream().map(SysUserVo::getUserId).toList();
|
|
|
+ Map<Long, List<SysUserStore>> storeMap = userStoreMapper.selectList(
|
|
|
+ Wrappers.lambdaQuery(SysUserStore.class).in(SysUserStore::getUserId, userIds)
|
|
|
+ ).stream().collect(Collectors.groupingBy(SysUserStore::getUserId));
|
|
|
+ List<Long> allStoreList = new ArrayList<>();
|
|
|
+ Map<Long, List<SysUserRole>> userRoleMap = userRoleMapper.selectList(Wrappers.lambdaQuery(SysUserRole.class).in(SysUserRole::getUserId, userIds)).stream().collect(Collectors.groupingBy(SysUserRole::getUserId));
|
|
|
+ storeMapper.selectList(Wrappers.lambdaQuery(SysStore.class).select(SysStore::getId)).forEach(e -> allStoreList.add(e.getId()));
|
|
|
+ Long[] allStores = new Long[allStoreList.size()];
|
|
|
+ for (int i = 0; i < allStoreList.size(); i++) {
|
|
|
+ allStores[i] = allStoreList.get(i);
|
|
|
+ }
|
|
|
+ Map<Long, SysRole> roleMap = new HashMap<>();
|
|
|
+ roleMapper.selectList().forEach(e -> roleMap.put(e.getRoleId(), e));
|
|
|
+ page.getRecords().forEach(e -> {
|
|
|
+
|
|
|
+ List<SysUserRole> roleIds = userRoleMap.get(e.getUserId());
|
|
|
+ e.setRoleIds(roleIds.stream().map(SysUserRole::getRoleId).toArray(Long[]::new));
|
|
|
+ for (SysUserRole userRole : roleIds) {
|
|
|
+ SysRole role = roleMap.get(userRole.getRoleId());
|
|
|
+ if (role.getRoleKey().equals(TenantConstants.TENANT_ADMIN_ROLE_KEY)) {
|
|
|
+ e.setStoreIds(allStores);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<SysUserStore> stores = storeMap.get(e.getUserId());
|
|
|
+ Long[] storeIds = new Long[stores.size()];
|
|
|
+ if (!stores.isEmpty()) {
|
|
|
+ // 一个人能够分到的店面有限,贸然stream流性能反而更慢 @author: Huanyi
|
|
|
+ for (int i = 0; i < stores.size(); i++) {
|
|
|
+ storeIds[i] = stores.get(i).getStoreId();
|
|
|
+ }
|
|
|
+ e.setStoreIds(storeIds);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ return TableDataInfo.build(page);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 通过用户ID查询用户账户
|
|
|
*
|