//using HslCommunication; //using Newtonsoft.Json; //using System; //using System.Collections.Generic; //using System.Linq; //using System.Text; //using System.Threading; //using WIDESEA_Common; //using WIDESEA_Common.CutomerModel; //using WIDESEA_Common.TaskEnum; //using WIDESEA_Common.Tools; //using WIDESEA_Core.Utilities; //using WIDESEA_Entity.DomainModels; //using WIDESEA_Services; //using WIDESEA_Services.IRepositories; //using WIDESEA_Services.Repositories; //using WIDESEA_Services.Services; //using WIDESEA_WCS.WCSClient; //namespace WIDESEA_WCS.Jobs.ConveyorLine.OutboundArea //{ // public partial class OutboundAreaDispatch // { // /// // /// 出库的层 // /// // private static List OutboundStationLayerNo = new List() { "60101", "60102", "60103", "60104", "60105", "60106", "60107" }; // //入库托盘申请站台 // private static string ReInboundRequestStationNo = "90101"; // //出库站台交互 // //private static string OutboundStationNo = "90201"; // //提升机编号 // private static string hoisterResultNo = "90100"; // /// // /// 出库区调度 // /// // /// // /// // public static string currentModel = "Inbound"; // static int flag = 0; // public static void OutboundAreaDispathAction(IDt_TaskWCSinfoRepository taskWCSinfoRepository, IDt_TaskRGVinfoRepository taskRGVinfoRepository, PLCClient client) // { // try // { // //出库完成 // OutboundCompleteAction(taskWCSinfoRepository, client); //压装出库口任务完成 // //空托入库申请(生成了空托入库任务) // InboundRequestAction(taskWCSinfoRepository, taskRGVinfoRepository, client); // //测试阶段注释的内容(后续需要使用的) // //增加补丁.增加车存储中有问题.再写 // int logicValue = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_Logic.ToString(), "OutboundArea").ToString()); // if (logicValue == 4) // { // string rfidResult = client.ReadValue(CLineInfoDBName.W_Line_Barcode.ToString(), "OutboundArea").ToString(); // if (!string.IsNullOrEmpty(rfidResult) && !"0".Equals(rfidResult)) // { // Dt_TaskWCSinfo wcsInfo = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == rfidResult // && (r.wcstask_state == TaskState.TaskState_Empty_Out_Line_Executing.ToString() // || r.wcstask_state == TaskState.TaskState_Box_Out_Line_Executing.ToString())); // if (null != wcsInfo) // { // //提升机层 // string hoisterLayer = client.ReadValue(CLineInfoDBName.R_Line_Layer.ToString(), hoisterResultNo).ToString(); // string[] locationArray = wcsInfo.wcstask_startLocation.Split('-'); // if (int.Parse(locationArray[0]).ToString() == hoisterLayer) // { // Dt_TaskRGVinfo rgvTask = taskRGVinfoRepository.FindFirst(r => r.rgvtask_barCode == wcsInfo.wcstask_barcode); // if (null == rgvTask) // { // flag++;//避免刚完成重复写 // if (flag == 10) // { // WriteRGVState(client, false); // WriteRGVState(client, true); // flag = 0; // return; // } // } // } // } // } // } // else // { // flag = 0; // } // //测试阶段注释的内容*/ // //查询出库至压装台的任务有多少进行中(生成RGV任务,生成空托入库任务) // List executingTask = taskWCSinfoRepository.Find(r => (r.wcstask_state != TaskState.TaskState_Assigned.ToString() // && (OutboundStationLayerNo.Contains(r.wcstask_startPoint) || OutboundStationLayerNo.Contains(r.wcstask_endPoint)))); // if (executingTask.Count < 4) // { // //直接将任务添加到AGV任务 // Dt_TaskWCSinfo outboundTask = GetOutboundTask(taskWCSinfoRepository, client); // if (null != outboundTask) // { // //查找是否有该托盘条码任务,如果没有则进行添加RGV任务 // Dt_TaskRGVinfo rgvInfo = taskRGVinfoRepository.FindFirst(r => r.rgvtask_barCode == outboundTask.wcstask_barcode // && r.rgvtask_wcsTaskNumber == outboundTask.wcstask_taskNumber); // if (null == rgvInfo) // { // string rgvTaskType = RGVTaskType.RgvTaskType_Inbound.ToString(); // //空托盘回库 // if (outboundTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Inbound.ToString())) // rgvTaskType = RGVTaskType.RgvTaskType_Inbound.ToString(); // //轴承出库 // else if (outboundTask.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString()) // || outboundTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString())) // rgvTaskType = RGVTaskType.RgvTaskType_Outbound.ToString(); // rgvInfo = GetRGVTask(taskRGVinfoRepository, outboundTask, rgvTaskType); // taskRGVinfoRepository.Add(rgvInfo, true); // outboundTask.wcstask_state = TaskState.TaskState_RGV_Received.ToString(); // taskWCSinfoRepository.Update(outboundTask, x => x.wcstask_state, true); // } // } // //如果没有需要加入RGV的任务,则查询是否有空托的任务 // else // { // //下发移动任务给输送线进行移动 // Dt_TaskWCSinfo inboundTask = taskWCSinfoRepository.FindFirst(r => OutboundStationLayerNo.Contains(r.wcstask_endPoint) && r.wcstask_type == // TaskType.TaskType_Empty_Pallet_Inbound.ToString() && r.wcstask_state == TaskState.TaskState_RGV_Received.ToString()); // if (null != inboundTask) // { // //判断缓存架是否有货 // bool flag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), inboundTask.wcstask_endPoint).ToString()); // bool noflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_NoLoadSleep.ToString(), inboundTask.wcstask_endPoint).ToString()); // if (!flag && noflag) // { // ReInboundRequestStationAction(taskWCSinfoRepository, client, inboundTask); // } // } // } // } // //提升机运行的任务 // Dt_TaskWCSinfo hisTask = taskWCSinfoRepository.FindFirst(r => r.wcstask_state == TaskState.TaskState_Box_Out_RGV_Finished.ToString() // && (OutboundStationLayerNo.Contains(r.wcstask_startPoint) || OutboundStationLayerNo.Contains(r.wcstask_endPoint))); // if (null != hisTask) // { // string[] locationArray = null; // //空托盘回库 // if (hisTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Inbound.ToString())) //对呀为空盘入库,则生成RGV任务 // { // locationArray = hisTask.wcstask_endLocation.Split('-'); // //RGV上报取货完成直接执行下一个 // Dt_TaskRGVinfo rgvTask = taskRGVinfoRepository.FindFirst(r => r.rgvtask_wcsTaskNumber == hisTask.wcstask_taskNumber); // if (null != rgvTask && "2" == rgvTask.rgvtask_backup_2) // { // if (rgvTask.rgvtask_taskType.Contains(RGVTaskType.RgvTaskType_Inbound.ToString())) // { // Dt_TaskWCSinfo inboundTask = taskWCSinfoRepository.FindFirst(r => OutboundStationLayerNo.Contains(r.wcstask_endPoint) && r.wcstask_type == // TaskType.TaskType_Empty_Pallet_Inbound.ToString() && r.wcstask_state == TaskState.TaskState_RGV_Received.ToString()); // if (null != inboundTask) // ReInboundRequestStationAction(taskWCSinfoRepository, client, inboundTask); // else // OutboundRequestAction(taskWCSinfoRepository, client); // return; // } // } // string hoisterTaskNumber = client.ReadValue(CLineInfoDBName.R_Line_TaskNumber.ToString(), hoisterResultNo).ToString(); // string hoisterBarcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), hoisterResultNo).ToString(); // //避免提升机还没取就停止了 // if (string.IsNullOrEmpty(hoisterTaskNumber) || string.IsNullOrEmpty(hoisterBarcode)) // return; // } // //轴承出库,空托出库(RGV缓存架区域交互) // else if (hisTask.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString()) || hisTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString())) // { // OutboundRequestAction(taskWCSinfoRepository, client); // } // } // /*else // { // Dt_TaskWCSinfo inboundTask = taskWCSinfoRepository.FindFirst(r => OutboundStationLayerNo.Contains(r.wcstask_endPoint) && r.wcstask_type == // TaskType.TaskType_Empty_Pallet_Inbound.ToString() && r.wcstask_state == TaskState.TaskState_RGV_Received.ToString()); // if (null != inboundTask) // ReInboundRequestStationAction(taskWCSinfoRepository, client, inboundTask); // else // OutboundRequestAction(taskWCSinfoRepository, client); //提升机出库的流程 // }*/ // } // catch (Exception ex) // { // WriteLog.Info("OutboundArea").Write($"{ DateTime.Now }出库区域调度失败:{ex.Message}", "OutboundArea"); // } // } // public static bool WriteRGVState(PLCClient client, bool value) // { // client.WriteValue(CLineInfoDBName.W_System_RGVState.ToString(), value); // string rel = string.Empty; // for (int i = 0; i < 50; i++) // { // rel = client.ReadValue(CLineInfoDBName.W_System_RGVState.ToString()).ToString(); // if (value == bool.Parse(rel)) // break; // else // { // client.WriteValue(CLineInfoDBName.W_System_RGVState.ToString(), value); // Thread.Sleep(88); // } // } // rel = client.ReadValue(CLineInfoDBName.W_System_RGVState.ToString()).ToString(); // if (value != bool.Parse(rel)) // Console.Out.WriteLine($"{DateTime.Now}写入车存储中{value}失败."); // return bool.Parse(rel); // } // /// // /// 查询是否有可出的出库任务 // /// // /// // /// // /// // public static Dt_TaskWCSinfo GetOutboundTask(IDt_TaskWCSinfoRepository taskWCSinfoRepository, PLCClient client) // { // Dt_TaskWCSinfo wcsInfo = null; // List listTask = taskWCSinfoRepository.Find(r => r.wcstask_state == TaskState.TaskState_Assigned.ToString() && // (r.wcstask_type == TaskType.TaskType_Box_Pallet_Outbound.ToString() || r.wcstask_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString()) // && OutboundStationLayerNo.Contains(r.wcstask_startPoint)).OrderBy(r => r.wcstask_createTime).ToList();// // foreach (var item in listTask.GroupBy(r => r.wcstask_endPoint)) // { // Dt_TaskWCSinfo wcsTask = item.OrderBy(r => r.wcstask_createTime).FirstOrDefault(); // if (null != wcsTask) // { // //判断压装台是否有货 // bool yzflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), wcsTask.wcstask_endPoint).ToString()); // bool yznoflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_NoLoadSleep.ToString(), wcsTask.wcstask_endPoint).ToString()); // if (yzflag || !yznoflag) // continue; // //判断缓存架是否有货 // bool flag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), wcsTask.wcstask_startPoint).ToString()); // bool noflag = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_NoLoadSleep.ToString(), wcsTask.wcstask_startPoint).ToString()); // if (flag || !noflag) // continue; // //同一层有执行中的任务不添加 // Dt_TaskWCSinfo executingTask = taskWCSinfoRepository.FindFirst(r => (r.wcstask_startPoint == wcsTask.wcstask_startPoint || r.wcstask_endPoint == wcsTask.wcstask_endPoint) // && (r.wcstask_state == TaskState.TaskState_RGV_Received.ToString() || r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString())); // if (null != executingTask) // continue; // List listTarget = taskWCSinfoRepository.Find(r => r.wcstask_endPoint == wcsTask.wcstask_endPoint && // r.wcstask_state != TaskState.TaskState_Assigned.ToString()); // string barcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), wcsTask.wcstask_endPoint).ToString(); // if (string.IsNullOrEmpty(barcode) || "0".Equals(barcode)) // { // if (null != listTarget && listTarget.Count > 1) // continue; // else // { // wcsInfo = wcsTask; // break; // } // } // else // { // if (null != listTarget && listTarget.Count > 0) // continue; // else // { // wcsInfo = wcsTask; // break; // } // } // } // } // //foreach (var item in listTask) // //{ // // //同一层有执行中的任务不添加 // // Dt_TaskWCSinfo executingTask = taskWCSinfoRepository.FindFirst(r => (r.wcstask_startPoint == item.wcstask_startPoint || r.wcstask_endPoint == item.wcstask_endPoint) // // && (r.wcstask_state == TaskState.TaskState_RGV_Received.ToString() || r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString())); // // if (null != executingTask) // // continue; // // //同一目标位置的不能同时出 // // // Dt_TaskWCSinfo endTask = taskWCSinfoRepository.FindFirst(r => r.wcstask_endPoint == item.wcstask_endPoint && // // //(r.wcstask_state == TaskState.TaskState_RGV_Received.ToString() || r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString())); // // // if (null != endTask) // // // continue; // // List listTarget = taskWCSinfoRepository.Find(r => r.wcstask_endPoint == item.wcstask_endPoint && // // r.wcstask_state != TaskState.TaskState_Assigned.ToString()); // // string barcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), item.wcstask_endPoint).ToString(); // // if (string.IsNullOrEmpty(barcode) || "0".Equals(barcode)) // // { // // if (null != listTarget && listTarget.Count > 1) // // continue; // // else // // { // // wcsInfo = item; // // break; // // } // // } // // else // // { // // if (null != listTarget && listTarget.Count > 0) // // continue; // // else // // { // // wcsInfo = item; // // break; // // } // // } // //} // return wcsInfo; // } // public static Dt_TaskRGVinfo GetRGVTask(IDt_TaskRGVinfoRepository taskRGVinfoRepository, Dt_TaskWCSinfo wcsTask, string rgvTaskType) // { // Dt_TaskRGVinfo rgvInfo = new Dt_TaskRGVinfo(); // rgvInfo.rgvtask_taskId = GetTaskNumber.GetRgvTaskNumber(taskRGVinfoRepository).ToString(); // rgvInfo.rgvtask_taskType = rgvTaskType; // rgvInfo.rgvtask_taskStatus = RGVTaskState.RgvTaskState_Wait_Send.ToString(); // rgvInfo.rgvtask_priorityCode = wcsTask.wcstask_grade.ToString(); // rgvInfo.rgvtask_startNode = wcsTask.wcstask_startLocation; // rgvInfo.rgvtask_endNode = wcsTask.wcstask_endLocation; // rgvInfo.rgvtask_wcsTaskNumber = wcsTask.wcstask_taskNumber; // rgvInfo.rgvtask_barCode = wcsTask.wcstask_barcode; // rgvInfo.rgvtask_creator = wcsTask.wcstask_creator; // rgvInfo.rgvtask_msgTime = DateTime.Now; // rgvInfo.rgvtask_areaCode = "OutboundArea"; // return rgvInfo; // } // public static void InboundRequestAction(IDt_TaskWCSinfoRepository taskWCSinfoRepository, IDt_TaskRGVinfoRepository taskRGVinfoRepository, PLCClient client) // { // try // { // string barcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), ReInboundRequestStationNo).ToString(); // bool load = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), ReInboundRequestStationNo).ToString()); // if (!string.IsNullOrEmpty(barcode) && !"0".Equals(barcode) && load) // { // Dt_TaskWCSinfo wcsInfo = taskWCSinfoRepository.FindFirst(r => r.wcstask_barcode == barcode && r.wcstask_type == TaskType.TaskType_Empty_Pallet_Inbound.ToString()); // if (null == wcsInfo) // { // //有出库任务,不能下发 // Dt_TaskRGVinfo executingRgvTask = taskRGVinfoRepository.FindFirst(r => r.rgvtask_areaCode == "OutboundArea" // && OutboundStationLayerNo.Contains(r.rgvtask_endNode)); // if (null != executingRgvTask) // return; // //当前存在未完成的任务 入库 // wcsInfo = taskWCSinfoRepository.FindFirst(r => OutboundStationLayerNo.Contains(r.wcstask_endPoint)); // if (null != wcsInfo) // { // Dt_TaskRGVinfo rgvTask = taskRGVinfoRepository.FindFirst(r => r.rgvtask_wcsTaskNumber == wcsInfo.wcstask_taskNumber); // if (null != rgvTask) // { // //取货完成 // if ("2" != rgvTask.rgvtask_backup_2) // return; // } // else // return; // } // //申请入库任务 // WebResponseContent content = WMSApi.PostInboundRequstToWMS(barcode); // if (content.Status) // { // WmsTaskInfo wmsTask = JsonConvert.DeserializeObject(content.Data.ToString()); // wcsInfo = CommonFunction.AddWCSEmptyInboundTask(wmsTask, taskWCSinfoRepository); // string rgvTaskType = string.Empty; // if (wcsInfo.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Inbound.ToString())) // rgvTaskType = RGVTaskType.RgvTaskType_Inbound.ToString(); // //轴承出库 // /*else if (wcsInfo.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString()) // || wcsInfo.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString())) // rgvTaskType = RGVTaskType.RgvTaskType_Outbound.ToString();*/ // taskWCSinfoRepository.DbContextBeginTransaction(() => // { // Dt_TaskRGVinfo rgvInfo = GetRGVTask(taskRGVinfoRepository, wcsInfo, rgvTaskType); // taskRGVinfoRepository.Add(rgvInfo, true); // wcsInfo.wcstask_state = TaskState.TaskState_RGV_Received.ToString(); // taskWCSinfoRepository.Add(wcsInfo, true); // return content.OK(); // }); // } // else // throw new Exception("入库申请失败:" + content.Message); // } // } // } // catch (Exception ex) // { // Console.Out.WriteLine(DateTime.Now + ex.Message); // } // } // } //}