Merge branch 'uat-userinfo' into 'uat_code'
Uat userinfo See merge request eshop/biz_service_ebtp_extend!96
This commit is contained in:
@ -7,10 +7,7 @@ import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestHeader;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@ -36,4 +33,15 @@ public class UserInfoController {
|
||||
return ResponseEntity.ok(ebtpUserInfoService.getUserInfo(token));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 刷新redis缓存的信息
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("refresh")
|
||||
public ResponseEntity<Boolean> refreshToken() {
|
||||
return ResponseEntity.ok(ebtpUserInfoService.refresh());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -5,6 +5,19 @@ import com.chinaunicom.mall.ebtp.common.base.entity.BaseCacheUser;
|
||||
public interface EbtpUserInfoService {
|
||||
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
*
|
||||
* @param token
|
||||
* @return
|
||||
*/
|
||||
public BaseCacheUser getUserInfo(String token);
|
||||
|
||||
/**
|
||||
* 刷新redis缓存的信息
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean refresh();
|
||||
|
||||
}
|
||||
|
@ -10,11 +10,12 @@ import com.chinaunicom.mall.ebtp.extend.userinfo.entity.BaseRole;
|
||||
import com.chinaunicom.mall.ebtp.extend.userinfo.entity.BaseUser;
|
||||
import com.chinaunicom.mall.ebtp.extend.userinfo.service.EbtpUserInfoService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@ -27,6 +28,14 @@ public class EbtpUserInfoServiceImpl implements EbtpUserInfoService {
|
||||
@Autowired
|
||||
private BaseRoleMapper baseRoleMapper;
|
||||
|
||||
@Autowired(required = false)
|
||||
@Qualifier("cacheRedisTemplate")
|
||||
private RedisTemplate<String, Object> redisTemplate;
|
||||
|
||||
private static final String EXTEND_USER_KEY = "ebtpUserTableCache";
|
||||
private static final String USERS = "users";
|
||||
private static final String ROLES = "roles";
|
||||
|
||||
@Override
|
||||
public BaseCacheUser getUserInfo(String token) {
|
||||
//查询山分库
|
||||
@ -36,18 +45,24 @@ public class EbtpUserInfoServiceImpl implements EbtpUserInfoService {
|
||||
return new BaseCacheUser();
|
||||
}
|
||||
|
||||
//查询拓展库的user表进行角色拓展
|
||||
BaseUser baseUser = baseUserMapper.selectOne(Wrappers.lambdaQuery(BaseUser.class).eq(BaseUser::getAccount, user.getUserId()).eq(BaseUser::getTenant, "ebtp_mall"));
|
||||
//获取redis缓存
|
||||
Map<String, Object> userTable = getUserTable();
|
||||
|
||||
//获取用户信息
|
||||
List<BaseUser> users = (List<BaseUser>) userTable.get(USERS);
|
||||
BaseUser baseUser = users.stream().filter(u -> u.getAccount().equals(user.getLoginName())).findFirst().orElse(null);
|
||||
if (Objects.isNull(baseUser)) {
|
||||
return user;
|
||||
}
|
||||
|
||||
List<BaseRole> roles = (List<BaseRole>) userTable.get(ROLES);
|
||||
user.setProvince(baseUser.getProvince())
|
||||
//追加角色
|
||||
.getAuthorityList().addAll(
|
||||
Optional.of(baseRoleMapper.selectList(Wrappers.lambdaQuery(BaseRole.class).in(BaseRole::getRole, baseUser.getRole()))
|
||||
.stream().map(br ->
|
||||
//覆盖角色
|
||||
.setAuthorityList(
|
||||
Optional.of(roles
|
||||
.stream()
|
||||
.filter(r -> baseUser.getRole().contains(r.getRole()))
|
||||
.map(br ->
|
||||
new AuthorityEntity()
|
||||
.setRoleId(br.getRoleId())
|
||||
.setRoleCode(br.getRole())
|
||||
@ -59,6 +74,36 @@ public class EbtpUserInfoServiceImpl implements EbtpUserInfoService {
|
||||
return user;
|
||||
}
|
||||
|
||||
|
||||
private Map<String, Object> getUserTable() {
|
||||
Object o = redisTemplate.opsForValue().get(EXTEND_USER_KEY);
|
||||
|
||||
if (Objects.isNull(o)) {
|
||||
o = cacheUserTable();
|
||||
}
|
||||
return (Map<String, Object>) o ;
|
||||
}
|
||||
|
||||
private Map<String, Object> cacheUserTable() {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put(USERS, baseUserMapper.selectList(Wrappers.lambdaQuery(BaseUser.class).eq(BaseUser::getTenant, "ebtp_mall")));
|
||||
map.put(ROLES, baseRoleMapper.selectList(Wrappers.emptyWrapper()));
|
||||
redisTemplate.opsForValue().set(EXTEND_USER_KEY, map, 8, TimeUnit.HOURS);
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 删除token缓存
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean refresh() {
|
||||
cacheUserTable();
|
||||
return true;
|
||||
}
|
||||
|
||||
public EbtpUserInfoServiceImpl() {
|
||||
super();
|
||||
}
|
||||
|
@ -91,6 +91,12 @@ spring:
|
||||
master: eshop-redis
|
||||
nodes: 10.125.164.124:32718, 10.125.164.118:32716, 10.125.164.121:32716
|
||||
password: Unicom#135
|
||||
database:
|
||||
idempotent: 0
|
||||
sharding: 1
|
||||
cache: 2
|
||||
backup: 3
|
||||
|
||||
|
||||
# 天宫Eureka配置
|
||||
eureka:
|
||||
|
Reference in New Issue
Block a user