From 611662d96891df6af8bb03f830ffcc57ab6a2a50 Mon Sep 17 00:00:00 2001
From: Rodney Chen <rodney.chen@hotmail.com>
Date: 星期二, 07 五月 2024 15:42:56 +0800
Subject: [PATCH] 增加MQTT

---
 Tiger.Api/Controllers/Test/TestController.R.cs          |   48 
 Tiger.Model.Net/Tiger.Model.Net.csproj                  |   17 
 Tiger.Api/Program.cs                                    |  196 ++--
 Tiger.IBusiness/Core/ApiConfig.cs                       |    1 
 Tiger.Model.Net/Entitys/MES/SMT_LOADING.cs              |  109 ++
 Tiger.Model.Net/Entitys/MES/SMT_FEEDER_TYPE.cs          |   77 ++
 Tiger.Model.Net/Entitys/MES/SMT_TOOL_HIS.cs             |   97 ++
 Tiger.Api/ApiWebHostService.cs                          |   19 
 Tiger.Model.Net/packages.config                         |    2 
 Tiger.Api/Tiger.Api.csproj                              |   17 
 Tiger.Api/Startup.cs                                    |   12 
 Tiger.Api/Views/Shared/_Layout.cshtml                   |   49 +
 Tiger.Api/Views/_ViewImports.cshtml                     |    2 
 Tiger.Api/Views/Shared/Error.cshtml                     |   25 
 Tiger.Model.Net/Entitys/MES/SMT_WO_TABLE.cs             |  129 +++
 Tiger.Api/Views/Shared/_Layout.cshtml.css               |   48 +
 Tiger.Api/appsettings.json                              |   16 
 Tiger.Model.Net/Entitys/MES/SMT_SOLDER.cs               |  161 ++++
 Tiger.Business/Tiger.Business.csproj                    |    4 
 Tiger.Api/Controllers/HomeController.cs                 |   25 
 Tiger.Api/Views/Home/Privacy.cshtml                     |    6 
 Tiger.IBusiness/Tiger.IBusiness.csproj                  |    4 
 Tiger.Model.Net/Entitys/MES/SMT_LOAD_HIS.cs             |  125 +++
 Tiger.Api/Views/Home/Index.cshtml                       |    8 
 Tiger.Api/Views/Shared/_ValidationScriptsPartial.cshtml |    2 
 /dev/null                                               |   27 
 Tiger.Api/注册Windows服务.txt                               |    2 
 Tiger.Model.Net/Entitys/MES/SMT_MAINTAIN.cs             |   81 ++
 Tiger.Model.Net/Entitys/MES/SMT_MT_DTL.cs               |  161 ++++
 Tiger.Model.Net/Entitys/MES/SMT_PROD_TABLE.cs           |  125 +++
 Tiger.Model.Net/Entitys/MES/SMT_TOOL.cs                 |  137 +++
 Tiger.IBusiness/Core/MQTTHelper.cs                      |   76 +
 Tiger.Api/Views/_ViewStart.cshtml                       |    3 
 Tiger.Model.Net/Entitys/MES/SMT_MT_PROJECT.cs           |  161 ++++
 Tiger.Model.Net/Entitys/MES/SMT_FEEDER.cs               |  125 +++
 Tiger.Model.Net/Entitys/MES/SMT_SOLDER_HIS.cs           |   89 ++
 36 files changed, 2,033 insertions(+), 153 deletions(-)

diff --git a/Tiger.Api/ApiWebHostService.cs b/Tiger.Api/ApiWebHostService.cs
index 3bead49..be53ff7 100644
--- a/Tiger.Api/ApiWebHostService.cs
+++ b/Tiger.Api/ApiWebHostService.cs
@@ -6,9 +6,26 @@
 using System.Threading.Tasks;
 using Rhea.Common;
 using Tiger.IBusiness;
+using System.ServiceProcess;
 
 namespace Tiger.Api
 {
+    public static class WebHostServiceExtensions
+    {
+        public static void RunAsApiService(this IWebHost host)
+        {
+            try
+            {
+                var webHostService = new ApiWebHostService(host);
+                ServiceBase.Run(webHostService);
+            }
+            catch (System.Exception ex)
+            {
+                Logger.Console.Fatal(ex, "Windows Services Exception");
+            }
+        }
+    }
+
     internal class ApiWebHostService : WebHostService
     {
         public ApiWebHostService(IWebHost host) : base(host)
@@ -39,7 +56,7 @@
                 DI.Resolve<IServicesBus>().StopServices();
                 //鍏抽棴DB缂撳瓨鑷姩鏇存柊
                 DI.Resolve<IDbCacheBus>().StopAutoUpdate();
-                MQTTHelper.MQTTConn?.Close();
+                //MQTTHelper.MQTTConn?.Close();
 	            base.OnStopping();
             }
             catch (System.Exception ex)
diff --git a/Tiger.Api/Controllers/HomeController.cs b/Tiger.Api/Controllers/HomeController.cs
new file mode 100644
index 0000000..855312d
--- /dev/null
+++ b/Tiger.Api/Controllers/HomeController.cs
@@ -0,0 +1,25 @@
+锘縰sing Microsoft.AspNetCore.Mvc;
+using System.Diagnostics;
+
+namespace Tiger.Api.Controllers
+{
+    public class HomeController : Controller
+    {
+
+        public IActionResult Index()
+        {
+            return View();
+        }
+
+        public IActionResult Privacy()
+        {
+            return View();
+        }
+
+        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
+        public IActionResult Error()
+        {
+            return View();
+        }
+    }
+}
diff --git a/Tiger.Api/Controllers/Test/TestController.R.cs b/Tiger.Api/Controllers/Test/TestController.R.cs
index c50639e..a9920e7 100644
--- a/Tiger.Api/Controllers/Test/TestController.R.cs
+++ b/Tiger.Api/Controllers/Test/TestController.R.cs
@@ -18,6 +18,7 @@
 using Tiger.Model.Sharetronic.Shelf;
 using Newtonsoft.Json.Linq;
 using Tiger.Api.iBiz;
+using System.Net;
 
 namespace Tiger.Api.Controllers.Test
 {
@@ -294,7 +295,15 @@
             Logger.Default.Info($"{begin:mmssfff} completed");
             return Ok($"{begin:mmssfff} completed");
         }
+    }
 
+    /// <summary>
+    /// MQTT娴嬭瘯鎺у埗鍣�
+    /// </summary>
+    [ApiController]
+    [Route("api/[controller]/[action]")]
+    public partial class _MqttTestController : ControllerBase
+    {
         [HttpGet]
         public async Task<IActionResult> DoSomething1(int duration)
         {
@@ -308,24 +317,24 @@
         /// </summary>
         /// <param name="action"></param>
         /// <returns></returns>
-        [HttpPost]
-        public async Task<IActionResult> SendMQTTAsync([FromBody] ApiAction action)
-        {
-            string msg = "";
-            await Task.Run(() =>
-            {
-                msg = action.ID;
-                MQTTHelper.Send("TestSendMQTT001", new MQTTMessage()
-                {
-                    Type = "TestSendMQTT001",
-                    Content = "TestSendMQTT001锛屾祴璇曟秷鎭紒",
-                    Data = "",
-                    DataType = typeof(String).Name,
-                    IsSuccessed = true,
-                });
-            });
-            return Ok(MQTTHelper.Send(action.GetResponse(msg)));
-        }
+        //[HttpPost]
+        //public async Task<IActionResult> SendMQTTAsync([FromBody] ApiAction action)
+        //{
+        //    string msg = "";
+        //    await Task.Run(() =>
+        //    {
+        //        msg = action.ID;
+        //        MQTTHelper.Send("TestSendMQTT001", new MQTTMessage()
+        //        {
+        //            Type = "TestSendMQTT001",
+        //            Content = "TestSendMQTT001锛屾祴璇曟秷鎭紒",
+        //            Data = "",
+        //            DataType = typeof(String).Name,
+        //            IsSuccessed = true,
+        //        });
+        //    });
+        //    return Ok(MQTTHelper.Send(action.GetResponse(msg)));
+        //}
 
         /// <summary>
         /// DeleteMQTTTopicAsync
@@ -338,8 +347,9 @@
             string msg = "";
             await Task.Run(() =>
             {
-                msg = MQTTHelper.DeleteTopic(action.ID) ? "鍒犻櫎Topic鎴愬姛" : "鍒犻櫎Topic澶辫触";
+                //msg = MQTTHelper.DeleteTopic(action.ID) ? "鍒犻櫎Topic鎴愬姛" : "鍒犻櫎Topic澶辫触";
             });
+            
             return Ok(action.GetResponse(msg));
         }
     }
diff --git a/Tiger.Api/Program.cs b/Tiger.Api/Program.cs
index 57dbf7b..2a9a5cc 100644
--- a/Tiger.Api/Program.cs
+++ b/Tiger.Api/Program.cs
@@ -18,73 +18,94 @@
 using Tiger.IBusiness;
 
 
-
-bool isService = Debugger.IsAttached ? false : Directory.GetCurrentDirectory().ToLower() == @"c:\windows\system32";
-
-var pathToContentRoot = AppDomain.CurrentDomain.BaseDirectory;
-if (isService)
+try
 {
-    var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
-    pathToContentRoot = Path.GetDirectoryName(pathToExe) + "\\";
+	//闈濽I绾跨▼鏈崟鑾峰紓甯稿鐞嗕簨浠�
+	AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
+	//Task 绾跨▼鍐呮湭鎹曡幏寮傚父澶勭悊浜嬩欢
+	TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
+	
+	bool isService = Debugger.IsAttached ? false : Directory.GetCurrentDirectory().ToLower() == @"c:\windows\system32";
+	
+	var pathToContentRoot = AppDomain.CurrentDomain.BaseDirectory;
+	if (isService)
+	{
+	    var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
+	    pathToContentRoot = Path.GetDirectoryName(pathToExe) + "\\";
+	}
+	
+	var IsRunAsAdmin = new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);
+	//var config = (new ConfigurationBuilder().SetBasePath(pathToContentRoot).AddJsonFile("appsettings.json")).Build();
+	var prod = (Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute)).First() as AssemblyProductAttribute).Product;
+	var vers = (Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute)).First() as AssemblyFileVersionAttribute).Version;
+	var desc = (Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute)).First() as AssemblyDescriptionAttribute).Description;
+	Logger.Default.Info($"{prod}(Version {vers}) {desc}");
+	ConsoleExt.WriteLine("");
+	ConsoleExt.WriteLine($"                         {prod}(Version {vers}) Base on .Net 6", ConsoleColor.Green);
+	ConsoleExt.WriteLine("");
+	ConsoleExt.Write($" ====== > ===== > ==== >---->--->-->-> >  ", ConsoleColor.DarkCyan);
+	ConsoleExt.Write($"Link Start{(IsRunAsAdmin ? $" As Admin" : "")}", ConsoleColor.Cyan);
+	ConsoleExt.WriteLine($"  < <-<--<---<----< ==== < ===== < ====== ", ConsoleColor.DarkCyan);
+	Logger.Console.Info($"Begin to load {prod}");
+	
+	var options = new WebApplicationOptions
+	{
+	    Args = args,
+	    ContentRootPath = pathToContentRoot
+	};
+
+    var builder = WebApplication.CreateBuilder(options);
+	builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
+	builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
+	{
+	    //AutoFac 閰嶇疆鏂囦欢娉ㄥ叆
+	    AutoFacContainer.Init(builder);
+	    builder.RegisterBuildCallback(scope =>
+	    {
+	        AutoFacContainer.Instance = (IContainer)scope;
+	        //鍒濆鍖朆usiness鐨凙utoFacContainer
+	        //DI.Resolve<IBiz>().SetContainer(AutoFacContainer.Instance = (IContainer)scope);
+	    });
+	    //builder.RegisterType<TestService>().As<ITest>();
+	});
+    Logger.Console.Info($"AutoFac container inject successful");
+    var startup = new Startup(builder.Configuration);
+	startup.ConfigureServices(builder.Services);
+
+    var config = (new ConfigurationBuilder().SetBasePath(pathToContentRoot).AddJsonFile("appsettings.json")).Build();
+	var urls = config.AsEnumerable().Where(q => q.Key.StartsWith("StartUpSetting:UseUrls") && q.Value != null).Select(q => q.Value).ToArray();
+	builder.WebHost.UseUrls(urls);
+	
+	builder.WebHost.UseKestrel(opt =>
+	{
+	    opt.Limits.MinRequestBodyDataRate = null;
+	});
+
+    if (isService)
+	{
+		builder.Host.UseWindowsService();
+	    Logger.Default.Info("Run Api as Windows Services");
+	}
+    Logger.Console.Info($"Configure WebApplication successful");
+    var app = builder.Build();
+    Logger.Console.Info($"Build {prod} successful");
+    //聽Fetch聽all聽the聽dependencies聽from聽the聽DI聽container聽
+    //聽var聽hostLifetime聽=聽app.Services.GetRequiredService<IHostApplicationLifetime>();
+    //聽As聽pointed聽out聽by聽DavidFowler,聽IHostApplicationLifetime聽is聽exposed聽directly聽on聽ApplicationBuilder
+    //聽Call聽Configure(),聽passing聽in聽the聽dependencies
+    startup.Configure(app, app.Environment);
+	Logger.Console.Info($"Run {prod} Successful");
+    
+    app.Run();
+	Logger.Console.Info($"{prod} Host is shut down");
 }
