´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/16a40d16-80f0-4c73-a9a6-e28826d2b979.vsidxBinary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/33f3558c-adae-4d5b-a8db-37cdc93fc75a.vsidxBinary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/591ce19e-7364-4503-b4b3-a190a9a73366.vsidxBinary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/a239e3a6-c377-4c06-90b5-6cbecfe39546.vsidxBinary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/d04c6c27-9127-4d1a-aa0f-9cd4d8948537.vsidxBinary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/config/applicationhost.config
@@ -812,7 +812,7 @@ </add> </traceFailedRequests> <traceProviderDefinitions> <traceProviderDefinitions> <add name="WWW Server" guid="{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}"> <areas> <clear /> @@ -905,7 +905,7 @@ <add name="CgiModule" lockItem="true" /> <add name="FastCgiModule" lockItem="true" /> <!-- <add name="WebDAVModule" /> --> <add name="RewriteModule" /> <add name="RewriteModule" /> <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" preCondition="managedHandler" /> <add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="managedHandler" /> <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" preCondition="managedHandler" /> @@ -923,7 +923,6 @@ <add name="ConfigurationValidationModule" lockItem="true" /> <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" /> <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" /> <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler,runtimeVersionv2.0" /> <add name="AspNetCoreModule" lockItem="true" /> <add name="AspNetCoreModuleV2" lockItem="true" /> </modules> @@ -944,12 +943,6 @@ <add name="cshtml-ISAPI-4.0_64bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> <add name="vbhtm-ISAPI-4.0_64bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> <add name="vbhtml-ISAPI-4.0_64bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> <add name="svc-Integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" /> <add name="svc-ISAPI-2.0" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" /> <add name="xoml-Integrated" path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" /> <add name="xoml-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" /> <add name="rules-Integrated" path="*.rules" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" /> <add name="rules-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" /> <add name="AXD-ISAPI-4.0_32bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> <add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> <add name="SimpleHandlerFactory-ISAPI-4.0_32bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> @@ -1001,15 +994,12 @@ <add name="WebServiceHandlerFactory-ISAPI-2.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" /> <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" /> <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" /> <add name="svc-ISAPI-2.0-64" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" /> <add name="AXD-ISAPI-2.0-64" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" /> <add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" /> <add name="SimpleHandlerFactory-ISAPI-2.0-64" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" /> <add name="WebServiceHandlerFactory-ISAPI-2.0-64" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" /> <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0-64" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" /> <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0-64" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" /> <add name="rules-64-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" /> <add name="xoml-64-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" /> <add name="CGI-exe" path="*.exe" verb="*" modules="CgiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" /> <add name="SSINC-stm" path="*.stm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" /> <add name="SSINC-shtm" path="*.shtm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" /> ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/HttpManager.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,98 @@ using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_Common { public class HttpManager { public static Task<string> HttpPostAsync(string url, string postData = null, string contentType = "application/json", int timeOut = 30, Dictionary<string, string> headers = null) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.Timeout = 10000; if (!string.IsNullOrEmpty(contentType)) { request.ContentType = contentType; } if (headers != null) { foreach (var header in headers) request.Headers[header.Key] = header.Value; } try { byte[] bytes = Encoding.UTF8.GetBytes(postData ?? ""); using (Stream sendStream = request.GetRequestStream()) { sendStream.Write(bytes, 0, bytes.Length); } using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { Stream responseStream = response.GetResponseStream(); StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8); return streamReader.ReadToEndAsync(); } } catch (Exception ex) { return Task.FromResult(ex.Message); } } public static Task<string> HttpPost(string url, string postData) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; try { byte[] bytes = Encoding.UTF8.GetBytes(postData ?? ""); using (Stream sendStream = request.GetRequestStream()) { sendStream.Write(bytes, 0, bytes.Length); } using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { Stream responseStream = response.GetResponseStream(); StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8); return streamReader.ReadToEndAsync(); } } catch (Exception ex) { return Task.FromResult(ex.Message); } } public static Task<string> HttpGetAsync(string url, Dictionary<string, string> headers = null) { try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); if (headers != null) { foreach (var header in headers) request.Headers[header.Key] = header.Value; } using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { Stream responseStream = response.GetResponseStream(); StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8); return streamReader.ReadToEndAsync(); } } catch (Exception ex) { return Task.FromResult(ex.Message); } } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/LocationEnum/LocationStatusEnum.cs
@@ -30,10 +30,5 @@ [Description("æè´§")] InStock = 2, PalletLock = 98, [Description("空æç")] Pallet = 99 } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/LocationEnum/LocationTypeEnum.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,42 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_Common.LocationEnum { public enum LocationTypeEnum { /// <summary> /// æ£å¸¸è´§ä½ /// </summary> [Description("æ£å¸¸è´§ä½")] Normal = 1, /// <summary> /// ä¸æè´§ä½ /// </summary> [Description("ä¸æè´§ä½")] Feeding= 2, /// <summary> /// å ¥åºå£è´§ä½ /// </summary> [Description("å ¥åºå£è´§ä½")] In = 3, /// <summary> /// 空车åºåºå£è´§ä½ /// </summary> [Description("空车åºåºå£è´§ä½")] OutEmpty = 4, /// <summary> /// çªç䏿æºè´§ä½ /// </summary> [Description("çªç䏿æºè´§ä½")] OutWorkUnit = 5 } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/ServiceLog/ServiceLogger.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,78 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_Common.ServiceLog { public class ServiceLogger { private static ReaderWriterLockSlim LogWriteLock = new ReaderWriterLockSlim(); private static string folderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log\\" + DateTime.Now.ToString("yyyy-MM-dd")); private static int size = 10485760; private static string ext = ".log"; public static void WriteLogToFile(string fileName, string log) { try { LogWriteLock.EnterWriteLock(); if (!Directory.Exists(folderPath)) { Directory.CreateDirectory(folderPath); } string path = Path.Combine(folderPath, GetLastAccessFileName(fileName)); DateTime now = DateTime.Now; string contents = $"ã{now}ã{Environment.NewLine}{log}"; File.AppendAllText(path, contents); } catch { } finally { LogWriteLock.ExitWriteLock(); } } private static string GetLogFilePath(string folderPath, string fileName) { string fileName2 = fileName; List<FileInfo> list = (from fi in new DirectoryInfo(folderPath).GetFiles() where fi.Name.ToLower().Contains(fileName2.ToLower()) && fi.Extension.ToLower() == ext.ToLower() && fi.Length < size select fi into d orderby d.Name descending select d).ToList(); if (list.Count > 0) { return list.FirstOrDefault().FullName; } return Path.Combine(folderPath, fileName2 + "_" + DateTime.Now.ToString("HH-mm-ss") + ".log"); } private static string GetLastAccessFileName(string fileName) { string[] existLogFileNames = GetExistLogFileNames(fileName); foreach (string text in existLogFileNames) { if (new FileInfo(text).Length < size) { return text; } } return fileName + "_" + DateTime.Now.ToString("HH-mm-ss") + ".log"; } public static string[] GetExistLogFileNames(string fileName) { return Directory.GetFiles(folderPath, fileName + "*.log"); } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskStatusEnum.cs
@@ -10,34 +10,35 @@ public enum TaskInStatusEnum { /// <summary> /// æ°å»ºå ¥åºä»»å¡ /// æ°å»ºå ¥åºä»»å¡ 对åºWMSè¯·æ± 1001-AGVè¯·æ±æ¯å¦å 计è¿å ¥ /// </summary> [Description("æ°å»ºå ¥åºä»»å¡")] InNew = 200, ///// <summary> ///// AGVå ¥åºæ§è¡ä¸ ///// </summary> //[Description("AGVå ¥åºæ§è¡ä¸")] //AGV_InExecuting = 210, ///// <summary> ///// AGVå ¥åºå®æ ///// </summary> //[Description("AGVæ¬è¿å®æ")] //AGV_InFinish = 215, /// <summary> /// AGVå ¥åºæ§è¡ä¸ 对åºWMSè¯·æ± 3001-AGVæ¾è´§å®æ /// </summary> [Description("AGVå ¥åºæ§è¡ä¸")] AGV_InExecuting = 210, /// <summary> /// AGVå ¥åºå®æ 对åºWMSè¯·æ± 101-æåæºæå宿 /// </summary> [Description("AGVæ¬è¿å®æ")] AGV_InFinish = 215, /// <summary> /// è¾éçº¿å ¥åºæ§è¡ä¸ /// </summary> [Description("è¾éçº¿å ¥åºæ§è¡ä¸")] Line_InExecuting = 220, //[Description("è¾éçº¿å ¥åºæ§è¡ä¸")] //Line_InExecuting = 220, /// <summary> /// è¾éçº¿å ¥åºå®æ /// </summary> [Description("è¾é线è¾é宿")] Line_InFinish = 225, //[Description("è¾é线è¾é宿")] //Line_InFinish = 225, /// <summary> /// å åæºå ¥åºæ§è¡ä¸ @@ -99,14 +100,14 @@ /// <summary> /// è¾é线åºåºæ§è¡ä¸ /// </summary> [Description("è¾é线åºåºæ§è¡ä¸")] Line_OutExecuting = 120, //[Description("è¾é线åºåºæ§è¡ä¸")] //Line_OutExecuting = 120, /// <summary> /// è¾é线åºåºå®æ /// </summary> [Description("è¾é线è¾é宿")] Line_OutFinish = 125, //[Description("è¾é线è¾é宿")] //Line_OutFinish = 125, ///// <summary> ///// AGVåºåºæ§è¡ä¸ ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs
@@ -14,21 +14,7 @@ /// </summary> [Description("å ¥åº")] Inbound = 200, /// <summary> /// çç¹å ¥åº /// </summary> [Description("çç¹å ¥åº")] InInventory = 201, /// <summary> /// åæ£å ¥åº /// </summary> [Description("åæ£å ¥åº")] InPick = 202, /// <summary> /// è´¨æ£å ¥åº /// </summary> [Description("è´¨æ£å ¥åº")] InQuality = 203 } public enum TaskOutboundTypeEnum @@ -36,41 +22,42 @@ /// <summary> /// åºåº /// </summary> [Description("åºåº")] Outbound = 100, //[Description("åºåº")] //Outbound = 100, /// <summary> /// çç¹åºåº /// å¼å¸¸åºåº /// </summary> [Description("çç¹åºåº")] [Description("å¼å¸¸åºåº")] OutInventory = 101, /// <summary> /// 忣åºåº /// 空车åºåº /// </summary> [Description("忣åºåº")] [Description("空车åºåº")] OutPick = 102, /// <summary> /// è´¨æ£åºåº /// </summary> [Description("è´¨æ£åºåº")] OutQuality = 103, } public enum TaskRelocationTypeEnum { /// <summary> /// åºå ç§»åº /// ç§»åº /// </summary> [Description("åºå ç§»åº")] [Description("ç§»åº")] Relocation = 300, /// <summary> /// åºå¤ç§»åº /// </summary> [Description("åºå¤ç§»åº")] RelocationIn = 301 //[Description("åºå¤ç§»åº")] //RelocationIn = 301 } public enum TaskOtherTypeEnum { /// <summary> /// 䏿 /// </summary> [Description("䏿")] Feed = 400, } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj
@@ -6,4 +6,8 @@ <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> </ItemGroup> </Project> ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/DeliveryPlan.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_DTO.TaskInfo { public class DeliveryPlan { public bool isUpKiln { get; set; } = false; // æ¯å¦ä¸ºä¸çªä»»å¡ public string startPlan { get; set; } // èµ·å§åºåä½ç½® public string endPlan { get; set; } // ç»ç¹åºåä½ç½® public string CarId { get; set; } public bool isQuit { get; set; } = true; // æ¯å¦ä¸ºå¼å¸¸åºåº public bool isAtomatic { get; set; } = true; // æ¯å¦ä¸ºAGVå ¥åºï¼ trueï¼agvå ¥åºãfalseï¼æå¨å ¥åº } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/MESPeekBack.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_DTO.TaskInfo { /// <summary> /// ä¸æè¯·æ±åè°å®ä½ /// </summary> public class MESPeekBack { public int cmd { get; set; } public int task_id { get; set; } public int src_rack { get; set; } public int src_col { get; set; } public int src_row { get; set; } public int dest_rack { get; set; } public int dest_col { get; set; } public int dest_row { get; set; } public int src_station { get; set; } public int dest_station { get; set; } public int size { get; set; } = 0; public int weight { get; set; } = 0; public string barcode { get; set; } = ""; public int startIndex { get; set; } public int total { get; set; } public string CarId { get; set; } public int status { get; set; } = 6; } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/MESTaskDTO.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,71 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_DTO.TaskInfo { /// <summary> /// WCSçæä»»å¡å ¥åå®ä½ç±» /// </summary> public class MESTaskDTO { /// <summary> /// ä»»å¡ç±»å èªå¨å ¥åºç³è¯·-1001 æå¨å ¥åºï¼AGVæ¾è´§å®æï¼-3001 å ¥åº-101 ; ç§»åºï¼ç§»åºï¼åºåºå ±ç¨ï¼-103;å¼å¸¸åºåºï¼éåºï¼-102; 空车åºåº -102; 䏿-104 /// </summary> public int cmd { get; set; } /// <summary> /// ä»»å¡å· /// </summary> public int task_id { get; set; } /// <summary> /// èµ·å§è¡ /// </summary> public int src_rack { get; set; } /// <summary> /// èµ·å§å /// </summary> public int src_col { get; set; } /// <summary> /// èµ·å§å± /// </summary> public int src_row { get; set; } /// <summary> /// ç®æ è¡ /// </summary> public int dest_rack { get; set; } /// <summary> /// ç®æ å /// </summary> public int dest_col { get; set; } /// <summary> /// ç®æ å± /// </summary> public int dest_row { get; set; } /// <summary> /// æºç«ç¹ /// </summary> public int src_station { get; set; } /// <summary> /// ç®æ ç«ç¹ /// </summary> public int dest_station { get; set; } public int size { get; set; } = 0; public int weight { get; set; } = 0; public string barcode { get; set; } = ""; /// <summary> /// å½åæè½¦å±æ° /// </summary> public int startIndex { get; set; } /// <summary> /// æ»å±æ° /// </summary> public int total { get; set; } /// <summary> /// æè½¦å· /// </summary> public string CarId { get; set; } public int status { get; set; } = 6; } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -55,6 +55,14 @@ /// <returns>è¿åå¤çç»æ</returns> WebResponseContent ReceiveWMSTask([NotNull] List<WMSTaskDTO> taskDTOs); /// <summary> /// æ¥æ¶MESä»»å¡ä¿¡æ¯ /// </summary> /// <param name="taskDTO">MESä»»å¡å¯¹è±¡éå</param> /// <returns>è¿åå¤çç»æ</returns> WebResponseContent ReceiveMESTask([NotNull] MESTaskDTO taskDTO); /// <summary> /// æ ¹æ®æçå·ãèµ·å§å°ååWMS请æ±ä»»å¡ /// </summary> @@ -96,12 +104,40 @@ Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null); /// <summary> /// æ ¹æ®è®¾å¤ç¼å·ãå½åå°åæç §ä¼å 级以åå建æ¶é´æåºæ¥è¯¢ä»»å¡æ± æ°å¢çä»»å¡ /// æ ¹æ®è®¾å¤ç¼å·æç §ä¼å 级以åå建æ¶é´æåºæ¥è¯¢ä»»å¡æ± æ°å¢çä»»å¡ /// </summary> /// <param name="deviceNo">设å¤ç¼å·</param> /// <param name="currentAddress">å½åå°å</param> /// <returns>è¿åä»»å¡å®ä½å¯¹è±¡ï¼å¯è½ä¸ºnull</returns> Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = ""); Dt_Task QueryStackerCraneTask(string deviceNo); /// <summary> /// æ¥è¯¢å°å åæºä»»å¡ /// </summary> /// <returns></returns> Dt_Task QueryStackerCraneTask(); /// <summary> /// æ¥è¯¢å°å åæºåºåºå®æä»»å¡ /// </summary> /// <returns></returns> Dt_Task QueryStackerCraneFinishTask(); /// <summary> /// æ¥è¯¢å ¥åºä»»å¡ 对åºWMSè¯·æ± 1001-AGVè¯·æ±æ¯å¦å 计è¿å ¥ /// </summary> /// <param name="deviceNo"></param> /// <returns></returns> Dt_Task QueryStackerCraneTaskByAGVRequest(string deviceNo); /// <summary> /// 对åºWMSè¯·æ± 3001-AGVæ¾è´§å®æ /// </summary> /// <param name="deviceNo"></param> /// <returns></returns> Dt_Task QueryStackerCraneTaskByAGVPutFinish(string deviceNo); /// <summary> /// æ ¹æ®è®¾å¤ç¼å·ãå½åå°åæç §ä¼å 级以åå建æ¶é´æåºæ¥è¯¢ä»»å¡æ± å ¥åºç±»åçæ°å¢çä»»å¡ @@ -137,9 +173,18 @@ /// <summary> /// æ´æ°ä»»å¡ç¶æä¿¡æ¯ï¼å¹¶åæ¥è³WMS /// </summary> /// <param name="taskNum">ä»»å¡å·</param> /// <param name="taskId">ä»»å¡å·</param> /// <param name="status">ä»»å¡ç¶æ</param> void UpdateTaskStatus(int taskNum, int status); void UpdateTaskStatus(int taskId, int status); /// <summary> /// æ´æ°ä»»å¡ç¶æä¿¡æ¯åæ§çä»»å¡å·ï¼1001ï¼3001æ¶ä¸æ ·ä»»å¡å·ï¼ /// </summary> /// <param name="taskId">ä»»å¡ID</param> /// <param name="taskId">WMSä¸ä¸ç¯è(3001)çä»»å¡å·</param> /// <param name="status">ä»»å¡ç¶æ</param> void UpdateTaskStatus(int taskId, int oldtaskId, int status); /// <summary> /// å°ä»»å¡ç¶æä¿®æ¹ä¸ºä¸ä¸ä¸ªç¶æ ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/Comm/ResponseModel.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_Model.Models.Comm { public class ResponseModel { public int Status { get; set; } public string Message { get; set; } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/TaskInfo/Dt_Task.cs
@@ -104,7 +104,7 @@ public string CurrentAddress { get; set; } /// <summary> /// ä¸ä¸å°å /// ä¸ä¸å°åï¼å ¥åºæ¶WMSå3001æ¶ç¨äºåæ°ä»»å¡å·ï¼ /// </summary> [ImporterHeader(Name = "ä¸ä¸å°å")] [ExporterHeader(DisplayName = "ä¸ä¸å°å")] @@ -128,7 +128,7 @@ public int Grade { get; set; } /// <summary> /// WMSä»»å¡ä¸»é® /// WMSä»»å¡ä¸»é® 1表示æå¨å ¥åº /// </summary> [ImporterHeader(Name = "WMSä»»å¡ä¸»é®")] [ExporterHeader(DisplayName = "WMSä»»å¡ä¸»é®")] @@ -144,7 +144,7 @@ public DateTime? Dispatchertime { get; set; } /// <summary> /// 夿³¨ /// 夿³¨ ç¨äºå䏿æè½¦çæ»å±æ°åå½å屿° æ ¼å¼ï¼æ»å±æ°-å½å屿° /// </summary> [ImporterHeader(Name = "夿³¨")] [ExporterHeader(DisplayName = "夿³¨")] ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Basic/LocationInfoController.cs
@@ -22,7 +22,7 @@ _repository = repository; } [HttpPost, Route("InitializationLocation")] [HttpPost, Route("InitializationLocation"),AllowAnonymous] public WebResponseContent InitializationLocation([FromBody] InitializationLocationDTO initializationLocationDTO) { return Service.InitializationLocation(initializationLocationDTO); ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Task/TaskController.cs
@@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.Diagnostics.CodeAnalysis; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseController; using WIDESEAWCS_DTO.TaskInfo; @@ -48,5 +49,16 @@ { return Service.RollbackTaskStatusToLast(taskNum); } /// <summary> /// æ¥æ¶WMSä»»å¡ä¿¡æ¯ /// </summary> /// <param name="taskDTO">MESä»»å¡å¯¹è±¡</param> /// <returns>è¿åå¤çç»æ</returns> [HttpPost, Route("/WCS/V1/CMD"), AllowAnonymous] public WebResponseContent ReceiveMESTask([FromBody] MESTaskDTO taskDTO) { return Service.ReceiveMESTask(taskDTO); } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json
@@ -23,5 +23,8 @@ }, "ApiName": "WIDESEA", "ExpMinutes": 120, "QuartzJobAutoStart": true "QuartzJobAutoStart": true, "MESApi": "http://10.0.250.12:8888/agv/v1/CMD", "ConveyorLineApi": "http://10.0.250.12:8888/wcs/goBack"//空车åºåºä»»å¡ä¿¡æ¯è·åå°å } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_StockRepository/StockInfoRepository.cs
@@ -101,7 +101,8 @@ { //ISugarQueryable<string> locationCodes = Db.Queryable<Dt_LocationInfo>().Where(x => x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Pallet.ObjToInt() && (x.EnalbeStatus == LocationEnalbeStatusEnum.OnlyOut.ObjToInt() || LocationEnalbeStatusEnum.Normal.ObjToInt() == x.EnalbeStatus)).Select(x => x.LocationCode); return Db.Queryable<Dt_StockInfo>().Where(x => x.StockStatus == StockStatusEmun.å·²å ¥åº.ObjToInt() && SqlFunc.Subqueryable<Dt_LocationInfo>().Where(v => v.LocationCode == x.LocationCode && v.RoadwayNo == roadwayNo && v.LocationStatus == LocationStatusEnum.Pallet.ObjToInt() && (v.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || EnableStatusEnum.Normal.ObjToInt() == v.EnableStatus)).Any()).OrderBy(x => x.ModifyDate).First(); //return Db.Queryable<Dt_StockInfo>().Where(x => x.StockStatus == StockStatusEmun.å·²å ¥åº.ObjToInt() && SqlFunc.Subqueryable<Dt_LocationInfo>().Where(v => v.LocationCode == x.LocationCode && v.RoadwayNo == roadwayNo && v.LocationStatus == LocationStatusEnum.Pallet.ObjToInt() && (v.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || EnableStatusEnum.Normal.ObjToInt() == v.EnableStatus)).Any()).OrderBy(x => x.ModifyDate).First(); return null; } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/ApiInvoke.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,53 @@ using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Common; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.TaskInfo; using static System.Net.WebRequestMethods; namespace WIDESEAWCS_TaskInfoService { public class ApiInvoke { public static MESResponse SendTaskCMD(MESSendCMD sendCmd) { string postData = sendCmd.Serialize(); string url = AppSettings.Configuration.GetSection("MESApi").Value; string response = ""; try { response = HttpManager.HttpPostAsync(url, postData).Result; MESResponse res = JsonConvert.DeserializeObject<MESResponse>(response); return res; } catch (Exception ex) { throw new Exception(ex.Message); } } public static MESResponse DeliveryPlanCMD(DeliveryPlan sendCmd) { string postData = sendCmd.Serialize(); string url = AppSettings.Configuration.GetSection("ConveyorLineApi").Value; string response = ""; try { response = HttpManager.HttpPostAsync(url, postData).Result; MESResponse res = JsonConvert.DeserializeObject<MESResponse>(response); return res; } catch (Exception ex) { throw new Exception(ex.Message); } } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/MESResponse.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_TaskInfoService { public class MESResponse { public int code { get; set; } public string message { get; set; } public object data { get; set; } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Common/MESSendCMD.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_TaskInfoService { /// <summary> /// ä»»å¡å®æåä¼ MESå®ä½ç±» /// </summary> public class MESSendCMD { /// <summary> /// ä»»å¡ç±»å /// </summary> public int cmd { get; set; } /// <summary> /// å /// </summary> public int task_id { get; set; } public int status { get; set; } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskExecuteDetailService.cs
@@ -74,9 +74,9 @@ }; BaseDal.AddData(taskExecuteDetail); } catch (Exception ex) catch (Exception) { throw; } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -18,6 +18,7 @@ using AutoMapper; using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using SqlSugar; using SqlSugar.Extensions; using System; using System.Collections.Generic; using System.ComponentModel; @@ -26,11 +27,16 @@ using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Common.LocationEnum; using WIDESEAWCS_Common.ServiceLog; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseRepository; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_Core.Enums; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_IBasicRepository; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; @@ -44,7 +50,9 @@ private readonly IRouterService _routerService; private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository; private readonly ILocationInfoRepository _locationInfoRepository; private readonly IMapper _mapper; private readonly IUnitOfWorkManage _unitOfWorkManage; private Dictionary<string, OrderByType> _taskOrderBy = new() { @@ -58,12 +66,18 @@ public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList(); public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper) : base(BaseDal) public List<int> TaskRelocationboundTypes => typeof(TaskRelocationTypeEnum).GetEnumIndexList(); public List<int> TaskOtherboundTypes => typeof(TaskOtherTypeEnum).GetEnumIndexList(); public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ILocationInfoRepository locationInfoRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) { _routerService = routerService; _taskExecuteDetailService = taskExecuteDetailService; _taskExecuteDetailRepository = taskExecuteDetailRepository; _mapper = mapper; _locationInfoRepository = locationInfoRepository; _unitOfWorkManage = unitOfWorkManage; } /// <summary> @@ -122,6 +136,313 @@ return content; } /// <summary> /// æ¥æ¶MESä»»å¡ä¿¡æ¯ /// </summary> /// <param name="taskDTO">MESä»»å¡å¯¹è±¡</param> /// <returns>è¿åå¤çç»æ</returns> public WebResponseContent ReceiveMESTask([NotNull] MESTaskDTO taskDTO) { WebResponseContent content = new WebResponseContent(); try { // ServiceLogger.WriteLogToFile(""); Dt_Task task = new Dt_Task(); Dt_Task taskinfo = BaseDal.QueryFirst(x => x.TaskNum == taskDTO.task_id); if(taskDTO.cmd==101)//妿æ¯101ææ§çä»»å¡å·å»æ¥ { taskinfo = BaseDal.QueryFirst(x => x.TaskNum == taskDTO.weight); } if (taskDTO.cmd!=3001&& taskDTO.cmd != 101 && taskinfo != null) { return content = WebResponseContent.Instance.Error($"ä»»å¡å·éå¤ï¼ä»»å¡å·ï¼{taskDTO.task_id}"); } Dt_LocationInfo locationsrc = _locationInfoRepository.QueryFirst(x => x.Remark == taskDTO.src_station.ToString()); Dt_LocationInfo locationdsc = _locationInfoRepository.QueryFirst(x => x.Remark == taskDTO.dest_station.ToString()); switch (taskDTO.cmd) { case 1001://AGV请æ±å ¥åº task.TaskType = (int)TaskInboundTypeEnum.Inbound; task.TaskState = (int)TaskInStatusEnum.InNew; task.Roadway = "SC01"; task.Grade = 2; task.WMSId = 0;//表示èªå¨å ¥åº if (locationsrc != null) { task.SourceAddress = locationsrc.LocationCode; } else { return content = WebResponseContent.Instance.Error($"WCSæªæ¥è¯¢å°æºç«ç¹å¯¹åºçåºä½ï¼æºç«ç¹ï¼{taskDTO.dest_station.ToString()}"); } break; case 3001://AGVæ¾è´§å®æ WMSå3001çåæ¶ä¼åæåä¿¡å· if (BaseDal.QueryFirst(x => x.TaskNum == taskDTO.task_id) == null)//æå¨å ¥åºç´æ¥å3001ï¼éè¦çæä»»å¡ï¼å 为没æ1001ç¯è { task.TaskType = (int)TaskInboundTypeEnum.Inbound; task.TaskState = (int)TaskInStatusEnum.AGV_InExecuting; task.Roadway = "SC01"; task.WMSId = 1;//表示æå¨å ¥åº task.Grade = 2; if (locationsrc != null) { task.SourceAddress = locationsrc.LocationCode; } else { return content = WebResponseContent.Instance.Error($"WCSæªæ¥è¯¢å°æºç«ç¹å¯¹åºçåºä½ï¼æºç«ç¹ï¼{taskDTO.dest_station.ToString()}"); } } else { if (taskinfo != null) { UpdateTaskStatus(taskinfo.TaskId, (int)TaskInStatusEnum.AGV_InExecuting); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"AGVå ¥åºæ§è¡ä¸"); return content = WebResponseContent.Instance.OK($"AGVå ¥åºæ§è¡ä¸ï¼èªå¨3001ï¼æ´æ°ç¶ææåï¼ä»»å¡å·ï¼{taskinfo.TaskId}"); } else { return content = WebResponseContent.Instance.Error($"AGVå ¥åºæ§è¡ä¸ï¼èªå¨3001ï¼æ´æ°ç¶ææ¶ï¼æ¥è¯¢ä¸å°ä»»å¡å·"); } } break; case 101://æåæºæå宿 if (taskinfo != null) { //æ´æ°ä»»å¡è¡¨ä¸NextAddressåæ®µä¸ºæ°çä»»å¡å· taskDTO.weight-æ§çä»»å¡å· taskDTO.task_id-æ°çä»»å¡å· UpdateTaskStatus(taskinfo.TaskId, taskDTO.task_id, (int)TaskInStatusEnum.AGV_InFinish); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"AGVæ¬è¿å®æ"); return content = WebResponseContent.Instance.OK($"AGVæ¬è¿å®æï¼101ï¼æ´æ°ç¶ææåï¼ä»»å¡å·ï¼{taskinfo.TaskId}"); } else { return content = WebResponseContent.Instance.Error($"AGVæ¬è¿å®æï¼101ï¼æ´æ°ç¶ææ¶ï¼æ¥è¯¢ä¸å°ä»»å¡å·"); } break; case 103://产åç§»åºï¼ç§»åºï¼åºåºï¼ task.TaskType= (int)TaskRelocationTypeEnum.Relocation; task.TaskState = (int)TaskOutStatusEnum.OutNew; task.Roadway = "SC01"; task.Grade = 1; break; case 102: if(taskDTO.dest_station ==1003)//空车åºåº æåä½-->è¾é线 { task.TaskType = (int)TaskOutboundTypeEnum.OutPick; task.TaskState = (int)TaskOutStatusEnum.OutNew; task.Roadway = "SC01"; task.Grade = 1; } else if(taskDTO.dest_station ==1001|| taskDTO.dest_station == 1002)//å¼å¸¸åºåº { task.TaskType = (int)TaskOutboundTypeEnum.OutInventory; task.TaskState = (int)TaskOutStatusEnum.OutNew; task.Roadway = "SC01"; task.Grade = 1; } if (locationdsc != null) { task.TargetAddress = locationdsc.LocationCode; } else { return content = WebResponseContent.Instance.Error($"WCSæªæ¥è¯¢å°ç®æ ç«ç¹å¯¹åºçåºä½ï¼ç®æ ç«ç¹ï¼{taskDTO.dest_station.ToString()}"); } break; case 104://ç»ç«æºä¸æ æåä½-->ç»ç«æº { task.TaskType = (int)TaskOtherTypeEnum.Feed; task.TaskState = (int)TaskOutStatusEnum.OutNew; task.Grade = 1; task.Remark = taskDTO.total.ToString()+"-"+taskDTO.startIndex.ToString();//忻屿°åå½å屿° //ä¸ä¼ä¼ ç»ç«æºä¸æç«ç¹ï¼åªä¼ä¼ æååºä½ï¼éæ ¹æ®æååºä½å»æ¥è´§ä½è¡¨ä¸çç»ç«æºç«ç¹åºä½å· Dt_LocationInfo locationtemp = _locationInfoRepository.QueryFirst(x => x.Row==taskDTO.src_rack&&x.Column==taskDTO.src_col&&x.Layer==taskDTO.src_row); if (locationtemp != null) { task.TargetAddress = locationtemp.Remark; } else { return content = WebResponseContent.Instance.Error($"WCSæªæ¥è¯¢å°ç®æ ç«ç¹å¯¹åºçåºä½ï¼ç®æ ç«ç¹ï¼{task.TargetAddress.ToString()}"); } //æ ¹æ®ç®æ å°åï¼ç»ç«æºï¼æ¥è¯¢é»è®¤çæ§è¡ä»»å¡çå°å åæºç¼å· Dt_LocationInfo locationtemp2 = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress.ToString()); if (locationtemp2 != null) { task.Roadway = locationtemp2.Remark.Trim();//ç¡®å®é»è®¤æ§è¡ä»»å¡çå°å åæºç¼å· } else { return content = WebResponseContent.Instance.Error($"WCSæªæ¥è¯¢å°ç»ç«æºå¯¹åºçé»è®¤å°å åæºé ç½®"); } } break; default: break; } task.TaskNum = taskDTO.task_id; task.PalletCode = taskDTO.CarId; task.Roadway = "SC01"; if (string.IsNullOrEmpty(task.SourceAddress))//妿䏿¯ç«ç¹ï¼ç´æ¥åè¡åå± { task.SourceAddress = $"SC01-{taskDTO.src_rack.ToString().PadLeft(3, '0')}-{taskDTO.src_col.ToString().PadLeft(3, '0')}-{taskDTO.src_row.ToString().PadLeft(3, '0')}"; } if(string.IsNullOrEmpty(task.TargetAddress))//妿䏿¯ç«ç¹ï¼ç´æ¥åè¡åå± { task.TargetAddress = $"SC01-{taskDTO.dest_rack.ToString().PadLeft(3, '0')}-{taskDTO.dest_col.ToString().PadLeft(3, '0')}-{taskDTO.dest_row.ToString().PadLeft(3, '0')}"; } task.Creater = "MES"; //å¤æè´§ä½ç¶æ Dt_LocationInfo srcLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress); Dt_LocationInfo tarLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress); if (srcLocation != null && tarLocation != null) { if (srcLocation.EnableStatus == (int)EnableStatusEnum.Disable) { return content = WebResponseContent.Instance.Error($"æºå°åå·²ç¦ç¨ï¼{srcLocation.LocationCode}"); } if (tarLocation.EnableStatus == (int)EnableStatusEnum.Disable) { return content = WebResponseContent.Instance.Error($"ç®æ å°åå·²ç¦ç¨ï¼{tarLocation.LocationCode}"); } if (taskDTO.cmd != 101)//å ¥åºæ¶ä¸éè¦å¤ææ¯å¦éå®ï¼éå®ç¶ææ¯å¨çæä»»å¡æ¶éå® { if (taskinfo != null && taskDTO.cmd==3001&&taskinfo.WMSId==1)//å¦ææ¯æå¨å ¥åºï¼å3001ï¼ä¼çæä»»å¡ï¼éè¦å¤æåºä½æ¯å¦éå®;èªå¨æ¨¡å¼å1001çæ¶åå°±çæäºä»»å¡ï¼åå3001å°±ä¸éè¦å¤ææ¯å¦éå®äº { if (srcLocation.LocationStatus == (int)LocationStatusEnum.Lock) { return content = WebResponseContent.Instance.Error($"æºå°åå·²éå®ï¼{srcLocation.LocationCode}"); } if (tarLocation.LocationStatus == (int)LocationStatusEnum.Lock) { return content = WebResponseContent.Instance.Error($"ç®æ å°åå·²éå®ï¼{tarLocation.LocationCode}"); } } } if (task.TaskType == (int)TaskInboundTypeEnum.Inbound)//å ¥åº è·¯å¾ï¼æåæºåºä½-->åºä½ { //WCSæ¥è¯¢åºä½ç¶ææ¯å¦ä¸ºâ空é²â并䏿ªç¦ç¨ï¼éå®åºä½ä¿®æ¹åºä½ç¶æä¸ºâéå®âï¼çæWCS产åå ¥åºä»»å¡ï¼å å ¥WCSä»»å¡éåä¸ã if (tarLocation.LocationStatus != (int)LocationStatusEnum.Free) { return content = WebResponseContent.Instance.Error($"å ¥åº-ç®æ å°å䏿¯ç©ºé²ç¶æï¼{tarLocation.LocationCode}"); } //srcLocation.LocationStatus = (int)LocationStatusEnum.Lock; tarLocation.LocationStatus = (int)LocationStatusEnum.Lock; //if (srcLocation.LocationStatus != (int)LocationStatusEnum.Free) //{ // return content = WebResponseContent.Instance.Error($"å ¥åº-æºå°å䏿¯ç©ºé²ç¶æï¼{srcLocation.LocationCode}"); //} } else if (task.TaskType == (int)TaskRelocationTypeEnum.Relocation) //产åç§»åºï¼ç§»åºï¼åºåºå ±ç¨ï¼ è·¯å¾ï¼åºä½-->åºä½/æååºä½ { //WCSæ¥è¯¢åºä½ç¶ææ¯å¦ä¸ºâæè´§âï¼åºä½/æååºä½æ¯å¦â空é²â if (srcLocation.LocationStatus != (int)LocationStatusEnum.InStock) { return content = WebResponseContent.Instance.Error($"ç§»åº-æºå°å䏿¯æè´§ç¶æï¼{srcLocation.LocationCode}"); } if(tarLocation.LocationStatus != (int)LocationStatusEnum.Free) { return content = WebResponseContent.Instance.Error($"ç§»åº-ç®æ å°å䏿¯ç©ºé²ç¶æï¼{srcLocation.LocationCode}"); } srcLocation.LocationStatus = (int)LocationStatusEnum.Lock; tarLocation.LocationStatus = (int)LocationStatusEnum.Lock; } else if (task.TaskType == (int)TaskOutboundTypeEnum.OutInventory) //å¼å¸¸åºåºï¼éåºï¼ è·¯å¾ï¼åºä½-->æåæºåºä½ { //WCSæ¥è¯¢åºä½ç¶ææ¯å¦ä¸ºâæè´§â if (srcLocation.LocationStatus != (int)LocationStatusEnum.InStock) { return content = WebResponseContent.Instance.Error($"å¼å¸¸åºåº-æºå°å䏿¯æè´§ç¶æï¼{srcLocation.LocationCode}"); } srcLocation.LocationStatus = (int)LocationStatusEnum.Lock; //tarLocation.LocationStatus = (int)LocationStatusEnum.Lock; //if (tarLocation.LocationStatus != (int)LocationStatusEnum.Free) //{ // return content = WebResponseContent.Instance.Error($"å¼å¸¸åºåº-ç®æ å°å䏿¯ç©ºé²ç¶æï¼{srcLocation.LocationCode}"); //} } else if (task.TaskType == (int)TaskOutboundTypeEnum.OutPick) //空车åºåº è·¯å¾ï¼æååºä½-->è¾é线 { //WCSæ¥è¯¢æååºä½æ¯å¦âæè´§â if (srcLocation.LocationStatus != (int)LocationStatusEnum.InStock) { return content = WebResponseContent.Instance.Error($"空车åºåº-æºå°å䏿¯æè´§ç¶æï¼{srcLocation.LocationCode}"); } //srcLocation.LocationStatus = (int)LocationStatusEnum.Lock; //tarLocation.LocationStatus = (int)LocationStatusEnum.Lock; //if (tarLocation.LocationStatus != (int)LocationStatusEnum.Free) //{ // return content = WebResponseContent.Instance.Error($"空车åºåº-ç®æ å°å䏿¯ç©ºé²ç¶æï¼{srcLocation.LocationCode}"); //} } else if (task.TaskType == (int)TaskOtherTypeEnum.Feed) //䏿 è·¯å¾ï¼æåä½-->ç»ç«æº { //WCSæ¥è¯¢æååºä½æ¯å¦âæè´§â if (srcLocation.LocationStatus != (int)LocationStatusEnum.InStock) { return content = WebResponseContent.Instance.Error($"䏿任å¡-æºå°å䏿¯æè´§ç¶æï¼{srcLocation.LocationCode}"); } //srcLocation.LocationStatus = (int)LocationStatusEnum.Lock; //tarLocation.LocationStatus = (int)LocationStatusEnum.Lock; } } else { return content = WebResponseContent.Instance.Error($"åºä½å°åä¸åå¨ï¼ä»»å¡å·:{task.TaskNum}"); } try { //å¼å¯äºç© _unitOfWorkManage.BeginTran(); _locationInfoRepository.UpdateData(tarLocation); _locationInfoRepository.UpdateData(srcLocation); BaseDal.AddData(task); Dt_Task tasktemp= BaseDal.QueryFirst(x => x.TaskNum ==task.TaskNum); _taskExecuteDetailService.AddTaskExecuteDetail(tasktemp.TaskId, "æ¥æ¶MESä»»å¡"); //æäº¤äºå¡ _unitOfWorkManage.CommitTran(); } catch (Exception) { _unitOfWorkManage.RollbackTran(); throw; } content = WebResponseContent.Instance.OK("æå",task); } catch (Exception ex) { content = WebResponseContent.Instance.Error($"任塿¥æ¶é误,é误信æ¯:{ex.Message}"); } return content; } /// <summary> /// æ ¹æ®æçå·ãèµ·å§å°ååWMS请æ±ä»»å¡ /// </summary> @@ -155,6 +476,8 @@ return content; } /// <summary> /// æ ¹æ®è®¾å¤ç¼å·ãå½åå°åæ¥è¯¢è¾éçº¿æªæ§è¡çä»»å¡ /// </summary> @@ -174,7 +497,8 @@ /// <returns></returns> public Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress) { return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy); //return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy); return null; } /// <summary> @@ -185,7 +509,8 @@ /// <returns></returns> public Dt_Task QueryCompletedConveyorLineTask(int taskNum, string currentAddress) { return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy); //return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy); return null; } /// <summary> @@ -196,28 +521,64 @@ /// <returns></returns> public Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null) { if(taskTypeGroup == null) return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); if(taskTypeGroup.Value == TaskTypeGroup.InboundGroup) return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy); if(taskTypeGroup.Value == TaskTypeGroup.OutbondGroup) return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); //if(taskTypeGroup == null) // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); //if(taskTypeGroup.Value == TaskTypeGroup.InboundGroup) // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy); //if(taskTypeGroup.Value == TaskTypeGroup.OutbondGroup) // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); return null; } /// <summary> /// æ ¹æ®è®¾å¤ç¼å·ãå½åå°åæç §ä¼å 级以åå建æ¶é´æåºæ¥è¯¢ä»»å¡æ± æ°å¢çä»»å¡ /// æ ¹æ®è®¾å¤ç¼å· æç §ä¼å 级以åå建æ¶é´æåºæ¥è¯¢ä»»å¡æ± æ°å¢çä»»å¡ /// </summary> /// <param name="deviceNo">设å¤ç¼å·</param> /// <param name="currentAddress">å½åå°å</param> /// <returns>è¿åä»»å¡å®ä½å¯¹è±¡ï¼å¯è½ä¸ºnull</returns> public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "") public Dt_Task QueryStackerCraneTask(string deviceNo) { if (string.IsNullOrEmpty(currentAddress)) return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); else return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.AGV_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew || TaskRelocationboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew || TaskOtherboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); } /// <summary> /// æ¥è¯¢å°å åæºä»»å¡ /// </summary> /// <returns></returns> public Dt_Task QueryStackerCraneTask() { return BaseDal.QueryFirst(x => (x.Roadway =="SC02"|| x.Roadway == "SC03")&& x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); } /// <summary> /// æ¥è¯¢å°å åæºåºåºå®æä»»å¡ /// </summary> /// <returns></returns> public Dt_Task QueryStackerCraneFinishTask() { return BaseDal.QueryFirst(x => (x.Roadway == "SC02" || x.Roadway == "SC03") && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish, TaskOrderBy); } /// <summary> /// æ¥è¯¢å ¥åºä»»å¡ 对åºWMSè¯·æ± 1001-AGVè¯·æ±æ¯å¦å 计è¿å ¥ /// </summary> /// <param name="deviceNo"></param> /// <returns></returns> public Dt_Task QueryStackerCraneTaskByAGVRequest(string deviceNo) { return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew), TaskOrderBy); } /// <summary> /// 对åºWMSè¯·æ± 3001-AGVæ¾è´§å®æ /// </summary> /// <param name="deviceNo"></param> /// <returns></returns> public Dt_Task QueryStackerCraneTaskByAGVPutFinish(string deviceNo) { return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.AGV_InExecuting), TaskOrderBy); } /// <summary> /// æ ¹æ®è®¾å¤ç¼å·ãå½åå°åæç §ä¼å 级以åå建æ¶é´æåºæ¥è¯¢ä»»å¡æ± å ¥åºç±»åçæ°å¢çä»»å¡ @@ -227,10 +588,11 @@ /// <returns>è¿åä»»å¡å®ä½å¯¹è±¡ï¼å¯è½ä¸ºnull</returns> public Dt_Task QueryStackerCraneInTask(string deviceNo, string currentAddress = "") { if (string.IsNullOrEmpty(currentAddress)) return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy); else return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.CurrentAddress == currentAddress, TaskOrderBy); //if (string.IsNullOrEmpty(currentAddress)) // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy); //else // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish && x.CurrentAddress == currentAddress, TaskOrderBy); return null; } /// <summary> @@ -296,13 +658,32 @@ /// <summary> /// æ´æ°ä»»å¡ç¶æä¿¡æ¯ï¼å¹¶åæ¥è³WMS /// </summary> /// <param name="taskNum">ä»»å¡å·</param> /// <param name="taskId">ä»»å¡ID</param> /// <param name="status">ä»»å¡ç¶æ</param> public void UpdateTaskStatus(int taskNum, int status) public void UpdateTaskStatus(int taskId, int status) { Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == taskId); if (task == null) return; task.TaskState = status; task.Modifier = "System"; task.ModifyDate = DateTime.Now; BaseDal.UpdateData(task); } /// <summary> /// æ´æ°ä»»å¡ç¶æä¿¡æ¯åæ°çä»»å¡å·ï¼1001ï¼3001æ¶ä¸æ ·ä»»å¡å·ï¼ /// </summary> /// <param name="taskId">ä»»å¡ID</param> /// <param name="newtaskId">WMSæ°(101)çä»»å¡å·</param> /// <param name="status">ä»»å¡ç¶æ</param> public void UpdateTaskStatus(int taskId,int newtaskId, int status) { Dt_Task task = BaseDal.QueryFirst(x => x.TaskId == taskId); if (task == null) return; task.TaskState = status; task.Modifier = "System"; task.NextAddress = newtaskId.ToString(); task.ModifyDate = DateTime.Now; BaseDal.UpdateData(task); } @@ -359,7 +740,7 @@ int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); task.TaskState = nextStatus; if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish) //if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish) { Random random = new Random(); task.CurrentAddress = task.NextAddress; @@ -440,55 +821,173 @@ Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); if (task == null) return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥ä»»å¡ä¿¡æ¯,ä»»å¡å·:ã{taskNum}ã"); //å¼å¸¸åºåºã空车åºåº ç»ç¹ä¸ä¸æ · 1,å¼å¸¸åºåºï¼éåºï¼ è·¯å¾ï¼åºä½-->æåæºåºä½ 2,空车åºåº è·¯å¾ï¼æååºä½-->è¾é线 if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) { List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress); if (!routers.Any()) return WebResponseContent.Instance.Error($"æªæ¾å°è®¾å¤è·¯ç±ä¿¡æ¯"); { try { Dt_LocationInfo srcLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress); srcLocation.LocationStatus = (int)LocationStatusEnum.Free; UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutFinish); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºåºåºå®æ"); int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>(); task.TaskState = nextStatus; task.CurrentAddress = task.NextAddress; task.NextAddress = routers.FirstOrDefault().ChildPosi; task.ModifyDate = DateTime.Now; task.Modifier = "System"; BaseDal.UpdateData(task); //å¼å¯äºç© _unitOfWorkManage.BeginTran(); UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.OutFinish); _locationInfoRepository.UpdateData(srcLocation); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"åºåºä»»å¡å®æ"); //æäº¤äºå¡ _unitOfWorkManage.CommitTran(); //åºåºå®æï¼åä¼ WMS //åä¼ å°WMS MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 6 }; MESResponse res = ApiInvoke.SendTaskCMD(sendcmd); if (res != null && res.code != 0) { content = WebResponseContent.Instance.Error($"大å åæºå®æåºåºä»»å¡ååä¼ MES失败ï¼,ä»»å¡å·:ã{taskNum}ã,失败信æ¯:ã{res.message}ã"); } _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºåºåºå®æ"); //todo 忥å°WMS } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content = WebResponseContent.Instance.Error($"大å åæºæ§è¡åºåºä»»å¡å¤±è´¥ï¼,ä»»å¡å·:ã{taskNum}ã,失败信æ¯:ã{ex.Message}ã"); } //æä¸èèå¤ä¸ªåºåºå£ } //å ¥åº è·¯å¾ï¼æåæºåºä½-->åºä½ else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting) { //todo int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); task.TaskState = nextStatus; task.ModifyDate = DateTime.Now; task.Modifier = "System"; BaseDal.UpdateData(task); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºå ¥åºå®æ"); WMSTaskDTO taskDTO = new WMSTaskDTO() try { TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), Grade = 1, PalletCode = task.PalletCode + "S", RoadWay = "SC01", SourceAddress = task.TargetAddress, TargetAddress = "CLOutAreaA", TaskState = (int)TaskOutStatusEnum.OutNew, Id = 0, TaskType = (int)TaskOutboundTypeEnum.Outbound }; Dt_LocationInfo tarLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress); tarLocation.LocationStatus = (int)LocationStatusEnum.InStock;//åºä½ç¶ææ´æ°ä¸ºæè´§ content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); UpdateTaskStatus(task.TaskId, (int)TaskInStatusEnum.SC_InFinish); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºå ¥åºå®æ"); //å¼å¯äºç© _unitOfWorkManage.BeginTran(); UpdateTaskStatus(task.TaskId, (int)TaskInStatusEnum.InFinish); _locationInfoRepository.UpdateData(tarLocation); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å ¥åºä»»å¡å®æ"); //æäº¤äºå¡ _unitOfWorkManage.CommitTran(); //å ¥åºå®æï¼åä¼ MES å ¥åºå®æåä¼ task.NextAddress ä¹å101è¯·æ±æ¶åçæ°ä»»å¡å· MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = int.Parse(task.NextAddress), status = 6 }; MESResponse res = ApiInvoke.SendTaskCMD(sendcmd); if (res != null && res.code != 0) { content = WebResponseContent.Instance.Error($"大å åæºå®æå ¥åºä»»å¡ååä¼ MES失败ï¼,ä»»å¡å·:ã{taskNum}ã,失败信æ¯:ã{res.message}ã"); } } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content = WebResponseContent.Instance.Error($"大å åæºæ§è¡å ¥åºä»»å¡å¤±è´¥ï¼,ä»»å¡å·:ã{taskNum}ã,失败信æ¯:ã{ex.Message}ã"); } } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup) //ç§»åºä»»å¡ï¼ç§»åºï¼åºåºå ±ç¨ï¼ è·¯å¾ï¼åºä½-->åºä½/æååºä½ else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) { //todo è°ç¨WMSç§»åºå®æ try { Dt_LocationInfo srcLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress); srcLocation.LocationStatus = (int)LocationStatusEnum.Free; Dt_LocationInfo tarLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress); srcLocation.LocationStatus = (int)LocationStatusEnum.InStock; UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutFinish); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºåºåºå®æ"); //å¼å¯äºç© _unitOfWorkManage.BeginTran(); UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.OutFinish); _locationInfoRepository.UpdateData(srcLocation); _locationInfoRepository.UpdateData(tarLocation); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"åºåºä»»å¡å®æ"); //æäº¤äºå¡ _unitOfWorkManage.CommitTran(); //ç§»åºå®æï¼åä¼ MES //åä¼ å°WMS MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 6 }; MESResponse res = ApiInvoke.SendTaskCMD(sendcmd); if (res != null && res.code != 0) { content = WebResponseContent.Instance.Error($"大å åæºå®æåºåºä»»å¡ååä¼ MES失败ï¼,ä»»å¡å·:ã{taskNum}ã,失败信æ¯:ã{res.message}ã"); } } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content = WebResponseContent.Instance.Error($"大å åæºæ§è¡åºåºä»»å¡å¤±è´¥ï¼,ä»»å¡å·:ã{taskNum}ã,失败信æ¯:ã{ex.Message}ã"); } } //䏿 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup) { try { Dt_LocationInfo srcLocation = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress); //srcLocation.LocationStatus = (int)LocationStatusEnum.Free; //å¼å¯äºç© _unitOfWorkManage.BeginTran(); UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutFinish); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºåºåºå®æ"); //UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.OutFinish); //_locationInfoRepository.UpdateData(srcLocation); //_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"åºåºä»»å¡å®æ"); //æäº¤äºå¡ _unitOfWorkManage.CommitTran(); //䏿宿ï¼åä¼ WMS MESSendCMD sendcmd = new MESSendCMD { cmd = 201, task_id = task.TaskNum, status = 6 }; MESResponse res = ApiInvoke.SendTaskCMD(sendcmd); if (res != null && res.code != 0) { content = WebResponseContent.Instance.Error($"å°å åæºå®æåºåºä»»å¡ååä¼ MES失败ï¼,ä»»å¡å·:ã{taskNum}ã,失败信æ¯:ã{res.message}ã"); } else { //夿æ¯å¦å®æçæåä¸å±ï¼èªå¨çæç©ºè½¦åºåºä»»å¡ string[] Levels = task.Remark.Split("-"); if (Levels.Length == 2) { if (!string.IsNullOrEmpty(Levels[0])&& !string.IsNullOrEmpty(Levels[1])) { //妿å½åæå屿°çäºæ»å±æï¼å表示æè½¦ææç屿°åå® if(Convert.ToInt16(Levels[0])== Convert.ToInt16(Levels[1])) { string[] SourceCodes = task.SourceAddress.Split("-"); string startPlan = ""; if (SourceCodes.Length == 4) { startPlan= "101"+ SourceCodes[2].Substring(1,2); } DeliveryPlan send = new DeliveryPlan { startPlan = startPlan, isQuit = false, CarId = task.PalletCode }; ApiInvoke.DeliveryPlanCMD(send);//åè°MESæ¥å£çæç©ºè½¦åºåºä»»å¡ } } } } } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content = WebResponseContent.Instance.Error($"å°å åæºæ§è¡åºåºä»»å¡å¤±è´¥ï¼,ä»»å¡å·:ã{taskNum}ã,失败信æ¯:ã{ex.Message}ã"); } } else @@ -594,5 +1093,8 @@ } return content; } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/WIDESEAWCS_TaskInfoService.csproj
@@ -8,6 +8,7 @@ <ItemGroup> <ProjectReference Include="..\WIDESEAWCS_BasicInfoService\WIDESEAWCS_BasicInfoService.csproj" /> <ProjectReference Include="..\WIDESEAWCS_IBasicRepository\WIDESEAWCS_IBasicRepository.csproj" /> <ProjectReference Include="..\WIDESEAWCS_ITaskInfoService\WIDESEAWCS_ITaskInfoService.csproj" /> </ItemGroup> ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -1,4 +1,5 @@ using Microsoft.AspNetCore.Components.Routing; using HslCommunication; using Microsoft.AspNetCore.Components.Routing; using Quartz; using System; using System.Collections.Generic; @@ -7,40 +8,48 @@ using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Communicator; using WIDESEAWCS_Core.Enums; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_IBasicRepository; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.DeviceBase; using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_QuartzJob.Models; using WIDESEAWCS_QuartzJob.Service; using WIDESEAWCS_QuartzJob.StackerCrane; using WIDESEAWCS_QuartzJob.StackerCrane.Enum; using WIDESEAWCS_TaskInfoService; using WIDESEAWCS_Tasks.StackerCraneJob; namespace WIDESEAWCS_Tasks { [DisallowConcurrentExecution] public class CommonStackerCraneJob : IJob public class CommonStackerCraneJob : JobBase, IJob { private readonly ITaskService _taskService; private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly ITaskRepository _taskRepository; private readonly IRouterService _routerService; private readonly ILocationInfoRepository _locationInfoRepository; public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService) public CommonStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, ILocationInfoRepository locationInfoRepository) { _taskService = taskService; _taskExecuteDetailService = taskExecuteDetailService; _taskRepository = taskRepository; _routerService = routerService; _locationInfoRepository = locationInfoRepository; } public Task Execute(IJobExecutionContext context) { CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams"); try { CommonStackerCrane commonStackerCrane = (CommonStackerCrane)context.JobDetail.JobDataMap.Get("JobParams"); { if (commonStackerCrane != null) { if (!commonStackerCrane.IsEventSubscribed) @@ -51,7 +60,7 @@ if (commonStackerCrane.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && commonStackerCrane.StackerCraneStatusValue == StackerCraneStatus.Normal) { commonStackerCrane.CheckStackerCraneTaskCompleted();//鲿¢ä»»å¡å®æäºä»¶çæµè¶ æ¶ï¼åæå¨è§¦å䏿¬¡ if (commonStackerCrane.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby) { Dt_Task? task = GetTask(commonStackerCrane); @@ -63,8 +72,22 @@ bool sendFlag = commonStackerCrane.SendCommand(stackerCraneTaskCommand); if (sendFlag) { commonStackerCrane.LastTaskType = task.TaskType; _taskService.UpdateTaskStatusToNext(task.TaskNum); if (task.TaskType == (int)TaskInboundTypeEnum.Inbound) { _taskService.UpdateTaskStatus(task.TaskId, (int)TaskInStatusEnum.SC_InExecuting); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºå ¥åºæ§è¡ä¸"); } else if(task.TaskType == (int)TaskOutboundTypeEnum.OutInventory|| task.TaskType == (int)TaskOutboundTypeEnum.OutPick|| task.TaskType == (int)TaskRelocationTypeEnum.Relocation) { _taskService.UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutExecuting); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºåºåºæ§è¡ä¸"); } } else { _taskService.UpdateTaskExceptionMessage(task.TaskNum, "å åæºæ§è¡ä»»å¡å½ä»¤å¤±è´¥ï¼"); WriteDebug(nameof(CommonStackerCraneJob), "å åæºæ§è¡ä»»å¡å½ä»¤å¤±è´¥ï¼"); } } } @@ -74,8 +97,154 @@ } catch (Exception ex) { Console.WriteLine(nameof(CommonStackerCraneJob) + ":" + ex.ToString()); WriteError(nameof(CommonStackerCraneJob), "大å åæºæ§è¡ä»»å¡å¼å¸¸ï¼",ex); } //æ¥è¯¢æåæº/ç»ç«æºä¿¡å· //Task.Run(delegate //{ try { if (commonStackerCrane != null) { Dt_Task? task1001 = _taskService.QueryStackerCraneTaskByAGVRequest("SC01"); if (task1001 != null) { //读åæåæºä¿¡å·ï¼ç¡®å®æ¯å¦å¯ä»¥è¿å ¥ int IsAllow = 0; if (task1001.SourceAddress == "SC01-002-000-001")//WMS 1001ç«ç¹ { IsAllow = commonStackerCrane.Communicator.Read<short>("DB2.0.0"); } else if (task1001.SourceAddress == "SC01-002-000-002")//WMS 1002ç«ç¹ { IsAllow = commonStackerCrane.Communicator.Read<short>("DB2.8.0"); } if (IsAllow == 1)//å¦æä¸º1ï¼åå 计AGVè¿å ¥ï¼åä¼ WMS { MESSendCMD sendcmd = new MESSendCMD { cmd = 2001, task_id = task1001.TaskNum, status = 6 }; MESResponse res = ApiInvoke.SendTaskCMD(sendcmd); if (res != null && res.code != 0) { WriteDebug(nameof(CommonStackerCraneJob), $"æåæºæå宿ï¼åä¼ WMS失败ï¼ä»»å¡å·{task1001.TaskNum}"); } } } Dt_Task? task3001 = _taskService.QueryStackerCraneTaskByAGVPutFinish("SC01"); if (task3001 != null) { int IsFinish = 0; int IsWriteOne = 0; int IsWriteTwo = 0; if (task3001.SourceAddress == "SC01-002-000-001")//WMS 1001ç«ç¹ { //åå ¥æåä¿¡æ¯ IsWriteOne = commonStackerCrane.Communicator.Read<short>("DB1.0.0"); if(IsWriteOne == 0) { commonStackerCrane.Communicator.Write<short>("DB1.0.0", 1); } //读åæåæºä¿¡å·ï¼ç¡®å®æ¯å¦æå宿 commonStackerCrane.Communicator.Read<short>("DB2.2.0"); } else if (task3001.SourceAddress == "SC01-002-000-002")//WMS 1002ç«ç¹ { //åå ¥æåä¿¡æ¯ IsWriteTwo = commonStackerCrane.Communicator.Read<short>("DB1.6.0"); if (IsWriteTwo == 0) { commonStackerCrane.Communicator.Write<short>("DB1.6.0", 1); } //读åæåæºä¿¡å·ï¼ç¡®å®æ¯å¦æå宿 IsFinish = commonStackerCrane.Communicator.Read<short>("DB2.10.0"); } if (IsFinish == 1)//å¦æä¸º1ï¼å表示æå宿ï¼åä¼ WMS { MESSendCMD sendcmd = new MESSendCMD { cmd = 2002, task_id = task3001.TaskNum, status = 6 }; MESResponse res = ApiInvoke.SendTaskCMD(sendcmd); if (res != null && res.code != 0) { WriteDebug(nameof(CommonStackerCraneJob), $"æåæºæå宿ï¼åä¼ WMS失败ï¼ä»»å¡å·{task3001.TaskNum}"); } } } //å°å åæºåºåºå®æä»»å¡ Dt_Task? taskSmall = _taskService.QueryStackerCraneFinishTask(); if(taskSmall != null) { //æ ¹æ®ä»»å¡æºå°åç¡®å®åå ¥PLCä½ç½® Depth Dt_LocationInfo location = _locationInfoRepository.QueryFirst(x=>x.LocationCode==taskSmall.SourceAddress); if(location != null) { string[] Levels = taskSmall.Remark.Split("-"); if (Levels.Length == 2) { if (!string.IsNullOrEmpty(Levels[0]) && !string.IsNullOrEmpty(Levels[1])) { int level = Convert.ToInt16(Levels[0]) - Convert.ToInt16(Levels[1]); //å©ä½å±æ°åå ¥ bool issuccess = commonStackerCrane.Communicator.Write<short>("DB28." + location.Depth + ".0", Convert.ToInt16(level)); //妿å½åæå屿°çäºæ»å±æ°ï¼å表示æè½¦ææç屿°åå® if (level == 0) { //æºå°åï¼æåä½ï¼å¯¹åºçç®æ å°åï¼ç»ç«æºï¼location.Remark if (!string.IsNullOrEmpty(location.Remark)) { //æ ¹æ®ç®æ å°åæ¥è¯¢ç»ç«æºç«ç¹ä¿¡æ¯ï¼è·ååå ¥æ´è½¦å®æçDBå Depth Dt_LocationInfo location2 = _locationInfoRepository.QueryFirst(x => x.LocationCode == location.Remark); //æ´è½¦å®æåå ¥ bool issuccess2 = commonStackerCrane.Communicator.Write<short>("DB28." + location.Depth+".0", 1); if (issuccess2&&issuccess) { _taskService.UpdateTaskStatus(taskSmall.TaskId, (int)TaskOutStatusEnum.OutFinish); _taskExecuteDetailService.AddTaskExecuteDetail(taskSmall.TaskId, $"åºåºä»»å¡å®æ"); } else { WriteDebug(nameof(CommonStackerCraneJob), $"æ´è½¦å®æä¿¡å·åå ¥å¤±è´¥ï¼ä»»å¡å·{taskSmall.TaskNum}"); } } } else { if (issuccess) { _taskService.UpdateTaskStatus(taskSmall.TaskId, (int)TaskOutStatusEnum.OutFinish); _taskExecuteDetailService.AddTaskExecuteDetail(taskSmall.TaskId, $"åºåºä»»å¡å®æ"); } else { WriteDebug(nameof(CommonStackerCraneJob), $"å©ä½å±æ°ä¿¡å·åå ¥å¤±è´¥ï¼ä»»å¡å·{taskSmall.TaskNum}"); } } } } } } } } catch (Exception ex) { WriteError(nameof(CommonStackerCraneJob), "æ¥è¯¢æåå ¥PLCç¶æå¤±è´¥ï¼", ex); } //}); return Task.CompletedTask; } @@ -106,47 +275,7 @@ private Dt_Task? GetTask(CommonStackerCrane commonStackerCrane) { Dt_Task task; if (commonStackerCrane.LastTaskType == null) { task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode); } else { if (commonStackerCrane.LastTaskType.GetValueOrDefault().GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode); if (task == null) { task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode); } } else { task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode); } } if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { if (OutTaskStationIsOccupied(task) != null) { return task; } else { List<string> otherOutStaionCodes = _routerService.QueryNextRoutes(commonStackerCrane.DeviceCode, task.NextAddress).Select(x => x.ChildPosi).ToList(); List<Dt_Task> tasks = _taskService.QueryStackerCraneOutTasks(commonStackerCrane.DeviceCode, otherOutStaionCodes); foreach (var item in tasks) { if (OutTaskStationIsOccupied(task) != null) { return task; } } task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode); } } task = _taskService.QueryStackerCraneTask(commonStackerCrane.DeviceCode); return task; } @@ -195,94 +324,35 @@ stackerCraneTaskCommand.TaskNum = task.TaskNum; stackerCraneTaskCommand.WorkType = 1; stackerCraneTaskCommand.TrayType = 0; if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//夿æ¯å¦æ¯å ¥åºä»»å¡ string[] SourceCodes = task.SourceAddress.Split("-"); if (SourceCodes.Length == 4) { List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.Roadway); if (routers.Count > 0) { stackerCraneTaskCommand.StartRow = Convert.ToInt16(routers.FirstOrDefault().SrmRow); stackerCraneTaskCommand.StartColumn = Convert.ToInt16(routers.FirstOrDefault().SrmColumn); stackerCraneTaskCommand.StartLayer = Convert.ToInt16(routers.FirstOrDefault().SrmLayer); string[] targetCodes = task.NextAddress.Split("-"); if (targetCodes.Length == 3) { stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]); stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]); stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]); } else { //æ°æ®é ç½®é误 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"å ¥åºä»»å¡ç»ç¹é误ï¼èµ·ç¹ï¼ã{task.NextAddress}ã"); return null; } } else { _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"æªæ¾å°ç«å°ã{task.NextAddress}ãä¿¡æ¯ï¼æ æ³è·å对åºçå åæºåè´§ç«å°ä¿¡æ¯"); return null; } stackerCraneTaskCommand.StartRow = Convert.ToInt16(SourceCodes[1]); stackerCraneTaskCommand.StartColumn = Convert.ToInt16(SourceCodes[2]); stackerCraneTaskCommand.StartLayer = Convert.ToInt16(SourceCodes[3]); } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) else { List<Dt_Router> routers = _routerService.QueryNextRoutes(task.Roadway, task.TargetAddress); if (routers.Count > 0) { stackerCraneTaskCommand.EndRow = Convert.ToInt16(routers.FirstOrDefault().SrmRow); stackerCraneTaskCommand.EndColumn = Convert.ToInt16(routers.FirstOrDefault().SrmColumn); stackerCraneTaskCommand.EndLayer = Convert.ToInt16(routers.FirstOrDefault().SrmLayer); string[] sourceCodes = task.CurrentAddress.Split("-"); if (sourceCodes.Length == 3) { stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]); stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]); stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]); } else { //æ°æ®é ç½®é误 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"åºåºä»»å¡èµ·ç¹é误ï¼èµ·ç¹ï¼ã{task.CurrentAddress}ã"); return null; } } else { _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"æªæ¾å°ç«å°ã{task.NextAddress}ãä¿¡æ¯ï¼æ æ³è·å对åºçå åæºæ¾è´§ç«å°ä¿¡æ¯"); return null; } //æ°æ®é ç½®é误 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任塿ºå°åé ç½®é误ï¼"); return null; } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup) string[] targetCodes = task.TargetAddress.Split("-"); if (targetCodes.Length == 4) { string[] targetCodes = task.NextAddress.Split("-"); if (targetCodes.Length == 3) { stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[0]); stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[1]); stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[2]); } else { //æ°æ®é ç½®é误 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"ç§»åºä»»å¡ç»ç¹é误ï¼èµ·ç¹ï¼ã{task.NextAddress}ã"); return null; } string[] sourceCodes = task.CurrentAddress.Split("-"); if (sourceCodes.Length == 3) { stackerCraneTaskCommand.StartRow = Convert.ToInt16(sourceCodes[0]); stackerCraneTaskCommand.StartColumn = Convert.ToInt16(sourceCodes[1]); stackerCraneTaskCommand.StartLayer = Convert.ToInt16(sourceCodes[2]); } else { //æ°æ®é ç½®é误 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"ç§»åºä»»å¡èµ·ç¹é误ï¼èµ·ç¹ï¼ã{task.CurrentAddress}ã"); return null; } stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]); stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]); stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]); } else { //æ°æ®é ç½®é误 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"ä»»å¡ç®æ å°åé ç½®é误"); return null; } return stackerCraneTaskCommand; } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/DoubleStackerCraneJob.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,303 @@ using HslCommunication; using Microsoft.AspNetCore.Components.Routing; using Quartz; using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Communicator; using WIDESEAWCS_Core.Enums; using WIDESEAWCS_IBasicRepository; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.DeviceBase; using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_QuartzJob.Models; using WIDESEAWCS_QuartzJob.Repository; using WIDESEAWCS_QuartzJob.Service; using WIDESEAWCS_QuartzJob.StackerCrane; using WIDESEAWCS_QuartzJob.StackerCrane.Enum; using WIDESEAWCS_TaskInfoService; using WIDESEAWCS_Tasks.StackerCraneJob; namespace WIDESEAWCS_Tasks { [DisallowConcurrentExecution] public class DoubleStackerCraneJob : JobBase, IJob { private readonly ITaskService _taskService; private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly ITaskRepository _taskRepository; private readonly IRouterService _routerService; private readonly IDeviceInfoService _deviceInfoService; private readonly IDeviceInfoRepository _deviceInfoRepository; private readonly ILocationInfoRepository _locationInfoRepository; public DoubleStackerCraneJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService, IDeviceInfoService deviceInfoService, IDeviceInfoRepository deviceInfoRepository, ILocationInfoRepository locationInfoRepository) { _taskService = taskService; _taskExecuteDetailService = taskExecuteDetailService; _taskRepository = taskRepository; _routerService = routerService; _deviceInfoService = deviceInfoService; _deviceInfoRepository = deviceInfoRepository; _locationInfoRepository = locationInfoRepository; } public Task Execute(IJobExecutionContext context) { try { CommonStackerCrane? stackerCraneOne = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC02") as CommonStackerCrane; CommonStackerCrane? stackerCraneTwo = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "SC03") as CommonStackerCrane; Dt_DeviceInfo deviceSC02= _deviceInfoRepository.QueryFirst(x => x.DeviceCode == "SC02"); Dt_DeviceInfo deviceSC03 = _deviceInfoRepository.QueryFirst(x => x.DeviceCode == "SC03"); if(deviceSC02.DeviceStatus=="0") { stackerCraneOne = null; } if(deviceSC03.DeviceStatus=="0") { stackerCraneTwo = null; } Dt_Task? task = GetTask(); if (task != null) { CommonStackerCrane? StackerCrane= GetStrackerCrane(task, stackerCraneOne, stackerCraneTwo); if(StackerCrane != null) { StackerCraneTaskCommand? stackerCraneTaskCommand = ConvertToStackerCraneTaskCommand(task); if (stackerCraneTaskCommand != null) { bool sendFlag = StackerCrane.SendCommand(stackerCraneTaskCommand); ; if (sendFlag) { _taskService.UpdateTaskStatus(task.TaskId, (int)TaskOutStatusEnum.SC_OutExecuting); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºåºåºæ§è¡ä¸"); } else { _taskService.UpdateTaskExceptionMessage(task.TaskNum, "å åæºæ§è¡ä»»å¡å½ä»¤å¤±è´¥ï¼"); WriteDebug(nameof(CommonStackerCraneJob), "å åæºæ§è¡ä»»å¡å½ä»¤å¤±è´¥ï¼"); } } } else { WriteDebug(nameof(CommonStackerCraneJob), "æªæ¥è¯¢å°å½åå¯ä»¥æ§è¡ä¸æä»»å¡çå°å åæºï¼"); } } } catch (Exception ex) { WriteError(nameof(CommonStackerCraneJob), "å°å åæºæ§è¡ä»»å¡å¼å¸¸ï¼", ex); } return Task.CompletedTask; } /// <summary> /// ä»»å¡å®æäºä»¶è®¢é çæ¹æ³ /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CommonStackerCrane_StackerCraneTaskCompletedEventHandler(object? sender, WIDESEAWCS_QuartzJob.StackerCrane.StackerCraneTaskCompletedEventArgs e) { CommonStackerCrane? commonStackerCrane = sender as CommonStackerCrane; if (commonStackerCrane != null) { if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5) { Console.Out.WriteLine("TaskCompleted" + e.TaskNum); _taskService.StackCraneTaskCompleted(e.TaskNum); commonStackerCrane.SetValue(StackerCraneDBName.WorkType, 5); } } } /// <summary> /// è·åä»»å¡ /// </summary> /// <param name="commonStackerCrane">å åæºå¯¹è±¡</param> /// <returns></returns> private Dt_Task? GetTask() { Dt_Task task; task = _taskService.QueryStackerCraneTask(); return task; } /// <summary> /// æ¥è¯¢ä¸æçå åæº,å æ¥è¯¢é»è®¤å åæºï¼å¦æä¸æ£å¸¸ï¼åæ¥è¯¢å¦å¤ä¸å°å åæºï¼å¦æé½ä¸æ£å¸¸è¿ånull /// </summary> /// <returns></returns> private CommonStackerCrane? GetStrackerCrane(Dt_Task task, CommonStackerCrane stackerCraneOne, CommonStackerCrane stackerCraneTwo) { if(task.Roadway=="SC02") { if (stackerCraneOne != null) { if (!stackerCraneOne.IsEventSubscribed) { stackerCraneOne.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订é ä»»å¡å®æäºä»¶ } if (stackerCraneOne.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && stackerCraneOne.StackerCraneStatusValue == StackerCraneStatus.Normal) { stackerCraneOne.CheckStackerCraneTaskCompleted();//鲿¢ä»»å¡å®æäºä»¶çæµè¶ æ¶ï¼åæå¨è§¦å䏿¬¡ if (stackerCraneOne.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby) { return stackerCraneOne; } } else//ä¸è½æ£å¸¸å·¥ä½ç¶æ { if (stackerCraneTwo != null) { if (!stackerCraneTwo.IsEventSubscribed) { stackerCraneTwo.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订é ä»»å¡å®æäºä»¶ } if (stackerCraneTwo.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && stackerCraneTwo.StackerCraneStatusValue == StackerCraneStatus.Normal) { stackerCraneTwo.CheckStackerCraneTaskCompleted();//鲿¢ä»»å¡å®æäºä»¶çæµè¶ æ¶ï¼åæå¨è§¦å䏿¬¡ if (stackerCraneTwo.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby) { return stackerCraneTwo; } } } } } } else if (task.Roadway=="SC03") { if (stackerCraneTwo != null) { if (!stackerCraneTwo.IsEventSubscribed) { stackerCraneTwo.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订é ä»»å¡å®æäºä»¶ } if (stackerCraneTwo.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && stackerCraneOne.StackerCraneStatusValue == StackerCraneStatus.Normal) { stackerCraneTwo.CheckStackerCraneTaskCompleted();//鲿¢ä»»å¡å®æäºä»¶çæµè¶ æ¶ï¼åæå¨è§¦å䏿¬¡ if (stackerCraneTwo.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby) { return stackerCraneTwo; } } else { if (stackerCraneOne != null) { if (!stackerCraneOne.IsEventSubscribed) { stackerCraneOne.StackerCraneTaskCompletedEventHandler += CommonStackerCrane_StackerCraneTaskCompletedEventHandler;//订é ä»»å¡å®æäºä»¶ } if (stackerCraneOne.StackerCraneAutoStatusValue == StackerCraneAutoStatus.Automatic && stackerCraneTwo.StackerCraneStatusValue == StackerCraneStatus.Normal) { stackerCraneOne.CheckStackerCraneTaskCompleted();//鲿¢ä»»å¡å®æäºä»¶çæµè¶ æ¶ï¼åæå¨è§¦å䏿¬¡ if (stackerCraneOne.StackerCraneWorkStatusValue == StackerCraneWorkStatus.Standby) { return stackerCraneOne; } } } } } } return null; } /// <summary> /// ä»»å¡å®ä½è½¬æ¢æå½ä»¤Model /// </summary> /// <param name="task">ä»»å¡å®ä½</param> /// <returns></returns> /// <exception cref="Exception"></exception> public StackerCraneTaskCommand? ConvertToStackerCraneTaskCommand([NotNull] Dt_Task task) { StackerCraneTaskCommand stackerCraneTaskCommand = new StackerCraneTaskCommand(); stackerCraneTaskCommand.Barcode = task.PalletCode; stackerCraneTaskCommand.TaskNum = task.TaskNum; stackerCraneTaskCommand.WorkType = 1; if(string.IsNullOrEmpty(task.Remark))//æ»å±æ°å屿°æ¯å¦ä¸ºç©º { return null; } string[] Levels = task.Remark.Split("-"); if (Levels.Length == 2) { //æçç±»å 1:9å± 2:4å± if (!string.IsNullOrEmpty(Levels[0])) { if (Levels[0].ToString()=="9") { stackerCraneTaskCommand.TrayType = 1; } else { stackerCraneTaskCommand.TrayType = 2; } } //æè½¦å ·ä½ç屿° if (!string.IsNullOrEmpty(Levels[1])) { stackerCraneTaskCommand.StartLayer =Convert.ToInt16(Levels[1]); } } else { return null; } string[] SourceCodes = task.SourceAddress.Split("-"); if (SourceCodes.Length == 4) { stackerCraneTaskCommand.StartRow = Convert.ToInt16(SourceCodes[1]); stackerCraneTaskCommand.StartColumn = Convert.ToInt16(SourceCodes[2]); // stackerCraneTaskCommand.StartLayer = Convert.ToInt16(SourceCodes[3]); } else { //æ°æ®é ç½®é误 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任塿ºå°åé ç½®é误ï¼"); return null; } string[] targetCodes = task.TargetAddress.Split("-"); if (targetCodes.Length == 4) { stackerCraneTaskCommand.EndRow = Convert.ToInt16(targetCodes[1]); stackerCraneTaskCommand.EndColumn = Convert.ToInt16(targetCodes[2]); stackerCraneTaskCommand.EndLayer = Convert.ToInt16(targetCodes[3]); } else { //æ°æ®é ç½®é误 _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"ä»»å¡ç®æ å°åé ç½®é误"); return null; } return stackerCraneTaskCommand; } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/WIDESEAWCS_Tasks.csproj
@@ -7,7 +7,7 @@ </PropertyGroup> <ItemGroup> <PackageReference Include="WIDESEAWCS_QuartzJob" Version="2.0.4" /> <PackageReference Include="WIDESEAWCS_QuartzJob" Version="2.1.0" /> </ItemGroup> <ItemGroup> ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/PLCµØÖ·.png
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/Èë¿âÉú³ÉÈÎÎñ±¨ÎÄ.txt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ { "cmd": 101, "task_id": 7871, "src_rack": 2, "src_col": 0, "src_row": 1, "dest_rack": 2, "dest_col": 5, "dest_row": 3, "src_station": 0, "dest_station": 0, "size": 0, "weight": 0, "barcode": "", "startIndex": 0, "total": 9, "carId": "8044", "status": 2 } ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/¶Ñ¶â»úͨÐÅÐÒé.xlsxBinary files differ
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/¿âλ.png
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/Òì³£³ö¿âÉú³ÉÈÎÎñ±¨ÎÄ.txt
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ { "cmd": 102, "task_id": 7872, "src_rack": 2, "src_col": 5, "src_row": 2, "dest_rack":0 , "dest_col":0 , "dest_row":0 , "src_station": 0, "dest_station": 1001, "size": 0, "weight": 0, "barcode": "", "startIndex": 0, "total": 9, "carId": "8044", "status": 2 } ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/ÖÇ»ãÆæ²ß¹ùµê¼âɽÏîĿͨÇåµ¥1031.xlsBinary files differ
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/Á÷³Ìͼ1.png
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/Á÷³Ìͼ2.png
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/Á÷³Ì˵Ã÷.docBinary files differ
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/×éÁ¢»úÉÏÁÏÊ£Óà²ãÊý»ØÐ´£¨DB28£©.png
ÏîÄ¿×ÊÁÏ/ÏîĿͼֽ/¹ùµêÏîĿʵʩ¹¤×÷°²Åż°½ø¶È¹ÜÀí±í-µÚ1ÖÜ-2024.11.13.xlsxBinary files differ