You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

179 lines
6.4 KiB
C#

using System.Reflection;
using Com.Ctrip.Framework.Apollo;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Identity.Client;
using NeoSmart.Caching.Sqlite;
using Newtonsoft.Json;
using Sln.Wcs.HikRoBotSdk;
using Sln.Wcs.Configs;
using Sln.Wcs.Repository;
using Sln.Wcs.Serilog;
using Sln.Wcs.ElevatorSdk.Dto;
using ZiggyCreatures.Caching.Fusion;
using ZiggyCreatures.Caching.Fusion.Serialization.NewtonsoftJson;
using Microsoft.Extensions.Hosting.Internal;
using SqlSugar;
using Sln.Wcs.Plc;
using Serilog;
using Sln.Wcs.Model.Domain;
using Sln.Wcs.Common.Functions;
using Sln.Wcs.Function.Functions;
using Sln.Wcs.Rfid;
using System.Windows;
using Sln.Wcs.ElevatorSdk;
namespace Sln.Wcs
{
public class Program
{
[STAThread]
static async Task Main(string[] args)
{
var services = new ServiceCollection();
ConfigureServices(services);
var serviceProvider = services.BuildServiceProvider();
serviceProvider.UseSerilogExtensions();
var config = serviceProvider.GetService<IConfiguration>();
var log = serviceProvider.GetService<SerilogHelper>();
var sqlconfig = serviceProvider.GetRequiredService<ISqlSugarClient>();
#region 测试场地
Thread wpfThread = new Thread(() =>
{
Sln_Wpf.App app = new Sln_Wpf.App();
app.InitializeServices(serviceProvider);
Sln_Wpf.MainWindow mainWindow = new Sln_Wpf.MainWindow();
Sln_Wpf.App.ServiceProvider = serviceProvider;
app.Run(mainWindow);
});
wpfThread.SetApartmentState(ApartmentState.STA);
wpfThread.Start();
MainCentralControl mainCentralControl = new MainCentralControl(serviceProvider);
mainCentralControl.Start();
sqlconfig.AsTenant().ChangeDatabase("wcs");
//var configtable = sqlconfig.Queryable<BaseConfigInfo>().First();
BaseConfigInfo baseConfigInfo = new BaseConfigInfo();
baseConfigInfo.ConfigKey = "测试场地";
baseConfigInfo.ConfigValue = "测试";
baseConfigInfo.CreateTime = DateTime.Now;
baseConfigInfo.IsFlag = 1;
baseConfigInfo.Type = "bool";
baseConfigInfo.PlcConfigId = 1;
var plcSqlServer = new plcSqlFunction(serviceProvider);
//plcSqlServer.insertFunction(baseConfigInfo);
//plcSqlServer.deleteFunction(baseConfigInfo);
var material = new BaseMaterialInfo
{
MaterialCode = "MAT001",
MaterialName = "测试物料",
MaterialType = "原材料",
MaterialCategory = "电子",
Status = 1,
IsDeleted = false,
CreateUser = "admin",
UpdateUser = "admin"
};
var MaterialSqlServer = new materialinfoSqlFunction(serviceProvider);
MaterialSqlServer.insertFunction(material);
#endregion
log.Info($"系统启动成功,日志存放位置:{config["logPath"]}");
}
private static void ConfigureServices(IServiceCollection services)
{
var basePath = AppContext.BaseDirectory;
ApolloConfigureServices(services, ref basePath, out IConfiguration apolloConfiguration);
Assembly[] assemblies = {
Assembly.LoadFrom(Path.Combine(basePath, "Sln.Wcs.Common.dll")),
Assembly.LoadFrom(Path.Combine(basePath, "Sln.Wcs.Cache.dll")),
Assembly.LoadFrom(Path.Combine(basePath, "Sln.Wcs.Repository.dll")),
Assembly.LoadFrom(Path.Combine(basePath, "Sln.Wcs.HikRoBotApi.dll")),
Assembly.LoadFrom(Path.Combine(basePath, "Sln.Wcs.HikRoBotSdk.dll")),
};
services.AddControllers();
services.Scan(scan => scan.FromAssemblies(assemblies)
.AddClasses()
.AsImplementedInterfaces()
.AsSelf()
.WithTransientLifetime());
services.AddSingleton<List<ElevatorInfo>>(x =>
{
var configuration = x.GetService<IConfiguration>();
return configuration.GetSection("ElevatorInfo").Get<List<ElevatorInfo>>();
});
services.AddSingleton(typeof(SerilogHelper));
services.AddSqlSugarSetup();
//注册AppConfig
services.AddSingleton<AppConfig>(provider =>
{
var configuration = provider.GetService<IConfiguration>();
return configuration.GetSection("AppConfig").Get<AppConfig>();
});
services.AddPlcFactorySetup();
services.AddRfidFactorySetup();
services.AddElevatorSetup();
services.AddFusionCache()
.WithSerializer(
new FusionCacheNewtonsoftJsonSerializer()
)
.WithDistributedCache(new SqliteCache(new SqliteCacheOptions
{
CachePath = apolloConfiguration["cachePath"]
}));
}
/// <summary>
/// Apollo 配置中心
/// </summary>
/// <param name="services"></param>
/// <param name="basePath"></param>
/// <param name="apolloConfiguration"></param>
private static void ApolloConfigureServices(IServiceCollection services, ref string basePath, out IConfiguration apolloConfiguration)
{
var localConfiguration = new ConfigurationBuilder()
.SetBasePath(basePath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
var apolloConfigSection = localConfiguration.GetSection("apollo");
services.AddSingleton<IConfiguration>(localConfiguration);
var configurationBuilder = new ConfigurationBuilder()
.SetBasePath(basePath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddApollo(apolloConfigSection)
.AddDefault();
apolloConfiguration = configurationBuilder.Build();
services.Remove(new ServiceDescriptor(typeof(IConfiguration), localConfiguration));
services.AddSingleton<IConfiguration>(apolloConfiguration);
}
}
}