| | |
| | | using HH.WCS.Mobox3.NFLZ.wms; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Configuration; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading; |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 瓶盖转运 |
| | | /// 转运任务 |
| | | /// </summary> |
| | | internal static void BottleBlankTransportation() |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var jbwInfo = Settings.areaInfos.Where(a => a.areaName == "瓶盖入库接驳位" && a.enable == 1).FirstOrDefault(); |
| | | if(jbwInfo != null) |
| | | #region 瓶盖满托入库 |
| | | 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 == jbwInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").Includes(a => a.LocCntrRel).First(); |
| | | if(locInfo != null) |
| | | var locInfo = 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 (locInfo != null) |
| | | { |
| | | LogHelper.Info($"【瓶盖转运】瓶坯接驳位查询到需入库的瓶坯,货位编码:{locInfo.S_CODE}"); |
| | | if(locInfo.LocCntrRel != null) |
| | | LogHelper.Info($"【瓶盖满托转运】瓶坯接驳位查询到需入库的瓶坯,货位编码:{locInfo.S_CODE}"); |
| | | if (locInfo.LocCntrRel != null) |
| | | { |
| | | //创建作业 |
| | | WMSHelper.CreateOpTask(locInfo.S_CODE, "", "入库", "瓶盖转运", locInfo.LocCntrRel.S_CNTR_CODE,"瓶盖"); |
| | | WMSHelper.CreateOpTask(locInfo.S_CODE, "", "入库", "接驳位入库", locInfo.LocCntrRel.S_CNTR_CODE, "瓶盖"); |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"【瓶盖转运】当前货位未绑定托盘码,货位编码:{locInfo.S_CODE}"); |
| | | LogHelper.Info($"【瓶盖满托转运】当前货位未绑定托盘码,货位编码:{locInfo.S_CODE}"); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("【瓶盖转运】瓶坯接驳位未配置"); |
| | | LogHelper.Info("【瓶盖满托转运】瓶盖入库接驳 未配置"); |
| | | } |
| | | #endregion |
| | | |
| | | #region 瓶坯空托入库 |
| | | 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 == "无").Includes(a => a.LocCntrRel).First(); |
| | | if(locInfo != null && locInfo.LocCntrRel != null) |
| | | { |
| | | //创建作业 |
| | | WMSHelper.CreateOpTask(locInfo.S_CODE, "", "入库", "瓶盖空托入库", locInfo.LocCntrRel.S_CNTR_CODE, "瓶盖"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("【瓶盖空托转运】瓶盖非即产空框 未配置"); |
| | | } |
| | | #endregion |
| | | |
| | | #region 瓶坯满托入库 |
| | | 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) |
| | | { |
| | | string cntr = ""; |
| | | var cntrList = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == locInfo.S_CODE).ToList(); |
| | | if (cntrList.Count > 0) |
| | | { |
| | | foreach (var a in cntrList) |
| | | { |
| | | cntr = cntr + a.S_CNTR_CODE + ","; |
| | | } |
| | | } |
| | | cntr = cntr.TrimEnd(','); |
| | | //创建作业 |
| | | WMSHelper.CreateOpTask(locInfo.S_CODE, "", "入库", "接驳位入库", cntr, "瓶坯"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("【瓶坯满托转运】瓶胚入库接驳 未配置"); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <exception cref="NotImplementedException"></exception> |
| | | internal static void BCPWorkSurveillance() |
| | | { |
| | | //判断当前半成品工单是否有执行中的任务,如果没有,则讲线边库的物料入库 |
| | | //瓶盖翻斗机工单 |
| | | //开启,查询 瓶盖非急产急用 物料是否满,不满则补充物料 |
| | | //关闭, 1、查询 瓶盖空托 是否还有托盘,有则入库 2、查询瓶盖非即产即用 是否有物料, 有则入库 |
| | | //瓶坯翻斗机 |
| | | //开启,查询是否为非即产即用,如果为非即产即用,则判断瓶坯非即产即用库区是否满, 不满则补空物料 |
| | | //关闭,查询 瓶坯非即产即用 瓶坯即产即用A 瓶坯即产即用B 是否有物料,有则入库 |
| | | //瓶坯注塑机 |
| | | //开启,查询 瓶坯空托 是否空托数量大于3托,如果不大于,则补空托 |
| | | //关闭,查询 瓶坯空托 是否有空托,有则入库 |
| | | |
| | | |
| | | |
| | | //判断当前半成品工单是否有执行中的任务 |
| | | //工单类型: 1、农夫林芝-瓶坯机 2、农夫林芝-瓶盖翻斗机 3、农夫林芝-瓶坯翻斗机 |
| | | bool PPZUUSE = false; //瓶坯机是否使用 |
| | | bool PPFDUSE = false; //瓶坯翻斗机是否使用 |
| | | bool PGFDUSE = false; //瓶盖翻斗机是否使用 |
| | | |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var workList = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_WorkState == "执行中").ToList(); |
| | | if(workList.Count == 0) |
| | | if (workList.Count > 0) |
| | | { |
| | | var taskInfo = db.Queryable<WCSTask>().Where(a => a.S_TYPE == "接驳位移库" && a.S_B_STATE != "完成" && a.S_B_STATE != "取消" && a.S_B_STATE != "卸货完成" && a.S_B_STATE != "开始卸货" && a.S_B_STATE != "取货完成").First(); |
| | | if(taskInfo == null) |
| | | foreach (var a in workList) |
| | | { |
| | | var areaInfo = Settings.areaInfos.Where(a => (a.areaName == "瓶坯非即产即用" || a.areaName == "瓶坯即产即用A") && a.enable == 1).ToList(); |
| | | if (areaInfo.Count > 0) |
| | | if (a.S_PLineNo == "农夫林芝-瓶坯机") |
| | | { |
| | | foreach (var a in areaInfo) |
| | | { |
| | | var locInfo = 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 (locInfo != null) |
| | | { |
| | | //创建作业 |
| | | WMSHelper.CreateOpTask(locInfo.S_CODE, "", "入库", "接驳位移库", locInfo.LocCntrRel.S_CNTR_CODE); |
| | | } |
| | | |
| | | } |
| | | PPZUUSE = true; |
| | | } |
| | | |
| | | var areaInfoTwo = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产即用B" && a.enable == 1).First(); |
| | | if (areaInfoTwo != null) |
| | | else if (a.S_PLineNo == "农夫林芝-瓶盖翻斗机") |
| | | { |
| | | var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfoTwo.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) |
| | | { |
| | | if(a.S_LOCK_STATE == "无") |
| | | { |
| | | //创建作业 |
| | | WMSHelper.CreateOpTask(a.S_CODE, "", "入库", "接驳位移库", a.LocCntrRel.S_CNTR_CODE,"瓶坯"); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | PGFDUSE = true; |
| | | } |
| | | else |
| | | { |
| | | PPFDUSE = true; |
| | | } |
| | | } |
| | | } |
| | | |
| | | //瓶坯机使用,则从 瓶坯库区 补充空托到 瓶坯空托 ,未使用,则将 瓶坯空托 的空托 移到 瓶坯库区 |
| | | //瓶坯翻斗机使用,则从 瓶坯库区 补充空托到 瓶坯即产即用/瓶坯非即产即用 ,未使用,则将 瓶坯即产即用/瓶坯非即产即用 的空托 移到 瓶坯库区 |
| | | //瓶盖翻斗机使用,则从 瓶盖库区 补充空托到 瓶坯非即产即用 ,未使用,则将 瓶坯非即产即用 的空托 移到 瓶盖库区 |
| | | |
| | | TaskProcess.BCPYiKu(PPZUUSE, "瓶坯注塑机"); |
| | | TaskProcess.BCPYiKu(PPFDUSE, "瓶坯翻斗机"); |
| | | TaskProcess.BCPYiKu(PGFDUSE, "瓶盖翻斗机"); |
| | | |
| | | } |
| | | |
| | | internal static void JBDEIN() |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | 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) |
| | | { |
| | | string cntr = ""; |
| | | var cntrList = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == locInfo.S_CODE).ToList(); |
| | | if(cntrList.Count > 0) |
| | | { |
| | | foreach(var a in cntrList) |
| | | { |
| | | cntr = cntr + a.S_CNTR_CODE + ","; |
| | | } |
| | | } |
| | | cntr = cntr.TrimEnd(','); |
| | | //创建作业 |
| | | WMSHelper.CreateOpTask(locInfo.S_CODE, "", "入库", "接驳位入库", cntr, "瓶坯"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("瓶胚入库接驳 未配置"); |
| | | } |
| | | } |
| | | } |
| | | } |