using MailKit.Search; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; using Org.BouncyCastle.Math.EC; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Reflection.Metadata; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.Log; using WIDESEA_Common.TaskEnum; using WIDESEA_Core; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_DTO.Inbound; using WIDESEA_DTO.Task; using WIDESEA_Model.Models; using static WIDESEA_ITaskInfoService.ITaskService; namespace WIDESEA_TaskInfoService { public partial class TaskService { //输送线任务下发 public WCSginseng PLC_IssueTasks(int TaskId,int AreaNo,string TransNo, string ContainerNo,int ContainerType,string FromPoint,string ToPoint,string ToStation) { WCSginseng WCS_Parame = new WCSginseng(); try { WCStask wcstaskinfo = new WCStask(); wcstaskinfo.TaskId = TaskId; wcstaskinfo.AreaNo = AreaNo; wcstaskinfo.TransNo = TransNo; wcstaskinfo.ContainerNo = ContainerNo; wcstaskinfo.ContainerType = ContainerType; wcstaskinfo.FromPoint = FromPoint; wcstaskinfo.ToPoint = ToPoint; wcstaskinfo.ToStation = ToStation; WriteLog.Write_Log("WCS_输送线任务下发", $"任务下发信息", "成功,下发参数", $"下发的参数:{wcstaskinfo.ToJson()}"); WCS_Parame = HttpHelper.Post(WCS_SendConveyorTask, wcstaskinfo, "输送线任务下发"); WriteLog.Write_Log("WCS_输送线任务下发", $"任务下发信息", "成功,回参", $"wcs回参:{WCS_Parame.ToJson()}"); return WCS_Parame; } catch (Exception ex) { WCS_Parame.IsSuccess = false; WCS_Parame.Code = "-1"; WCS_Parame.Message = $"输送线任务调取下发失败:WMS系统下发任务失败,任务号:{TaskId},原因:{ex.Message}"; WriteLog.Write_Log("WCS_输送线任务下发", $"任务下发信息", "失败", $"输送线任务调取下发失败:WMS系统下发任务失败,任务号:{TaskId},原因:{ex.Message}"); return WCS_Parame; } } //堆垛机任务下发 public WCSginseng SC_IssueTasks(int TaskId, int AreaNo, string TransNo, string ContainerNo, int ContainerType, string FromPoint, string ToPoint, string ToStation) { WCSginseng WCS_Parame = new WCSginseng(); try { WCStask wcstaskinfo = new WCStask(); wcstaskinfo.TaskId = TaskId; wcstaskinfo.AreaNo = AreaNo; wcstaskinfo.TransNo = TransNo; wcstaskinfo.ContainerNo = ContainerNo; wcstaskinfo.ContainerType = ContainerType; wcstaskinfo.FromPoint = FromPoint; wcstaskinfo.ToPoint = ToPoint; wcstaskinfo.ToStation = ToStation; WriteLog.Write_Log("WCS_堆垛机任务下发", $"任务下发信息", "成功,下发参数", $"下发的参数:{wcstaskinfo.ToJson()}"); WCS_Parame = HttpHelper.Post(WCS_SendStackerTask, wcstaskinfo, "堆垛机任务下发"); WriteLog.Write_Log("WCS_堆垛机任务下发", $"任务下发信息", "成功,回参", $"wcs回参:{WCS_Parame.ToJson()}"); return WCS_Parame; } catch (Exception ex) { WCS_Parame.IsSuccess = false; WCS_Parame.Code = "-1"; WCS_Parame.Message = $"堆垛机任务调取下发失败:WMS系统下发任务失败,任务号:{TaskId},原因:{ex.Message}"; WriteLog.Write_Log("WCS_堆垛机任务下发", $"任务下发信息", "失败", $"堆垛机任务调取下发失败:WMS系统下发任务失败,任务号:{TaskId},原因:{ex.Message}"); return WCS_Parame; } } //WCS获取任务进行反馈 public WebResponseContent PalletInboundTask(WCSTaskDTO wCSTask) { WriteLog.Write_Log("WCS_输送线请求入库", $"任务信息", "接收参数", $"参数:{wCSTask.ToJson()}"); WebResponseContent webResponse = new WebResponseContent(); try { Dt_Task task = BaseDal.QueryData(x => x.PalletCode == wCSTask.PalletCode).FirstOrDefault(); if (task == null) return webResponse.Error($"未找到任务信息,托盘条码:{wCSTask.PalletCode}"); //Dt_Task Outtask = BaseDal.QueryData(x => x.TargetAddress == task.SourceAddress).FirstOrDefault(); // 处理地址转换 string targetAddress = wCSTask.FromPoint; if (targetAddress == "1104") { targetAddress = "1103"; } else if (targetAddress == "1102") { targetAddress = "1101"; } Dt_Task Outtask = BaseDal.QueryData(x => x.TargetAddress == targetAddress).FirstOrDefault(); if (Outtask != null) return webResponse.Error($"当前已有来该目标位置{wCSTask.FromPoint}的任务,不可进行入库,托盘条码:{wCSTask.PalletCode}", 501); if (task.PalletType != wCSTask.ContainerType.ToString()) { return webResponse.Error($"托盘类型不匹配,当前任务中托盘类型为:{task.PalletType},WCS上报类型为:{wCSTask.ContainerType},托盘条码:{wCSTask.PalletCode}", 502); } // 任务重发 if (task.TaskStatus == (int)InTaskStatusEnum.PLC_InExecuting) { WCStask wcstaskinfo = new WCStask(); wcstaskinfo.TaskId = task.TaskId; wcstaskinfo.AreaNo = int.Parse(task.Roadway); wcstaskinfo.TransNo = task.TaskNum; wcstaskinfo.ContainerNo = task.PalletCode; wcstaskinfo.ContainerType = int.Parse(task.PalletType); wcstaskinfo.FromPoint = wCSTask.FromPoint; wcstaskinfo.ToPoint = task.NextAddress; wcstaskinfo.ToStation = ""; WriteLog.Write_Log("WCS_输送线请求入库", $"任务信息", $"返回输送线任务信息", $"返回给输送线的任务信息:{wcstaskinfo.ToJson()}"); return webResponse.OK(data: wcstaskinfo); } if (task.TargetAddress!="" && task.TargetAddress!=null) { int taskcount = BaseDal.QueryData(x => x.TargetAddress == task.TargetAddress && x.PalletCode != task.PalletCode).Count(); if (taskcount > 0) return webResponse.Error($"当前已有去该目标位置的任务了,不可下发!!!"); } // 上传EMS if (task.TaskStatus == (int)InTaskStatusEnum.InNew) { task.TaskStatus = (int)InTaskStatusEnum.PLC_InExecuting; task.Dispatchertime = DateTime.Now; MES_parameter mES_Parameter = InStoreDocCallback(task.TaskNum, "Start", "操作成功", task.PalletCode, ""); if (mES_Parameter.Result == "Y") //记得改回来 { WCStask wcstaskinfo = new WCStask(); wcstaskinfo.TaskId = task.TaskId; wcstaskinfo.AreaNo = int.Parse(task.Roadway); wcstaskinfo.TransNo = task.TaskNum; wcstaskinfo.ContainerNo = task.PalletCode; wcstaskinfo.ContainerType = int.Parse(task.PalletType); wcstaskinfo.FromPoint = wCSTask.FromPoint; wcstaskinfo.ToPoint = task.NextAddress; wcstaskinfo.ToStation = ""; //进行修改数据库 BaseDal.UpdateData(task); WriteLog.Write_Log("WCS_输送线请求入库", $"任务信息", "返回输送线任务信息", $"返回给输送线的任务信息:{wcstaskinfo.ToJson()}"); return webResponse.OK(data: wcstaskinfo); } else { return webResponse.Error("上传MES失败,原因:" + mES_Parameter.ResultMsg); } } else { return webResponse.Error($"下发输送线任务失败,当前托盘条码:{task.PalletCode},不在新建中,不可重复下发"); } } catch (Exception ex) { WriteLog.Write_Log("WCS_输送线请求入库", $"任务信息", "失败", $"任务获取失败,wms系统故障,原因:{ex.Message}"); return webResponse.Error("任务获取失败,wms系统故障,原因:" + ex.Message); } } } }