-var options = new WebApplicationOptions
+catch (System.Exception ex)
 {
-    Args = args,
-    ContentRootPath = pathToContentRoot
-};
-
-var builder = WebApplication.CreateBuilder(options);
-builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
-builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
-{
-    //AutoFac 閰嶇疆鏂囦欢娉ㄥ叆
-    AutoFacContainer.Init(builder);
-    builder.RegisterBuildCallback(scope =>
-    {
-        AutoFacContainer.Instance = (IContainer)scope;
-        //鍒濆鍖朆usiness鐨凙utoFacContainer
-        //DI.Resolve<IBiz>().SetContainer(AutoFacContainer.Instance = (IContainer)scope);
-    });
-    //builder.RegisterType<TestService>().As<ITest>();
-});
-var startup = new Startup(builder.Configuration);
-startup.ConfigureServices(builder.Services);
-Main(args);
-var config = (new ConfigurationBuilder().SetBasePath(pathToContentRoot).AddJsonFile("appsettings.json")).Build();
-var urls = config.AsEnumerable().Where(q => q.Key.StartsWith("StartUpSetting:UseUrls") && q.Value != null).Select(q => q.Value).ToArray();
-var prod = (Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute)).First() as AssemblyProductAttribute).Product;
-builder.WebHost.UseUrls(urls);
-
-builder.WebHost.UseKestrel(opt =>
-{
-    opt.Limits.MinRequestBodyDataRate = null;
-});
-
-if (isService)
-{
-	builder.Host.UseWindowsService();
+    Logger.Console.Fatal(ex, "Run {prod} Host Exception");
 }
-
-var app = builder.Build();
-//聽Fetch聽all聽the聽dependencies聽from聽the聽DI聽container聽
-//聽var聽hostLifetime聽=聽app.Services.GetRequiredService<IHostApplicationLifetime>();
-//聽As聽pointed聽out聽by聽DavidFowler,聽IHostApplicationLifetime聽is聽exposed聽directly聽on聽ApplicationBuilder
-//聽Call聽Configure(),聽passing聽in聽the聽dependencies
-startup.Configure(app, app.Environment);
-Logger.Console.Info($"Run {prod} Host");
-
-app.Run();
-Logger.Console.Info($"{prod} Host is shut down");
-
-
-void Main(string[] args)
+finally
 {
-    //闈濽I绾跨▼鏈崟鑾峰紓甯稿鐞嗕簨浠�
-    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
-    //Task 绾跨▼鍐呮湭鎹曡幏寮傚父澶勭悊浜嬩欢
-    TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
-
-    CreateWindowsServicesBuilder(args);
+    Logger.Console.Info($"Api Host finally shut down");
 }
 
 
@@ -120,21 +141,22 @@
     Logger.Default.Fatal(e.Exception, $"鎹曡幏绾跨▼鍐呮湭澶勭悊寮傚父");
     e.SetObserved();//璁剧疆璇ュ紓甯稿凡瀵熻锛堣繖鏍峰鐞嗗悗灏变笉浼氬紩璧风▼搴忓穿婧冿級
 }
+
 void CreateWindowsServicesBuilder(string[] args)
 {
     try
     {
-        //bool isService = Debugger.IsAttached ? false : Directory.GetCurrentDirectory().ToLower() == @"c:\windows\system32";
+        bool isService = Debugger.IsAttached ? false : Directory.GetCurrentDirectory().ToLower() == @"c:\windows\system32";
 
-        //var pathToContentRoot = AppDomain.CurrentDomain.BaseDirectory;
-        //if (isService)
-        //{
-        //    var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
-        //    pathToContentRoot = Path.GetDirectoryName(pathToExe) + "\\";
-        //}
+        var pathToContentRoot = AppDomain.CurrentDomain.BaseDirectory;
+        if (isService)
+        {
+            var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
+            pathToContentRoot = Path.GetDirectoryName(pathToExe) + "\\";
+        }
 
         var IsRunAsAdmin = new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);
-        //var config = (new ConfigurationBuilder().SetBasePath(pathToContentRoot).AddJsonFile("appsettings.json")).Build();
+        var config = (new ConfigurationBuilder().SetBasePath(pathToContentRoot).AddJsonFile("appsettings.json")).Build();
         var prod = (Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute)).First() as AssemblyProductAttribute).Product;
         var vers = (Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute)).First() as AssemblyFileVersionAttribute).Version;
         var desc = (Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute)).First() as AssemblyDescriptionAttribute).Description;
@@ -147,24 +169,24 @@
         ConsoleExt.WriteLine($"  < <-<--<---<----< ==== < ===== < ====== ", ConsoleColor.DarkCyan);
         Logger.Console.Info($"Run {prod} Host");
         //var urls = string.IsNullOrEmpty(config["StartUpSetting:UseUrls"]) ? "http://*:3810" : config["StartUpSetting:UseUrls"];
-        //var urls = config.AsEnumerable().Where(q => q.Key.StartsWith("StartUpSetting:UseUrls") && q.Value != null).Select(q => q.Value).ToArray();
-        //var host = WebHost.CreateDefaultBuilder(args)
-        //    .UseContentRoot(pathToContentRoot)
-        //    .UseUrls(urls)
-        //    .UseStartup<Startup>()
-        //    .Build();
+        var urls = config.AsEnumerable().Where(q => q.Key.StartsWith("StartUpSetting:UseUrls") && q.Value != null).Select(q => q.Value).ToArray();
+        var host = WebHost.CreateDefaultBuilder(args)
+            .UseContentRoot(pathToContentRoot)
+            .UseUrls(urls)
+            .UseStartup<Startup>()
+            .Build();
 
