From 6c8b4c256053c61e848c3f9dd494feebf6ef0cea Mon Sep 17 00:00:00 2001 From: huangxiaoqiang <1247017146@qq.com> Date: 星期三, 21 五月 2025 14:25:50 +0800 Subject: [PATCH] 1 --- 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageSocketServices/SocketClientService.cs | 259 ++++++++++++++++++++++++++++++++------------------- 1 files changed, 162 insertions(+), 97 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 898832d..8caa053 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" @@ -1,35 +1,24 @@ 锘縰sing LogLibrary.Log; using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -using MimeKit; using Newtonsoft.Json; -using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; -using Org.BouncyCastle.Tls; -using System; using System.Net; using System.Net.Sockets; using System.Reflection; using System.Text; using WIDESEA_Common; using WIDESEA_Core; -using WIDESEA_Core.BaseServices; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; -using WIDESEA_Core.Middlewares; using WIDESEA_DTO.AGV; using WIDESEA_DTO; -using WIDESEA_IServices; using WIDESEA_IStorageBasicRepository; using WIDESEA_IStorageSocketServices; using WIDESEA_IStorageTaskRepository; -using WIDESEA_IStorageTaskServices; using WIDESEA_Model.Models.AGV; using WIDESEA_Model.Models; using WIDESEAWCS_BasicInfoRepository; -//using static MailKit.Telemetry; using WIDESEAWCS_Model.Models; -using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; using WIDESEA_Core.BaseRepository; using AutoMapper; using Mapster; @@ -55,11 +44,10 @@ private readonly ILocationInfoRepository _locationRepository; - public SocketClientService(/*IDt_TaskService taskService*/IDt_TaskRepository TaskRepository, IDt_StationManagerRepository stationManagerRepository, ILogger<SocketClientService> logger) + public SocketClientService(IDt_TaskRepository TaskRepository, IDt_StationManagerRepository stationManagerRepository, ILogger<SocketClientService> logger) { - //_taskService = taskService; - BaseDal= TaskRepository; - _stationManagerRepository= stationManagerRepository; + BaseDal = TaskRepository; + _stationManagerRepository = stationManagerRepository; _logger = logger; } @@ -153,7 +141,7 @@ } else { - LogFactory.GetLog("Socket鎺ユ敹鏁版嵁").Error(true, "鏃犳晥鎶ユ枃鏍煎紡"); + LogFactory.GetLog("Socket鎺ユ敹鏁版嵁").Error(true, $"鏃犳晥鎶ユ枃鏍煎紡:{JsonConvert.SerializeObject(Y)}"); } } catch @@ -172,13 +160,13 @@ ReceiveCommandResponse(x); break; case "906": - AGVJobStartOrEndResponse(x.Substring(21, 1),x.Substring(22,1)); + AGVJobStartOrEndResponse(x.Substring(21, 1), x.Substring(22, 1)); break; case "902": DataReportResponse(x.Substring(21, 1)); break; case "935": - DeviceStationStatusInvite(); + DeviceStationStatusInvite(x.Substring(15, 5)); break; case "103": HOSTOutBoundTask(x); @@ -240,7 +228,7 @@ public void clientSend(byte[] buffer) { var Y = Encoding.UTF8.GetString(buffer); - LogFactory.GetLog("Socket鍙戦�佹暟鎹�").Error(true, Y); + LogFactory.GetLog("Socket鍙戦�佹暟鎹�").Info(true, Y); socket.Send(buffer); } @@ -249,7 +237,7 @@ int sum = 0; try { - for (int i = 0; i < x.Length-2; i++) + for (int i = 0; i < x.Length - 2; i++) { sum += x[i]; } @@ -285,7 +273,7 @@ /// <summary> /// 璁惧缂栧彿 /// </summary> - public const string DeviceID = "0000000001"; + public const string DeviceID = "0013130010"; /// <summary> /// 鍙戦�佷笉闇�瑕佸洖澶� /// </summary> @@ -348,7 +336,7 @@ { try { - string str = SendandReply + "101" + BaseDal.GetSeqNo().Result.ToString() + GetFieldsAsString(Agvstatus) + GetListStringOutStation(outStations) + "1" + GetFieldsAsString(inStation); + string str = SendandReply + "101" + BaseDal.GetSeqNo().Result.ToString("D5") + GetFieldsAsString(Agvstatus) + GetListStringOutStation(outStations) + "1" + GetFieldsAsString(inStation); clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) @@ -366,7 +354,7 @@ { try { - string str = SendandReply + "925" + BaseDal.GetSeqNo().Result.ToString(); + string str = SendandReply + "925" + BaseDal.GetSeqNo().Result.ToString("D5"); clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) @@ -384,7 +372,7 @@ { try { - string str = SendNotReply + "915" + BaseDal.GetSeqNo().Result.ToString() + Command; + string str = SendNotReply + "915" + BaseDal.GetSeqNo().Result.ToString("D5") + Command; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) @@ -403,7 +391,7 @@ { try { - string str = SendNotReply + "913" + BaseDal.GetSeqNo().Result.ToString() + Status; + string str = SendNotReply + "913" + BaseDal.GetSeqNo().Result.ToString("D5") + Status; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) @@ -422,7 +410,7 @@ { try { - string str = SendNotReply + "917" + BaseDal.GetSeqNo().Result.ToString() + Status; + string str = SendNotReply + "917" + BaseDal.GetSeqNo().Result.ToString("D5") + Status; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) @@ -444,7 +432,7 @@ { try { - string str = SendandReply + "905" + BaseDal.GetSeqNo().Result.ToString() + Status + JobOrderID + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; + string str = SendandReply + "905" + BaseDal.GetSeqNo().Result.ToString("D5") + Status + JobOrderID + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) @@ -467,7 +455,7 @@ { try { - string str = SendNotReply + "907" + BaseDal.GetSeqNo().Result.ToString() + Status + JobOrderID + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; + string str = SendNotReply + "907" + BaseDal.GetSeqNo().Result.ToString("D5") + Status + JobOrderID + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) @@ -489,7 +477,7 @@ { try { - string str = SendandReply + "901" + BaseDal.GetSeqNo().Result.ToString() + "0" + JobOrderID + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; + string str = SendandReply + "901" + BaseDal.GetSeqNo().Result.ToString("D5") + "0" + JobOrderID + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) @@ -507,11 +495,14 @@ /// <param name="TaskType">浠诲姟绫诲瀷 I鍏ュ簱銆丱鍑哄簱銆丼绔欏彴鍒扮珯鍙般�丷绉诲簱</param> /// <param name="PallteCode">鎵樼洏鍙�</param> /// <returns></returns> - public void DeviceStationStatusReport(HOSTAGVStatus Agvstatus, List<OutStationStatus> outStations, List<InStationStatus> inStation) + public void DeviceStationStatusReport(HOSTAGVStatus Agvstatus, List<OutStationStatus> outStations, List<InStationStatus> inStation, string sGetSeqNo) { try { - string str = SendNotReply + "936" + BaseDal.GetSeqNo().Result.ToString() + GetFieldsAsString(Agvstatus) + GetListStringOutStation(outStations) + GetListStringInStation(inStation); + var agvstatus = GetFieldsAsString(Agvstatus); + var outstation = GetListStringOutStation(outStations); + var instation = GetListStringInStation(inStation); + string str = SendNotReply + "936" + sGetSeqNo + agvstatus + outstation + OutStationSpare2 + "2" + instation; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) @@ -532,7 +523,7 @@ { try { - string str = SendandReply + "105" + BaseDal.GetSeqNo().Result.ToString() + "R" + JobOrderID + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; + string str = SendandReply + "105" + BaseDal.GetSeqNo().Result.ToString("D5") + "R" + JobOrderID + priority + FormLocation + ToLocation + TaskType + TrayCnt + PallteCode; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) @@ -552,7 +543,7 @@ { try { - string str = SendNotReply + "985" + BaseDal.GetSeqNo().Result.ToString() + Trouble + Level + Location; + string str = SendNotReply + "985" + BaseDal.GetSeqNo().Result.ToString("D5") + Trouble + Level + Location; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) @@ -571,7 +562,7 @@ { try { - string str = SendNotReply + "104" + BaseDal.GetSeqNo().Result.ToString() + Statues; + string str = SendNotReply + "104" + BaseDal.GetSeqNo().Result.ToString("D5") + Statues; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) @@ -592,7 +583,7 @@ { try { - string str = SendandReply + "107" + BaseDal.GetSeqNo().Result.ToString() + "1" + JobOrderID + priority + FormLocation + ToLocation + "O" + TrayCnt + PallteCode; + string str = SendandReply + "107" + BaseDal.GetSeqNo().Result.ToString("D5") + "1" + JobOrderID + priority + FormLocation + ToLocation + "O" + TrayCnt + PallteCode; clientSend(MakeStringToByteMsg(str)); } catch (Exception ex) @@ -608,7 +599,8 @@ /// <param name="AgvStatus"></param> public void DeviceStatusReportResponse(HOSTAGVStatus AgvStatus, string X, string Y) { - string str = SendNotReply + "910" + BaseDal.GetSeqNo().Result.ToString() + "1" + GetFieldsAsString(AgvStatus) + X + Y; + string str = SendNotReply + "910" + BaseDal.GetSeqNo().Result.ToString("D5") + GetFieldsAsString(AgvStatus) + X + Y; + clientSend(MakeStringToByteMsg(str)); } #endregion @@ -626,12 +618,24 @@ { //OK case "0": - //UpdateTaskLocation(parseMessage); - InsertWMSTask(parseMessage); - Thread.Sleep(500); - //915 - JobReady("0"); - break; + 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; @@ -696,7 +700,7 @@ { JobStartOrEnd("E", task.SourceAddress, task.TargetAddress, "O", task.PalletCode); } - CompleteInboundTask(task); + CompleteInboundTask(task); break; case (int)TaskOutboundTypeEnum.Outbound: //鍑哄簱 @@ -742,15 +746,29 @@ { //OK case "0": - var task = InsertWMSTask(parseMessage); - BaseDal.AddData(task); - InsertAGVTask(task); - Thread.Sleep(500); - //915 - JobReady("0"); - Thread.Sleep(500); - //104 - DeviceReceiveJobResponse("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; + } + break; default: break; @@ -767,44 +785,47 @@ /// HOST璁惧鐘舵�佽幏鍙� 宸ュ簭935 /// </summary> /// <param name="message"></param> - public void DeviceStationStatusInvite() + public void DeviceStationStatusInvite(string sSeqNo) { try { //鍥炲936 - List<Dt_StationManager> Instation = _stationManagerRepository.QueryData(x => x.stationType == 1).ToList(); - List<Dt_StationManager> Outstation = _stationManagerRepository.QueryData(x => x.stationType == 2).ToList(); List<OutStationStatus> outStationStatus = new List<OutStationStatus>(); List<InStationStatus> inStationStatus = new List<InStationStatus>(); - foreach (var item in Instation) + StationStatus stationIn = GetStationStatus("B002"); + + inStationStatus.Add(new InStationStatus() { - inStationStatus.Add(new InStationStatus() - { - StationName = item.stationName, - StationEnable = item.stationStatus, - IsDistributionTask = item.stationHasTask, - PallteCode = "0000000000", - }); - } - foreach (var item in Outstation) + StationName = "02", + StationEnable = stationIn.WorkstationO == "1" ? "0" : "1", + IsDistributionTask = "0", + PallteCode = "0000000000", + }); + inStationStatus.Add(new InStationStatus() { - StationStatus station = GetStationStatus(item.stationName); - var taskStation = BaseDal.QueryFirst(x => x.SourceAddress == item.stationName || x.TargetAddress == item.stationName); - outStationStatus.Add(new OutStationStatus() - { - StationName = item.stationName, - StationEnable = station.StationEnable == "1" ? "0" : "1", - IsDistributionTask = taskStation == null ? "0" : "1", - Spare1 = "00" - }); - //outStationStatus.Add(new OutStationStatus() - //{ - // StationName = item.stationName, - // StationEnable = item.stationStatus, - // IsDistributionTask = item.stationHasTask, - // Spare1 = "00" - //}); - } + 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() + { + 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" + }); AGVStatusRespone status = GetAGVStatus(); HOSTAGVStatus AgvStatus = new HOSTAGVStatus() { @@ -812,7 +833,7 @@ AutoStatus = status.AutoStatus == "MaintenanceMode" ? "1" : "0", Ready = status.AutoStatus == "MaintenanceMode" ? "0" : "1", }; - DeviceStationStatusReport(AgvStatus, outStationStatus, inStationStatus); + DeviceStationStatusReport(AgvStatus, outStationStatus, inStationStatus, sSeqNo); } catch (Exception) { @@ -875,13 +896,16 @@ /// </summary> public void DeviceStatusReportRequest() { + AGVStatusRespone status = GetAGVStatus(); + HOSTAGVStatus AgvStatus = new HOSTAGVStatus() { - RuntimeStatus = "R", - AutoStatus = "1", - Ready = "1" + RuntimeStatus = CapitalizeFirstLetter(status.RuntimeStatus), + AutoStatus = status.AutoStatus == "MaintenanceMode" ? "1" : "0", + Ready = status.AutoStatus == "MaintenanceMode" ? "0" : "1", }; string axis = "000000"; + DeviceStatusReportResponse(AgvStatus, axis, axis); } #endregion @@ -899,7 +923,6 @@ { byte[] byt = Encoding.UTF8.GetBytes(Message); // 浣跨敤 UTF-8 閬垮厤缂栫爜闂 - LogFactory.GetLog("璇锋眰鎵樼洏浠诲姟").Error(true, BitConverter.ToString(byt)); string checksum = GetCheckSum(byt); string str = Message + checksum; @@ -921,6 +944,8 @@ // 澶嶅埗鍘熷鏁扮粍鐨勬墍鏈夋暟鎹埌鏂版暟缁勭殑涓棿閮ㄥ垎 Array.Copy(buffer, 0, newArray, 1, buffer.Length); + //var parseMessage = GetParse(str); + LogFactory.GetLog("Socket鍙戦�佹姤鏂�").Info(true, str); return newArray; } catch (Exception ex) @@ -928,17 +953,13 @@ throw new Exception(ex.Message); } } - //public bool IsOnline() - //{ - - //} public string GetListStringOutStation(List<OutStationStatus> outStationStatus) { return string.Join("", outStationStatus.Select(status => $"{status.StationName}{status.StationEnable}{status.IsDistributionTask}{status.Spare1}")); } public string GetListStringInStation(List<InStationStatus> inStationStatus) { - return string.Join("", inStationStatus.Select(status => $"{status.StationName}{status.StationEnable}{status.IsDistributionTask}{status.Spare1}")); + return string.Join("", inStationStatus.Select(status => $"{status.StationName}{status.StationEnable}{status.IsDistributionTask}{status.IsHasPallte}{status.Spare1}{status.StationPallteCount}{status.PallteCode}{status.Spare2}")); } /// <summary> /// 灏嗗璞″�煎嚟鎷兼帴 @@ -1032,6 +1053,8 @@ } else { + + Console.WriteLine("鏍¢獙澶辫触锛�"); return null; } @@ -1113,12 +1136,32 @@ /// <returns></returns> private int InsertAGVTask(Dt_Task task) { + string SourceAddress = string.Empty; + string TargetAddress = string.Empty; + if (task.TaskType == (int)TaskInboundTypeEnum.Inbound) + { + TargetAddress = InsertHyphenEveryTwoChars(task.TargetAddress); + } + else if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound) + { + SourceAddress = InsertHyphenEveryTwoChars(task.SourceAddress); + } + else if (task.TaskType == (int)TaskRelocationTypeEnum.Relocation) + { + TargetAddress = InsertHyphenEveryTwoChars(task.TargetAddress); + SourceAddress = InsertHyphenEveryTwoChars(task.SourceAddress); + } + else if (task.TaskType == (int)TaskStationTypeEnum.StationToStation) + { + TargetAddress = task.TargetAddress; + SourceAddress = task.SourceAddress; + } task_call task_Call = new task_call() { d_task_type = task.TaskType == (int)TaskTypeEnum.Inbound ? 1 : 2, d_floor = 1, - d_involed1 = task.SourceAddress, - d_involed2 = task.TargetAddress, + d_involed1 = SourceAddress, + d_involed2 = TargetAddress, d_involed5 = task.TaskNum, }; @@ -1148,7 +1191,7 @@ } public AGVStatusRespone GetAGVStatus() { - string urlnew = url + "/ilns/AGV/getAgvState"; + string urlnew = url + "/ilns/AGV/getState"; var result = HttpsClient.PostAsync(urlnew, JsonConvert.DeserializeObject<Dictionary<string, object>>(new { getStatus = "1" }.ToJson())).Result; return JsonConvert.DeserializeObject<AGVStatusRespone>(result.ToString()); @@ -1156,8 +1199,8 @@ public StationStatus GetStationStatus(string stationName) { - string urlnew = url + "/ilns/strl/getStat"; - var result = HttpsClient.PostAsync(urlnew, JsonConvert.DeserializeObject<Dictionary<string, object>>(new { strlName = stationName }.ToJson())).Result; + string urlnew = url + "/ilns/ctrl/getState"; + var result = HttpsClient.PostAsync(urlnew, JsonConvert.DeserializeObject<Dictionary<string, object>>(new { ctrlName = "B001" }.ToJson())).Result; return JsonConvert.DeserializeObject<StationStatus>(result.ToString()); } public string CapitalizeFirstLetter(string s) @@ -1170,7 +1213,29 @@ char firstChar = s[0]; return char.ToUpper(firstChar).ToString(); } + public string InsertHyphenEveryTwoChars(string input) + { + if (string.IsNullOrEmpty(input)) + { + return input; + } + StringBuilder result = new StringBuilder(); + + for (int i = 0; i < input.Length; i += 2) + { + // 娣诲姞涓や釜瀛楃 + result.Append(input.Substring(i, 2)); + + // 濡傛灉涓嶆槸鏈�鍚庝袱涓瓧绗︼紝娣诲姞涓�涓繛瀛楃 + if (i + 2 < input.Length) + { + result.Append('-'); + } + } + + return result.ToString(); + } #region 澶栭儴鎺ュ彛鏂规硶 public WebResponseContent CompleteInboundTask(Dt_Task task) -- Gitblit v1.9.3