Admin
2025-12-23 3f016f3de352db04e5c2d99dae9e4b7472198359
ÏîÄ¿´úÂë/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/ReInboundRequestAction.cs
@@ -93,23 +93,30 @@
        //获取任务,生成入库任务
        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)
            Dt_TaskWCSinfo inboundTask = taskWCSinfoRepository.Find(r => OutboundStationLayerNo.Contains(r.wcstask_endPoint) && r.wcstask_type ==
                                TaskType.TaskType_Empty_Pallet_Inbound.ToString() && r.wcstask_state == TaskState.TaskState_Empty_In_PLC_Finished.ToString()).OrderBy(x => x.wcstask_dispatcherTime).FirstOrDefault();
            if (inboundTask != null)
            {
                //查找是否有该托盘条码任务,如果没有则进行添加RGV任务
                Dt_TaskRGVinfo rgvInfo = taskRGVinfoRepository.FindFirst(r => r.rgvtask_barCode == inboundTask.wcstask_barcode
                //判断是否有货,有托盘条码
                string barcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), inboundTask.wcstask_startLocation).ToString();
                bool load = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), inboundTask.wcstask_startLocation).ToString());
                if (!string.IsNullOrEmpty(barcode) && !"0".Equals(barcode) && load && inboundTask.wcstask_barcode== barcode)
                {
                    //查找是否有该托盘条码任务,如果没有则进行添加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);
                    if (null == rgvInfo)
                    {
                        string rgvTaskType = RGVTaskType.RgvTaskType_Inbound.ToString();
                    inboundTask.wcstask_state = TaskState.TaskState_RGV_Received.ToString();
                    taskWCSinfoRepository.Update(inboundTask, x => x.wcstask_state, true);
                        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);
                    }
                }
            }
@@ -121,46 +128,73 @@
        {
            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)
                //获取是否有货
                bool load = bool.Parse(client.ReadValue(CLineInfoDBName.R_Line_LoadSleep.ToString(), ReInboundRequestStationNo).ToString());
                string barcode = client.ReadValue(CLineInfoDBName.R_Line_Barcode.ToString(), ReInboundRequestStationNo).ToString();
                if (!string.IsNullOrEmpty(barcode) && !"0".Equals(barcode) && load)
                {
                    //获取车轴出库
                    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)
                    //根据对应的托盘条码进行去下发任务
                    Dt_TaskWCSinfo inboundTask = taskWCSinfoRepository.Find(r => r.wcstask_barcode == barcode).Where(r => r.wcstask_type ==
                                TaskType.TaskType_Empty_Pallet_Inbound.ToString() && (r.wcstask_state == TaskState.TaskState_Assigned.ToString() || r.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString())).FirstOrDefault();
                    if(inboundTask != null)
                    {
                        //判断是否有对应层的出库任务,
                        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)
                        if(inboundTask.wcstask_state== TaskState.TaskState_Assigned.ToString())
                        {
                            ReInAssignedKTP(taskWCSinfoRepository, client, inboundTask);
                        }
                        else
                        {
                            ReInboundRequestStationAction(taskWCSinfoRepository, client, inboundTask);
                        }
                    }
                    else
                }
            }
            catch (Exception ex)
            {
                WriteLog.Info(ReInboundRequestStationNo).Write($"{DateTime.Now}回库站台任务下发,调度失败:{ex.Message}", ReInboundRequestStationNo);
                throw;
            }
        }
        public static void ReInAssignedKTP(IDt_TaskWCSinfoRepository taskWCSinfoRepository,  PLCClient client, Dt_TaskWCSinfo wcsInfo)
        {
            try
            {
                //获取车轴出库
                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 == wcsInfo.wcstask_startLocation && (x.wcstask_state != TaskState.TaskState_Box_Out_Line_Executing.ToString()
                    || x.wcstask_state == TaskState.TaskState_Assigned.ToString()));
                    if (Assrscount == 0)
                    {
                        //判断有多少条在缓存架的
                        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)
                        ReInboundRequestStationAction(taskWCSinfoRepository, client, wcsInfo);
                    }
                }
                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 == wcsInfo.wcstask_startLocation && (x.wcstask_state != TaskState.TaskState_Box_Out_Line_Executing.ToString()
                        || x.wcstask_state == TaskState.TaskState_Assigned.ToString()));
                        if (Assrscount == 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);
                            }
                            ReInboundRequestStationAction(taskWCSinfoRepository, client, wcsInfo);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
@@ -168,9 +202,7 @@
                throw;
            }
        }
        public static void ReInboundRequestStationAction(IDt_TaskWCSinfoRepository taskWCSinfoRepository, PLCClient client, Dt_TaskWCSinfo wcsInfo)
@@ -194,14 +226,22 @@
                    if (logicValue == 3)
                    {
                        //启动任务
                        client.WriteValue(CLineInfoDBName.W_Line_Logic.ToString(), lineCode, 1);
                        bool logicbool= client.WriteValue(CLineInfoDBName.W_Line_Logic.ToString(), lineCode, 1);
                        if (logicbool)
                        {
                            if (wcsInfo.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString())
                                return;
                            wcsInfo.wcstask_state = TaskState.TaskState_HoisterExecuting.ToString();
                            wcsInfo.wcstask_dispatcherTime = DateTime.Now;
                            taskWCSinfoRepository.Update(wcsInfo, true);
                        }
                    }
                    else if (logicValue == 4 || logicValue == 5)
                    {
                        //提升机执行中
                        if (wcsInfo.wcstask_state == TaskState.TaskState_HoisterExecuting.ToString())
                        if (wcsInfo.wcstask_state == TaskState.TaskState_Empty_In_PLC_Finished.ToString())
                            return;
                        wcsInfo.wcstask_state = TaskState.TaskState_HoisterExecuting.ToString();
                        wcsInfo.wcstask_state = TaskState.TaskState_Empty_In_PLC_Finished.ToString();
                        wcsInfo.wcstask_dispatcherTime = DateTime.Now;
                        taskWCSinfoRepository.Update(wcsInfo, true);
                    }