-        //if (isService)
-        //{
-        //    host.RunAsApiService();
-        //    //host.RunAsService();
-        //}
-        //else
-        //{
-        //    Logger.Console.Info($"Run {prod} Host");
-        //    host.Run();
-        //    Logger.Console.Info($"{prod} Host is shut down");
-        //}
+        if (isService)
+        {
+            host.RunAsApiService();
+            //host.RunAsService();
+        }
+        else
+        {
+            Logger.Console.Info($"Run {prod} Host");
+            host.Run();
+            Logger.Console.Info($"{prod} Host is shut down");
+        }
     }
     catch (System.Exception ex)
     {
diff --git a/Tiger.Api/Startup.cs b/Tiger.Api/Startup.cs
index c6e8237..edee32c 100644
--- a/Tiger.Api/Startup.cs
+++ b/Tiger.Api/Startup.cs
@@ -15,6 +15,7 @@
 using System.Linq;
 using System.Reflection;
 using Tiger.IBusiness;
+using Tiger.IBusiness.Utility;
 
 namespace Tiger.Api
 {
@@ -26,6 +27,7 @@
         public Startup(IConfiguration configuration)
         {
             Configuration = configuration;
+            //鍒濆鍖� ApiConfig
             ApiConfig.InitConfig(configuration);
 
             //娴嬭瘯浠g爜
@@ -53,7 +55,7 @@
         {
             //services.RegisterAssembly("Tiger.Service");
             //services.AddTransient(typeof(IBaseService<>), typeof(BaseService<>));
-            services.AddControllers().AddNewtonsoftJson(opt =>
+            services.AddControllersWithViews().AddNewtonsoftJson(opt =>
             {
                 opt.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
                 opt.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
@@ -115,12 +117,13 @@
             app.UseCors(anyAllowSpecificOrigins);//鏀寔璺ㄥ煙锛氬厑璁哥壒瀹氭潵婧愮殑涓绘満璁块棶
 
             //app.UseHttpsRedirection();
+            app.UseStaticFiles();
 
             //app.UseAuthorization();
             app.UseEndpoints(endpoints =>
             {
-                endpoints.MapControllers().RequireCors(anyAllowSpecificOrigins);
-                //endpoints.MapControllers();
+                endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}").RequireCors(anyAllowSpecificOrigins);
+                //endpoints.MapControllers().RequireCors(anyAllowSpecificOrigins);
             });
 
             ConsoleExt.Write($"Api Run as{((ApiConfig.IsDevVersion || ApiConfig.IsTestVersion) ? ((ApiConfig.IsDevVersion ? " Dev" : "") + (ApiConfig.IsTestVersion ? " Test" : "")) : " Release")} Edition", ConsoleColor.Cyan);
@@ -143,6 +146,7 @@
                     (BizConfig.Configuration[$"Databases:Main:ConnectionString"].Split(';').Any(q => q.Contains("port")) ? "锛�" : "") +
                     BizConfig.Configuration[$"Databases:Main:ConnectionString"].Split(';').Where(q => q.Contains("Data Source") || q.Contains("DataSource") || q.Contains("database")).FirstOrDefault(), ConsoleColor.Cyan);
             }
+
             //鍒濆鍖朆usiness鐨凙utoFacContainer
             DI.Resolve<IBiz>().SetContainer(AutoFacContainer.Instance);
             //寮�鍚疉pi鐩戞帶鎬荤嚎
@@ -151,6 +155,8 @@
             DI.Resolve<IServicesBus>().StartServices(app.ApplicationServices.GetService<ISchedulerFactory>());
             //寮�鍚疍B缂撳瓨鑷姩鏇存柊
             DI.Resolve<IDbCacheBus>().StartAutoUpdate();
+            //寮�鍚疢QTT鏈嶅姟
+            MQTTHelper.Start();
         }
 
         /// <summary>
diff --git a/Tiger.Api/Tiger.Api.csproj b/Tiger.Api/Tiger.Api.csproj
index 715d944..fe209a2 100644
--- a/Tiger.Api/Tiger.Api.csproj
+++ b/Tiger.Api/Tiger.Api.csproj
@@ -53,6 +53,14 @@
 
 
   <ItemGroup>
+    <Compile Remove="wwwroot\**" />
+    <Content Remove="wwwroot\**" />
+    <EmbeddedResource Remove="wwwroot\**" />
+    <None Remove="wwwroot\**" />
+  </ItemGroup>
+
+
+  <ItemGroup>
     <Compile Remove="iBiz\Logger.cs" />
   </ItemGroup>
 
@@ -81,6 +89,15 @@
     <Folder Include="Controllers\QMS\" />
   </ItemGroup>
   <ItemGroup>
+    <None Include="Views\Home\Index.cshtml" />
+    <None Include="Views\Home\Privacy.cshtml" />
+    <None Include="Views\Shared\Error.cshtml" />
+    <None Include="Views\Shared\_Layout.cshtml" />
+    <None Include="Views\Shared\_ValidationScriptsPartial.cshtml" />
+    <None Include="Views\_ViewImports.cshtml" />
+    <None Include="Views\_ViewStart.cshtml" />
+  </ItemGroup>
+  <ItemGroup>
     <Content Update="appsettings.json">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>
diff --git a/Tiger.Api/Views/Home/Index.cshtml b/Tiger.Api/Views/Home/Index.cshtml
new file mode 100644
index 0000000..d2d19bd
--- /dev/null
+++ b/Tiger.Api/Views/Home/Index.cshtml
@@ -0,0 +1,8 @@
+锘緻{
+    ViewData["Title"] = "Home Page";
+}
+
+<div class="text-center">
+    <h1 class="display-4">Welcome</h1>
+    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
+</div>
diff --git a/Tiger.Api/Views/Home/Privacy.cshtml b/Tiger.Api/Views/Home/Privacy.cshtml
new file mode 100644
index 0000000..af4fb19
--- /dev/null
+++ b/Tiger.Api/Views/Home/Privacy.cshtml
@@ -0,0 +1,6 @@
+锘緻{
+    ViewData["Title"] = "Privacy Policy";
+}
+<h1>@ViewData["Title"]</h1>
+
+<p>Use this page to detail your site's privacy policy.</p>
diff --git a/Tiger.Api/Views/Shared/Error.cshtml b/Tiger.Api/Views/Shared/Error.cshtml
new file mode 100644
index 0000000..5b42430
--- /dev/null
+++ b/Tiger.Api/Views/Shared/Error.cshtml
@@ -0,0 +1,25 @@
+锘緻* @model ErrorViewModel *@
+@{
+    ViewData["Title"] = "Error";
+}
+
+<h1 class="text-danger">Error.</h1>
+<h2 class="text-danger">An error occurred while processing your request.</h2>
+
+@* @if (Model.ShowRequestId)
+{
+    <p>
+        <strong>Request ID:</strong> <code>@Model.RequestId</code>
+    </p>
+} *@
+
+<h3>Development Mode</h3>
+<p>
+    Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
+</p>
+<p>
+    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>
+    It can result in displaying sensitive information from exceptions to end users.
+    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
+    and restarting the app.
+</p>
diff --git a/Tiger.Api/Views/Shared/_Layout.cshtml b/Tiger.Api/Views/Shared/_Layout.cshtml
new file mode 100644
index 0000000..f061ebe
--- /dev/null
+++ b/Tiger.Api/Views/Shared/_Layout.cshtml
@@ -0,0 +1,49 @@
+锘�<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>@ViewData["Title"] - WebApplication2</title>
+    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
+    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
+    <link rel="stylesheet" href="~/WebApplication2.styles.css" asp-append-version="true" />
+</head>
+<body>
+    <header>
+        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
+            <div class="container-fluid">
+                <a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">WebApplication2</a>
+                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
+                        aria-expanded="false" aria-label="Toggle navigation">
+                    <span class="navbar-toggler-icon"></span>
+                </button>
+                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
+                    <ul class="navbar-nav flex-grow-1">
+                        <li class="nav-item">
+                            <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
+                        </li>
+                        <li class="nav-item">
+                            <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
+                        </li>
+                    </ul>
+                </div>
+            </div>
+        </nav>
+    </header>
+    <div class="container">
+        <main role="main" class="pb-3">
+            @RenderBody()
+        </main>
+    </div>
+
+    <footer class="border-top footer text-muted">
+        <div class="container">
+            &copy; 2024 - WebApplication2 - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
+        </div>
+    </footer>
+    <script src="~/lib/jquery/dist/jquery.min.js"></script>
+    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
+    <script src="~/js/site.js" asp-append-version="true"></script>
+    @await RenderSectionAsync("Scripts", required: false)
+</body>
+</html>
diff --git a/Tiger.Api/Views/Shared/_Layout.cshtml.css b/Tiger.Api/Views/Shared/_Layout.cshtml.css
new file mode 100644
index 0000000..a72cbea
--- /dev/null
+++ b/Tiger.Api/Views/Shared/_Layout.cshtml.css
@@ -0,0 +1,48 @@
+锘�/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
+for details on configuring this project to bundle and minify static web assets. */
+
+a.navbar-brand {
+  white-space: normal;
+  text-align: center;
+  word-break: break-all;
+}
+
+a {
+  color: #0077cc;
+}
+
+.btn-primary {
+  color: #fff;
+  background-color: #1b6ec2;
+  border-color: #1861ac;
+}
+
+.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
+  color: #fff;
+  background-color: #1b6ec2;
+  border-color: #1861ac;
+}
+
+.border-top {
+  border-top: 1px solid #e5e5e5;
+}
+.border-bottom {
+  border-bottom: 1px solid #e5e5e5;
+}
+
+.box-shadow {
+  box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
+}
+
+button.accept-policy {
+  font-size: 1rem;
+  line-height: inherit;
+}
+
+.footer {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+  white-space: nowrap;
+  line-height: 60px;
+}
diff --git a/Tiger.Api/Views/Shared/_ValidationScriptsPartial.cshtml b/Tiger.Api/Views/Shared/_ValidationScriptsPartial.cshtml
new file mode 100644
index 0000000..5a16d80
--- /dev/null
+++ b/Tiger.Api/Views/Shared/_ValidationScriptsPartial.cshtml
@@ -0,0 +1,2 @@
+锘�<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
+<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
diff --git a/Tiger.Api/Views/_ViewImports.cshtml b/Tiger.Api/Views/_ViewImports.cshtml
new file mode 100644
index 0000000..28cf78d
--- /dev/null
+++ b/Tiger.Api/Views/_ViewImports.cshtml
@@ -0,0 +1,2 @@
+锘緻using Tiger.Api
+@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
diff --git a/Tiger.Api/Views/_ViewStart.cshtml b/Tiger.Api/Views/_ViewStart.cshtml
new file mode 100644
index 0000000..a5f1004
--- /dev/null
+++ b/Tiger.Api/Views/_ViewStart.cshtml
@@ -0,0 +1,3 @@
+锘緻{
+    Layout = "_Layout";
+}
diff --git a/Tiger.Api/WebHostServiceExtensions.cs b/Tiger.Api/WebHostServiceExtensions.cs
deleted file mode 100644
index e18b657..0000000
--- a/Tiger.Api/WebHostServiceExtensions.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-锘縰sing Rhea.Common;
-using Microsoft.AspNetCore.Hosting;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.ServiceProcess;
-using System.Threading.Tasks;
-using Tiger.IBusiness;
-
-namespace Tiger.Api
-{
-    public static class WebHostServiceExtensions
-    {
-        public static void RunAsApiService(this IWebHost host)
-        {
-            try
-            {
-	            var webHostService = new ApiWebHostService(host);
-	            ServiceBase.Run(webHostService);
-            }
-            catch (System.Exception ex)
-            {
-                Logger.Console.Fatal(ex, "Windows Services Exception");
-            }
-        }
-    }
-}
diff --git a/Tiger.Api/appsettings.json b/Tiger.Api/appsettings.json
index 662ecc3..67697c4 100644
--- a/Tiger.Api/appsettings.json
+++ b/Tiger.Api/appsettings.json
@@ -41,5 +41,21 @@
     "Vue4": "http://127.0.0.1:5173",
     "Vue5": "http://localhost:5173"
   },
+  "MQTT": {
+    "Enable": true,
+    "Address": "47.115.28.255",
+    "Port": 1883,
+    "Username": "api",
+    "Password": "emqx@123",
+    "ApiPort": 18083,
+    "ApiKey": "ee26b0dd4af7e749",
+    "ApiSecretKey": "XHOUC9BQSoa0j0jRINQEkQanIR1nzDQUY8GnYtaktEQJ",
+    "WillMsgTopic": "",
+    "WillMsgQos": 0,
+    "WillMsgRetain": true,
+    "WillMsgPayload": "Api Offline",
+    "WillMsgDelay": 5,
+    "WillMsgExpiry": 300
+  },
   "RunInterface": false
 }
\ No newline at end of file
diff --git "a/Tiger.Api/\346\263\250\345\206\214Windows\346\234\215\345\212\241.txt" "b/Tiger.Api/\346\263\250\345\206\214Windows\346\234\215\345\212\241.txt"
index 2c828a2..3254ac1 100644
--- "a/Tiger.Api/\346\263\250\345\206\214Windows\346\234\215\345\212\241.txt"
+++ "b/Tiger.Api/\346\263\250\345\206\214Windows\346\234\215\345\212\241.txt"
@@ -5,7 +5,7 @@
 sc create TigerApi_PDA binPath= "D:\WMS\Api\Api_PDA\TigerApiHost.exe" start= auto displayname= "Tiger Api Host - PDA"
 sc create TigerApi_Test binPath= "D:\WMS\Api\Api_Test\TigerApiHost.exe" start= auto displayname= "Tiger Api Host - Test"
 sc create TigerApi_KB binPath= "D:\WMS\Api\Api_KB\TigerApiHost.exe" start= auto displayname= "Tiger Api Host - Kanban"
-sc create TigerApi binPath= "D:\Projects\TigerClouds\TigerApi\Api\Tiger.Api\bin\Debug\net5.0\TigerApiHost.exe" start= auto displayname= "Tiger Api Host"
+sc create TigerApi binPath= "D:\Projects\TigerCloudsGit\TigerClouds-Tech\Server\TigerApi6_2024\Tiger.Api\bin\Debug\net6.0\TigerApiHost.exe" start= auto displayname= "Tiger Api Host"
 鍚姩Windows鏈嶅姟
 net start TigerApi
 鍋滄Windows鏈嶅姟
diff --git a/Tiger.Business/Tiger.Business.csproj b/Tiger.Business/Tiger.Business.csproj
index dc5de90..17883e5 100644
--- a/Tiger.Business/Tiger.Business.csproj
+++ b/Tiger.Business/Tiger.Business.csproj
@@ -101,12 +101,12 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="MailKit" Version="4.4.0" />
+    <PackageReference Include="MailKit" Version="4.5.0" />
     <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
     <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
     <PackageReference Include="NLog" Version="5.2.8" />
     <PackageReference Include="NLog.Database" Version="5.2.8" />
