| | |
| | | using HH.WCS.Mobox3.NFLZ.process; |
| | | using HH.WCS.Mobox3.NFLZ.util; |
| | | using HH.WCS.Mobox3.NFLZ.wms; |
| | | using Newtonsoft.Json; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Configuration; |
| | |
| | | internal static void BottleBlankTransportation() |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | #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 == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "无").Includes(a => a.LocCntrRel).First(); |
| | | if (locInfo != null) |
| | | { |
| | | LogHelper.Info($"【瓶盖满托转运】瓶坯接驳位查询到需入库的瓶坯,货位编码:{locInfo.S_CODE}"); |
| | | string cntrCode = getCntrCode(db, locInfo); |
| | | if (string.IsNullOrEmpty(cntrCode)) |
| | | { |
| | | //创建作业 |
| | | WMSHelper.CreateOpTask(locInfo.S_CODE, "", "入库", "接驳位入库", cntrCode, "瓶盖"); |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"【瓶盖满托转运】当前货位未绑定托盘码,货位编码:{locInfo.S_CODE}"); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("【瓶盖满托转运】瓶盖入库接驳 未配置"); |
| | | } |
| | | #endregion |
| | | |
| | | #region 瓶盖空托入库 |
| | | areaInfo = Settings.areaInfos.Where(a => a.areaName == "瓶盖非即产空框" && a.enable == 1).FirstOrDefault(); |
| | | 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 (!string.IsNullOrEmpty(cntrCode)) |
| | | { |
| | | //创建作业 |
| | | WMSHelper.CreateOpTask(locInfo.S_CODE, "", "入库", "接驳位入库", cntrCode, "瓶坯"); |
| | | WMSHelper.CreateOpTask(locInfo.S_CODE, "", "入库", "瓶坯接驳位入库", cntrCode, "瓶坯"); |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 瓶坯翻斗机非急产满框区补满托 |
| | | /// 瓶坯翻斗机非即产满框区补满托 |
| | | /// </summary> |
| | | internal static void PPFDFullIn() |
| | | { |
| | |
| | | { |
| | | string cntrCode = getCntrCode(db,location); |
| | | //创建作业 |
| | | WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶坯非急产补满框", cntrCode, "瓶坯"); |
| | | WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶坯非即产补满框", cntrCode, "瓶坯"); |
| | | } |
| | | } |
| | | } |
| | |
| | | { |
| | | string cntrCode = getCntrCode(db, location); |
| | | //创建作业 |
| | | WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶盖非急产补满框", cntrCode, "瓶盖"); |
| | | WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶盖非即产补满框大包装", cntrCode, "瓶盖"); |
| | | } |
| | | } |
| | | if (itemCount.Count == 2) |
| | |
| | | { |
| | | string cntrCode = getCntrCode(db, location); |
| | | //创建作业 |
| | | WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶盖非急产补满框", cntrCode, "瓶盖"); |
| | | WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶盖非即产补满框大包装", cntrCode, "瓶盖"); |
| | | } |
| | | } |
| | | } |
| | |
| | | { |
| | | string cntrCode = getCntrCode(db, location); |
| | | //创建作业 |
| | | WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶盖非急产补满框", cntrCode, "瓶盖"); |
| | | WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶盖非即产补满框大包装", cntrCode, "瓶盖"); |
| | | } |
| | | } |
| | | } |
| | |
| | | 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 == a.N_CAPACITY).ToList(); |
| | | var LocList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0).ToList(); |
| | | if(LocList.Count <= 1) |
| | | { |
| | | //需要从库区补充空托 |
| | | 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) |
| | | LogHelper.Info($"瓶坯非即产补空框 {JsonConvert.SerializeObject(LocList)}"); |
| | | var taskInfo = db.Queryable<WCSTask>().Where(a => a.S_TYPE == "瓶坯非即产补空框" && a.S_B_STATE != "完成" && a.S_B_STATE != "取消").First(); |
| | | if(taskInfo == null) |
| | | { |
| | | string cntrCode = getCntrCode(db, location); |
| | | //创建作业 |
| | | WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶坯非急产补空框", cntrCode, "瓶坯"); |
| | | var wmsTask = db.Queryable<WMSTask>().Where(a => a.S_OP_DEF_NAME == "瓶坯非即产补空框" && (a.N_B_STATE == 0 || a.N_B_STATE == 1)).First(); |
| | | if(wmsTask == 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 == "无").OrderBy(a => a.N_ROW).First(); |
| | | if (location != null && locInfo != null) |
| | | { |
| | | string cntrCode = getCntrCode(db, location); |
| | | //创建作业 |
| | | WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶坯非即产补空框", cntrCode, "瓶坯"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (LocList.Count >= 2) |
| | | |
| | | LocList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM == a.N_CAPACITY).ToList(); |
| | | if (LocList.Count > 2) |
| | | { |
| | | //需要将空托转运到库区 |
| | | foreach (var a in LocList) |
| | | //判断任务是否存在 |
| | | LogHelper.Info($"瓶坯非即产空托入库 {JsonConvert.SerializeObject(LocList)}"); |
| | | 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) |
| | | { |
| | | if(a.S_LOCK_STATE == "无") |
| | | //判断作业是否存在 |
| | | var wmsTask = db.Queryable<WMSTask>().Where(a => a.S_OP_DEF_NAME == "瓶坯非即产空框入库" && (a.N_B_STATE == 0 || a.N_B_STATE == 1)).First(); |
| | | if(wmsTask == null) |
| | | { |
| | | //生成任务 |
| | | string cntrCode = getCntrCode(db, a); |
| | | //创建作业 |
| | | WMSHelper.CreateOpTask(a.S_CODE, "", "入库", "瓶坯非急产空框入库", cntrCode, "瓶坯"); |
| | | break; |
| | | //需要将空托转运到库区 |
| | | foreach (var a in LocList) |
| | | { |
| | | if (a.S_LOCK_STATE == "无") |
| | | { |
| | | //生成任务 |
| | | string cntrCode = getCntrCode(db, a); |
| | | //创建作业 |
| | | WMSHelper.CreateOpTask(a.S_CODE, "", "入库", "瓶坯非即产空框入库", cntrCode, "瓶坯"); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | // { |
| | | // string cntrCode = getCntrCode(db, location); |
| | | // //创建作业 |
| | | // WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶坯非急产补空框", cntrCode, "瓶坯"); |
| | | // WMSHelper.CreateOpTask(location.S_CODE, locInfo.S_CODE, "入库", "瓶坯非即产补空框", cntrCode, "瓶坯"); |
| | | // } |
| | | // } |
| | | // } |
| | |
| | | |
| | | } |
| | | |
| | | internal static void PGFDFullInJC() |
| | | internal static void PPFDFullInJC() |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "农夫林芝-瓶坯机" && a.S_UsingNow == "Y" && a.S_WorkState == "执行中").First(); |
| | | var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("瓶坯翻斗机") && 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) |
| | | { |
| | |
| | | { |
| | | //创建作业 |
| | | string cntrCode = getCntrCode(db, startLoca); |
| | | WMSHelper.CreateOpTask(startLoca.S_CODE, locInfo.S_CODE, "出库", "瓶坯急产补满框", cntrCode, ""); |
| | | WMSHelper.CreateOpTask(startLoca.S_CODE, locInfo.S_CODE, "出库", "瓶坯即产补满框", cntrCode, ""); |
| | | } |
| | | } |
| | | } |
| | |
| | | { |
| | | //创建作业 |
| | | string cntrCode = getCntrCode(db, startLoca); |
| | | WMSHelper.CreateOpTask(startLoca.S_CODE, locInfo[0].S_CODE, "出库", "瓶坯急产补空框", cntrCode, ""); |
| | | WMSHelper.CreateOpTask(startLoca.S_CODE, locInfo[0].S_CODE, "出库", "瓶坯即产补空框", cntrCode, ""); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 瓶盖小包装盖转运 |
| | | /// </summary> |
| | | /// <exception cref="NotImplementedException"></exception> |
| | | internal static void PGXBZZY() |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | Location endLoca = null; |
| | | var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("瓶盖") && a.S_ITEM_TYPE == "小包装盖" && a.S_WorkState == "执行中").ToList(); |
| | | if(workInfo.Count > 0) |
| | | { |
| | | foreach(var it in workInfo) |
| | | { |
| | | LogHelper.Info($"瓶盖小包装盖转运: 查询产线号:{it.S_PLineNo},物料编码:{it.S_ItemCode}"); |
| | | //查询终点货位 |
| | | string endAreaName = it.S_PLineNo.Split('-')[1].Substring(0, 1) + "号瓶盖翻斗机小包装"; |
| | | var areaInfo = Settings.areaInfos.Where(b => b.areaName == endAreaName && b.enable == 1).FirstOrDefault(); |
| | | if(areaInfo != null) |
| | | { |
| | | var taskInfo = db.Queryable<WCSTask>().Where(a => a.S_END_AREA == areaInfo.areaCode && a.S_B_STATE != "完成" && a.S_B_STATE != "取消").First(); |
| | | if(taskInfo != null) |
| | | { |
| | | //控制一个库区只能一次一条任务 |
| | | return; |
| | | } |
| | | |
| | | var locInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaInfo.areaCode && b.N_CURRENT_NUM == 0).OrderBy(b => b.N_ROW).OrderBy(b => b.N_COL).Take(1).PartitionBy(b => b.N_ROW).ToList(); |
| | | if(locInfo.Count > 0) |
| | | { |
| | | foreach(var endloc in locInfo) |
| | | { |
| | | var rowInfo = db.Queryable<RowLock>().Where(a => a.S_AREA_CODE == endloc.S_AREA_CODE && a.S_ROW == endloc.S_ROW).First(); |
| | | LogHelper.Info($"瓶盖小包装盖转运:查询锁信息,货位锁:{endloc.S_LOCK_STATE},排锁:{JsonConvert.SerializeObject(rowInfo)}"); |
| | | if(rowInfo != null && rowInfo.S_LOCK_STATE == "无" && endloc.S_LOCK_STATE == "无") |
| | | { |
| | | endLoca = endloc; |
| | | break; |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"{endAreaName} 未配置"); |
| | | } |
| | | |
| | | //查询起点货位 |
| | | LogHelper.Info($"瓶盖小包装盖转运:获取到终点货位信息:{JsonConvert.SerializeObject(endLoca)}"); |
| | | if (endLoca != null) |
| | | { |
| | | Location startLoca = TaskProcess.BCPInOrOut(db,true,"瓶盖库区",it.S_ItemCode + it.S_ITEM_TYPE); |
| | | if (startLoca != null) |
| | | { |
| | | string cntrCode = getCntrCode(db, startLoca); |
| | | WMSHelper.CreateOpTask(startLoca.S_CODE, endLoca.S_CODE, "出库", "瓶盖非即产补满框小包装", cntrCode, ""); |
| | | } |
| | | } |
| | | } |