package cn.stylefeng.roses.kernel.system.api.format; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.spring.SpringUtil; import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser; import cn.stylefeng.roses.kernel.dsctn.api.context.CurrentDataSourceContext; import cn.stylefeng.roses.kernel.rule.constants.TenantConstants; import cn.stylefeng.roses.kernel.rule.format.BaseSimpleFieldFormatProcess; import cn.stylefeng.roses.kernel.system.api.UserServiceApi; import cn.stylefeng.roses.kernel.system.api.pojo.user.SysUserDTO; import static cn.stylefeng.roses.kernel.rule.constants.RuleConstants.TENANT_DB_PREFIX; /** * Json响应的针对用户的处理 * * @author fengshuonan * @date 2022/9/7 10:09 */ public class UserFormatProcess extends BaseSimpleFieldFormatProcess { /** * 未知人员的名称 */ private static final String NOT_FIND_USER_NAME = "未知人员"; @Override public Class getItemClass() { return Long.class; } @Override public Object simpleItemFormat(Object businessId) { LoginUser loginUserNullable = LoginContext.me().getLoginUserNullable(); if (loginUserNullable == null) { return execute(businessId); } // 如果当前登录用户有租户标识 try { String tenantCode = loginUserNullable.getTenantCode(); if (StrUtil.isNotEmpty(tenantCode) && !TenantConstants.MASTER_DATASOURCE_NAME.equals(tenantCode)) { CurrentDataSourceContext.setDataSourceName(TENANT_DB_PREFIX + tenantCode); } return execute(businessId); } finally { // 清除数据源信息 CurrentDataSourceContext.clearDataSourceName(); } } /** * 业务逻辑执行 * * @author fengshuonan * @date 2022/11/10 1:29 */ private Object execute(Object businessId) { Long userId = Convert.toLong(businessId); UserServiceApi bean = SpringUtil.getBean(UserServiceApi.class); SysUserDTO userInfoByUserId = bean.getUserInfoByUserId(userId); if (userInfoByUserId == null) { return NOT_FIND_USER_NAME; } return userInfoByUserId.getRealName(); } }