Files
UserhomeService/src/main/java/com/yunhai/userhome/controller/api/UsedAppController.java
T
chenxing b621c959cf
build / build-push (push) Successful in 13m48s
feat(appicon): 应用图标键下发出栏(YschAppIcons 10-04 轮 P2 后端)
- AppIconKeyService/AppIconEntryVo(新):icon_key/icon_color 资产库键值读取
- UserController:getUserApp 返回体加图标键注入(withIconKeys)
- UserSettingsController:用户设置应用列表注入 iconKey/iconColor(未配置 null 走原 img 回退)
- UsedAppController/UsedAppServiceImpl:常用应用列表同口径注入
依据:根目录《AppIcon资产库落地-执行报告-20261004.md》P2 数据侧/管理端
2026-10-06 20:21:04 +08:00

164 lines
6.9 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.yunhai.userhome.controller.api;
import com.yunhai.platform.utils.model.BoaApp;
import com.yunhai.platform.utils.model.BoaAppType;
import com.yunhai.platform.utils.model.BoaUser;
import com.yunhai.userhome.config.Config;
import com.yunhai.userhome.entity.UsedApp;
import com.yunhai.userhome.model.AppIconEntryVo;
import com.yunhai.userhome.model.SetType;
import com.yunhai.userhome.service.AppIconKeyService;
import com.yunhai.userhome.service.AppRemoteService;
import com.yunhai.userhome.service.UsedAppService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 常用应用接口(CAS 登录态,路径 {@code /{platform}/usedapp/}),对齐旧 UserHome契约
*/
@RestController
@RequestMapping(value = Config.API_PATH + "/usedapp/")
public class UsedAppController {
@Autowired
private UsedAppService usedAppService;
@Autowired
private AppRemoteService appRemoteService;
@Autowired
private AppIconKeyService appIconKeyService;
/**
* 取当前角色生效的常用应用(BoaApp 详情,按 appIds 顺序)。
*
* @param roleType 角色类型
* @param schId 学校ID(0 时按用户主学校/主归属组推断)
* @param isSch 是否学校级(超管设置学校常用时 true,isSch 时 uid=schId)
*/
@GetMapping("getUsedApp")
public List<BoaApp> getUsedApp(BoaUser authUserWithDept, Integer roleType, Integer schId,
@RequestParam(name = "isSch", defaultValue = "false") Boolean isSch) {
if (schId == null || schId == 0) {
schId = resolveSchId(authUserWithDept);
}
Integer uid = authUserWithDept.getId();
if (authUserWithDept.getType() != null && authUserWithDept.getType() == 1) {
isSch = false; // 超管设置学校常用时走用户维度
}
if (isSch) {
uid = schId;
}
return usedAppService.getUsedAppList(schId, uid, roleType, authUserWithDept);
}
/**
* 覆盖式保存常用应用(≤8 由前端控制)。
* 参数:appIds(逗号分隔)、type(0系统/1学校/2用户)、roleType、schId;超管强制 type=0。
*/
@PostMapping("saveUsedApp")
public void saveUsedApp(BoaUser authUserWithDept, @RequestBody Map<String, Object> params) {
String appIds = params.get("appIds") == null ? "" : String.valueOf(params.get("appIds"));
Integer type = params.get("type") == null ? SetType.USER.id()
: Integer.valueOf(String.valueOf(params.get("type")));
Integer roleType = params.get("roleType") == null ? -1
: Integer.valueOf(String.valueOf(params.get("roleType")));
Integer schId = params.get("schId") == null ? 0
: Integer.valueOf(String.valueOf(params.get("schId")));
if (schId == 0) {
schId = resolveSchId(authUserWithDept);
}
UsedApp usedApp = new UsedApp();
usedApp.setAppIds(appIds);
usedApp.setType(SetType.byId(type));
usedApp.setRoleType(roleType);
usedApp.setCDate(new Date());
usedApp.setCId(authUserWithDept.getId());
usedApp.setSchId(schId);
usedApp.setSetId(usedApp.getType() == SetType.SCHOOL ? schId : authUserWithDept.getId());
if (authUserWithDept.getType() != null && authUserWithDept.getType() == 1) {
// 超管保存 → 系统级
usedApp.setType(SetType.BASE);
usedApp.setSetId(authUserWithDept.getId());
}
usedAppService.save(usedApp);
}
/** 用户级常用(type=USER, roleType=-1)精简映射(id/name/icon/url)。 */
@GetMapping("getUsedAppById")
public List<Map<String, Object>> getUsedAppById(BoaUser authUserWithDept) {
return usedAppService.getUsedAppMapList(authUserWithDept, authUserWithDept.getId());
}
/** 用户级保存常用(type=USER, roleType=-1)。 */
@PostMapping("saveUsedAppById")
public void saveUsedAppById(BoaUser authUserWithDept, @RequestBody Map<String, Object> params) {
String appIds = params.get("appIds") == null ? "" : String.valueOf(params.get("appIds"));
UsedApp usedApp = new UsedApp();
usedApp.setAppIds(appIds);
usedApp.setType(SetType.USER);
usedApp.setRoleType(-1);
usedApp.setCDate(new Date());
usedApp.setCId(authUserWithDept.getId());
usedApp.setSetId(authUserWithDept.getId());
usedAppService.saveUserId(usedApp);
}
/** 按 appIds(逗号分隔)取应用精简映射(id/name/icon/url/iconKey/iconColor),在全集中查找。 */
@GetMapping("getAppByIds")
public List<Map<String, Object>> getAppByIds(BoaUser authUserWithDept, String appIds) {
List<Map<String, Object>> list = new ArrayList<>();
if (appIds == null || appIds.trim().isEmpty()) {
return list;
}
List<BoaApp> appList = appRemoteService.getUserApps(authUserWithDept).stream()
.filter(t -> t.getApps() != null)
.flatMap(t -> t.getApps().stream())
.collect(Collectors.toList());
for (String appId : appIds.split(",")) {
try {
Integer id = Integer.parseInt(appId.trim());
appList.stream().filter(a -> id.equals(a.getId())).findFirst().ifPresent(app -> {
Map<String, Object> m = new HashMap<>();
m.put("id", app.getId());
m.put("name", app.getName());
m.put("icon", app.getIcon());
m.put("url", app.getWebAddr());
// 矢量图标键(AppIcon 通道;未配置为 null,前端按空走原 img 回退)
AppIconEntryVo iconEntry = appIconKeyService.byId(app.getId());
m.put("iconKey", iconEntry == null ? null : iconEntry.getIconKey());
m.put("iconColor", iconEntry == null ? null : iconEntry.getIconColor());
list.add(m);
});
} catch (NumberFormatException ignore) {
// 脏数据容错
}
}
return list;
}
/** schId=0 时推断:主学校 → 主归属组(bureau)→ 0。 */
private Integer resolveSchId(BoaUser user) {
if (user.getSchool() != null) {
return user.getSchool().getId();
}
if (user.getBureau() != null) {
return user.getBureau().getId();
}
return 0;
}
}