| | |
| | | var startLoc = db.Queryable<TN_Location>() |
| | | .LeftJoin<TN_Loc_Container>((o, i) => o.S_CODE == i.S_LOC_CODE) |
| | | .LeftJoin<TN_CG_Detail>((o, i, s) => i.S_CNTR_CODE == s.S_CNTR_CODE) |
| | | .Where((o, i, s) => s.N_ITEM_STATE == 0 && s.S_ITEM_STATE == "合格" |
| | | .Where((o, i, s) => |
| | | s.N_ITEM_STATE == 6 && s.S_ITEM_STATE == "E级料" |
| | | && o.S_AREA_CODE == Settings.Areas[7] && o.N_CURRENT_NUM > 0 |
| | | && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无").First(); |
| | | |
| | | var typename = "复检E级料自动回库"; |
| | | |
| | | if (startLoc == null) |
| | | { |
| | | startLoc = db.Queryable<TN_Location>() |
| | | .LeftJoin<TN_Loc_Container>((o, i) => o.S_CODE == i.S_LOC_CODE) |
| | | .LeftJoin<TN_CG_Detail>((o, i, s) => i.S_CNTR_CODE == s.S_CNTR_CODE) |
| | | .Where((o, i, s) => |
| | | s.N_ITEM_STATE == 0 && s.S_ITEM_STATE == "合格" |
| | | && o.S_AREA_CODE == Settings.Areas[7] && o.N_CURRENT_NUM > 0 |
| | | && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无").First(); |
| | | |
| | | typename = "复检合格自动回库"; |
| | | } |
| | | |
| | | |
| | | if (startLoc== null) |
| | | { |
| | | LogHelper.Info("复检区没有合格的物品,无需自动返回"); |
| | | LogHelper.Info("复检区没有合格的或E级料的物品,无需自动返回"); |
| | | return; |
| | | } |
| | | |
| | | var endLoc = db.Queryable<TN_Location>() |
| | | .OrderBy(a => a.N_LAYER, OrderByType.Asc) |
| | | .First(a => a.S_AREA_CODE == Settings.Areas[1] |
| | | .Where(a => a.S_AREA_CODE == Settings.Areas[1] |
| | | && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "无" |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == a.S_CODE).NotAny()//不能有货 |
| | | ); |
| | | ).OrderBy(a => a.N_LAYER, OrderByType.Asc).First(); |
| | | |
| | | if (endLoc == null) |
| | | { |
| | |
| | | .LeftJoin<TN_Loc_Container>((o, i) => o.S_CNTR_CODE == i.S_CNTR_CODE) |
| | | .Where((o, i) => i.S_LOC_CODE == startLoc.S_CODE).First(); |
| | | |
| | | if (WCSHelper.CreateTask(startLoc.S_CODE, endLoc.S_CODE, "复检合格自动回库", 3, cginfo.S_CNTR_CODE, out string taskNo, cginfo.S_SPE))//创建搬送任务,起点终点容器 |
| | | if (WCSHelper.CreateTask(startLoc.S_CODE, endLoc.S_CODE, typename, 3, cginfo.S_CNTR_CODE, out string taskNo, cginfo.S_SPE))//创建搬送任务,起点终点容器 |
| | | { |
| | | LocationHelper.LockLoc(startLoc.S_CODE, 2);//起点出库锁, |
| | | LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁 |
| | | LogHelper.Info($"生成复检合格自动回库任务成功,容器号{cginfo.S_CNTR_CODE},起点{startLoc.S_CODE},终点{endLoc.S_CODE}"); |
| | | LogHelper.Info($"生成{typename}任务成功,容器号{cginfo.S_CNTR_CODE},起点{startLoc.S_CODE},终点{endLoc.S_CODE}"); |
| | | |
| | | Task task99 = Task.Run(() => |
| | | { |
| | | WMSHelper.InsertOpInfo("自动轮询", "复检合格自动回库", cginfo.S_CNTR_CODE); |
| | | WMSHelper.InsertOpInfo("自动轮询", typename, cginfo.S_CNTR_CODE); |
| | | }); |
| | | |
| | | Task task27 = Task.Run(() => |
| | |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"生成复检合格自动回库任务失败,容器号{cginfo.S_CNTR_CODE},起点{startLoc.S_CODE},终点{endLoc.S_CODE}"); |
| | | LogHelper.Info($"生成{typename}任务失败,容器号{cginfo.S_CNTR_CODE},起点{startLoc.S_CODE},终点{endLoc.S_CODE}"); |
| | | return; |
| | | } |
| | | |
| | |
| | | catch(Exception ex) |
| | | { |
| | | LogHelper.Error("CGOkCheck发生了异常", ex); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 在复检区检测物品回炉胶还是报废 |
| | | /// </summary> |
| | | public static void CGNGCheck() |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | try |
| | | { |
| | | // 废料直接删除 |
| | | var locCntFeiLiao = db.Queryable<TN_CG_Detail>() |
| | | .LeftJoin<TN_Loc_Container>((o, i) => o.S_CNTR_CODE == i.S_CNTR_CODE) |
| | | .LeftJoin<TN_Location>((o, i, s) => i.S_LOC_CODE == s.S_CODE) |
| | | .Where((o, i, s) => |
| | | o.N_ITEM_STATE == 9 && o.S_ITEM_STATE == "废料" |
| | | && s.S_AREA_CODE == Settings.Areas[7] && s.N_CURRENT_NUM > 0 |
| | | && s.N_LOCK_STATE == 0 && s.S_LOCK_STATE == "无").First(); |
| | | |
| | | if (locCntFeiLiao != null) |
| | | { |
| | | var reuslt1 = db.Deleteable<TN_CG_Detail>().Where(a => a.S_CNTR_CODE == locCntFeiLiao.S_CNTR_CODE).ExecuteCommand(); |
| | | var reuslt2 = db.Deleteable<TN_Loc_Container>().Where(a => a.S_CNTR_CODE == locCntFeiLiao.S_CNTR_CODE).ExecuteCommand(); |
| | | LogHelper.Info($"删除了废料{locCntFeiLiao.S_CNTR_CODE},影响的行数:{reuslt1}、{reuslt2}"); |
| | | } |
| | | |
| | | var startLoc = db.Queryable<TN_Location>() |
| | | .LeftJoin<TN_Loc_Container>((o, i) => o.S_CODE == i.S_LOC_CODE) |
| | | .LeftJoin<TN_CG_Detail>((o, i, s) => i.S_CNTR_CODE == s.S_CNTR_CODE) |
| | | .Where((o, i, s) => |
| | | s.N_ITEM_STATE == 8 && s.S_ITEM_STATE == "回炉胶" |
| | | && o.S_AREA_CODE == Settings.Areas[7] && o.N_CURRENT_NUM > 0 |
| | | && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无").First(); |
| | | |
| | | var typename = "复检区回炉胶自动回炉"; |
| | | |
| | | if (startLoc == null) |
| | | { |
| | | LogHelper.Info("复检区没有回炉胶,无需自动返回"); |
| | | return; |
| | | } |
| | | |
| | | var cginfo = db.Queryable<TN_CG_Detail>() |
| | | .LeftJoin<TN_Loc_Container>((o, i) => o.S_CNTR_CODE == i.S_CNTR_CODE) |
| | | .Where((o, i) => i.S_LOC_CODE == startLoc.S_CODE).First(); |
| | | |
| | | if (cginfo == null) |
| | | { |
| | | LogHelper.Info($"未找到起点{startLoc.S_CODE}的物料信息"); |
| | | return; |
| | | } |
| | | |
| | | var endArea = db.Queryable<TN_TN_SPE>().First(a => a.S_SPE == cginfo.S_SPE || a.S_SPE == cginfo.S_ITEM_SPEC); |
| | | if (endArea == null || string.IsNullOrWhiteSpace(endArea.S_RETURN_AREA)) |
| | | { |
| | | LogHelper.Info($"未找到规格{cginfo.S_SPE}、{cginfo.S_ITEM_SPEC}的规格配置信息,报该物料未配置回炉库区"); |
| | | return; |
| | | } |
| | | |
| | | var endLoc = db.Queryable<TN_Location>() |
| | | .Where(a => a.S_AREA_CODE == endArea.S_RETURN_AREA |
| | | && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "无" |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == a.S_CODE).NotAny()//不能有货 |
| | | ).OrderBy(a => a.N_LAYER, OrderByType.Asc).First(); |
| | | |
| | | if (endLoc == null) |
| | | { |
| | | LogHelper.Info($"回炉终点库区{endArea.S_RETURN_AREA}已满或者已全部锁住"); |
| | | return; |
| | | } |
| | | |
| | | if (WCSHelper.CreateTask(startLoc.S_CODE, endLoc.S_CODE, typename, 3, cginfo.S_CNTR_CODE, out string taskNo, cginfo.S_SPE))//创建搬送任务,起点终点容器 |
| | | { |
| | | LocationHelper.LockLoc(startLoc.S_CODE, 2);//起点出库锁, |
| | | LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁 |
| | | LogHelper.Info($"生成{typename}任务成功,容器号{cginfo.S_CNTR_CODE},起点{startLoc.S_CODE},终点{endLoc.S_CODE}"); |
| | | |
| | | Task task99 = Task.Run(() => |
| | | { |
| | | WMSHelper.InsertOpInfo("自动轮询", typename, cginfo.S_CNTR_CODE); |
| | | }); |
| | | |
| | | return; |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"生成{typename}任务失败,容器号{cginfo.S_CNTR_CODE},起点{startLoc.S_CODE},终点{endLoc.S_CODE}"); |
| | | return; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Error("CGNGCheck发生了异常", ex); |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | var cntCode = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == startLoc_3.S_CODE); |
| | | var outTimeCg = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == cntCode.S_CNTR_CODE); |
| | | if (WCSHelper.CreateTask(startLoc_3.S_CODE, endLoc_3.S_CODE, "过期次品回炉", 3, outTimeCg.S_CNTR_CODE,out string taskno, outTimeCg.S_SPE)) |
| | | if (WCSHelper.CreateTask(startLoc_3.S_CODE, endLoc_3.S_CODE, "过期次品回炉", 3, outTimeCg.S_CNTR_CODE, out string taskno, outTimeCg.S_SPE)) |
| | | { |
| | | LocationHelper.LockLoc(startLoc_3.S_CODE, 2);//起点出库锁, |
| | | LocationHelper.LockLoc(endLoc_3.S_CODE, 1);//终点入库锁 |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 检测满托缓存库区不合格的物品,满托出库复检 |
| | | /// 检测满托缓存库区不合格的物品,满托出库到复检区,替代了拆盘出库 |
| | | /// </summary> |
| | | internal static void CheckNoOkCg() |
| | | { |