| | |
| | | using System.Linq; |
| | | using System.Threading; |
| | | using System.Threading.Tasks; |
| | | using System.Web.UI.WebControls.WebParts; |
| | | |
| | | namespace HH.WCS.QingXigongchang.core |
| | | { |
| | |
| | | static bool InworkLock = false; |
| | | /// <summary> |
| | | /// 原材料 检测各流转位置。 写入托盘货位s_type 中 下一个目的地。就开始中转。 |
| | | /// 原物料纸箱,入库堆叠区转运 |
| | | /// 原物料纸箱,入库堆叠区转运 YWLRGDD--人工堆叠区 |
| | | /// </summary> |
| | | internal static void BottTask() |
| | | { |
| | |
| | | var usingSpace = new List<string> { "入库接驳区", "库内接驳区", "出库接驳区", "提升机退料口" }; |
| | | //usingSpace = new List<string> { "YWLRGDD", "YWLWJJB", "YWLYLTKQ", "YWLTKKTQ", "YWLKTDDQ", "YWLT1TSJ", "YWLT1TSJCD", "YWLT2TSJ", "YWLT2TSJCD" }; |
| | | usingSpace = new List<string> { "YWLYLTKQ", "YWLTKKTQ", "YWLWJJB", "YWLRGDD", "YWLT1TSJ", "YWLT2TSJ" }; |
| | | var dbll = new SqlHelper<object>().GetInstance(); |
| | | ///----------------------------退余料中间库区,退空中间库区, |
| | | /// /*托盘货位表的 S_TYPE。 库区1,库区,*/ |
| | | |
| | | foreach (var area in usingSpace) |
| | | { |
| | | try |
| | |
| | | var cir1 = cntritems.First(); |
| | | |
| | | var arloclist = LocationHelper.GetAreaNormalLocList(EdnRarea);// LocationHelper.GetList<Location>(x => x.S_AREA_CODE == _clrel0.S_TYPE && x.S_LOCK_STATE != "报废"); |
| | | |
| | | //有移库工单 排除移库工单上所对应的排 |
| | | var order = LocationHelper.GetList<YWLZXtake>(X => X.S_ZX_STATE == "执行").ToList(); |
| | | if (order.Count() > 0) |
| | | { |
| | | foreach (var item in order) |
| | | { |
| | | LogHelper.Info($"有移库工单排除对应的库区{item.S_START_AREA} 排{item.N_START_ROW}"); |
| | | arloclist.RemoveAll(e => e.S_AREA_CODE == item.S_START_AREA && e.N_ROW == item.N_START_ROW); |
| | | } |
| | | } |
| | | if (arloclist.Any()) |
| | | { |
| | | if (EdnRarea == "YWLWJJB") |
| | | if (EdnRarea == "YWLWJJB")//纸箱无菌接驳区 |
| | | // InworkLock = true; |
| | | //else InworkLock = false; |
| | | //if (od.S_ZZ_AREA == "YWLWJJB") |
| | |
| | | Location endbit = null; |
| | | //foreach (var rss in arloclist.GroupBy(x => x.N_ROW).OrderByDescending(x => x.Count(y => y.N_CURRENT_NUM > 0)).ThenBy(xx => xx.Key)) |
| | | RowLock inlock = null; |
| | | List<RowLock> inlockLis = new List<RowLock>(); |
| | | bool isCd = false; |
| | | if (CDlist.Contains(EdnRarea)) |
| | | { |
| | | isCd = true; |
| | | inlock = 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 == "入库锁").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(); |
| | | inlock = inlockLis.FirstOrDefault(); |
| | | if (inlock != null) |
| | | { |
| | | arloclist = arloclist.FindAll(x => x.N_ROW == inlock.N_ROW).ToList(); |
| | | //当入库的任务能放满一排并且还有余的时候 开第二排 |
| | | //先判断起点有多少相同的 能入的物料 |
| | | if (_cl.S_AREA_CODE == "YWLRGDD")//判断起点是否是人工堆叠区 |
| | | { |
| | | //然后判断人工堆叠区需要入库多少托同品种物料 startMum |
| | | //货位 托盘 物料表联查 |
| | | LogHelper.Info($"查起点有多少同品种的物料 开始"); |
| | | 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 == "YWLRGDD" && p.S_TYPE == _clrel0.S_TYPE); |
| | | 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()).Includes(e => e.LocCntrRel, p => p.CntrItemRel).ToList(); |
| | | 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(); |
| | | if (lstCanOutL.Count <= EndMum.Count()) |
| | | { |
| | | arloclist = arloclist.FindAll(x => inlockLis.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList(); |
| | | } |
| | | else |
| | | { |
| | | arloclist = arloclist.FindAll(x => !inlockLis.Select(e => e.N_ROW).ToList().Contains(x.N_ROW)).ToList(); |
| | | inlock = null; |
| | | } |
| | | LogHelper.Info($"查起点有多少同品种的物料 结束"); |
| | | } |
| | | else |
| | | { |
| | | arloclist = arloclist.FindAll(x => x.N_ROW == inlock.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)) |
| | |
| | | /// </summary> |
| | | public static void AutoRun13TSJ() |
| | | { |
| | | |
| | | Action<YWLWorkOrder> _sAB没物料或者余量不足开始触发跟根据自动转运_名字越长越好 = (od) => |
| | | { |
| | | LogHelper.Info($"AutoRun13TSJ{od.SQL_WorkNo}对应工单的{od.S_ROW} 物料数量不足。触发转运。"); |