mirror of
https://gitee.com/lakernote/easy-admin.git
synced 2026-09-03 05:33:47 +08:00
code refactor
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
package com.laker.admin.config;
|
||||
|
||||
import com.laker.admin.framework.ext.transaction.LakerDataSourceTransactionManager;
|
||||
import com.laker.admin.framework.ext.transaction.EasyDataSourceTransactionManager;
|
||||
import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
|
||||
import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers;
|
||||
@@ -18,7 +18,7 @@ public class EasyTransactionManagerConfig {
|
||||
@Bean
|
||||
DataSourceTransactionManager transactionManager(DataSource dataSource,
|
||||
ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
|
||||
DataSourceTransactionManager transactionManager = new LakerDataSourceTransactionManager(dataSource, 500);
|
||||
DataSourceTransactionManager transactionManager = new EasyDataSourceTransactionManager(dataSource, 500);
|
||||
transactionManagerCustomizers.ifAvailable((customizers) -> customizers.customize(transactionManager));
|
||||
return transactionManager;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.laker.admin.config.websocket;
|
||||
|
||||
import com.laker.admin.framework.ext.websocket.LakerChatHandler;
|
||||
import com.laker.admin.framework.ext.websocket.LakerSessionHandshakeInterceptor;
|
||||
import com.laker.admin.framework.ext.websocket.EasyChatHandler;
|
||||
import com.laker.admin.framework.ext.websocket.EasySessionHandshakeInterceptor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@@ -18,13 +18,13 @@ import org.springframework.web.socket.server.standard.ServletServerContainerFact
|
||||
public class WebSocketConfig implements WebSocketConfigurer {
|
||||
|
||||
@Autowired
|
||||
LakerChatHandler webSocketHandler;
|
||||
EasyChatHandler webSocketHandler;
|
||||
|
||||
@Override
|
||||
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
|
||||
registry.addHandler(webSocketHandler, "/websocket/**")
|
||||
// 添加拦截器,可以获取连接的param和 header 用作认证鉴权
|
||||
.addInterceptors(new LakerSessionHandshakeInterceptor())
|
||||
.addInterceptors(new EasySessionHandshakeInterceptor())
|
||||
// 设置运行跨域
|
||||
.setAllowedOrigins("*");
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
@RestController
|
||||
@Slf4j
|
||||
public class DefaultUncaughtErrorControllor implements ErrorController {
|
||||
public class EasyDefaultUncaughtErrorControllor implements ErrorController {
|
||||
|
||||
@RequestMapping("/error")
|
||||
public Response<String> error(HttpServletRequest request, HttpServletResponse response) {
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.laker.admin.framework.ext.step;
|
||||
package com.laker.admin.framework.ext.actuator.step;
|
||||
|
||||
import io.micrometer.core.instrument.util.NamedThreadFactory;
|
||||
import io.micrometer.core.instrument.util.TimeUtils;
|
||||
@@ -10,33 +10,34 @@ import java.util.concurrent.*;
|
||||
|
||||
/**
|
||||
* 按步长 定期存储到任意位置,例如db
|
||||
*
|
||||
* @author laker
|
||||
*/
|
||||
@Slf4j
|
||||
public class LakerMeterRegistry {
|
||||
public class EasyMeterRegistry {
|
||||
private final Object meterMapLock = new Object();
|
||||
private Duration step;
|
||||
private final Duration step;
|
||||
private ScheduledExecutorService scheduledExecutorService;
|
||||
|
||||
private final ConcurrentMap<String, StepCounterTuple> meterMap = new ConcurrentHashMap<>();
|
||||
|
||||
public LakerMeterRegistry() {
|
||||
public EasyMeterRegistry() {
|
||||
this(Duration.ofMillis(1));
|
||||
}
|
||||
|
||||
|
||||
public LakerMeterRegistry(Duration step) {
|
||||
public EasyMeterRegistry(Duration step) {
|
||||
this(step, new NamedThreadFactory("laker-metrics-publisher"));
|
||||
}
|
||||
|
||||
private LakerMeterRegistry(Duration step, ThreadFactory threadFactory) {
|
||||
private EasyMeterRegistry(Duration step, ThreadFactory threadFactory) {
|
||||
this.step = step;
|
||||
start(threadFactory);
|
||||
}
|
||||
|
||||
|
||||
public StepCounterTuple counter(String videoId) {
|
||||
String id = "laker:" + videoId;
|
||||
String id = "easy:" + videoId;
|
||||
StepCounterTuple multiStepCounter = meterMap.get(id);
|
||||
if (multiStepCounter == null) {
|
||||
synchronized (meterMapLock) {
|
||||
@@ -57,7 +58,7 @@ public class LakerMeterRegistry {
|
||||
protected void publish() {
|
||||
Collection<StepCounterTuple> values = meterMap.values();
|
||||
log.info("---- start 当前map 容量" + values.size());
|
||||
values.stream().forEach(multiStepCounter -> {
|
||||
values.forEach(multiStepCounter -> {
|
||||
long count1 = multiStepCounter.count1();
|
||||
long count2 = multiStepCounter.count2();
|
||||
// if 存在无效的数据则删除掉 防止占内存,或者 这个另起一个定时任务去删除 定时时长 更久些。
|
||||
@@ -82,7 +83,6 @@ public class LakerMeterRegistry {
|
||||
|
||||
log.info("---- end 结束后 map 容量 " + values.size());
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -94,7 +94,6 @@ public class LakerMeterRegistry {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void start(ThreadFactory threadFactory) {
|
||||
if (scheduledExecutorService != null) {
|
||||
stop();
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.laker.admin.framework.ext.step;
|
||||
package com.laker.admin.framework.ext.actuator.step;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.atomic.LongAdder;
|
||||
@@ -14,7 +14,7 @@ import java.util.concurrent.atomic.LongAdder;
|
||||
* @author laker
|
||||
*/
|
||||
public class StepCounterTuple {
|
||||
private String id;
|
||||
private final String id;
|
||||
private final LongAdder count1 = new LongAdder();
|
||||
/**
|
||||
* 可以 自己扩展 count n ,double n
|
||||
@@ -7,9 +7,9 @@ import cn.dev33.satoken.stp.SaLoginModel;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.useragent.UserAgent;
|
||||
import com.laker.admin.module.sys.service.ISysUserService;
|
||||
import com.laker.admin.framework.utils.IP2CityUtil;
|
||||
import com.laker.admin.framework.utils.EasyHttpRequestUtil;
|
||||
import com.laker.admin.framework.utils.IP2CityUtil;
|
||||
import com.laker.admin.module.sys.service.ISysUserService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -18,13 +18,14 @@ import javax.annotation.PostConstruct;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* 自定义侦听器的实现
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class MySaTokenListener implements SaTokenListener {
|
||||
public class EasySaTokenListener implements SaTokenListener {
|
||||
public static final List<OnlineUser> ONLINE_USERS = new CopyOnWriteArrayList<>();
|
||||
|
||||
@Autowired
|
||||
@@ -158,7 +159,7 @@ public class MySaTokenListener implements SaTokenListener {
|
||||
try {
|
||||
try {
|
||||
// 如果已经被标记为结束
|
||||
if (refreshFlag == false) {
|
||||
if (!refreshFlag) {
|
||||
return;
|
||||
}
|
||||
long start = System.currentTimeMillis();
|
||||
@@ -180,9 +181,9 @@ public class MySaTokenListener implements SaTokenListener {
|
||||
dataRefreshPeriod = 1;
|
||||
}
|
||||
dataRefreshPeriod = dataRefreshPeriod + 5;
|
||||
Thread.sleep(dataRefreshPeriod * 1000);
|
||||
TimeUnit.SECONDS.sleep(dataRefreshPeriod);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.error("定时清理过期会话异常", e);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.laker.admin.framework.ext.satoken;
|
||||
|
||||
import cn.dev33.satoken.stp.StpInterface;
|
||||
import com.laker.admin.module.sys.mapper.SysRoleMapper;
|
||||
import com.laker.admin.module.sys.mapper.SysRolePowerMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class EasyStpInterfaceImpl implements StpInterface {
|
||||
@Autowired
|
||||
SysRolePowerMapper sysRolePowerMapper;
|
||||
@Autowired
|
||||
SysRoleMapper sysRoleMapper;
|
||||
|
||||
/**
|
||||
* 返回一个账号所拥有的权限码集合
|
||||
*/
|
||||
@Override
|
||||
public List<String> getPermissionList(Object loginId, String loginKey) {
|
||||
// 一个优化点事这里可以放进缓存,在用户登出时清除缓存
|
||||
return sysRolePowerMapper.getPowerCodesByUserIdAndPowerType(Long.valueOf((String) loginId), 2);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回一个账号所拥有的角色标识集合
|
||||
*/
|
||||
@Override
|
||||
public List<String> getRoleList(Object loginId, String loginKey) {
|
||||
// 一个优化点事这里可以放进缓存,在用户登出时清除缓存
|
||||
return sysRoleMapper.getRoleCodesByUserIdAndRoleType(Long.valueOf((String) loginId), null);
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
package com.laker.admin.framework.ext.satoken;
|
||||
|
||||
import cn.dev33.satoken.stp.StpInterface;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.laker.admin.module.sys.entity.SysPower;
|
||||
import com.laker.admin.module.sys.entity.SysRole;
|
||||
import com.laker.admin.module.sys.entity.SysRolePower;
|
||||
import com.laker.admin.module.sys.entity.SysUserRole;
|
||||
import com.laker.admin.module.sys.service.ISysMenuService;
|
||||
import com.laker.admin.module.sys.service.ISysRolePowerService;
|
||||
import com.laker.admin.module.sys.service.ISysRoleService;
|
||||
import com.laker.admin.module.sys.service.ISysUserRoleService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class StpInterfaceImpl implements StpInterface {
|
||||
@Autowired
|
||||
ISysUserRoleService sysUserRoleService;
|
||||
@Autowired
|
||||
ISysRolePowerService sysRolePowerService;
|
||||
@Autowired
|
||||
ISysMenuService menuService;
|
||||
@Autowired
|
||||
ISysRoleService roleService;
|
||||
|
||||
/**
|
||||
* 返回一个账号所拥有的权限码集合
|
||||
*/
|
||||
@Override
|
||||
public List<String> getPermissionList(Object loginId, String loginKey) {
|
||||
List<SysUserRole> userRoles = sysUserRoleService.list(Wrappers.<SysUserRole>lambdaQuery().eq(SysUserRole::getUserId, loginId));
|
||||
List<Long> roleIds = userRoles.stream().map(SysUserRole::getRoleId).collect(Collectors.toList());
|
||||
List<SysRolePower> rolePowerLists = sysRolePowerService.list(Wrappers.<SysRolePower>lambdaQuery().in(SysRolePower::getRoleId, roleIds));
|
||||
List<Long> powerIds = rolePowerLists.stream().map(SysRolePower::getPowerId).collect(Collectors.toList());
|
||||
// 2是按钮
|
||||
List<SysPower> sysPowers = menuService.list(Wrappers.<SysPower>lambdaQuery().in(SysPower::getMenuId, powerIds).eq(SysPower::getType, 2));
|
||||
List<String> strings = sysPowers.stream().map(SysPower::getPowerCode).collect(Collectors.toList());
|
||||
return strings;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回一个账号所拥有的角色标识集合
|
||||
*/
|
||||
@Override
|
||||
public List<String> getRoleList(Object loginId, String loginKey) {
|
||||
|
||||
List<SysUserRole> userRoles = sysUserRoleService.list(Wrappers.<SysUserRole>lambdaQuery()
|
||||
.eq(SysUserRole::getUserId, loginId));
|
||||
List<String> roleIds = userRoles.stream().map(sysUserRole -> sysUserRole.getRoleId() + "")
|
||||
.collect(Collectors.toList());
|
||||
List<SysRole> sysRoles = roleService.list(Wrappers.<SysRole>lambdaQuery().in(SysRole::getRoleId, roleIds));
|
||||
return sysRoles.stream().map(role -> role.getRoleCode()).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
@@ -11,18 +11,15 @@ import org.springframework.stereotype.Component;
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class GeneralCompletion implements Completion {
|
||||
public class EasyGeneralCompletion implements Completion {
|
||||
|
||||
@Override
|
||||
public void complete(HistoryTask task) {
|
||||
|
||||
log.info("The task[{}] has been user[{}] has completed", task, task.getOperator());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void complete(HistoryOrder order) {
|
||||
|
||||
|
||||
log.info("The order[{}] has completed", order);
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,7 @@ import java.util.concurrent.TimeUnit;
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class WebSocketEventListener {
|
||||
public class EasyWebSocketEventListener {
|
||||
|
||||
@Autowired
|
||||
StompMessageService stompMessageService;
|
||||
@@ -18,13 +18,13 @@ import java.util.List;
|
||||
* @date: 2022/10/17
|
||||
**/
|
||||
@Slf4j
|
||||
public class LakerDataSourceTransactionManager extends DataSourceTransactionManager {
|
||||
public class EasyDataSourceTransactionManager extends DataSourceTransactionManager {
|
||||
|
||||
|
||||
transient ThreadLocal<LinkedList<Transaction>> dateThreadLocal = new ThreadLocal<>();
|
||||
private transient long costTime;
|
||||
private final transient long costTime;
|
||||
|
||||
public LakerDataSourceTransactionManager(DataSource dataSource, long costTime) {
|
||||
public EasyDataSourceTransactionManager(DataSource dataSource, long costTime) {
|
||||
super(dataSource);
|
||||
this.costTime = costTime;
|
||||
}
|
||||
@@ -62,7 +62,7 @@ public class LakerDataSourceTransactionManager extends DataSourceTransactionMana
|
||||
TraceContext.stopSpan(costTime);
|
||||
}
|
||||
|
||||
class Transaction {
|
||||
static class Transaction {
|
||||
long begin;
|
||||
String name;
|
||||
|
||||
@@ -15,11 +15,11 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class LakerChatHandler extends AbstractWebSocketHandler {
|
||||
public class EasyChatHandler extends AbstractWebSocketHandler {
|
||||
private final Map<String, WebSocketSession> webSocketSessionMap = new ConcurrentHashMap<>();
|
||||
WebsocketMetrics websocketMetrics;
|
||||
|
||||
public LakerChatHandler(WebsocketMetrics websocketMetrics) {
|
||||
public EasyChatHandler(WebsocketMetrics websocketMetrics) {
|
||||
this.websocketMetrics = websocketMetrics;
|
||||
websocketMetrics.websocketGauge(webSocketSessionMap);
|
||||
}
|
||||
@@ -12,7 +12,7 @@ import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Map;
|
||||
|
||||
public class LakerSessionHandshakeInterceptor extends HttpSessionHandshakeInterceptor {
|
||||
public class EasySessionHandshakeInterceptor extends HttpSessionHandshakeInterceptor {
|
||||
// 拦截器返回false,则不会进行websocket协议的转换
|
||||
// 可以获取请求参数做认证鉴权
|
||||
@Override
|
||||
@@ -9,7 +9,7 @@ import io.swagger.annotations.ApiModelProperty;
|
||||
@ApiModel
|
||||
public class PageResponse<T> extends Response<T> {
|
||||
|
||||
@ApiModelProperty(notes = "数量")
|
||||
@ApiModelProperty(notes = "总记录数量")
|
||||
private Long count;
|
||||
|
||||
public PageResponse(String code, String msg, T data, Long count) {
|
||||
|
||||
@@ -15,7 +15,7 @@ import com.laker.admin.framework.aop.metrics.Metrics;
|
||||
import com.laker.admin.framework.cache.IEasyCache;
|
||||
import com.laker.admin.framework.ext.mybatis.UserDataPower;
|
||||
import com.laker.admin.framework.ext.mybatis.UserInfoAndPowers;
|
||||
import com.laker.admin.framework.ext.satoken.MySaTokenListener;
|
||||
import com.laker.admin.framework.ext.satoken.EasySaTokenListener;
|
||||
import com.laker.admin.framework.ext.satoken.OnlineUser;
|
||||
import com.laker.admin.framework.model.PageResponse;
|
||||
import com.laker.admin.framework.model.Response;
|
||||
@@ -113,8 +113,8 @@ public class LoginController {
|
||||
@ApiOperation(value = "获取在线用户信息")
|
||||
public PageResponse onlineUsers(@RequestParam(required = false, defaultValue = "1") int page,
|
||||
@RequestParam(required = false, defaultValue = "10") int limit) {
|
||||
MySaTokenListener.ONLINE_USERS.sort((o1, o2) -> DateUtil.compare(o2.getLoginTime(), o1.getLoginTime()));
|
||||
PageDtoUtil pageDto = PageDtoUtil.getPageDto(MySaTokenListener.ONLINE_USERS, page, limit);
|
||||
EasySaTokenListener.ONLINE_USERS.sort((o1, o2) -> DateUtil.compare(o2.getLoginTime(), o1.getLoginTime()));
|
||||
PageDtoUtil pageDto = PageDtoUtil.getPageDto(EasySaTokenListener.ONLINE_USERS, page, limit);
|
||||
List<OnlineUser> pageList = (List<OnlineUser>) pageDto.getPageList();
|
||||
pageList.forEach(onlineUser -> {
|
||||
String keyLastActivityTime = StpUtil.getStpLogic().splicingKeyLastActiveTime(onlineUser.getTokenValue());
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
package com.laker.admin.module.sys.mapper;
|
||||
|
||||
import com.laker.admin.module.sys.entity.SysRole;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.laker.admin.module.sys.entity.SysRole;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Mapper 接口
|
||||
* Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author laker
|
||||
* @since 2021-08-11
|
||||
*/
|
||||
public interface SysRoleMapper extends BaseMapper<SysRole> {
|
||||
|
||||
List<String> getRoleCodesByUserIdAndRoleType(Long userId, Integer roleType);
|
||||
}
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
package com.laker.admin.module.sys.mapper;
|
||||
|
||||
import com.laker.admin.module.sys.entity.SysRolePower;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.laker.admin.module.sys.entity.SysRolePower;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Mapper 接口
|
||||
* Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author laker
|
||||
* @since 2021-08-11
|
||||
*/
|
||||
public interface SysRolePowerMapper extends BaseMapper<SysRolePower> {
|
||||
|
||||
List<String> getPowerCodesByUserIdAndPowerType(Long userId, Integer type);
|
||||
}
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.laker.admin.module.sys.mapper.SysRoleMapper">
|
||||
|
||||
<!-- 通用查询映射结果 -->
|
||||
<resultMap id="BaseResultMap" type="com.laker.admin.module.sys.entity.SysRole">
|
||||
<id column="role_id" property="roleId" />
|
||||
<result column="role_name" property="roleName" />
|
||||
<result column="role_code" property="roleCode" />
|
||||
<result column="details" property="details" />
|
||||
<result column="enable" property="enable" />
|
||||
<result column="create_time" property="createTime" />
|
||||
<id column="role_id" property="roleId"/>
|
||||
<result column="role_name" property="roleName"/>
|
||||
<result column="role_code" property="roleCode"/>
|
||||
<result column="details" property="details"/>
|
||||
<result column="enable" property="enable"/>
|
||||
<result column="create_time" property="createTime"/>
|
||||
</resultMap>
|
||||
|
||||
<!-- 通用查询结果列 -->
|
||||
@@ -17,4 +16,13 @@
|
||||
role_id, role_name, role_code, details, enable, create_time
|
||||
</sql>
|
||||
|
||||
<select id="getRoleCodesByUserIdAndRoleType" resultType="java.lang.String">
|
||||
select role_code
|
||||
from sys_role r
|
||||
inner join sys_user_role ur on ur.role_id = r.role_id
|
||||
where ur.user_id = #{userId}
|
||||
<if test="roleType != null">
|
||||
and r.role_type = #{roleType}
|
||||
</if>
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.laker.admin.module.sys.mapper.SysRolePowerMapper">
|
||||
|
||||
<!-- 通用查询映射结果 -->
|
||||
<resultMap id="BaseResultMap" type="com.laker.admin.module.sys.entity.SysRolePower">
|
||||
<id column="id" property="id" />
|
||||
<result column="role_id" property="roleId" />
|
||||
<result column="power_id" property="powerId" />
|
||||
<id column="id" property="id"/>
|
||||
<result column="role_id" property="roleId"/>
|
||||
<result column="power_id" property="powerId"/>
|
||||
</resultMap>
|
||||
|
||||
<!-- 通用查询结果列 -->
|
||||
@@ -14,4 +13,15 @@
|
||||
id, role_id, power_id
|
||||
</sql>
|
||||
|
||||
<select id="getPowerCodesByUserIdAndPowerType" resultType="java.lang.String">
|
||||
select p.power_code
|
||||
from sys_role_power rp
|
||||
inner join sys_power p on rp.power_id = p.menu_id
|
||||
inner join sys_role r on rp.role_id = r.role_id
|
||||
where p.type = #{type}
|
||||
and rp.role_id in
|
||||
(select ur.role_id
|
||||
from sys_user_role ur
|
||||
where ur.user_id = #{userId})
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.laker.admin.framework.ext.step;
|
||||
|
||||
import cn.hutool.core.thread.ThreadUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import com.laker.admin.framework.ext.actuator.step.EasyMeterRegistry;
|
||||
import com.laker.admin.framework.ext.actuator.step.StepCounterTuple;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.junit.Test;
|
||||
@@ -18,12 +20,12 @@ public class StepCounterTest {
|
||||
@SneakyThrows
|
||||
@Test
|
||||
public void test() {
|
||||
LakerMeterRegistry lakerMeterRegistry = new LakerMeterRegistry(Duration.ofSeconds(10));
|
||||
EasyMeterRegistry easyMeterRegistry = new EasyMeterRegistry(Duration.ofSeconds(10));
|
||||
|
||||
for (int i = 0; i < 30; i++) {
|
||||
|
||||
ThreadUtil.execute(() -> {
|
||||
StepCounterTuple counter = lakerMeterRegistry.counter(RandomUtil.randomString("qwertyuiopasdfghjklzxcvbnm", 1));
|
||||
StepCounterTuple counter = easyMeterRegistry.counter(RandomUtil.randomString("qwertyuiopasdfghjklzxcvbnm", 1));
|
||||
counter.increment1(1);
|
||||
counter.increment2(2);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user