feat(property): 新增入驻员工登录功能

This commit is contained in:
2025-09-05 17:55:47 +08:00
parent 7cef50cc19
commit 87f5ee97fa
43 changed files with 618 additions and 117 deletions

View File

@@ -35,6 +35,11 @@
<artifactId>ruoyi-api-system</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>property-api</artifactId>
</dependency>
<!-- RuoYi Common Redis-->
<dependency>
<groupId>org.dromara</groupId>

View File

@@ -8,10 +8,13 @@ import org.dromara.common.core.service.PermissionService;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.property.api.model.LoginResidentPerson;
import org.dromara.system.api.model.LoginUser;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
/**
* sa-token 权限管理实现类
@@ -26,15 +29,30 @@ public class SaPermissionImpl implements StpInterface {
@Override
public List<String> getPermissionList(Object loginId, String loginType) {
LoginUser loginUser = LoginHelper.getLoginUser();
if (ObjectUtil.isNull(loginUser) || !loginUser.getLoginId().equals(loginId)) {
LoginResidentPerson loginResidentPerson = LoginHelper.getLoginResident();
// 使用Objects.equals进行null安全的比较
boolean isUserMatch = ObjectUtil.isNotNull(loginUser) && Objects.equals(loginUser.getLoginId(), loginId);
boolean isResidentMatch = ObjectUtil.isNotNull(loginResidentPerson) && Objects.equals(loginResidentPerson.getLoginId(), loginId);
if (isUserMatch) {
// 用户匹配时的逻辑
PermissionService permissionService = getPermissionService();
if (ObjectUtil.isNotNull(permissionService)) {
List<String> list = StringUtils.splitList(loginId.toString(), ":");
return new ArrayList<>(permissionService.getMenuPermission(Long.parseLong(list.get(1))));
} else {
if (ObjectUtil.isNull(permissionService)) {
throw new ServiceException("PermissionService 实现类不存在");
}
List<String> parts = StringUtils.splitList(loginId.toString(), ":");
return new ArrayList<>(permissionService.getMenuPermission(Long.parseLong(parts.get(1))));
} else if (isResidentMatch) {
// 居民匹配时的逻辑
return Arrays.asList(
"resident:person:list",
"resident:person:add",
"resident:person:query",
"resident:person:edit",
"resident:person:remove"
);
}
UserType userType = UserType.getUserType(loginUser.getUserType());
if (userType == UserType.APP_USER) {
// 其他端 自行根据业务编写

View File

@@ -11,6 +11,7 @@ import lombok.NoArgsConstructor;
import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.enums.UserType;
import org.dromara.property.api.model.LoginResidentPerson;
import org.dromara.system.api.model.LoginUser;
import java.util.Set;
@@ -83,6 +84,57 @@ public class LoginHelper {
return (T) session.get(LOGIN_USER_KEY);
}
/**
* 入驻员工
*/
private static final String UNIT_KEY = "unitId";
public static final String UNIT_NAME_KEY = "unitName";
private static final String RESIDENT_PERSON_KEY = "residentPerson";
/**
* 登录系统 基于 设备类型
* 针对相同用户体系不同设备
*
* @param loginUser 登录用户信息
* @param model 配置参数
*/
public static void residentLogin(LoginResidentPerson loginUser, SaLoginParameter model) {
model = ObjectUtil.defaultIfNull(model, new SaLoginParameter());
StpUtil.login(loginUser.getLoginId(),
model.setExtra(TENANT_KEY, loginUser.getTenantId())
.setExtra(USER_KEY, loginUser.getUserId())
.setExtra(USER_NAME_KEY, loginUser.getUsername())
.setExtra(UNIT_KEY, loginUser.getUnitId())
.setExtra(UNIT_NAME_KEY, loginUser.getUnitName())
);
StpUtil.getTokenSession().set(RESIDENT_PERSON_KEY, loginUser);
}
/**
* 获取用户(多级缓存)
*/
@SuppressWarnings("unchecked cast")
public static <T extends LoginResidentPerson> T getLoginResident() {
SaSession session = StpUtil.getTokenSession();
if (ObjectUtil.isNull(session)) {
return null;
}
return (T) session.get(RESIDENT_PERSON_KEY);
}
/**
* 获取用户基于token
*/
@SuppressWarnings("unchecked cast")
public static <T extends LoginResidentPerson> T getLoginResident(String token) {
SaSession session = StpUtil.getTokenSessionByToken(token);
if (ObjectUtil.isNull(session)) {
return null;
}
return (T) session.get(RESIDENT_PERSON_KEY);
}
/**
* 获取用户id
*/