using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.IO; using YY.Admin.Core.Util; namespace YY.Admin.Services.Service.EquipmentDb; /// /// 设备库(SQL Server 中间库)本地连接配置。 /// public static class EquipmentDbSettingsStore { public class EquipmentDbSettings { public bool Enabled { get; set; } = true; public string DeviceId { get; set; } = string.Empty; public string ServerHost { get; set; } = "127.0.0.1"; public int ServerPort { get; set; } = 1433; public string DbName { get; set; } = "MES_ShareDB"; public string Username { get; set; } = "sa"; public string Password { get; set; } = string.Empty; public int ConnectTimeoutSeconds { get; set; } = 15; } public static string GetUserConfigPath() { var dir = AppWritablePaths.EnsureDirectoryExists(AppWritablePaths.ConfigurationDirectory); return Path.Combine(dir, "equipment-db.json"); } public static EquipmentDbSettings Load() { var path = GetUserConfigPath(); if (!File.Exists(path)) { return new EquipmentDbSettings { DeviceId = Environment.MachineName }; } try { var settings = JsonConvert.DeserializeObject(File.ReadAllText(path)) ?? new EquipmentDbSettings(); if (string.IsNullOrWhiteSpace(settings.DeviceId)) { settings.DeviceId = Environment.MachineName; } return settings; } catch { return new EquipmentDbSettings { DeviceId = Environment.MachineName }; } } public static void Save(EquipmentDbSettings settings) { if (settings == null) { throw new ArgumentNullException(nameof(settings)); } if (string.IsNullOrWhiteSpace(settings.DeviceId)) { settings.DeviceId = Environment.MachineName; } var path = GetUserConfigPath(); File.WriteAllText(path, JsonConvert.SerializeObject(settings, Formatting.Indented)); } public static string BuildConnectionString(EquipmentDbSettings s) { var timeout = s.ConnectTimeoutSeconds > 0 ? s.ConnectTimeoutSeconds : 15; return $"Server={s.ServerHost},{s.ServerPort};Database={s.DbName};User Id={s.Username};Password={s.Password};" + $"Encrypt=False;TrustServerCertificate=True;Connect Timeout={timeout};"; } /// /// 从 bundled appsettings 的 EquipmentDb 节点合并默认值(若有)。 /// public static EquipmentDbSettings LoadMergedWithAppSettings(JObject? root) { var settings = Load(); if (root?["EquipmentDb"] is not JObject eq) { return settings; } if (string.IsNullOrWhiteSpace(settings.ServerHost) || settings.ServerHost == "127.0.0.1") { settings.ServerHost = eq.Value("ServerHost") ?? settings.ServerHost; } if (settings.ServerPort == 1433 && eq.Value("ServerPort") is int p) { settings.ServerPort = p; } if (string.IsNullOrWhiteSpace(settings.DbName) || settings.DbName == "MES_ShareDB") { settings.DbName = eq.Value("DbName") ?? settings.DbName; } if (string.IsNullOrWhiteSpace(settings.Username) || settings.Username == "sa") { settings.Username = eq.Value("Username") ?? settings.Username; } if (string.IsNullOrWhiteSpace(settings.Password)) { settings.Password = eq.Value("Password") ?? settings.Password; } return settings; } }