|  |  |  | 
|---|
|  |  |  | using Newtonsoft.Json; | 
|---|
|  |  |  | using SqlSugar; | 
|---|
|  |  |  | using System.Diagnostics.CodeAnalysis; | 
|---|
|  |  |  | using System.Threading.Tasks; | 
|---|
|  |  |  | using WIDESEAWCS_Common.TaskEnum; | 
|---|
|  |  |  | using WIDESEAWCS_Core; | 
|---|
|  |  |  | using WIDESEAWCS_Core.BaseServices; | 
|---|
|  |  |  | 
|---|
|  |  |  | WebResponseContent content = new WebResponseContent(); | 
|---|
|  |  |  | try | 
|---|
|  |  |  | { | 
|---|
|  |  |  | #region 真实数据 | 
|---|
|  |  |  | #region 请求入库任务巷道 | 
|---|
|  |  |  | // TODO: 调用接口获取下一个地址 | 
|---|
|  |  |  | //// 创建请求对象 | 
|---|
|  |  |  | //RequestTaskDto request = new RequestTaskDto() | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    Position = sourceAddress, | 
|---|
|  |  |  | //    PalletCode = palletCode, | 
|---|
|  |  |  | //}; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //// 发送请求并等待响应 | 
|---|
|  |  |  | //var result = HttpHelper.PostAsync("http:127.0.0.1:8098/api/Task/RequestTaskAsync", request.ToJsonString()).Result; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //// 反序列化响应内容 | 
|---|
|  |  |  | //content = JsonConvert.DeserializeObject<WebResponseContent>(result); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //// 检查状态并返回 | 
|---|
|  |  |  | //if (!content.Status) | 
|---|
|  |  |  | //    return content; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //// 反序列化任务数据 | 
|---|
|  |  |  | //WMSTaskDTO task = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //// 处理任务并返回结果 | 
|---|
|  |  |  | //content = ReceiveWMSTask(new List<WMSTaskDTO> { task }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | WMSTaskDTO taskDTO = new WMSTaskDTO() | 
|---|
|  |  |  | // 创建请求对象 | 
|---|
|  |  |  | RequestTaskDto request = new RequestTaskDto() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), | 
|---|
|  |  |  | Grade = 1, | 
|---|
|  |  |  | Position = sourceAddress, | 
|---|
|  |  |  | PalletCode = palletCode, | 
|---|
|  |  |  | RoadWay = "CHSC01", | 
|---|
|  |  |  | SourceAddress = sourceAddress, | 
|---|
|  |  |  | TargetAddress = "CHSC01", | 
|---|
|  |  |  | TaskState = (int)TaskInStatusEnum.InNew, | 
|---|
|  |  |  | Id = 0, | 
|---|
|  |  |  | TaskType = (int)TaskInboundTypeEnum.Inbound | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); | 
|---|
|  |  |  | // 发送请求并等待响应 | 
|---|
|  |  |  | var result = HttpHelper.PostAsync("http://127.0.0.1:5000/api/Task/RequestTaskAsync", request.ToJsonString()).Result; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 反序列化响应内容 | 
|---|
|  |  |  | content = JsonConvert.DeserializeObject<WebResponseContent>(result); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | WMSTaskDTO task = new WMSTaskDTO(); | 
|---|
|  |  |  | // 检查状态并返回 | 
|---|
|  |  |  | if (!content.Status) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | task = new WMSTaskDTO() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), | 
|---|
|  |  |  | Grade = 1, | 
|---|
|  |  |  | PalletCode = palletCode, | 
|---|
|  |  |  | RoadWay = "CHSC01", | 
|---|
|  |  |  | SourceAddress = sourceAddress, | 
|---|
|  |  |  | TargetAddress = "1020", | 
|---|
|  |  |  | TaskState = (int)TaskOutStatusEnum.Line_OutExecuting, | 
|---|
|  |  |  | Id = 0, | 
|---|
|  |  |  | TaskType = (int)TaskOutboundTypeEnum.Outbound | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Dt_Task task1 = _mapper.Map<Dt_Task>(task); | 
|---|
|  |  |  | task1.CurrentAddress = task.SourceAddress; | 
|---|
|  |  |  | task1.NextAddress = "1020"; | 
|---|
|  |  |  | BaseDal.AddData(task1); | 
|---|
|  |  |  | return content.OK(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | // 反序列化任务数据 | 
|---|
|  |  |  | task = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString()); | 
|---|
|  |  |  | // 处理任务并返回结果 | 
|---|
|  |  |  | content = ReceiveWMSTask(new List<WMSTaskDTO> { task }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 根据设备编号、当前地址查询输送线未执行的任务 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="deviceNo">设备编号</param> | 
|---|
|  |  |  | /// <param name="currentAddress">当前地址</param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public Dt_Task QueryNextConveyorLineTask(string deviceNo, string currentAddress) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.NextAddress == currentAddress, TaskOrderBy); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// 根据托盘号、当前地址查询输送线未执行的任务 | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | /// <param name="Barcode">托盘号</param> | 
|---|
|  |  |  | /// <param name="currentAddress">当前地址</param> | 
|---|
|  |  |  | /// <returns></returns> | 
|---|
|  |  |  | public Dt_Task QueryBarCodeConveyorLineTask(string Barcode, string currentAddress) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress && x.PalletCode == Barcode, TaskOrderBy); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Random random = new Random(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region 入库调用接口获取货位地址 | 
|---|
|  |  |  | // TODO: 调用接口获取货位地址 | 
|---|
|  |  |  | // 创建请求对象 | 
|---|
|  |  |  | RequestTaskDto taskDto = new RequestTaskDto() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Position = task.NextAddress, | 
|---|
|  |  |  | PalletCode = task.PalletCode, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 发送请求并等待响应 | 
|---|
|  |  |  | var abc = HttpHelper.PostAsync("http://127.0.0.1:5000/api/Task/RequestLocationTaskAsync", taskDto.ToJsonString()).Result; | 
|---|
|  |  |  | if (abc == null) | 
|---|
|  |  |  | return content.Error(); | 
|---|
|  |  |  | // 反序列化响应内容 | 
|---|
|  |  |  | content = JsonConvert.DeserializeObject<WebResponseContent>(abc); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 检查状态并返回 | 
|---|
|  |  |  | if (!content.Status) | 
|---|
|  |  |  | return content; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 反序列化任务数据 | 
|---|
|  |  |  | WMSTaskDTO taskResult = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | task.CurrentAddress = task.NextAddress; | 
|---|
|  |  |  | task.NextAddress = $"{random.Next(1, 1).ToString().PadLeft(3, '0')}-{random.Next(1, 1).ToString().PadLeft(3, '0')}-{random.Next(1, 1).ToString().PadLeft(3, '0')}"; | 
|---|
|  |  |  | task.NextAddress = taskResult.TargetAddress; | 
|---|
|  |  |  | task.TargetAddress = task.NextAddress; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region 真实数据 | 
|---|
|  |  |  | // TODO: 调用接口获取下一个地址 | 
|---|
|  |  |  | //// 创建请求对象 | 
|---|
|  |  |  | //RequestTaskDto request = new RequestTaskDto() | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    Position = task.NextAddress, | 
|---|
|  |  |  | //    PalletCode = task.PalletCode, | 
|---|
|  |  |  | //}; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //// 发送请求并等待响应 | 
|---|
|  |  |  | //var result = HttpHelper.PostAsync("http:127.0.0.1:8098/api/Task/RequestTaskAsync", request.ToJsonString()).Result; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //// 反序列化响应内容 | 
|---|
|  |  |  | //content = JsonConvert.DeserializeObject<WebResponseContent>(result); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //// 检查状态并返回 | 
|---|
|  |  |  | //if (!content.Status) | 
|---|
|  |  |  | //    return content; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //// 反序列化任务数据 | 
|---|
|  |  |  | //WMSTaskDTO taskResult = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //task.CurrentAddress = task.NextAddress; | 
|---|
|  |  |  | //task.NextAddress = taskResult.TargetAddress; | 
|---|
|  |  |  | //task.TargetAddress = task.NextAddress; | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | BaseDal.UpdateData(task); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, App.User.UserId > 0 ? $"人工手动将任务状态从【{oldState}】跳转到【{task.TaskState}】" : $"系统自动流程,任务状态从【{oldState}】转到【{task.TaskState}】"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region  更新任务状态 | 
|---|
|  |  |  | object request = new | 
|---|
|  |  |  | { | 
|---|
|  |  |  | TaskNum = task.TaskNum, | 
|---|
|  |  |  | TaskState = task.TaskState | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | var result = HttpHelper.PostAsync("http://127.0.0.1:5000/api/Task/UpdateTaskStatus", request.ToJsonString()).Result; | 
|---|
|  |  |  | content = JsonConvert.DeserializeObject<WebResponseContent>(result); | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  |  | 
|---|
|  |  |  | content = WebResponseContent.Instance.OK(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | BaseDal.UpdateData(task); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机出库完成"); | 
|---|
|  |  |  | //todo 同步到WMS | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //暂不考虑多个出库口 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | //todo | 
|---|
|  |  |  | //todo 同步到WMS | 
|---|
|  |  |  | int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); | 
|---|
|  |  |  | task.TaskState = nextStatus; | 
|---|
|  |  |  | task.ModifyDate = DateTime.Now; | 
|---|
|  |  |  | 
|---|
|  |  |  | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"堆垛机入库完成"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //var x = new { taskNum = taskNum }; | 
|---|
|  |  |  | //var result = HttpHelper.GetAsync("http:127.0.0.1:8098/api/Task/CompleteTaskAsync", x.ToJsonString()).Result; | 
|---|
|  |  |  | //content = JsonConvert.DeserializeObject<WebResponseContent>(result); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //WMSTaskDTO taskDTO = new WMSTaskDTO() | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    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 | 
|---|
|  |  |  | //}; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | throw new Exception($"任务类型错误,未找到该任务类型,任务号:【{taskNum}】,任务类型:【{task.TaskType}】"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #region WMS同步任务完成 | 
|---|
|  |  |  | var keys = new Dictionary<string, object>() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | {"taskNum", taskNum} | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | var result = HttpHelper.GetAsync($"http://127.0.0.1:5000/api/Task/CompleteTaskAsync", keys).Result; | 
|---|
|  |  |  | content = JsonConvert.DeserializeObject<WebResponseContent>(result); | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  | #region  更新任务状态 | 
|---|
|  |  |  | object request = new | 
|---|
|  |  |  | { | 
|---|
|  |  |  | TaskNum = task.TaskNum, | 
|---|
|  |  |  | TaskState = task.TaskState | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | result = HttpHelper.PostAsync("http://127.0.0.1:5000/api/Task/UpdateTaskStatus", request.ToJsonString()).Result; | 
|---|
|  |  |  | content = JsonConvert.DeserializeObject<WebResponseContent>(result); | 
|---|
|  |  |  | #endregion | 
|---|
|  |  |  | //content = WebResponseContent.Instance.OK(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|