This commit is contained in:
那些花儿
2025-07-28 10:48:38 +08:00
parent 030cf7cc4c
commit 3b51ed7a51
450 changed files with 82310 additions and 1213 deletions
@@ -0,0 +1,62 @@
package com.budwk.app.sys.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import com.budwk.app.sys.services.SysUserService;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletRequest;
@IocBean
@At("/platform/v4")
public class SysHomeV4Controller {
@Inject
private Dao dao;
@Inject
private SysUserService sysUserService;
@At("")
@Ok("beetl:/layouts/v4/platform.html")
@SaCheckLogin
public void index() {
}
/**
* 首页门户
*/
@At("/home")
@Ok("beetl:/layouts/v4/home.html")
@SaCheckLogin
public void home() {
}
/**
* 应用中心
*/
@At("/apps")
@Ok("beetl:/layouts/v4/apps.html")
@SaCheckLogin
public void apps() {
}
/**
* 子系统
* @param appId 应用ID
* @param request 请求
*/
@At("/subApp")
@Ok("beetl:/layouts/platform.html")
@SaCheckLogin
public void subApp(@Param("appId") String appId, HttpServletRequest request) {
}
}
@@ -9,6 +9,7 @@ import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.pinyin.PinyinUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.result.Result;
import com.budwk.app.sys.models.Sys_menu;
@@ -170,6 +171,8 @@ public class SysMenuController {
sysMenu.setShowit(true);
sysMenu.setDisabled(false);
sysMenu.setCreatedBy(SecurityUtil.getUserId());
sysMenu.setInitialPinyinName(PinyinUtil.getFirstLetter(sysMenu.getName().charAt(0)));
sysMenuService.savePlus(sysMenu, Strings.sNull(parentId), sysMenu.getButtons());
// sysMenuService.save(sysMenu, Strings.sNull(parentId), buttons);
sysMenuService.clearCache();
@@ -247,6 +250,7 @@ public class SysMenuController {
sysMenu.setShowit(true);
sysMenu.setDisabled(false);
sysMenu.setCreatedBy(SecurityUtil.getUserId());
sysMenu.setInitialPinyinName(PinyinUtil.getFirstLetter(sysMenu.getName().charAt(0)));
sysMenuService.editPlus(sysMenu, sysMenu.getParentId(), buttons);
sysMenuService.clearCache();
@@ -3,10 +3,12 @@ package com.budwk.app.sys.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.annotation.SLog;
import com.budwk.app.base.result.Result;
import com.budwk.app.base.utils.PageUtil;
import com.budwk.app.base.utils.PwdUtil;
import com.budwk.app.base.utils.SysMenuUtil;
import com.budwk.app.sys.models.Sys_menu;
import com.budwk.app.sys.models.Sys_user;
import com.budwk.app.sys.services.SysMenuService;
@@ -325,4 +327,56 @@ public class SysUserController {
sysUserService.deleteCache(SecurityUtil.getUserId());
return Result.success();
}
/**
* 获取子应用菜单
*
* @param appId
* @return
*/
@At
@Ok("json")
@SaCheckLogin
public Result subAppMenus(@Param("appId") String appId) {
List<Sys_menu> menus = sysUserService.getMenus(SecurityUtil.getUserId());
List<Sys_menu> list = Sys_menu.createTreeMenus(menus, appId);
return Result.success(list);
}
/**
* 根据请求地址查询根菜单ID
*
* @return
*/
@At
@Ok("json")
@SaCheckLogin
public Result rootMenuByPath(@Param("pathname") String pathname, HttpServletResponse response) {
if (StrUtil.isBlank(pathname)) {
}
Sys_menu menu = sysMenuService.fetch(Cnd.where(Sys_menu::getHref, "=", pathname));
if (menu == null) {
return Result.success();
}
List<Sys_menu> menus = sysUserService.getMenus(SecurityUtil.getUserId());
Sys_menu rootMenu = SysMenuUtil.getRootMenu(menus, menu);
return Result.success().addData(rootMenu);
}
/**
* 获取当前登录用户信息
*
* @return
*/
@At
@Ok("json")
@SaCheckLogin
public Result getLogonUser() {
Sys_user userAndMenuById = sysUserService.getUserAndMenuById(SecurityUtil.getUserId());
return Result.success().addData(userAndMenuById);
}
}
@@ -0,0 +1,188 @@
package com.budwk.app.sys.controller.v4;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.hutool.core.util.StrUtil;
import com.budwk.app.base.result.Result;
import com.budwk.app.sys.models.Sys_module;
import com.budwk.app.sys.models.Sys_user_favorite_app;
import com.budwk.app.sys.services.SysMenuService;
import com.budwk.app.web.commons.auth.utils.SecurityUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.nutz.aop.interceptor.ioc.TransAop;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.aop.Aop;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@IocBean
@At("/platform/v4/apps")
@Api(value = "应用中心接口", tags = "应用中心接口")
public class SysV4AppsController {
@Inject
private Dao dao;
@Inject
private SysMenuService sysMenuService;
@At("/categories")
@Ok("json")
@SaCheckLogin
@ApiOperation("获取应用分类")
public Result categories() {
List<Sys_module> list = dao.query(Sys_module.class, Cnd.where(Sys_module::getPlatform, "=", "PC").asc(Sys_module::getSortNum));
List<Map<String, Object>> categories = list.stream().map(module -> {
Map<String, Object> category = new HashMap<>();
category.put("id", module.getId());
category.put("name", module.getName());
category.put("icon", module.getFaIcon());
return category;
}).toList();
return Result.success("获取应用分类成功").addData(categories);
}
@At("/list")
@Ok("json:full")
@SaCheckLogin
@ApiOperation("获取应用列表")
public Result list(@Param("categoryId") String categoryId, @Param("letter") String letter, @Param("keyword") String keyword, HttpServletRequest req) {
Sql sql = Sqls.create("""
SELECT
m.id,
m.name,
m.href,
m.icon,
m.picIcon,
CASE
WHEN f.userId IS NOT NULL THEN
1 ELSE 0
END AS isFavorite
FROM
sys_menu m
LEFT JOIN sys_user_favorite_app f ON m.id = f.appId
AND f.userId = @userId
$condition
""");
Cnd cnd = Cnd.NEW();
cnd.and("m.platform", "=", "PC");
cnd.and("m.disabled", "=", false);
cnd.and(Cnd.exps("m.parentId", "is", null).or("m.parentId", "=", ""));
cnd.andEX("m.moduleId", "=", categoryId);
cnd.asc("m.location");
if (StrUtil.isNotBlank(keyword)) {
cnd.where().andLike("m.name", keyword);
}
cnd.andEX("m.initialPinyinName", "=", letter);
sql.setCondition(cnd);
sql.setParam("userId", SecurityUtil.getUserId());
List<NutMap> list = sysMenuService.listMap(sql);
return Result.success(list);
}
@At("/recommended")
@Ok("json")
@SaCheckLogin
@ApiOperation("获取推荐应用")
public Result recommended(HttpServletRequest req) {
// // 这里简单地返回前6个应用作为推荐应用
// int recommendCount = Math.min(6, APPS.size());
// List<Map<String, Object>> recommendedApps = new ArrayList<>();
//
// // 获取用户收藏状态
// String userId = getCurrentUserId(req);
// Set<String> favorites = FAVORITES.getOrDefault(userId, new HashSet<>());
//
// // 添加收藏状态
// for (int i = 0; i < recommendCount; i++) {
// Map<String, Object> app = APPS.get(i);
// Map<String, Object> appWithFavorite = new HashMap<>(app);
// String appId = String.valueOf(appWithFavorite.get("id"));
// appWithFavorite.put("isFavorite", favorites.contains(appId));
// recommendedApps.add(appWithFavorite);
// }
//
// Map<String, Object> data = new HashMap<>();
// data.put("list", recommendedApps);
// data.put("total", recommendedApps.size());
// data.put("pageNumber", 1);
// data.put("pageSize", recommendedApps.size());
// data.put("totalPage", 1);
return Result.success("获取推荐应用成功");
}
@At("/favorite")
@Ok("json:full")
@SaCheckLogin
@ApiOperation("获取收藏的应用")
public Result favorite(HttpServletRequest req) {
Sql sql = Sqls.create("""
SELECT
m.id,
m.name,
m.href,
m.icon,
m.picIcon,
1 AS isFavorite
FROM
sys_user_favorite_app f
INNER JOIN
sys_menu m
ON
f.appId = m.id
WHERE
f.userId = @userId
AND m.platform = 'PC'
AND m.disabled = 0
ORDER BY
m.location ASC;
""");
sql.setParam("userId", SecurityUtil.getUserId());
List<NutMap> list = sysMenuService.listMap(sql);
return Result.success(list);
}
@At("/addFavorite")
@Ok("json")
@SaCheckLogin
@ApiOperation("添加收藏")
@Aop(TransAop.READ_COMMITTED)
public Result addFavorite(@Param("appId") String appId, HttpServletRequest req) {
if (Strings.isBlank(appId)) {
return Result.error("应用ID不能为空");
}
dao.clear(Sys_user_favorite_app.class, Cnd.where(Sys_user_favorite_app::getAppId, "=", appId).and(Sys_user_favorite_app::getUserId, "=", SecurityUtil.getUserId()));
Sys_user_favorite_app app = new Sys_user_favorite_app();
app.setAppId(appId);
app.setUserId(SecurityUtil.getUserId());
dao.insert(app);
return Result.success("收藏成功");
}
@At("/removeFavorite")
@Ok("json")
@SaCheckLogin
@ApiOperation("取消收藏")
public Result removeFavorite(@Param("appId") String appId, HttpServletRequest req) {
if (Strings.isBlank(appId)) {
return Result.error("应用ID不能为空");
}
dao.clear(Sys_user_favorite_app.class, Cnd.where(Sys_user_favorite_app::getAppId, "=", appId).and(Sys_user_favorite_app::getUserId, "=", SecurityUtil.getUserId()));
return Result.success("取消收藏成功");
}
}