分支自 SuZhouGuanHong/TaiYuanTaiZhong

dengjunjie
2024-07-19 7a4c218909936721fe281737491d10efc7378e09
´úÂë¹ÜÀí/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/StationTask.cs
@@ -54,85 +54,35 @@
                    //根据下料口的绑定信息查询对应工单,检测此工单是否已完成  å®Œæˆå³å¯å°†å…¶é€å…¥åº“
                    var work = workinfoRepository.Find(x => x.workOrder == item.Number && x.drawingNo == x.drawingNo && x.heatID == item.heatNumber).FirstOrDefault();
                    var work = workinfoRepository.Find(x => x.workOrder == item.Number && x.drawingNo == item.stationType && x.heatID == item.heatNumber && x.processCode == "17").OrderByDescending(x => x.CreateTime).FirstOrDefault();
                    if (work == null)
                    {
                        item.remark = "触发入库任务,但未找到工单信息!";
                        item.location_state = LocationStateEnum.Abnormal.ToString();
                        stationinfoRepository.Update(item, true);
                        stationinfoRepository.Update(item, x => new { x.remark, x.location_state }, true);
                        continue;
                    }
                    var geometry = Pipeline.QueryMateriel(work.drawingNo);
                    if (geometry == null)
                    {
                        item.remark = "未找到车轮信息!";
                        item.location_state = LocationStateEnum.Abnormal.ToString();
                        stationinfoRepository.Update(item, x => new { x.remark, x.location_state }, true);
                        continue;
                    }
                    //dt_mes_head mesinfo = mes_HeadRepository.Find(x => x.workOrder == item.Number).FirstOrDefault();
                    //if (mesinfo == null)
                    //{
                    //    item.remark = "触发入库任务,但未找到工单头表!";
                    //    item.location_state = LocationStateEnum.Abnormal.ToString();
                    //    stationinfoRepository.Update(item, true);
                    //    continue;
                    //    //throw new Exception("未找到工单头表!工单号:" + item.Number);
                    //}
                    //var dt_Geometry_Data = PipelineJob.QueryMateriel(mesinfo.drawingNo);
                    //var dt_Geometry_Data1 = PipelineJob.QueryMateriel1(mesinfo.drawingNo);
                    //int CompeletedNum = Convert.ToInt32(mesinfo.quantity) - Convert.ToInt32(mesinfo.finishNum);
                    dt_stationinfo TargetLocation = null;
                    string tasktype = "";
                    if (item.quantity == 5 /*|| CompeletedNum == 0*/)  //循环读取车轮数为5或者订单已完成数量的下料口    â†’工单人工关闭的工单
                    //if (item.quantity == 5)
                    if (item.quantity == geometry.stackNoRange)
                    {
                        if (/*(mesinfo.quantity <= 50 && string.IsNullOrEmpty(mesinfo.area)) ||*/ item.stationCode.Contains("3"))    //小于50件直接出库
                        {
                            //todo å¯»æ‰¾å¯æ”¾è´§å¤–协放货台
                        if (!string.IsNullOrEmpty(work.area) || item.stationCode.Contains("3"))
                            tasktype = "TaskType_OutsourceInbound";
                            TargetLocation = GetEmptyLocation(stationinfoRepository);
                        }
                        else
                        {
                            //todo:  è°ƒç”¨WMS接口创建任务
                            tasktype = "TaskType_Inbound";
                            TargetLocation = GetLocation.GetEmptyLocation(stationinfoRepository, work, item);
                            //TargetLocation = GetEmptyLocation(stationinfoRepository, mesinfo, item, CompeletedNum, dt_Geometry_Data == null ? dt_Geometry_Data1.e : dt_Geometry_Data.e);
                        }
                        if (TargetLocation != null)
                        {
                            dt_agvtask agvtask = new dt_agvtask()
                            {
                                agv_fromaddress = item.stationCode,
                                agv_id = Guid.NewGuid(),
                                agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
                                agv_grade = 1,
                                agv_createtime = DateTime.Now,
                                agv_taskstate = "Create",
                                agv_materielid = item.stationType,
                                agv_qty = item.quantity,
                                agv_tasktype = tasktype,
                                agv_toaddress = TargetLocation.stationCode,
                                agv_userid = "系统",
                                bindSN = item.bindSN,
                                agv_worktype = Convert.ToInt32(work.processCode),
                                agv_materbarcode = work.materialCode,
                                agv_Traytype = item.tray_type,
                                jobID = item.Number,
                                agv_TrayStatus = item.tray_status
                            };
                            agvtaskRepository.Add(agvtask, true);
                            item.location_state = LocationStateEnum.InBusy.ToString();
                            stationinfoRepository.Update(item, true);
                            TargetLocation.location_state = LocationStateEnum.InBusy.ToString();
                            TargetLocation.stationType = agvtask.agv_materielid;
                            TargetLocation.heatNumber = item.heatNumber;
                            TargetLocation.Number = agvtask.jobID;
                            stationinfoRepository.Update(TargetLocation, true);
                            WriteDBLog.Success("创建入库任务", $"任务编号:{agvtask.agv_tasknum}", "PCS");
                        }
                        AGVTask.AddQueueTask(stationinfoRepository, agvtaskRepository, item, tasktype, work);
                    }
                }
            }
@@ -140,7 +90,6 @@
            {
                WriteDBLog.Error("创建入库任务", $"错误信息: {ex.Message}", "PCS");
            }
        }
        /// <summary>
@@ -392,7 +341,21 @@
            }
            return TargetLocation;
        }
        /// <summary>
        /// ä¸´æ—¶ä½¿ç”¨
        /// </summary>
        /// <param name="stationinfoRepository"></param>
        /// <returns></returns>
        public static dt_stationinfo GetEmptyLocation1(Idt_stationinfoRepository stationinfoRepository)
        {
            return stationinfoRepository.Find(x => x.line == 1 && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == "3").OrderBy(x => x.column).FirstOrDefault();//行和区域需写死
        }
        /// <summary>
        /// åŽ»å¤–å
        /// </summary>
        /// <param name="stationinfoRepository"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public static dt_stationinfo GetEmptyLocation(Idt_stationinfoRepository stationinfoRepository)
        {
            dt_stationinfo TargetLocation = null;
@@ -402,17 +365,17 @@
            if (!Pipeline_client.IsConnected) throw new Exception("与链条机连接超时!");
            foreach (var item in target)
            {
                TargetLocation = stationinfoRepository.Find(x => x.stationCode == item && x.location_state == "Empty" /*LocationStateEnum.Empty.ToString()*/ && x.enable).FirstOrDefault();
                TargetLocation = stationinfoRepository.Find(x => x.stationCode == item && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).FirstOrDefault();
                var PalletSignal = Pipeline_client.ReadByOrder<Int16>("R_PalletSignal", item);//读取托盘信号:1:有,2无
                var MaterialSignal = Pipeline_client.ReadByOrder<Int16>("R_MaterialSignal", item);//读取货物信号:1:有,2无
                if (TargetLocation != null && PalletSignal == 2 && MaterialSignal == 2) return TargetLocation;
            }
            if (TargetLocation == null)
            {
                throw new Exception("外协入库口已满");
            }
            //if (TargetLocation == null)
            //{
            //    throw new Exception("外协入库口已满");
            //}
            return TargetLocation;
        }
        /// <summary>