| | |
| | | LinZhiBCPWorkOrder bcpW = null; |
| | | bcpW = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_WorkNo == mst.S_WORK_NO && a.S_WorkState == "执行中").First(); |
| | | LogHelper.Info($"满托任务生成处理,工单:{JsonConvert.SerializeObject(bcpW)}"); |
| | | if (mst.S_TYPE.Contains("瓶盖")) |
| | | { |
| | | //瓶盖无即产即用和非即产即用 |
| | | var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "瓶盖非即产满框" && a.enable == 1).FirstOrDefault(); |
| | | if (bcpInfo != null) |
| | | if (bcpW != null) |
| | | { |
| | | if (mst.S_TYPE.Contains("瓶盖")) |
| | | { |
| | | startLoca = DeviceProcess.getFDSXArea(db, bcpW, bcpInfo.areaCode); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (bcpW.S_UsingNow == "Y") |
| | | { |
| | | LogHelper.Info($"瓶坯即产满框 查找"); |
| | | startArea = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产满框" && a.enable == 1).FirstOrDefault().areaCode; |
| | | startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea); |
| | | //瓶盖无即产即用和非即产即用 |
| | | var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "瓶盖非即产满框" && a.enable == 1).FirstOrDefault(); |
| | | if (bcpInfo != null) |
| | | { |
| | | startLoca = DeviceProcess.getFDSXArea(db, bcpW, bcpInfo.areaCode); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"瓶坯翻斗机非即产满框 查找"); |
| | | 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 (bcpW.S_UsingNow == "Y") |
| | | { |
| | | LogHelper.Info($"瓶坯即产满框 查找"); |
| | | startArea = Settings.areaInfos.Where(a => a.areaName == "瓶坯即产满框" && a.enable == 1).FirstOrDefault().areaCode; |
| | | startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea); |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"瓶坯翻斗机非即产满框 查找"); |
| | | 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 (startLoca != null) |
| | | { |
| | | LogHelper.Info("startLoca" + JsonConvert.SerializeObject(startLoca)); |
| | | string taskType = ""; |
| | | if (mst.S_TYPE == "翻斗机即产空托下线(瓶坯)") taskType = "翻斗机即产满托上线(瓶坯)"; |
| | | if (mst.S_TYPE == "翻斗机库存空托下线(瓶坯)") taskType = "翻斗机库存满托上线(瓶坯)"; |
| | | if (mst.S_TYPE == "翻斗机库存空托下线(瓶盖)") taskType = "翻斗机库存满托上线(瓶盖)"; |
| | | var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoca.S_CODE).First(); |
| | | if (cntrInfo != null) |
| | | if (startLoca != null) |
| | | { |
| | | WMSHelper.CreateOpTask(startLoca.S_CODE, mst.S_START_LOC, "出库", taskType, cntrInfo.S_CNTR_CODE,"","",bcpW.S_WorkNo); |
| | | LogHelper.Info("startLoca" + JsonConvert.SerializeObject(startLoca)); |
| | | string taskType = ""; |
| | | if (mst.S_TYPE == "翻斗机即产空托下线(瓶坯)") taskType = "翻斗机即产满托上线(瓶坯)"; |
| | | if (mst.S_TYPE == "翻斗机库存空托下线(瓶坯)") taskType = "翻斗机库存满托上线(瓶坯)"; |
| | | if (mst.S_TYPE == "翻斗机库存空托下线(瓶盖)") taskType = "翻斗机库存满托上线(瓶盖)"; |
| | | var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoca.S_CODE).First(); |
| | | if (cntrInfo != null) |
| | | { |
| | | WMSHelper.CreateOpTask(startLoca.S_CODE, mst.S_START_LOC, "出库", taskType, cntrInfo.S_CNTR_CODE,"","",bcpW.S_WorkNo); |
| | | } |
| | | else LogHelper.Info($"未绑定托盘,货位号:{startLoca.S_CODE}"); |
| | | } |
| | | else LogHelper.Info($"未绑定托盘,货位号:{startLoca.S_CODE}"); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | /// <param name="taskName"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="NotImplementedException"></exception> |
| | | internal static Location BCPFullOut(SqlSugarClient db, string taskName, string itemCode) |
| | | internal static Location BCPFullOut(SqlSugarClient db, string taskName, string itemCode,string batch) |
| | | { |
| | | Location result = null; |
| | | |
| | | LogHelper.Info($"瓶坯注塑满托下线:类型:{taskName},物料编码:{itemCode}"); |
| | | LogHelper.Info($"瓶坯注塑满托下线:类型:{taskName},物料编码:{itemCode},批次号:{batch}"); |
| | | if (taskName.Contains("即产")) |
| | | { |
| | | //注塑机即产即用下线,首先下线到即产即用满框线边,满眶线边满了,下到即产即用满框缓存区,满框缓存区满了,下到入库接驳堆叠位 |
| | |
| | | NDCApi.CancelOrder(TN_Task.S_CODE.Trim()); |
| | | OperateStatus(TN_Task, 7); |
| | | } |
| | | |
| | | internal static Location BCPInOrOutTwo(SqlSugarClient db, string areaName, string itemCode) |
| | | { |
| | | Location result = null; |
| | | var areaInfo = Settings.areaInfos.Where(a => a.areaName.Contains(areaName) && a.enable == 1).OrderByDescending(a => a.pri).ToList(); |
| | | if (areaInfo.Count > 0) |
| | | { |
| | | foreach (var it in areaInfo) |
| | | { |
| | | LogHelper.Info($"瓶坯非即产满框转运:area:{it.areaName},itemCode:{itemCode}"); |
| | | 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) |
| | | { |
| | | LogHelper.Info($"瓶坯非即产满框转运:查询到可出货位数量:{locList.Count}"); |
| | | foreach (var a in locList) |
| | | { |
| | | LogHelper.Info($"瓶坯非即产满框转运:查询货位:{a.S_CODE},锁状态:{a.S_LOCK_STATE}"); |
| | | if (a.S_LOCK_STATE == "无") |
| | | { |
| | | var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First(); |
| | | if (cntrInfo != null) |
| | | { |
| | | LogHelper.Info($"瓶坯非即产满框转运:当前货位绑定的托盘码为:{cntrInfo.S_CNTR_CODE}"); |
| | | string endItemCode = ""; |
| | | var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First(); |
| | | if (itemInfo != null) |
| | | { |
| | | endItemCode = itemInfo.S_ITEM_CODE; |
| | | } |
| | | if (endItemCode == itemCode) |
| | | { |
| | | LogHelper.Info($"瓶坯非即产满框转运:当前货位绑定的物料编码为:{endItemCode},物料类型为:{itemInfo.S_BATCH_NO},绑定时间为:{itemInfo.T_CREATE}"); |
| | | if ((itemInfo.S_BATCH_NO == "非即产" && itemInfo.T_CREATE.AddHours(Settings.lQHours) <= DateTime.Now) || itemInfo.S_BATCH_NO == "即产") |
| | | { |
| | | //非即产瓶坯需要判断冷却时间是否大于一定时间 |
| | | //判断当前排有无锁 |
| | | var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == it.areaCode && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "入库锁" || b.S_LOCK_STATE == "出库锁")).First(); |
| | | if (lockInfo == null) |
| | | { |
| | | result = a; |
| | | break; |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"瓶坯非即产满框转运:当前排有锁,货位号:{lockInfo.S_CODE}"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (result != null) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"瓶坯非即产满框转运:{areaName}未配置"); |
| | | } |
| | | return result; |
| | | } |
| | | } |
| | | } |