权限修改

This commit is contained in:
张松 2025-05-26 13:52:00 +08:00
parent c32ecdf871
commit 073b561f40
11 changed files with 218 additions and 22 deletions

View File

@ -3,12 +3,14 @@ package com.czg.controller.admin;
import com.czg.account.dto.menu.MenuAddDTO;
import com.czg.account.dto.menu.MenuDelDTO;
import com.czg.account.dto.menu.MenuEditDTO;
import com.czg.account.entity.CashMenu;
import com.czg.account.entity.SysMenu;
import com.czg.account.service.SysMenuService;
import com.czg.account.vo.MenuVO;
import com.czg.annotation.SaAdminCheckPermission;
import com.czg.annotation.SaAdminCheckRole;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -35,6 +37,16 @@ public class MenuController {
return CzgResult.success(menuService.getMenu());
}
/**
* 收银机菜单
* @return 所有菜单
*/
@GetMapping("/list/cash")
public CzgResult<List<CashMenu>> all() {
return CzgResult.success(menuService.getCashAll());
}
/**
* 获取所有菜单
* @return 菜单结构

View File

@ -33,6 +33,10 @@ public class MyStpLogic {
public static final StpLogic CLIENT_LOGIC = new StpLogic("client");
public static final StpLogic ADMIN_LOGIC = new StpLogic("admin");
public Object isPC() {
return "PC".equals(SaHolder.getRequest().getHeader("Platformtype"));
}
public enum LoginType {
MANAGER, USER, STAFF
}

View File

@ -0,0 +1,32 @@
package com.czg.account.dto;
import java.io.Serializable;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 实体类
*
* @author zs
* @since 2025-05-26
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CashMenuDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private Long menuId;
private String name;
private String component;
private String path;
}

View File

@ -0,0 +1,43 @@
package com.czg.account.entity;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 实体类
*
* @author zs
* @since 2025-05-26
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("sys_cash_menu")
public class CashMenu implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Long menuId;
private String name;
private String component;
private String path;
private String icon;
private String apiInfo;
}

View File

@ -0,0 +1,14 @@
package com.czg.account.service;
import com.mybatisflex.core.service.IService;
import com.czg.account.entity.CashMenu;
/**
* 服务层
*
* @author zs
* @since 2025-05-26
*/
public interface CashMenuService extends IService<CashMenu> {
}

View File

@ -2,6 +2,7 @@ package com.czg.account.service;
import com.czg.account.dto.menu.MenuAddDTO;
import com.czg.account.dto.menu.MenuEditDTO;
import com.czg.account.entity.CashMenu;
import com.czg.account.entity.SysMenu;
import com.czg.account.vo.MenuVO;
import com.mybatisflex.core.service.IService;
@ -24,4 +25,6 @@ public interface SysMenuService extends IService<SysMenu> {
Boolean edit(MenuEditDTO menuEditDTO);
List<CashMenu> getCashAll();
}

View File

@ -0,0 +1,14 @@
package com.czg.service.account.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.account.entity.CashMenu;
/**
* 映射层
*
* @author zs
* @since 2025-05-26
*/
public interface CashMenuMapper extends BaseMapper<CashMenu> {
}

View File

@ -0,0 +1,18 @@
package com.czg.service.account.service.impl;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.account.entity.CashMenu;
import com.czg.account.service.CashMenuService;
import com.czg.service.account.mapper.CashMenuMapper;
import org.springframework.stereotype.Service;
/**
* 服务层实现
*
* @author zs
* @since 2025-05-26
*/
@Service
public class CashMenuServiceImpl extends ServiceImpl<CashMenuMapper, CashMenu> implements CashMenuService{
}

View File

@ -6,8 +6,10 @@ import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import com.czg.account.dto.menu.MenuAddDTO;
import com.czg.account.dto.menu.MenuEditDTO;
import com.czg.account.entity.CashMenu;
import com.czg.account.entity.SysMenu;
import com.czg.account.entity.SysUsersRoles;
import com.czg.account.service.CashMenuService;
import com.czg.account.service.SysMenuService;
import com.czg.account.vo.MenuVO;
import com.czg.exception.ApiNotPrintException;
@ -35,6 +37,8 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
private SysMenuMapper sysMenuMapper;
@Resource
private SysUsersRolesMapper sysUsersRolesMapper;
@Resource
private CashMenuService cashMenuService;
@Override
public List<MenuVO> getMenu() {
@ -177,4 +181,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
}
return permissions;
}
@Override
public List<CashMenu> getCashAll() {
return cashMenuService.list();
}
}

View File

