| | |
| | | if (mst.S_TYPE.Contains("满托下线")) |
| | | { |
| | | LogHelper.Info($"空托任务生成处理,任务类型:{mst.S_TYPE}"); |
| | | var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯空托" && a.enable == 1).First(); |
| | | string areaName = mst.S_TYPE.Contains("库存") ? "瓶胚非即产空框" : "瓶胚即产空框"; |
| | | var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).First(); |
| | | if(areaInfo != null) |
| | | { |
| | | startLoca = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").OrderBy(a => a.N_COL).First(); |
| | | startLoca = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").OrderBy(a => a.N_ROW).First(); |
| | | if (startLoca != null) |
| | | { |
| | | LogHelper.Info("startLoca" + JsonConvert.SerializeObject(startLoca)); |
| | |
| | | LogHelper.Info($"满托任务生成处理,任务类型:{mst.S_TYPE}"); |
| | | string startArea = ""; |
| | | LinZhiBCPWorkOrder bcpW = null; |
| | | if (mst.S_TYPE.Contains("瓶坯")) |
| | | { |
| | | bcpW = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("农夫林芝-瓶坯翻斗机") && a.S_WorkState == "执行中").First(); |
| | | } |
| | | else |
| | | { |
| | | bcpW = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("农夫林芝-瓶盖翻斗机") && a.S_WorkState == "执行中").First(); |
| | | } |
| | | bcpW = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_WorkNo == mst.S_WORK_NO && a.S_WorkState == "执行中").First(); |
| | | |
| | | if (mst.S_TYPE.Contains("瓶盖")) |
| | | { |
| | | //瓶盖无即产即用和非即产即用 |
| | | var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "瓶盖非即产即用" && a.enable == 1).FirstOrDefault(); |
| | | var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "瓶盖非即产满框" && a.enable == 1).FirstOrDefault(); |
| | | if (bcpInfo != null) |
| | | { |
| | | startLoca = DeviceProcess.getFDSXArea(db, bcpW, bcpInfo.areaCode); |
| | |
| | | { |
| | | if (bcpW.S_UsingNow == "Y") |
| | | { |
| | | LogHelper.Info($"瓶坯即产即用A库区查找"); |
| | | startArea = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产即用A" && a.enable == 1).FirstOrDefault().areaCode; |
| | | LogHelper.Info($"瓶胚即产满框 查找"); |
| | | startArea = Settings.areaInfos.Where(a => a.areaName == "瓶胚即产满框" && a.enable == 1).FirstOrDefault().areaCode; |
| | | startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea); |
| | | if (startLoca == null) |
| | | { |
| | | LogHelper.Info($"瓶坯即产即用A库区未找到满托,去瓶坯即产即用B库区查找"); |
| | | startLoca = TaskProcess.BCPInOrOut(db, true, "瓶坯即产即用B", bcpW.S_ItemCode); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | startArea = Settings.areaInfos.Where(a => a.areaName == "瓶坯非即产即用" && a.enable == 1).FirstOrDefault().areaCode; |
| | | string areaName = bcpW.S_PLineNo.Split('-')[1].Substring(0, 1) + "号瓶胚翻斗机非即产满框"; |
| | | startArea = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).FirstOrDefault().areaCode; |
| | | startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea); |
| | | } |
| | | } |
| | |
| | | } |
| | | if(result == null) |
| | | { |
| | | //result = TaskProcess.BCPInOrOut(db, true, "瓶坯库区", itemCode); |
| | | result = getJBLoc(db, result); |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | |
| | | internal static Location BCPEmptyOut(SqlSugarClient db, string taskName) |
| | | { |
| | | Location result = null; |
| | | //翻斗机库存空托下线(瓶盖) |
| | | string endAreaName = taskName.Contains("瓶盖") ? "瓶盖空托" : "瓶坯空托"; |
| | | |
| | | string endAreaName = taskName.Contains("瓶盖") ? "瓶盖非即产空框" : taskName.Contains("库存") ? "瓶胚非即产空框" : "瓶胚即产空框"; |
| | | var areaInfo = Settings.areaInfos.Where(a => a.areaName == endAreaName && a.enable == 1).FirstOrDefault(); |
| | | if(areaInfo != null) |
| | | if (areaInfo != null) |
| | | { |
| | | var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").OrderBy(a => a.N_COL).First(); |
| | | if(locInfo != null) |
| | | var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").OrderBy(a => a.N_ROW).First(); |
| | | if (locInfo != null) |
| | | { |
| | | result = locInfo; |
| | | } |
| | |
| | | { |
| | | LogHelper.Info($"{endAreaName}未配置"); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 半成品移库 |
| | | /// </summary> |
| | | /// <param name="action">true - 工单开启 false - 工单关闭</param> |
| | | /// <param name="machine">设备</param> |
| | | internal static void BCPYiKu(bool action, string machine) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | Location startLoc = null; |
| | | Location endLoc = null; |
| | | if (action) |
| | | { |
| | | if(machine == "瓶坯翻斗机") |
| | | { |
| | | //瓶坯翻斗机 |
| | | //开启,判断工单类型,根据工单类型补充对应的库区 即产即用不补充 |
| | | var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯非即产即用" && a.enable == 1).FirstOrDefault(); |
| | | if (areaInfo != null) |
| | | { |
| | | var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "农夫林芝-瓶批翻斗机" && a.S_WorkState == "执行中").First(); |
| | | if (workInfo.S_UsingNow == "N") |
| | | { |
| | | startLoc = TaskProcess.BCPInOrOut(db, false, "瓶坯库区", workInfo.S_ItemCode); |
| | | endLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").OrderBy(a => a.N_COL).First(); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("瓶坯非即产即用未配置"); |
| | | } |
| | | |
| | | } |
| | | if (machine == "瓶坯注塑机") |
| | | { |
| | | //开启,查询 瓶坯空托 是否空托数量大于3托,如果不大于,则补空托 |
| | | 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_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").ToList(); |
| | | if(locList.Count > 2) |
| | | { |
| | | LogHelper.Info("瓶坯空托 补空托"); |
| | | startLoc = TaskProcess.BCPInOrOut(db, false, "瓶坯库区",""); |
| | | endLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").OrderBy(a => a.N_COL).First(); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("瓶坯注塑机空托未配置"); |
| | | } |
| | | |
| | | } |
| | | if (machine == "瓶盖翻斗机") |
| | | { |
| | | //开启,查询 瓶盖非急产急用 物料是否满,不满则补充物料 |
| | | 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 < a.N_CAPACITY && a.S_LOCK_STATE == "无").First(); |
| | | if(locInfo != null) |
| | | { |
| | | LogHelper.Info("瓶盖非即产即用 补满托"); |
| | | var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "农夫林芝-瓶盖翻斗机" && a.S_WorkState == "执行中").First(); |
| | | startLoc = TaskProcess.BCPInOrOut(db, false, "瓶盖库区", workInfo.S_ItemCode); |
| | | endLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "无").OrderBy(a => a.N_COL).First(); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("瓶盖非即产即用未配置"); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (machine == "瓶坯翻斗机") |
| | | { |
| | | //关闭,查询 瓶坯非即产即用 瓶坯即产即用A 瓶坯即产即用B 是否有物料,有则入库 |
| | | var areaList = Settings.areaInfos.Where(a => (a.areaName == "瓶坯非即产即用" || a.areaName == "瓶坯即产即用A") && a.enable == 1).ToList(); |
| | | if (areaList.Count > 0) |
| | | { |
| | | foreach(var a in areaList) |
| | | { |
| | | startLoc = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.areaCode && b.N_CURRENT_NUM > 0 && b.S_LOCK_STATE == "无").Includes(b => b.LocCntrRel).First(); |
| | | if (startLoc != null) break; |
| | | } |
| | | } |
| | | if (startLoc == null) |
| | | { |
| | | var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产即用B" && 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).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList(); |
| | | if(locInfo.Count > 0) |
| | | { |
| | | foreach(var a in locInfo) |
| | | { |
| | | int row = a.N_ROW; |
| | | var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaInfo.areaCode && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "入库锁" || b.S_LOCK_STATE == "出库锁")).First(); |
| | | if(lockInfo == null) |
| | | { |
| | | startLoc = a; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if(startLoc != null) |
| | | { |
| | | if (startLoc.LocCntrRel != null) |
| | | { |
| | | var itemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == startLoc.LocCntrRel.S_CNTR_CODE).First(); |
| | | if (itemInfo != null) |
| | | { |
| | | endLoc = TaskProcess.BCPInOrOut(db, true, "瓶坯库区", itemInfo.S_ITEM_CODE); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (machine == "瓶坯注塑机") |
| | | { |
| | | //关闭,查询 瓶坯空托 是否有空托,有则入库 |
| | | var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶坯注塑机空托" && a.enable == 1).FirstOrDefault(); |
| | | if (areaInfo != null) |
| | | { |
| | | startLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").Includes(a => a.LocCntrRel).First(); |
| | | if(startLoc != null) |
| | | { |
| | | endLoc = TaskProcess.BCPInOrOut(db, true, "瓶坯库区", ""); |
| | | } |
| | | } |
| | | } |
| | | if (machine == "瓶盖翻斗机") |
| | | { |
| | | //关闭, 1、查询 瓶盖空托 是否还有托盘,有则入库 2、查询瓶盖非即产即用 是否有物料, 有则入库 |
| | | //关闭,查询 瓶坯空托 是否有空托,有则入库 |
| | | |
| | | //查询空托库区 |
| | | var areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶盖空托" && a.enable == 1).FirstOrDefault(); |
| | | if (areaInfo != null) |
| | | { |
| | | startLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").Includes(a => a.LocCntrRel).First(); |
| | | if (startLoc != null) |
| | | { |
| | | endLoc = TaskProcess.BCPInOrOut(db, true, "瓶盖库区", ""); |
| | | } |
| | | } |
| | | |
| | | //查询满托库区 |
| | | if(startLoc == null) |
| | | { |
| | | areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶盖非即产即用" && a.enable == 1).FirstOrDefault(); |
| | | if (areaInfo != null) |
| | | { |
| | | startLoc = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").Includes(a => a.LocCntrRel).First(); |
| | | if (startLoc != null) |
| | | { |
| | | if(startLoc.LocCntrRel != null) |
| | | { |
| | | var itemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == startLoc.LocCntrRel.S_CNTR_CODE).First(); |
| | | if(itemInfo != null) |
| | | { |
| | | endLoc = TaskProcess.BCPInOrOut(db, true, "瓶盖库区", itemInfo.S_ITEM_CODE); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (startLoc != null && endLoc != null) |
| | | { |
| | | WMSHelper.CreateOpTask(startLoc.S_CODE, endLoc.S_CODE, "入库", "半成品移库", startLoc.LocCntrRel.S_CNTR_CODE); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// FuLeWebPost |