findByUserId(Integer userId);
+}
diff --git a/src/main/java/com/yunhai/userhome/service/AppRemoteService.java b/src/main/java/com/yunhai/userhome/service/AppRemoteService.java
new file mode 100644
index 0000000..e9b4278
--- /dev/null
+++ b/src/main/java/com/yunhai/userhome/service/AppRemoteService.java
@@ -0,0 +1,24 @@
+package com.yunhai.userhome.service;
+
+import com.yunhai.platform.utils.model.BoaApp;
+import com.yunhai.platform.utils.model.BoaAppType;
+import com.yunhai.platform.utils.model.BoaUser;
+
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * 远程「用户可访问应用」数据服务(跨仓 UserBase)。
+ *
+ * 实现 {@link com.yunhai.userhome.service.impl.OpenApiAppRemoteServiceImpl}
+ * 经 {@code YschBaseOpenApi.getUserApp} 实时拉取(自动带 yh-app-auth 签名),
+ * 数据权威在 UserBase;本模块不冗余应用元数据。
+ */
+public interface AppRemoteService {
+
+ /** 取当前用户可访问的应用全集(按应用类型分组,BoaAppType.id/name/apps)。 */
+ List getUserApps(BoaUser user);
+
+ /** 按应用ID取单个应用(在已拉取的全集中查找,避免额外跨仓请求)。 */
+ Optional getAppById(BoaUser user, Integer appId);
+}
diff --git a/src/main/java/com/yunhai/userhome/service/IUserCurrentRoleService.java b/src/main/java/com/yunhai/userhome/service/IUserCurrentRoleService.java
new file mode 100644
index 0000000..3561658
--- /dev/null
+++ b/src/main/java/com/yunhai/userhome/service/IUserCurrentRoleService.java
@@ -0,0 +1,17 @@
+package com.yunhai.userhome.service;
+
+import com.yunhai.userhome.entity.UserCurrentRole;
+
+import java.util.Optional;
+
+/**
+ * 用户当前激活角色(user_current_role 表读写)。
+ */
+public interface IUserCurrentRoleService {
+
+ /** 取用户当前角色(可能不存在)。 */
+ Optional findById(Integer userId);
+
+ /** 保存/覆盖用户当前角色。 */
+ void save(UserCurrentRole role);
+}
diff --git a/src/main/java/com/yunhai/userhome/service/UsedAppService.java b/src/main/java/com/yunhai/userhome/service/UsedAppService.java
new file mode 100644
index 0000000..790867d
--- /dev/null
+++ b/src/main/java/com/yunhai/userhome/service/UsedAppService.java
@@ -0,0 +1,39 @@
+package com.yunhai.userhome.service;
+
+import com.yunhai.platform.utils.model.BoaApp;
+import com.yunhai.platform.utils.model.BoaUser;
+import com.yunhai.userhome.entity.UsedApp;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * 本地「常用应用」服务(used_app 表读写,对齐旧 UserHome 四维结构)。
+ */
+public interface UsedAppService {
+
+ /** 覆盖式保存(同 setId+type+roleType+schId 唯一,存在则更新)。 */
+ void save(UsedApp usedApp);
+
+ /**
+ * 按「学校+用户+角色」取生效的常用设置(多级:用户 > 学校 > 系统;schId==uid 直接取学校级)。
+ *
+ * @param schId 学校ID(0 时按用户主学校推断后由调用方处理)
+ * @param uid 用户ID(isSch 时为 schId)
+ * @param roleType 角色类型(用户级 -1)
+ */
+ Optional findById(Integer schId, Integer uid, Integer roleType);
+
+ /** 取常用应用详情列表(BoaApp,按 appIds 顺序从可访问全集过滤)。 */
+ List getUsedAppList(Integer schId, Integer uid, Integer roleType, BoaUser user);
+
+ /** 用户级保存(type=USER, roleType=-1)。 */
+ void saveUserId(UsedApp usedApp);
+
+ /** 用户级常用(type=USER, roleType=-1)。 */
+ Optional findByUserId(Integer uid);
+
+ /** 常用应用精简映射(id/name/icon/url),用于 getUsedAppById / getAppByIds。 */
+ List