-    <PackageReference Include="Rhea.Common" Version="6.1.5.1351" />
+    <PackageReference Include="Rhea.Common" Version="6.1.7.1356" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/Tiger.IBusiness/Core/ApiConfig.cs b/Tiger.IBusiness/Core/ApiConfig.cs
index 1565a66..a586213 100644
--- a/Tiger.IBusiness/Core/ApiConfig.cs
+++ b/Tiger.IBusiness/Core/ApiConfig.cs
@@ -179,7 +179,6 @@
     {
         public static IConfiguration Configuration => RheaConfig.Configuration;
         public static string DB_ModelAssembly => RheaConfig.DB_ModelAssembly;
-        public static string MQTTService_IPAddress => RheaConfig.MQTTService_IPAddress;
         public static string DefaultLanguage => Configuration["DefaultLanguage"] ?? "en";
         public static void InitConfig(IConfiguration _configuration, Dictionary<string, Dictionary<string, string>> language)
         {
diff --git a/Tiger.IBusiness/Core/MQTTHelper.cs b/Tiger.IBusiness/Core/MQTTHelper.cs
index 9f55f53..2e045a6 100644
--- a/Tiger.IBusiness/Core/MQTTHelper.cs
+++ b/Tiger.IBusiness/Core/MQTTHelper.cs
@@ -1,4 +1,5 @@
-锘縰sing MQTTnet;
+锘縰sing Microsoft.Extensions.Configuration;
+using MQTTnet;
 using MQTTnet.Client;
 using MQTTnet.Protocol;
 using MQTTnet.Server;
@@ -15,6 +16,53 @@
 
 namespace Tiger.IBusiness.Utility
 {
+    /// <summary>
+    /// MQTTHelper
+    /// </summary>
+    public static class MQTTHelper
+    {
+        #region Variables
+        private static IConfiguration Setting = ApiConfig.Configuration;
+        #endregion
+
+        #region Propertys
+
+        #endregion
+
+        #region Functions
+        public static void Start()
+        {
+            try
+            {
+                if (Setting["MQTT:Enable"].ToBoolean() == true)
+                {
+
+                    ConsoleExt.WriteLine("Start MQTT Service..........", ConsoleColor.Yellow);
+                    Logger.Default.Info("Start MQTT Service");
+                }
+            }
+            catch (System.Exception ex)
+            {
+                Logger.Default.Fatal(ex, "Start MQTT Service Exception");
+            }
+        }
+
+        public static void Stop()
+        {
+            try
+            {
+
+                Logger.Console.Info("Stop MQTT Service");
+            }
+            catch (System.Exception ex)
+            {
+                Logger.Console.Fatal(ex, "Stop MQTT Service Exception");
+            }
+        }
+
+
+        #endregion
+    }
     /// <summary>
     /// EMQX 甯姪绫�
     /// </summary>
@@ -35,20 +83,34 @@
             Password = password;
         }
 
+        #region Variables
+        private List<string> TopicList = new();
+        #endregion
+
+        #region Propertys
+        public string Id { get; set; } = Guid.NewGuid().ToString("N");
+        public string Tag { get; set; } = "ClientMonitor";
+        public string Name { get; set; } = "ClientMonitor";
+        public bool IsRunning { get; set; }
+        public IMqttClient Client { get; set; } = new MqttFactory().CreateMqttClient();//MQTT瀹㈡埛绔�
         public string Address { get; set; }
         public int Port { get; set; } = 1883;
-        public string ClientId { get; set; } = $"{Environment.MachineName}-Client-{Guid.NewGuid():N}";
+        public string ClientId { get; set; } = $"{Environment.MachineName}-ApiClient-{Guid.NewGuid():N}";
         public string Username { get; set; }
         public string Password { get; set; }
         public int ApiPort { get; set; } = 18083;
         public string ApiKey { get; set; }
         public string ApiSecretKey { get; set; }
         public string ApiCredentials => Convert.ToBase64String(Encoding.ASCII.GetBytes($"{ApiKey}:{ApiSecretKey}"));
-        /// <summary>
-        /// MQTT瀹㈡埛绔�
-        /// </summary>
-        public IMqttClient Client = new MqttFactory().CreateMqttClient();
-        private List<string> TopicList = new();
+        //閬楀槺娑堟伅
+        public string WillMsgTopic { get; set; }
+        public MqttQualityOfServiceLevel WillMsgQos { get; set; }
+        public bool WillMsgRetain { get; set; }
+        public string WillMsgPayload { get; set; }
+        public int? WillMsgDelay { get; set; }
+        public int? WillMsgExpiry { get; set; }
+        #endregion
+
 
         public Result<IMqttClient> Connect(string clientId = null)
         {
diff --git a/Tiger.IBusiness/Tiger.IBusiness.csproj b/Tiger.IBusiness/Tiger.IBusiness.csproj
index 3534281..a6edf75 100644
--- a/Tiger.IBusiness/Tiger.IBusiness.csproj
+++ b/Tiger.IBusiness/Tiger.IBusiness.csproj
@@ -14,12 +14,12 @@
     <PackageReference Include="Autofac" Version="8.0.0" />
     <PackageReference Include="Autofac.Configuration" Version="6.0.0" />
     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="9.0.0" />
-    <PackageReference Include="MailKit" Version="4.4.0" />
+    <PackageReference Include="MailKit" Version="4.5.0" />
     <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
     <PackageReference Include="MQTTnet" Version="4.3.3.952" />
     <PackageReference Include="NLog" Version="5.2.8" />
     <PackageReference Include="NLog.Database" Version="5.2.8" />
-    <PackageReference Include="Rhea.Common" Version="6.1.5.1351" />
+    <PackageReference Include="Rhea.Common" Version="6.1.7.1356" />
     <PackageReference Include="Sundial" Version="2.45.0" />
   </ItemGroup>
 
diff --git a/Tiger.Model.Net/Entitys/MES/SMT_FEEDER.cs b/Tiger.Model.Net/Entitys/MES/SMT_FEEDER.cs
new file mode 100644
index 0000000..60162eb
--- /dev/null
+++ b/Tiger.Model.Net/Entitys/MES/SMT_FEEDER.cs
@@ -0,0 +1,125 @@
+using System;
+using SqlSugar;
+using System.Linq;
+using System.ComponentModel;
+using System.Collections.Generic;
+
+namespace Tiger.Model
+{
+	/// <summary>
+	/// 实体:SMT飞达信息
+	/// </summary>
+	[Description("Primary:ID")]
+	[Serializable]
+	[SugarTable("SMT_FEEDER")]
+	public class SMT_FEEDER : DbEntityWithAuth
+	{
+		#region 构造函数
+		/// <summary>
+		/// 实体:SMT飞达信息
+		/// </summary>
+		public SMT_FEEDER() {}
+		#endregion
+
+		#region 公共属性
+		/// <summary>
+		/// 飞达编码
+		/// </summary>
+		public string FEEDER_CODE { get; set; }
+		/// <summary>
+		/// 飞达名称
+		/// </summary>
+		public string FEEDER_NAME { get; set; }
+		/// <summary>
+		/// 飞达类型
+		/// </summary>
+		public string FEEDER_TYPE { get; set; }
+		/// <summary>
+		/// 最大使用次数
+		/// </summary>
+		public int MAX_COUNT { get; set; }
+		/// <summary>
+		/// 预警使用次数
+		/// </summary>
+		public int ALERT_COUNT { get; set; }
+		/// <summary>
+		/// 已使用次数
+		/// </summary>
+		public int USED_COUNT { get; set; }
+		/// <summary>
+		/// 是否使用中(Y/N)
+		/// </summary>
+		public string IS_USE { get; set; }
+		/// <summary>
+		/// 是否打印(Y/N)
+		/// </summary>
+		public string IS_PRINT { get; set; }
+		/// <summary>
+		/// 工单号
+		/// </summary>
+		public string WORK_ORDER { get; set; }
+		/// <summary>
+		/// 产线编码
+		/// </summary>
+		public string LINE_CODE { get; set; }
+		/// <summary>
+		/// 贴片机编码
+		/// </summary>
+		public string SMT_CODE { get; set; }
+		/// <summary>
+		/// 站位号
+		/// </summary>
+		public string SLOT_NO { get; set; }
+		/// <summary>
+		/// 加工面
+		/// </summary>
+		public string PCB_SURFACE { get; set; }
+		/// <summary>
+		/// 物料编码
+		/// </summary>
+		public string ITEM_CODE { get; set; }
+		/// <summary>
+		/// 备注
+		/// </summary>
+		public string REMARK { get; set; }
+		#endregion
+
+		#region 虚拟属性
+		/*例子
+		[SugarColumn(IsIgnore = true)]
+		public string FieldName { get; set; }
+		*/
+		#endregion
+
+		#region 外键属性
+		/*例子
+		//一对一外键导航
+		[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是SMT_FEEDER类里面的外键ID字段
+		public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
+		//一对多外键导航
+		[Navigate(NavigateType.OneToMany, nameof(ClassA.SMT_FEEDERId))]//ClassA表中的SMT_FEEDERId
+		public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
+		//多对多外键导航
+		[Navigate(typeof(MappingClass), nameof(MappingClass.SMT_FEEDERId), nameof(MappingClass.ClassAId))]//注意顺序
+		public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
+		*/
+		#endregion
+
+		#region 枚举变量
+		/*例子
+		public enum FieldNames
+		{
+			[Description("枚举描述0")]
+			Enum0,
+			[Description("枚举描述1")]
+			Enum1,
+		}
+		*/
+		#endregion
+
+		#region 公共方法
+
+		#endregion
+
+	}//endClass
+}
\ No newline at end of file
diff --git a/Tiger.Model.Net/Entitys/MES/SMT_FEEDER_TYPE.cs b/Tiger.Model.Net/Entitys/MES/SMT_FEEDER_TYPE.cs
new file mode 100644
index 0000000..14993b8
--- /dev/null
+++ b/Tiger.Model.Net/Entitys/MES/SMT_FEEDER_TYPE.cs
@@ -0,0 +1,77 @@
+using System;
+using SqlSugar;
+using System.Linq;
+using System.ComponentModel;
+using System.Collections.Generic;
+
+namespace Tiger.Model
+{
+	/// <summary>
+	/// 实体:SMT飞达类型
+	/// </summary>
+	[Description("Primary:ID")]
+	[Serializable]
+	[SugarTable("SMT_FEEDER_TYPE")]
+	public class SMT_FEEDER_TYPE : DbEntityWithAuth
+	{
+		#region 构造函数
+		/// <summary>
+		/// 实体:SMT飞达类型
+		/// </summary>
+		public SMT_FEEDER_TYPE() {}
+		#endregion
+
+		#region 公共属性
+		/// <summary>
+		/// 飞达类型编码
+		/// </summary>
+		public string TYPE_CODE { get; set; }
+		/// <summary>
+		/// 飞达类型名称
+		/// </summary>
+		public string TYPE_NAME { get; set; }
+		/// <summary>
+		/// 备注
+		/// </summary>
+		public string REMARK { get; set; }
+		#endregion
+
+		#region 虚拟属性
+		/*例子
+		[SugarColumn(IsIgnore = true)]
+		public string FieldName { get; set; }
+		*/
+		#endregion
+
+		#region 外键属性
+		/*例子
+		//一对一外键导航
+		[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是SMT_FEEDER_TYPE类里面的外键ID字段
+		public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
+		//一对多外键导航
+		[Navigate(NavigateType.OneToMany, nameof(ClassA.SMT_FEEDER_TYPEId))]//ClassA表中的SMT_FEEDER_TYPEId
+		public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
+		//多对多外键导航
+		[Navigate(typeof(MappingClass), nameof(MappingClass.SMT_FEEDER_TYPEId), nameof(MappingClass.ClassAId))]//注意顺序
+		public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
+		*/
+		#endregion
+
+		#region 枚举变量
+		/*例子
+		public enum FieldNames
+		{
+			[Description("枚举描述0")]
+			Enum0,
+			[Description("枚举描述1")]
+			Enum1,
+		}
+		*/
+		#endregion
+
+		#region 公共方法
+
+		#endregion
+
+	}//endClass
+}
\ No newline at end of file
diff --git a/Tiger.Model.Net/Entitys/MES/SMT_LOADING.cs b/Tiger.Model.Net/Entitys/MES/SMT_LOADING.cs
new file mode 100644
index 0000000..8ff024d
--- /dev/null
+++ b/Tiger.Model.Net/Entitys/MES/SMT_LOADING.cs
@@ -0,0 +1,109 @@
+using System;
+using SqlSugar;
+using System.Linq;
+using System.ComponentModel;
+using System.Collections.Generic;
+
+namespace Tiger.Model
+{
+	/// <summary>
+	/// 实体:SMT实时上料信息
+	/// </summary>
+	[Description("Primary:ID")]
+	[Serializable]
+	[SugarTable("SMT_LOADING")]
+	public class SMT_LOADING : DbEntityWithAuth
+	{
+		#region 构造函数
+		/// <summary>
+		/// 实体:SMT实时上料信息
+		/// </summary>
+		public SMT_LOADING() {}
+		#endregion
+
+		#region 公共属性
+		/// <summary>
+		/// 工单号
+		/// </summary>
+		public string WORK_ORDER { get; set; }
+		/// <summary>
+		/// 产品编码
+		/// </summary>
+		public string PROD_CODE { get; set; }
+		/// <summary>
+		/// 产线编码
+		/// </summary>
+		public string LINE_CODE { get; set; }
+		/// <summary>
+		/// 贴片机编码
+		/// </summary>
+		public string SMT_CODE { get; set; }
+		/// <summary>
+		/// 站位号
+		/// </summary>
+		public string SLOT_NO { get; set; }
+		/// <summary>
+		/// 飞达类型
+		/// </summary>
+		public string FEEDER_TYPE { get; set; }
+		/// <summary>
+		/// 飞达编码
+		/// </summary>
+		public string FEEDER_CODE { get; set; }
+		/// <summary>
+		/// 物料编码
+		/// </summary>
+		public string ITEM_CODE { get; set; }
+		/// <summary>
+		/// 锡膏UPN编码
+		/// </summary>
+		public string SOLDER_UPN { get; set; }
+		/// <summary>
+		/// 加工面
+		/// </summary>
+		public string PCB_SURFACE { get; set; }
+		/// <summary>
+		/// 备注
+		/// </summary>
+		public string REMARK { get; set; }
+		#endregion
+
+		#region 虚拟属性
+		/*例子
+		[SugarColumn(IsIgnore = true)]
+		public string FieldName { get; set; }
+		*/
+		#endregion
+
+		#region 外键属性
+		/*例子
+		//一对一外键导航
+		[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是SMT_LOADING类里面的外键ID字段
+		public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
+		//一对多外键导航
+		[Navigate(NavigateType.OneToMany, nameof(ClassA.SMT_LOADINGId))]//ClassA表中的SMT_LOADINGId
+		public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
+		//多对多外键导航
+		[Navigate(typeof(MappingClass), nameof(MappingClass.SMT_LOADINGId), nameof(MappingClass.ClassAId))]//注意顺序
+		public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
+		*/
+		#endregion
+
+		#region 枚举变量
+		/*例子
+		public enum FieldNames
+		{
+			[Description("枚举描述0")]
+			Enum0,
+			[Description("枚举描述1")]
+			Enum1,
+		}
+		*/
+		#endregion
+
+		#region 公共方法
+
+		#endregion
+
+	}//endClass
+}
\ No newline at end of file
diff --git a/Tiger.Model.Net/Entitys/MES/SMT_LOAD_HIS.cs b/Tiger.Model.Net/Entitys/MES/SMT_LOAD_HIS.cs
new file mode 100644
index 0000000..ad98864
--- /dev/null
+++ b/Tiger.Model.Net/Entitys/MES/SMT_LOAD_HIS.cs
@@ -0,0 +1,125 @@
+using System;
+using SqlSugar;
+using System.Linq;
+using System.ComponentModel;
+using System.Collections.Generic;
+
+namespace Tiger.Model
+{
+	/// <summary>
+	/// 实体:SMT上料历史记录
+	/// </summary>
+	[Description("Primary:ID")]
+	[Serializable]
+	[SugarTable("SMT_LOAD_HIS")]
+	public class SMT_LOAD_HIS : DbEntityWithAuth
+	{
+		#region 构造函数
+		/// <summary>
+		/// 实体:SMT上料历史记录
+		/// </summary>
+		public SMT_LOAD_HIS() {}
+		#endregion
+
+		#region 公共属性
+		/// <summary>
+		/// 操作类型(0Loading上料|1ChangeMaterial换料|2Unloading卸料|3ChangeFeeder换飞达|4UseStencil使用钢网|5UseSqueegee使用刮刀|6UseSolder使用锡膏|7UseAdhesive使用胶水)
+		/// </summary>
+		public string OPERATION { get; set; }
+		/// <summary>
+		/// 工单号
+		/// </summary>
+		public string WORK_ORDER { get; set; }
+		/// <summary>
+		/// 产品编码
+		/// </summary>
+		public string PROD_CODE { get; set; }
+		/// <summary>
+		/// 产线编码
+		/// </summary>
+		public string LINE_CODE { get; set; }
+		/// <summary>
+		/// 贴片机编码
+		/// </summary>
+		public string SMT_CODE { get; set; }
+		/// <summary>
+		/// 站位号
+		/// </summary>
+		public string SLOT_NO { get; set; }
+		/// <summary>
+		/// 飞达类型
+		/// </summary>
+		public string FEEDER_TYPE { get; set; }
+		/// <summary>
+		/// 飞达编码
+		/// </summary>
+		public string FEEDER_CODE { get; set; }
+		/// <summary>
+		/// 物料编码
+		/// </summary>
+		public string ITEM_CODE { get; set; }
+		/// <summary>
+		/// 加工面
+		/// </summary>
+		public string PCB_SURFACE { get; set; }
+		/// <summary>
+		/// 钢网编码
+		/// </summary>
+		public string STENCIL { get; set; }
+		/// <summary>
+		/// 刮刀编码
+		/// </summary>
+		public string SQUEEGEE { get; set; }
+		/// <summary>
+		/// 锡膏UPN编码
+		/// </summary>
+		public string SOLDER_UPN { get; set; }
+		/// <summary>
+		/// 胶水UPN编码
+		/// </summary>
+		public string ADHESIVE_UPN { get; set; }
+		/// <summary>
+		/// 备注
+		/// </summary>
+		public string REMARK { get; set; }
+		#endregion
+
+		#region 虚拟属性
+		/*例子
+		[SugarColumn(IsIgnore = true)]
+		public string FieldName { get; set; }
+		*/
+		#endregion
+
+		#region 外键属性
+		/*例子
+		//一对一外键导航
+		[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是SMT_LOAD_HIS类里面的外键ID字段
+		public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
+		//一对多外键导航
+		[Navigate(NavigateType.OneToMany, nameof(ClassA.SMT_LOAD_HISId))]//ClassA表中的SMT_LOAD_HISId
+		public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
+		//多对多外键导航
+		[Navigate(typeof(MappingClass), nameof(MappingClass.SMT_LOAD_HISId), nameof(MappingClass.ClassAId))]//注意顺序
+		public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
+		*/
+		#endregion
+
+		#region 枚举变量
+		/*例子
+		public enum FieldNames
+		{
+			[Description("枚举描述0")]
+			Enum0,
+			[Description("枚举描述1")]
+			Enum1,
+		}
+		*/
+		#endregion
+
+		#region 公共方法
+
+		#endregion
+
+	}//endClass
+}
\ No newline at end of file
diff --git a/Tiger.Model.Net/Entitys/MES/SMT_MAINTAIN.cs b/Tiger.Model.Net/Entitys/MES/SMT_MAINTAIN.cs
new file mode 100644
index 0000000..8bfd42e
--- /dev/null
+++ b/Tiger.Model.Net/Entitys/MES/SMT_MAINTAIN.cs
@@ -0,0 +1,81 @@
+using System;
+using SqlSugar;
+using System.Linq;
+using System.ComponentModel;
+using System.Collections.Generic;
+
+namespace Tiger.Model
+{
+	/// <summary>
+	/// 实体:SMT工具保养记录
+	/// </summary>
+	[Description("Primary:ID")]
+	[Serializable]
+	[SugarTable("SMT_MAINTAIN")]
+	public class SMT_MAINTAIN : DbEntityWithAuth
+	{
+		#region 构造函数
+		/// <summary>
+		/// 实体:SMT工具保养记录
+		/// </summary>
+		public SMT_MAINTAIN() {}
+		#endregion
+
+		#region 公共属性
+		/// <summary>
+		/// 工具编码
+		/// </summary>
+		public string TOOL_CODE { get; set; }
+		/// <summary>
+		/// 保养项目编码
+		/// </summary>
+		public string PROJ_CODE { get; set; }
+		/// <summary>
+		/// 类型(0Normal正常|1Squeegee刮刀)
+		/// </summary>
+		public int RESULT { get; set; }
+		/// <summary>
+		/// 备注
+		/// </summary>
+		public string REMARK { get; set; }
+		#endregion
+
+		#region 虚拟属性
+		/*例子
+		[SugarColumn(IsIgnore = true)]
+		public string FieldName { get; set; }
+		*/
+		#endregion
+
+		#region 外键属性
+		/*例子
+		//一对一外键导航
+		[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是SMT_MAINTAIN类里面的外键ID字段
+		public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
+		//一对多外键导航
+		[Navigate(NavigateType.OneToMany, nameof(ClassA.SMT_MAINTAINId))]//ClassA表中的SMT_MAINTAINId
+		public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
+		//多对多外键导航
+		[Navigate(typeof(MappingClass), nameof(MappingClass.SMT_MAINTAINId), nameof(MappingClass.ClassAId))]//注意顺序
+		public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
+		*/
+		#endregion
+
+		#region 枚举变量
+		/*例子
+		public enum FieldNames
+		{
+			[Description("枚举描述0")]
+			Enum0,
+			[Description("枚举描述1")]
+			Enum1,
+		}
+		*/
+		#endregion
+
+		#region 公共方法
+
+		#endregion
+
+	}//endClass
+}
\ No newline at end of file
diff --git a/Tiger.Model.Net/Entitys/MES/SMT_MT_DTL.cs b/Tiger.Model.Net/Entitys/MES/SMT_MT_DTL.cs
new file mode 100644
index 0000000..0547f10
--- /dev/null
+++ b/Tiger.Model.Net/Entitys/MES/SMT_MT_DTL.cs
@@ -0,0 +1,161 @@
+using System;
+using SqlSugar;
+using System.Linq;
+using System.ComponentModel;
+using System.Collections.Generic;
+
+namespace Tiger.Model
+{
+	/// <summary>
+	/// 实体:SMT工具保养记录明细
+	/// </summary>
+	[Description("Primary:ID")]
+	[Serializable]
+	[SugarTable("SMT_MT_DTL")]
+	public class SMT_MT_DTL : DbEntityWithAuth
+	{
+		#region 构造函数
+		/// <summary>
+		/// 实体:SMT工具保养记录明细
+		/// </summary>
+		public SMT_MT_DTL() {}
+		#endregion
+
+		#region 公共属性
+		/// <summary>
+		/// 保养记录ID
+		/// </summary>
+		public string MT_ID { get; set; }
+		/// <summary>
+		/// 工具编码
+		/// </summary>
+		public string TOOL_CODE { get; set; }
+		/// <summary>
+		/// 保养项目编码
+		/// </summary>
+		public string PROJ_CODE { get; set; }
+		/// <summary>
+		/// 保养记录值1
+		/// </summary>
+		public string VALUE01 { get; set; }
+		/// <summary>
+		/// 保养记录值2
+		/// </summary>
+		public string VALUE02 { get; set; }
+		/// <summary>
+		/// 保养记录值3
+		/// </summary>
+		public string VALUE03 { get; set; }
+		/// <summary>
+		/// 保养记录值4
+		/// </summary>
+		public string VALUE04 { get; set; }
+		/// <summary>
+		/// 保养记录值5
+		/// </summary>
+		public string VALUE05 { get; set; }
+		/// <summary>
+		/// 保养记录值6
+		/// </summary>
+		public string VALUE06 { get; set; }
+		/// <summary>
+		/// 保养记录值7
+		/// </summary>
+		public string VALUE07 { get; set; }
+		/// <summary>
+		/// 保养记录值8
+		/// </summary>
+		public string VALUE08 { get; set; }
+		/// <summary>
+		/// 保养记录值9
+		/// </summary>
+		public string VALUE09 { get; set; }
+		/// <summary>
+		/// 保养记录值10
+		/// </summary>
+		public string VALUE10 { get; set; }
+		/// <summary>
+		/// 保养记录值11
+		/// </summary>
+		public string VALUE11 { get; set; }
+		/// <summary>
+		/// 保养记录值12
+		/// </summary>
+		public string VALUE12 { get; set; }
+		/// <summary>
+		/// 保养记录值13
+		/// </summary>
+		public string VALUE13 { get; set; }
+		/// <summary>
+		/// 保养记录值14
+		/// </summary>
+		public string VALUE14 { get; set; }
+		/// <summary>
+		/// 保养记录值15
+		/// </summary>
+		public string VALUE15 { get; set; }
+		/// <summary>
+		/// 保养记录值16
+		/// </summary>
+		public string VALUE16 { get; set; }
+		/// <summary>
+		/// 保养记录值17
+		/// </summary>
+		public string VALUE17 { get; set; }
+		/// <summary>
+		/// 保养记录值18
+		/// </summary>
+		public string VALUE18 { get; set; }
+		/// <summary>
+		/// 保养记录值19
+		/// </summary>
+		public string VALUE19 { get; set; }
+		/// <summary>
+		/// 保养记录值20
+		/// </summary>
+		public string VALUE20 { get; set; }
+		/// <summary>
+		/// 备注
+		/// </summary>
+		public string REMARK { get; set; }
+		#endregion
+
+		#region 虚拟属性
+		/*例子
+		[SugarColumn(IsIgnore = true)]
+		public string FieldName { get; set; }
+		*/
+		#endregion
+
+		#region 外键属性
+		/*例子
+		//一对一外键导航
+		[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是SMT_MT_DTL类里面的外键ID字段
+		public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
+		//一对多外键导航
+		[Navigate(NavigateType.OneToMany, nameof(ClassA.SMT_MT_DTLId))]//ClassA表中的SMT_MT_DTLId
+		public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
+		//多对多外键导航
+		[Navigate(typeof(MappingClass), nameof(MappingClass.SMT_MT_DTLId), nameof(MappingClass.ClassAId))]//注意顺序
+		public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
+		*/
+		#endregion
+
+		#region 枚举变量
+		/*例子
+		public enum FieldNames
+		{
+			[Description("枚举描述0")]
+			Enum0,
+			[Description("枚举描述1")]
+			Enum1,
+		}
+		*/
+		#endregion
+
+		#region 公共方法
+
+		#endregion
+
+	}//endClass
+}
\ No newline at end of file
diff --git a/Tiger.Model.Net/Entitys/MES/SMT_MT_PROJECT.cs b/Tiger.Model.Net/Entitys/MES/SMT_MT_PROJECT.cs
new file mode 100644
index 0000000..044b710
--- /dev/null
+++ b/Tiger.Model.Net/Entitys/MES/SMT_MT_PROJECT.cs
@@ -0,0 +1,161 @@
+using System;
+using SqlSugar;
+using System.Linq;
+using System.ComponentModel;
+using System.Collections.Generic;
+
+namespace Tiger.Model
+{
+	/// <summary>
+	/// 实体:SMT工具保养项目
+	/// </summary>
+	[Description("Primary:ID")]
+	[Serializable]
+	[SugarTable("SMT_MT_PROJECT")]
+	public class SMT_MT_PROJECT : DbEntityWithAuth
+	{
+		#region 构造函数
+		/// <summary>
+		/// 实体:SMT工具保养项目
+		/// </summary>
+		public SMT_MT_PROJECT() {}
+		#endregion
+
+		#region 公共属性
+		/// <summary>
+		/// 保养项目编码
+		/// </summary>
+		public string PROJ_CODE { get; set; }
+		/// <summary>
+		/// 保养项目名称
+		/// </summary>
+		public string PROJ_NAME { get; set; }
+		/// <summary>
+		/// 类型(0SMTStencil钢网|1Squeegee刮刀)
+		/// </summary>
+		public int TOOL_TYPE { get; set; }
+		/// <summary>
+		/// 保养项1
+		/// </summary>
+		public string ITEM01 { get; set; }
+		/// <summary>
+		/// 保养项2
+		/// </summary>
+		public string ITEM02 { get; set; }
+		/// <summary>
+		/// 保养项3
+		/// </summary>
+		public string ITEM03 { get; set; }
+		/// <summary>
+		/// 保养项4
+		/// </summary>
+		public string ITEM04 { get; set; }
+		/// <summary>
+		/// 保养项5
+		/// </summary>
+		public string ITEM05 { get; set; }
+		/// <summary>
+		/// 保养项6
+		/// </summary>
+		public string ITEM06 { get; set; }
+		/// <summary>
+		/// 保养项7
+		/// </summary>
+		public string ITEM07 { get; set; }
+		/// <summary>
+		/// 保养项8
+		/// </summary>
+		public string ITEM08 { get; set; }
+		/// <summary>
+		/// 保养项9
+		/// </summary>
+		public string ITEM09 { get; set; }
+		/// <summary>
+		/// 保养项10
+		/// </summary>
+		public string ITEM10 { get; set; }
+		/// <summary>
+		/// 保养项11
+		/// </summary>
+		public string ITEM11 { get; set; }
+		/// <summary>
+		/// 保养项12
+		/// </summary>
+		public string ITEM12 { get; set; }
+		/// <summary>
+		/// 保养项13
+		/// </summary>
+		public string ITEM13 { get; set; }
+		/// <summary>
+		/// 保养项14
+		/// </summary>
+		public string ITEM14 { get; set; }
+		/// <summary>
+		/// 保养项15
+		/// </summary>
+		public string ITEM15 { get; set; }
+		/// <summary>
+		/// 保养项16
+		/// </summary>
+		public string ITEM16 { get; set; }
+		/// <summary>
+		/// 保养项17
+		/// </summary>
+		public string ITEM17 { get; set; }
+		/// <summary>
+		/// 保养项18
+		/// </summary>
+		public string ITEM18 { get; set; }
+		/// <summary>
+		/// 保养项19
+		/// </summary>
+		public string ITEM19 { get; set; }
+		/// <summary>
+		/// 保养项20
+		/// </summary>
+		public string ITEM20 { get; set; }
+		/// <summary>
+		/// 备注
+		/// </summary>
+		public string REMARK { get; set; }
+		#endregion
+
+		#region 虚拟属性
+		/*例子
+		[SugarColumn(IsIgnore = true)]
+		public string FieldName { get; set; }
+		*/
+		#endregion
+
+		#region 外键属性
+		/*例子
+		//一对一外键导航
+		[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是SMT_MT_PROJECT类里面的外键ID字段
+		public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
+		//一对多外键导航
+		[Navigate(NavigateType.OneToMany, nameof(ClassA.SMT_MT_PROJECTId))]//ClassA表中的SMT_MT_PROJECTId
+		public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
+		//多对多外键导航
+		[Navigate(typeof(MappingClass), nameof(MappingClass.SMT_MT_PROJECTId), nameof(MappingClass.ClassAId))]//注意顺序
+		public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
+		*/
+		#endregion
+
+		#region 枚举变量
+		/*例子
+		public enum FieldNames
+		{
+			[Description("枚举描述0")]
+			Enum0,
+			[Description("枚举描述1")]
+			Enum1,
+		}
+		*/
+		#endregion
+
+		#region 公共方法
+
+		#endregion
+
+	}//endClass
+}
\ No newline at end of file
diff --git a/Tiger.Model.Net/Entitys/MES/SMT_PROD_TABLE.cs b/Tiger.Model.Net/Entitys/MES/SMT_PROD_TABLE.cs
new file mode 100644
index 0000000..2837d5c
--- /dev/null
+++ b/Tiger.Model.Net/Entitys/MES/SMT_PROD_TABLE.cs
@@ -0,0 +1,125 @@
+using System;
+using SqlSugar;
+using System.Linq;
+using System.ComponentModel;
+using System.Collections.Generic;
+
+namespace Tiger.Model
+{
+	/// <summary>
+	/// 实体:SMT产品料站表
+	/// </summary>
+	[Description("Primary:ID")]
+	[Serializable]
+	[SugarTable("SMT_PROD_TABLE")]
+	public class SMT_PROD_TABLE : DbEntityWithAuth
+	{
+		#region 构造函数
+		/// <summary>
+		/// 实体:SMT产品料站表
+		/// </summary>
+		public SMT_PROD_TABLE() {}
+		#endregion
+
+		#region 公共属性
+		/// <summary>
+		/// 产品编码
+		/// </summary>
+		public string PROD_CODE { get; set; }
+		/// <summary>
+		/// 物料编码
+		/// </summary>
+		public string ITEM_CODE { get; set; }
+		/// <summary>
+		/// 替代料
+		/// </summary>
+		public string SUBITEM_CODE { get; set; }
+		/// <summary>
+		/// 单位
+		/// </summary>
+		public string UNIT { get; set; }
+		/// <summary>
+		/// 单位用量
+		/// </summary>
+		public int UNIT_QTY { get; set; }
+		/// <summary>
+		/// 产线编码
+		/// </summary>
+		public string LINE_CODE { get; set; }
+		/// <summary>
+		/// 贴片机编码
+		/// </summary>
+		public string SMT_CODE { get; set; }
+		/// <summary>
+		/// 钢网编码
+		/// </summary>
+		public string SMT_STENCIL { get; set; }
+		/// <summary>
+		/// 站位号
+		/// </summary>
+		public string SLOT_NO { get; set; }
+		/// <summary>
+		/// 贴片位置
+		/// </summary>
+		public string LOCATION { get; set; }
+		/// <summary>
+		/// 飞达编码
+		/// </summary>
+		public string FEEDER_CODE { get; set; }
+		/// <summary>
+		/// 飞达类型
+		/// </summary>
+		public string FEEDER_TYPE { get; set; }
+		/// <summary>
+		/// 加工面
+		/// </summary>
+		public string PCB_SURFACE { get; set; }
+		/// <summary>
+		/// 上料顺序
+		/// </summary>
+		public int LOAD_SEQ { get; set; }
+		/// <summary>
+		/// 备注
+		/// </summary>
+		public string REMARK { get; set; }
+		#endregion
+
+		#region 虚拟属性
+		/*例子
+		[SugarColumn(IsIgnore = true)]
+		public string FieldName { get; set; }
+		*/
+		#endregion
+
+		#region 外键属性
+		/*例子
+		//一对一外键导航
+		[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是SMT_PROD_TABLE类里面的外键ID字段
+		public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
+		//一对多外键导航
+		[Navigate(NavigateType.OneToMany, nameof(ClassA.SMT_PROD_TABLEId))]//ClassA表中的SMT_PROD_TABLEId
+		public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
+		//多对多外键导航
+		[Navigate(typeof(MappingClass), nameof(MappingClass.SMT_PROD_TABLEId), nameof(MappingClass.ClassAId))]//注意顺序
+		public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
+		*/
+		#endregion
+
+		#region 枚举变量
+		/*例子
+		public enum FieldNames
+		{
+			[Description("枚举描述0")]
+			Enum0,
+			[Description("枚举描述1")]
+			Enum1,
+		}
+		*/
+		#endregion
+
+		#region 公共方法
+
+		#endregion
+
+	}//endClass
+}
\ No newline at end of file
diff --git a/Tiger.Model.Net/Entitys/MES/SMT_SOLDER.cs b/Tiger.Model.Net/Entitys/MES/SMT_SOLDER.cs
new file mode 100644
index 0000000..530c7af
--- /dev/null
+++ b/Tiger.Model.Net/Entitys/MES/SMT_SOLDER.cs
@@ -0,0 +1,161 @@
+using System;
+using SqlSugar;
+using System.Linq;
+using System.ComponentModel;
+using System.Collections.Generic;
+
+namespace Tiger.Model
+{
+	/// <summary>
+	/// 实体:SMT锡膏胶水信息
+	/// </summary>
+	[Description("Primary:ID")]
+	[Serializable]
+	[SugarTable("SMT_SOLDER")]
+	public class SMT_SOLDER : DbEntityWithAuth
+	{
+		#region 构造函数
+		/// <summary>
+		/// 实体:SMT锡膏胶水信息
+		/// </summary>
+		public SMT_SOLDER() {}
+		#endregion
+
+		#region 公共属性
+		/// <summary>
+		/// UPN编码
+		/// </summary>
+		public string UPN { get; set; }
+		/// <summary>
+		/// CPN编码
+		/// </summary>
+		public string CPN { get; set; }
+		/// <summary>
+		/// 类型(0SolderPaste锡膏|1Adhesive胶水)
+		/// </summary>
+		public string TYPE { get; set; }
+		/// <summary>
+		/// 状态(0Register登记|1InStore入库|2Rewarm回温|3Sended领用|4Online上线|5Stir搅拌|6Offline下线|7UseUp用毕)
+		/// </summary>
+		public int STATUS { get; set; }
+		/// <summary>
+		/// 有效日期
+		/// </summary>
+		public DateTime EXP_DATE { get; set; } = DateTime.MinValue;
+		/// <summary>
+		/// 产线编码
+		/// </summary>
+		public string LINE_CODE { get; set; }
+		/// <summary>
+		/// 是否出柜(Y/N)
+		/// </summary>
+		public string IS_OUT { get; set; }
+		/// <summary>
+		/// 出柜日期
+		/// </summary>
+		public DateTime OUT_DATE { get; set; } = DateTime.MinValue;
+		/// <summary>
+		/// 出柜操作员
+		/// </summary>
+		public string OUT_USER { get; set; }
+		/// <summary>
+		/// 是否发出(Y/N)
+		/// </summary>
+		public string IS_SEND { get; set; }
+		/// <summary>
+		/// 发出日期
+		/// </summary>
+		public DateTime SEND_DATE { get; set; } = DateTime.MinValue;
+		/// <summary>
+		/// 发出操作员
+		/// </summary>
+		public string SEND_USER { get; set; }
+		/// <summary>
+		/// 是否打开(Y/N)
+		/// </summary>
+		public string IS_OPEN { get; set; }
+		/// <summary>
+		/// 打开日期
+		/// </summary>
+		public DateTime OPEN_DATE { get; set; } = DateTime.MinValue;
+		/// <summary>
+		/// 打开操作员
+		/// </summary>
+		public string OPEN_USER { get; set; }
+		/// <summary>
+		/// 首次使用日期
+		/// </summary>
+		public DateTime FIRST_DATE { get; set; } = DateTime.MinValue;
+		/// <summary>
+		/// 首次使用操作员
+		/// </summary>
+		public string FIRST_USER { get; set; }
+		/// <summary>
+		/// 搅拌次数
+		/// </summary>
+		public int STIR_SEQ { get; set; }
+		/// <summary>
+		/// 搅拌日期
+		/// </summary>
+		public DateTime STIR_DATE { get; set; } = DateTime.MinValue;
+		/// <summary>
+		/// 搅拌操作员
+		/// </summary>
+		public string STIR_USER { get; set; }
+		/// <summary>
+		/// 回冻次数
+		/// </summary>
+		public int REFREEZE_SEQ { get; set; }
+		/// <summary>
+		/// 回冻日期
+		/// </summary>
+		public DateTime REFREEZE_DATE { get; set; } = DateTime.MinValue;
+		/// <summary>
+		/// 回冻操作员
+		/// </summary>
+		public string REFREEZE_USER { get; set; }
+		/// <summary>
+		/// 备注
+		/// </summary>
+		public string REMARK { get; set; }
+		#endregion
+
+		#region 虚拟属性
+		/*例子
+		[SugarColumn(IsIgnore = true)]
+		public string FieldName { get; set; }
+		*/
+		#endregion
+
+		#region 外键属性
+		/*例子
+		//一对一外键导航
+		[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是SMT_SOLDER类里面的外键ID字段
+		public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
+		//一对多外键导航
+		[Navigate(NavigateType.OneToMany, nameof(ClassA.SMT_SOLDERId))]//ClassA表中的SMT_SOLDERId
+		public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
+		//多对多外键导航
+		[Navigate(typeof(MappingClass), nameof(MappingClass.SMT_SOLDERId), nameof(MappingClass.ClassAId))]//注意顺序
+		public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
+		*/
+		#endregion
+
+		#region 枚举变量
+		/*例子
+		public enum FieldNames
+		{
+			[Description("枚举描述0")]
+			Enum0,
+			[Description("枚举描述1")]
+			Enum1,
+		}
+		*/
+		#endregion
+
+		#region 公共方法
+
+		#endregion
+
+	}//endClass
+}
\ No newline at end of file
diff --git a/Tiger.Model.Net/Entitys/MES/SMT_SOLDER_HIS.cs b/Tiger.Model.Net/Entitys/MES/SMT_SOLDER_HIS.cs
new file mode 100644
index 0000000..ad6397a
--- /dev/null
+++ b/Tiger.Model.Net/Entitys/MES/SMT_SOLDER_HIS.cs
@@ -0,0 +1,89 @@
+using System;
+using SqlSugar;
+using System.Linq;
+using System.ComponentModel;
+using System.Collections.Generic;
+
+namespace Tiger.Model
+{
+	/// <summary>
+	/// 实体:SMT锡膏胶水历史
+	/// </summary>
+	[Description("Primary:ID")]
+	[Serializable]
+	[SugarTable("SMT_SOLDER_HIS")]
+	public class SMT_SOLDER_HIS : DbEntityWithAuth
+	{
+		#region 构造函数
+		/// <summary>
+		/// 实体:SMT锡膏胶水历史
+		/// </summary>
+		public SMT_SOLDER_HIS() {}
+		#endregion
+
+		#region 公共属性
+		/// <summary>
+		/// UPN编码
+		/// </summary>
+		public string UPN { get; set; }
+		/// <summary>
+		/// 产线编码
+		/// </summary>
+		public string LINE_CODE { get; set; }
+		/// <summary>
+		/// 钢网编码
+		/// </summary>
+		public string SMT_STENCIL { get; set; }
+		/// <summary>
+		/// 状态(0Register登记|1InStore入库|2Rewarm回温|3Sended领用|4Online上线|5Stir搅拌|6Offline下线|7UseUp用毕)
+		/// </summary>
+		public int STATUS { get; set; }
+		/// <summary>
+		/// 工单号
+		/// </summary>
+		public string WORK_ORDER { get; set; }
+		/// <summary>
+		/// 备注
+		/// </summary>
+		public string REMARK { get; set; }
+		#endregion
+
+		#region 虚拟属性
+		/*例子
+		[SugarColumn(IsIgnore = true)]
+		public string FieldName { get; set; }
+		*/
+		#endregion
+
+		#region 外键属性
+		/*例子
+		//一对一外键导航
+		[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是SMT_SOLDER_HIS类里面的外键ID字段
+		public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
+		//一对多外键导航
+		[Navigate(NavigateType.OneToMany, nameof(ClassA.SMT_SOLDER_HISId))]//ClassA表中的SMT_SOLDER_HISId
+		public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
+		//多对多外键导航
+		[Navigate(typeof(MappingClass), nameof(MappingClass.SMT_SOLDER_HISId), nameof(MappingClass.ClassAId))]//注意顺序
+		public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
+		*/
+		#endregion
+
+		#region 枚举变量
+		/*例子
+		public enum FieldNames
+		{
+			[Description("枚举描述0")]
+			Enum0,
+			[Description("枚举描述1")]
+			Enum1,
+		}
+		*/
+		#endregion
+
+		#region 公共方法
+
+		#endregion
+
+	}//endClass
+}
\ No newline at end of file
diff --git a/Tiger.Model.Net/Entitys/MES/SMT_TOOL.cs b/Tiger.Model.Net/Entitys/MES/SMT_TOOL.cs
new file mode 100644
index 0000000..38d4a15
--- /dev/null
+++ b/Tiger.Model.Net/Entitys/MES/SMT_TOOL.cs
@@ -0,0 +1,137 @@
+using System;
+using SqlSugar;
+using System.Linq;
+using System.ComponentModel;
+using System.Collections.Generic;
+
+namespace Tiger.Model
+{
+	/// <summary>
+	/// 实体:SMT工具信息
+	/// </summary>
+	[Description("Primary:ID")]
+	[Serializable]
+	[SugarTable("SMT_TOOL")]
+	public class SMT_TOOL : DbEntityWithAuth
+	{
+		#region 构造函数
+		/// <summary>
+		/// 实体:SMT工具信息
+		/// </summary>
+		public SMT_TOOL() {}
+		#endregion
+
+		#region 公共属性
+		/// <summary>
+		/// 工具编码
+		/// </summary>
+		public string TOOL_CODE { get; set; }
+		/// <summary>
+		/// 工具型号
+		/// </summary>
+		public string TOOL_MODEL { get; set; }
+		/// <summary>
+		/// 工具规格
+		/// </summary>
+		public string TOOL_SPEC { get; set; }
+		/// <summary>
+		/// 类型(0SMTStencil钢网|1Squeegee刮刀)
+		/// </summary>
+		public int TYPE { get; set; }
+		/// <summary>
+		/// 状态(0InStore已入库|1Sended已领用|2Online已上线|3Offline已下线|4Maintain保养中|5Scrapped已报废)
+		/// </summary>
+		public int STATUS { get; set; }
+		/// <summary>
+		/// 制造商
+		/// </summary>
+		public string MANUFACTURER { get; set; }
+		/// <summary>
+		/// 产品编码
+		/// </summary>
+		public string PROD_CODE { get; set; }
+		/// <summary>
+		/// 使用次数上限
+		/// </summary>
+		public int USE_LIMIT { get; set; }
+		/// <summary>
+		/// 保养预警次数
+		/// </summary>
+		public int MT_ALARM_NO { get; set; }
+		/// <summary>
+		/// 报废预警次数
+		/// </summary>
+		public int SCRAP_ALARM_NO { get; set; }
+		/// <summary>
+		/// 总数
+		/// </summary>
+		public int TOTAL { get; set; }
+		/// <summary>
+		/// 使用次数
+		/// </summary>
+		public int USE_COUNT { get; set; }
+		/// <summary>
+		/// 仓库编码
+		/// </summary>
+		public string WH_CODE { get; set; }
+		/// <summary>
+		/// 储区编码
+		/// </summary>
+		public string REGION_CODE { get; set; }
+		/// <summary>
+		/// 货架/料车编码
+		/// </summary>
+		public string SHELF_CODE { get; set; }
+		/// <summary>
+		/// 储位编码
+		/// </summary>
+		public string LOCATION_CODE { get; set; }
+		/// <summary>
+		/// 产线编码
+		/// </summary>
+		public string LINE_CODE { get; set; }
+		/// <summary>
+		/// 备注
+		/// </summary>
+		public string REMARK { get; set; }
+		#endregion
+
+		#region 虚拟属性
+		/*例子
+		[SugarColumn(IsIgnore = true)]
+		public string FieldName { get; set; }
+		*/
+		#endregion
+
+		#region 外键属性
+		/*例子
+		//一对一外键导航
+		[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是SMT_TOOL类里面的外键ID字段
+		public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
+		//一对多外键导航
+		[Navigate(NavigateType.OneToMany, nameof(ClassA.SMT_TOOLId))]//ClassA表中的SMT_TOOLId
+		public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
+		//多对多外键导航
+		[Navigate(typeof(MappingClass), nameof(MappingClass.SMT_TOOLId), nameof(MappingClass.ClassAId))]//注意顺序
+		public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
+		*/
+		#endregion
+
+		#region 枚举变量
+		/*例子
+		public enum FieldNames
+		{
+			[Description("枚举描述0")]
+			Enum0,
+			[Description("枚举描述1")]
+			Enum1,
+		}
+		*/
+		#endregion
+
+		#region 公共方法
+
+		#endregion
+
+	}//endClass
+}
\ No newline at end of file
diff --git a/Tiger.Model.Net/Entitys/MES/SMT_TOOL_HIS.cs b/Tiger.Model.Net/Entitys/MES/SMT_TOOL_HIS.cs
new file mode 100644
index 0000000..9153e31
--- /dev/null
+++ b/Tiger.Model.Net/Entitys/MES/SMT_TOOL_HIS.cs
@@ -0,0 +1,97 @@
+using System;
+using SqlSugar;
+using System.Linq;
+using System.ComponentModel;
+using System.Collections.Generic;
+
+namespace Tiger.Model
+{
+	/// <summary>
+	/// 实体:SMT工具使用历史
+	/// </summary>
+	[Description("Primary:ID")]
+	[Serializable]
+	[SugarTable("SMT_TOOL_HIS")]
+	public class SMT_TOOL_HIS : DbEntityWithAuth
+	{
+		#region 构造函数
+		/// <summary>
+		/// 实体:SMT工具使用历史
+		/// </summary>
+		public SMT_TOOL_HIS() {}
+		#endregion
+
+		#region 公共属性
+		/// <summary>
+		/// 工具编码
+		/// </summary>
+		public string TOOL_CODE { get; set; }
+		/// <summary>
+		/// 状态(0InStore已入库|1Sended已领用|2Online已上线|3Offline已下线|4Maintain保养中|5Scrapped已报废)
+		/// </summary>
+		public int STATUS { get; set; }
+		/// <summary>
+		/// 仓库编码
+		/// </summary>
+		public string WH_CODE { get; set; }
+		/// <summary>
+		/// 储区编码
+		/// </summary>
+		public string REGION_CODE { get; set; }
+		/// <summary>
+		/// 货架/料车编码
+		/// </summary>
+		public string SHELF_CODE { get; set; }
+		/// <summary>
+		/// 储位编码
+		/// </summary>
+		public string LOCATION_CODE { get; set; }
+		/// <summary>
+		/// 产线编码
+		/// </summary>
+		public string LINE_CODE { get; set; }
+		/// <summary>
+		/// 备注
+		/// </summary>
+		public string REMARK { get; set; }
+		#endregion
+
+		#region 虚拟属性
+		/*例子
+		[SugarColumn(IsIgnore = true)]
+		public string FieldName { get; set; }
+		*/
+		#endregion
+
+		#region 外键属性
+		/*例子
+		//一对一外键导航
+		[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是SMT_TOOL_HIS类里面的外键ID字段
+		public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
+		//一对多外键导航
+		[Navigate(NavigateType.OneToMany, nameof(ClassA.SMT_TOOL_HISId))]//ClassA表中的SMT_TOOL_HISId
+		public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
+		//多对多外键导航
+		[Navigate(typeof(MappingClass), nameof(MappingClass.SMT_TOOL_HISId), nameof(MappingClass.ClassAId))]//注意顺序
+		public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
+		*/
+		#endregion
+
+		#region 枚举变量
+		/*例子
+		public enum FieldNames
+		{
+			[Description("枚举描述0")]
+			Enum0,
+			[Description("枚举描述1")]
+			Enum1,
+		}
+		*/
+		#endregion
+
+		#region 公共方法
+
+		#endregion
+
+	}//endClass
+}
\ No newline at end of file
diff --git a/Tiger.Model.Net/Entitys/MES/SMT_WO_TABLE.cs b/Tiger.Model.Net/Entitys/MES/SMT_WO_TABLE.cs
new file mode 100644
index 0000000..90282c4
--- /dev/null
+++ b/Tiger.Model.Net/Entitys/MES/SMT_WO_TABLE.cs
@@ -0,0 +1,129 @@
+using System;
+using SqlSugar;
+using System.Linq;
+using System.ComponentModel;
+using System.Collections.Generic;
+
+namespace Tiger.Model
+{
+	/// <summary>
+	/// 实体:SMT工单料站表
+	/// </summary>
+	[Description("Primary:ID")]
+	[Serializable]
+	[SugarTable("SMT_WO_TABLE")]
+	public class SMT_WO_TABLE : DbEntityWithAuth
+	{
+		#region 构造函数
+		/// <summary>
+		/// 实体:SMT工单料站表
+		/// </summary>
+		public SMT_WO_TABLE() {}
+		#endregion
+
+		#region 公共属性
+		/// <summary>
+		/// 关联工单号
+		/// </summary>
+		public string WORK_ORDER { get; set; }
+		/// <summary>
+		/// 产品编码
+		/// </summary>
+		public string PROD_CODE { get; set; }
+		/// <summary>
+		/// 物料编码
+		/// </summary>
+		public string ITEM_CODE { get; set; }
+		/// <summary>
+		/// 替代料
+		/// </summary>
+		public string SUBITEM_CODE { get; set; }
+		/// <summary>
+		/// 单位
+		/// </summary>
+		public string UNIT { get; set; }
+		/// <summary>
+		/// 单位用量
+		/// </summary>
+		public int UNIT_QTY { get; set; }
+		/// <summary>
+		/// 产线编码
+		/// </summary>
+		public string LINE_CODE { get; set; }
+		/// <summary>
+		/// 贴片机编码
+		/// </summary>
+		public string SMT_CODE { get; set; }
+		/// <summary>
+		/// 钢网编码
+		/// </summary>
+		public string SMT_STENCIL { get; set; }
+		/// <summary>
+		/// 站位号
+		/// </summary>
+		public string SLOT_NO { get; set; }
+		/// <summary>
+		/// 贴片位置
+		/// </summary>
+		public string LOCATION { get; set; }
+		/// <summary>
+		/// 飞达编码
+		/// </summary>
+		public string FEEDER_CODE { get; set; }
+		/// <summary>
+		/// 飞达类型
+		/// </summary>
+		public string FEEDER_TYPE { get; set; }
+		/// <summary>
+		/// 加工面
+		/// </summary>
+		public string PCB_SURFACE { get; set; }
+		/// <summary>
+		/// 上料顺序
+		/// </summary>
+		public int LOAD_SEQ { get; set; }
+		/// <summary>
+		/// 备注
+		/// </summary>
+		public string REMARK { get; set; }
+		#endregion
+
+		#region 虚拟属性
+		/*例子
+		[SugarColumn(IsIgnore = true)]
+		public string FieldName { get; set; }
+		*/
+		#endregion
+
+		#region 外键属性
+		/*例子
+		//一对一外键导航
+		[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是SMT_WO_TABLE类里面的外键ID字段
+		public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
+		//一对多外键导航
+		[Navigate(NavigateType.OneToMany, nameof(ClassA.SMT_WO_TABLEId))]//ClassA表中的SMT_WO_TABLEId
+		public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
+		//多对多外键导航
+		[Navigate(typeof(MappingClass), nameof(MappingClass.SMT_WO_TABLEId), nameof(MappingClass.ClassAId))]//注意顺序
+		public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
+		*/
+		#endregion
+
+		#region 枚举变量
+		/*例子
+		public enum FieldNames
+		{
+			[Description("枚举描述0")]
+			Enum0,
+			[Description("枚举描述1")]
+			Enum1,
+		}
+		*/
+		#endregion
+
+		#region 公共方法
+
+		#endregion
+
+	}//endClass
+}
\ No newline at end of file
diff --git a/Tiger.Model.Net/Tiger.Model.Net.csproj b/Tiger.Model.Net/Tiger.Model.Net.csproj
index 30596eb..487906d 100644
--- a/Tiger.Model.Net/Tiger.Model.Net.csproj
+++ b/Tiger.Model.Net/Tiger.Model.Net.csproj
@@ -54,8 +54,8 @@
     <ErrorReport>prompt</ErrorReport>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="SqlSugar, Version=5.1.4.94, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\SqlSugar.5.1.4.95\lib\SqlSugar.dll</HintPath>
+    <Reference Include="SqlSugar, Version=5.1.4.149, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\SqlSugar.5.1.4.149\lib\SqlSugar.dll</HintPath>
     </Reference>
     <Reference Include="System" />
     <Reference Include="System.ComponentModel.DataAnnotations" />
@@ -95,6 +95,19 @@
     <Compile Include="Entitys\MES\MES_SHIFT_PERIOD.cs" />
     <Compile Include="Entitys\MES\node.cs" />
     <Compile Include="Entitys\MES\R_Wip_Tracking_T.cs" />
+    <Compile Include="Entitys\MES\SMT_FEEDER.cs" />
+    <Compile Include="Entitys\MES\SMT_FEEDER_TYPE.cs" />
+    <Compile Include="Entitys\MES\SMT_LOADING.cs" />
+    <Compile Include="Entitys\MES\SMT_LOAD_HIS.cs" />
+    <Compile Include="Entitys\MES\SMT_MAINTAIN.cs" />
+    <Compile Include="Entitys\MES\SMT_MT_DTL.cs" />
+    <Compile Include="Entitys\MES\SMT_MT_PROJECT.cs" />
+    <Compile Include="Entitys\MES\SMT_PROD_TABLE.cs" />
+    <Compile Include="Entitys\MES\SMT_SOLDER.cs" />
+    <Compile Include="Entitys\MES\SMT_SOLDER_HIS.cs" />
+    <Compile Include="Entitys\MES\SMT_TOOL.cs" />
+    <Compile Include="Entitys\MES\SMT_TOOL_HIS.cs" />
+    <Compile Include="Entitys\MES\SMT_WO_TABLE.cs" />
     <Compile Include="Entitys\SYS\LOG_CS_LOGIN.cs" />
     <Compile Include="Entitys\SYS\LOG_PDA_LOGIN.cs" />
     <Compile Include="Entitys\SYS\SYS_CS_LOGIN.cs" />
diff --git a/Tiger.Model.Net/packages.config b/Tiger.Model.Net/packages.config
index f58dfbf..b3ede61 100644
--- a/Tiger.Model.Net/packages.config
+++ b/Tiger.Model.Net/packages.config
@@ -1,5 +1,5 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
 <packages>
   <package id="Newtonsoft.Json" version="13.0.3" targetFramework="net452" />
-  <package id="SqlSugar" version="5.1.4.95" targetFramework="net48" />
+  <package id="SqlSugar" version="5.1.4.149" targetFramework="net48" />
 </packages>
\ No newline at end of file

--
Gitblit v1.9.3