@ -9,9 +9,11 @@ import com.czg.account.dto.menu.MenuApiInfoItemDTO;
import com.czg.account.dto.role.RoleAddDTO;
import com.czg.account.dto.role.RoleEditDTO;
import com.czg.account.dto.role.RolePermissionDTO;
import com.czg.account.entity.CashMenu;
import com.czg.account.entity.SysMenu;
import com.czg.account.entity.SysRole;
import com.czg.account.entity.SysRolesMenus;
import com.czg.account.service.CashMenuService;
import com.czg.account.service.SysMenuService;
import com.czg.account.service.SysRoleService;
import com.czg.account.service.SysRolesMenusService;
@ -43,6 +45,8 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> imp
private SysMenuService sysMenuService;
@Resource
private SysRolesMenusService sysRolesMenusService;
@Resource
private CashMenuService cashMenuService;
@Override
public List<SysRole> getByUserId(Long id) {
@ -125,20 +129,57 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> imp
}
public boolean addMenu(Long roleId, List<Long> menuIds, boolean isAdmin) {
List<SysMenu> sysMenuList = sysMenuService.queryChain().in(SysMenu::getMenuId, menuIds).list();
if (sysMenuList.size() != menuIds.size()) {
throw new ApiNotPrintException("菜单id包含错误id");
}
ArrayList<MenuApiInfoItemDTO> apiPathList = new ArrayList<>();
sysMenuList.forEach(item -> {
if (StrUtil.isNotBlank(item.getApiInfo())) {
List<MenuApiInfoItemDTO> itemDTOS = JSONArray.parseArray(item.getApiInfo()).toJavaList(MenuApiInfoItemDTO.class);
if (!itemDTOS.isEmpty()) {
apiPathList.addAll(itemDTOS);
ArrayList<SysRolesMenus> rolesMenus = new ArrayList<>();
if (isAdmin) {
List<SysMenu> sysMenuList = sysMenuService.queryChain().in(SysMenu::getMenuId, menuIds).list();
if (sysMenuList.size() != menuIds.size()) {
throw new ApiNotPrintException("菜单id包含错误id");
}
sysMenuList.forEach(item -> {
if (StrUtil.isNotBlank(item.getApiInfo())) {
List<MenuApiInfoItemDTO> itemDTOS = JSONArray.parseArray(item.getApiInfo()).toJavaList(MenuApiInfoItemDTO.class);
if (!itemDTOS.isEmpty()) {
apiPathList.addAll(itemDTOS);
}
}
});
for (SysMenu sysMenu : sysMenuList) {
long count = sysRolesMenusService.count(new QueryWrapper().eq(SysRolesMenus::getMenuId, sysMenu.getMenuId())
.eq(SysRolesMenus::getRoleId, roleId)
.eq(SysRolesMenus::getType, isAdmin ? 0 : 1));
if (count == 0) {
rolesMenus.add(new SysRolesMenus(sysMenu.getMenuId(), roleId, isAdmin ? 0 : 1));
}
}
});
}else {
List<CashMenu> list = cashMenuService.queryChain().in(CashMenu::getMenuId, menuIds).list();
if (list.size() != menuIds.size()) {
throw new ApiNotPrintException("菜单id包含错误id");
}
list.forEach(item -> {
if (StrUtil.isNotBlank(item.getApiInfo())) {
List<MenuApiInfoItemDTO> itemDTOS = JSONArray.parseArray(item.getApiInfo()).toJavaList(MenuApiInfoItemDTO.class);
if (!itemDTOS.isEmpty()) {
apiPathList.addAll(itemDTOS);
}
}
});
for (CashMenu sysMenu : list) {
long count = sysRolesMenusService.count(new QueryWrapper().eq(SysRolesMenus::getMenuId, sysMenu.getMenuId())
.eq(SysRolesMenus::getRoleId, roleId)
.eq(SysRolesMenus::getType, isAdmin ? 0 : 1));
if (count == 0) {
rolesMenus.add(new SysRolesMenus(sysMenu.getMenuId(), roleId, isAdmin ? 0 : 1));
}
}
}
if (!apiPathList.isEmpty()) {
String string = buildLikeSql(apiPathList, "url");
@ -146,20 +187,19 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> imp
wrapper.where(string);
List<SysMenu> sysMenus = sysMenuService.list(wrapper);
if (!sysMenus.isEmpty()) {
sysMenuList.addAll(sysMenus);
for (SysMenu sysMenu : sysMenus) {
long count = sysRolesMenusService.count(new QueryWrapper().eq(SysRolesMenus::getMenuId, sysMenu.getMenuId())
.eq(SysRolesMenus::getRoleId, roleId)
.eq(SysRolesMenus::getType, isAdmin ? 0 : 1));
if (count == 0) {
rolesMenus.add(new SysRolesMenus(sysMenu.getMenuId(), roleId, isAdmin ? 0 : 1));
}
}
}
}
ArrayList<SysRolesMenus> rolesMenus = new ArrayList<>();
for (SysMenu sysMenu : sysMenuList) {
long count = sysRolesMenusService.count(new QueryWrapper().eq(SysRolesMenus::getMenuId, sysMenu.getMenuId())
.eq(SysRolesMenus::getRoleId, roleId)
.eq(SysRolesMenus::getType, isAdmin ? 0 : 1));
if (count == 0) {
rolesMenus.add(new SysRolesMenus(sysMenu.getMenuId(), roleId, isAdmin ? 0 : 1));
}
}
return sysRolesMenusService.saveBatch(rolesMenus);
return rolesMenus.isEmpty() || sysRolesMenusService.saveBatch(rolesMenus);
}
@Override

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.czg.service.account.mapper.CashMenuMapper">
</mapper>