HH.WCS.Mobox3.NongFuLinZhi/Program.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HH.WCS.Mobox3.NongFuLinZhi/core/Monitor.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HH.WCS.Mobox3.NongFuLinZhi/wms/WMSHelper.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
HH.WCS.Mobox3.NongFuLinZhi/Program.cs
@@ -100,6 +100,7 @@ tasks.Add(GetTask(Monitor.BottleBlankTransportation)); //接驳位入库 tasks.Add(GetTask(Monitor.PPFDFullIn)); //瓶坯翻斗机非急产满框区补满托 tasks.Add(GetTask(Monitor.PGFDFullIn)); //瓶盖翻斗机非急产满框区补满托 tasks.Add(GetTask(Monitor.PGFDFullInJC)); //瓶盖翻斗机急产满框区补满托 空托区域补空托 tasks.Add(GetTask(Monitor.PPFDFullInEmpty)); //瓶坯注塑机非急产空框区补空托 HH.WCS.Mobox3.NongFuLinZhi/core/Monitor.cs
@@ -307,29 +307,111 @@ /// </summary> internal static void PPFDFullInEmpty() { //瓶坯非即产空框区堆叠库区一共四个货位,如果有三个货位是满的,就开始转运到瓶坯库区 //如果满货位小于等于一就开始从满框缓存区空框区域转运,如果满框缓存区空框区域无空托,则从瓶坯库转运 var db = new SqlHelper<object>().GetInstance(); var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "农夫林芝-瓶坯机" && a.S_UsingNow == "N" && a.S_WorkState == "执行中").First(); if(workInfo != null) { var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯非即产空框" && a.enable == 1).FirstOrDefault(); if(areaInfo != null) { var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == 0 && a.S_LOCK_STATE == "无").First(); if(locInfo != null) var LocList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == a.N_CAPACITY).ToList(); if(LocList.Count <= 1) { //生成任务 Location location = TaskProcess.BCPInOrOut(db, false, "瓶坯库区", ""); if (location != null) //需要从库区补充空托 Location location = TaskProcess.FJCKTLoc(); var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").First(); if(location != null && locInfo != null) { string cntrCode = getCntrCode(db, location); //创建作业 WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶坯非急产补空框", cntrCode, "瓶坯"); } } } else if (LocList.Count >= 2) { LogHelper.Info("瓶坯非即产空框 未配置"); //需要将空托转运到库区 foreach (var a in LocList) { if(a.S_LOCK_STATE == "无") { //生成任务 string cntrCode = getCntrCode(db, a); //创建作业 WMSHelper.CreateOpTask(a.S_CODE, "", "入库", "瓶坯非急产空框入库", cntrCode, "瓶坯"); break; } } } } #region //var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "农夫林芝-瓶坯机" && a.S_UsingNow == "N" && a.S_WorkState == "执行中").First(); //if(workInfo != null) //{ // var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯非即产空框" && a.enable == 1).FirstOrDefault(); // if(areaInfo != null) // { // var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == 0 && a.S_LOCK_STATE == "无").First(); // if(locInfo != null) // { // //生成任务 // Location location = TaskProcess.BCPInOrOut(db, false, "瓶坯库区", ""); // if (location != null) // { // string cntrCode = getCntrCode(db, location); // //创建作业 // WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶坯非急产补空框", cntrCode, "瓶坯"); // } // } // } // else // { // LogHelper.Info("瓶坯非即产空框 未配置"); // } //} #endregion } internal static void PGFDFullInJC() { var db = new SqlHelper<object>().GetInstance(); var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "农夫林芝-瓶坯机" && a.S_UsingNow == "Y" && a.S_WorkState == "执行中").First(); if(workInfo != null) { var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产满框" && a.enable == 1).FirstOrDefault(); if(areaInfo != null) { var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == 0 && a.S_LOCK_STATE == "无").First(); if (locInfo != null) { //开始转运 Location startLoca = TaskProcess.BCPInOrOut(db, false, "瓶坯即产满框缓存", workInfo.S_ItemCode); if (startLoca != null) { //创建作业 string cntrCode = getCntrCode(db, startLoca); WMSHelper.CreateOpTask(startLoca.S_CODE, locInfo.S_CODE, "出库", "瓶坯急产补满框", cntrCode, ""); } } } areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产空框" && a.enable == 1).FirstOrDefault(); if (areaInfo != null) { var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == 0 && a.S_LOCK_STATE == "无").ToList(); if (locInfo.Count == 2) { //开始转运 Location startLoca = TaskProcess.BCPInOrOut(db, false, "瓶坯即产满框缓存", ""); if (startLoca != null) { //创建作业 string cntrCode = getCntrCode(db, startLoca); WMSHelper.CreateOpTask(startLoca.S_CODE, locInfo[0].S_CODE, "出库", "瓶坯急产补空框", cntrCode, ""); } } } } } HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
@@ -1306,6 +1306,10 @@ .ToList(); if (locInfo.Count > 0) { if(areaName == "瓶坯即产满框缓存") { locInfo = locInfo.Where(a => a.N_ROW == 1 || a.N_ROW == 2).ToList(); } LogHelper.Info($"入库算法02:查询到可入货位的数量为:{locInfo.Count}"); foreach (var a in locInfo) { @@ -1437,6 +1441,10 @@ var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == it.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList(); if (locList.Count > 0) { if(areaName == "瓶坯即产满框缓存" && string.IsNullOrEmpty(itemCode)) { locList = locList.Where(a => a.N_ROW == 3).ToList(); } LogHelper.Info($"出库算法02:查询到可出货位数量:{locList.Count}"); foreach (var a in locList) { @@ -1629,7 +1637,60 @@ { LogHelper.Info($"{endAreaName}未配置"); } if(result == null) { if(endAreaName == "翻斗机库存空托下线(瓶坯)") { //瓶坯非即产空托下线 如果非即产空框库区无法入库,则下线到瓶坯即产满框缓存 4 5 排 areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产满框缓存" && a.enable == 1).FirstOrDefault(); if (areaInfo != null) { var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && (a.N_ROW == 4 || a.N_ROW == 5) && a.N_CURRENT_NUM == 0).OrderBy(a => a.N_ROW).OrderBy(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList(); if (locList.Count > 0) { foreach (var a in locList) { var rowInfo = db.Queryable<RowLock>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.S_ROW == a.S_ROW && a.S_LOCK_STATE == "无").First(); if (rowInfo != null && a.S_LOCK_STATE == "无") { result = a; break; } } } } else { LogHelper.Info("瓶坯即产满框缓存未配置"); } } if(endAreaName == "翻斗机即产空托下线(瓶坯)") { //瓶坯即产空托下线 如果即产空框库区无法入库,则下线到瓶坯即产满框缓存 3 排 areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产满框缓存" && a.enable == 1).FirstOrDefault(); if (areaInfo != null) { var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_ROW == 3 && a.N_CURRENT_NUM == 0).OrderBy(a => a.N_COL).First(); if (locInfo != null ) { var rowInfo = db.Queryable<RowLock>().Where(b => b.S_AREA_CODE == locInfo.S_AREA_CODE && b.S_ROW == locInfo.S_ROW && locInfo.S_LOCK_STATE == "无").First(); if (rowInfo != null && locInfo.S_LOCK_STATE == "无") { result = locInfo; } } } else { LogHelper.Info("瓶坯即产满框缓存未配置"); } if(result == null) { BCPEmptyOut(db, "翻斗机库存空托下线(瓶坯)"); } } } return result; } @@ -2394,6 +2455,38 @@ } } /// <summary> /// 计算瓶坯非即产空托起点 /// </summary> /// <returns></returns> internal static Location FJCKTLoc() { var db = new SqlHelper<object>().GetInstance(); Location result = null; //在瓶坯即产满框 查询 4 5两排的空框 var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产满框缓存" && a.enable == 1).FirstOrDefault(); if(areaInfo != null) { var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && (a.N_ROW == 4 || a.N_ROW == 5) && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList(); if(locList.Count > 0) { foreach (var a in locList) { var rowInfo = db.Queryable<RowLock>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.S_ROW == a.S_ROW && b.S_LOCK_STATE == "无").First(); if(rowInfo != null && a.S_LOCK_STATE == "无") { result = a; break; } } } } if(result == null) { result = TaskProcess.BCPInOrOut(db, false, "瓶坯库区", ""); } return result; } } } HH.WCS.Mobox3.NongFuLinZhi/wms/WMSHelper.cs
@@ -703,7 +703,7 @@ else { LogHelper.Info($"入库任务 计算终点,任务类型:{a.S_OP_DEF_NAME}"); if (a.S_OP_DEF_NAME == "接驳位入库" || a.S_OP_DEF_NAME == "瓶盖空托入库") if (a.S_OP_DEF_NAME == "接驳位入库" || a.S_OP_DEF_NAME == "瓶盖空托入库" || a.S_OP_DEF_NAME == "瓶坯非急产空框入库") { string itemCode = ""; var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_START_LOC).First();