package com.tcm.training.admin.bootstrap; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.tcm.training.admin.user.entity.SysMenu; import com.tcm.training.admin.user.entity.SysRole; import com.tcm.training.admin.user.entity.SysUser; import com.tcm.training.admin.user.entity.SysUserRole; import com.tcm.training.admin.user.entity.SysRoleMenu; import com.tcm.training.admin.user.mapper.SysMenuMapper; import com.tcm.training.admin.user.mapper.SysRoleMapper; import com.tcm.training.admin.user.mapper.SysRoleMenuMapper; import com.tcm.training.admin.user.mapper.SysUserRoleMapper; import com.tcm.training.admin.user.service.SysUserService; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @Component public class DataInitializer implements ApplicationRunner { private final SysUserService sysUserService; private final BCryptPasswordEncoder passwordEncoder; private final SysRoleMapper sysRoleMapper; private final SysMenuMapper sysMenuMapper; private final SysUserRoleMapper sysUserRoleMapper; private final SysRoleMenuMapper sysRoleMenuMapper; public DataInitializer( SysUserService sysUserService, BCryptPasswordEncoder passwordEncoder, SysRoleMapper sysRoleMapper, SysMenuMapper sysMenuMapper, SysUserRoleMapper sysUserRoleMapper, SysRoleMenuMapper sysRoleMenuMapper ) { this.sysUserService = sysUserService; this.passwordEncoder = passwordEncoder; this.sysRoleMapper = sysRoleMapper; this.sysMenuMapper = sysMenuMapper; this.sysUserRoleMapper = sysUserRoleMapper; this.sysRoleMenuMapper = sysRoleMenuMapper; } @Override public void run(ApplicationArguments args) { SysUser admin = sysUserService.getOne(new LambdaQueryWrapper() .eq(SysUser::getUsername, "admin") .last("limit 1")); if (admin == null) { SysUser user = new SysUser(); user.setUsername("admin"); user.setNickname("管理员"); user.setRealName("系统管理员"); user.setStatus(1); user.setDeleted(0); user.setPassword(passwordEncoder.encode("Admin@123456")); user.setCreatedAt(LocalDateTime.now()); user.setUpdatedAt(LocalDateTime.now()); sysUserService.save(user); admin = user; } SysRole role = ensureSuperAdminRole(); List menuIds = ensureDefaultMenus(); ensureRoleMenuRelations(role.getId(), menuIds); ensureUserRoleRelation(admin.getId(), role.getId()); } private SysRole ensureSuperAdminRole() { SysRole role = sysRoleMapper.selectOne(new LambdaQueryWrapper() .eq(SysRole::getRoleCode, "SUPER_ADMIN") .last("limit 1")); if (role != null) { return role; } role = new SysRole(); role.setRoleName("超级管理员"); role.setRoleCode("SUPER_ADMIN"); role.setStatus(1); role.setDeleted(0); role.setRemark("默认拥有全部后台权限"); role.setCreatedAt(LocalDateTime.now()); role.setUpdatedAt(LocalDateTime.now()); sysRoleMapper.insert(role); return role; } private List ensureDefaultMenus() { List menuIds = new ArrayList(); menuIds.add(saveMenu(1000L, 0L, "系统与安全", "system_security", "M", "/system", null, "setting", 100, null, "系统与安全模块")); menuIds.add(saveMenu(1100L, 1000L, "帐号管理", "system_account", "C", "/system/account", "Account/UserList", null, 10, "system:account:view", "帐号管理菜单")); menuIds.add(saveMenu(1101L, 1100L, "新增帐号", "system_account_add", "B", null, null, null, 1, "system:account:add", "帐号新增按钮")); menuIds.add(saveMenu(1102L, 1100L, "编辑帐号", "system_account_edit", "B", null, null, null, 2, "system:account:edit", "帐号编辑按钮")); menuIds.add(saveMenu(1103L, 1100L, "启用禁用", "system_account_status", "B", null, null, null, 3, "system:account:status", "帐号状态按钮")); menuIds.add(saveMenu(1104L, 1100L, "重置密码", "system_account_reset_password", "B", null, null, null, 4, "system:account:reset-password", "重置密码按钮")); menuIds.add(saveMenu(1105L, 1100L, "删除帐号", "system_account_delete", "B", null, null, null, 5, "system:account:delete", "删除帐号按钮")); menuIds.add(saveMenu(1200L, 1000L, "角色管理", "system_role", "C", "/system/role", "Account/RoleList", null, 20, "system:role:view", "角色管理菜单")); menuIds.add(saveMenu(1201L, 1200L, "角色详情", "system_role_detail", "B", null, null, null, 1, "system:role:detail", "角色详情按钮")); menuIds.add(saveMenu(1202L, 1200L, "新增角色", "system_role_add", "B", null, null, null, 2, "system:role:add", "角色新增按钮")); menuIds.add(saveMenu(1203L, 1200L, "编辑角色", "system_role_edit", "B", null, null, null, 3, "system:role:edit", "角色编辑按钮")); menuIds.add(saveMenu(1204L, 1200L, "删除角色", "system_role_delete", "B", null, null, null, 4, "system:role:delete", "角色删除按钮")); menuIds.add(saveMenu(1300L, 1000L, "系统设置", "system_setting_group", "M", "/system/settings", null, null, 30, null, "系统设置目录")); menuIds.add(saveMenu(1305L, 1300L, "系统设置", "system_basic_settings", "C", "/system/settings/basic", "System/BasicSettings", null, 5, "system:basic-settings:view", "系统设置菜单")); menuIds.add(saveMenu(1306L, 1305L, "编辑系统设置", "system_basic_settings_edit", "B", null, null, null, 1, "system:basic-settings:edit", "系统设置编辑按钮")); menuIds.add(saveMenu(1307L, 1300L, "APP版本设置", "system_app_version_settings", "C", "/system/settings/app-version", "System/AppVersionSettings", null, 15, "system:app-version:view", "APP版本设置菜单")); menuIds.add(saveMenu(1308L, 1307L, "新增APP版本", "system_app_version_settings_add", "B", null, null, null, 1, "system:app-version:add", "新增APP版本按钮")); menuIds.add(saveMenu(1309L, 1307L, "查看APP版本", "system_app_version_settings_detail", "B", null, null, null, 2, "system:app-version:detail", "查看APP版本按钮")); menuIds.add(saveMenu(1312L, 1300L, "消息推送配置", "system_message_push_settings", "C", "/system/settings/message-push", "System/MessagePushSettings", null, 20, "system:message-push:view", "消息推送配置菜单")); menuIds.add(saveMenu(1313L, 1312L, "编辑消息推送配置", "system_message_push_settings_edit", "B", null, null, null, 1, "system:message-push:edit", "消息推送配置编辑按钮")); menuIds.add(saveMenu(1314L, 1300L, "Banner配置", "system_banner_settings", "C", "/system/settings/banner", "System/BannerSettings", null, 12, "system:banner:view", "Banner配置菜单")); menuIds.add(saveMenu(1315L, 1314L, "新增Banner", "system_banner_settings_add", "B", null, null, null, 1, "system:banner:add", "Banner新增按钮")); menuIds.add(saveMenu(1316L, 1314L, "编辑Banner", "system_banner_settings_edit", "B", null, null, null, 2, "system:banner:edit", "Banner编辑按钮")); menuIds.add(saveMenu(1317L, 1314L, "查看Banner", "system_banner_settings_detail", "B", null, null, null, 3, "system:banner:detail", "Banner查看按钮")); menuIds.add(saveMenu(1318L, 1314L, "删除Banner", "system_banner_settings_delete", "B", null, null, null, 4, "system:banner:delete", "Banner删除按钮")); menuIds.add(saveMenu(1319L, 1314L, "批量删除Banner", "system_banner_settings_batch_delete", "B", null, null, null, 5, "system:banner:batch-delete", "Banner批量删除按钮")); menuIds.add(saveMenu(1320L, 1314L, "切换Banner上架状态", "system_banner_settings_publish_status", "B", null, null, null, 6, "system:banner:publish-status", "Banner上架状态按钮")); menuIds.add(saveMenu(1321L, 1300L, "活动通知", "system_activity_notice", "C", "/system/settings/activity-notice", "System/ActivityNotice", null, 13, "system:activity-notice:view", "活动通知菜单")); menuIds.add(saveMenu(1322L, 1321L, "新增活动通知", "system_activity_notice_add", "B", null, null, null, 1, "system:activity-notice:add", "活动通知新增按钮")); menuIds.add(saveMenu(1323L, 1321L, "删除活动通知", "system_activity_notice_delete", "B", null, null, null, 2, "system:activity-notice:delete", "活动通知删除按钮")); menuIds.add(saveMenu(1324L, 1300L, "平台资质", "system_platform_qualification", "C", "/system/settings/platform-qualification", "System/PlatformQualification", null, 14, "system:platform-qualification:view", "平台资质菜单")); menuIds.add(saveMenu(1325L, 1324L, "新增平台资质", "system_platform_qualification_add", "B", null, null, null, 1, "system:platform-qualification:add", "平台资质新增按钮")); menuIds.add(saveMenu(1326L, 1324L, "查看平台资质", "system_platform_qualification_detail", "B", null, null, null, 2, "system:platform-qualification:detail", "平台资质详情按钮")); menuIds.add(saveMenu(1327L, 1324L, "编辑平台资质", "system_platform_qualification_edit", "B", null, null, null, 3, "system:platform-qualification:edit", "平台资质编辑按钮")); menuIds.add(saveMenu(1328L, 1324L, "删除平台资质", "system_platform_qualification_delete", "B", null, null, null, 4, "system:platform-qualification:delete", "平台资质删除按钮")); menuIds.add(saveMenu(1329L, 1324L, "切换平台资质上架状态", "system_platform_qualification_publish_status", "B", null, null, null, 5, "system:platform-qualification:publish-status", "平台资质上架状态按钮")); menuIds.add(saveMenu(1330L, 1300L, "协议内容", "system_agreement_content", "C", "/system/settings/agreement-content", "System/AgreementContent", null, 16, "system:agreement-content:view", "协议内容菜单")); menuIds.add(saveMenu(1331L, 1330L, "编辑协议内容", "system_agreement_content_edit", "B", null, null, null, 1, "system:agreement-content:edit", "协议内容编辑按钮")); menuIds.add(saveMenu(1332L, 1300L, "常见问题", "system_common_question", "C", "/system/settings/common-question", "System/CommonQuestion", null, 17, "system:common-question:view", "常见问题菜单")); menuIds.add(saveMenu(1333L, 1332L, "新增常见问题", "system_common_question_add", "B", null, null, null, 1, "system:common-question:add", "常见问题新增按钮")); menuIds.add(saveMenu(1334L, 1332L, "编辑常见问题", "system_common_question_edit", "B", null, null, null, 2, "system:common-question:edit", "常见问题编辑按钮")); menuIds.add(saveMenu(1335L, 1332L, "删除常见问题", "system_common_question_delete", "B", null, null, null, 3, "system:common-question:delete", "常见问题删除按钮")); menuIds.add(saveMenu(1336L, 1300L, "用户意见反馈", "system_user_feedback", "C", "/system/settings/user-feedback", "System/UserFeedback", null, 18, "system:user-feedback:view", "用户意见反馈菜单")); menuIds.add(saveMenu(1310L, 1300L, "积分设置", "system_points_settings", "C", "/system/settings/points", "System/PointsSettings", null, 10, "system:points-settings:view", "积分设置菜单")); menuIds.add(saveMenu(1311L, 1310L, "编辑积分设置", "system_points_settings_edit", "B", null, null, null, 1, "system:points-settings:edit", "积分设置编辑按钮")); menuIds.add(saveMenu(5000L, 0L, "统计", "statistics_root", "M", "/statistics", null, "barChart", 150, null, "统计模块")); menuIds.add(saveMenu(5010L, 5000L, "用户数据", "statistics_user_data", "C", "/statistics/user-data", "Statistics/UserData", null, 10, "statistics:user-data:view", "用户数据菜单")); menuIds.add(saveMenu(5020L, 5000L, "内容数据", "statistics_content_data", "C", "/statistics/content-data", "Statistics/ContentData", null, 20, "statistics:content-data:view", "内容数据菜单")); menuIds.add(saveMenu(5030L, 5000L, "营收数据", "statistics_revenue", "C", "/statistics/revenue", "Statistics/Revenue", null, 30, "statistics:revenue:view", "营收数据菜单")); menuIds.add(saveMenu(5031L, 5030L, "导出营收报表", "statistics_revenue_export", "B", null, null, null, 1, "statistics:revenue:export", "营收数据导出按钮")); menuIds.add(saveMenu(2000L, 0L, "用户与会员", "member_root", "M", "/member", null, "team", 200, null, "用户与会员模块")); menuIds.add(saveMenu(2100L, 2000L, "用户", "member_user_group", "M", "/member/user", null, null, 10, null, "用户分组菜单")); menuIds.add(saveMenu(2110L, 2100L, "用户管理", "member_user_manage", "C", "/member/user/manage", "Member/UserList", null, 10, "member:user:view", "用户管理菜单")); menuIds.add(saveMenu(2118L, 2100L, "诊所管理", "member_clinic_manage", "C", "/member/user/clinic", "Member/ClinicList", null, 11, "member:clinic:view", "诊所管理菜单")); menuIds.add(saveMenu(5045L, 2118L, "编辑", "member_clinic_edit", "B", null, null, null, 1, "member:clinic:edit", "编辑诊所按钮")); menuIds.add(saveMenu(2119L, 2100L, "会员用户", "member_only_user_manage", "C", "/member/user/member-users", "Member/MemberUserList", null, 12, "member:user:member:view", "会员用户菜单")); menuIds.add(saveMenu(2200L, 2000L, "会员", "member_vip_group", "M", "/member/vip", null, null, 20, null, "会员分组菜单")); menuIds.add(saveMenu(2210L, 2200L, "会员价格设置", "member_vip_price_settings", "C", "/member/vip/price", "Member/VipPriceSettings", null, 10, "member:vip-price:view", "会员价格设置菜单")); menuIds.add(saveMenu(2211L, 2210L, "编辑会员价格设置", "member_vip_price_settings_edit", "B", null, null, null, 1, "member:vip-price:edit", "会员价格设置编辑按钮")); menuIds.add(saveMenu(2220L, 2200L, "会员介绍设置", "member_vip_intro_settings", "C", "/member/vip/intro", "Member/VipIntroSettings", null, 20, "member:vip-intro:view", "会员介绍设置菜单")); menuIds.add(saveMenu(2221L, 2220L, "编辑会员介绍设置", "member_vip_intro_settings_edit", "B", null, null, null, 1, "member:vip-intro:edit", "会员介绍设置编辑按钮")); menuIds.add(saveMenu(2111L, 2110L, "用户详情", "member_user_detail", "B", null, null, null, 1, "member:user:detail", "用户详情按钮")); menuIds.add(saveMenu(2112L, 2110L, "编辑用户", "member_user_edit", "B", null, null, null, 2, "member:user:edit", "编辑用户按钮")); menuIds.add(saveMenu(2113L, 2110L, "启用禁用用户", "member_user_status", "B", null, null, null, 3, "member:user:status", "启用禁用用户按钮")); menuIds.add(saveMenu(2114L, 2110L, "重置用户密码", "member_user_reset_password", "B", null, null, null, 4, "member:user:reset-password", "重置用户密码按钮")); menuIds.add(saveMenu(2115L, 2110L, "删除用户", "member_user_delete", "B", null, null, null, 5, "member:user:delete", "删除用户按钮")); menuIds.add(saveMenu(2116L, 2110L, "导出用户", "member_user_export", "B", null, null, null, 6, "member:user:export", "导出用户按钮")); menuIds.add(saveMenu(2117L, 2110L, "解绑微信", "member_user_unbind_wechat", "B", null, null, null, 7, "member:user:unbind-wechat", "解绑微信按钮")); menuIds.add(saveMenu(5046L, 2100L, "省代理管理", "member_agent_manage", "C", "/member/user/agent", "Member/AgentList", null, 12, "member:agent:view", "省代理管理菜单")); menuIds.add(saveMenu(5047L, 5046L, "新增省代理", "member_agent_add", "B", null, null, null, 1, "member:agent:add", "新增省代理按钮")); menuIds.add(saveMenu(5048L, 5046L, "编辑省代理", "member_agent_edit", "B", null, null, null, 2, "member:agent:edit", "编辑省代理按钮")); menuIds.add(saveMenu(5049L, 5046L, "删除省代理", "member_agent_delete", "B", null, null, null, 3, "member:agent:delete", "删除省代理按钮")); menuIds.add(saveMenu(5050L, 5046L, "省代理详情", "member_agent_detail", "B", null, null, null, 4, "member:agent:detail", "省代理详情按钮")); menuIds.add(saveMenu(3000L, 0L, "课程与学习", "live_root", "M", "/live", null, "read", 300, null, "课程与学习模块")); menuIds.add(saveMenu(3050L, 3000L, "课程管理", "live_course_manage_root", "M", "/live/course", null, null, 10, null, "课程管理目录")); menuIds.add(saveMenu(3060L, 3050L, "养生直播", "live_course_broadcast_manage", "C", "/live/course/broadcast", "Live/BroadcastList", null, 10, "live:course:view", "养生直播菜单")); menuIds.add(saveMenu(3061L, 3060L, "直播详情", "live_course_detail", "B", null, null, null, 1, "live:course:detail", "养生直播详情按钮")); menuIds.add(saveMenu(3062L, 3060L, "编辑直播", "live_course_edit", "B", null, null, null, 2, "live:course:edit", "养生直播编辑按钮")); menuIds.add(saveMenu(3063L, 3060L, "启用禁用直播", "live_course_status", "B", null, null, null, 3, "live:course:status", "养生直播状态按钮")); menuIds.add(saveMenu(3064L, 3060L, "设置直播间密码", "live_course_password", "B", null, null, null, 4, "live:course:password", "设置直播间密码按钮")); menuIds.add(saveMenu(3070L, 3060L, "场次管理", "live_session_manage", "B", null, null, null, 10, "live:session:detail", "直播场次管理权限")); menuIds.add(saveMenu(3071L, 3060L, "新增场次", "live_session_add", "B", null, null, null, 11, "live:session:add", "直播场次新增按钮")); menuIds.add(saveMenu(3072L, 3060L, "编辑场次", "live_session_edit", "B", null, null, null, 12, "live:session:edit", "直播场次编辑按钮")); menuIds.add(saveMenu(3073L, 3060L, "开播场次", "live_session_start", "B", null, null, null, 13, "live:session:start", "直播场次开播按钮")); menuIds.add(saveMenu(3074L, 3060L, "结束场次", "live_session_end", "B", null, null, null, 14, "live:session:end", "直播场次结束按钮")); menuIds.add(saveMenu(3075L, 3060L, "复制场次", "live_session_copy", "B", null, null, null, 15, "live:session:copy", "直播场次复制按钮")); menuIds.add(saveMenu(3076L, 3060L, "删除场次", "live_session_delete", "B", null, null, null, 16, "live:session:delete", "直播场次删除按钮")); menuIds.add(saveMenu(3077L, 3060L, "推送开播提醒", "live_session_push_notification", "B", null, null, null, 17, "live:session:push-notification", "直播场次推送提醒按钮")); menuIds.add(saveMenu(3080L, 3050L, "直播预约记录", "live_reserve_view", "C", "/live/course/reserve-records", "Live/ReserveRecords", null, 20, "live:reserve:view", "直播预约记录菜单")); menuIds.add(saveMenu(3081L, 3050L, "直播观看记录", "live_watch_view", "C", "/live/course/watch-records", "Live/WatchRecords", null, 21, "live:watch:view", "直播观看记录菜单")); menuIds.add(saveMenu(3090L, 3050L, "分类管理", "live_category_manage", "C", "/live/course/category", "Live/CategoryList", null, 22, "live:category:view", "分类管理菜单")); menuIds.add(saveMenu(3091L, 3090L, "新增分类", "live_category_add", "B", null, null, null, 1, "live:category:add", "分类新增按钮")); menuIds.add(saveMenu(3092L, 3090L, "编辑分类", "live_category_edit", "B", null, null, null, 2, "live:category:edit", "分类编辑按钮")); menuIds.add(saveMenu(3093L, 3090L, "删除分类", "live_category_delete", "B", null, null, null, 3, "live:category:delete", "分类删除按钮")); menuIds.add(saveMenu(3082L, 3060L, "答题记录", "live_quiz_view", "B", null, null, null, 22, "live:quiz:view", "直播答题记录查看权限")); menuIds.add(saveMenu(3100L, 3050L, "授课专家管理", "live_expert_manage", "C", "/live/course/expert", "Live/ExpertList", null, 30, "live:expert:view", "授课专家管理菜单")); menuIds.add(saveMenu(3101L, 3100L, "新增授课专家", "live_expert_add", "B", null, null, null, 1, "live:expert:add", "授课专家新增按钮")); menuIds.add(saveMenu(3102L, 3100L, "编辑授课专家", "live_expert_edit", "B", null, null, null, 2, "live:expert:edit", "授课专家编辑按钮")); menuIds.add(saveMenu(3103L, 3100L, "启用禁用授课专家", "live_expert_status", "B", null, null, null, 3, "live:expert:status", "授课专家状态按钮")); menuIds.add(saveMenu(3104L, 3100L, "删除授课专家", "live_expert_delete", "B", null, null, null, 4, "live:expert:delete", "授课专家删除按钮")); menuIds.add(saveMenu(3110L, 3050L, "养生课程", "live_health_course_manage", "C", "/live/course/health", "Live/HealthCourseList", null, 40, "live:health-course:view", "养生课程菜单")); menuIds.add(saveMenu(3111L, 3110L, "养生课程详情", "live_health_course_detail", "B", null, null, null, 1, "live:health-course:detail", "养生课程详情按钮")); menuIds.add(saveMenu(3112L, 3110L, "新增养生课程", "live_health_course_add", "B", null, null, null, 2, "live:health-course:add", "养生课程新增按钮")); menuIds.add(saveMenu(3113L, 3110L, "编辑养生课程", "live_health_course_edit", "B", null, null, null, 3, "live:health-course:edit", "养生课程编辑按钮")); menuIds.add(saveMenu(3114L, 3110L, "删除养生课程", "live_health_course_delete", "B", null, null, null, 4, "live:health-course:delete", "养生课程删除按钮")); menuIds.add(saveMenu(3115L, 3110L, "启用禁用养生课程", "live_health_course_status", "B", null, null, null, 5, "live:health-course:status", "养生课程状态按钮")); menuIds.add(saveMenu(3116L, 3110L, "导出养生课程", "live_health_course_export", "B", null, null, null, 6, "live:health-course:export", "养生课程导出按钮")); menuIds.add(saveMenu(3117L, 3110L, "新增视频课程", "live_health_course_video_add", "B", null, null, null, 7, "live:health-course:video:add", "养生课程视频新增按钮")); menuIds.add(saveMenu(3118L, 3110L, "编辑视频课程", "live_health_course_video_edit", "B", null, null, null, 8, "live:health-course:video:edit", "养生课程视频编辑按钮")); menuIds.add(saveMenu(3119L, 3110L, "删除视频课程", "live_health_course_video_delete", "B", null, null, null, 9, "live:health-course:video:delete", "养生课程视频删除按钮")); menuIds.add(saveMenu(3120L, 3050L, "健康科普", "live_health_popularization_manage", "C", "/live/course/health-popularization", "Live/HealthPopularizationList", null, 50, "live:health-popularization:view", "健康科普菜单")); menuIds.add(saveMenu(3121L, 3120L, "新增健康科普", "live_health_popularization_add", "B", null, null, null, 1, "live:health-popularization:add", "健康科普新增按钮")); menuIds.add(saveMenu(3122L, 3120L, "编辑健康科普", "live_health_popularization_edit", "B", null, null, null, 2, "live:health-popularization:edit", "健康科普编辑按钮")); menuIds.add(saveMenu(3123L, 3120L, "删除健康科普", "live_health_popularization_delete", "B", null, null, null, 3, "live:health-popularization:delete", "健康科普删除按钮")); menuIds.add(saveMenu(4000L, 0L, "交易与财务", "trade_root", "M", "/trade", null, "moneyCollect", 400, null, "交易与财务模块")); menuIds.add(saveMenu(4100L, 4000L, "订单", "trade_order_group", "M", "/trade/order", null, null, 10, null, "订单目录")); menuIds.add(saveMenu(4130L, 4100L, "养生课程购买订单", "trade_health_course_purchase_order", "C", "/trade/order/course-purchase", "Trade/CoursePurchase", null, 8, "course:purchase-order:view", "养生课程购买订单菜单")); menuIds.add(saveMenu(4131L, 4130L, "导出养生课程购买订单", "trade_health_course_purchase_order_export", "B", null, null, null, 1, "course:purchase-order:export", "养生课程购买订单导出按钮")); menuIds.add(saveMenu(4132L, 4130L, "退款养生课程购买订单", "trade_health_course_purchase_order_refund", "B", null, null, null, 2, "course:purchase-order:refund", "养生课程购买订单退款按钮")); menuIds.add(saveMenu(4133L, 4130L, "删除养生课程购买订单", "trade_health_course_purchase_order_delete", "B", null, null, null, 3, "course:purchase-order:delete", "养生课程购买订单删除按钮")); menuIds.add(saveMenu(4120L, 4100L, "会员购买订单", "trade_member_purchase_order", "C", "/trade/order/member-purchase", "Trade/MemberPurchase", null, 9, "member:purchase-order:view", "会员购买订单菜单")); menuIds.add(saveMenu(4121L, 4120L, "导出会员购买订单", "trade_member_purchase_order_export", "B", null, null, null, 1, "member:purchase-order:export", "会员购买订单导出按钮")); menuIds.add(saveMenu(4122L, 4120L, "退款会员购买订单", "trade_member_purchase_order_refund", "B", null, null, null, 2, "member:purchase-order:refund", "会员购买订单退款按钮")); menuIds.add(saveMenu(4123L, 4120L, "删除会员购买订单", "trade_member_purchase_order_delete", "B", null, null, null, 3, "member:purchase-order:delete", "会员购买订单删除按钮")); menuIds.add(saveMenu(4110L, 4100L, "积分兑换", "trade_points_exchange", "C", "/trade/order/points-exchange", "Trade/PointsExchange", null, 10, "points:exchange:view", "积分兑换菜单")); menuIds.add(saveMenu(4111L, 4110L, "兑换详情", "trade_points_exchange_detail", "B", null, null, null, 1, "points:exchange:detail", "积分兑换详情按钮")); menuIds.add(saveMenu(4112L, 4110L, "积分兑换发货", "trade_points_exchange_ship", "B", null, null, null, 2, "points:exchange:ship", "积分兑换发货按钮")); menuIds.add(saveMenu(4113L, 4110L, "积分兑换删除", "trade_points_exchange_delete", "B", null, null, null, 3, "points:exchange:delete", "积分兑换删除按钮")); menuIds.add(saveMenu(4114L, 4110L, "积分兑换导出", "trade_points_exchange_export", "B", null, null, null, 4, "points:exchange:export", "积分兑换导出按钮")); menuIds.add(saveMenu(4200L, 4000L, "财务流水", "trade_finance_flow_group", "M", "/trade/flow", null, null, 20, null, "财务流水目录")); menuIds.add(saveMenu(4220L, 4200L, "支付流水", "trade_payment_flow", "C", "/trade/flow/payment-flow", "Trade/PaymentFlow", null, 10, "payment:flow:view", "支付流水菜单")); menuIds.add(saveMenu(4221L, 4220L, "导出支付流水", "trade_payment_flow_export", "B", null, null, null, 1, "payment:flow:export", "支付流水导出按钮")); menuIds.add(saveMenu(4230L, 4200L, "退费流水", "trade_refund_flow", "C", "/trade/flow/refund-flow", "Trade/RefundFlow", null, 20, "refund:flow:view", "退费流水菜单")); menuIds.add(saveMenu(4231L, 4230L, "导出退费流水", "trade_refund_flow_export", "B", null, null, null, 1, "refund:flow:export", "退费流水导出按钮")); menuIds.add(saveMenu(4210L, 4200L, "积分收支明细", "trade_points_ledger", "C", "/trade/flow/points-ledger", "Trade/PointsLedger", null, 30, "points:ledger:view", "积分收支明细菜单")); menuIds.add(saveMenu(4211L, 4210L, "导出积分收支明细", "trade_points_ledger_export", "B", null, null, null, 1, "points:ledger:export", "积分收支明细导出按钮")); return menuIds; } private Long saveMenu( Long id, Long parentId, String name, String menuCode, String type, String path, String component, String icon, Integer sort, String permissionKey, String remark ) { SysMenu menu = sysMenuMapper.selectById(id); if (menu == null) { menu = sysMenuMapper.selectOne(new LambdaQueryWrapper() .eq(SysMenu::getMenuCode, menuCode) .last("limit 1")); } boolean isNew = menu == null; if (isNew) { menu = new SysMenu(); menu.setId(id); menu.setCreatedAt(LocalDateTime.now()); } menu.setParentId(parentId); menu.setName(name); menu.setMenuCode(menuCode); menu.setType(type); menu.setPath(path); menu.setComponent(component); menu.setIcon(icon); menu.setSort(sort); menu.setStatus(1); menu.setVisible(1); menu.setPermissionKey(permissionKey); menu.setRemark(remark); menu.setDeleted(0); menu.setUpdatedAt(LocalDateTime.now()); if (isNew) { sysMenuMapper.insert(menu); } else { sysMenuMapper.updateById(menu); } return menu.getId(); } private void ensureRoleMenuRelations(Long roleId, List menuIds) { for (Long menuId : menuIds) { SysRoleMenu exists = sysRoleMenuMapper.selectOne(new LambdaQueryWrapper() .eq(SysRoleMenu::getRoleId, roleId) .eq(SysRoleMenu::getMenuId, menuId) .last("limit 1")); if (exists != null) { continue; } SysRoleMenu roleMenu = new SysRoleMenu(); roleMenu.setRoleId(roleId); roleMenu.setMenuId(menuId); roleMenu.setCreatedAt(LocalDateTime.now()); sysRoleMenuMapper.insert(roleMenu); } } private void ensureUserRoleRelation(Long userId, Long roleId) { SysUserRole exists = sysUserRoleMapper.selectOne(new LambdaQueryWrapper() .eq(SysUserRole::getUserId, userId) .eq(SysUserRole::getRoleId, roleId) .last("limit 1")); if (exists != null) { return; } SysUserRole userRole = new SysUserRole(); userRole.setUserId(userId); userRole.setRoleId(roleId); userRole.setCreatedAt(LocalDateTime.now()); sysUserRoleMapper.insert(userRole); } }