private bool CellValidStatNotify(int row, int col, int layer, bool cellValid, string reason, ref string reStr) { CellCoordModel cell = new CellCoordModel(row, col, layer); EnumGSEnabledStatus enableStatus = EnumGSEnabledStatus.禁用; if (cellValid) { enableStatus = EnumGSEnabledStatus.启用; } //zwx,此处需要修改 return(asrsResourceManage.UpdateGsEnabledStatus(EnumStoreHouse.B1库房.ToString(), cell, enableStatus, ref reStr)); }
public bool IsAsrsCellReady(int row, int col, int layer, ref string[] barCodes, ref bool isReady, ref string reStr) { try { // barCodes = new string[] { "TP12234" }; barCodes = null; //Console.WriteLine("hello:收到货位{0}-{1}-{2}就绪状态查询调用",row,col,layer); if (logRecorder != null) { logRecorder.AddDebugLog(logSrc, string.Format("hello:收到货位{0}-{1}-{2}就绪状态查询调用", row, col, layer)); } CellCoordModel cell = new CellCoordModel(row, col, layer); EnumCellStatus cellStoreStat = EnumCellStatus.空闲; EnumGSTaskStatus cellTaskStat = EnumGSTaskStatus.完成; if (!this.asrsResManage.GetCellStatus(houseName, cell, ref cellStoreStat, ref cellTaskStat)) { reStr = string.Format("货位不存在:{0}-{1}-{2}", row, col, layer); logRecorder.AddDebugLog(logSrc, reStr); return(false); } if (cellStoreStat == EnumCellStatus.满位 && cellTaskStat == EnumGSTaskStatus.完成) { List <string> storBarcodes = new List <string>(); this.asrsResManage.GetStockDetail(houseName, cell, ref storBarcodes); if (storBarcodes.Count() < 1) { isReady = false; reStr = "货位没有产品"; } else { barCodes = storBarcodes.ToArray(); isReady = true; reStr = "查询OK"; } } else { reStr = "货位没有产品"; isReady = false; } logRecorder.AddDebugLog(logSrc, string.Format("{0}-{1}-{2}就绪状态返回结果,{3},{4}", row, col, layer, isReady.ToString(), reStr)); return(true); } catch (Exception ex) { reStr = ex.ToString(); return(false); } }
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()); } }
public bool CreateManualOutputTask(string houseName, CellCoordModel cell, ref string reStr) { AsrsCtlModel asrsModel = null; foreach (AsrsCtlModel m in asrsCtls) { if (m.HouseName == houseName) { asrsModel = m; break; } } if (asrsModel == null) { reStr = "未识别的: " + houseName; return(false); } SysCfg.EnumAsrsTaskType taskType = SysCfg.EnumAsrsTaskType.产品出库; EnumCellStatus cellStoreStats = EnumCellStatus.空闲; EnumGSTaskStatus cellTaskStatus = EnumGSTaskStatus.完成; asrsResourceManage.GetCellStatus(houseName, cell, ref cellStoreStats, ref cellTaskStatus); EnumGSEnabledStatus cellEnabledStatus = EnumGSEnabledStatus.启用; if (!asrsResourceManage.GetCellEnabledStatus(houseName, cell, ref cellEnabledStatus)) { reStr = string.Format("获取货位启用状态失败{0}-{1}-{2}", cell.Row, cell.Col, cell.Layer); return(false); } if (cellEnabledStatus == EnumGSEnabledStatus.禁用) { reStr = string.Format("货位{0}-{1}-{2}禁用,无法生成出库任务", cell.Row, cell.Col, cell.Layer); return(false); } if (cellTaskStatus == EnumGSTaskStatus.锁定) { reStr = "货位处于锁定状态"; return(false); } if (cellStoreStats == EnumCellStatus.空料框) { taskType = SysCfg.EnumAsrsTaskType.空框出库; } asrsModel.GenerateOutputTask(cell, null, taskType, false); return(true); }
/// <summary> /// 更新货位操作,任务申请,完成后调用 /// </summary> /// <param name="houseName">库房名称</param> /// <param name="cellCoord">库存位置</param> /// <param name="gsOper">库存操作</param> /// <param name="reStr">执行状态描述</param> /// <returns>执行状态结果</returns> public bool UpdateGSOper(string houseName, CellCoordModel cellCoord, EnumGSOperate gsOper, ref string reStr) { bool updateStatus = bllGoodsSite.UpdateOperateByRCL(houseName, cellCoord.Row, cellCoord.Col, cellCoord.Layer, gsOper); if (updateStatus == false) { reStr = "数据库更新失败!"; return(false); } //string operateStr = "库房:" + houseName + ",货位:" + cellCoord.Row + "排" + cellCoord.Col + "列" // + cellCoord.Layer + "层," + "货位操作:" + gsOper.ToString(); //AddGSOperRecord(houseName, cellCoord, EnumGSOperateType.系统更新货位操作, operateStr, ref reStr); return(true); }
/// <summary> /// 从缓存区中找出一个最近距离的货位放到测试区 /// 先找最近的列,然后找最近的层 /// </summary> /// <param name="cells"></param> /// <param name="targetCell"></param> /// <returns></returns> private CellCoordModel GetClosestCell(List <CellCoordModel> cacheCells, CellCoordModel targetCell) { if (cacheCells == null || targetCell == null) { return(null); } //var resultCol = (from x in cacheCells.AsParallel() select new { Key = x, Value = Math.Abs(x.Col - targetCell.Col) }).OrderBy(x => x.Value); //var resultlayer = (from x in resultCol.AsParallel() select new { Key = x, Value = Math.Abs(x.Key.Layer - targetCell.Layer) }).OrderByDescending(x => x.Value).Take(1); //resultlayer.ToList().ForEach(x => Console.Write("列:"+x.Key.Key.Col + "层:"+ x.Key.Key.Layer)); CellCoordModel cell = cacheCells[0];//暂时取第一个作为移库起始点 return(cell); }
/// <summary> /// 查询货位状态 /// </summary> /// <param name="houseName">库房名称</param> /// <param name="cellCoord">货位位置</param> /// <param name="cellStatus">货位状态</param> /// <param name="taskStatus">货位任务状态</param> /// <returns>查询状态</returns> public bool GetCellStatus(string houseName, CellCoordModel cellCoord, ref EnumCellStatus cellStatus, ref EnumGSTaskStatus taskStatus) { //StoreHouseModel houseModel = bllStoreHouse.GetModelByName(houseName); //if (houseModel == null) //{ // return false; //} //GoodsSiteModel gsm = bllGoodsSite.GetModelByRCL(houseModel.StoreHouseID, cellCoord.Row, cellCoord.Col, cellCoord.Layer); //if (gsm == null) //{ // return false; //} //cellStatus = (EnumCellStatus)Enum.Parse(typeof(EnumCellStatus), gsm.GoodsSiteStatus); //taskStatus = (EnumGSTaskStatus)Enum.Parse(typeof(EnumGSTaskStatus), gsm.GoodsSiteTaskStatus); return(true); }
/// <summary> /// 添加空料筐库存 /// </summary> /// <param name="houseName">库房名称</param> /// <param name="cellCoord">货位位置</param> /// <param name="reStr">执行状态描述</param> /// <returns>执行状态结果</returns> public bool AddEmptyMeterialBox(string houseName, CellCoordModel cellCoord, ref string reStr) { StoreHouseModel houseModel = bllStoreHouse.GetModelByName(houseName); if (houseModel == null) { reStr = "不存在此库房!"; return(false); } GoodsSiteModel gsm = bllGoodsSite.GetModelByRCL(houseModel.StoreHouseID, cellCoord.Row, cellCoord.Col, cellCoord.Layer); if (gsm == null) { reStr = "不存在此库存!"; return(false); } gsm.Reserve = cellCoord.ExtProp1;//保存货位扩展属性,目前为空托盘型号 bllGoodsSite.Update(gsm); StockModel sm = new StockModel(); sm.GoodsSiteID = gsm.GoodsSiteID; sm.IsFull = true; sm.TrayID = "12345678";//测试 long stockID = bllStock.Add(sm); StockListModel slm = new StockListModel(); slm.InHouseTime = DateTime.Now; slm.StockID = stockID; slm.MeterialBatch = ""; //暂时没有 slm.MeterialboxCode = ""; slm.MeterialStatus = ""; //暂时没有赋值,若有库存详细应在此增加 long stockListID = bllStockList.Add(slm); StockDetailModel sdm = new StockDetailModel(); sdm.StockListID = stockListID; sdm.MeterialName = "空料筐"; bllStockDetail.Add(sdm); // string operateStr = "库房:" + houseName + ",货位:" + cellCoord.Row + "排" + cellCoord.Col + "列" //+ cellCoord.Layer + "层," + "添加空料框"; // AddGSOperRecord(houseName, cellCoord, EnumGSOperateType.系统添加空料框, operateStr, ref reStr); return(true); }
private bool IsAsrsCellReady(int row, int col, int layer, ref string[] barCodes, ref bool isReady, ref string reStr) { // Console.WriteLine("收到远程调用,IsAsrsCellReady"); try { CellCoordModel cell = new CellCoordModel(row, col, layer); EnumCellStatus cellStoreStat = EnumCellStatus.空闲; EnumGSTaskStatus cellTaskStat = EnumGSTaskStatus.完成; if (!this.asrsResourceManage.GetCellStatus(asrsCtls[1].HouseName, cell, ref cellStoreStat, ref cellTaskStat)) { reStr = string.Format("货位不存在:{0}-{1}-{2}", row, col, layer); return(false); } if (cellStoreStat == EnumCellStatus.满位 && cellTaskStat == EnumGSTaskStatus.完成) { List <string> storBarcodes = new List <string>(); this.asrsResourceManage.GetStockDetail(asrsCtls[1].HouseName, cell, ref storBarcodes); if (storBarcodes.Count() < 1) { isReady = false; reStr = "货位没有产品"; } else { if (storBarcodes.Count() < 2) { storBarcodes.Add(""); } //storBarcodes[1] = string.Empty; barCodes = storBarcodes.ToArray(); isReady = true; } } else { reStr = "货位没有产品"; isReady = false; } return(true); } catch (Exception ex) { reStr = ex.ToString(); return(false); } }
/// <summary> /// 货位状态更新,货位申请、出库、入库等改变货位状态后需要调用 /// </summary> /// <param name="houseName"></param> /// <param name="cellCoord"></param> /// <param name="cellStat"></param> /// <param name="taskStatus"></param> /// <param name="reStr"></param> /// <returns></returns> public bool UpdateCellStatus(string houseName, CellCoordModel cellCoord, EnumCellStatus cellStat, EnumGSTaskStatus taskStatus, ref string reStr) { bool updateStatus = bllGoodsSite.UpdateModelByRCL(houseName, cellCoord.Row, cellCoord.Col, cellCoord.Layer, cellStat, taskStatus); if (updateStatus == true) { OnUpdateGsStatus(); //string operateStr = "库房:" + houseName + ",货位:" + cellCoord.Row + "排" + cellCoord.Col + "列" + cellCoord.Layer + "层," + "货位状态更改为:" + cellStat.ToString() + ";货位任务状态更改为:" + taskStatus.ToString(); //AddGSOperRecord(houseName, cellCoord, EnumGSOperateType.系统修改状态, operateStr,ref reStr); reStr = "货位更新成功!"; return(true); } else { reStr = "货位更新失败!"; return(false); } }
/// <summary> /// 更新货位任务状态,货位申请、出库、入库等改变货位状态后需要调用 /// </summary> /// <param name="houseName">库房名称</param> /// <param name="cellCoord">货位位置</param> /// <param name="taskStatus">货位任务状态</param> /// <param name="reStr">执行状态描述</param> /// <returns>执行结果</returns> public bool UpdateGsTaskStatus(string houseName, CellCoordModel cellCoord, EnumGSTaskStatus taskStatus, ref string reStr) { //bool updateStatus = bllGoodsSite.UpdateGsTaskStatusByRCL(houseName, cellCoord.Row, cellCoord.Col, cellCoord.Layer, taskStatus); //if (updateStatus == true) //{ // OnUpdateGsStatus(); // //string operateStr = "库房:" + houseName + ",货位:" + cellCoord.Row + "排" + cellCoord.Col + "列" + cellCoord.Layer + "层," + "货位任务状态更改为:" + taskStatus.ToString(); // //AddGSOperRecord(houseName, cellCoord, EnumGSOperateType.系统修改状态, operateStr, ref reStr); // reStr = "货位更新成功!"; // return true; //} //else //{ // reStr = "货位更新失败!"; // return false; //} return(true); }
public void OutputManual(long gsID) { string reStr = ""; //View_StockGSModel skGsModel = bllViewStockGs.GetModelByGSID(gsID); //if (skGsModel == null) //{ // this.view.AddLog("库存管理", "手动出库货失败,没有库存!", LogInterface.EnumLoglevel.提示); // return; //} try { View_GoodsSiteModel vgsm = bllViewGs.GetModelByGSID(gsID); if (vgsm == null) { this.view.AddLog("库存管理", "货位错误!", LogInterface.EnumLoglevel.提示); return; } CellCoordModel cell = new CellCoordModel(vgsm.GoodsSiteRow, vgsm.GoodsSiteColumn, vgsm.GoodsSiteLayer); if (this.iControl == null) { return; } bool status = this.iControl.CreateManualOutputTask(vgsm.StoreHouseName, cell, ref reStr); if (status == true) { this.view.AddLog("库存管理", "手动出库货位:" + vgsm.GoodsSiteName + "成功!", LogInterface.EnumLoglevel.提示); this.iStorageManage.AddGSOperRecord(vgsm.StoreHouseName, cell, EnumGSOperateType.手动出库, "手动出库货位:" + vgsm.GoodsSiteName, ref reStr); } else { this.view.AddLog("库存管理", "手动出库货位:" + vgsm.GoodsSiteName + "失败!" + reStr, LogInterface.EnumLoglevel.提示); this.iStorageManage.AddGSOperRecord(vgsm.StoreHouseName, cell, EnumGSOperateType.手动出库, "手动出库货位:" + vgsm.GoodsSiteName + "失败" + reStr, ref reStr); } RefreshPos(vgsm.StoreHouseName, vgsm.GoodsSiteRow);//刷新 } catch (Exception ex) { Console.WriteLine("发生异常:" + ex.ToString()); } }
private void button1_Click(object sender, EventArgs e) { string reStr = ""; StorageManager sm = new StorageManager(); sm.Initialize(ref reStr); CellCoordModel cell = new CellCoordModel(1, 1, 5); //EnumGSEnabledStatus gsSta = EnumGSEnabledStatus.禁用; //sm.GetCellEnabledStatus("A库房", cell, ref gsSta); //sm.UpdateCellStatus("A库房", cell, EnumCellStatus.满位, EnumGSTaskStatus.完成, ref reStr); // sm.UpdateGSOper("A库房", cell, EnumGSOperate.入库, ref reStr); // sm.CellRequire("A库房", ref cell, ref reStr); // EnumCellStatus cellSta = EnumCellStatus.满位; // EnumGSTaskStatus taskStas = EnumGSTaskStatus.锁定; // sm.GetCellStatus("A库房", cell, ref cellSta, ref taskStas); string[] ssf = new string[2]; ssf[0] = "tb123"; ssf[1] = "tb345"; sm.AddStack("A库房", cell, "1234567", ssf, ref reStr); sm.UpdateCellStatus("A库房", cell, EnumCellStatus.满位, EnumGSTaskStatus.锁定, ref reStr); // sm.CellRequire("A库房", ref cell, ref reStr); // List<CellCoordModel> cellList = new List<CellCoordModel>(); // sm.GetAllowLeftHouseGs("A库房", ref cellList, ref reStr); // sm.AddEmptyMeterialBox("A库房", cell, ref reStr); //// sm.AddGSOperRecord("A库房", cell, EnumGSOperateType.手动出库, ref reStr); // DateTime dt = new DateTime(); // sm.GetCellInputTime("A库房", cell, ref dt); // sm.RemoveStack("A库房", cell, ref reStr); // sm.UpdateGSOper("A库房", cell, EnumGSOperate.出库, ref reStr); // sm.UpdateGsStatus("A库房", cell, EnumCellStatus.空料框, ref reStr); // sm.UpdateGsTaskStatus("A库房", cell, EnumGSTaskStatus.出库允许, ref reStr); //List<string> stockList = new List<string>(); //sm.GetStockDetail("A库房", new CellCoordModel(1, 1, 5), ref stockList); StorageView storageView = new StorageView("库存管理"); storageView.ShowDialog(); //StorageView sv = new StorageView("wer"); //sv.ShowDialog(); }
/// <summary> /// 更新货位启用状态 /// </summary> /// <param name="houseName">库房名称</param> /// <param name="cellCoord">货位位置</param> /// <param name="enabledStatus">货位禁用状态</param> /// <param name="reStr">执行状态描述</param> /// <returns>执行状态</returns> public bool UpdateGsEnabledStatus(string houseName, CellCoordModel cellCoord, EnumGSEnabledStatus enabledStatus, ref string reStr) { StoreHouseModel houseModel = bllStoreHouse.GetModelByName(houseName); if (houseModel == null) { return(false); } GoodsSiteModel gsm = bllGoodsSite.GetModelByRCL(houseModel.StoreHouseID, cellCoord.Row, cellCoord.Col, cellCoord.Layer); if (gsm == null) { return(false); } bool gsEnabledSta = false; if (enabledStatus == EnumGSEnabledStatus.启用) { gsEnabledSta = true; } else { gsEnabledSta = false; } bool updateStatus = bllGoodsSite.UpdateGSEnabledStatusByID(gsm.GoodsSiteID, gsEnabledSta); if (updateStatus == true) { OnUpdateGsStatus(); //string operateStr = "库房:" + houseName + ",货位:" + cellCoord.Row + "排" + cellCoord.Col + "列" + cellCoord.Layer + "层," + "货位启用状态更改为:" + enabledStatus.ToString(); //AddGSOperRecord(houseName, cellCoord, EnumGSOperateType.系统修改状态, operateStr, ref reStr); reStr = "货位更新成功!"; return(true); } else { reStr = "货位更新失败!"; return(false); } }
/// <summary> /// 添加空料筐库存 /// </summary> /// <param name="houseName">库房名称</param> /// <param name="cellCoord">货位位置</param> /// <param name="reStr">执行状态描述</param> /// <returns>执行状态结果</returns> public bool AddEmptyMeterialBox(string houseName, CellCoordModel cellCoord, ref string reStr) { //StoreHouseModel houseModel = bllStoreHouse.GetModelByName(houseName); //if (houseModel == null) //{ // reStr = "不存在此库房!"; // return false; //} //GoodsSiteModel gsm = bllGoodsSite.GetModelByRCL(houseModel.StoreHouseID, cellCoord.Row, cellCoord.Col, cellCoord.Layer); //if (gsm == null) //{ // reStr = "不存在此库存!"; // return false; //} //gsm.Reserve = cellCoord.ExtProp1;//保存货位扩展属性,目前为空托盘型号 //bllGoodsSite.Update(gsm); //StockModel sm = new StockModel(); //sm.GoodsSiteID = gsm.GoodsSiteID; //sm.IsFull = true; //sm.TrayID = "12345678";//测试 //long stockID = bllStock.Add(sm); //StockListModel slm = new StockListModel(); //slm.InHouseTime = DateTime.Now; //slm.StockID = stockID; //slm.MeterialBatch = "";//暂时没有 //slm.MeterialboxCode = ""; //slm.MeterialStatus = "";//暂时没有赋值,若有库存详细应在此增加 //long stockListID = bllStockList.Add(slm); //StockDetailModel sdm = new StockDetailModel(); //sdm.StockListID = stockListID; //sdm.MeterialName = "空料筐"; //bllStockDetail.Add(sdm); return(true); }
/// <summary> /// 获取库存料框条码列表 /// </summary> /// <param name="houseName">库房名称</param> /// <param name="cellCoord">货位位置</param> /// <param name="boxCodeList">料框条码列表</param> /// <returns>查询状态</returns> public bool GetStockDetail(string houseName, CellCoordModel cellCoord, ref List <string> boxCodeList) { //boxCodeList = new List<string>(); //if (cellCoord == null) //{ // return false; //} //StoreHouseModel houseModel = bllStoreHouse.GetModelByName(houseName); //if (houseModel == null) //{ // return false; //} //List<View_StockModel> stockList = bllViewStock.GetStockDetail(houseName, cellCoord.Row, cellCoord.Col, cellCoord.Layer); //if (stockList == null) //{ // return false; //} //for (int i = 0; i < stockList.Count; i++) //{ // boxCodeList.Add(stockList[i].MeterialboxCode); //} return(true); }
public void MoveGsManual(string startHouseName, CellCoordModel startGsPos, string endHouseName, CellCoordModel endGsPos) { string reStr = ""; if (this.iControl == null) { return; } bool status = this.iControl.CreateManualMoveGSTask(startHouseName, startGsPos, endHouseName, endGsPos, ref reStr); string operateStr = "手动移库:从" + startHouseName + "," + startGsPos.Row + "排" + startGsPos.Col + "列" + startGsPos.Layer + "层" + "移至" + endHouseName + "," + endGsPos.Row + "排" + endGsPos.Col + "列" + endGsPos.Layer + "层"; if (status == true) { this.iStorageManage.AddGSOperRecord(startHouseName, startGsPos, EnumGSOperateType.手动移出库房, operateStr, ref reStr); this.view.AddLog("库存管理", operateStr + "成功!", LogInterface.EnumLoglevel.提示); } else { this.view.AddLog("库存管理", operateStr + "失败!", LogInterface.EnumLoglevel.提示); } RefreshPos(this.currHouseName, this.currRowth);//刷新 }
/// <summary> /// 移除库存 /// </summary> /// <param name="houseName">库房信息</param> /// <param name="cellCoord">货位位置</param> /// <param name="reStr">执行状态描述</param> /// <returns>执行状态结果</returns> public bool RemoveStack(string houseName, CellCoordModel cellCoord, ref string reStr) { //StoreHouseModel houseModel = bllStoreHouse.GetModelByName(houseName); //if (houseModel == null) //{ // reStr = "不存在此库房!"; // return false; //} //GoodsSiteModel gsm = bllGoodsSite.GetModelByRCL(houseModel.StoreHouseID, cellCoord.Row, cellCoord.Col, cellCoord.Layer); //if (gsm == null) //{ // reStr = "不存在此库存!"; // return false; //} //bool deleSta = bllStock.DeleteModelByGSID(gsm.GoodsSiteID); //if (deleSta == false) //{ // reStr = "数据删除失败!"; // return false; //} return(true); }
/// <summary> /// 获取所有满位或者空货位的货位列表 /// </summary> /// <param name="houseName">库房名称</param> /// <param name="cells">货位列表</param> /// <param name="isFull">true,获取满位并且完成的货位,货位空货位并且空闲的货位</param> /// <returns>执行状态</returns> public bool GetAreaCells(string houseName, string areaName, ref List <CellCoordModel> cells, bool isFull) { cells = new List <CellCoordModel>(); List <View_GoodsSiteModel> gses = bllViewGoodsSite.GetGsByHouseAndArea(houseName, areaName, isFull); if (gses == null) { return(false); } for (int i = 0; i < gses.Count; i++) { CellCoordModel cell = new CellCoordModel(gses[i].GoodsSiteRow, gses[i].GoodsSiteColumn, gses[i].GoodsSiteLayer); if (gses[i].GsEnabled == true) { if (gses[i].GoodsSiteStatus == EnumCellStatus.空闲.ToString() && gses[i].GoodsSiteTaskStatus == EnumGSTaskStatus.完成.ToString()) { cells.Add(cell); } } } return(true); }
/// <summary> ///查询货位启用状态 /// </summary> /// <param name="houseName">库房名称</param> /// <param name="celCoord">货位位置</param> /// <param name="gsEnabledStatus">货位启用状态</param> /// <returns>查询状态</returns> public bool GetCellEnabledStatus(string houseName, CellCoordModel cellCoord, ref EnumGSEnabledStatus gsEnabledStatus) { //StoreHouseModel houseModel = bllStoreHouse.GetModelByName(houseName); //if (houseModel == null) //{ // return false; //} //GoodsSiteModel gsm = bllGoodsSite.GetModelByRCL(houseModel.StoreHouseID, cellCoord.Row, cellCoord.Col, cellCoord.Layer); //if (gsm == null) //{ // return false; //} //if (gsm.GsEnabled == true) //{ // gsEnabledStatus = EnumGSEnabledStatus.启用; //} //else //{ // gsEnabledStatus = EnumGSEnabledStatus.禁用; //} return(true); }
public bool CellRequireByRow(string houseName, string logicAreaName, int row, ref CellCoordModel cellCoord, ref string reStr) { View_GoodsSiteModel viewGSModel = bllViewGoodsSite.GetModelByHouseAndAreaName(houseName, logicAreaName); if (viewGSModel == null) { reStr = "不存在'" + houseName + "'库房!" + logicAreaName + "分区!"; return(false); } int requireCellRule = 1;//默认是从最小列开始 XmlNode houseCfgNode = xmlOper.GetNodeByName("StoreHouse", houseName); if (houseCfgNode != null) { XmlNode requireCellRuleNode = houseCfgNode.SelectSingleNode("RequireCellRule"); if (requireCellRuleNode != null) { int.TryParse(requireCellRuleNode.InnerText.Trim(), out requireCellRule); } } View_GoodsSiteModel gsModel = bllViewGoodsSite.ApplyGoodsSiteByRow(houseName, logicAreaName, row, requireCellRule); if (gsModel == null) { reStr = "没有货位可申请!"; return(false); } else { cellCoord = new CellCoordModel(gsModel.GoodsSiteRow, gsModel.GoodsSiteColumn, gsModel.GoodsSiteLayer); reStr = "货位申请成功"; } return(true); }
/// <summary> /// 添加货位操作记录,任务完成时调用 /// </summary> /// <param name="houseName">库房名称</param> /// <param name="cellCoord">库存位置</param> /// <param name="gsOperType">货位操作类型</param> /// <param name="reStr">执行状态描述</param> /// <returns>执行状态结果</returns> public bool AddGSOperRecord(string houseName, CellCoordModel cellCoord, EnumGSOperateType gsOperType, string operateDetail, ref string reStr) { //StoreHouseModel houseModel = bllStoreHouse.GetModelByName(houseName); //if (houseModel == null) //{ // reStr = "不存在此库房!"; // return false; //} //StockOperRecdModel sorm = new StockOperRecdModel(); //sorm.GoodsSitePos = cellCoord.Row.ToString() + "-" + cellCoord.Col.ToString() + "-" + cellCoord.Layer.ToString(); //sorm.OPerateTime = DateTime.Now; //sorm.OPerateType = gsOperType.ToString(); //sorm.OperateDetail = operateDetail; //sorm.StoreHouseID = houseModel.StoreHouseID; //long addsta = bllStackOper.Add(sorm); //if (addsta == 0) //{ // reStr = "数据添加数据失败!"; // return false; //} //OnUpdateGsStatus(); return(true); }
public bool CellValidStatNotify(int row, int col, int layer, bool cellValid, string reason, ref string reStr) { try { //Console.WriteLine("hello:收到货位{0}-{1}-{2} 启用/禁用 调用", row, col, layer); if (logRecorder != null) { logRecorder.AddDebugLog(logSrc, string.Format("hello:收到货位{0}-{1}-{2} 启用/禁用:{3} 调用", row, col, layer, cellValid.ToString())); } CellCoordModel cell = new CellCoordModel(row, col, layer); EnumGSEnabledStatus enableStatus = EnumGSEnabledStatus.禁用; if (cellValid) { enableStatus = EnumGSEnabledStatus.启用; } //zwx,此处需要修改 return(this.asrsResManage.UpdateGsEnabledStatus(houseName, cell, enableStatus, ref reStr)); } catch (Exception ex) { reStr = ex.ToString(); return(false); } }
public bool FenrongOk(int row, int col, int layer, ref string reStr) { try { //Console.WriteLine("hello:收到货位{0}-{1}-{2} 分容OK通知调用", row, col, layer); if (logRecorder != null) { logRecorder.AddDebugLog(logSrc, string.Format("hello:收到货位{0}-{1}-{2} 分容OK通知调用调用", row, col, layer)); } CellCoordModel cell = new CellCoordModel(row, col, layer); EnumCellStatus cellStoreStat = EnumCellStatus.空闲; EnumGSTaskStatus cellTaskStat = EnumGSTaskStatus.完成; if (!this.asrsResManage.GetCellStatus(houseName, cell, ref cellStoreStat, ref cellTaskStat)) { reStr = string.Format("货位不存在:{0},{1}-{2}-{3}", houseName, row, col, layer); // logRecorder.AddDebugLog(objectName, "充电完成事件错误,"+reStr); return(false); } EnumGSEnabledStatus cellEnabledStatus = EnumGSEnabledStatus.禁用; if (!this.asrsResManage.GetCellEnabledStatus(houseName, cell, ref cellEnabledStatus)) { reStr = string.Format("货位禁用:{0},{1}-{2}-{3}", houseName, row, col, layer); //logRecorder.AddDebugLog(objectName, "充电完成事件错误," + reStr); return(false); } if (cellEnabledStatus == EnumGSEnabledStatus.禁用) { reStr = string.Format("货位禁用:{0},{1}-{2}-{3}", houseName, row, col, layer); //logRecorder.AddDebugLog(objectName, "充电完成事件错误," + reStr); return(false); } if (cellStoreStat != EnumCellStatus.满位) { reStr = string.Format("货位为空:{0},{1}-{2}-{3},", houseName, row, col, layer) + reStr; //logRecorder.AddDebugLog(objectName, "充电完成事件错误," + reStr); return(false); } if (cellTaskStat == EnumGSTaskStatus.出库允许) { return(true); } if (cellTaskStat == EnumGSTaskStatus.锁定) { reStr = string.Format("货位任务锁定:{0},{1}-{2}-{3},", houseName, row, col, layer) + reStr; //logRecorder.AddDebugLog(objectName, "充电完成事件错误," + reStr); return(false); } cellTaskStat = EnumGSTaskStatus.出库允许; if (!this.asrsResManage.UpdateCellStatus(houseName, cell, cellStoreStat, cellTaskStat, ref reStr)) { reStr = string.Format("更新货位状态失败:{0},{1}-{2}-{3},", houseName, row, col, layer) + reStr; // logRecorder.AddDebugLog(objectName, "充电完成事件错误," + reStr); return(false); } return(true); } catch (Exception ex) { reStr = ex.ToString(); return(false); } }
public bool CreateManualMoveGSTask(string startHouseName, CellCoordModel startCell, string endHouseName, CellCoordModel endCell, ref string reStr) { try { return(asrsCtl.CreateManualMoveGSTask(startHouseName, startCell, endHouseName, endCell, ref reStr)); } catch (Exception ex) { Console.WriteLine(ex.ToString()); return(false); } }
/// <summary> /// 添加库存 /// </summary> /// <param name="houseName">库房名称</param> /// <param name="cellCoord">货位位置</param> /// <param name="goodsInfo">库存信息</param> /// <param name="reStr">执行状态描述</param> /// <returns>执行状态结果</returns> public bool AddStack(string houseName, CellCoordModel cellCoord, string proBatch, string[] goodsInfo, ref string reStr) { StoreHouseModel houseModel = bllStoreHouse.GetModelByName(houseName); if (houseModel == null) { reStr = "不存在此库房!"; return(false); } GoodsSiteModel gsm = bllGoodsSite.GetModelByRCL(houseModel.StoreHouseID, cellCoord.Row, cellCoord.Col, cellCoord.Layer); if (gsm == null) { reStr = "不存在此库存!"; return(false); } if (goodsInfo == null) { reStr = "传入空货位信息!"; return(false); } StockModel sm = new StockModel(); sm.GoodsSiteID = gsm.GoodsSiteID; sm.IsFull = true; sm.TrayID = "12345678";//测试 long stockID = bllStock.Add(sm); for (int i = 0; i < goodsInfo.Length; i++) { StockListModel slm = new StockListModel(); slm.StockID = stockID; slm.InHouseTime = DateTime.Now; slm.MeterialBatch = proBatch; //暂时没有 slm.MeterialboxCode = goodsInfo[i]; slm.MeterialStatus = ""; //暂时没有赋值,若有库存详细应在此增加 long stockListID = bllStockList.Add(slm); StockDetailModel sdm = new StockDetailModel(); sdm.StockListID = stockListID; sdm.MeterialName = "电芯"; bllStockDetail.Add(sdm); } string goodsInforStr = ""; for (int i = 0; i < goodsInfo.Length; i++) { if (i == 0) { goodsInforStr += goodsInfo[i]; } else { goodsInforStr += "," + goodsInfo[i]; } } //string operateStr = "库房:" + houseName + ",货位:" + cellCoord.Row + "排" + cellCoord.Col + "列" // + cellCoord.Layer + "层," + "添加库存:" + goodsInforStr; //AddGSOperRecord(houseName, cellCoord, EnumGSOperateType.系统添加库存, operateStr, ref reStr); return(true); }
/// <summary> /// 空筐出库请求处理 /// </summary> private void EmptyPalletOutputRequire() { AsrsCtlModel asrsHouse = asrsCtls[0]; AsrsPortalModel emptyPalletOutport = asrsHouse.GetPortByDeviceID("2003"); if (emptyPalletOutport.Db2Vals[1] == 1) { //出口有框,禁止出库 return; } if (emptyPalletOutport.Db1ValsToSnd[0] == 2) { return; } if (emptyPalletOutport.Db2Vals[0] != 3) { return; } bool exitFlag = false; int row = 2, col = 21, layer = 6; //要查询得到 int r = 1, c = 1, L = 1; for (r = 1; r < row + 1; r++) { if (exitFlag) { break; } for (c = 1; c < col + 1; c++) { if (exitFlag) { break; } for (L = 1; L < layer + 1; L++) { CellCoordModel cell = new CellCoordModel(r, c, L); EnumCellStatus cellStoreStat = EnumCellStatus.空闲; EnumGSTaskStatus cellTaskStat = EnumGSTaskStatus.完成; if (!this.asrsResourceManage.GetCellStatus(asrsHouse.HouseName, cell, ref cellStoreStat, ref cellTaskStat)) { continue; } if (cellStoreStat == EnumCellStatus.空料框 && cellTaskStat != EnumGSTaskStatus.锁定) { if (asrsHouse.GenerateOutputTask(cell, null, SysCfg.EnumAsrsTaskType.空筐出库, true)) { exitFlag = true; emptyPalletOutport.Db1ValsToSnd[0] = 2; string reStr = ""; if (!emptyPalletOutport.NodeCmdCommit(true, ref reStr)) { logRecorder.AddDebugLog(emptyPalletOutport.NodeName, "发送命令失败" + reStr); } else { return; } break; } } } } } }
public bool CreateManualMoveGSTask(string startHouseName, CellCoordModel startCell, string endHouseName, CellCoordModel endCell, ref string reStr) { //throw new NotImplementedException(); string houseName = startHouseName; AsrsCtlModel asrsModel = null; foreach (AsrsCtlModel m in asrsCtls) { if (m.HouseName == houseName) { asrsModel = m; break; } } if (asrsModel == null) { reStr = "未识别的: " + houseName; return(false); } EnumGSEnabledStatus cellEnabledStatus = EnumGSEnabledStatus.启用; if (!asrsResourceManage.GetCellEnabledStatus(houseName, startCell, ref cellEnabledStatus)) { reStr = string.Format("获取货位启用状态失败{0}-{1}-{2}", startCell.Row, startCell.Col, startCell.Layer); return(false); } if (cellEnabledStatus == EnumGSEnabledStatus.禁用) { reStr = string.Format("货位{0}-{1}-{2}禁用,无法生成移库任务", startCell.Row, startCell.Col, startCell.Layer); return(false); } if (!asrsResourceManage.GetCellEnabledStatus(houseName, endCell, ref cellEnabledStatus)) { reStr = string.Format("获取货位启用状态失败{0}-{1}-{2}", endCell.Row, endCell.Col, endCell.Layer); return(false); } if (cellEnabledStatus == EnumGSEnabledStatus.禁用) { reStr = string.Format("货位{0}-{1}-{2}禁用,无法生成移库任务", endCell.Row, endCell.Col, endCell.Layer); return(false); } EnumCellStatus cellStoreStats = EnumCellStatus.空闲; EnumGSTaskStatus cellTaskStatus = EnumGSTaskStatus.完成; asrsResourceManage.GetCellStatus(houseName, startCell, ref cellStoreStats, ref cellTaskStatus); if (cellTaskStatus == EnumGSTaskStatus.锁定) { reStr = string.Format("货位{0}-{1}-{2}处于锁定状态,无法生成移库任务", startCell.Row, startCell.Col, startCell.Layer);; return(false); } asrsResourceManage.GetCellStatus(houseName, endCell, ref cellStoreStats, ref cellTaskStatus); if (cellTaskStatus == EnumGSTaskStatus.锁定) { reStr = string.Format("目标货位{0}-{1}-{2}处于锁定状态,无法生成移库任务", endCell.Row, endCell.Col, endCell.Layer);; return(false); } if (cellStoreStats != EnumCellStatus.空闲) { reStr = string.Format("目标货位{0}-{1}-{2}不为空,无法生成移库任务", endCell.Row, endCell.Col, endCell.Layer);; return(false); } SysCfg.EnumAsrsTaskType taskType = SysCfg.EnumAsrsTaskType.移库; return(asrsModel.GenerateOutputTask(startCell, endCell, taskType, false, null, 1000)); //return true; }
public bool ParseParam(SysCfg.EnumAsrsTaskType taskType, string strParam, string houseName, ref string reStr) { try { //任务参数格式 "" this.strTaskParam = strParam; string[] taskParamArray = this.strTaskParam.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); if (taskParamArray == null || taskParamArray.Count() < 3) { reStr = "出入库参数解析错误"; return(false); } inputPort = int.Parse(taskParamArray[0]); outputPort = int.Parse(taskParamArray[1]); string[] cellPos = taskParamArray[2].Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries); if (cellPos == null || cellPos.Count() < 3) { reStr = "出入库参数解析错误"; return(false); } short row = short.Parse(cellPos[0]); short col = short.Parse(cellPos[1]); short layer = short.Parse(cellPos[2]); this.cellPos1 = new CellCoordModel(row, col, layer); switch (taskType) { case SysCfg.EnumAsrsTaskType.产品入库: { //产品入库 // this.inputPort = 1; if (taskParamArray.Count() > 3) { string strGoods = taskParamArray[3]; this.inputCellGoods = strGoods.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); } if (houseName == EnumStoreHouse.A1库房.ToString()) { mesStep = "PS-2"; } else { mesStep = "PS-8"; } break; } //case SysCfg.EnumAsrsTaskType.空框入库: // { // //空框入库 // break; // } case SysCfg.EnumAsrsTaskType.DCR出库: { //产品出库 if (taskParamArray.Count() > 3) { string strGoods = taskParamArray[3]; this.inputCellGoods = strGoods.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); } if (houseName == EnumStoreHouse.A1库房.ToString()) { mesStep = "PS-4"; } else { mesStep = "PS-10"; } break; } //case SysCfg.EnumAsrsTaskType.空框出库: // { // //空框出库 // break; // } case SysCfg.EnumAsrsTaskType.移库: { string[] cellTargetPos = taskParamArray[3].Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries); if (cellTargetPos == null || cellTargetPos.Count() < 3) { reStr = "移库参数解析错误"; return(false); } row = short.Parse(cellTargetPos[0]); col = short.Parse(cellTargetPos[1]); layer = short.Parse(cellTargetPos[2]); this.cellPos2 = new CellCoordModel(row, col, layer); if (taskParamArray.Count() > 4) { string strGoods = taskParamArray[4]; this.inputCellGoods = strGoods.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); } if (houseName == EnumStoreHouse.A1库房.ToString()) { mesStep = "PS-2"; } else { mesStep = "PS-8"; } break; } case SysCfg.EnumAsrsTaskType.DCR测试: { string[] cellTargetPos = taskParamArray[3].Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries); if (cellTargetPos == null || cellTargetPos.Count() < 3) { reStr = "DCR出库参数解析错误"; return(false); } row = short.Parse(cellTargetPos[0]); col = short.Parse(cellTargetPos[1]); layer = short.Parse(cellTargetPos[2]); this.cellPos2 = new CellCoordModel(row, col, layer); if (taskParamArray.Count() > 4) { string strGoods = taskParamArray[4]; this.inputCellGoods = strGoods.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); } if (houseName == EnumStoreHouse.A1库房.ToString()) { mesStep = "PS-5"; } else { mesStep = "PS-11"; } break; } case SysCfg.EnumAsrsTaskType.紧急出库: { string[] cellTargetPos = taskParamArray[2].Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries); if (cellTargetPos == null || cellTargetPos.Count() < 3) { reStr = "DCR出库参数解析错误"; return(false); } row = short.Parse(cellTargetPos[0]); col = short.Parse(cellTargetPos[1]); layer = short.Parse(cellTargetPos[2]); this.cellPos2 = new CellCoordModel(row, col, layer); if (taskParamArray.Count() > 3) { string strGoods = taskParamArray[3]; this.inputCellGoods = strGoods.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); } if (houseName == EnumStoreHouse.A1库房.ToString()) { mesStep = "PS-14"; } else { mesStep = "PS-15"; } break; } default: { reStr = "入库参数错误,不可识别的任务类型:" + taskType.ToString(); return(false); } } return(true); } catch (Exception ex) { reStr = ex.ToString(); return(false); } }
public bool CreateManualOutputTask(string houseName, CellCoordModel cell, ref string reStr) { AsrsCtlModel asrsModel = null; foreach (AsrsCtlModel m in asrsCtls) { if (m.HouseName == houseName) { asrsModel = m; break; } } if (asrsModel == null) { reStr = "未识别的: " + houseName; return(false); } SysCfg.EnumAsrsTaskType taskType = SysCfg.EnumAsrsTaskType.产品出库; EnumCellStatus cellStoreStats = EnumCellStatus.空闲; EnumGSTaskStatus cellTaskStatus = EnumGSTaskStatus.完成; asrsResourceManage.GetCellStatus(houseName, cell, ref cellStoreStats, ref cellTaskStatus); EnumGSEnabledStatus cellEnabledStatus = EnumGSEnabledStatus.启用; if (!asrsResourceManage.GetCellEnabledStatus(houseName, cell, ref cellEnabledStatus)) { reStr = string.Format("获取货位启用状态失败{0}-{1}-{2}", cell.Row, cell.Col, cell.Layer); return(false); } if (cellEnabledStatus == EnumGSEnabledStatus.禁用) { reStr = string.Format("货位{0}-{1}-{2}禁用,无法生成出库任务", cell.Row, cell.Col, cell.Layer); return(false); } if (cellTaskStatus == EnumGSTaskStatus.锁定) { reStr = "货位处于锁定状态"; return(false); } if (cellStoreStats == EnumCellStatus.空料框) { taskType = SysCfg.EnumAsrsTaskType.空筐出库; } List <short> asrsExtParams = new List <short>(); List <string> cellGoods = new List <string>(); if (!this.asrsResourceManage.GetStockDetail(houseName, cell, ref cellGoods)) { return(false); } if (dlgtAsrsExtParmas != null) { if (!dlgtAsrsExtParmas(cellGoods, ref asrsExtParams, ref reStr)) { return(false); } } // asrsModel.GenerateOutputTask(cell, null,taskType, false,asrsExtParams,1000); return(asrsModel.GenerateCheckoutTask(cell, taskType, false, ref reStr, 1000)); }