| | |
| | | internal static SimpleResult PDAFullCheckIn(PDAFullCheckInfo model) |
| | | { |
| | | LogHelper.Info("触发API:PDA满托复检判断" + JsonConvert.SerializeObject(model), "API"); |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | var result = new SimpleResult();//返回结果 |
| | | try |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | var locCnt = db.Queryable<TN_Loc_Container>().First(a => a.S_CNTR_CODE == model.rfId); |
| | | if (locCnt == null) |
| | | { |
| | |
| | | && 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 == "无" |
| | |
| | | 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);//起点出库锁, |
| | |
| | | ITEMCODE = cG_Detail.S_ITEM_CODE, |
| | | LOGINNAME = model.staff, |
| | | SHIFT = model.shift, |
| | | STARTLOC = startLoc.S_CODE, |
| | | }; |
| | | SpecHelper.InsertInventoryM(target); |
| | | } |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 线边空托到原材料输送线 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | | /// <returns></returns> |
| | | internal static SimpleResult EmptyLineToLine(EmptyLineToLineInfo model) |
| | | { |
| | | LogHelper.Info("触发API:线边空托到原材料输送线" + JsonConvert.SerializeObject(model), "API"); |
| | | var result = new SimpleResult();//返回结果 |
| | | try |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | var startLoc = db.Queryable<TN_Location>().First(o => o.S_CODE == model.startLoc); |
| | | if (startLoc == null) |
| | | { |
| | | result.resultCode = 1; |
| | | result.resultMsg = $"数据库中未找到此货位:{model.startLoc}"; |
| | | LogHelper.Info(result.resultMsg); |
| | | return result; |
| | | } |
| | | if (startLoc.N_CURRENT_NUM == 1 || db.Queryable<TN_Loc_Container>().Any(a=>a.S_LOC_CODE==model.startLoc)) |
| | | { |
| | | result.resultCode = 2; |
| | | result.resultMsg = $"此货位:{model.startLoc},已绑定托盘"; |
| | | LogHelper.Info(result.resultMsg); |
| | | return result; |
| | | } |
| | | if (startLoc.N_LOCK_STATE != 0 || startLoc.S_LOCK_STATE != "无") |
| | | { |
| | | result.resultCode = 3; |
| | | result.resultMsg = $"此货位:{model.startLoc},已上锁"; |
| | | LogHelper.Info(result.resultMsg); |
| | | return result; |
| | | } |
| | | if (startLoc.C_ENABLE != "Y") |
| | | { |
| | | result.resultCode = 4; |
| | | result.resultMsg = $"此货位:{model.startLoc},未启用"; |
| | | LogHelper.Info(result.resultMsg); |
| | | return result; |
| | | } |
| | | var startLocArea = Settings.Areas[13]; |
| | | if (startLoc.S_AREA_CODE != startLocArea) |
| | | { |
| | | result.resultCode = 5; |
| | | result.resultMsg = $"此货位:{model.startLoc},不属于线边空托区{startLocArea}"; |
| | | LogHelper.Info(result.resultMsg); |
| | | return result; |
| | | } |
| | | |
| | | |
| | | var endLocIndex = Settings.LineSorting; |
| | | var endLocLine = Settings.ProductionLines.FirstOrDefault(a => a.Sorting == endLocIndex); |
| | | if (endLocLine == null) |
| | | { |
| | | result.resultCode = 6; |
| | | result.resultMsg = $"配置文件中未找到序号为:{endLocIndex}的原材料产线的信息"; |
| | | LogHelper.Info(result.resultMsg); |
| | | return result; |
| | | } |
| | | var endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == endLocLine.PointIn); |
| | | if (endLoc == null) |
| | | { |
| | | result.resultCode = 7; |
| | | result.resultMsg = $"数据库中未找到原材料产线空托上线口:{endLocLine.PointIn}"; |
| | | LogHelper.Info(result.resultMsg); |
| | | return result; |
| | | } |
| | | var endLocArea = Settings.Areas[14]; |
| | | if (endLoc.S_AREA_CODE != endLocArea) |
| | | { |
| | | result.resultCode = 8; |
| | | result.resultMsg = $"此货位:{endLoc.S_CODE},不属于原材料产线空托区{endLocArea}"; |
| | | LogHelper.Info(result.resultMsg); |
| | | return result; |
| | | } |
| | | if (endLoc.N_CURRENT_NUM == 1 || db.Queryable<TN_Loc_Container>().Any(a => a.S_LOC_CODE == endLocLine.PointIn)) |
| | | { |
| | | result.resultCode = 9; |
| | | result.resultMsg = $"此货位:{model.startLoc},已绑定托盘"; |
| | | LogHelper.Info(result.resultMsg); |
| | | return result; |
| | | } |
| | | if (endLoc.N_LOCK_STATE != 0 || endLoc.S_LOCK_STATE != "无") |
| | | { |
| | | result.resultCode = 10; |
| | | result.resultMsg = $"此货位:{model.startLoc},已上锁"; |
| | | LogHelper.Info(result.resultMsg); |
| | | return result; |
| | | } |
| | | if (endLoc.C_ENABLE != "Y") |
| | | { |
| | | result.resultCode = 11; |
| | | result.resultMsg = $"此货位:{model.startLoc},未启用"; |
| | | LogHelper.Info(result.resultMsg); |
| | | return result; |
| | | } |
| | | var Cnt = Guid.NewGuid().ToString("D"); |
| | | |
| | | |
| | | using (var trans = db.Ado.UseTran()) |
| | | { |
| | | startLoc.N_CURRENT_NUM = 1; |
| | | startLoc.N_LOCK_STATE = 2; |
| | | startLoc.S_LOCK_STATE = "出库锁"; |
| | | |
| | | endLoc.N_LOCK_STATE = 1; |
| | | endLoc.S_LOCK_STATE = "入库锁"; |
| | | |
| | | var locCnt = new TN_Loc_Container() |
| | | { |
| | | S_LOC_CODE = startLoc.S_CODE, |
| | | S_CNTR_CODE = Cnt, |
| | | }; |
| | | |
| | | var task = new TN_Task() |
| | | { |
| | | S_CODE = WCSHelper.GenerateTaskNo(), |
| | | S_START_AREA = startLoc.S_AREA_CODE, |
| | | S_END_AREA = endLoc.S_AREA_CODE, |
| | | S_START_LOC = startLoc.S_CODE, |
| | | S_END_LOC = endLoc.S_CODE, |
| | | S_TYPE = "线边空托上线", |
| | | N_PRIORITY = 3, |
| | | N_SCHEDULE_TYPE = 1, |
| | | N_B_STATE = 0, |
| | | S_B_STATE = "等待", |
| | | S_CNTR_CODE = Cnt, |
| | | }; |
| | | |
| | | if ( |
| | | db.Updateable<TN_Location>(startLoc).UpdateColumns(it=>new {it.N_CURRENT_NUM,it.N_LOCK_STATE,it.S_LOCK_STATE }).ExecuteCommand() == 1 && |
| | | db.Updateable<TN_Location>(endLoc).UpdateColumns(it=>new {it.N_LOCK_STATE,it.S_LOCK_STATE }).ExecuteCommand() == 1 && |
| | | db.Insertable<TN_Loc_Container>(locCnt).ExecuteCommand() == 1 && |
| | | db.Insertable<TN_Task>(task).ExecuteCommand() == 1 |
| | | ) |
| | | { |
| | | if (Settings.LineSorting < Settings.ProductionLines.Count - 1) |
| | | { |
| | | Settings.LineSorting++; |
| | | } |
| | | else |
| | | { |
| | | Settings.LineSorting = 0; |
| | | } |
| | | |
| | | |
| | | trans.CommitTran(); |
| | | result.resultCode = 0; |
| | | result.resultMsg = $"创建 线边空托上线 任务成功,起点:{startLoc.S_CODE},终点:{endLoc.S_CODE}"; |
| | | LogHelper.Info(result.resultMsg); |
| | | return result; |
| | | } |
| | | else |
| | | { |
| | | trans.RollbackTran(); |
| | | result.resultCode = 12; |
| | | result.resultMsg = $"创建 线边空托上线 任务失败,起点:{startLoc.S_CODE},终点:{endLoc.S_CODE}"; |
| | | LogHelper.Info(result.resultMsg); |
| | | return result; |
| | | } |
| | | } |
| | | } |
| | | catch(Exception ex) |
| | | { |
| | | result.resultCode = -1; |
| | | result.resultMsg = $"PDA满托复检判断,发生了异常:{ex.Message}"; |
| | | LogHelper.Info(result.resultMsg); |
| | | return result; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 人工次品回炉 |
| | | /// </summary> |
| | | /// <param name="model"></param> |
| | |
| | | internal static SimpleResult PDAReturnReset(PDAReturnResetInfo model) |
| | | { |
| | | LogHelper.Info("触发API:人工次品回炉" + JsonConvert.SerializeObject(model), "API"); |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | var result = new SimpleResult();//返回结果 |
| | | |
| | | try |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | var startLoc = db.Queryable<TN_Location>().First(o => o.S_CODE == model.startLoc && o.N_CURRENT_NUM ==0 && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE=="无" && o.S_AREA_CODE == Settings.Areas[4]); |
| | | if (startLoc == null) |
| | | { |
| | |
| | | /// </summary> |
| | | internal static SimpleResult PDAFullInArea(PDAFullInAreaInfo model) |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | var result = new SimpleResult();//返回结果 |
| | | LogHelper.Info("触发API:PDA满托下线入库" + JsonConvert.SerializeObject(model), "API"); |
| | | try |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | if (model.RfId.Length < 16) |
| | | { |
| | | result.resultCode = 1; |
| | |
| | | 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); |
| | |
| | | && 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.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位,直接判断当前数量为0即可 |
| | | OrderBy(o => o.N_LAYER, OrderByType.Asc).First();//查询合适的终点货位,1层先入库 |
| | | |
| | | if (endLoc != null) |
| | | { |
| | |
| | | ITEMSTATE = "待检", |
| | | LOGINNAME = model.staff, |
| | | SHIFT = model.shift, |
| | | STARTLOC = startLoc.S_CODE, |
| | | }; |
| | | SpecHelper.InsertInventoryM(target); |
| | | }); |
| | |
| | | LogHelper.Info("触发API:满托出库上线" + JsonConvert.SerializeObject(model), "API"); |
| | | |
| | | var result = new SimpleResult(); |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | TN_Location endLoc = new TN_Location(); |
| | | try |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | if (model.EndLoc != string.Empty)//指定终点货位 |
| | | { |
| | | endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == 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();//筛选有容器货位关系表信息,筛选有容器货品明细表信息 |
| | | } |
| | |
| | | }; |
| | | SpecHelper.InsertComponentDetail(target); |
| | | }); |
| | | |
| | | Task task27 = Task.Run(() => |
| | | { |
| | | SpecHelper.DeleteInventoryM(cgInfo.S_ID); |
| | | }); |
| | | } |
| | | else |
| | | { |
| | |
| | | { |
| | | LogHelper.Info("触发API:空托下线堆叠" + JsonConvert.SerializeObject(model), "API"); |
| | | |
| | | |
| | | var result = new SimpleResult(); |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | TN_Location startLoc = new TN_Location(); |
| | | |
| | | try |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | var startLocCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc && a.S_CNTR_CODE == model.cntID); |
| | | if (startLocCntrRel != null) |
| | | { |
| | |
| | | LogHelper.Info("触发API:余料下线入库" + JsonConvert.SerializeObject(model), "API"); |
| | | |
| | | var result = new SimpleResult(); |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | TN_Location startLoc_Old = new TN_Location(); |
| | | TN_Location startLoc_New = new TN_Location(); |
| | | |
| | | try |
| | | { |
| | | |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | var cG_Detail = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == model.cntID); |
| | | if (cG_Detail == null) |
| | | { |
| | |
| | | ITEMCODE = cG_Detail.S_ITEM_CODE, |
| | | LOGINNAME = model.staff, |
| | | SHIFT = model.shift, |
| | | STARTLOC = startLoc_New.S_CODE, |
| | | }; |
| | | SpecHelper.InsertInventoryM(target); |
| | | }); |
| | |
| | | LogHelper.Info("触发API:人工拆盘入库" + JsonConvert.SerializeObject(model), "API"); |
| | | |
| | | var result = new SimpleResult(); |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | string cntLog = $"旧的容器号{model.old_CntId}"; |
| | | try |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | if (model.new_IsOK == model.old_IsOK) |
| | | { |
| | | result.resultCode = 19; |
| | |
| | | ITEMCODE = cG_old_Detail.S_ITEM_CODE, |
| | | LOGINNAME = model.staff, |
| | | SHIFT = model.shift, |
| | | STARTLOC = startLoc_Old.S_CODE, |
| | | }; |
| | | SpecHelper.InsertInventoryM(target); |
| | | } |
| | |
| | | ITEMCODE = cG_new_Detail_Ins.S_ITEM_CODE, |
| | | LOGINNAME = model.staff, |
| | | SHIFT = model.shift, |
| | | STARTLOC = startLoc_New.S_CODE, |
| | | }; |
| | | SpecHelper.InsertInventoryM(target); |
| | | } |
| | |
| | | LogHelper.Info("触发API:人工创建点到点任务" + JsonConvert.SerializeObject(model), "API"); |
| | | |
| | | var result = new SimpleResult(); |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | try |
| | | { |
| | | var db = new SqlHelper<object>().GetInstance(); |
| | | |
| | | var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc); |
| | | |
| | | if(!(startLoc != null && startLoc.N_LOCK_STATE == 0 && startLoc.S_LOCK_STATE == "无")) |
| | |
| | | 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() |
| | | { |
| | |
| | | ITEMCODE = cginfo.S_ITEM_CODE, |
| | | LOGINNAME = model.staff, |
| | | SHIFT = model.shift, |
| | | STARTLOC = model.startLoc, |
| | | }; |
| | | SpecHelper.InsertInventoryM(target); |
| | | } |
| | | }); |
| | | Task task26 = Task.Run(() => |
| | | { |
| | | if (startLoc.S_AREA_CODE == Settings.Areas[2] && cginfo != null) |
| | | { |
| | | SpecHelper.DeleteInventoryM(cginfo.S_ID); |
| | | } |
| | | }); |
| | | |