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()); + } +}