From c3877b2ebec19f473f45e8c2245926f65d2a3948 Mon Sep 17 00:00:00 2001 From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com> Date: 星期三, 10 九月 2025 09:26:23 +0800 Subject: [PATCH] 代码提交 --- 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageSocketServices/SocketClientService.cs | 1586 +++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 1,076 insertions(+), 510 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageSocketServices/SocketClientService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageSocketServices/SocketClientService.cs" index 8caa053..9ae7a23 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageSocketServices/SocketClientService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageSocketServices/SocketClientService.cs" @@ -22,6 +22,16 @@ using WIDESEA_Core.BaseRepository; using AutoMapper; using Mapster; +using AngleSharp.Dom; +using Masuit.Tools.Security; +using WIDESEA_IStorageTaskServices; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using WIDESEA_IBusinessesRepository; +using WIDESEA_Repository; +using static MailKit.Telemetry; +using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; +using System.Runtime.InteropServices; namespace WIDESEA_StorageSocketServices { @@ -32,25 +42,32 @@ const byte ETX = 3; private readonly ILogger<SocketClientService> _logger; private readonly LogFactory LogFactory = new LogFactory(); - //private readonly IDt_TaskService _taskService; private readonly IDt_StationManagerRepository _stationManagerRepository; private readonly IDt_TaskRepository BaseDal; Connection connection = AppSettings.Configuration.GetSection("Connection").Get<Connection>(); string url = AppSettings.Configuration["AGVIP"]; - private readonly IUnitOfWorkManage _unitOfWorkManage; - private readonly IStockInfoRepository _stockInfoRepository; - private readonly IDt_Task_HtyRepository _task_HtyRepository; - private readonly IMapper _mapper; - private readonly ILocationInfoRepository _locationRepository; + private readonly IDt_TaskService _taskService; + private readonly IDt_HostLogRepository _hostLogRepository; + private bool _IsOnline = false; + public DateTime Time { get; set; } = DateTime.Now; + private static int _currentNumber = 0; + private static readonly object _lock = new object(); - public SocketClientService(IDt_TaskRepository TaskRepository, IDt_StationManagerRepository stationManagerRepository, ILogger<SocketClientService> logger) + public SocketClientService(IDt_TaskService TaskService, IDt_TaskRepository TaskRepository, IDt_StationManagerRepository stationManagerRepository, ILogger<SocketClientService> logger, IDt_HostLogRepository hostLogRepository) { BaseDal = TaskRepository; _stationManagerRepository = stationManagerRepository; _logger = logger; + _taskService = TaskService; + _hostLogRepository = hostLogRepository; } + /// <summary> + /// Socket杩炴帴 + /// </summary> + /// <param name="IP"></param> + /// <param name="Port"></param> public void ConnectServer(string IP, int Port) { try @@ -58,12 +75,12 @@ // 妫�鏌ユ槸鍚﹀凡杩炴帴锛岄伩鍏嶉噸澶嶅垱寤� if (socket != null && socket.Connected) { - //Console.WriteLine("Socket宸茶繛鎺ワ紝鏃犻渶閲嶅鍒涘缓"); - ConsoleHelper.WriteErrorLine($"Socket宸插浜庤繛鎺ョ姸鎬�"); + //ConsoleHelper.WriteErrorLine($"Socket宸插浜庤繛鎺ョ姸鎬�"); return; } + //鍒涘缓璐熻矗閫氫俊鐨剆ocket - socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + socket = new System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress.Parse(IP); IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(Port)); @@ -73,24 +90,41 @@ _logger.LogInformation("Socket杩炴帴鎴愬姛"); ConsoleHelper.WriteSuccessLine("Socket杩炴帴鎴愬姛"); + DeleteHostLog(910); + + _IsOnline = true; RequestCommunication(); - DeviceStateReport("I"); + AGVStatusRespone status = GetAGVStatus(); + + DeviceStateReport(GetAGVStatus(status.RuntimeStatus)); //寮�鍚竴涓柊鐨勭嚎绋嬩笉鍋滅殑鎺ユ敹鏈嶅姟绔彂鏉ョ殑淇℃伅 Thread th = new Thread(Receive); th.IsBackground = true; th.Start(); - ConsoleHelper.WriteErrorLine($"Socket鍚姩"); return; } catch (Exception ex) { + _IsOnline = false; ConsoleHelper.WriteErrorLine($"Socket杩炴帴澶辫触{ex.Message}"); + LogFactory.GetLog("Socket杩炴帴寮傚父").Error(true, $"Socket杩炴帴澶辫触{ex.Message}{ex.StackTrace}"); HandleDisconnection(); } } + + + public bool Socketonline() + { + return _IsOnline; + } + + /// <summary> + /// 绾跨▼璇诲彇鏁版嵁 + /// </summary> void Receive() { + Time = DateTime.Now; while (true) { try @@ -121,6 +155,7 @@ var str = Encoding.UTF8.GetString(newArray); string receivedChecksum = str.Substring(str.Length - 2); + LogFactory.GetLog("鎺ユ敹Socket鏁版嵁").Info(true, $"{JsonConvert.SerializeObject(GetParse(str))}{Environment.NewLine}"); if (calculatedChecksum == receivedChecksum) { var x = Encoding.UTF8.GetString(newArray); @@ -136,22 +171,29 @@ } else { - LogFactory.GetLog("Socket鎺ユ敹鏁版嵁").Error(true, "鏍¢獙澶辫触"); + CheckSum("3"); + LogFactory.GetLog("Socket鎺ユ敹鏁版嵁").Error(true, $"CheckSum鏍¢獙澶辫触,瑙f瀽{calculatedChecksum}銆佽鍙杮receivedChecksum}鏁版嵁{JsonConvert.SerializeObject(GetParse(str))}"); } } else { - LogFactory.GetLog("Socket鎺ユ敹鏁版嵁").Error(true, $"鏃犳晥鎶ユ枃鏍煎紡:{JsonConvert.SerializeObject(Y)}"); + LogFactory.GetLog("Socket鎺ユ敹鏁版嵁").Error(true, $"鏃犳晥鎶ユ枃鏍煎紡:{JsonConvert.SerializeObject(Y)}{Environment.NewLine}"); } } catch { + _IsOnline = false; HandleDisconnection(); - } } } + + /// <summary> + /// 浣滀笟JobType + /// </summary> + /// <param name="cmdId"></param> + /// <param name="x"></param> private void ProcessCommand(string cmdId, string x) { switch (cmdId) @@ -160,10 +202,10 @@ ReceiveCommandResponse(x); break; case "906": - AGVJobStartOrEndResponse(x.Substring(21, 1), x.Substring(22, 1)); + AGVJobStartOrEndResponse(x.Substring(20, 1), x.Substring(21, 1)); break; case "902": - DataReportResponse(x.Substring(21, 1)); + DataReportResponse(x.Substring(20, 1)); break; case "935": DeviceStationStatusInvite(x.Substring(15, 5)); @@ -175,22 +217,63 @@ RecreateGetLocation(x); break; case "108": - RecreateGetLocation(x.Substring(21, 1)); + EmptyOutBoundResponse(x.Substring(20, 1)); break; case "909": DeviceStatusReportRequest(); break; + case "987": + FireAlarm(x.Substring(21, 6), x.Substring(15, 5)); + break; + case "301": + UpdateLocalTime(x.Substring(30), x.Substring(15, 5)); + break; + case "918": + break; default: + CheckSum("1"); break; } } - private void HandleDisconnection() + #region + //private void HandleDisconnection() + //{ + // int attempts = 100; + // do + // { + // string message = "杩炴帴宸叉柇寮�..." + '\n'; + // message += "绛夊緟5绉掑悗閲嶆柊杩炴帴" + '\n'; + // Console.WriteLine(message); + + // // 鍏抽棴褰撳墠杩炴帴 + // try + // { + // socket?.Close(); + // } + // catch { } + + // // 绛夊緟5绉� + // Thread.Sleep(5000); + + // // 灏濊瘯閲嶆柊杩炴帴 + // ConnectServer(connection.IP, connection.Port); + // attempts--; + // } while (!socket.Connected && attempts > 0); + //} + #endregion + + /// <summary> + /// 閲嶈繛 + /// </summary> + public void HandleDisconnection() { - int attempts = 5; - do + int maxAttempts = 10; // 鏈�澶у皾璇曟鏁� + int currentAttempts = 0; + + while (currentAttempts < maxAttempts) { - string message = "杩炴帴宸叉柇寮�..." + '\n'; + string message = "涓嶩ost绯荤粺杩炴帴宸叉柇寮�..." + '\n'; message += "绛夊緟5绉掑悗閲嶆柊杩炴帴" + '\n'; Console.WriteLine(message); @@ -206,32 +289,51 @@ // 灏濊瘯閲嶆柊杩炴帴 ConnectServer(connection.IP, connection.Port); - attempts--; - } while (!socket.Connected && attempts > 0); + currentAttempts++; + + // 妫�鏌ユ槸鍚﹀凡杩炴帴 + if (socket?.Connected ?? false) + { + break; // 杩炴帴鎴愬姛锛岄��鍑哄惊鐜� + } + } + + if (currentAttempts >= maxAttempts) + { + Console.WriteLine("宸茶揪鍒版渶澶ч噸杩炴鏁帮紝鍋滄閲嶈繛銆�"); + // 鍙互鍦ㄨ繖閲岃繘琛屽叾浠栧鐞嗭紝渚嬪閫氱煡鐢ㄦ埛鎴栬褰曟棩蹇� + } } - //private void CheckTimeout(object state) - //{ - // TimeSpan elapsed = DateTime.Now - _lastActivityTime; - // if (elapsed.TotalSeconds > 180) // 3鍒嗛挓瓒呮椂 - // { - // Console.WriteLine("瓒呮椂鏈敹鍒版暟鎹紝瑙﹀彂909鍛戒护骞跺皾璇曢噸鏂拌繛鎺�..."); - - // // 瑙﹀彂909鍛戒护 - // _workTaskService.DeviceStatusReportRequest(); - - // // 灏濊瘯閲嶆柊杩炴帴 - // HandleDisconnection(); - // } - //} - + /// <summary> + /// 涓嬪彂 + /// </summary> + /// <param name="buffer"></param> public void clientSend(byte[] buffer) { - var Y = Encoding.UTF8.GetString(buffer); - LogFactory.GetLog("Socket鍙戦�佹暟鎹�").Info(true, Y); socket.Send(buffer); + + + int newLength = buffer.Length - 2; + byte[] newArray = new byte[newLength]; + + Array.Copy(buffer, 1, newArray, 0, newLength); + string calculatedChecksum = GetCheckSumone(newArray); + + var str = Encoding.UTF8.GetString(newArray); + string receivedChecksum = str.Substring(str.Length - 2); + + var x = Encoding.UTF8.GetString(newArray); + + LogFactory.GetLog("Socket鍙戦�佹暟鎹�").Info(true, $"{JsonConvert.SerializeObject(GetParse(x))}{Environment.NewLine}"); } + /// <summary> + /// CheckSum瑙f瀽 + /// </summary> + /// <param name="x"></param> + /// <returns></returns> + /// <exception cref="Exception"></exception> public string GetCheckSumone(byte[] x) { int sum = 0; @@ -260,10 +362,22 @@ /// </summary> public const string JobOrderID = "0000000000000000"; + public const string JobOrderIDPDA = "PDA0000000000000"; + + public const string JobOrderIDF = "FIRE000000000000"; + /// <summary> /// 浼樺厛绾� 棰勭暀 /// </summary> public const string priority = "1"; + + /// <summary> + /// 閲嶅叆搴� + /// </summary> + public const string Restocking = "2100"; + + + public const string EmptyOutBoundconst = "2101"; /// <summary> /// 鎵樼洏涓暟 棰勭暀 @@ -326,6 +440,23 @@ #endregion #region WMS涓嬪彂HOST鏂规硶 + public static string Sequence() + { + // 浣跨敤閿佺‘淇濈嚎绋嬪畨鍏� + lock (_lock) + { + _currentNumber++; + + // 濡傛灉瓒呰繃99999锛屽彲浠ラ噸缃垨鎶涘嚭寮傚父锛岃繖閲岄�夋嫨閲嶇疆 + if (_currentNumber > 99999) + { + _currentNumber = 1; + } + + return _currentNumber.ToString("D5"); + } + } + /// <summary> /// 璁惧璇锋眰鍏ュ簱 宸ュ簭101 @@ -336,12 +467,12 @@ { try { - string str = SendandReply + "101" + BaseDal.GetSeqNo().Result.ToString("D5") + GetFieldsAsString(Agvstatus) + GetListStringOutStation(outStations) + "1" + GetFieldsAsString(inStation); + string str = SendandReply + "101" + Sequence() + GetFieldsAsString(Agvstatus) + GetListStringOutStation(outStations) + OutStationSpare2 + "1" + GetFieldsAsString(inStation); clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) { - throw new Exception(ex.Message); + LogFactory.GetLog("DeviceRequestInbound").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); } } @@ -354,12 +485,12 @@ { try { - string str = SendandReply + "925" + BaseDal.GetSeqNo().Result.ToString("D5"); + string str = SendandReply + "925" + Sequence(); clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) { - throw new Exception(ex.Message); + LogFactory.GetLog("RequestCommunication").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); } } @@ -372,14 +503,13 @@ { try { - string str = SendNotReply + "915" + BaseDal.GetSeqNo().Result.ToString("D5") + Command; + string str = SendNotReply + "915" + Sequence() + Command; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) { - throw new Exception(ex.Message); + LogFactory.GetLog("JobReady").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); } - } /// <summary> @@ -391,14 +521,13 @@ { try { - string str = SendNotReply + "913" + BaseDal.GetSeqNo().Result.ToString("D5") + Status; + string str = SendNotReply + "913" + Sequence() + Status; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) { - throw new Exception(ex.Message); + LogFactory.GetLog("DeviceStateReport").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); } - } /// <summary> @@ -410,14 +539,13 @@ { try { - string str = SendNotReply + "917" + BaseDal.GetSeqNo().Result.ToString("D5") + Status; + string str = SendandReply + "917" + Sequence() + Status; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) { - throw new Exception(ex.Message); + LogFactory.GetLog("DeviceAutoStatusReport").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); } - } /// /// <summary> @@ -432,14 +560,13 @@ { try { - string str = SendandReply + "905" + BaseDal.GetSeqNo().Result.ToString("D5") + Status + JobOrderID + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; + string str = SendandReply + "905" + Sequence() + Status + JobOrderID + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) { - throw new Exception(ex.Message); + LogFactory.GetLog("JobStartOrEnd").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); } - } /// <summary> @@ -455,14 +582,13 @@ { try { - string str = SendNotReply + "907" + BaseDal.GetSeqNo().Result.ToString("D5") + Status + JobOrderID + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; + string str = SendNotReply + "907" + Sequence() + Status + JobOrderID + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) { - throw new Exception(ex.Message); + LogFactory.GetLog("PalletActionReport宸ュ簭907").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); } - } /// <summary> @@ -477,14 +603,46 @@ { try { - string str = SendandReply + "901" + BaseDal.GetSeqNo().Result.ToString("D5") + "0" + JobOrderID + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; + string str = SendandReply + "901" + Sequence() + "0" + JobOrderID + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; + Dt_HostLog hostLog = new Dt_HostLog() + { + CommandID = 901, + Count = 0, + Messgae = str, + }; + _hostLogRepository.AddData(hostLog); clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) { - throw new Exception(ex.Message); + LogFactory.GetLog("PalletActionReport宸ュ簭901").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); } + } + public void PalletActionReportPDA(string FormLocation, string ToLocation, string TaskType, string PallteCode) + { + try + { + string str = SendandReply + "901" + Sequence() + "0" + JobOrderIDPDA + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; + clientSend(MakeStringToByteMsg(str)); + } + catch (Exception ex) + { + LogFactory.GetLog("PalletActionReportPDA宸ュ簭901").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); + } + } + + public void PalletActionReportFrie(string FormLocation, string ToLocation, string TaskType, string PallteCode) + { + try + { + string str = SendandReply + "901" + Sequence() + "0" + JobOrderIDF + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; + clientSend(MakeStringToByteMsg(str)); + } + catch (Exception ex) + { + LogFactory.GetLog("PalletActionReportPDA宸ュ簭901").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); + } } /// <summary> @@ -507,9 +665,8 @@ } catch (Exception ex) { - throw new Exception(ex.Message); + LogFactory.GetLog("DeviceStationStatusReport").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); } - } /// /// <summary> @@ -523,14 +680,38 @@ { try { - string str = SendandReply + "105" + BaseDal.GetSeqNo().Result.ToString("D5") + "R" + JobOrderID + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; + ErrorReport(Restocking, "A", "00"); + string str = SendandReply + "105" + Sequence() + "R" + JobOrderID + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; + Dt_HostLog hostLog = new Dt_HostLog() + { + CommandID = 105, + Count = 0, + Messgae = str, + }; + _hostLogRepository.AddData(hostLog); clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) { - throw new Exception(ex.Message); + LogFactory.GetLog("RecreateGetLocation").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); } + } + /// <summary> + /// CheckSum鏍¢獙 宸ュ簭981 + /// </summary> + /// <param name="message"></param> + public void CheckSum(string message) + { + try + { + string str = SendNotReply + "981" + Sequence() + message; + clientSend(MakeStringToByteMsg(str)); + } + catch (Exception ex) + { + LogFactory.GetLog("CheckSum").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); + } } /// /// <summary> @@ -543,14 +724,14 @@ { try { - string str = SendNotReply + "985" + BaseDal.GetSeqNo().Result.ToString("D5") + Trouble + Level + Location; + string str = SendNotReply + "985" + Sequence() + Trouble + Level + Location; + clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) { - throw new Exception(ex.Message); + LogFactory.GetLog("ErrorReport").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); } - } /// <summary> @@ -562,14 +743,13 @@ { try { - string str = SendNotReply + "104" + BaseDal.GetSeqNo().Result.ToString("D5") + Statues; + string str = SendNotReply + "104" + Sequence() + Statues; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) { - throw new Exception(ex.Message); + LogFactory.GetLog("DeviceReceiveJobResponse").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); } - } /// /// <summary> @@ -583,14 +763,21 @@ { try { - string str = SendandReply + "107" + BaseDal.GetSeqNo().Result.ToString("D5") + "1" + JobOrderID + priority + FormLocation + ToLocation + "O" + TrayCnt + PallteCode; + ErrorReport(EmptyOutBoundconst, "A", "00"); + string str = SendandReply + "107" + Sequence() + "1" + JobOrderID + priority + FormLocation + ToLocation + "O" + TrayCnt + PallteCode; + Dt_HostLog hostLog = new Dt_HostLog() + { + CommandID = 107, + Count = 0, + Messgae = str, + }; + _hostLogRepository.AddData(hostLog); clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) { - throw new Exception(ex.Message); + LogFactory.GetLog("EmptyOutBound").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); } - } /// <summary> @@ -599,8 +786,72 @@ /// <param name="AgvStatus"></param> public void DeviceStatusReportResponse(HOSTAGVStatus AgvStatus, string X, string Y) { - string str = SendNotReply + "910" + BaseDal.GetSeqNo().Result.ToString("D5") + GetFieldsAsString(AgvStatus) + X + Y; - clientSend(MakeStringToByteMsg(str)); + try + { + string str = SendNotReply + "910" + Sequence() + GetFieldsAsString(AgvStatus) + X + Y; + clientSend(MakeStringToByteMsg(str)); + var hostlog = SqlSugarHelper.DbWMS.Queryable<Dt_HostLog>().Where(x => x.CommandID == 910).First(); + if (hostlog != null) + { + hostlog.ModifyDate=DateTime.Now; + SqlSugarHelper.DbWMS.Updateable(hostlog).ExecuteCommand(); + } + else + { + Dt_HostLog hostLog = new Dt_HostLog() + { + CommandID = 910, + Count = 0, + Messgae = str, + }; + _hostLogRepository.AddData(hostLog); + } + } + catch (Exception ex) + { + LogFactory.GetLog("DeviceStatusReportResponse").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); + } + } + + /// <summary> + /// 鍥炲HOST987宸ュ簭 宸ュ簭988 + /// </summary> + /// <param name="AgvStatus"></param> + /// <param name="X"></param> + /// <param name="Y"></param> + public void FireAlarmReportResponse(string SeqNo, string IsOK, string Location) + { + try + { + string str = SendNotReply + "988" + SeqNo + IsOK + Location; + clientSend(MakeStringToByteMsg(str)); + } + catch (Exception ex) + { + LogFactory.GetLog("FireAlarmReportResponse").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); + } + + } + + + /// <summary> + /// 鍥炲HOST301宸ュ簭 宸ュ簭302 + /// </summary> + /// <param name="AgvStatus"></param> + /// <param name="X"></param> + /// <param name="Y"></param> + public void UpdateLocalTimeResponse(string message, string SeqNo) + { + try + { + string str = SendNotReply + "302" + SeqNo + message; + clientSend(MakeStringToByteMsg(str)); + } + catch (Exception ex) + { + LogFactory.GetLog("UpdateLocalTimeResponse").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); + } + } #endregion @@ -613,46 +864,43 @@ /// <param name="message"></param> public void ReceiveCommandResponse(string message) { - var parseMessage = GetParse(message); - switch (parseMessage.body.ret) + try { - //OK - case "0": - var location = _locationRepository.QueryFirst(x => x.LocationCode == parseMessage.body.ToLocation); - if (location == null) - { - return; - } - if (location.LocationStatus == (int)LocationEnum.Free) - { - InsertWMSTask(parseMessage); - Thread.Sleep(500); - //915 - JobReady("0"); - return; - } - else - { - //todo璐т綅鏈夎揣閲嶅鍏ュ簱 - return; - } - //NG - case "1": - break; - //鏃犲簱浣嶅垎閰� - case "2": - break; - //绔欏彴鍒扮珯鍙帮紝鍑哄簱绔欏彴鏈噯澶囧ソ - case "3": - break; - //闈炲父娓╁伐绋� - case "4": - break; - - case "9": - break; - default: - break; + ParseMessage parseMessage = GetParse(message); + var lcationEnd = parseMessage.body.ToLocation; + switch (parseMessage.body.ret) + { + //OK + case "0": + GetLocation(parseMessage); + break; + //NG + case "1": + AddErrorMessage("2013", "Host", StationParse(parseMessage.body.FromLocation)); + break; + //鏃犲簱浣嶅垎閰� + case "2": + AddErrorMessage("2014", "Host", StationParse(parseMessage.body.FromLocation)); + break; + //绔欏彴鍒扮珯鍙帮紝鍑哄簱绔欏彴鏈噯澶囧ソ + case "3": + AddErrorMessage("2015", "Host", StationParse(parseMessage.body.FromLocation)); + break; + //闈炲父娓╁伐绋� + case "4": + AddErrorMessage("2016", "Host", StationParse(parseMessage.body.FromLocation)); + break; + case "9": + AddErrorMessage("2017", "Host", StationParse(parseMessage.body.FromLocation)); + break; + default: + break; + } + } + catch (Exception ex) + { + ErrorReport("2199", "A", "00"); + LogFactory.GetLog("Host102鍥炲WMS101ReceiveCommandResponse").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); } } @@ -661,26 +909,41 @@ /// </summary> public void AGVJobStartOrEndResponse(string status, string message) { - switch (message) + try { - //OK - case "0": - if (status == "E") - { - DeviceStateReport("I"); - Thread.Sleep(3000); - JobReady("1"); - } - break; - //NG - case "1": - //璋冪敤AGV鏆傚仠鎺ュ彛 - break; - case "9": - break; - default: - break; + switch (message) + { + //OK + case "0": + if (status == "E") + { + AGVStatusRespone Agvstatus = GetAGVStatus(); + + DeviceStateReport(GetAGVStatus(Agvstatus.RuntimeStatus)); + Thread.Sleep(3000); + JobReady("1"); + } + break; + //NG + case "1": + //璋冪敤AGV鏆傚仠鎺ュ彛 + AddErrorMessage("2004", "Host", ""); + break; + case "9": + AddErrorMessage("2005", "Host", ""); + break; + default: + break; + } } + catch (Exception ex) + { + ErrorReport("2199", "A", "00"); + LogFactory.GetLog("Host906鍥炲WMS905AGVJobStartOrEndResponse").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); + } + + + } /// <summary> @@ -688,50 +951,32 @@ /// </summary> public void DataReportResponse(string message) { - Dt_Task task = BaseDal.QueryFirst(x => x.TaskState == (int)TaskOutStatusEnum.AGV_OutFinish || x.TaskState == (int)TaskRelocationStatusEnum.AGV_RelocationFinish || x.TaskState == (int)TaskInStatusEnum.AGV_InFinish); - if (task != null) + try { - switch (task.TaskType) + DeleteHostLog(901); + #region + switch (message) { - case (int)TaskInboundTypeEnum.Inbound: - //鍏ュ簱 - task.TaskState = (int)TaskInStatusEnum.AGV_InFinish; - if (message == "0") - { - JobStartOrEnd("E", task.SourceAddress, task.TargetAddress, "O", task.PalletCode); - } - CompleteInboundTask(task); + case "0": + break; - case (int)TaskOutboundTypeEnum.Outbound: - //鍑哄簱 - if (message == "0") - { - JobStartOrEnd("E", task.SourceAddress, task.TargetAddress, "O", task.PalletCode); - } - task.TaskState = (int)TaskOutStatusEnum.AGV_OutFinish; - CompleteOutboundTask(task); + case "1": + AddErrorMessage("2001", "Host", ""); break; - case (int)TaskRelocationTypeEnum.Relocation: - if (message == "0") - { - JobStartOrEnd("E", task.SourceAddress, task.TargetAddress, "O", task.PalletCode); - } - task.TaskState = (int)TaskRelocationStatusEnum.AGV_RelocationFinish; - CompleteRelocationboundTask(task); - break; - case (int)TaskStationTypeEnum.StationToStation: - if (message == "0") - { - JobStartOrEnd("E", task.SourceAddress, task.TargetAddress, "O", task.PalletCode); - } - task.TaskState = (int)TaskOutStatusEnum.AGV_OutFinish; - TaskMoveHty(task); + case "9": + AddErrorMessage("2002", "Host", ""); break; default: break; } - } + catch (Exception ex) + { + ErrorReport("2199", "A", "00"); + LogFactory.GetLog("Host902鍥炲WMS901DataReportResponse").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); + } + + #endregion } /// <summary> /// HOST涓嬪彂鍑哄簱浠诲姟 宸ュ簭103 @@ -746,41 +991,19 @@ { //OK case "0": - var location = _locationRepository.QueryFirst(x => x.LocationCode == parseMessage.body.ToLocation); - if (location == null) - { - return; - } - if (location.LocationStatus == (int)LocationEnum.InStock) - { - var task = InsertWMSTask(parseMessage); - BaseDal.AddData(task); - InsertAGVTask(task); - Thread.Sleep(500); - //915 - JobReady("0"); - Thread.Sleep(500); - //104 - DeviceReceiveJobResponse("0"); - } - else - { - //todo璐т綅鏃犺揣绌哄嚭搴� - return; - } - + GetLocation(parseMessage); break; default: break; } } - catch (Exception) + catch (Exception ex) { - DeviceReceiveJobResponse("1"); + ErrorReport("2199", "A", "00"); + LogFactory.GetLog("Host103HOSTOutBoundTask").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); } } - /// <summary> /// HOST璁惧鐘舵�佽幏鍙� 宸ュ簭935 /// </summary> @@ -790,54 +1013,71 @@ try { //鍥炲936 - List<OutStationStatus> outStationStatus = new List<OutStationStatus>(); - List<InStationStatus> inStationStatus = new List<InStationStatus>(); + StationStatus stationIn = GetStationStatus("B002"); - - inStationStatus.Add(new InStationStatus() - { - StationName = "02", - StationEnable = stationIn.WorkstationO == "1" ? "0" : "1", - IsDistributionTask = "0", - PallteCode = "0000000000", - }); - inStationStatus.Add(new InStationStatus() - { - StationName = "01", - StationEnable = stationIn.WorkstationT == "1" ? "0" : "1", - IsDistributionTask = "0", - PallteCode = "0000000000", - }); - StationStatus stationOut = GetStationStatus("B001"); - var taskOutStationO = BaseDal.QueryFirst(x => x.SourceAddress == "B001::1" || x.TargetAddress == "B001::1"); - var taskOutStationT = BaseDal.QueryFirst(x => x.SourceAddress == "B001::2" || x.TargetAddress == "B001::2"); - outStationStatus.Add(new OutStationStatus() + + if (stationIn == null || stationOut == null) { - StationName = "04", - StationEnable = stationOut.WorkstationO == "1" ? "0" : "1", - IsDistributionTask = taskOutStationO == null ? "0" : "1", - Spare1 = "00" - }); - outStationStatus.Add(new OutStationStatus() - { - StationName = "03", - StationEnable = stationOut.WorkstationT == "1" ? "0" : "1", - IsDistributionTask = taskOutStationT == null ? "0" : "1", - Spare1 = "00" - }); + ErrorReport("2103", "A", "00"); + } + + List<OutStationStatus> outStationStatus = GetOutStationStatus(stationOut); + List<InStationStatus> inStationStatus = GetInStationStatus(stationIn); + + #region + //inStationStatus.Add(new InStationStatus() + //{ + // StationName = "02", + // StationEnable = stationIn.WorkstationO == "1" ? "0" : "1", + // IsDistributionTask = "0", + // PallteCode = "0000000000", + //}); + //inStationStatus.Add(new InStationStatus() + //{ + // StationName = "01", + // StationEnable = stationIn.WorkstationT == "1" ? "0" : "1", + // IsDistributionTask = "0", + // PallteCode = "0000000000", + //}); + //var taskOutStationO = BaseDal.QueryFirst(x => x.SourceAddress == "B001::1" || x.TargetAddress == "B001::1"); + //var taskOutStationT = BaseDal.QueryFirst(x => x.SourceAddress == "B001::2" || x.TargetAddress == "B001::2"); + //outStationStatus.Add(new OutStationStatus() + //{ + // StationName = "04", + // StationEnable = stationOut.WorkstationO == "1" ? "0" : "1", + // IsDistributionTask = taskOutStationO == null ? "0" : "1", + // Spare1 = "00" + //}); + //outStationStatus.Add(new OutStationStatus() + //{ + // StationName = "03", + // StationEnable = stationOut.WorkstationT == "1" ? "0" : "1", + // IsDistributionTask = taskOutStationT == null ? "0" : "1", + // Spare1 = "00" + //}); + #endregion AGVStatusRespone status = GetAGVStatus(); HOSTAGVStatus AgvStatus = new HOSTAGVStatus() { RuntimeStatus = CapitalizeFirstLetter(status.RuntimeStatus), AutoStatus = status.AutoStatus == "MaintenanceMode" ? "1" : "0", - Ready = status.AutoStatus == "MaintenanceMode" ? "0" : "1", }; + if (status.RuntimeStatus == "Idle" && status.AutoStatus == "ControlMode") + { + AgvStatus.Ready = "1"; + } + else + { + AgvStatus.Ready = "0"; + } DeviceStationStatusReport(AgvStatus, outStationStatus, inStationStatus, sSeqNo); } - catch (Exception) + catch (Exception ex) { - DeviceReceiveJobResponse("1"); + ErrorReport("2199", "A", "00"); + LogFactory.GetLog("Host935DeviceStationStatusInvite").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); + JobReady("1"); } } @@ -850,30 +1090,36 @@ { try { + DeleteHostLog(105); var parseMessage = GetParse(message); + var lcationEnd = parseMessage.body.ToLocation; switch (parseMessage.body.ret) { //OK case "0": - UpdateTaskLocation(parseMessage); + GetLocation(parseMessage, true); break; //NG case "1": + AddErrorMessage("2019", "Host", StationParse(parseMessage.body.FromLocation)); break; //鏃犲簱浣嶅垎閰� case "2": + AddErrorMessage("2020", "Host", StationParse(parseMessage.body.FromLocation)); break; case "9": + AddErrorMessage("2021", "Host", StationParse(parseMessage.body.FromLocation)); break; default: break; } } - catch (Exception) + catch (Exception ex) { - DeviceReceiveJobResponse("1"); + ErrorReport("2199", "A", "00"); + LogFactory.GetLog("Host106閲嶆柊鍒嗛厤搴撲綅RecreateGetLocation").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); + JobReady("1"); } - } /// <summary> @@ -882,13 +1128,123 @@ /// <param name="message"></param> public void EmptyOutBoundResponse(string message) { - if (message != null && message == "0") + try { - DeviceStateReport("I"); - Thread.Sleep(500); - JobReady("1"); - + DeleteHostLog(107); + if (message != null) + { + switch (message) + { + case "0": + AGVStatusRespone Agvstatus = GetAGVStatus(); + DeviceStateReport(GetAGVStatus(Agvstatus.RuntimeStatus)); + Thread.Sleep(2000); + JobReady("1"); + break; + case "1": + AddErrorMessage("2023", "Host", ""); + break; + case "9": + AddErrorMessage("2024", "Host", ""); + break; + default: + break; + } + } } + catch (Exception ex) + { + ErrorReport("2199", "A", "00"); + LogFactory.GetLog("Host108绌哄嚭搴撳搷搴擡mptyOutBoundResponse").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); + } + } + + /// <summary> + /// Host涓嬪彂鐏浠诲姟 987 + /// </summary> + public void FireAlarm(string Location, string SeqNo) + { + try + { + Dt_Task taskNew = new Dt_Task(); + var stock = SqlSugarHelper.DbWMS.Queryable<DtStockInfo>().Where(x => x.LocationCode == Location).First(); + + var location = SqlSugarHelper.DbWMS.Queryable<Dt_Task>().Where(x => x.SourceAddress == Location).First(); + if (location != null) + { + FireAlarmReportResponse(SeqNo, "0", Location); + return; + } + var stationOne = SqlSugarHelper.DbWMS.Queryable<Dt_Task>().Where(x => x.TargetAddress == "B001::1").ToList(); + var stationTwo = SqlSugarHelper.DbWMS.Queryable<Dt_Task>().Where(x => x.TargetAddress == "B001::2").ToList(); + + if (stationOne.Count > 0 && stationTwo.Count > 0) + { + if (stationOne.Count > stationTwo.Count) + { + taskNew = GetFireAlarm(Location, "B001::2", stock == null ? "F" + DateTime.Now.ToString("HHmmss") + new Random().Next(100, 1000) : stock.PalletCode, SeqNo); + } + else + { + taskNew = GetFireAlarm(Location, "B001::1", stock == null ? "F" + DateTime.Now.ToString("HHmmss") + new Random().Next(100, 1000) : stock.PalletCode, SeqNo); + } + FireAlarmReportResponse(SeqNo, "0", Location); + } + else + { + StationStatus stationOut = GetStationStatus("B001"); + + if (stationOut != null && stationOut.WorkstationO == "0" && stationOne.Count == 0) + { + taskNew = GetFireAlarm(Location, "B001::1", stock == null ? "F" + DateTime.Now.ToString("HHmmss") + new Random().Next(100, 1000) : stock.PalletCode, SeqNo); + } + else if (stationOut != null && stationOut.WorkstationT == "0" && stationTwo.Count == 0) + { + taskNew = GetFireAlarm(Location, "B001::2", stock == null ? "F" + DateTime.Now.ToString("HHmmss") + new Random().Next(100, 1000) : stock.PalletCode, SeqNo); + } + else + { + taskNew = GetFireAlarm(Location, "B001::2", stock == null ? "F" + DateTime.Now.ToString("HHmmss") + new Random().Next(100, 1000) : stock.PalletCode, SeqNo); + } + FireAlarmReportResponse(SeqNo, "0", Location); + } + BaseDal.AddData(taskNew); + InsertAGVTask(taskNew); + } + catch (Exception ex) + { + ErrorReport("2199", "A", "00"); + LogFactory.GetLog("鐏987FireAlarm").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); + } + } + + + /// <summary> + /// 鑾峰彇娑堥槻浠诲姟 + /// </summary> + /// <param name="SourceAddress">璧峰鍦板潃</param> + /// <param name="TargetAddress">缁堢偣鍦板潃</param> + /// <param name="PalletCode">鎵樼洏鍙�</param> + /// <param name="SeqNo">Host搴忓垪鍙�</param> + /// <returns></returns> + public Dt_Task GetFireAlarm(string SourceAddress, string TargetAddress, string PalletCode, string SeqNo) + { + return new Dt_Task() + { + SourceAddress = SourceAddress, + TargetAddress = TargetAddress, + CurrentAddress = SourceAddress, + NextAddress = TargetAddress, + TaskType = (int)TaskFireAlarmTypeEnum.FireAlarmOut, + TaskState = (int)TaskFireAlarmStatusEnum.FireAlarmNew, + Remark = TargetAddress, + TaskNum = BaseDal.GetTaskNo().Result, + PalletCode = PalletCode == null ? "" : PalletCode, + Dispatchertime = DateTime.Now, + Grade = 1, + SeqNo = Convert.ToInt32(SeqNo), + CommandID = Convert.ToInt32(987), + }; } /// <summary> @@ -896,17 +1252,72 @@ /// </summary> public void DeviceStatusReportRequest() { - AGVStatusRespone status = GetAGVStatus(); - - HOSTAGVStatus AgvStatus = new HOSTAGVStatus() + try { - RuntimeStatus = CapitalizeFirstLetter(status.RuntimeStatus), - AutoStatus = status.AutoStatus == "MaintenanceMode" ? "1" : "0", - Ready = status.AutoStatus == "MaintenanceMode" ? "0" : "1", - }; - string axis = "000000"; + DeleteHostLog(910); + AGVStatusRespone status = GetAGVStatus(); - DeviceStatusReportResponse(AgvStatus, axis, axis); + HOSTAGVStatus AgvStatus = new HOSTAGVStatus() + { + RuntimeStatus = CapitalizeFirstLetter(status.RuntimeStatus), + AutoStatus = status.AutoStatus == "MaintenanceMode" ? "1" : "0", + + }; + if (status.RuntimeStatus == "Idle" && status.AutoStatus == "ControlMode") + { + AgvStatus.Ready = "1"; + } + else + { + AgvStatus.Ready = "0"; + } + string axis = "000000"; + + DeviceStatusReportResponse(AgvStatus, axis, axis); + } + catch (Exception ex) + { + ErrorReport("2199", "A", "00"); + LogFactory.GetLog("Host蹇冭烦").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); + } + + } + + + /// <summary> + /// WMS鍚屾Host鏃堕棿 宸ュ簭301 + /// </summary> + public void UpdateLocalTime(string Time, string SeqNo) + { + try + { + SYSTEMTIME newTime = new SYSTEMTIME + { + Year = Convert.ToUInt16(Time.Substring(0, 4)), + Month = Convert.ToUInt16(Time.Substring(4, 2)), + Day = Convert.ToUInt16(Time.Substring(6, 2)), + Hour = Convert.ToUInt16(Time.Substring(8, 2)), + Minute = Convert.ToUInt16(Time.Substring(10, 2)), + Second = Convert.ToUInt16(Time.Substring(12, 2)), + Milliseconds = 0 + }; + if (SetLocalTime(ref newTime)) + { + UpdateLocalTimeResponse("0", SeqNo); + Console.WriteLine("绯荤粺鏃堕棿宸叉垚鍔熶慨鏀广��"); + } + else + { + UpdateLocalTimeResponse("1", SeqNo); + Console.WriteLine("淇敼绯荤粺鏃堕棿澶辫触銆傝纭繚浠ョ鐞嗗憳鏉冮檺杩愯姝ょ▼搴忋��"); + } + } + catch (Exception ex) + { + ErrorReport("2199", "A", "00"); + LogFactory.GetLog("UpdateLocalTime鏃堕棿鍚屾").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(ex.Message)}{Environment.NewLine}{ex.StackTrace}", ""); + } + } #endregion @@ -944,8 +1355,6 @@ // 澶嶅埗鍘熷鏁扮粍鐨勬墍鏈夋暟鎹埌鏂版暟缁勭殑涓棿閮ㄥ垎 Array.Copy(buffer, 0, newArray, 1, buffer.Length); - //var parseMessage = GetParse(str); - LogFactory.GetLog("Socket鍙戦�佹姤鏂�").Info(true, str); return newArray; } catch (Exception ex) @@ -1013,121 +1422,240 @@ } } - public ParseMessage SubString(string Y) + public List<OutStationStatus> GetOutStationStatus(StationStatus stationOut) { - - const string STX = "0x02"; - const string ETX = "0x03"; - - // 妫�鏌ユ槸鍚︿互 STX 寮�澶淬�丒TX 缁撳熬 - if (Y.Substring(0, 4) == STX && Y.Substring(Y.Length - 4) == ETX) + List<OutStationStatus> outStationStatus = new List<OutStationStatus>(); + var taskOutStationO = BaseDal.QueryFirst(x => x.SourceAddress == "B001::1" || x.TargetAddress == "B001::1"); + var taskOutStationT = BaseDal.QueryFirst(x => x.SourceAddress == "B001::2" || x.TargetAddress == "B001::2"); + outStationStatus.Add(new OutStationStatus() { - string str = Y.Substring(4, Y.Length - 8); - byte[] message = Encoding.UTF8.GetBytes(str); - int newLength = message.Length - 2; - - if (newLength < 0) - { - throw new ArgumentException("鏁扮粍闀垮害涓嶈冻锛屾棤娉曞幓鎺夋渶鍚庝袱浣嶃��"); - } - - byte[] newArray = new byte[newLength]; - Array.Copy(message, 0, newArray, 0, newLength); - string calculatedChecksum = GetCheckSum(newArray); - - string receivedChecksum = str.Substring(str.Length - 2); - - if (calculatedChecksum == receivedChecksum) - { - var x = Encoding.UTF8.GetString(newArray); - ParseMessage parseMessage = new ParseMessage() - { - bDir = x.Substring(0, 1), - bObjID = x.Substring(2, 10), - bReply = x.Substring(11, 1), - bCmdID = x.Substring(12, 3), - nSeqNo = x.Substring(15, 5), - //Body = x.Substring(21), - }; - return parseMessage; - } - else - { - - - Console.WriteLine("鏍¢獙澶辫触锛�"); - return null; - } - } - else + StationName = "04", + StationEnable = stationOut.WorkstationO == "1" ? "0" : "1", + IsDistributionTask = taskOutStationO == null ? "0" : "1", + Spare1 = "00" + }); + outStationStatus.Add(new OutStationStatus() { - Console.WriteLine("鏃犳晥鎶ユ枃鏍煎紡锛�"); - return null; - } + StationName = "03", + StationEnable = stationOut.WorkstationT == "1" ? "0" : "1", + IsDistributionTask = taskOutStationT == null ? "0" : "1", + Spare1 = "00" + }); + return outStationStatus; } - #endregion - #region 瀹氫箟瀵硅薄 - - + public List<InStationStatus> GetInStationStatus(StationStatus stationIn) + { + List<InStationStatus> inStationStatus = new List<InStationStatus>(); + var taskOutStationO = BaseDal.QueryFirst(x => x.SourceAddress == "B002::1" || x.TargetAddress == "B002::1"); + var taskOutStationT = BaseDal.QueryFirst(x => x.SourceAddress == "B002::2" || x.TargetAddress == "B002::2"); + inStationStatus.Add(new InStationStatus() + { + StationName = "02", + StationEnable = stationIn.WorkstationO == "1" ? "0" : "1", + IsDistributionTask = taskOutStationO == null ? "0" : "1", + PallteCode = "0000000000", + }); + inStationStatus.Add(new InStationStatus() + { + StationName = "01", + StationEnable = stationIn.WorkstationT == "1" ? "0" : "1", + IsDistributionTask = taskOutStationT == null ? "0" : "1", + PallteCode = "0000000000", + }); + return inStationStatus; + } #endregion #region 绉佹湁鏂规硶 - private void UpdateTaskLocation(ParseMessage parseMessage) + /// <summary> + /// 娣诲姞WMS浠诲姟 + /// </summary> + /// <param name="parseMessage"></param> + /// <exception cref="Exception"></exception> + private void InsertWMSTask(ParseMessage parseMessage) { - var task = BaseDal.QueryFirst(x => x.SeqNo == Convert.ToInt32(parseMessage.nSeqNo) && x.PalletCode.Contains(parseMessage.body.TrayIdList)); - if (task != null) - { - task.TargetAddress = parseMessage.body.ToLocation; - task_call agvtask = SqlSugarHelper.DbAGV.Queryable<task_call>().Where(it => it.d_involed5 == task.TaskNum).First(); - BaseDal.Update(task); - SqlSugarHelper.DbAGV.Updateable(agvtask).ExecuteCommand(); - } - - } - - private Dt_Task InsertWMSTask(ParseMessage parseMessage) - { - //var task = BaseDal.QueryFirst(x => x.PalletCode.Contains(parseMessage.body.TrayIdList)); int taskType = 0; int taskState = 0; + Dt_Task task = new Dt_Task(); if (parseMessage.body.JobType == "I") { + Dt_StationManager Instation = _stationManagerRepository.QueryFirst(x => x.HostName == parseMessage.body.FromLocation.Substring(4, 2)); + task.SourceAddress = StationParse(parseMessage.body.FromLocation); + task.TargetAddress = parseMessage.body.ToLocation; + task.CurrentAddress = StationParse(parseMessage.body.FromLocation); + task.NextAddress = parseMessage.body.ToLocation; taskType = (int)TaskInboundTypeEnum.Inbound; taskState = (int)TaskInStatusEnum.InNew; + task.Remark = parseMessage.body.FromLocation; + } else if (parseMessage.body.JobType == "O") { + task.SourceAddress = parseMessage.body.FromLocation; + task.TargetAddress = StationParse(parseMessage.body.ToLocation); + task.CurrentAddress = parseMessage.body.FromLocation; + task.NextAddress = StationParse(parseMessage.body.ToLocation); taskType = (int)TaskOutboundTypeEnum.Outbound; taskState = (int)TaskOutStatusEnum.OutNew; + task.Remark = parseMessage.body.ToLocation; + } + else if (parseMessage.body.JobType == "C") + { + task.SourceAddress = parseMessage.body.FromLocation; + task.TargetAddress = StationParse(parseMessage.body.ToLocation); + task.CurrentAddress = parseMessage.body.FromLocation; + task.NextAddress = StationParse(parseMessage.body.ToLocation); + taskType = (int)TaskOutboundTypeEnum.OutQuality; + taskState = (int)TaskOutStatusEnum.OutNew; + task.Remark = parseMessage.body.ToLocation; } else if (parseMessage.body.JobType == "S") { taskType = (int)TaskStationTypeEnum.StationToStation; taskState = (int)TaskOutStatusEnum.OutNew; + task.SourceAddress = StationParse(parseMessage.body.FromLocation); + task.TargetAddress = StationParse(parseMessage.body.ToLocation); + task.CurrentAddress = StationParse(parseMessage.body.FromLocation); + task.NextAddress = StationParse(parseMessage.body.ToLocation); + task.Remark = parseMessage.body.FromLocation; + task.HostName = parseMessage.body.ToLocation; } else if (parseMessage.body.JobType == "R") { taskType = (int)TaskRelocationTypeEnum.Relocation; taskState = (int)TaskRelocationStatusEnum.RelocationNew; + task.SourceAddress = parseMessage.body.FromLocation; + task.TargetAddress = parseMessage.body.ToLocation; + task.CurrentAddress = parseMessage.body.FromLocation; + task.NextAddress = parseMessage.body.ToLocation; } else { throw new Exception("鏈煡搴撲綅"); } - return new Dt_Task() - { - TaskNum = BaseDal.GetTaskNo().Result, - SourceAddress = parseMessage.body.FromLocation, - TargetAddress = parseMessage.body.ToLocation, - PalletCode = parseMessage.body.TrayIdList.Substring(0, 10), - TaskType = taskType, - TaskState = taskState, - Dispatchertime = DateTime.Now, - SeqNo = Convert.ToInt32(parseMessage.nSeqNo), - CommandID = Convert.ToInt32(parseMessage.bCmdID) - }; + + task.TaskNum = BaseDal.GetTaskNo().Result; + task.PalletCode = parseMessage.body.TrayIdList.Substring(0, 10); + task.TaskType = taskType; + task.TaskState = taskState; + task.Dispatchertime = DateTime.Now; + task.Grade = 1; + task.SeqNo = Convert.ToInt32(parseMessage.nSeqNo); + task.CommandID = Convert.ToInt32(parseMessage.bCmdID); + BaseDal.AddData(task); + InsertAGVTask(task); + } + + + public void GetLocation(ParseMessage parseMessage, bool repeat = false) + { + + switch (parseMessage.body.JobType) + { + case "I": + var locationIn = SqlSugarHelper.DbWMS.Queryable<DtLocationInfo>().Where(x => x.LocationCode == parseMessage.body.ToLocation).First(); + if (locationIn == null) + { + ErrorReport("2102", "A", "00"); + return; + } + if (locationIn.LocationStatus == (int)LocationEnum.Free) + { + var taskIn = SqlSugarHelper.DbWMS.Queryable<Dt_Task>().Where(x => x.PalletCode == parseMessage.body.TrayIdList.Substring(0, 10)).First(); + if (taskIn != null) + { + _taskService.UpdateTask(StationParse(parseMessage.body.FromLocation), parseMessage.body.ToLocation, parseMessage.body.TrayIdList.Substring(0, 10)); + } + else + { + InsertWMSTask(parseMessage); + } + Thread.Sleep(500); + JobReady("0"); + } + else + { + RecreateGetLocation(parseMessage.body.FromLocation, parseMessage.body.ToLocation, parseMessage.body.JobType, parseMessage.body.TrayIdList.Substring(0, 10)); + } + break; + case "O": + case "C": + var locationOut = SqlSugarHelper.DbWMS.Queryable<DtLocationInfo>().Where(x => x.LocationCode == parseMessage.body.FromLocation).First(); + if (locationOut == null) + { + ErrorReport("2102", "A", "00"); + return; + } + if (locationOut.LocationStatus == (int)LocationEnum.InStock) + { + var taskOut = SqlSugarHelper.DbWMS.Queryable<Dt_Task>().Where(x => x.PalletCode == parseMessage.body.TrayIdList.Substring(0, 10)).First(); + if (taskOut != null) + { + _taskService.UpdateTask(locationOut.LocationCode, StationParse(parseMessage.body.ToLocation), parseMessage.body.TrayIdList.Substring(0, 10)); + } + else + { + InsertWMSTask(parseMessage); + } + Thread.Sleep(500); + JobReady("0"); + Thread.Sleep(500); + //104 + DeviceReceiveJobResponse("0"); + } + else + { + EmptyOutBound(parseMessage.body.FromLocation, parseMessage.body.ToLocation, parseMessage.body.TrayIdList.Substring(0, 10)); + _taskService.AddStcokHty(parseMessage.body.TrayIdList.Substring(0, 10), parseMessage.body.FromLocation); + } + break; + case "S": + var taskS = SqlSugarHelper.DbWMS.Queryable<Dt_Task>().Where(x => x.PalletCode == parseMessage.body.TrayIdList.Substring(0, 10)).First(); + if (taskS != null) + { + _taskService.UpdateTask(StationParse(parseMessage.body.FromLocation), StationParse(parseMessage.body.ToLocation), parseMessage.body.TrayIdList.Substring(0, 10)); + } + else + { + InsertWMSTask(parseMessage); + } + Thread.Sleep(500); + JobReady("0"); + + break; + case "R": + var locationA = SqlSugarHelper.DbWMS.Queryable<DtLocationInfo>().Where(x => x.LocationCode == parseMessage.body.FromLocation).First(); + var locationB = SqlSugarHelper.DbWMS.Queryable<DtLocationInfo>().Where(x => x.LocationCode == parseMessage.body.ToLocation).First(); + if (locationA == null || locationB == null) + { + ErrorReport("2102", "A", "00"); + return; + } + if (locationA.LocationStatus == (int)LocationEnum.InStock && locationB.LocationStatus == (int)LocationEnum.Free) + { + var taskR = SqlSugarHelper.DbWMS.Queryable<Dt_Task>().Where(x => x.PalletCode == parseMessage.body.TrayIdList.Substring(0, 10)).First(); + if (taskR != null) + { + + _taskService.UpdateTask(parseMessage.body.FromLocation, parseMessage.body.ToLocation, parseMessage.body.TrayIdList.Substring(0, 10)); + } + else + { + InsertWMSTask(parseMessage); + } + Thread.Sleep(500); + JobReady("0"); + } + else + { + RecreateGetLocation(parseMessage.body.FromLocation, parseMessage.body.ToLocation, parseMessage.body.JobType, parseMessage.body.TrayIdList.Substring(0, 10)); + } + break; + default: + break; + } } /// <summary> /// 娣诲姞AGV浠诲姟 @@ -1138,57 +1666,137 @@ { string SourceAddress = string.Empty; string TargetAddress = string.Empty; + string AGVType = string.Empty; if (task.TaskType == (int)TaskInboundTypeEnum.Inbound) { + SourceAddress = task.SourceAddress; + AGVType = "2"; TargetAddress = InsertHyphenEveryTwoChars(task.TargetAddress); } else if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound) { SourceAddress = InsertHyphenEveryTwoChars(task.SourceAddress); + TargetAddress = task.TargetAddress; + AGVType = "4"; + } + else if (task.TaskType == (int)TaskOutboundTypeEnum.OutQuality) + { + SourceAddress = InsertHyphenEveryTwoChars(task.SourceAddress); + TargetAddress = task.TargetAddress; + AGVType = "128"; } else if (task.TaskType == (int)TaskRelocationTypeEnum.Relocation) { TargetAddress = InsertHyphenEveryTwoChars(task.TargetAddress); SourceAddress = InsertHyphenEveryTwoChars(task.SourceAddress); + AGVType = "16"; } else if (task.TaskType == (int)TaskStationTypeEnum.StationToStation) { TargetAddress = task.TargetAddress; - SourceAddress = task.SourceAddress; + SourceAddress = InsertHyphenEveryTwoChars(task.SourceAddress); + AGVType = "8"; + } + else if (task.TaskType == (int)TaskFireAlarmTypeEnum.FireAlarmOut) + { + TargetAddress = task.TargetAddress; + SourceAddress = InsertHyphenEveryTwoChars(task.SourceAddress); + AGVType = "1"; } task_call task_Call = new task_call() { - d_task_type = task.TaskType == (int)TaskTypeEnum.Inbound ? 1 : 2, - d_floor = 1, + d_task_type = AGVType, + d_floor = "1", d_involed1 = SourceAddress, d_involed2 = TargetAddress, - d_involed5 = task.TaskNum, + d_involed5 = task.TaskNum.ToString(), }; - - return SqlSugarHelper.DbAGV.Insertable(task_Call).ExecuteCommand(); + var x = SqlSugarHelper.DbAGV.Insertable(task_Call).ExecuteCommand(); + LogFactory.GetLog("鎻掑叆鏁版嵁鍒癆GV").InfoFormat(true, $"璇锋眰鍙傛暟锛歿JsonConvert.SerializeObject(x)}", ""); + return x; } public ParseMessage GetParse(string x) { - return new ParseMessage() + + if (string.IsNullOrEmpty(x)) { - bDir = x.Substring(0, 1), - bObjID = x.Substring(2, 10), - bReply = x.Substring(11, 1), - bCmdID = x.Substring(12, 3), - nSeqNo = x.Substring(15, 5), - body = new ReceiveBody - { - ret = x.Substring(21, 1), - JobOrderID = x.Substring(22, 16), - priority = x.Substring(39, 1), - FromLocation = x.Substring(40, 6), - ToLocation = x.Substring(47, 6), - JobType = x.Substring(54, 1), - TrayCnt = x.Substring(55, 1), - TrayIdList = x.Substring(56) - }, + throw new ArgumentNullException(nameof(x), "Input string cannot be null or empty"); + } + + // 瀹氫箟鎵�鏈夐渶瑕佺殑瀛楁闀垮害鍜屼綅缃� + var fieldDefinitions = new (int Start, int Length, string Name)[] + { + (0, 1, "bDir"), + (1, 10, "bObjID"), + (11, 1, "bReply"), + (12, 3, "bCmdID"), + (15, 5, "nSeqNo"), + (20, 1, "ret"), + (21, 16, "JobOrderID"), + (37, 1, "priority"), + (38, 6, "FromLocation"), + (44, 6, "ToLocation"), + (50, 1, "JobType"), + (51, 1, "TrayCnt"), + (52, x.Length - 52, "TrayIdList") // 鍙彉闀垮害瀛楁 }; + + // 璁$畻鎵�闇�鏈�灏忛暱搴� + int minLength = fieldDefinitions.Max(f => f.Start + f.Length); + + if (x.Length < minLength) + { + // 濡傛灉瀛楃涓查暱搴︿笉瓒筹紝鍙互閫夋嫨璁板綍璀﹀憡鎴栨棩蹇� + // 杩欓噷鎴戜滑缁х画澶勭悊锛屽敖鍙兘澶氬湴瑙f瀽瀛楁 + } + + // 杈呭姪鏂规硶锛氬畨鍏ㄧ殑瀛愬瓧绗︿覆鎴彇锛岄暱搴︿笉瓒虫椂杩斿洖绌哄瓧绗︿覆 + string SafeSubstringOrDefault(string source, int start, int length, string fieldName) + { + if (start < 0 || start >= source.Length) + { + return ""; // 杩斿洖绌哄瓧绗︿覆 + } + + if (length < 0) + { + return ""; // 杩斿洖绌哄瓧绗︿覆 + } + + if (start + length > source.Length) + { + length = source.Length - start; // 璋冩暣闀垮害浠ラ伩鍏嶈秺鐣� + } + + return source.Substring(start, length); + } + + // 鏋勫缓缁撴灉瀵硅薄 + var result = new ParseMessage(); + + // 璁剧疆鍩烘湰瀛楁 + result.bDir = SafeSubstringOrDefault(x, fieldDefinitions[0].Start, fieldDefinitions[0].Length, fieldDefinitions[0].Name); + result.bObjID = SafeSubstringOrDefault(x, fieldDefinitions[1].Start, fieldDefinitions[1].Length, fieldDefinitions[1].Name); + result.bReply = SafeSubstringOrDefault(x, fieldDefinitions[2].Start, fieldDefinitions[2].Length, fieldDefinitions[2].Name); + result.bCmdID = SafeSubstringOrDefault(x, fieldDefinitions[3].Start, fieldDefinitions[3].Length, fieldDefinitions[3].Name); + result.nSeqNo = SafeSubstringOrDefault(x, fieldDefinitions[4].Start, fieldDefinitions[4].Length, fieldDefinitions[4].Name); + + // 璁剧疆body瀛楁 + result.body = new ReceiveBody + { + ret = SafeSubstringOrDefault(x, fieldDefinitions[5].Start, fieldDefinitions[5].Length, fieldDefinitions[5].Name), + JobOrderID = SafeSubstringOrDefault(x, fieldDefinitions[6].Start, fieldDefinitions[6].Length, fieldDefinitions[6].Name), + priority = SafeSubstringOrDefault(x, fieldDefinitions[7].Start, fieldDefinitions[7].Length, fieldDefinitions[7].Name), + FromLocation = SafeSubstringOrDefault(x, fieldDefinitions[8].Start, fieldDefinitions[8].Length, fieldDefinitions[8].Name), + ToLocation = SafeSubstringOrDefault(x, fieldDefinitions[9].Start, fieldDefinitions[9].Length, fieldDefinitions[9].Name), + JobType = SafeSubstringOrDefault(x, fieldDefinitions[10].Start, fieldDefinitions[10].Length, fieldDefinitions[10].Name), + TrayCnt = SafeSubstringOrDefault(x, fieldDefinitions[11].Start, fieldDefinitions[11].Length, fieldDefinitions[11].Name), + TrayIdList = SafeSubstringOrDefault(x, fieldDefinitions[12].Start, fieldDefinitions[12].Length, fieldDefinitions[12].Name) + }; + + return result; } + public AGVStatusRespone GetAGVStatus() { string urlnew = url + "/ilns/AGV/getState"; @@ -1200,19 +1808,115 @@ public StationStatus GetStationStatus(string stationName) { string urlnew = url + "/ilns/ctrl/getState"; - var result = HttpsClient.PostAsync(urlnew, JsonConvert.DeserializeObject<Dictionary<string, object>>(new { ctrlName = "B001" }.ToJson())).Result; + var result = HttpsClient.PostAsync(urlnew, JsonConvert.DeserializeObject<Dictionary<string, object>>(new { ctrlName = stationName }.ToJson())).Result; return JsonConvert.DeserializeObject<StationStatus>(result.ToString()); } + public void ReportStationErrorMeaage(string StationName) + { + string urlnew = url + "/ilns/setctrlerr"; + var result = HttpsClient.PostAsync(urlnew, JsonConvert.DeserializeObject<Dictionary<string, object>>(new { ctrlName = StationName }.ToJson())).Result; + } + public void ReportAgvErrorMeaage(string ErrorCode) + { + string urlnew = url + "/ilns/rpterr"; + var result = HttpsClient.PostAsync(urlnew, JsonConvert.DeserializeObject<Dictionary<string, object>>(new { code = ErrorCode }.ToJson())).Result; + } + public void AddErrorMessage(string Code, string ReportName, string Location = "") + { + var errorDescription = SqlSugarHelper.DbWMS.Queryable<Dt_ErrorDescription>().Where(x => x.ErrorCode == Code).First(); + if (errorDescription != null) + { + Dt_HostErrorMessage hostErrorMessage = new Dt_HostErrorMessage() + { + ErrorCode = Code, + ErrorMessage = errorDescription.ErrorMessgae, + AlarmSource = errorDescription.AlarmSource, + Grade = errorDescription.Grade, + ReportName = ReportName, + Creater = "System", + Location = Location == "" ? "" : Location, + CreateDate = DateTime.Now, + }; + SqlSugarHelper.DbWMS.Insertable(hostErrorMessage).ExecuteCommand(); + if (Location == "") + { + ReportAgvErrorMeaage(Code); + } + else + { + ReportStationErrorMeaage(Location); + } + + } + else + { + //tode涓嶅瓨鍦ㄥ紓甯窩ode + } + } + public void DeleteHostLog(int CommandID) + { + var hostLog = SqlSugarHelper.DbWMS.Queryable<Dt_HostLog>().Where(x => x.CommandID == CommandID).First(); + if (hostLog != null) + { + SqlSugarHelper.DbWMS.Deleteable(hostLog).ExecuteCommand(); + } + } + + public string StationParse(string station) + { + var Station = SqlSugarHelper.DbWMS.Queryable<Dt_StationManager>().Where(x => x.HostName == station.Substring(4, 2)).First(); + if (Station != null) + { + return Station.stationName; + } + else + { + return ""; + } + } + public string CapitalizeFirstLetter(string s) { + if (s == "Pause") + { + return "S"; + } + else if (s == "PowerOFF") + { + return "O"; + } if (string.IsNullOrEmpty(s)) { return ""; } - char firstChar = s[0]; return char.ToUpper(firstChar).ToString(); } + + public string GetAGVStatus(string Status) + { + switch (Status) + { + case "Run": + return "R"; + case "Idle": + return "I"; + case "Trouble": + //鏁呴殰 + return "T"; + case "Pause": + return "S"; + case "Charge": + return "C"; + case "PowerOn": + return "P"; + case "PowerOFF": + return "O"; + default: break; + } + return "T"; + } + public string InsertHyphenEveryTwoChars(string input) { if (string.IsNullOrEmpty(input)) @@ -1236,165 +1940,27 @@ return result.ToString(); } - #region 澶栭儴鎺ュ彛鏂规硶 - public WebResponseContent CompleteInboundTask(Dt_Task task) + #endregion + + #region 淇敼鏈湴璁$畻鏈烘椂闂� + // 瀹氫箟 System 缁撴瀯浣� + [StructLayout(LayoutKind.Sequential)] + public struct SYSTEMTIME { - WebResponseContent content = new WebResponseContent(); - try - { - _unitOfWorkManage.BeginTran(); - var locationInf = _locationRepository.QueryFirst(x => x.LocationCode == task.TargetAddress); - locationInf.LocationStatus = (int)LocationEnum.InStock; - var stock = new DtStockInfo() - { - PalletCode = task.PalletCode, - LocationCode = task.TargetAddress, - CreateDate = DateTime.Now, - Creater = "system", - LocationId = locationInf.Id, - }; - _stockInfoRepository.AddData(stock); - _locationRepository.UpdateData(locationInf); - TaskMoveHty(task); - _unitOfWorkManage.CommitTran(); - return content.OK(); - } - catch (Exception ex) - { - _unitOfWorkManage.RollbackTran(); - return content.Error(ex.Message); - } + public ushort Year; + public ushort Month; + public ushort DayOfWeek; + public ushort Day; + public ushort Hour; + public ushort Minute; + public ushort Second; + public ushort Milliseconds; } - public WebResponseContent CompleteOutboundTask(Dt_Task task) - { - WebResponseContent content = new WebResponseContent(); - try - { - _unitOfWorkManage.BeginTran(); - var locationInf = _locationRepository.QueryFirst(x => x.LocationCode == task.TargetAddress); - locationInf.LocationStatus = (int)LocationEnum.Free; - var stock = _stockInfoRepository.QueryFirst(x => x.PalletCode == task.PalletCode); - - DtStockInfo_Hty stockInfo_Hty = stock.Adapt<DtStockInfo_Hty>(); - stockInfo_Hty.ModifyDate = DateTime.Now; - - AddStockInfoHty(stockInfo_Hty); - - _stockInfoRepository.DeleteData(stock); - _locationRepository.UpdateData(locationInf); - - TaskMoveHty(task); - - _unitOfWorkManage.CommitTran(); - return content.OK(); - } - catch (Exception ex) - { - _unitOfWorkManage.RollbackTran(); - return content.Error(ex.Message); - } - } - - public WebResponseContent CompleteRelocationboundTask(Dt_Task task) - { - WebResponseContent content = new WebResponseContent(); - try - { - _unitOfWorkManage.BeginTran(); - var locationInf = _locationRepository.QueryFirst(x => x.LocationCode == task.TargetAddress); - var location = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress); - locationInf.LocationStatus = (int)LocationEnum.InStock; - location.LocationStatus = (int)LocationEnum.Free; - - var stock = _stockInfoRepository.QueryFirst(x => x.PalletCode == task.PalletCode); - - stock.LocationCode = locationInf.LocationCode; - stock.LocationId = locationInf.Id; - - - _stockInfoRepository.UpdateData(stock); - _locationRepository.UpdateData(locationInf); - _locationRepository.UpdateData(location); - TaskMoveHty(task); - _unitOfWorkManage.CommitTran(); - return content.OK(); - } - catch (Exception ex) - { - _unitOfWorkManage.RollbackTran(); - return content.Error(ex.Message); - } - } - public WebResponseContent TaskMoveHty(Dt_Task task) - { - WebResponseContent content = new WebResponseContent(); - try - { - _unitOfWorkManage.BeginTran(); - var taskHtyNG = CreateHistoricalTask(task); - var isTaskHtyAdd = _task_HtyRepository.AddData(taskHtyNG) > 0; - var isTaskDelete = Delete(task.TaskId); - var AgvTask = SqlSugarHelper.DbAGV.Queryable<task_call>().Where(x => x.d_involed5 == task.TaskNum).First(); - if (AgvTask != null) - { - SqlSugarHelper.DbAGV.Deleteable(AgvTask).ExecuteCommand(); - } - _unitOfWorkManage.CommitTran(); - return content.OK(); - } - catch (Exception ex) - { - _unitOfWorkManage.RollbackTran(); - return content.Error(ex.Message); - } - } - - #endregion 澶栭儴鎺ュ彛鏂规硶 - - #region private 鍐呴儴鏂规硶 - - /// <summary> - /// 鍒涘缓鍘嗗彶浠诲姟璁板綍 - /// </summary> - /// <param name="task"></param> - /// <returns></returns> - public Dt_Task_Hty CreateHistoricalTask(Dt_Task task, bool isHand = false) - { - task.CurrentAddress = task.NextAddress; - - // 鍒涘缓鍘嗗彶浠诲姟 - var taskHty = _mapper.Map<Dt_Task_Hty>(task); - taskHty.FinishTime = DateTime.Now; - taskHty.TaskId = 0; - taskHty.OperateType = isHand ? (int)OperateTypeEnum.浜哄伐鍒犻櫎 : App.User.UserName != null ? (int)OperateTypeEnum.浜哄伐瀹屾垚 : (int)OperateTypeEnum.鑷姩瀹屾垚; - taskHty.SourceId = task.TaskId; - if (isHand) - { - taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System"; - } - return taskHty; - } - /// <summary> - /// 鍒犻櫎涓�涓换鍔� - /// </summary> - /// <param name="id">浠诲姟ID</param> - /// <returns>鏄惁鍒犻櫎鎴愬姛</returns> - public bool Delete(int id) - { - return BaseDal.Delete(id); - } - private void AddStockInfoHty(DtStockInfo_Hty dtStock) - { - var isStockAdd = SqlSugarHelper.DbWMS.InsertNav(dtStock).IncludesAllFirstLayer().ExecuteCommand(); - if (!isStockAdd) - { - throw new Exception("搴撳瓨鍘嗗彶淇℃伅娣诲姞澶辫触"); - } - } - - #endregion private 鍐呴儴鏂规硶 + // 瀵煎叆 SetLocalTime 鍑芥暟 + [DllImport("kernel32.dll", SetLastError = true)] + public static extern bool SetLocalTime(ref SYSTEMTIME st); #endregion } } \ No newline at end of file -- Gitblit v1.9.3