From e57f8c79258c4ab429b9fdccd487e2807fdf6e13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E9=9D=9E=E5=87=A1?= Date: Thu, 4 Dec 2025 09:48:08 +0000 Subject: [PATCH] Merge #4 into master from cc_20251027_new2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix:小程序菜单 * cc_20251027_new2: (3 commits squashed) - feat:小程序菜单配置 - Merge branch 'refs/heads/master' into cc_20251027_new2 - fix:小程序菜单 Signed-off-by: 王非凡 Reviewed-by: 苏竹红 Merged-by: 苏竹红 CR-link: https://codeup.aliyun.com/692ea314dec569489f6f167c/hangzhou/java/custom_zxjp/change/4 --- .../java/com/cool/store/dao/SysRoleDao.java | 17 ++++ .../store/dao/menu/MiniMenuConfigDAO.java | 31 +++++++ .../com/cool/store/dao/menu/MiniMenuDAO.java | 34 +++++++ .../mapper/menu/MiniMenuConfigMapper.java | 7 ++ .../store/mapper/menu/MiniMenuMapper.java | 7 ++ .../mapper/menu/MiniMenuConfigMapper.xml | 12 +++ .../resources/mapper/menu/MiniMenuMapper.xml | 12 +++ .../store/entity/menu/MiniMenuConfigDO.java | 34 +++++++ .../cool/store/entity/menu/MiniMenuDO.java | 26 ++++++ .../cool/store/vo/menu/MiniMenuConfigVO.java | 19 ++++ .../store/service/menu/MiniMenuService.java | 22 +++++ .../menu/impl/MiniMenuServiceImpl.java | 88 +++++++++++++++++++ .../controller/webc/MiniMenuController.java | 35 ++++++++ 13 files changed, 344 insertions(+) create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/menu/MiniMenuConfigDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/dao/menu/MiniMenuDAO.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/menu/MiniMenuConfigMapper.java create mode 100644 coolstore-partner-dao/src/main/java/com/cool/store/mapper/menu/MiniMenuMapper.java create mode 100644 coolstore-partner-dao/src/main/resources/mapper/menu/MiniMenuConfigMapper.xml create mode 100644 coolstore-partner-dao/src/main/resources/mapper/menu/MiniMenuMapper.xml create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/menu/MiniMenuConfigDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/entity/menu/MiniMenuDO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/vo/menu/MiniMenuConfigVO.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/menu/MiniMenuService.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/service/menu/impl/MiniMenuServiceImpl.java create mode 100644 coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniMenuController.java diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysRoleDao.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysRoleDao.java index 56c3b18f3..90ae46db8 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysRoleDao.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/SysRoleDao.java @@ -60,4 +60,21 @@ public class SysRoleDao { return sysRoleDOS.stream().collect(Collectors.toMap(k->k.getId(), v->v.getRoleName(), (k1, k2)->k1)); } + /** + * 查询优先级最高的角色 + * @param userId 用户id + * @return 角色 + */ + public SysRoleDO getHighestPrioritySysRoleDoByUserId(String userId) { + return sysRoleMapper.getHighestPrioritySysRoleDoByUserId(userId); + } + + /** + * 根据角色枚举查询角色 + * @param roleEnum 角色枚举 + * @return 角色 + */ + public SysRoleDO getRoleByRoleEnum(String roleEnum) { + return sysRoleMapper.getRoleByRoleEnum(roleEnum); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/menu/MiniMenuConfigDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/menu/MiniMenuConfigDAO.java new file mode 100644 index 000000000..d4e44b2aa --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/menu/MiniMenuConfigDAO.java @@ -0,0 +1,31 @@ +package com.cool.store.dao.menu; + +import com.cool.store.entity.menu.MiniMenuConfigDO; +import com.cool.store.mapper.menu.MiniMenuConfigMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + *

+ * 小程序菜单配置 + *

