xiaojiao
2026-03-12 b174ea476eb1afd872985b2c261241a814e0185d
ÏîÄ¿´úÂë/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/ReInboundRequestAction.cs
@@ -1,5 +1,6 @@
using HslCommunication;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Information;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Numeric;
using System;
using System.Collections.Generic;
@@ -17,6 +18,7 @@
using WIDESEA_Services.Repositories;
using WIDESEA_Services.Services;
using WIDESEA_WCS.WCSClient;
using static System.Collections.Specialized.BitVector32;
namespace WIDESEA_WCS.Jobs.ConveyorLine.OutboundArea
{
@@ -93,8 +95,10 @@
        //获取任务,生成入库任务
        public static void RGV_InboundKTP(IDt_TaskWCSinfoRepository taskWCSinfoRepository, IDt_TaskRGVinfoRepository taskRGVinfoRepository, PLCClient client)
        {
            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();
            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)
            {
@@ -134,11 +138,12 @@
                if (!string.IsNullOrEmpty(barcode) && !"0".Equals(barcode) && load)
                {
                    //根据对应的托盘条码进行去下发任务
                    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();
                    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)
                    {
                        if(inboundTask.wcstask_state== TaskState.TaskState_Assigned.ToString())
                        if(inboundTask.wcstask_state == TaskState.TaskState_Assigned.ToString())
                        {
                            ReInAssignedKTP(taskWCSinfoRepository, client, inboundTask);
                        }
@@ -168,12 +173,17 @@
                    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 LineExecucount = executingTask.Count(x =>
                    x.wcstask_state == TaskState.TaskState_Box_Out_Line_Executing.ToString() ||
                    x.wcstask_state == TaskState.TaskState_Empty_Out_Line_Executing.ToString());
                if (LineExecucount >= 8)
                {
                    //判断是否有对应层的出库任务,
                    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()));
                    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()
                    && x.wcstask_state != TaskState.TaskState_Empty_Out_Line_Executing.ToString()));
                    if (Assrscount == 0)
                    {
                        ReInboundRequestStationAction(taskWCSinfoRepository, client, wcsInfo);
@@ -182,13 +192,26 @@
                else
                {
                    //判断有多少条在缓存架的
                    int RGV_Finishedcount = executingTask.Count(x => x.wcstask_state != TaskState.TaskState_Box_Out_Line_Executing.ToString()
                    && x.wcstask_state != TaskState.TaskState_Assigned.ToString());
                    int RGV_Finishedcount = executingTask.Count(x =>
                    x.wcstask_state != TaskState.TaskState_Box_Out_Line_Executing.ToString() &&
                    x.wcstask_state != TaskState.TaskState_Empty_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()));
                        //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())
                        //&& x.wcstask_state != TaskState.TaskState_Empty_Out_Line_Executing.ToString());
                        // è‚–ä½¼ 2026-01-20 ä¿®æ”¹ä¸Šé¢å¦‚下
                        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()
                        && x.wcstask_state != TaskState.TaskState_Empty_Out_Line_Executing.ToString());
                        if (Assrscount == 0)
                        {
                            ReInboundRequestStationAction(taskWCSinfoRepository, client, wcsInfo);
@@ -216,7 +239,25 @@
                    int logicValue = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_Logic.ToString(), lineCode).ToString());
                    if ((logicValue == 1 || logicValue == 2))
                    {
                        client.WriteValue(CLineInfoDBName.R_Line_TargetPosition.ToString(), ReInboundRequestStationNo, wcsInfo.wcstask_endPoint);
                        client.WriteValue(CLineInfoDBName.R_Line_TaskNumber.ToString(), ReInboundRequestStationNo, wcsInfo.wcstask_taskNumber);
                        int TaskTarget = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_TargetPosition.ToString(), ReInboundRequestStationNo).ToString());
                        int TaskNumber = int.Parse(client.ReadValue(CLineInfoDBName.R_Line_TaskNumber.ToString(), ReInboundRequestStationNo).ToString());
                        if (TaskTarget == 0 || TaskNumber == 0 || TaskTarget.ToString() != wcsInfo.wcstask_endPoint.ToString() || TaskNumber != wcsInfo.wcstask_taskNumber) // å†™å…¥åŽ å¦‚果读取不到 é‚£å°±é‡æ–°å†™å…¥
                        {
                            client.WriteValue(CLineInfoDBName.R_Line_TargetPosition.ToString(), ReInboundRequestStationNo, wcsInfo.wcstask_endPoint);
                            client.WriteValue(CLineInfoDBName.R_Line_TaskNumber.ToString(), ReInboundRequestStationNo, wcsInfo.wcstask_taskNumber);
                        }
                        WriteTaskInfo.WriteTaskInfoAction(wcsInfo, client, lineCode);
                        client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 2);
                        if (RgvDispatchJob.TempHK) // å¦‚果这个为True了 é‚£å°±è¯æ˜Žå›žç©ºæ‰˜ç›˜çš„优先级被提高了 ç„¶åŽå°±ä¼šè¿žç»­å›žå››ä¸ªï¼Œè¿™é‡Œæ¯å›žä¸€ä¸ªå°±è¦+1 ç›´åˆ°å›žå››ä¸ªäº† è¿™ä¸ªä¼˜å…ˆçº§å°±æ¶ˆå¤±äº†
                        {
                            RgvDispatchJob.HKNumber += 1;
                        }
                    }
                    string rfidResult = client.ReadValue(CLineInfoDBName.W_Line_Barcode.ToString(), lineCode).ToString();
                    if (!wcsInfo.wcstask_barcode.Equals(rfidResult))
@@ -235,9 +276,13 @@
                            wcsInfo.wcstask_dispatcherTime = DateTime.Now;
                            taskWCSinfoRepository.Update(wcsInfo, true);
                        }
                    }
                    else if (logicValue == 4 || logicValue == 5)
                    {
                        //client.WriteValue(CLineInfoDBName.R_Line_TargetPosition.ToString(), ReInboundRequestStationNo, wcsInfo.wcstask_endPoint);
                        //client.WriteValue(CLineInfoDBName.R_Line_TaskNumber.ToString(), ReInboundRequestStationNo, wcsInfo.wcstask_taskNumber);
                        //提升机执行中
                        if (wcsInfo.wcstask_state == TaskState.TaskState_Empty_In_PLC_Finished.ToString())
                            return;