Program.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
api/ApiHelper.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
api/ApiModel.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
core/Monitor.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
models/TN_CG_Detail.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
wms/LocationHelper.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Program.cs
@@ -145,6 +145,8 @@ tasks.Add(GetTask(Monitor.FullOutTime));//满托过期出库 过期合格回库,过期次品回炉 tasks.Add(GetTask(Monitor.CGOkCheck));// 在复检区检测物品合格,合格的物品自动回库 Task.WaitAll(tasks.ToArray()); } public void Stop() { Console.WriteLine("work stopped"); } api/ApiHelper.cs
@@ -167,10 +167,10 @@ && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0). OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位 } else if (model.cgState == 4)//技术合格回库 else if (model.cgState == 4)//技术判定回库 { cG_Detail.N_ITEM_STATE = 4; cG_Detail.S_ITEM_STATE = "技术合格"; cG_Detail.S_ITEM_STATE = "技术判定"; endLoc = db.Queryable<TN_Location>(). Where(o => o.S_AREA_CODE == Settings.Areas[8] && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" @@ -225,7 +225,7 @@ else { result.resultCode = 6; result.resultMsg = $"物料状态只能为0合格1待检2不合格,下线即待检,3过期,4技术合格,5混合,6一级料、7二级料,如果为其他值,则不处理"; result.resultMsg = $"物料状态只能为0合格1待检2不合格,下线即待检,3过期,4技术判定,5混合,6一级料、7二级料,如果为其他值,则不处理"; LogHelper.Info(result.resultMsg); return result; } @@ -241,7 +241,7 @@ var typeName = (model.cgState == 0) ? "人工复检回库" : "人工复检回炉"; //创建人工拆盘出库任务 //创建人工复检任务 if (WCSHelper.CreateTask(startLoc.S_CODE, endLoc.S_CODE, typeName, 3, locCnt.S_CNTR_CODE,out string taskNo,cG_Detail.S_SPE))//创建搬送任务,起点终点容器 { LocationHelper.LockLoc(startLoc.S_CODE, 2);//起点出库锁, @@ -1021,13 +1021,13 @@ var waitTime = SpecHelper.GetWaitTime(model.Spe); //优先技术合格 //优先技术判定 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) => o.N_CURRENT_NUM > 0 && o.S_AREA_CODE == Settings.Areas[1] && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" && o.C_ENABLE == "Y" && (s.S_ITEM_SPEC == model.Spe || s.S_SPE == model.Spe)//指定规格 && s.N_ITEM_STATE == 4 && s.S_ITEM_STATE == "技术合格"). //技术合格 && s.N_ITEM_STATE == 4 && s.S_ITEM_STATE == "技术判定"). //技术判定 First();//筛选有容器货位关系表信息,筛选有容器货品明细表信息 if (startLoc == null)//其次合格 api/ApiModel.cs
@@ -433,14 +433,14 @@ public string old_StartLoc { get; set; }//旧容器的起点 /// <summary> /// 0合格1待检2不合格,下线即待检,3过期,4技术合格,5混合,6一级料、7二级料 /// 0合格1待检2不合格,下线即待检,3过期,4技术判定,5混合,6一级料、7二级料 /// </summary> public int old_IsOK { get; set; }//旧容器ID,旧容器的货品的 public string new_CntIds { get; set; }//拆后的新容器ID public string new_StartLoc { get; set; }//新容器ID起点 /// <summary> /// 0合格1待检2不合格,下线即待检,3过期,4技术合格,5混合,6一级料、7二级料 /// 0合格1待检2不合格,下线即待检,3过期,4技术判定,5混合,6一级料、7二级料 /// </summary> public int new_IsOK { get; set; }//新容器ID的货品的 public string staff { get; set; } = "None";//操作人 core/Monitor.cs
@@ -350,6 +350,84 @@ } /// <summary> /// 在复检区检测物品合格,合格的物品自动回库 /// </summary> internal static void CGOkCheck() { var db = new SqlHelper<object>().GetInstance(); try { 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 == "合格" && o.S_AREA_CODE == Settings.Areas[7] && o.N_CURRENT_NUM > 0 && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无").First(); if (startLoc== null) { LogHelper.Info("复检区没有合格的物品,无需自动返回"); return; } var endLoc = db.Queryable<TN_Location>().First(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()//不能有货 ); if (endLoc != 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 (WCSHelper.CreateTask(startLoc.S_CODE, endLoc.S_CODE, "复检自动合格回库", 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}"); Task task99 = Task.Run(() => { WMSHelper.InsertOpInfo("自动轮询", "复检自动合格回库", cginfo.S_CNTR_CODE); }); Task task27 = Task.Run(() => { var target = new TN_InventoryM() { S_ID = cginfo.S_ID, RFID = cginfo.S_CNTR_CODE, SPEC = cginfo.S_SPE, WEIGHT = cginfo.F_QTY, ITEMSTATE = cginfo.S_ITEM_STATE, ITEMCODE = cginfo.S_ITEM_CODE, LOGINNAME = "自动轮询", SHIFT = "无", }; SpecHelper.InsertInventoryM(target); }); return ; } else { LogHelper.Info($"生成复检自动合格回库任务失败,容器号{cginfo.S_CNTR_CODE},起点{startLoc.S_CODE},终点{endLoc.S_CODE}"); return; } } catch(Exception ex) { LogHelper.Error("CGOkCheck发生了异常", ex); } } /// <summary> /// 满托过期出库 过期合格回库,过期次品回炉 /// </summary> internal static void FullOutTime() models/TN_CG_Detail.cs
@@ -27,12 +27,12 @@ public string S_SPE { get; set; }//货品规格 /// <summary> /// 0合格1待检2不合格,下线即待检,3过期,4技术合格,5混合,6一级料、7二级料 /// 0合格1待检2不合格,下线即待检,3过期,4技术判定,5混合,6一级料、7二级料 /// </summary> public string S_ITEM_STATE { get; set; }//货品状态 /// <summary> ///0合格1待检2不合格,下线即待检,3过期,4技术合格,5混合,6一级料、7二级料 ///0合格1待检2不合格,下线即待检,3过期,4技术判定,5混合,6一级料、7二级料 /// </summary> public int N_ITEM_STATE { get; set; }//货品状态_字典 public string S_BATCH_NO { get; set; }//批次号 wms/LocationHelper.cs
@@ -517,7 +517,7 @@ } /// <summary> /// 0合格1待检2不合格,下线即待检,3过期,4技术合格,5混合,6一级料、7二级料 /// 0合格1待检2不合格,下线即待检,3过期,4技术判定,5混合,6一级料、7二级料 /// </summary> /// <param name="state"></param> /// <returns></returns> @@ -541,7 +541,7 @@ } if (state == 4) { return "技术合格"; return "技术判定"; } if (state == 5) { @@ -605,7 +605,7 @@ public string rfId { get; set; }//容器号 /// <summary> /// 0合格1待检2不合格,3过期,4技术合格,5混合,6一级料、7二级料 /// 0合格1待检2不合格,3过期,4技术判定,5混合,6一级料、7二级料 /// </summary> public int cgState { get; set; }//物料状态