private void GenerateAsrsCheckoutTask() { try { BindingSource bs = this.dataGridView1.DataSource as BindingSource; DataTable dt = bs.DataSource as DataTable; if (dt == null) { return; } int pri = int.Parse(this.textBoxPrivilege.Text); foreach (DataRow dr in dt.Rows) { string houseName = dr["库房"].ToString(); string strCell = dr["库位"].ToString(); AsrsControl.AsrsCtlModel asrsCtl = AsrsPresenter.GetAsrsCtlByName(houseName); AsrsModel.CellCoordModel cell = new CellCoordModel(0, 0, 0); if (!cell.Parse(strCell)) { continue; } EnumCellStatus cellStoreStat = EnumCellStatus.空闲; EnumGSTaskStatus cellTaskStat = EnumGSTaskStatus.完成; if (!asrsResMana.GetCellStatus(houseName, cell, ref cellStoreStat, ref cellTaskStat)) { Console.WriteLine("获取货位{0}:{1}状态失败", houseName, strCell); continue; } if (cellStoreStat != EnumCellStatus.满位 || cellTaskStat == EnumGSTaskStatus.锁定) { continue; } CtlDBAccess.Model.ControlTaskModel asrsTask = null; if (!asrsCtl.GenerateOutputTask(cell, null, SysCfg.EnumAsrsTaskType.产品出库, false, ref asrsTask, null, pri)) { logRecorder.AddDebugLog(this.Text, string.Format("生成{0}:{1}出库任务失败", houseName, strCell)); } else { logRecorder.AddDebugLog(this.Text, string.Format("生成{0}:{1}产品出库任务成功", houseName, strCell)); } dr["出库任务ID"] = asrsTask.TaskID; } this.dataGridView1.Refresh(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
private bool AsrsOutportBusiness(AsrsControl.AsrsPortalModel port, ref string reStr) { try { MesDBAccess.BLL.palletBll palletDBll = new MesDBAccess.BLL.palletBll(); if (port.PortCata == 1) { return(true); } if (port.BindedTaskOutput == SysCfg.EnumAsrsTaskType.空筐出库) { if (port.Db2Vals[0] == 1) { port.Db1ValsToSnd[0] = 1; } return(true); } else if (port.BindedTaskOutput == SysCfg.EnumAsrsTaskType.产品出库) { if (port.Db2Vals[1] == 1) { port.Db1ValsToSnd[0] = 1; } } else { return(true); } if (port.Db1ValsToSnd[0] == 2) { return(true); } if (port.Db2Vals[1] != 2) { return(true); } Int16 palletCata = port.Db2Vals[2]; if (palletCata < 1 || palletCata > 3) { return(true); } AsrsControl.AsrsCtlModel asrsCtl = port.AsrsCtl; string houseName = asrsCtl.HouseName; AsrsInterface.IAsrsManageToCtl asrsResManage = port.AsrsCtl.AsrsResManage; //遍历所有库位,判断材料类别,按照先入先出规则,匹配出库的货位。 Dictionary <string, AsrsModel.GSMemTempModel> asrsStatDic = new Dictionary <string, AsrsModel.GSMemTempModel>(); if (!asrsResManage.GetAllGsModel(ref asrsStatDic, ref reStr)) { Console.WriteLine(string.Format("{0} 获取货位状态失败", houseName)); return(false); } List <AsrsModel.GSMemTempModel> validCells = new List <AsrsModel.GSMemTempModel>(); string shopRequire = ""; if (port.NodeName == "A1库物料出口1") { shopRequire = "1号车间"; } else if (port.NodeName == "A1库物料出口2") { shopRequire = "2号车间"; } else if (port.NodeName == "A1库物料出口3") { shopRequire = "3号车间"; } //检查是否存在未执行完的任务 List <CtlDBAccess.Model.ControlTaskModel> unFinishedTasks = GetRunningTask((int)SysCfg.EnumAsrsTaskType.产品出库, shopRequire, palletCata, ref reStr); if (unFinishedTasks != null && unFinishedTasks.Count() > 0) { return(true); } int r = 1, c = 1, L = 1; for (r = 1; r < asrsCtl.AsrsRow + 1; r++) { for (c = 1; c < asrsCtl.AsrsCol + 1; c++) { for (L = 1; L < asrsCtl.AsrsLayer + 1; L++) { string strKey = string.Format("{0}:{1}-{2}-{3}", houseName, r, c, L); AsrsModel.GSMemTempModel cellStat = null; if (!asrsStatDic.Keys.Contains(strKey)) { continue; } cellStat = asrsStatDic[strKey]; if ((!cellStat.GSEnabled) || (cellStat.GSTaskStatus == AsrsModel.EnumGSTaskStatus.锁定.ToString()) || (cellStat.GSStatus != AsrsModel.EnumCellStatus.满位.ToString())) { // reStr = string.Format("货位{0}-{1}-{2}禁用,无法生成出库任务", cell.Row, cell.Col, cell.Layer); continue; } AsrsModel.CellCoordModel cell = new AsrsModel.CellCoordModel(r, c, L); List <string> storGoods = new List <string>(); if (!asrsResManage.GetStockDetail(houseName, cell, ref storGoods)) { continue; } if (storGoods.Count() < 1) { continue; } MesDBAccess.Model.palletModel pallet = palletDBll.GetModel(storGoods[0]); short productCata = 0; string strCataName = "";// "正极材料"; string shopName = ""; if (!PrcsCtlModelsLishen.NodeSwitchInput.ParsePalletID(storGoods[0], ref shopName, ref productCata, ref strCataName, ref reStr)) { continue; } //if (pallet.palletCata == palletCata.ToString()) if (productCata == palletCata && shopRequire == shopName) { validCells.Add(cellStat); } //if (storGoods[0].Substring(2, 1) == palletCata.ToString()) //{ // validCells.Add(cellStat); //} } } } if (validCells.Count() > 0) { //排序,按照先入先出 AsrsModel.GSMemTempModel firstGS = validCells[0]; if (validCells.Count() > 1) { for (int i = 1; i < validCells.Count(); i++) { AsrsModel.GSMemTempModel tempGS = validCells[i]; if (tempGS.InHouseDate < firstGS.InHouseDate) { firstGS = tempGS; } } } //生成出库任务 string[] strCellArray = firstGS.GSPos.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries); int row = int.Parse(strCellArray[0]); int col = int.Parse(strCellArray[1]); int layer = int.Parse(strCellArray[2]); AsrsModel.CellCoordModel cell = new AsrsModel.CellCoordModel(row, col, layer); if (asrsCtl.GenerateOutputTask(cell, port.BindedTaskOutput, true, port.PortSeq, ref reStr, new List <short> { palletCata }, port.AsrsTaskPri)) { port.Db1ValsToSnd[0] = 2; } else { Console.WriteLine("生成任务{0}失败,{1}", port.BindedTaskOutput.ToString(), reStr); } } return(true); } catch (Exception ex) { reStr = ex.ToString(); return(false); } }