| | |
| | | ITEMCODE = woInfo.S_ITEM_CODE, |
| | | LOGINNAME = woInfo.S_LINE_NO, |
| | | SHIFT = "None", |
| | | STARTLOC = startLoc.S_CODE, |
| | | }; |
| | | SpecHelper.InsertInventoryM(target); |
| | | }); |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 检测原材料产线下线附近是否有空位 |
| | | /// </summary> |
| | | internal static void CheckEmptyLoc_YclOutLineArea() |
| | | { |
| | | try |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | var endLoc = db.Queryable<TN_Location>(). |
| | | Where(o => o.S_AREA_CODE == Settings.Areas[15] |
| | | && o.N_LOCK_STATE == 0 |
| | | && o.S_LOCK_STATE == "无" |
| | | && o.C_ENABLE == "Y" |
| | | && o.N_CURRENT_NUM == 0 |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny() |
| | | ).//原材料产线附近空托库区 |
| | | First(); |
| | | |
| | | if (endLoc == null) |
| | | { |
| | | LogHelper.Info($"原材料产线附近空托库区{Settings.Areas[15]},已满,无需再入空托"); |
| | | return; |
| | | } |
| | | |
| | | var startLoc = db.Queryable<TN_Location>(). |
| | | Where(o => o.S_AREA_CODE == Settings.Areas[3] |
| | | && o.N_LOCK_STATE == 0 |
| | | && o.S_LOCK_STATE == "无" |
| | | && o.C_ENABLE == "Y" |
| | | && o.N_CURRENT_NUM == o.N_CAPACITY |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).Any() |
| | | ).ToList().//空托堆叠库区 |
| | | FirstOrDefault(); |
| | | |
| | | if (startLoc == null) |
| | | { |
| | | startLoc = db.Queryable<TN_Location>(). |
| | | Where(o => o.S_AREA_CODE == Settings.Areas[16] |
| | | && o.N_LOCK_STATE == 0 |
| | | && o.S_LOCK_STATE == "无" |
| | | && o.C_ENABLE == "Y" |
| | | && o.N_CURRENT_NUM == o.N_CAPACITY |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).Any() |
| | | ).ToList().//空托货架库区 |
| | | FirstOrDefault(); |
| | | } |
| | | |
| | | if (startLoc == null) |
| | | { |
| | | LogHelper.Info($"检测原材料产线下线附近是否有空位,起点没有找到合适的空托货位,要求有货"); |
| | | return; |
| | | } |
| | | |
| | | var cntrList = db.Queryable<TN_Loc_Container>().Where(a => a.S_LOC_CODE == startLoc.S_CODE).OrderBy(a => a.T_CREATE, OrderByType.Asc).ToList(); |
| | | |
| | | if (cntrList.Count < 1) |
| | | { |
| | | LogHelper.Info($"检测原材料产线下线附近是否有空位,起点{startLoc.S_CODE}未找到货位容器关系信息"); |
| | | return; |
| | | } |
| | | |
| | | string cntrString = ""; |
| | | for (int i = 0; i < cntrList.Count; i++) |
| | | { |
| | | if (i == cntrList.Count - 1)//最后一个字符串连接不加逗号 |
| | | { |
| | | cntrString += cntrList[i].S_CNTR_CODE; |
| | | } |
| | | else |
| | | { |
| | | cntrString += cntrList[i].S_CNTR_CODE + ","; |
| | | } |
| | | } |
| | | |
| | | if (WCSHelper.CreateTask(startLoc.S_CODE, endLoc.S_CODE, "空托自动上线", 3, cntrString))//创建搬送任务,起点终点容器 |
| | | { |
| | | LocationHelper.LockLoc(startLoc.S_CODE, 2);//起点出库锁, |
| | | LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁 |
| | | |
| | | LogHelper.Info($"检测原材料产线下线附近是否有空位,生成空托自动上线任务成功,容器:{cntrString},起点:{startLoc.S_CODE}"); |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info($"检测原材料产线下线附近是否有空位,生成空托自动上线任务失败,容器:{cntrString},起点:{startLoc.S_CODE}"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Error(ex.Message, ex); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 线边满托货位自动解绑 |
| | | /// </summary> |
| | | internal static void XBChekcFull() |
| | | { |
| | | try |
| | | { |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 在复检区检测物品合格,合格的物品自动回库 |
| | | /// </summary> |
| | | internal static void CGOkCheck() |
| | |
| | | ITEMCODE = cginfo.S_ITEM_CODE, |
| | | LOGINNAME = "自动轮询", |
| | | SHIFT = "无", |
| | | STARTLOC = startLoc.S_CODE, |
| | | }; |
| | | SpecHelper.InsertInventoryM(target); |
| | | }); |
| | |
| | | LocationHelper.LockLoc(startLoc_1.S_CODE, 2);//起点出库锁, |
| | | LocationHelper.LockLoc(endLoc_1.S_CODE, 1);//终点入库锁 |
| | | LogHelper.Info($"生成满托过期出库任务成功,容器号{outTimeCg.S_CNTR_CODE},起点{startLoc_1.S_CODE},终点{endLoc_1.S_CODE}"); |
| | | |
| | | Task task27 = Task.Run(() => |
| | | { |
| | | SpecHelper.DeleteInventoryM(outTimeCg.S_ID); |
| | | }); |
| | | } |
| | | } |
| | | } |
| | |
| | | ITEMCODE = outTimeCg.S_ITEM_CODE, |
| | | LOGINNAME = "过期合格回库轮询", |
| | | SHIFT = "None", |
| | | STARTLOC = startLoc_2.S_CODE, |
| | | }; |
| | | SpecHelper.InsertInventoryM(target); |
| | | }); |
| | |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("重量相等,同步TN_DayProDetail跳过"); |
| | | //LogHelper.Info("重量相等,同步TN_DayProDetail跳过"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("当天的货品规格列表为0,同步TN_DayProDetail跳过"); |
| | | //LogHelper.Info("当天的货品规格列表为0,同步TN_DayProDetail跳过"); |
| | | } |
| | | |
| | | // 同步 TN_WeekProSpcDetail |
| | |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("重量相等,同步TN_WeekProSpcDetail跳过"); |
| | | //LogHelper.Info("重量相等,同步TN_WeekProSpcDetail跳过"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("当周的货品规格列表为0,同步TN_WeekProSpcDetail跳过"); |
| | | //LogHelper.Info("当周的货品规格列表为0,同步TN_WeekProSpcDetail跳过"); |
| | | } |
| | | |
| | | // 同步 TN_MonthProSpcDetail |
| | |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("重量相等,同步TN_MonthProSpcDetail跳过"); |
| | | //LogHelper.Info("重量相等,同步TN_MonthProSpcDetail跳过"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("当月的货品规格列表为0,同步TN_MonthProSpcDetail跳过"); |
| | | //LogHelper.Info("当月的货品规格列表为0,同步TN_MonthProSpcDetail跳过"); |
| | | } |
| | | |
| | | // 同步 TN_YearProSpcDetail |
| | |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("重量相等,同步TN_YearProSpcDetail跳过"); |
| | | //LogHelper.Info("重量相等,同步TN_YearProSpcDetail跳过"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | LogHelper.Info("当年的货品规格列表为0,同步TN_YearProSpcDetail跳过"); |
| | | //LogHelper.Info("当年的货品规格列表为0,同步TN_YearProSpcDetail跳过"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | |
| | | LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁 |
| | | |
| | | LogHelper.Info($"生成满托出库复检任务成功,容器:{cntId.S_CNTR_CODE},起点:{startLoc.S_CODE},终点:{endLoc.S_CODE}"); |
| | | |
| | | Task task27 = Task.Run(() => |
| | | { |
| | | SpecHelper.DeleteInventoryM(cgInfo.S_ID); |
| | | }); |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | |
| | | var endLoc = db.Queryable<TN_Location>(). |
| | | Where(a => a.S_AREA_CODE == Settings.Areas[4] && a.N_LOCK_STATE == 0 |
| | | Where(a => a.S_AREA_CODE == Settings.Areas[15] && a.N_LOCK_STATE == 0 |
| | | && a.S_LOCK_STATE == "无" && a.C_ENABLE == "Y" && a.N_CURRENT_NUM == 0 |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == a.S_CODE).NotAny() |
| | | ). |
| | | OrderBy(a => a.N_CURRENT_NUM, OrderByType.Asc). |
| | | First(); |
| | | ).First();//先找 原材料产线附近空托库区 |
| | | |
| | | if (endLoc == null) |
| | | { |
| | | endLoc = db.Queryable<TN_Location>(). |
| | | Where(a => a.S_AREA_CODE == Settings.Areas[16] && a.N_LOCK_STATE == 0 |
| | | && a.S_LOCK_STATE == "无" && a.C_ENABLE == "Y" && a.N_CURRENT_NUM == 0 |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == a.S_CODE).NotAny() |
| | | ).First(); |
| | | }// 再找 空托货架库区 |
| | | |
| | | if (endLoc == null) |
| | | { |
| | | endLoc = db.Queryable<TN_Location>(). |
| | | Where(a => a.S_AREA_CODE == Settings.Areas[4] && a.N_LOCK_STATE == 0 |
| | | && a.S_LOCK_STATE == "无" && a.C_ENABLE == "Y" && a.N_CURRENT_NUM == 0 |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == a.S_CODE).NotAny() |
| | | ).First(); |
| | | }// 最后找 空托缓存库区 |
| | | |
| | | |
| | | if (endLoc == null) |
| | | { |