+ * + * @author wangff + * @since 2025/10/31 + */ +@Repository +@RequiredArgsConstructor +public class MiniMenuConfigDAO { + private final MiniMenuConfigMapper miniMenuConfigMapper; + + /** + * 根据角色id查询 + * @param roleId 角色id + * @return 菜单配置列表 + */ + public List getListByRoleId(Long roleId) { + return miniMenuConfigMapper.select(MiniMenuConfigDO.builder().roleId(roleId).build()); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/menu/MiniMenuDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/menu/MiniMenuDAO.java new file mode 100644 index 000000000..3c3f33742 --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/menu/MiniMenuDAO.java @@ -0,0 +1,34 @@ +package com.cool.store.dao.menu; + +import com.cool.store.entity.menu.MiniMenuDO; +import com.cool.store.mapper.menu.MiniMenuMapper; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Repository; +import tk.mybatis.mapper.entity.Example; + +import java.util.Collections; +import java.util.List; + +/** + *

+ * 小程序菜单DAO + *

+ * + * @author wangff + * @since 2025/11/28 + */ +@Repository +@RequiredArgsConstructor +public class MiniMenuDAO { + private final MiniMenuMapper miniMenuMapper; + + public List getByIds(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return Collections.emptyList(); + } + Example example = new Example(MiniMenuDO.class); + example.createCriteria().andIn("id", ids); + return miniMenuMapper.selectByExample(example); + } +} diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/menu/MiniMenuConfigMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/menu/MiniMenuConfigMapper.java new file mode 100644 index 000000000..a7d59a6ac --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/menu/MiniMenuConfigMapper.java @@ -0,0 +1,7 @@ +package com.cool.store.mapper.menu; + +import com.cool.store.entity.menu.MiniMenuConfigDO; +import tk.mybatis.mapper.common.Mapper; + +public interface MiniMenuConfigMapper extends Mapper { +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/menu/MiniMenuMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/menu/MiniMenuMapper.java new file mode 100644 index 000000000..e5e72cc4b --- /dev/null +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/menu/MiniMenuMapper.java @@ -0,0 +1,7 @@ +package com.cool.store.mapper.menu; + +import com.cool.store.entity.menu.MiniMenuDO; +import tk.mybatis.mapper.common.Mapper; + +public interface MiniMenuMapper extends Mapper { +} \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/menu/MiniMenuConfigMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/menu/MiniMenuConfigMapper.xml new file mode 100644 index 000000000..1857cb167 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/menu/MiniMenuConfigMapper.xml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/menu/MiniMenuMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/menu/MiniMenuMapper.xml new file mode 100644 index 000000000..72065b4a8 --- /dev/null +++ b/coolstore-partner-dao/src/main/resources/mapper/menu/MiniMenuMapper.xml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/menu/MiniMenuConfigDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/menu/MiniMenuConfigDO.java new file mode 100644 index 000000000..c0c560dc7 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/menu/MiniMenuConfigDO.java @@ -0,0 +1,34 @@ +package com.cool.store.entity.menu; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +/** + * 小程序菜单配置 + */ +@Table(name = "zxjp_mini_menu_config") +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class MiniMenuConfigDO { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 角色id + */ + @Column(name = "role_id") + private Long roleId; + + /** + * 菜单 + */ + @Column(name = "menu_id") + private Long menuId; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/menu/MiniMenuDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/menu/MiniMenuDO.java new file mode 100644 index 000000000..9642f6786 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/menu/MiniMenuDO.java @@ -0,0 +1,26 @@ +package com.cool.store.entity.menu; + +import lombok.Data; + +import javax.persistence.*; + +@Table(name = "zxjp_mini_menu") +@Data +public class MiniMenuDO { + /** + * id + */ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 名称 + */ + private String name; + + /** + * key + */ + private String menuKey; +} \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/menu/MiniMenuConfigVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/menu/MiniMenuConfigVO.java new file mode 100644 index 000000000..e2d67f093 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/menu/MiniMenuConfigVO.java @@ -0,0 +1,19 @@ +package com.cool.store.vo.menu; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * 小程序菜单配置VO + *

+ * + * @author wangff + * @since 2025/10/31 + */ +@Data +public class MiniMenuConfigVO { + + @ApiModelProperty("菜单key") + private String menuKey; +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/menu/MiniMenuService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/menu/MiniMenuService.java new file mode 100644 index 000000000..15637bf03 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/menu/MiniMenuService.java @@ -0,0 +1,22 @@ +package com.cool.store.service.menu; + +import com.cool.store.vo.menu.MiniMenuConfigVO; + +import java.util.List; + +/** + *

+ * 小程序菜单配置 + *

+ * + * @author wangff + * @since 2025/10/31 + */ +public interface MiniMenuService { + + /** + * 获取用户小程序菜单配置 + * @return 小程序菜单配置 + */ + List getUserMiniMenu(); +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/menu/impl/MiniMenuServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/menu/impl/MiniMenuServiceImpl.java new file mode 100644 index 000000000..72eaed992 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/menu/impl/MiniMenuServiceImpl.java @@ -0,0 +1,88 @@ +package com.cool.store.service.menu.impl; + +import cn.hutool.core.collection.CollStreamUtil; +import com.cool.store.context.PartnerUserHolder; +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.dao.SysRoleDao; +import com.cool.store.dao.menu.MiniMenuConfigDAO; +import com.cool.store.dao.menu.MiniMenuDAO; +import com.cool.store.entity.EnterpriseUserDO; +import com.cool.store.entity.SysRoleDO; +import com.cool.store.entity.menu.MiniMenuConfigDO; +import com.cool.store.entity.menu.MiniMenuDO; +import com.cool.store.enums.AIEnum; +import com.cool.store.enums.Role; +import com.cool.store.service.menu.MiniMenuService; +import com.cool.store.utils.BeanUtil; +import com.cool.store.vo.PartnerUserInfoVO; +import com.cool.store.vo.menu.MiniMenuConfigVO; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + + +/** + *

+ * 小程序菜单配置 服务实现类 + *

+ * + * @author wangff + * @since 2025/10/31 + */ +@Service +@RequiredArgsConstructor +public class MiniMenuServiceImpl implements MiniMenuService { + private final MiniMenuConfigDAO miniMenuConfigDAO; + private final SysRoleDao sysRoleDao; + private final EnterpriseUserDAO enterpriseUserDAO; + private final MiniMenuDAO miniMenuDAO; + + + @Override + public List getUserMiniMenu() { + PartnerUserInfoVO user = PartnerUserHolder.getUser(); + if (StringUtils.isBlank(user.getMobile())) { + return Collections.emptyList(); + } + SysRoleDO highestRole = getHighestRoleByMobile(user.getMobile()); + if (Objects.isNull(highestRole)) { + return Collections.emptyList(); + } + List list = miniMenuConfigDAO.getListByRoleId(highestRole.getId()); + List menuIds = CollStreamUtil.toList(list, MiniMenuConfigDO::getMenuId); + List menuList = miniMenuDAO.getByIds(menuIds); + return BeanUtil.toList(menuList, MiniMenuConfigVO.class); + } + + /** + * 根据手机号查询用户优先级最高的角色 + * @param mobile 手机号 + * @return 角色信息 + */ + private SysRoleDO getHighestRoleByMobile(String mobile) { + if (StringUtils.isBlank(mobile)) { + return null; + } + EnterpriseUserDO userDO = enterpriseUserDAO.selectByMobile(mobile); + if (Objects.isNull(userDO)) { + return null; + } + return getHighestRole(userDO.getUserId()); + } + + /** + * 查询当前用户优先级最高的角色 + * @param userId 用户id + * @return 角色信息 + */ + private SysRoleDO getHighestRole(String userId) { + if(AIEnum.AI_USERID.getCode().equals(userId)){ + return sysRoleDao.getRoleByRoleEnum(Role.MASTER.getRoleEnum()); + } + return sysRoleDao.getHighestPrioritySysRoleDoByUserId(userId); + } +} diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniMenuController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniMenuController.java new file mode 100644 index 000000000..2fd52cf04 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniMenuController.java @@ -0,0 +1,35 @@ +package com.cool.store.controller.webc; + +import com.cool.store.response.ResponseResult; +import com.cool.store.service.menu.MiniMenuService; +import com.cool.store.vo.menu.MiniMenuConfigVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + *

+ * 小程序菜单配置 前端控制器 + *

+ * + * @author wangff + * @since 2025/10/31 + */ +@RestController +@RequestMapping({"/mini/menu"}) +@Api(tags = "Mini菜单配置") +@RequiredArgsConstructor +public class MiniMenuController { + private final MiniMenuService miniMenuService; + + @ApiOperation("当前用户菜单配置") + @GetMapping("/userConfig") + public ResponseResult> getCurrentUserConfig() { + return ResponseResult.success(miniMenuService.getUserMiniMenu()); + } +}