新增密炼物料皮重策略功能,包括相关实体、服务、控制器及接口,支持桌面端免密CRUD操作,优化打印记录与原料入场记录的衍生字段填充逻辑,提升用户体验。

This commit is contained in:
geht
2026-06-02 16:28:51 +08:00
parent 37239e1b0a
commit fef7d25e3c
75 changed files with 4407 additions and 170 deletions

View File

@@ -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>