diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/MenuController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/MenuController.java index 374f9c00..e937a41e 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/admin/MenuController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/MenuController.java @@ -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> all() { + return CzgResult.success(menuService.getCashAll()); + } + /** * 获取所有菜单 * @return 菜单结构 diff --git a/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/MyStpLogic.java b/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/MyStpLogic.java index 7f3bd85c..252a43f5 100644 --- a/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/MyStpLogic.java +++ b/cash-common/cash-common-sa-token/src/main/java/com/czg/sa/MyStpLogic.java @@ -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 } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/CashMenuDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/CashMenuDTO.java new file mode 100644 index 00000000..b0d947f2 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/CashMenuDTO.java @@ -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; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/CashMenu.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/CashMenu.java new file mode 100644 index 00000000..180547a1 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/CashMenu.java @@ -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; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/CashMenuService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/CashMenuService.java new file mode 100644 index 00000000..66419a85 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/CashMenuService.java @@ -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 { + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/SysMenuService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/SysMenuService.java index 01f2f56a..b396bb9c 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/service/SysMenuService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/SysMenuService.java @@ -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 { Boolean edit(MenuEditDTO menuEditDTO); + List getCashAll(); + } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/CashMenuMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/CashMenuMapper.java new file mode 100644 index 00000000..a688afad --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/CashMenuMapper.java @@ -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 { + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/CashMenuServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/CashMenuServiceImpl.java new file mode 100644 index 00000000..63e22631 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/CashMenuServiceImpl.java @@ -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 implements CashMenuService{ + +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysMenuServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysMenuServiceImpl.java index b4238750..b4318730 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysMenuServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysMenuServiceImpl.java @@ -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 impl private SysMenuMapper sysMenuMapper; @Resource private SysUsersRolesMapper sysUsersRolesMapper; + @Resource + private CashMenuService cashMenuService; @Override public List getMenu() { @@ -177,4 +181,9 @@ public class SysMenuServiceImpl extends ServiceImpl impl } return permissions; } + + @Override + public List getCashAll() { + return cashMenuService.list(); + } } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysRoleServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysRoleServiceImpl.java index 4e4a300c..a36450c9 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysRoleServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/SysRoleServiceImpl.java @@ -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 imp private SysMenuService sysMenuService; @Resource private SysRolesMenusService sysRolesMenusService; + @Resource + private CashMenuService cashMenuService; @Override public List getByUserId(Long id) { @@ -125,20 +129,57 @@ public class SysRoleServiceImpl extends ServiceImpl imp } public boolean addMenu(Long roleId, List menuIds, boolean isAdmin) { - List sysMenuList = sysMenuService.queryChain().in(SysMenu::getMenuId, menuIds).list(); - if (sysMenuList.size() != menuIds.size()) { - throw new ApiNotPrintException("菜单id包含错误id"); - } - ArrayList apiPathList = new ArrayList<>(); - sysMenuList.forEach(item -> { - if (StrUtil.isNotBlank(item.getApiInfo())) { - List itemDTOS = JSONArray.parseArray(item.getApiInfo()).toJavaList(MenuApiInfoItemDTO.class); - if (!itemDTOS.isEmpty()) { - apiPathList.addAll(itemDTOS); + + ArrayList rolesMenus = new ArrayList<>(); + if (isAdmin) { + List 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 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 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 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 imp wrapper.where(string); List 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 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 diff --git a/cash-service/account-service/src/main/resources/mapper/CashMenuMapper.xml b/cash-service/account-service/src/main/resources/mapper/CashMenuMapper.xml new file mode 100644 index 00000000..f72d46a7 --- /dev/null +++ b/cash-service/account-service/src/main/resources/mapper/CashMenuMapper.xml @@ -0,0 +1,7 @@ + + + + +