1. 项目背景与核心价值
外卖平台的后台管理系统是支撑整个业务运转的中枢神经。作为从业十年的全栈开发者,我参与过多个外卖系统的架构设计,深知商家管理端中员工权限与菜品分类这两个模块的重要性。它们直接关系到商家的运营效率和平台的数据规范性。
这个模块的开发难点在于:既要满足连锁餐饮企业多门店、多角色的复杂权限需求,又要兼顾小型商户的简单操作体验。我们团队在"苍穹外卖"项目中,通过RBAC权限模型与扁平化设计的结合,实现了不同规模商家的灵活适配。
2. 员工管理模块设计
2.1 权限系统架构
采用改良版RBAC(基于角色的访问控制)模型,包含五个核心实体:
- 用户(员工账号)
- 角色(店长/厨师/配送员等)
- 权限点(接单/改价/退款等)
- 部门(门店/区域划分)
- 岗位(收银/后厨等职能)
java复制// 权限校验核心逻辑示例
public boolean checkPermission(Long userId, String permissionCode) {
// 1. 获取用户所有角色
List<Role> roles = roleMapper.selectByUserId(userId);
// 2. 查询角色关联的权限点
Set<String> permissions = roles.stream()
.flatMap(role -> permissionMapper.selectByRoleId(role.getId()).stream())
.map(Permission::getCode)
.collect(Collectors.toSet());
// 3. 校验目标权限
return permissions.contains(permissionCode);
}
2.2 关键业务实现
员工入职流程:
- 门店管理员发起邀请
- 生成含时效的注册链接(JWT实现)
- 员工完善个人信息
- 系统自动分配初始密码(BCrypt加密)
- 触发企业微信/短信通知
权限分配方案:
- 基础角色预设:系统初始化时创建
- 自定义角色:支持商家按需配置
- 临时权限:设置生效时间段(如促销期间的特殊权限)
重要提示:密码策略必须包含:
- 8位以上混合字符
- 90天强制更换
- 历史密码校验(防止重复使用)
3. 分类管理模块实现
3.1 数据结构设计
采用多级分类+标签的混合模式:
sql复制CREATE TABLE `category` (
`id` bigint NOT NULL AUTO_INCREMENT,
`shop_id` bigint NOT NULL COMMENT '关联门店',
`parent_id` bigint DEFAULT NULL COMMENT '父分类ID',
`name` varchar(20) NOT NULL,
`sort` int DEFAULT '0' COMMENT '展示顺序',
`status` tinyint DEFAULT '1' COMMENT '1启用 0禁用',
`tag_list` json DEFAULT NULL COMMENT '标签数组',
PRIMARY KEY (`id`),
KEY `idx_shop_parent` (`shop_id`,`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3.2 分类操作优化点
批量处理方案:
- 前端采用TreeTable展示
- 支持拖拽排序(记录sort值变化)
- 启用/禁用状态联动子分类
- 变更历史记录(AuditLog实现)
性能优化技巧:
- 使用Redis缓存热门分类
- 分类变更时异步更新ES索引
- 数据库查询添加
shop_id索引
4. 典型问题排查实录
4.1 员工登录失败分析
现象:新员工收到"账号不存在"错误
排查步骤:
- 检查邀请链接是否过期(JWT有效期)
- 验证门店员工数是否超限(套餐限制)
- 查看账号审核状态(需门店确认)
- 检查手机号格式(国际区号处理)
4.2 分类显示异常处理
场景:修改父分类后子分类消失
解决方案:
- 前端增加二次确认弹窗
- 后端添加级联更新事务
java复制@Transactional
public void updateParent(Long categoryId, Long newParentId) {
// 验证父子关系是否形成环路
checkParentChildLoop(categoryId, newParentId);
// 更新当前分类
categoryMapper.updateParent(categoryId, newParentId);
// 同步更新子分类路径
updateChildrenPath(categoryId);
}
5. 扩展功能建议
员工管理增强:
- 排班系统集成(CalDav协议)
- 操作行为分析(埋点统计高频操作)
- 人脸识别打卡(对接活体检测API)
分类管理升级:
- 智能推荐分类(基于订单数据分析)
- 季节性分类模板(预设节日套餐分类)
- 多语言支持(i18n方案)
在实际开发中,我们发现商家对这两个模块的使用习惯存在明显差异。连锁品牌更关注权限的精细管控,而个体商户则重视操作的便捷性。建议通过功能开关实现差异化配置,这也是我们下个迭代的重点优化方向。