| | |
| | | using Quartz; |
| | | using HslCommunication; |
| | | using Newtonsoft.Json; |
| | | using Quartz; |
| | | using System.Collections.Concurrent; |
| | | using System.Net.Sockets; |
| | | using System.Text.Json; |
| | | using WIDESEAWCS_Common.HttpEnum; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_Core.Http; |
| | | using WIDESEAWCS_DTO.Stock; |
| | | using WIDESEAWCS_DTO.TaskInfo; |
| | | using WIDESEAWCS_ITaskInfoRepository; |
| | | using WIDESEAWCS_ITaskInfoService; |
| | | using WIDESEAWCS_Model.Models; |
| | |
| | | /// <returns></returns> |
| | | private async Task<string?> _TcpSocket_MessageReceived(string message, bool isJson, TcpClient client, RobotSocketState state) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | string messageLower = message.ToLowerInvariant(); |
| | | |
| | | if (IsSimpleCommand(messageLower, state)) |
| | |
| | | |
| | | if (cmd.StartsWith("pickfinished")) |
| | | { |
| | | state.LastPickPositions = positions; |
| | | state.CurrentAction = "PickFinished"; |
| | | } |
| | | else if (cmd.StartsWith("putfinished")) |
| | | { |
| | | state.LastPutPositions = positions; |
| | | // 发送数据给WMS组盘/换盘 |
| | | StockDTO stockDTO = new StockDTO |
| | | { |
| | | SourceLineNo = state.CurrentTask?.RobotSourceAddressLineCode, |
| | |
| | | TargetPalletNo = state.CurrentTask?.RobotTargetAddressPalletCode, |
| | | TargetLineNo = state.CurrentTask?.RobotTargetAddressLineCode, |
| | | Details = positions |
| | | .Where(x => x > 0) |
| | | .OrderBy(x => x) |
| | | .Select((x, idx) => new StockDetailDTO |
| | | { |
| | | Quantity = state.CurrentTask?.RobotTaskTotalNum ?? 1, |
| | | Channel = x > 0 ? x : throw new ArgumentOutOfRangeException(nameof(x), "Channel must be positive"), |
| | | CellBarcode = state.CellBarcode[idx] |
| | | }) |
| | | .ToList() |
| | | .Where(x => x > 0) |
| | | .OrderBy(x => x) |
| | | .Select((x, idx) => new StockDetailDTO |
| | | { |
| | | Quantity = state.CurrentTask?.RobotTaskTotalNum ?? 1, |
| | | Channel = x > 0 ? x : throw new ArgumentOutOfRangeException(nameof(x), "Channel must be positive"), |
| | | CellBarcode = state.CellBarcode[idx] |
| | | }) |
| | | .ToList() |
| | | }; |
| | | state.CurrentAction = "PutFinished"; |
| | | state.LastPickPositions = positions; |
| | | |
| | | var result = await HttpRequestHelper.HTTPPostAsync(nameof(Category.WMS), stockDTO.ToJsonString(), state.CurrentTask?.RobotTaskType == 2 ? nameof(ConfigKey.ChangePalletAsync) : nameof(ConfigKey.SplitPalletAsync)); |
| | | content = JsonConvert.DeserializeObject<WebResponseContent>(result); |
| | | |
| | | if (content.Status) |
| | | { |
| | | state.CurrentAction = "PickFinished"; |
| | | } |
| | | } |
| | | else if (cmd.StartsWith("putfinished")) |
| | | { |
| | | state.LastPutPositions = positions; |
| | | if (state.CurrentTask?.RobotTaskType == 1) |
| | | { |
| | | // 发送数据给WMS组盘/换盘 |
| | | StockDTO stockDTO = new StockDTO |
| | | { |
| | | SourceLineNo = state.CurrentTask?.RobotSourceAddressLineCode, |
| | | SourcePalletNo = state.CurrentTask?.RobotSourceAddressPalletCode, |
| | | TargetPalletNo = state.CurrentTask?.RobotTargetAddressPalletCode, |
| | | TargetLineNo = state.CurrentTask?.RobotTargetAddressLineCode, |
| | | Details = positions |
| | | .Where(x => x > 0) |
| | | .OrderBy(x => x) |
| | | .Select((x, idx) => new StockDetailDTO |
| | | { |
| | | Quantity = state.CurrentTask?.RobotTaskTotalNum ?? 1, |
| | | Channel = x > 0 ? x : throw new ArgumentOutOfRangeException(nameof(x), "Channel must be positive"), |
| | | CellBarcode = state.CellBarcode[idx] |
| | | }) |
| | | .ToList() |
| | | }; |
| | | var result = await HttpRequestHelper.HTTPPostAsync(nameof(Category.WMS), stockDTO.ToJsonString(), nameof(ConfigKey.GroupPalletAsync)); |
| | | content = JsonConvert.DeserializeObject<WebResponseContent>(result); |
| | | |
| | | if (content.Status) |
| | | { |
| | | state.CurrentAction = "PutFinished"; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | case "allpickfinished": |
| | | state.CurrentAction = "AllPickFinished"; |
| | | if(state.CurrentTask?.RobotTaskType == 2|| state.CurrentTask?.RobotTaskType == 3) |
| | | if (state.CurrentTask?.RobotTaskType == 2 || state.CurrentTask?.RobotTaskType == 3) |
| | | { |
| | | // TODO 机械手取货完成,判断是否换盘、拆盘任务,创建空托盘回库任务 |
| | | } |
| | |
| | | |
| | | case "allputfinished": |
| | | state.CurrentAction = "AllPutFinished"; |
| | | if (state.CurrentTask?.RobotTaskType == 1 ) |
| | | if (state.CurrentTask?.RobotTaskType == 1) |
| | | { |
| | | // TODO 机械手取货完成,判断是否组盘任务,创建组盘入库任务 |
| | | CreateTaskDto taskDto = new CreateTaskDto() |
| | | { |
| | | PalletCode = state.CurrentTask?.RobotTargetAddressPalletCode ?? string.Empty, |
| | | SourceAddress = state.CurrentTask?.RobotTargetAddress ?? string.Empty, |
| | | TargetAddress = state.CurrentTask?.RobotTargetAddress ?? string.Empty, |
| | | Roadway = state.CurrentTask?.RobotRoadway == "1" ? "GWSC001" : state.CurrentTask?.RobotRoadway == "2" ? "HCSC001" : "SC001" ?? string.Empty, |
| | | WarehouseId = state.CurrentTask?.RobotRoadway == "1" ? 1 : state.CurrentTask?.RobotRoadway == "2" ? 2 : 3, |
| | | PalletType = 1, |
| | | TaskType = 4 |
| | | }; |
| | | } |
| | | return true; |
| | | |