From 073b561f40f6ca041d0d930e45ee71163b3b3b8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Mon, 26 May 2025 13:52:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=83=E9=99=90=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../czg/controller/admin/MenuController.java | 12 +++ .../src/main/java/com/czg/sa/MyStpLogic.java | 4 + .../java/com/czg/account/dto/CashMenuDTO.java | 32 +++++++ .../java/com/czg/account/entity/CashMenu.java | 43 ++++++++++ .../czg/account/service/CashMenuService.java | 14 ++++ .../czg/account/service/SysMenuService.java | 3 + .../account/mapper/CashMenuMapper.java | 14 ++++ .../service/impl/CashMenuServiceImpl.java | 18 ++++ .../service/impl/SysMenuServiceImpl.java | 9 ++ .../service/impl/SysRoleServiceImpl.java | 84 ++++++++++++++----- .../main/resources/mapper/CashMenuMapper.xml | 7 ++ 11 files changed, 218 insertions(+), 22 deletions(-) create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/dto/CashMenuDTO.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/entity/CashMenu.java create mode 100644 cash-common/cash-common-service/src/main/java/com/czg/account/service/CashMenuService.java create mode 100644 cash-service/account-service/src/main/java/com/czg/service/account/mapper/CashMenuMapper.java create mode 100644 cash-service/account-service/src/main/java/com/czg/service/account/service/impl/CashMenuServiceImpl.java create mode 100644 cash-service/account-service/src/main/resources/mapper/CashMenuMapper.xml 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 @@ + + + + +