新增密炼物料皮重策略功能,包括相关实体、服务、控制器及接口,支持桌面端免密CRUD操作,优化打印记录与原料入场记录的衍生字段填充逻辑,提升用户体验。
This commit is contained in:
@@ -268,6 +268,8 @@ namespace YY.Admin.Core.SqlSugar
|
||||
if (config.SeedSettings.EnableInitSeed) InitSeedData(db, config);
|
||||
// 关闭全量种子时首启可能无菜单数据;补一份基准菜单,避免打包版本左侧空白
|
||||
EnsureBaselineSysMenuSeed(db, config);
|
||||
// 旧库升级:按种子补全缺失菜单及租户/角色授权(仅插入缺失项)
|
||||
EnsureIncrementalDesktopMenuSeed(db, config);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -392,6 +394,106 @@ namespace YY.Admin.Core.SqlSugar
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 旧库升级:sys_menu 已有数据时,按 SysMenuSeedData 补全缺失菜单,并同步租户菜单、管理员角色菜单授权。
|
||||
/// </summary>
|
||||
private static void EnsureIncrementalDesktopMenuSeed(SqlSugarScope db, DbConnectionConfig config)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!string.Equals(config.ConfigId.ToString(), SqlSugarConst.MainConfigId, StringComparison.Ordinal))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (config.DbType != DbType.Sqlite)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var dbProvider = db.GetConnectionScope(config.ConfigId);
|
||||
var menuEntityInfo = dbProvider.EntityMaintenance.GetEntityInfo(typeof(SysMenu));
|
||||
if (!dbProvider.DbMaintenance.IsAnyTable(menuEntityInfo.DbTableName, false))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (dbProvider.Queryable<SysMenu>().ClearFilter().Count() == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var seedMenus = new SysMenuSeedData().HasData().ToList();
|
||||
var existingMenuIds = dbProvider.Queryable<SysMenu>().ClearFilter()
|
||||
.Select(m => m.Id).ToList().ToHashSet();
|
||||
var missingMenus = seedMenus.Where(m => !existingMenuIds.Contains(m.Id)).ToList();
|
||||
if (missingMenus.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var menu in missingMenus)
|
||||
{
|
||||
if (menu.CreateTime == default)
|
||||
{
|
||||
menu.CreateTime = DateTime.Parse("2022-02-10 00:00:00");
|
||||
}
|
||||
|
||||
menu.Status = StatusEnum.Enable;
|
||||
}
|
||||
|
||||
dbProvider.Insertable(missingMenus).ExecuteCommand();
|
||||
|
||||
const long defaultTenantId = 1300000000001;
|
||||
var tenantSeed = new SysTenantMenuSeedData().HasData()
|
||||
.Where(t => t.TenantId == defaultTenantId)
|
||||
.ToList();
|
||||
var existingTenantMenuIds = dbProvider.Queryable<SysTenantMenu>()
|
||||
.Where(t => t.TenantId == defaultTenantId)
|
||||
.Select(t => t.MenuId)
|
||||
.ToList()
|
||||
.ToHashSet();
|
||||
|
||||
var tenantMenusToInsert = tenantSeed
|
||||
.Where(t => missingMenus.Any(m => m.Id == t.MenuId) && !existingTenantMenuIds.Contains(t.MenuId))
|
||||
.Select(t => new SysTenantMenu { Id = t.MenuId, TenantId = t.TenantId, MenuId = t.MenuId })
|
||||
.ToList();
|
||||
if (tenantMenusToInsert.Count > 0)
|
||||
{
|
||||
dbProvider.Insertable(tenantMenusToInsert).ExecuteCommand();
|
||||
}
|
||||
|
||||
var adminRole = dbProvider.Queryable<SysRole>().OrderBy(r => r.Id).First();
|
||||
if (adminRole == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var existingRoleMenuIds = dbProvider.Queryable<SysRoleMenu>()
|
||||
.Where(r => r.RoleId == adminRole.Id)
|
||||
.Select(r => r.MenuId)
|
||||
.ToList()
|
||||
.ToHashSet();
|
||||
var roleMenusToInsert = missingMenus
|
||||
.Where(m => !existingRoleMenuIds.Contains(m.Id))
|
||||
.Select(m => new SysRoleMenu
|
||||
{
|
||||
Id = m.Id + (adminRole.Id % 1300000000000),
|
||||
RoleId = adminRole.Id,
|
||||
MenuId = m.Id,
|
||||
})
|
||||
.ToList();
|
||||
if (roleMenusToInsert.Count > 0)
|
||||
{
|
||||
dbProvider.Insertable(roleMenusToInsert).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// 启动阶段不因增量菜单失败而阻断
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 兼容旧库:补齐桌面端「登录设置」所需的 sys_config 配置项(升级前库可能缺少这些 code)
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user