diff --git a/yy-admin-master/YY.Admin.Core/SqlSugar/SqlSugarSetup.cs b/yy-admin-master/YY.Admin.Core/SqlSugar/SqlSugarSetup.cs index e615330..57f85f4 100644 --- a/yy-admin-master/YY.Admin.Core/SqlSugar/SqlSugarSetup.cs +++ b/yy-admin-master/YY.Admin.Core/SqlSugar/SqlSugarSetup.cs @@ -18,6 +18,7 @@ using System.Text; using System.Threading.Tasks; using Yitter.IdGenerator; using YY.Admin.Core; +using YY.Admin.Core.Const; using YY.Admin.Core.Extension; using YY.Admin.Core.Option; using YY.Admin.Core.SeedData; @@ -259,6 +260,8 @@ namespace YY.Admin.Core.SqlSugar EnsureJeecgSysUserMirrorTable(dbProvider, config); // 兜底:确保 Jeecg 数据字典同构表存在(数据字典页面“同步数据字典”写入此表) EnsureJeecgSysDictItemMirrorTable(dbProvider, config); + // 兼容旧库:补齐桌面端登录设置相关 sys_config 项 + EnsureDesktopLoginConfigSeed(dbProvider, config); //// 初始化视图 //if (config.DbSettings.EnableInitView) InitView(dbProvider); // 初始化种子数据 @@ -389,6 +392,59 @@ namespace YY.Admin.Core.SqlSugar } } + /// + /// 兼容旧库:补齐桌面端「登录设置」所需的 sys_config 配置项(升级前库可能缺少这些 code) + /// + private static void EnsureDesktopLoginConfigSeed(SqlSugarScopeProvider dbProvider, DbConnectionConfig config) + { + try + { + var tableName = dbProvider.EntityMaintenance.GetEntityInfo(typeof(SysConfig)).DbTableName; + if (!dbProvider.DbMaintenance.IsAnyTable(tableName, false)) + { + return; + } + + var loginConfigCodes = new HashSet(StringComparer.OrdinalIgnoreCase) + { + ConfigConst.SysTokenExpire, + ConfigConst.SysRefreshTokenExpire, + ConfigConst.SysTokenIdleExtendMinutes, + ConfigConst.SysTokenCheckIntervalMinutes, + ConfigConst.SysTokenNeverExpire, + }; + + var seedRows = new SysConfigSeedData().HasData() + .Where(c => !string.IsNullOrWhiteSpace(c.Code) && loginConfigCodes.Contains(c.Code)) + .ToList(); + if (seedRows.Count == 0) + { + return; + } + + var existingCodes = dbProvider.Queryable() + .Where(c => loginConfigCodes.Contains(c.Code)) + .Select(c => c.Code) + .ToList() + .Where(c => !string.IsNullOrWhiteSpace(c)) + .ToHashSet(StringComparer.OrdinalIgnoreCase); + + var missing = seedRows + .Where(s => !existingCodes.Contains(s.Code!)) + .ToList(); + if (missing.Count == 0) + { + return; + } + + dbProvider.Insertable(missing).ExecuteCommand(); + } + catch + { + // 无权限、从库只读等场景不阻断启动 + } + } + /// /// 若 sys_menu 缺少桌面默认首页标记列,则 ALTER 补齐(与实体 SysMenu.IsDefaultDesktopHome 一致) /// diff --git a/yy-admin-master/YY.Admin.Services/Service/Config/SysConfigService.cs b/yy-admin-master/YY.Admin.Services/Service/Config/SysConfigService.cs index dfc1d05..3138822 100644 --- a/yy-admin-master/YY.Admin.Services/Service/Config/SysConfigService.cs +++ b/yy-admin-master/YY.Admin.Services/Service/Config/SysConfigService.cs @@ -1,6 +1,7 @@ using SqlSugar; using YY.Admin.Core; using YY.Admin.Core.Const; +using YY.Admin.Core.SeedData; namespace YY.Admin.Services.Service.Config { @@ -41,7 +42,28 @@ namespace YY.Admin.Services.Service.Config .ExecuteCommandAsync(); if (n <= 0) - return (false, "未找到对应配置项或无需更新"); + { + // 旧库可能缺少新增配置项,按种子模板补插后再写入 + var seed = new SysConfigSeedData().HasData() + .FirstOrDefault(c => string.Equals(c.Code, code, StringComparison.OrdinalIgnoreCase)); + if (seed == null) + return (false, "未找到对应配置项或无需更新"); + + var row = new SysConfig + { + Id = seed.Id, + Name = seed.Name, + Code = seed.Code, + Value = value, + SysFlag = seed.SysFlag, + GroupCode = seed.GroupCode, + OrderNo = seed.OrderNo, + Remark = seed.Remark, + CreateTime = DateTime.Now, + UpdateTime = DateTime.Now, + }; + await _dbContext.Insertable(row).ExecuteCommandAsync(); + } _sysCacheService.Remove($"{CacheConst.KeyConfig}{code}"); return (true, "保存成功");