| | |
| | | cG_Detail.N_ITEM_STATE = 0; |
| | | cG_Detail.S_ITEM_STATE = "合格"; |
| | | endLoc = db.Queryable<TN_Location>(). |
| | | Where(o => o.S_AREA_CODE == Settings.Areas[1] && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0). |
| | | Where(o => o.S_AREA_CODE == Settings.Areas[1] |
| | | && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny() |
| | | && 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 == "无" && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0). |
| | | Where(o => o.S_AREA_CODE == Settings.Areas[8] |
| | | && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny() |
| | | && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0). |
| | | OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位 |
| | | } |
| | | else if (model.cgState == 2)//不合格回炉 |
| | |
| | | cG_Detail.N_ITEM_STATE = 2; |
| | | 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 == "无" && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0). |
| | | Where(o => o.S_AREA_CODE == Settings.Areas[8] |
| | | && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny() |
| | | && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0). |
| | | OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位 |
| | | } |
| | | else if (model.cgState == 5)//混合也回库,通过点对点再发线边 |
| | |
| | | cG_Detail.N_ITEM_STATE = 5; |
| | | cG_Detail.S_ITEM_STATE = "混合"; |
| | | endLoc = db.Queryable<TN_Location>(). |
| | | Where(o => o.S_AREA_CODE == Settings.Areas[2] && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0). |
| | | Where(o => o.S_AREA_CODE == Settings.Areas[2] |
| | | && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny() |
| | | && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0). |
| | | OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位 |
| | | } |
| | | else if (model.cgState == 6)//一级料二级料回库 |
| | |
| | | cG_Detail.N_ITEM_STATE = 6; |
| | | cG_Detail.S_ITEM_STATE = "一级料"; |
| | | endLoc = db.Queryable<TN_Location>(). |
| | | Where(o => o.S_AREA_CODE == Settings.Areas[2] && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0). |
| | | Where(o => o.S_AREA_CODE == Settings.Areas[2] |
| | | && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny() |
| | | && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0). |
| | | OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位 |
| | | } |
| | | else if (model.cgState == 7)//一级料二级料回库 |
| | |
| | | cG_Detail.N_ITEM_STATE = 7; |
| | | cG_Detail.S_ITEM_STATE = "二级料"; |
| | | endLoc = db.Queryable<TN_Location>(). |
| | | Where(o => o.S_AREA_CODE == Settings.Areas[2] && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0). |
| | | Where(o => o.S_AREA_CODE == Settings.Areas[2] |
| | | && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny() |
| | | && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0). |
| | | OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位 |
| | | } |
| | | 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; |
| | | } |
| | |
| | | |
| | | 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);//起点出库锁, |
| | | LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁 |
| | | LogHelper.Info($"生成{typeName}任务成功,容器号{locCnt.S_CNTR_CODE},起点{startLoc.S_CODE},终点{endLoc.S_CODE}"); |
| | | |
| | | db.Updateable<TN_CG_Detail>().UpdateColumns(it => new { it.S_ITEM_STATE, it.N_ITEM_STATE }).ExecuteCommand(); |
| | | if( db.Updateable<TN_CG_Detail>(cG_Detail).UpdateColumns(it => new { it.S_ITEM_STATE, it.N_ITEM_STATE }).ExecuteCommand() <= 0) |
| | | { |
| | | result.resultCode = 5; |
| | | result.resultMsg = $"更新容器{locCnt.S_CNTR_CODE}的货品明细失败"; |
| | | LogHelper.Info(result.resultMsg); |
| | | return result; |
| | | } |
| | | |
| | | Task task99 = Task.Run(() => |
| | | { |
| | |
| | | return result; |
| | | } |
| | | |
| | | var endLoc = db.Queryable<TN_Location>().First(o =>o.S_AREA_CODE == Settings.Areas[11] && o.N_CURRENT_NUM == 0 && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无"); |
| | | var endLoc = db.Queryable<TN_Location>(). |
| | | Where(o =>o.S_AREA_CODE == Settings.Areas[11] |
| | | && o.N_CURRENT_NUM == 0 |
| | | && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny() |
| | | ).First(); |
| | | |
| | | if (endLoc == null) |
| | | { |
| | | result.resultCode = 2; |
| | |
| | | |
| | | endLoc.N_LOCK_STATE = 1; |
| | | endLoc.S_LOCK_STATE = "入库锁"; |
| | | startLoc.T_MODIFY = System.DateTime.Now; |
| | | endLoc.T_MODIFY = System.DateTime.Now; |
| | | |
| | | using (var tran = db.Ado.UseTran()) |
| | | { |
| | |
| | | LogHelper.Info("触发API:PDA满托下线入库" + JsonConvert.SerializeObject(model), "API"); |
| | | try |
| | | { |
| | | if( model.RfId.Length < 16) |
| | | if (model.RfId.Length < 16) |
| | | { |
| | | result.resultCode = 1; |
| | | result.resultMsg = $"输入的RFID,长度不够,要大于16位"; |
| | |
| | | return result; |
| | | } |
| | | |
| | | model.RfId = WMSHelper.ConvertHexToAscii(model.RfId); |
| | | model.RfId = WMSHelper.ConvertHexToAscii(model.RfId.Substring(0,16)); |
| | | |
| | | //该产线的满托下线位置,起点 |
| | | var startPoint = Settings.ProductionLines.FirstOrDefault(a => a.PointOut == model.StartLoc); |
| | |
| | | }; |
| | | |
| | | var endLoc = db.Queryable<TN_Location>(). |
| | | Where(c => c.S_AREA_CODE == Settings.Areas[1] && c.S_LOCK_STATE == "无" && c.N_LOCK_STATE == 0 && c.N_CURRENT_NUM == 0 && c.C_ENABLE == "Y"). |
| | | OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位,直接判断当前数量为0即可 |
| | | Where(c => c.S_AREA_CODE == Settings.Areas[1] |
| | | && c.S_LOCK_STATE == "无" && c.N_LOCK_STATE == 0 |
| | | && c.N_CURRENT_NUM == 0 && c.C_ENABLE == "Y" |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == c.S_CODE).NotAny()//不能有货 |
| | | ). |
| | | OrderBy(o => o.N_LAYER, OrderByType.Asc).First();//查询合适的终点货位,1层先入库 |
| | | |
| | | if (endLoc != null) |
| | | { |
| | |
| | | return result; |
| | | } |
| | | |
| | | if (endLoc.N_CURRENT_NUM != 0) |
| | | if (endLoc.N_CURRENT_NUM != 0 || db.Queryable<TN_Loc_Container>().Any(b => b.S_LOC_CODE == model.EndLoc))//不能有货 |
| | | { |
| | | result.resultCode = 5; |
| | | result.resultMsg = $"该终点货位{model.EndLoc}已满"; |
| | |
| | | |
| | | 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)//其次合格 |
| | |
| | | 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 == 0 && s.S_ITEM_STATE == "合格" //合格的 |
| | | && s.T_MODIFY.AddMinutes(waitTime) <= System.DateTime.Now).//根据规格的不同静置不同分钟才能出库 |
| | | && i.T_CREATE.AddMinutes(waitTime) <= System.DateTime.Now).//根据规格的不同静置不同分钟才能出库 |
| | | OrderBy((o, i, s) => s.T_CREATE, OrderByType.Asc).//先进先出 |
| | | First();//筛选有容器货位关系表信息,筛选有容器货品明细表信息 |
| | | } |
| | |
| | | SHIFT = model.shift, |
| | | }; |
| | | SpecHelper.InsertComponentDetail(target); |
| | | }); |
| | | |
| | | Task task27 = Task.Run(() => |
| | | { |
| | | SpecHelper.DeleteInventoryM(cgInfo.S_ID); |
| | | }); |
| | | } |
| | | else |
| | |
| | | |
| | | //查询符合的未锁定已启用指定货区的货位,终点 |
| | | var endLoc = db.Queryable<TN_Location>(). |
| | | First(o => o.S_AREA_CODE == Settings.Areas[9] && o.S_CODE == weightPoint && o.C_ENABLE == "Y");//查询合适的终点货位 |
| | | First(o => o.S_AREA_CODE == Settings.Areas[9] |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny() |
| | | && o.S_CODE == weightPoint && o.C_ENABLE == "Y");//查询合适的终点货位 |
| | | |
| | | if (endLoc == null) |
| | | { |
| | |
| | | } |
| | | |
| | | var endLoc_Ok = db.Queryable<TN_Location>(). |
| | | First(o => o.S_AREA_CODE == Settings.Areas[9] && o.S_CODE == weightPoint);//查询合适的终点货位,去称重 |
| | | First(o => o.S_AREA_CODE == Settings.Areas[9] |
| | | && o.S_CODE == weightPoint);//查询合适的终点货位,去称重 |
| | | |
| | | var endLoc_NG = db.Queryable<TN_Location>(). |
| | | First(o => o.S_AREA_CODE == Settings.Areas[8] && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" && o.N_CURRENT_NUM == 0);//查询合适的终点货位 |
| | | Where(o => o.S_AREA_CODE == Settings.Areas[8] |
| | | && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" |
| | | && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny()//不能有货 |
| | | && o.N_CURRENT_NUM == 0).First();//查询合适的终点货位 |
| | | |
| | | if (endLoc_Ok == null) |
| | | { |
| | |
| | | |
| | | var endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.endLoc); |
| | | |
| | | if (!(endLoc != null && endLoc.N_CURRENT_NUM == 0 && endLoc.N_LOCK_STATE == 0 && endLoc.S_LOCK_STATE == "无")) |
| | | if (!(endLoc != null && endLoc.N_CURRENT_NUM == 0 && endLoc.N_LOCK_STATE == 0 && endLoc.S_LOCK_STATE == "无") || db.Queryable<TN_Loc_Container>().Any(a=>a.S_LOC_CODE == endLoc.S_CODE)) |
| | | { |
| | | result.resultCode = 2; |
| | | result.resultMsg = $"终点位置{model.endLoc}不满足条件:endLoc != null && endLoc.N_CURRENT_NUM == 0 && endLoc.N_LOCK_STATE == 0 && endLoc.S_LOCK_STATE == 无"; |
| | | result.resultMsg = $"终点位置{model.endLoc}已锁住或已满"; |
| | | LogHelper.Info(result.resultMsg); |
| | | return result; |
| | | } |
| | |
| | | var cginfo = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == startLocCnt.S_CNTR_CODE); |
| | | Task task27 = Task.Run(() => |
| | | { |
| | | if (endLoc.S_AREA_CODE == Settings.Areas[2] && cginfo != null) //插入WMS库存明细 |
| | | if (endLoc.S_AREA_CODE == Settings.Areas[1] && cginfo != null) //插入WMS库存明细 |
| | | { |
| | | var target = new TN_InventoryM() |
| | | { |
| | |
| | | SHIFT = model.shift, |
| | | }; |
| | | SpecHelper.InsertInventoryM(target); |
| | | } |
| | | }); |
| | | Task task26 = Task.Run(() => |
| | | { |
| | | if (startLoc.S_AREA_CODE == Settings.Areas[2] && cginfo != null) |
| | | { |
| | | SpecHelper.DeleteInventoryM(cginfo.S_ID); |
| | | } |
| | | }); |
| | | |