| | |
| | | static List<string> ABlist = new List<string> { "YWLAQWJ", "YWLBQWJ" }; |
| | | static List<string> CDlist = new List<string> { "YWLCQSX", "YWLDQWJ" }; |
| | | static bool InworkLock = false; |
| | | //Dictionary<string, List<RowLock>> RGRowList = new Dictionary<string, List<RowLock>>(); |
| | | public static List<RowLock> RGRow = new List<RowLock>(); |
| | | /// <summary> |
| | | /// 原材料 检测各流转位置。 写入托盘货位s_type 中 下一个目的地。就开始中转。 |
| | | /// 原物料纸箱,入库堆叠区转运 YWLRGDD--人工堆叠区 |
| | |
| | | { |
| | | try |
| | | { |
| | | |
| | | var lolist = LocationHelper.GetAreaNormalLocList(area);// LocationHelper.GetList<Location>(x => x.S_AREA_CODE == area && x.S_LOCK_STATE != "报废"); |
| | | var lgrow = lolist.GroupBy(x => x.N_ROW).OrderBy(x => x.Key); |
| | | Dictionary<string, List<Location>> dsll = new Dictionary<string, List<Location>>(); |
| | |
| | | if (!cntritems.Any()) |
| | | continue; |
| | | var cir1 = cntritems.First(); |
| | | |
| | | |
| | | //只筛选纸箱物料的库区数据。 |
| | | if (!string.IsNullOrEmpty(cir1.S_ITEM_NAME) && cir1.S_ITEM_NAME.Contains("纸箱-")) |
| | | if (dsll.TryGetValue(cir1.S_ITEM_CODE, out List<Location> ll)) |
| | |
| | | if (ABlist.Contains(EdnRarea)) |
| | | { |
| | | var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "入库锁" || x.S_LOCK_STATE == "出库锁")); |
| | | if (ls.Any()) |
| | | //var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "入库锁")); |
| | | if (ls.Count() > 1) |
| | | { |
| | | LogHelper.Info($"{EdnRarea}任务数1管制2"); |
| | | continue; |
| | | } |
| | | } |
| | | if (CDlist.Contains(EdnRarea)) |
| | | { |
| | | var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && x.S_LOCK_STATE == "入库锁"); |
| | | //var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "入库锁")); |
| | | if (ls.Count() > 2) |
| | | { |
| | | LogHelper.Info($"{EdnRarea}任务数1管制3"); |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | //else if (CDlist.Contains(EdnRarea)) |
| | | //{ |
| | | // var ls = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == EdnRarea && (x.S_LOCK_STATE == "入库锁")).ToList(); |
| | | // if (ls.Count() > 2) |
| | | // { |
| | | // LogHelper.Info($"CD区入库任务管制最大数3 {EdnRarea}"); |
| | | // continue; |
| | | // } |
| | | //} |
| | | var cntritems = ContainerHelper.GetCntrItemRel(_clrel0.S_CNTR_CODE); |
| | | if (!cntritems.Any()) |
| | | continue; |
| | |
| | | if (CDlist.Contains(EdnRarea)) |
| | | { |
| | | isCd = true; |
| | | inlockLis = LocationHelper.GetList<RowLock>(x => x.S_AREA_CODE == EdnRarea && x.S_LOCK_SRC == cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME && x.S_LOCK_STATE == "入库锁").ToList(); |
| | | if (inlockLis.Count() > 0) |
| | | { |
| | | inlock = inlockLis.FirstOrDefault(); |
| | | } |
| | | //inlockLis = LocationHelper.GetList<RowLock>(x => x.S_AREA_CODE == EdnRarea && x.S_LOCK_SRC == cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME && x.S_LOCK_STATE == "入库锁").ToList(); |
| | | //if (inlockLis.Count() > 0) |
| | | //{ |
| | | // inlock = inlockLis.FirstOrDefault(); |
| | | //} |
| | | inlock = RGRow.FirstOrDefault(); |
| | | if (inlock != null) |
| | | { |
| | | //当入库的任务能放满一排并且还有余的时候 开第二排 |
| | | //先判断起点有多少相同的 能入的物料 |
| | | if (_cl.S_AREA_CODE == "YWLRGDD")//判断起点是否是人工堆叠区 |
| | | { |
| | | inlockLis = RGRow.FindAll(e => e.S_AREA_CODE == EdnRarea && e.S_LOCK_SRC == cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME).ToList(); |
| | | //然后判断人工堆叠区需要入库多少托同品种物料 startMum |
| | | //货位 托盘 物料表联查 |
| | | LogHelper.Info($"查起点有多少同品种的物料 开始"); |
| | |
| | | LogHelper.Info($"起点要入CD的有多少托盘数量为{lstCanOutL.Count()}"); |
| | | //判断终点排能入多少 少于入库托盘数则多开一排 EndMum |
| | | var EndMum = dbll.Queryable<Location>().Where(l => l.S_AREA_CODE == EdnRarea && l.N_CURRENT_NUM == 0 && l.S_LOCK_STATE == "无" && inlockLis.Select(e => e.N_ROW).ToList().Contains(l.N_ROW)).ToList(); |
| | | LogHelper.Info($"终点CD排有多少空托能入{lstCanOutL.Count()}"); |
| | | if (lstCanOutL.Count <= EndMum.Count()) |
| | | { |
| | | arloclist = arloclist.FindAll(x => inlockLis.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList(); |
| | |
| | | { |
| | | arloclist = arloclist.FindAll(x => x.N_ROW == inlock.N_ROW).ToList(); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (_cl.S_AREA_CODE == "YWLRGDD") |
| | | { |
| | | //查询是否有已经入了的排 |
| | | var ca = Expressionable.Create<Location, LocCntrRel, CntrItemRel>(); |
| | | ca.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "无" && t.S_ITEM_CODE == cir1.S_ITEM_CODE && t.S_ITEM_NAME == cir1.S_ITEM_NAME && t.S_CJ_NAME == cir1.S_CJ_NAME && o.S_AREA_CODE == EdnRarea); |
| | | var lstCanOutL = dbll.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).InnerJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where(ca.ToExpression()).ToList(); |
| | | LogHelper.Info($"终点有相同的物料的货位有{lstCanOutL.Count()}"); |
| | | if (lstCanOutL.Count() > 0) |
| | | { |
| | | var EndMum = dbll.Queryable<Location>().Where(l => l.S_AREA_CODE == EdnRarea && l.N_CURRENT_NUM == 0 && l.S_LOCK_STATE == "无" && lstCanOutL.Select(e => e.N_ROW).ToList().Contains(l.N_ROW)).ToList(); |
| | | if (EndMum.Count() > 0) |
| | | { |
| | | arloclist = arloclist.FindAll(x => lstCanOutL.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | foreach (var rss in arloclist.GroupBy(x => x.N_ROW).OrderByDescending(x => x.Count(y => y.N_CURRENT_NUM > 0)).ThenBy(x => x.Key)) |
| | |
| | | var sign = Settings.GetTimeStamp(); |
| | | var res = TaskProcess.CreateTransport(sign, _cl.S_LOC_CODE, endbit.S_LOC_CODE, "原物料搬运-纸箱", _clrel.Select(x => x.S_CNTR_CODE).ToList(), 1, endbit.N_CURRENT_NUM + 1, 1, 50, Last);///, EdnRarea == "YWLYLTKQ" ? _clrel0.S_TYPE : ""); |
| | | LogHelper.Info($"{r.Key}原物料搬运 {sign} 任务 ,创建{res} "); |
| | | if (res && inlock == null && isCd) |
| | | if (CDlist.Contains(endbit.S_AREA_CODE) && res) |
| | | { |
| | | var rrrr = new RowLock { S_LOCK_SRC = cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "入库锁", S_AREA_CODE = endbit.S_AREA_CODE, N_ROW = endbit.N_ROW }; |
| | | LogHelper.Info($"原物料入库 添加排锁信息{JsonConvert.SerializeObject(rrrr)} "); |
| | | WCSHelper.Do(db => db.Insertable(rrrr).ExecuteCommand()); |
| | | LogHelper.Info($"添加内存排锁"); |
| | | var ggf = inlockLis.Find(e => e.S_LOCK_SRC == cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME && e.S_AREA_CODE == endbit.S_AREA_CODE && e.N_ROW == endbit.N_ROW); |
| | | LogHelper.Info($"添加内存排锁 是否查询到数据:{JsonConvert.SerializeObject(ggf)}"); |
| | | if (ggf == null) |
| | | { |
| | | var rrrr = new RowLock { S_LOCK_SRC = cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "入库锁", S_AREA_CODE = endbit.S_AREA_CODE, N_ROW = endbit.N_ROW }; |
| | | inlockLis.Add(rrrr); |
| | | LogHelper.Info($"添加内存排锁 添加数据到内存排锁中:{JsonConvert.SerializeObject(inlockLis)}"); |
| | | } |
| | | } |
| | | //if (res && inlock == null && isCd) |
| | | //{ |
| | | // var rrrr = new RowLock { S_LOCK_SRC = cir1.S_ITEM_CODE + cir1.S_ITEM_NAME + cir1.S_CJ_NAME, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "入库锁", S_AREA_CODE = endbit.S_AREA_CODE, N_ROW = endbit.N_ROW }; |
| | | // LogHelper.Info($"原物料入库 添加排锁信息{JsonConvert.SerializeObject(rrrr)} "); |
| | | // WCSHelper.Do(db => db.Insertable(rrrr).ExecuteCommand()); |
| | | //} |
| | | if (EdnRarea == "YWLWJJB") InworkLock = false; |
| | | break; |
| | | } |
| | |
| | | { |
| | | try |
| | | { |
| | | // 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 => x.TagOverTime).ToList(); |
| | | 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 => x.TagOverTime).ToList(); |
| | | if (!yuworders.Any()) |
| | | { |
| | |
| | | var tklist = LocationHelper.GetList<YWLWorkOrder>(x => x.SQL_PLineNo == pline && x.WorkType == 1 && x.SQL_State == "执行中"); |
| | | if (!Syuworders.Any()) |
| | | { |
| | | //水线标签入库 |
| | | YwlBQ_CreInwork(SlocsFirst, SX_BQ.RK_BQDDQ, SX_BQ.RK_BBHJQ); |
| | | } |
| | | if (tklist.Count() > 0) |
| | | { |
| | | var tk = tklist.FirstOrDefault(); |
| | | |
| | | var loc = LocationHelper.GetLoc(plc.location[0]); |
| | | if (loc.N_CURRENT_NUM > 0 && loc.S_LOCK_STATE == "无") |
| | | { |
| | |
| | | LogHelper.CErrorLog($"{tk.SQL_WorkNo}-{tk.SQL_PLineNo} 退库工单开启,绑定的 零整 标记"); |
| | | } |
| | | Location Endbit = null; |
| | | // var hjs = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == SX_BQ.RK_BBHJQ).FindAll(x => x.S_LOCK_STATE == "无" && x.N_CURRENT_NUM == 0); |
| | | // var hjs = db.Queryable<Location>().Where(l => l.S_AREA_CODE == SX_BQ.RK_BBHJQ && l.S_LOCK_STATE.Trim() == "无").ToList(); |
| | | var hjs = LocationHelper.GetAreaNormalLocList(SX_BQ.RK_BBHJQ, true, false); |
| | | Endbit = hjs.FindAll(x => x.N_LAYER == (s_type == .5 ? 1 : (s_type == .75 ? 2 : 3))).OrderBy(x => x.N_ROW).ThenBy(x => x.N_COL).FirstOrDefault(); |
| | | if (Endbit != null) |
| | |
| | | { |
| | | //return; |
| | | ///起点数据。 终点库区 堆叠层数。 |
| | | YwlPETK_CreInwork(PElocsFirst, "YWLTKMKQ", "提扣叉运", 3);//提扣入库--PE膜 |
| | | YwlPETK_CreInwork(TKlocsFirst, "YWLTKMKQ", "收缩膜叉运", 1); // PE入库 --提扣 |
| | | //YwlPETKtkOrder("YWLZSXBKQ", "YWLTKMKQ", "收缩膜叉运"); |
| | | //YwlPETKOutOrder("YWLTKMKQ", "YWLZSXBKQ", "收缩膜叉运");// PE中出库 |
| | | YwlPETK_CreInwork(PElocsFirst, "YWLTKMKQ", "收缩膜叉运", 2);//PE膜 |
| | | YwlPETK_CreInwork(TKlocsFirst, "YWLTKMKQ", "提扣叉运", 1); //提扣 |
| | | //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) |
| | |
| | | { |
| | | var s_type = ContainerHelper.GetCntrItemRel(CNTR.FirstOrDefault().S_CNTR_CODE).FirstOrDefault()?.N_BQ_TRAY_TYPE ?? 0; |
| | | Location Endbit = null; |
| | | if (area == area/* WJ_BQ.RK_BQJBQ*/) |
| | | //if (area == area/* WJ_BQ.RK_BQJBQ*/) |
| | | //{ |
| | | var hjs = LocationHelper.GetAreaNormalLocList(WJ_BQ.RK_BBHJQ, true, false); |
| | | Endbit = hjs.FindAll(x => x.N_CURRENT_NUM == 0 && x.N_LAYER == (s_type == .5 ? 1 : (s_type == .75 ? 2 : 3))).OrderBy(x => x.N_ROW).ThenBy(x => x.N_COL).FirstOrDefault(); |
| | | if (Endbit != null) |
| | | { |
| | | var hjs = LocationHelper.GetAreaNormalLocList(WJ_BQ.RK_BBHJQ, true, false); |
| | | Endbit = hjs.FindAll(x => x.N_CURRENT_NUM == 0 && x.N_LAYER == (s_type == .5 ? 1 : (s_type == .75 ? 2 : 3))).OrderBy(x => x.N_ROW).ThenBy(x => x.N_COL).FirstOrDefault(); |
| | | if (Endbit != null) |
| | | { |
| | | var re = TaskProcess.CreateTransport("", lastfull.S_LOC_CODE.Trim(), Endbit.S_LOC_CODE, "标签叉运-线边标签退库", CNTR.Select(x => x.S_CNTR_CODE).ToList(), 1, 1, 1, 62); |
| | | LogHelper.CSucessLog($"from {lastfull.S_LOC_CODE} to {Endbit.S_LOC_CODE} 标签叉运-接驳标签退库 ,创建{re}"); |
| | | } |
| | | var re = TaskProcess.CreateTransport("", lastfull.S_LOC_CODE.Trim(), Endbit.S_LOC_CODE, "标签叉运-线边标签退库", CNTR.Select(x => x.S_CNTR_CODE).ToList(), 1, 1, 1, 62); |
| | | LogHelper.CSucessLog($"from {lastfull.S_LOC_CODE} to {Endbit.S_LOC_CODE} 标签叉运-接驳标签退库 ,创建{re}"); |
| | | } |
| | | // } |
| | | |
| | | //else |
| | | //{ |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 入库退库。 知道 零头满托。正常匹配。 |
| | | /// </summary> |
| | |
| | | private static void YwlPETK_CreInwork(List<locCntItem> klocsFirst, string v, string v2, int v1 = 3) |
| | | { |
| | | bool ord = v2.Contains("提扣"); |
| | | var chi = new SqlHelper<object>().GetInstance(); |
| | | var newDb = chi.CopyNew(); |
| | | var yx = klocsFirst.GroupBy(x => x.N_ROW).OrderBy(x => x.Key).ToList(); |
| | | foreach (var ptR in klocsFirst.GroupBy(x => x.N_ROW).OrderBy(x => x.Key).ToList()) |
| | | foreach (var ptR in klocsFirst.GroupBy(x => x.N_ROW).OrderBy(x => x.Key)) |
| | | { |
| | | Location EndBit = null; |
| | | var rsfull = ptR.OrderBy(X => X.N_COL).ToList().FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); |
| | | var ptrlist = ptR.OrderBy(X => X.N_COL).ToList(); |
| | | var rsfull = ptrlist.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); |
| | | if (rsfull != null) |
| | | { |
| | | var cntrlist = ptrlist.FindAll(x => x.S_LOC_CODE == rsfull.S_LOC_CODE).Select(x => x.S_CNTR_CODE); |
| | | var rklist = LocationHelper.GetRowLock(v); |
| | | var inlock = rklist.Find(x => x.S_AREA_CODE == v && x.S_LOCK_SRC == (rsfull.S_NOTE + rsfull.HalfOrFull) && x.S_LOCK_STATE.Contains("入库锁")); |
| | | var NormalList = LocationHelper.GetAreaNormalLocList(v); |
| | |
| | | { |
| | | var srloclist = rs.OrderBy(x => x.N_COL).ToList(); |
| | | var lastfull = srloclist.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); |
| | | EndBit = srloclist.Find(x => x.S_LOCK_STATE == "无" && x.N_CURRENT_NUM < Math.Min(x.N_CAPACITY, v1) && x.S_LOCK_STATE != "报废" && x.N_COL >= (lastfull?.N_COL ?? 0)); |
| | | EndBit = srloclist.Find(x => x.S_LOCK_STATE == "无" && (x.N_CURRENT_NUM + cntrlist.Count()) <= Math.Min(x.N_CAPACITY, v1) && x.S_LOCK_STATE != "报废" && x.N_COL >= (lastfull?.N_COL ?? 0)); |
| | | if (EndBit != null) |
| | | break; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var hasNum = NormalList.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct().ToList(); |
| | | var hasNum = NormalList.FindAll(x => x.N_CURRENT_NUM > 0).Select(x => x.N_ROW).Distinct(); |
| | | var EptRowlist = NormalList.FindAll(x => !hasNum.Contains(x.N_ROW)); |
| | | if (EptRowlist.Any()) |
| | | { |
| | | EndBit = EptRowlist.GroupBy(x => x.N_ROW).OrderBy(x => x.Key * (ord ? 1 : -1)).FirstOrDefault().ToList().OrderBy(x => x.N_COL).FirstOrDefault(); |
| | | } |
| | | else |
| | | { |
| | | if (hasNum.Any()) |
| | | { |
| | | //有相同物料 相同标签的继续入 |
| | | List<Location> lstCanOutL = new List<Location>(); |
| | | if (!string.IsNullOrEmpty(rsfull.S_BATCH_NO)) |
| | | { |
| | | lstCanOutL = newDb.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).InnerJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where((o, p, t) => o.S_AREA_CODE == v && o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "无" && hasNum.Contains(o.N_ROW) && t.S_ITEM_CODE == rsfull.S_ITEM_CODE && t.S_ITEM_NAME == rsfull.S_ITEM_NAME && t.S_BATCH_NO == rsfull.S_BATCH_NO).ToList(); |
| | | |
| | | } |
| | | else |
| | | { |
| | | lstCanOutL = newDb.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).InnerJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where((o, p, t) => o.S_AREA_CODE == v && o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "无" && hasNum.Contains(o.N_ROW) && t.S_ITEM_CODE == rsfull.S_ITEM_CODE && t.S_ITEM_NAME == rsfull.S_ITEM_NAME && string.IsNullOrEmpty(t.S_BATCH_NO)).ToList(); |
| | | } |
| | | if (lstCanOutL.Any()) |
| | | { |
| | | var loclist1 = NormalList.FindAll(x => lstCanOutL.Select(f => f.N_ROW).Distinct().ToList().Contains(x.N_ROW)); |
| | | foreach (var rs in loclist1.GroupBy(x => x.N_ROW).OrderBy(x => x.Key * (ord ? 1 : -1))) |
| | | { |
| | | var srloclist = rs.OrderBy(x => x.N_COL).ToList(); |
| | | var lastfull = srloclist.FindAll(x => x.N_CURRENT_NUM > 0).LastOrDefault(); |
| | | EndBit = srloclist.Find(x => x.S_LOCK_STATE == "无" && x.N_CURRENT_NUM < Math.Min(x.N_CAPACITY, v1) && x.S_LOCK_STATE != "报废" && x.N_COL >= (lastfull?.N_COL ?? 0)); |
| | | if (EndBit != null) |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (EndBit != null) |
| | | { |
| | | var res = TaskProcess.CreateTransport("", rsfull.S_LOC_CODE.Trim(), EndBit.S_LOC_CODE, v2 + "-入库", new List<string> { rsfull.S_CNTR_CODE }, rsfull.N_CURRENT_NUM, EndBit.N_CURRENT_NUM + 1, 1, 62); |
| | | var res = TaskProcess.CreateTransport("", rsfull.S_LOC_CODE.Trim(), EndBit.S_LOC_CODE, v2 + "-入库", cntrlist.ToList(), rsfull.N_CURRENT_NUM + 1 - cntrlist.Count(), EndBit.N_CURRENT_NUM + 1, 1, 62); |
| | | LogHelper.CSucessLog($"from {rsfull.S_LOC_CODE} to {EndBit.S_LOC_CODE} {(v2 + "-入库")} ,创建{res} "); |
| | | |
| | | //if (res && inlock == null) |
| | | //{ |
| | | // var r = new RowLock { S_LOCK_SRC = rsfull.S_NOTE + rsfull.HalfOrFull, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "入库锁", S_AREA_CODE = EndBit.S_AREA_CODE, N_ROW = EndBit.N_ROW }; |
| | | // var db = new SqlHelper<object>().GetInstance(); |
| | | // db.Insertable(r).ExecuteCommand(); |
| | | // //else |
| | | // //{ |
| | | // // if (inlock.N_ROW != EndBit.N_ROW) |
| | | // // { |
| | | // // db.Deleteable(inlock).ExecuteCommand(); |
| | | // // var row = db.Queryable<RowLock>().Where(x => x.S_AREA_CODE == r.S_AREA_CODE && r.N_ROW == x.N_ROW).First(); |
| | | // // if (row != null) |
| | | // // { |
| | | // // if (row.S_LOCK_SRC != r.S_LOCK_SRC) |
| | | // // { |
| | | // // db.Deleteable(row).ExecuteCommand(); |
| | | // // db.Insertable(r).ExecuteCommand(); |
| | | // // } |
| | | // // } |
| | | // // else db.Insertable(r).ExecuteCommand(); |
| | | // // } |
| | | // //} |
| | | //} |
| | | if (res && inlock == null) |
| | | { |
| | | var r = new RowLock { S_LOCK_SRC = rsfull.S_NOTE + rsfull.HalfOrFull, T_LOCK_TIME = DateTime.Now, S_LOCK_STATE = "入库锁", S_AREA_CODE = EndBit.S_AREA_CODE, N_ROW = EndBit.N_ROW }; |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | db.Insertable(r).ExecuteCommand(); |
| | | //else |
| | | //{ |
| | | // if (inlock.N_ROW != EndBit.N_ROW) |
| | | // { |
| | | // db.Deleteable(inlock).ExecuteCommand(); |
| | | // var row = db.Queryable<RowLock>().Where(x => x.S_AREA_CODE == r.S_AREA_CODE && r.N_ROW == x.N_ROW).First(); |
| | | // if (row != null) |
| | | // { |
| | | // if (row.S_LOCK_SRC != r.S_LOCK_SRC) |
| | | // { |
| | | // db.Deleteable(row).ExecuteCommand(); |
| | | // db.Insertable(r).ExecuteCommand(); |
| | | // } |
| | | // } |
| | | // else db.Insertable(r).ExecuteCommand(); |
| | | // } |
| | | //} |
| | | } |
| | | } |
| | | Thread.Sleep(1000); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | private static void YwlBQ_CreSXOutOrder(Settings.deviceInfo plc, List<YWLWorkOrder> yuworders) |
| | | { |
| | |
| | | { |
| | | LogHelper.Info($"AutoRun13TSJ{od.SQL_WorkNo}对应工单的{od.S_ROW} 物料数量不足。触发转运。"); |
| | | // 先看是否有到该库区的转运任务。 |
| | | var zxs = LocationHelper.GetList<YWLZXtake>(X => X.S_ZX_STATE == "执行" && X.S_END_AREA == od.S_ROW); |
| | | |
| | | //1.查看物料是否匹配。 |
| | | var itemTRUN = zxs.Any(x => x.S_ITEM_CODE == od.SQL_ItemCode && x.S_ITEM_NAME == od.SQL_ItemName && x.S_CJ_NAME == od.S_CJ_NAME); |
| | | if (itemTRUN) |
| | | { //有到该库区的 物料转运任务了。 不需要继续了 。 |
| | | |
| | | var zxs = LocationHelper.GetList<YWLZXtake>(X => X.S_ZX_STATE == "执行" && X.S_END_AREA == od.S_ROW).ToList(); |
| | | //查询是否有重复的工单在执行 |
| | | var ggf = zxs.Find(x => x.S_ITEM_CODE == od.SQL_ItemCode && x.S_ITEM_NAME == od.SQL_ItemName); |
| | | if (ggf != null) |
| | | { |
| | | LogHelper.Info($"AutoRun13TSJ{od.SQL_WorkNo}已经存在转运了无需触发转运。"); |
| | | return; |
| | | continue; |
| | | } |
| | | //1.查看物料是否匹配。 |
| | | //var itemTRUN = zxs.Any(x => x.S_ITEM_CODE == od.SQL_ItemCode && x.S_ITEM_NAME == od.SQL_ItemName && x.S_CJ_NAME == od.S_CJ_NAME); |
| | | //if (itemTRUN) |
| | | //{ //有到该库区的 物料转运任务了。 不需要继续了 。 |
| | | |
| | | // LogHelper.Info($"AutoRun13TSJ{od.SQL_WorkNo}已经存在转运了无需触发转运。"); |
| | | // return; |
| | | //} |
| | | //人工转运没指定物料,我会自动写回转运单 物料数据。 |
| | | |
| | | //找CD 区 哪里有这个物料。 |
| | |
| | | { |
| | | lstCanOutL = newDb.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).InnerJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where((o, p, t) => o.S_AREA_CODE == area && o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "无" && t.S_ITEM_CODE == od.SQL_ItemCode && t.S_ITEM_NAME == od.SQL_ItemName).ToList(); |
| | | } |
| | | List<string> CRk = new List<string>() { "出库锁", "入库锁" }; |
| | | var EndMum = newDb.Queryable<Location>().Where(l => l.S_AREA_CODE == area && CRk.Contains(l.S_LOCK_STATE)).ToList(); |
| | | var RowLock = EndMum.GroupBy(e => e.N_ROW).Select(f => f.First()).ToList(); |
| | | foreach (var item in RowLock) |
| | | { |
| | | lstCanOutL.RemoveAll(e => e.N_ROW == item.N_ROW); |
| | | } |
| | | //List<string> CRk = new List<string>() { "出库锁", "入库锁" }; |
| | | //var EndMum = newDb.Queryable<Location>().Where(l => l.S_AREA_CODE == area && CRk.Contains(l.S_LOCK_STATE)).ToList(); |
| | | //var RowLock = EndMum.GroupBy(e => e.N_ROW).Select(f => f.First()).ToList(); |
| | | //foreach (var item in RowLock) |
| | | //{ |
| | | // lstCanOutL.RemoveAll(e => e.N_ROW == item.N_ROW); |
| | | //} |
| | | if (lstCanOutL.Count() > 0) |
| | | { |
| | | var LstCan = newDb.Queryable<LocCntrRel>().Where(a => lstCanOutL.Select(e => e.S_LOC_CODE).ToList().Contains(a.S_LOC_CODE)).ToList(); |
| | | var loc = lstCanOutL.Find(e => e.S_LOC_CODE == LstCan.OrderBy(c => c.T_CREATE).FirstOrDefault().S_LOC_CODE); |
| | | //var LstCan = newDb.Queryable<LocCntrRel>().Where(a => lstCanOutL.Select(e => e.S_LOC_CODE).ToList().Contains(a.S_LOC_CODE)).ToList(); |
| | | var loc = lstCanOutL.OrderBy(e => e.T_FULL_TIME).FirstOrDefault(); |
| | | TrunStart.area = area; |
| | | TrunStart.Row = loc.N_ROW; |
| | | } |
| | |
| | | } |
| | | LogHelper.Info($"ZdzyABArea{od.SQL_WorkNo}触发转运。转运来源是{JsonConvert.SerializeObject(TrunStart)}"); |
| | | if (TrunStart?.area != null) |
| | | WCSHelper.Do(db => |
| | | { |
| | | var ggft = new YWLZXtake() |
| | | { |
| | | db.Insertable(new YWLZXtake |
| | | { |
| | | S_START_AREA = TrunStart.area, |
| | | N_START_ROW = TrunStart.Row, |
| | | S_END_AREA = od.S_ROW, |
| | | S_ZX_STATE = "执行", |
| | | S_ITEM_CODE = od.SQL_ItemCode, |
| | | S_ITEM_NAME = od.SQL_ItemName, |
| | | S_CJ_NAME = od.S_CJ_NAME, |
| | | S_ZZ_AREA = (od.S_ROW == "YWLAQWJ" ? "YWLWJJB" : od.S_ROW) |
| | | }).ExecuteCommand(); |
| | | }); |
| | | |
| | | SQL_WorkNo = "CKD" + DateTime.Now.Ticks.ToString(), |
| | | S_START_AREA = TrunStart.area, |
| | | N_START_ROW = TrunStart.Row, |
| | | S_END_AREA = od.S_ROW, |
| | | S_ZX_STATE = "执行", |
| | | S_ITEM_CODE = od.SQL_ItemCode, |
| | | S_ITEM_NAME = od.SQL_ItemName, |
| | | S_CJ_NAME = od.S_CJ_NAME, |
| | | S_ZZ_AREA = (od.S_ROW == "YWLAQWJ" ? "YWLWJJB" : od.S_ROW) |
| | | }; |
| | | var gf = newDb.Insertable(ggft).ExecuteCommand(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | /// </summary> |
| | | public static void AutoRun13TSJ() |
| | | { |
| | | |
| | | //Action<YWLWorkOrder> _sAB没物料或者余量不足开始触发跟根据自动转运_名字越长越好 = (od) => |
| | | //{ |
| | | // LogHelper.Info($"AutoRun13TSJ{od.SQL_WorkNo}对应工单的{od.S_ROW} 物料数量不足。触发转运。"); |
| | |
| | | |
| | | foreach (var area in v) //.Concat(od.S_ROW.Split('$')).Distinct()) |
| | | { |
| | | var AreaRowlist = LocationHelper.GetAreaNormalLocList(area); |
| | | foreach (var item in AreaRowlist.GroupBy(x => x.N_ROW)) |
| | | if (ABlist.Contains(area)) |
| | | { |
| | | var rl = item.ToList().FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault(); |
| | | if (rl == null) continue; |
| | | _clrel = LocationHelper.GetLocCntrRel(rl.S_LOC_CODE); |
| | | //板型相同 |
| | | var _clrel0 = _clrel.OrderByDescending(xx => xx.T_CREATE).First(); |
| | | LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "识别托盘类型。" + JsonConvert.SerializeObject(_clrel0)); |
| | | var _clcntitem = ContainerHelper.GetCntrItemRel(_clrel0.S_CNTR_CODE.Trim()).FirstOrDefault(); |
| | | LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "识别托盘上的物料信息。" + JsonConvert.SerializeObject(_clcntitem)); |
| | | if (_clcntitem != null) |
| | | //AreaRowlist = LocationHelper.GetAreaNormalLocList(area);YWLBQWJ |
| | | // var AreaRowlist = LocationHelper.GetAreaNormalLocList("YWLAQWJ").Union(LocationHelper.GetAreaNormalLocList("YWLBQWJ")).ToList(); |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var ca = Expressionable.Create<Location, LocCntrRel, CntrItemRel>(); |
| | | ca.And((o, p, t) => o.N_CURRENT_NUM > 0 && o.S_LOCK_STATE == "无" && t.S_ITEM_CODE == od.SQL_ItemCode && t.S_ITEM_NAME == od.SQL_ItemName && (o.S_AREA_CODE == "YWLAQWJ" || o.S_AREA_CODE == "YWLBQWJ")); |
| | | var lstCanOutL = db.Queryable<Location>().InnerJoin<LocCntrRel>((o, p) => o.S_LOC_CODE == p.S_LOC_CODE).InnerJoin<CntrItemRel>((o, p, t) => p.S_CNTR_CODE == t.S_CNTR_CODE).Where(ca.ToExpression()).ToList(); |
| | | if (lstCanOutL.Count() > 0) |
| | | { |
| | | LogHelper.Info("AutoRun13TSJ" + "相互是否匹配 _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 + "结果:" + (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName && _clcntitem.S_CJ_NAME == od.S_CJ_NAME)); |
| | | if (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName) |
| | | var rl = lstCanOutL.OrderBy(e => e.T_FULL_TIME).FirstOrDefault(); |
| | | _clrel = LocationHelper.GetLocCntrRel(rl.S_LOC_CODE); |
| | | //板型相同 |
| | | var _clrel0 = _clrel.OrderByDescending(xx => xx.T_CREATE).First(); |
| | | if (rl != null) |
| | | { |
| | | StartBit = rl; |
| | | break; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"AutoRun13TSJ 机台:{pline} 物料编码:{od.SQL_ItemCode}物料名称:{od.SQL_ItemName} AB区缺料"); |
| | | } |
| | | |
| | | |
| | | //if (rl == null) continue; |
| | | //_clrel = LocationHelper.GetLocCntrRel(rl.S_LOC_CODE); |
| | | ////板型相同 |
| | | //var _clrel0 = _clrel.OrderByDescending(xx => xx.T_CREATE).First(); |
| | | //LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "识别托盘类型。" + JsonConvert.SerializeObject(_clrel0)); |
| | | //var _clcntitem = ContainerHelper.GetCntrItemRel(_clrel0.S_CNTR_CODE.Trim()).FirstOrDefault(); |
| | | //LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "识别托盘上的物料信息。" + JsonConvert.SerializeObject(_clcntitem)); |
| | | //if (_clcntitem != null) |
| | | //{ |
| | | // LogHelper.Info("AutoRun13TSJ" + "相互是否匹配 _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 + "结果:" + (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName && _clcntitem.S_CJ_NAME == od.S_CJ_NAME)); |
| | | // if (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName) |
| | | // { |
| | | // StartBit = rl; |
| | | // break; |
| | | // } |
| | | //} |
| | | |
| | | } |
| | | else |
| | | { |
| | | var AreaRowlist = LocationHelper.GetAreaNormalLocList(area); |
| | | foreach (var item in AreaRowlist.GroupBy(x => x.N_ROW)) |
| | | { |
| | | var rl = item.ToList().FindAll(x => x.N_CURRENT_NUM > 0).OrderBy(x => x.N_COL).LastOrDefault(); |
| | | if (rl == null) continue; |
| | | _clrel = LocationHelper.GetLocCntrRel(rl.S_LOC_CODE); |
| | | //板型相同 |
| | | var _clrel0 = _clrel.OrderByDescending(xx => xx.T_CREATE).First(); |
| | | LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "识别托盘类型。" + JsonConvert.SerializeObject(_clrel0)); |
| | | var _clcntitem = ContainerHelper.GetCntrItemRel(_clrel0.S_CNTR_CODE.Trim()).FirstOrDefault(); |
| | | LogHelper.Info("AutoRun13TSJ" + rl.S_LOC_CODE + "识别托盘上的物料信息。" + JsonConvert.SerializeObject(_clcntitem)); |
| | | if (_clcntitem != null) |
| | | { |
| | | LogHelper.Info("AutoRun13TSJ" + "相互是否匹配 _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 + "结果:" + (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName && _clcntitem.S_CJ_NAME == od.S_CJ_NAME)); |
| | | if (_clcntitem.S_ITEM_CODE == od.SQL_ItemCode && _clcntitem.S_ITEM_NAME == od.SQL_ItemName) |
| | | { |
| | | StartBit = rl; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (StartBit != null) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | if (StartBit == null) |
| | | { |
| | |
| | | if (dsi.TryGetValue(area, out dictitems)) |
| | | { |
| | | var ill = dictitems.Find(x => x.Row == rl.N_ROW && x.ItemCode == _clcntitem.S_ITEM_CODE && x.ItemName == _clcntitem.S_ITEM_NAME && _clcntitem.S_CJ_NAME == x.S_CJ_NAME); |
| | | if (ill == null) |
| | | { |
| | | ill = dictitems.Find(x => x.Row == rl.N_ROW && x.ItemCode == _clcntitem.S_ITEM_CODE && x.ItemName == _clcntitem.S_ITEM_NAME); |
| | | } |
| | | |
| | | if (ill != null) |
| | | { |
| | | if (rl.N_CURRENT_NUM > ill.ItemLayer) |
| | |
| | | LogHelper.Info($"AutoRunABD abcd物料汇总完成 >>{ReadCCK}|| {dsi.Count}"); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 格式化内存排锁 |
| | | /// </summary> |
| | | public static void Qchc() |
| | | { |
| | | try |
| | | { |
| | | LogHelper.Info($"内存中的排锁表中的数据" + $"{JsonConvert.SerializeObject(RGRow)}"); |
| | | if (RGRow.Count() > 0) |
| | | { |
| | | var locs = LocationHelper.GetList<Location>(x => x.S_AREA_CODE == "YWLRGDD" && x.S_LOCK_STATE == "出库锁").ToList(); |
| | | if (locs.Count() == 0) |
| | | { |
| | | RGRow = new List<RowLock>(); |
| | | LogHelper.Info($"格式化内存中的排锁" + $"{JsonConvert.SerializeObject(RGRow)}"); |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Info($"格式化内存中的排锁 失败" + $"{ex.Message}"); |
| | | } |
| | | } |
| | | public static void chargeCCD() |
| | | { |
| | | var ods = LocationHelper.GetList<YWLWorkOrder>(x => x.WorkType == 2 && x.SQL_State == "执行中"); |