Admin
7 小时以前 1cd9280bbecf557f8978ad3839f14827ff9f4d34
ÏîÄ¿´úÂë/WCS/WIDESEA_WCSServer/WIDESEA_WCS/Jobs/ConveyorLine/OutboundArea/OutboundAreaDispathAction.cs
@@ -24,7 +24,7 @@
        /// <summary>
        /// å‡ºåº“的层
        /// </summary>
        private static List<string> OutboundStationLayerNo = new List<string>() { "60100", "60200", "60300", "60400", "60500", "60600", "60700"};
        private static List<string> OutboundStationLayerNo = new List<string>() { "60101", "60102", "60103", "60104", "60105", "60106", "60107" };
        //入库托盘申请站台
        private static string ReInboundRequestStationNo = "90101";
        //出库站台交互
@@ -45,61 +45,10 @@
                //出库完成
                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;
                }*/
                //测试阶段注释的内容*/
                //查询出库至压装台的任务有多少进行中
                List<Dt_TaskWCSinfo> 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)
                //生成可下发的RGV任务,至缓存口
                List<Dt_TaskWCSinfo> executingTask = taskWCSinfoRepository.Find(r => r.wcstask_state != TaskState.TaskState_Assigned.ToString()
                 && endStationNo.Contains(r.wcstask_endPoint));
                if (executingTask.Count < 4)    //小于4,则可生成去这边的任务
                {
                    //直接将任务添加到AGV任务
                    Dt_TaskWCSinfo outboundTask = GetOutboundTask(taskWCSinfoRepository, client);   
@@ -112,11 +61,7 @@
                        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())
                            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();
@@ -130,54 +75,20 @@
                    }
                }
                //提升机运行的任务
                Dt_TaskWCSinfo hisTask = taskWCSinfoRepository.FindFirst(r => r.wcstask_state == TaskState.TaskState_HoisterExecuting.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()))
                    {
                        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;
                    }
                    //轴承出库
                    else if (hisTask.wcstask_type.Equals(TaskType.TaskType_Box_Pallet_Outbound.ToString()) || hisTask.wcstask_type.Equals(TaskType.TaskType_Empty_Pallet_Outbound.ToString()))
                    {
                        locationArray = hisTask.wcstask_startLocation.Split('-');
                    }
                //缓存口至输送线
                OutboundCZ_PLC(taskWCSinfoRepository, taskRGVinfoRepository, 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);   //提升机出库的流程
                }
                //空托入库申请(生成了空托入库任务)
                InboundRequestAction(taskWCSinfoRepository, taskRGVinfoRepository, client);
                //空托到缓存口
                ReInboundKTP(taskWCSinfoRepository, client);
                //空托入库口,生成RGV任务,进行入库
                RGV_InboundKTP(taskWCSinfoRepository, taskRGVinfoRepository, client);
            }
            catch (Exception ex)
            {
@@ -227,13 +138,13 @@
                    //判断压装台是否有货
                    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)
                    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)
                    if (flag || !noflag)
                        continue;
@@ -344,54 +255,61 @@
                    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;
                        //获取车轴出库
                        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));
                        //当前存在未完成的任务   å…¥åº“
                        wcsInfo = taskWCSinfoRepository.FindFirst(r => OutboundStationLayerNo.Contains(r.wcstask_endPoint));
                        if (null != wcsInfo)
                        //获取有多少条出库的任务
                        int LineExecucount = executingTask.Count(x => x.wcstask_state == TaskState.TaskState_Box_Out_Line_Executing.ToString());
                        if (LineExecucount >= 4)
                        {
                            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<WmsTaskInfo>(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();
                            });
                                client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 1);
                        }
                        else
                            {
                                client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 2);
                            throw new Exception("入库申请失败:" + content.Message);
                            }
                        }
                        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)
                            {
                                //申请入库任务
                                WebResponseContent content = WMSApi.PostInboundRequstToWMS(barcode);
                                if (content.Status)
                                {
                                    WmsTaskInfo wmsTask = JsonConvert.DeserializeObject<WmsTaskInfo>(content.Data.ToString());
                                    wcsInfo = CommonFunction.AddWCSEmptyInboundTask(wmsTask, taskWCSinfoRepository);
                                    taskWCSinfoRepository.Add(wcsInfo, true);
                                    client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 1);
                                }
                                else
                                {
                                    client.WriteValue(CLineInfoDBName.W_Line_PLCDispatch.ToString(), ReInboundRequestStationNo, 2);
                                    throw new Exception("入库申请失败:" + content.Message);
                                }
                            }
                        }
                    }
                }
            }