| | |
| | | { |
| | | try |
| | | { |
| | | LogHelper.Info($" 无菌出库 查工单"); |
| | | var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "无菌标签出库" && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => !string.IsNullOrEmpty(x.TagOver) ? 1 : 2).ThenBy(x => x.TagOverTime).ToList(); |
| | | if (!yuworders.Any()) |
| | | { |
| | | YwlBQ_CreInwork(locsFirst, WJ_BQ.RK_BQDDQ, WJ_BQ.RK_BBHJQ); |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($" 无菌出库 工单开启中"); |
| | | YwlBQ_CreWJOutOrder(); |
| | | } |
| | | YwlBQ_CreWJTK(); |
| | | } |
| | | catch (Exception ex) |
| | |
| | | YwlPETK_CreInwork(TKlocsFirst, "YWLTKMKQ", "收缩膜叉运", 1); // PE入库 --提扣 |
| | | //YwlPETKtkOrder("YWLZSXBKQ", "YWLTKMKQ", "收缩膜叉运"); |
| | | //YwlPETKOutOrder("YWLTKMKQ", "YWLZSXBKQ", "收缩膜叉运");// PE中出库 |
| | | |
| | | var tklist = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "T2提升机-收缩膜" && x.WorkType == 1 && x.SQL_State == "执行中"); |
| | | if (tklist.Count() > 0) |
| | | { |
| | | LogHelper.Info("-收缩膜 退库!"); |
| | | var tk = tklist.FirstOrDefault(); |
| | | |
| | | |
| | | var loc = LocationHelper.GetLoc(plc.location[0]); |
| | | if (loc.N_CURRENT_NUM > 0 && loc.S_LOCK_STATE == "无") |
| | |
| | | else |
| | | //YwlPETKOutOrder("YWLTKMKQ", "", "PE叉运");// PE小出库 |
| | | { |
| | | LogHelper.Info("-收缩膜 出库!"); |
| | | var yuworders = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == "T2提升机-收缩膜" && x.WorkType == 6 && x.SQL_State == "执行中").FindAll(x => x.OutNum > 0 && DateTime.Now.Subtract(x.SQL_Modify_TIme ?? DateTime.Now).TotalSeconds > 10).OrderBy(x => !string.IsNullOrEmpty(x.TagOver) ? 1 : 2).ThenBy(x => x.TagOverTime).ToList(); |
| | | if (!yuworders.Any()) return; |
| | | if (!yuworders.Any()) |
| | | { |
| | | LogHelper.Info("-收缩膜 出库!没有出库单。"); |
| | | return; |
| | | } |
| | | var ploc = plc.location[0]; |
| | | retuse: |
| | | var order = yuworders.FirstOrDefault(); |
| | |
| | | LogHelper.CErrorLog("小水出库:" + (order.SQL_WorkNo) + "没有【指定物料;"); |
| | | goto retuse; |
| | | } |
| | | LogHelper.Info("-收缩膜 出库!" + oic + oin); |
| | | |
| | | string v = "YWLTKMKQ"; |
| | | int ord = -1; |
| | |
| | | var cirs = ContainerHelper.GetCntrItemRel(CNTR.FirstOrDefault().S_CNTR_CODE); |
| | | if (!cirs.Any()) continue; |
| | | cir = cirs.OrderByDescending(x => x.T_CREATE).FirstOrDefault(); |
| | | LogHelper.Info($"收缩膜 出库!{item.Key}排 [{cir.S_ITEM_CODE}-{order.SQL_ItemCode}] [{cir.S_ITEM_NAME}-{order.SQL_ItemName}] [{cir.S_CJ_NAME}-{order.S_CJ_NAME}] {(cir.S_ITEM_CODE == order.SQL_ItemCode && cir.S_ITEM_NAME == order.SQL_ItemName && cir.S_CJ_NAME == order.S_CJ_NAME)}"); |
| | | if (cir.S_ITEM_CODE == order.SQL_ItemCode && cir.S_ITEM_NAME == order.SQL_ItemName && cir.S_CJ_NAME == order.S_CJ_NAME) |
| | | { |
| | | |
| | | //plg 2025年6月13日 09:08:10 |
| | | Temp = new locCntItem |
| | | { |
| | |
| | | if (StartBit != null) |
| | | { |
| | | var tagLoc = StartBit; |
| | | if (tagLoc.N_LAYER == 1 || tagLoc.N_CURRENT_NUM == 1) |
| | | { |
| | | // 直接出提升机位 |
| | | //var pc = Settings.GetDeviceInfoList().Where(a => a.deviceName == "水线标签提升机").FirstOrDefault(); |
| | | // 直接出提升机位 |
| | | |
| | | if (!string.IsNullOrEmpty(ploc) && plc != null && DeviceProcess.doorStatus[ploc]?.info == "1") |
| | | LogHelper.Info(order.SQL_PLineNo + $"-收缩膜出库!终点{ploc}-{DeviceProcess.doorStatus[ploc]?.info}"); |
| | | if (!string.IsNullOrEmpty(ploc) && plc != null && DeviceProcess.doorStatus[ploc]?.info == "1") |
| | | { |
| | | var loc = LocationHelper.GetLoc(ploc); |
| | | LogHelper.Info(order.SQL_PLineNo + $"-收缩膜出库!终点{loc.N_CURRENT_NUM}-{loc.S_LOCK_STATE}"); |
| | | if (loc.N_CURRENT_NUM == 0 && loc.S_LOCK_STATE == "无") |
| | | { |
| | | var loc = LocationHelper.GetLoc(ploc); |
| | | if (loc.N_CURRENT_NUM == 0 && loc.S_LOCK_STATE == "无") |
| | | var re = TaskProcess.CreateTransport("", tagLoc.S_LOC_CODE.Trim(), loc.S_LOC_CODE, "收缩膜叉运-货架出提升机", new List<string> { tagLoc.S_CNTR_CODE }, StartBit.N_CURRENT_NUM, 1, 1, 62); |
| | | LogHelper.CSucessLog($"from {tagLoc.S_LOC_CODE} to {loc.S_LOC_CODE} 收缩膜叉运-货架出提升机 ,创建{re} "); |
| | | if (re) |
| | | { |
| | | var re = TaskProcess.CreateTransport("", tagLoc.S_LOC_CODE.Trim(), loc.S_LOC_CODE, "收缩膜叉运-货架出提升机", new List<string> { tagLoc.S_CNTR_CODE }, StartBit.N_CURRENT_NUM, 1, 1, 62); |
| | | LogHelper.CSucessLog($"from {tagLoc.S_LOC_CODE} to {loc.S_LOC_CODE} 收缩膜叉运-货架出提升机 ,创建{re} "); |
| | | if (re) |
| | | oto.Add(oic); |
| | | if (outlock == null) |
| | | { |
| | | oto.Add(oic); |
| | | if (outlock == null) |
| | | { |
| | | var r = new RowLock { S_LOCK_SRC = (StartBit.S_NOTE /*+ StartBit.HalfOrFull*/), T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "出库锁", S_AREA_CODE = StartBit.S_AREA_CODE, N_ROW = StartBit.N_ROW }; |
| | | db.Insertable(r).ExecuteCommand(); |
| | | } |
| | | var r = new RowLock { S_LOCK_SRC = (StartBit.S_NOTE /*+ StartBit.HalfOrFull*/), T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "出库锁", S_AREA_CODE = StartBit.S_AREA_CODE, N_ROW = StartBit.N_ROW }; |
| | | db.Insertable(r).ExecuteCommand(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info(order.SQL_PLineNo + "-收缩膜 出库! 没有可用物料"); |
| | | } |
| | | |
| | | var set1 = new HashSet<string>(oto); |
| | |
| | | return; |
| | | //1 半托直接上货架一层。 |
| | | lgrx = locsFirst.GroupBy(X => X.N_ROW).Select(x => |
| | | { |
| | | var y11 = x.OrderBy(y => y.N_COL).ToList(); |
| | | var y1 = y11.FindAll(z => z.N_CURRENT_NUM > 0).LastOrDefault(); |
| | | return y1; |
| | | }).ToList(); |
| | | { |
| | | var y11 = x.OrderBy(y => y.N_COL).ToList(); |
| | | var y1 = y11.FindAll(z => z.N_CURRENT_NUM > 0).LastOrDefault(); |
| | | return y1; |
| | | }).ToList(); |
| | | foreach (var lastfull in lgrx.FindAll(x => x.HalfOrFull == 2).OrderBy(x => x.HalfOrFull).ThenBy(x => x.N_ROW)) |
| | | { |
| | | //var y = item.OrderBy(x => x.N_COL).ToList(); |
| | |
| | | |
| | | internal static void YwlBQ_CreWJOutOrder() |
| | | { |
| | | |
| | | LogHelper.Info($" 无菌出库 开始"); |
| | | //1.检查是否有退库 |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | ///第三段:接驳区 转 线边 |
| | | var JQBS = LocationHelper.GetAreaNormalLocList(WJ_BQ.RK_BQJBQ); |
| | | foreach (var jbr in JQBS.GroupBy(x => x.N_ROW)) |
| | | { |
| | | LogHelper.Info($" 无菌出库 接驳有数据"); |
| | | var y2 = jbr.OrderBy(x => x.N_COL).ToList(); |
| | | var l2 = y2.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); |
| | | if (l2 != null) |
| | |
| | | if (!c.Any() || c.FirstOrDefault()?.S_TYPE == BQ_PRA.B) |
| | | { |
| | | //回库。 |
| | | LogHelper.Info($"循环有无退库==> 有 退库" + l2.S_LOC_CODE); |
| | | continue; |
| | | } |
| | | var cirs = ContainerHelper.GetCntrItemRel(c.FirstOrDefault().S_CNTR_CODE); |
| | | if (!cirs.Any()) continue; |
| | | if (!cirs.Any()) |
| | | { |
| | | LogHelper.Info($"循环有无退库==> 没有物料信息 托盘:" + c.FirstOrDefault().S_CNTR_CODE); |
| | | continue; |
| | | } |
| | | var cir = cirs.OrderByDescending(x => x.T_CREATE).FirstOrDefault(); |
| | | |
| | | var xbqs = LocationHelper.GetAreaNormalLocList(WJ_BQ.RK_XBKQ); |
| | | foreach (var x1 in xbqs.GroupBy(x => x.N_ROW)) |
| | | { |
| | | LogHelper.Info($" 无菌出库 线边有数据"); |
| | | var x2 = x1.OrderBy(x => x.N_COL).ToList(); |
| | | var l3 = x2.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); |
| | | if (l3 != null) |
| | |
| | | var xc = LocationHelper.GetList<LocCntrRel>(x => x.S_LOC_CODE == l3.S_LOC_CODE); |
| | | if (!xc.Any() || xc.FirstOrDefault()?.S_TYPE == BQ_PRA.B) |
| | | { |
| | | LogHelper.Info($"循环线边==> 有 退库" + xc.FirstOrDefault()?.S_TYPE); |
| | | continue; |
| | | } |
| | | var xcirs = ContainerHelper.GetCntrItemRel(xc.FirstOrDefault().S_CNTR_CODE); |
| | | if (!xcirs.Any()) continue; |
| | | if (!xcirs.Any()) |
| | | { |
| | | LogHelper.Info($"循环线边==> 没有物料信息 托盘:" + xc.FirstOrDefault().S_CNTR_CODE); |
| | | continue; |
| | | } |
| | | |
| | | var xcir = xcirs.OrderByDescending(x => x.T_CREATE).FirstOrDefault(); |
| | | if (xcir.S_ITEM_CODE != cir.S_ITEM_CODE || xcir.S_ITEM_NAME != cir.S_ITEM_CODE) |
| | | { |
| | | LogHelper.Info($"循环线边==> 物料不匹配 托盘:" + xc.FirstOrDefault().S_CNTR_CODE); |
| | | continue; |
| | | } |
| | | } |
| | | var e = x2.FindAll(x => x.N_COL > (l3?.N_COL ?? 0) && x.N_CURRENT_NUM == 0).FirstOrDefault(); |
| | | LogHelper.Info($"无菌 生成任务==> 是否有合适的货位信息" + e?.S_LOC_CODE); |
| | | if (e != null) |
| | | { |
| | | var re = TaskProcess.CreateTransport("", l2.S_LOC_CODE.Trim(), e.S_LOC_CODE, "标签叉运-接驳转线边", new List<string> { c.FirstOrDefault().S_CNTR_CODE }, 1, 1, 1, 62, BQ_PRA.Out); |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | LogHelper.Info($" 无菌出库 到线边 结束"); |
| | | ///拆垛区取消。 |
| | | if (false) |
| | | { |
| | |
| | | } |
| | | else |
| | | WCSHelper.Do(db => |
| | | { |
| | | //var LCRLIST = db.Queryable<LocCntrRel>().Includes(x => x.CntrItemRel).Where(x => x.S_LOC_CODE.StartsWith("QX-") && (x.CntrItemRel.S_ITEM_CODE == outOer.S_ITEM_CODE || x.CntrItemRel.S_ITEM_CODE == outOer.S_ITEM_NAME)).ToList(); |
| | | List = db.Queryable<LocCntrRel>() |
| | | .LeftJoin<CntrItemRel>((lcr, cir) => lcr.S_CNTR_CODE == cir.S_CNTR_CODE) |
| | | .LeftJoin<Location>((lcr, cir, lo) => lcr.S_LOC_CODE == lo.S_LOC_CODE) |
| | | .Where((lcr, cir) => lcr.S_LOC_CODE.StartsWith("QX-") && (cir.S_ITEM_CODE == outOer.S_ITEM_CODE || cir.S_ITEM_CODE == outOer.S_ITEM_NAME)) |
| | | .Select((lcr, cir, lo) => new Location |
| | | { |
| | | S_AREA_CODE = lo.S_AREA_CODE, |
| | | S_WH_CODE = lcr.S_TYPE, |
| | | T_CREATE = lcr.T_CREATE, |
| | | N_ROW = lo.N_ROW, |
| | | N_COL = lcr.S_CNTR_CODE.StartsWith("TP") ? 0 : 1 |
| | | }).ToList(); |
| | | //var LCRLIST = db.Queryable<LocCntrRel>().Includes(x => x.CntrItemRel).Where(x => x.S_LOC_CODE.StartsWith("QX-") && (x.CntrItemRel.S_ITEM_CODE == outOer.S_ITEM_CODE || x.CntrItemRel.S_ITEM_CODE == outOer.S_ITEM_NAME)).ToList(); |
| | | List = db.Queryable<LocCntrRel>() |
| | | .LeftJoin<CntrItemRel>((lcr, cir) => lcr.S_CNTR_CODE == cir.S_CNTR_CODE) |
| | | .LeftJoin<Location>((lcr, cir, lo) => lcr.S_LOC_CODE == lo.S_LOC_CODE) |
| | | .Where((lcr, cir) => lcr.S_LOC_CODE.StartsWith("QX-") && (cir.S_ITEM_CODE == outOer.S_ITEM_CODE || cir.S_ITEM_CODE == outOer.S_ITEM_NAME)) |
| | | .Select((lcr, cir, lo) => new Location |
| | | { |
| | | S_AREA_CODE = lo.S_AREA_CODE, |
| | | S_WH_CODE = lcr.S_TYPE, |
| | | T_CREATE = lcr.T_CREATE, |
| | | N_ROW = lo.N_ROW, |
| | | N_COL = lcr.S_CNTR_CODE.StartsWith("TP") ? 0 : 1 |
| | | }).ToList(); |
| | | |
| | | }); |
| | | }); |
| | | if (!List.Any()) |
| | | { |
| | | LogHelper.Info($"备货单:{outOer.S_Work_NO} 库区中没有找到可用物料。"); |
| | |
| | | LogHelper.Info(rl.S_LOC_CODE + "识别托盘上的物料信息。" + JsonConvert.SerializeObject(_clcntitem)); |
| | | if (_clcntitem != null) |
| | | { |
| | | LogHelper.Info("相互是否匹配 _clcntitem S_ITEM_CODE:" + _clcntitem.S_ITEM_CODE + " od" + od.SQL_ItemCode + " _clcntitem S_ITEM_NAME:" + _clcntitem.S_ITEM_NAME + "od: " + od.SQL_ItemName); |
| | | LogHelper.Info("相互是否匹配 _clcntitem S_ITEM_CODE:" + _clcntitem.S_ITEM_CODE + " od" + od.SQL_ItemCode + " _clcntitem S_ITEM_NAME:" + _clcntitem.S_ITEM_NAME + "od: " + od.SQL_ItemName + " od.S_CJ_NAME:" + od.S_CJ_NAME); |
| | | if (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName && _clcntitem.S_CJ_NAME == od.S_CJ_NAME) |
| | | { |
| | | |
| | |
| | | { |
| | | EndBit = locs1.FirstOrDefault().S_LOC_CODE; |
| | | } |
| | | else |
| | | { |
| | | continue; |
| | | } |
| | | } |
| | | var b = TaskProcess.CreateTransport(od.SQL_WorkNo, StartBit.S_LOC_CODE, EndBit, "原物料搬运-纸箱", crs, StartBit.N_CURRENT_NUM - crs.Count + 1, 1, crs.Count, PLC.taskPri, "", Endbit.S_LOC_CODE); |
| | | if (b) |