diff --git a/HybirdFrameworkCore/Autofac/AutofacModuleRegister.cs b/HybirdFrameworkCore/Autofac/AutofacModuleRegister.cs index 9510427..b47c643 100644 --- a/HybirdFrameworkCore/Autofac/AutofacModuleRegister.cs +++ b/HybirdFrameworkCore/Autofac/AutofacModuleRegister.cs @@ -50,17 +50,14 @@ public class AutofacModuleRegister : Module { if (ScopeConst.InstancePerLifetimeScope == scope.Scope) { - Log.Debug($"register InstancePerLifetimeScope {type}"); instancePerLifetimeScopeList.Add(type); } else if (ScopeConst.InstancePerDependency == scope.Scope) { - Log.Debug($"register InstancePerDependency {type}"); instancePerDependencyList.Add(type); } else { - Log.Debug($"register SingleInstance {type}"); defaultList.Add(type); } } diff --git a/HybirdFrameworkCore/Configuration/AppSettingsHelper.cs b/HybirdFrameworkCore/Configuration/AppSettingsHelper.cs index b0d1d8a..118423a 100644 --- a/HybirdFrameworkCore/Configuration/AppSettingsHelper.cs +++ b/HybirdFrameworkCore/Configuration/AppSettingsHelper.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.Configuration; +using log4net; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.Json; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -10,11 +11,8 @@ namespace HybirdFrameworkCore.Configuration; /// public class AppSettingsHelper { - public AppSettingsHelper(string contentPath) - { - } - - private static IConfiguration Configuration { get; set; } + private static readonly ILog Log = LogManager.GetLogger(typeof(AppSettingsHelper)); + private static IConfiguration? Configuration { get; set; } /// /// 封装要操作的字符 @@ -22,21 +20,35 @@ public class AppSettingsHelper /// /// 节点配置 /// - public static string GetContent(params string[] sections) + public static string? GetContent(params string[] sections) { try { - var contentPath = AppDomain.CurrentDomain.BaseDirectory; - var Path = "appsettings.json"; - Configuration = new ConfigurationBuilder().SetBasePath(contentPath).Add(new JsonConfigurationSource - { Path = Path, Optional = false, ReloadOnChange = true }).Build(); + if (Configuration == null) + { + string? activeProfile = Environment.GetEnvironmentVariable("profiles_active"); + if (activeProfile == null) + { + activeProfile = ""; + } + else + { + activeProfile += "."; + } + var path = "appsettings."+ activeProfile+ "json"; + Log.Info($"read path={path}"); + var contentPath = AppDomain.CurrentDomain.BaseDirectory; + Configuration = new ConfigurationBuilder().SetBasePath(contentPath).Add(new JsonConfigurationSource + { Path = path, Optional = false, ReloadOnChange = true }).Build(); + } + if (sections.Any()) return Configuration[string.Join(":", sections)]; } catch (Exception) { } - return ""; + return null; } public static bool SetContent(string value, params string[] sections) @@ -44,9 +56,18 @@ public class AppSettingsHelper try { var contentPath = AppDomain.CurrentDomain.BaseDirectory; - var Path = contentPath + "appsettings.json"; + string? activeProfile = Environment.GetEnvironmentVariable("profiles_active"); + if (activeProfile == null) + { + activeProfile = ""; + } + else + { + activeProfile += "."; + } + var path = "appsettings."+ activeProfile+ "json"; JObject jsonObject; - using (var file = new StreamReader(Path)) + using (var file = new StreamReader(path)) using (var reader = new JsonTextReader(file)) { jsonObject = (JObject)JToken.ReadFrom(reader); @@ -54,7 +75,7 @@ public class AppSettingsHelper jsonObject[sections[0]][sections[1]] = value; } - using (var writer = new StreamWriter(Path)) + using (var writer = new StreamWriter(path)) using (var jsonwriter = new JsonTextWriter(writer)) { jsonObject.WriteTo(jsonwriter); @@ -67,4 +88,24 @@ public class AppSettingsHelper return true; } + + /// + /// + /// + /// + /// + public static bool GetBool(params string[] sections) + { + string s = GetContent(sections); + if (string.IsNullOrWhiteSpace(s)) + { + return false; + } + if (bool.TryParse(s, out var result)) + { + return result; + } + + return false; + } } \ No newline at end of file diff --git a/Service/Charger/Client/ClientMgr.cs b/Service/Charger/Client/ClientMgr.cs index 4d02615..eacbf02 100644 --- a/Service/Charger/Client/ClientMgr.cs +++ b/Service/Charger/Client/ClientMgr.cs @@ -159,6 +159,12 @@ public static class ClientMgr Thread.Sleep(1000 * 30); DateTime now = DateTime.Now; + if (StaticStationInfo.AutoChargeEnabled != 1) + { + Log.Info("AutoChargeEnabled = 0 continue"); + continue; + } + List binInfos = binInfoRepository.Query(); if (binInfos.Count < 0) { @@ -227,6 +233,7 @@ public static class ClientMgr int needStopCount = chargingList.Count - (canSwapList.Count - needBatteryCount); if (needStopCount > 0) { + //停电量低的 chargingList.Sort((a,b) => (a.Soc??0).CompareTo(b.Soc??0)); for (int i = 0; i < needStopCount; i++) { @@ -238,6 +245,7 @@ public static class ClientMgr else { List canChargeList = binInfos.Where(it => it.Soc != null && Convert.ToSingle(it.Soc) < StaticStationInfo.SwapSoc && it.CanChargeFlag == 1).ToList(); + //启动电量高的 canChargeList.Sort((a,b) => (b.Soc??0).CompareTo(a.Soc??0)); byte chargeSoc = StaticStationInfo.ChargeSoc; @@ -277,8 +285,8 @@ public static class ClientMgr { Log.Info($"begin to connect {netInfo.Code} {netInfo.NetAddr}:{netInfo.NetPort}"); ChargerClient client = AppInfo.Container.Resolve(); - client.BinNo = binInfo.No; - client.BatteryNo = binInfo.BatteryNo; + client.BinNo = binInfo?.No; + client.BatteryNo = binInfo?.BatteryNo; client.InitBootstrap(netInfo.NetAddr, int.Parse(netInfo.NetPort)); Task.Run(() => diff --git a/WebStarter/Program.cs b/WebStarter/Program.cs index 62c75a0..0fcbbb1 100644 --- a/WebStarter/Program.cs +++ b/WebStarter/Program.cs @@ -4,11 +4,13 @@ using HybirdFrameworkCore.Autofac; using HybirdFrameworkCore.Configuration; using HybirdFrameworkCore.Entity; using HybirdFrameworkCore.Redis; +using log4net; using Service.Charger.Client; using SqlSugar; using SqlSugar.IOC; var builder = WebApplication.CreateBuilder(args); +var log = LogManager.GetLogger(typeof(Program)); builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()); builder.Host.ConfigureContainer(cb => @@ -31,15 +33,11 @@ builder.Host.ConfigureContainer(cb => }); //redis -var section = builder.Configuration.GetSection("Redis"); -//连接字符串 -var redisConnectionString = section.GetSection("Connection").Value; -//实例名称 -var instanceName = section.GetSection("InstanceName").Value; -//默认数据库 -var _defaultDB = int.Parse(section.GetSection("DefaultDB").Value ?? "0"); +var redisConnectionString = AppSettingsHelper.GetContent("Redis", "Connection"); +var instanceName = AppSettingsHelper.GetContent("Redis", "InstanceName");//默认数据库 +var defaultDb = int.Parse(AppSettingsHelper.GetContent("Redis", "DefaultDB") ?? "0"); if (redisConnectionString != null && instanceName != null) - builder.Services.AddSingleton(new RedisHelper(redisConnectionString, instanceName, _defaultDB)); + builder.Services.AddSingleton(new RedisHelper(redisConnectionString, instanceName, defaultDb)); builder.Services.AddControllers(); @@ -79,12 +77,9 @@ var app = builder.Build(); // Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.UseSwagger(); - app.UseSwaggerUI(); - app.UseStaticFiles(); -} +app.UseSwagger(); +app.UseSwaggerUI(); +app.UseStaticFiles(); app.UseAuthorization(); app.UseCors("myCors"); @@ -93,9 +88,11 @@ app.MapControllers(); var list = AppSettingsHelper.GetContent("Kestrel", "Endpoints", "http", "Url"); foreach (var s in list.Split(";")) { + log.Info($"use url={s}"); app.Urls.Add(s); } + AppInfo.Container = app.Services.GetAutofacRoot(); ClientMgr.InitClient(); diff --git a/WebStarter/Properties/launchSettings.json b/WebStarter/Properties/launchSettings.json index e7e364f..b37c499 100644 --- a/WebStarter/Properties/launchSettings.json +++ b/WebStarter/Properties/launchSettings.json @@ -16,7 +16,8 @@ "launchUrl": "swagger", "applicationUrl": "http://localhost:5034", "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" + "ASPNETCORE_ENVIRONMENT": "Development", + "profiles_active": "dev" } }, "IIS Express": { @@ -24,7 +25,8 @@ "launchBrowser": true, "launchUrl": "swagger", "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" + "ASPNETCORE_ENVIRONMENT": "Development", + "profiles_active": "dev" } } } diff --git a/WebStarter/WebStarter.csproj b/WebStarter/WebStarter.csproj index 00e10cf..a81f116 100644 --- a/WebStarter/WebStarter.csproj +++ b/WebStarter/WebStarter.csproj @@ -26,7 +26,7 @@ - + Always diff --git a/WebStarter/appsettings.Development.json b/WebStarter/appsettings.Development.json deleted file mode 100644 index 0c208ae..0000000 --- a/WebStarter/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/WebStarter/appsettings.dev.json b/WebStarter/appsettings.dev.json new file mode 100644 index 0000000..49bf581 --- /dev/null +++ b/WebStarter/appsettings.dev.json @@ -0,0 +1,31 @@ +{ + "ConnectionStrings": { + "ConfigId": "master", + "DbType": "MySql", + "SqlConnection": "server=192.168.2.2;Port=3306;Database=huanneng_dev;Uid=root;Pwd=Rszn123;Charset=utf8;" + }, + "Update": { + "AutoUpdate": "false", + "Version": "1.1.0.1", + "Url": "http://121.4.95.243:8090/Updates/AutoUpdaterStarter.xml" + }, + "Redis": { + "Connection": "106.12.36.89:6379,password=123456", + "InstanceName": "local", + "DefaultDB": "8" + }, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "Kestrel": { + "Endpoints": { + "http": { + "Url": "http://*:15035" + } + } + }, + "AllowedHosts": "*" +} diff --git a/WebStarter/appsettings.json b/WebStarter/appsettings.json index 3bd6db4..0c208ae 100644 --- a/WebStarter/appsettings.json +++ b/WebStarter/appsettings.json @@ -1,31 +1,8 @@ { - "ConnectionStrings": { - "ConfigId": "master", - "DbType": "MySql", - "SqlConnection": "server=127.0.0.1;Port=3306;Database=huanneng_dev;Uid=root;Pwd=anyixing2023!@#;Charset=utf8;" - }, - "Update": { - "AutoUpdate": "false", - "Version": "1.1.0.1", - "Url": "http://121.4.95.243:8090/Updates/AutoUpdaterStarter.xml" - }, - "Redis": { - "Connection": "106.12.36.89:6379,password=123456", - "InstanceName": "local", - "DefaultDB": "8" - }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } - }, - "Kestrel": { - "Endpoints": { - "http": { - "Url": "http://0.0.0.0:5035" - } - } - }, - "AllowedHosts": "*" + } } diff --git a/WebStarter/appsettings.prod.json b/WebStarter/appsettings.prod.json new file mode 100644 index 0000000..82082d3 --- /dev/null +++ b/WebStarter/appsettings.prod.json @@ -0,0 +1,31 @@ +{ + "ConnectionStrings": { + "ConfigId": "master", + "DbType": "MySql", + "SqlConnection": "server=localhost;Port=3306;Database=huanneng_dev;Uid=root;Pwd=123456;Charset=utf8;" + }, + "Update": { + "AutoUpdate": "false", + "Version": "1.1.0.1", + "Url": "http://121.4.95.243:8090/Updates/AutoUpdaterStarter.xml" + }, + "Redis": { + "Connection": "localhost:6379,password=123456", + "InstanceName": "local", + "DefaultDB": "8" + }, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "Kestrel": { + "Endpoints": { + "http": { + "Url": "http://*:5035" + } + } + }, + "AllowedHosts": "*" +} diff --git a/WebStarter/bin/Debug/net6.0/appsettings.Development.json b/WebStarter/bin/Debug/net6.0/appsettings.Development.json deleted file mode 100644 index 0c208ae..0000000 --- a/WebStarter/bin/Debug/net6.0/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -}