MenuBootstrapServiceImpl.java
7.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package com.diligrp.rider.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.diligrp.rider.common.enums.AdminRoleScopeEnum;
import com.diligrp.rider.common.enums.MenuScopeEnum;
import com.diligrp.rider.entity.SysMenu;
import com.diligrp.rider.entity.SysRole;
import com.diligrp.rider.entity.SysRoleMenu;
import com.diligrp.rider.mapper.SysMenuMapper;
import com.diligrp.rider.mapper.SysRoleMapper;
import com.diligrp.rider.mapper.SysRoleMenuMapper;
import com.diligrp.rider.service.MenuBootstrapService;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@Service
@RequiredArgsConstructor
public class MenuBootstrapServiceImpl implements MenuBootstrapService {
private final SysRoleMapper sysRoleMapper;
private final SysMenuMapper sysMenuMapper;
private final SysRoleMenuMapper sysRoleMenuMapper;
@PostConstruct
@Override
public void initializeDefaults() {
SysRole platformRole = ensureRole("platform_admin", "平台管理员", AdminRoleScopeEnum.PLATFORM.name());
SysRole substationRole = ensureRole("substation_admin", "分站管理员", AdminRoleScopeEnum.SUBSTATION.name());
List<SysMenu> seededMenus = seedMenus();
bindMenus(platformRole, seededMenus, MenuScopeEnum.PLATFORM, MenuScopeEnum.BOTH);
bindMenus(substationRole, seededMenus, MenuScopeEnum.SUBSTATION, MenuScopeEnum.BOTH);
}
private SysRole ensureRole(String code, String name, String scope) {
SysRole role = sysRoleMapper.selectOne(new LambdaQueryWrapper<SysRole>()
.eq(SysRole::getCode, code)
.last("LIMIT 1"));
if (role != null) {
return role;
}
role = new SysRole();
role.setCode(code);
role.setName(name);
role.setRoleScope(scope);
role.setStatus(1);
role.setCreateTime(System.currentTimeMillis() / 1000);
sysRoleMapper.insert(role);
return role;
}
private List<SysMenu> seedMenus() {
List<SysMenu> defaults = new ArrayList<>();
defaults.add(menu("dashboard", "工作台", "MENU", "/dashboard", "HomeOutlined", 0L, MenuScopeEnum.BOTH, 10));
defaults.add(menu("city.manage", "租户管理", "MENU", "/city", "GlobalOutlined", 0L, MenuScopeEnum.PLATFORM, 20));
defaults.add(menu("substation.manage", "分站管理", "MENU", "/substation", "ApartmentOutlined", 0L, MenuScopeEnum.PLATFORM, 30));
defaults.add(menu("merchant.root", "商家管理", "DIR", "", "ShopOutlined", 0L, MenuScopeEnum.PLATFORM, 40));
defaults.add(menu("merchant.enter", "入驻申请", "MENU", "/merchant/enter", "", 0L, MenuScopeEnum.PLATFORM, 41));
defaults.add(menu("merchant.store", "店铺管理", "MENU", "/merchant/store", "", 0L, MenuScopeEnum.PLATFORM, 42));
defaults.add(menu("rider.list", "骑手管理", "MENU", "/rider", "UserOutlined", 0L, MenuScopeEnum.BOTH, 50));
defaults.add(menu("rider.evaluate", "骑手评价", "MENU", "/rider/evaluate", "StarOutlined", 0L, MenuScopeEnum.BOTH, 60));
defaults.add(menu("order.root", "订单管理", "DIR", "", "UnorderedListOutlined", 0L, MenuScopeEnum.BOTH, 70));
defaults.add(menu("order.list", "订单列表", "MENU", "/order", "", 0L, MenuScopeEnum.BOTH, 71));
defaults.add(menu("order.refund", "退款管理", "MENU", "/refund", "", 0L, MenuScopeEnum.BOTH, 72));
defaults.add(menu("order.delivery", "配送订单", "MENU", "/delivery/order", "", 0L, MenuScopeEnum.BOTH, 73));
defaults.add(menu("config.root", "配置中心", "DIR", "", "ControlOutlined", 0L, MenuScopeEnum.BOTH, 80));
defaults.add(menu("fee.plan", "配送费配置", "MENU", "/config/fee-plan", "", 0L, MenuScopeEnum.BOTH, 81));
defaults.add(menu("dispatch.rule", "调度配置", "MENU", "/dispatch/rule", "", 0L, MenuScopeEnum.BOTH, 82));
defaults.add(menu("open.root", "开放平台", "DIR", "", "ApiOutlined", 0L, MenuScopeEnum.PLATFORM, 90));
defaults.add(menu("open.app", "应用管理", "MENU", "/open", "", 0L, MenuScopeEnum.PLATFORM, 91));
defaults.add(menu("open.mock_delivery", "模拟推单", "MENU", "/open/mock-delivery", "", 0L, MenuScopeEnum.PLATFORM, 92));
defaults.add(menu("system.root", "系统管理", "DIR", "", "ControlOutlined", 0L, MenuScopeEnum.PLATFORM, 100));
defaults.add(menu("system.menu", "菜单管理", "MENU", "/system/menu", "", 0L, MenuScopeEnum.PLATFORM, 101));
defaults.add(menu("system.role_menu", "角色菜单", "MENU", "/system/role-menu", "", 0L, MenuScopeEnum.PLATFORM, 102));
defaults.add(menu("admin.user", "平台账号", "MENU", "/admin-user", "", 0L, MenuScopeEnum.PLATFORM, 103));
Map<String, SysMenu> persisted = new LinkedHashMap<>();
for (SysMenu menu : defaults) {
SysMenu existing = sysMenuMapper.selectOne(new LambdaQueryWrapper<SysMenu>()
.eq(SysMenu::getCode, menu.getCode())
.last("LIMIT 1"));
if (existing == null) {
menu.setCreateTime(System.currentTimeMillis() / 1000);
sysMenuMapper.insert(menu);
existing = menu;
}
persisted.put(existing.getCode(), existing);
}
persisted.get("merchant.enter").setParentId(persisted.get("merchant.root").getId());
persisted.get("merchant.store").setParentId(persisted.get("merchant.root").getId());
persisted.get("order.list").setParentId(persisted.get("order.root").getId());
persisted.get("order.refund").setParentId(persisted.get("order.root").getId());
persisted.get("order.delivery").setParentId(persisted.get("order.root").getId());
persisted.get("fee.plan").setParentId(persisted.get("config.root").getId());
persisted.get("dispatch.rule").setParentId(persisted.get("config.root").getId());
persisted.get("open.app").setParentId(persisted.get("open.root").getId());
persisted.get("open.mock_delivery").setParentId(persisted.get("open.root").getId());
persisted.get("system.menu").setParentId(persisted.get("system.root").getId());
persisted.get("system.role_menu").setParentId(persisted.get("system.root").getId());
persisted.get("admin.user").setParentId(persisted.get("system.root").getId());
for (SysMenu menu : persisted.values()) {
sysMenuMapper.updateById(menu);
}
return new ArrayList<>(persisted.values());
}
private void bindMenus(SysRole role, List<SysMenu> menus, MenuScopeEnum primaryScope, MenuScopeEnum commonScope) {
for (SysMenu menu : menus) {
if (!primaryScope.name().equals(menu.getMenuScope()) && !commonScope.name().equals(menu.getMenuScope())) {
continue;
}
Long exists = sysRoleMenuMapper.selectCount(new LambdaQueryWrapper<SysRoleMenu>()
.eq(SysRoleMenu::getRoleId, role.getId())
.eq(SysRoleMenu::getMenuId, menu.getId()));
if (exists > 0) {
continue;
}
SysRoleMenu roleMenu = new SysRoleMenu();
roleMenu.setRoleId(role.getId());
roleMenu.setMenuId(menu.getId());
roleMenu.setCreateTime(System.currentTimeMillis() / 1000);
sysRoleMenuMapper.insert(roleMenu);
}
}
private SysMenu menu(String code, String name, String type, String path, String icon,
Long parentId, MenuScopeEnum scope, int sort) {
SysMenu menu = new SysMenu();
menu.setCode(code);
menu.setName(name);
menu.setType(type);
menu.setPath(path);
menu.setIcon(icon);
menu.setParentId(parentId);
menu.setMenuScope(scope.name());
menu.setListOrder(sort);
menu.setVisible(1);
menu.setStatus(1);
return menu;
}
}