Admin
5 小时以前 1cd9280bbecf557f8978ad3839f14827ff9f4d34
ÏîÄ¿´úÂë/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/ReInboundRequestAction.cs
@@ -1,11 +1,14 @@
using HslCommunication;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Numeric;
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;
@@ -87,6 +90,87 @@
        //    }
        //}
        //获取任务,生成入库任务
        public static void RGV_InboundKTP(IDt_TaskWCSinfoRepository taskWCSinfoRepository, IDt_TaskRGVinfoRepository taskRGVinfoRepository, PLCClient client)
        {
            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_HoisterExecuting.ToString());
            if(inboundTask == null)
            {
                //查找是否有该托盘条码任务,如果没有则进行添加RGV任务
                Dt_TaskRGVinfo rgvInfo = taskRGVinfoRepository.FindFirst(r => r.rgvtask_barCode == inboundTask.wcstask_barcode
                && r.rgvtask_wcsTaskNumber == inboundTask.wcstask_taskNumber);
                if (null == rgvInfo)
                {
                    string rgvTaskType = RGVTaskType.RgvTaskType_Inbound.ToString();
                    rgvInfo = GetRGVTask(taskRGVinfoRepository, inboundTask, rgvTaskType);
                    taskRGVinfoRepository.Add(rgvInfo, true);
                    inboundTask.wcstask_state = TaskState.TaskState_RGV_Received.ToString();
                    taskWCSinfoRepository.Update(inboundTask, x => x.wcstask_state, true);
                }
            }
        }
        //空托盘入库任务下发判断
        public static void ReInboundKTP(IDt_TaskWCSinfoRepository taskWCSinfoRepository, PLCClient client)
        {
            try
            {
                //可以进行判断下发入库任务
                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_Assigned.ToString());
                if(inboundTask != null)
                {
                    //获取车轴出库
                    List<Dt_TaskWCSinfo> executingTask = taskWCSinfoRepository.Find(r => (r.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString()) ||
                        r.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString())) && endStationNo.Contains(r.wcstask_endPoint));
                    //获取有多少条出库的任务
                    int LineExecucount = executingTask.Count(x => x.wcstask_state == TaskState.TaskState_Box_Out_Line_Executing.ToString());
                    if (LineExecucount >= 4)
                    {
                        //判断是否有对应层的出库任务,
                        int Assrscount = executingTask.Count(x => x.wcstask_endLocation == inboundTask.wcstask_startLocation && (x.wcstask_state != TaskState.TaskState_Box_Out_Line_Executing.ToString()
                        || x.wcstask_state == TaskState.TaskState_Assigned.ToString()));
                        if (Assrscount == 0)
                        {
                            ReInboundRequestStationAction(taskWCSinfoRepository, client, inboundTask);
                        }
                    }
                    else
                    {
                        //判断有多少条在缓存架的
                        int RGV_Finishedcount = executingTask.Count(x => x.wcstask_state != TaskState.TaskState_Box_Out_Line_Executing.ToString()
                        && x.wcstask_state != TaskState.TaskState_Assigned.ToString());
                        if (RGV_Finishedcount == 0)
                        {
                            //可以进行判断下发入库任务
                            int Assrscount = executingTask.Count(x => x.wcstask_endLocation == inboundTask.wcstask_startLocation && (x.wcstask_state != TaskState.TaskState_Box_Out_Line_Executing.ToString()
                            || x.wcstask_state == TaskState.TaskState_Assigned.ToString()));
                            if (Assrscount == 0)
                            {
                                ReInboundRequestStationAction(taskWCSinfoRepository, client, inboundTask);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                WriteLog.Info(ReInboundRequestStationNo).Write($"{DateTime.Now}回库站台任务下发,调度失败:{ex.Message}", ReInboundRequestStationNo);
                throw;
            }
        }
        public static void ReInboundRequestStationAction(IDt_TaskWCSinfoRepository taskWCSinfoRepository, PLCClient client, Dt_TaskWCSinfo wcsInfo)