| | |
| | | if (isChai == "0") |
| | | { |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.PalletNo == item.PalletNo && w.BitBoxMark == "1").ToList(); |
| | | if (boxInfo != null)//托盘上有零箱需要拆箱 |
| | | if (boxInfo.Count>0)//托盘上有零箱需要拆箱 |
| | | { |
| | | isChai = "1"; |
| | | unstackingMode2 = "1";//需要拆箱需走PDA拆垛 |
| | |
| | | //出库任务号更改,如果由PLC出库,则PLC回传任务号为:任务号+实际出库口 |
| | | var TtaskNo = taskNo; |
| | | var outLine = ""; |
| | | if (userId == 0) |
| | | if (taskNo.Length == 18) |
| | | { |
| | | TtaskNo = taskNo.Substring(0, taskNo.Length - 4); |
| | | outLine = taskNo.Substring(taskNo.Length - 4, 3); |
| | | TtaskNo = taskNo.Substring(0, taskNo.Length - 3); |
| | | outLine = taskNo.Substring(taskNo.Length - 3, 3); |
| | | } |
| | | //当前任务信息 |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == TtaskNo && m.IsDel == "0"); |
| | |
| | | //添加操作日志记录 |
| | | var k = new OperationSOServer().AddLogOperationSo("出库作业", "出库日志", TtaskNo, "完成", $"点击完成按钮、完成任务号为:{TtaskNo}的任务", userId); |
| | | } |
| | | if (outLine != "") |
| | | if (outLine != "" && outLine != "009" && outLine != "013" && outLine != "018" && outLine != "022") |
| | | { |
| | | #region 分配出库目的位 |
| | | string positionStart = outLine, positionEnd = "" ,type ="D00"; |
| | | string positionStart = outLine, positionEnd = "", type = "D00"; |
| | | var type1 = Db.Queryable<BllExportNotice>().Where(m => m.SONo == allot.First().SONo && m.IsDel == "0" && m.Status == "3").First(); |
| | | if (type1 == null) |
| | | { |
| | | var locateno = Db.Queryable<SysStorageLocat>().Where(m => m.AreaNo == "B13").ToList(); |
| | | type = "D02" ; //空托盘垛出库 |
| | | if (outLine == "443")//西侧出库 |
| | | type = "D02"; //空托盘垛出库 |
| | | if (outLine == "443")//西侧出库 |
| | | { |
| | | positionEnd = locateno.First(m => m.LocatNo.Substring(3, 2) == "01" && m.LocatNo.Substring(3, 2) == "02" && m.LocatNo.Substring(3, 2) == "03" && |
| | | m.Status == "0" && m.Flag == "0").LocatNo; |
| | | positionEnd = locateno.First(m => m.Row == 1 && m.Status == "0" && m.Flag == "0").LocatNo; |
| | | } |
| | | else if (outLine == "440") //东侧出库 |
| | | { |
| | | positionEnd = locateno.First(m => m.LocatNo.Substring(4, 2) == "04" && m.LocatNo.Substring(4, 2) == "05" && m.LocatNo.Substring(4, 2) == "06" && |
| | | m.Status == "0" && m.Flag == "0").LocatNo; //东侧房间库位 |
| | | positionEnd = locateno.First(m => m.Row == 2 && m.Status == "0" && m.Flag == "0").LocatNo; //东侧房间库位 |
| | | } |
| | | else //1楼空托盘出库不调用AGV |
| | | { |
| | | Db.CommitTran(); |
| | | return; |
| | | } |
| | | |
| | | } |
| | | if (type1.Type == "1" && (type1.Type == "5" || (positionStart == "440" && positionStart == "440"))) //3楼领料出库 /3L中间品出库 |
| | | { |
| | | var locateno = Db.Queryable<SysStorageLocat>().Where(m => m.AreaNo == "B11").ToList(); |
| | | if (outLine == "443")//西侧出库 |
| | | else |
| | | { |
| | | if (type1.Type == "1" || (type1.Type == "5" && (positionStart == "440" || positionStart == "443"))) //3楼领料出库 /3L中间品出库 |
| | | { |
| | | positionEnd = locateno.First(m => m.LocatNo.Substring(3, 2) == "01"&& m.LocatNo.Substring(4, 2) == "02" && m.Status == "0" && m.Flag == "0").LocatNo; //西侧房间库位 |
| | | } |
| | | else if(outLine == "440") //东侧出库 |
| | | { |
| | | positionEnd = locateno.First(m => m.LocatNo.Substring(3, 2) == "03" && m.LocatNo.Substring(4, 2) == "04" && m.LocatNo.Substring(4, 2) == "05" && |
| | | m.LocatNo.Substring(4, 2) == "06" && m.LocatNo.Substring(3, 2) == "07" && m.Status == "0" && m.Flag == "0").LocatNo; //东侧房间库位 |
| | | } |
| | | } |
| | | else if (type1.Type == "2" && type1.Type == "3") //抽检出库 /取样出库 |
| | | { |
| | | positionEnd = Db.Queryable<SysStorageLocat>().First(m => m.AreaNo == "B04" && m.Status == "0" && m.Flag == "0").LocatNo; |
| | | } |
| | | else if (type1.Type == "4")//不合格品出库 |
| | | { |
| | | var locateno = Db.Queryable<SysStorageLocat>().Where(m => m.AreaNo == "B11").ToList(); |
| | | if (outLine == "443")//西侧出库 |
| | | { |
| | | |
| | | positionEnd = Db.Queryable<SysStorageLocat>().First(m => m.AreaNo == "B03" && m.Status == "0" && m.Flag == "0").LocatNo; |
| | | } |
| | | else //其他单据类型都存放发货缓存区 |
| | | { |
| | | positionEnd = Db.Queryable<SysStorageLocat>().First(m => m.AreaNo == "B02" && m.Status == "0" && m.Flag == "0").LocatNo; |
| | | positionEnd = locateno.OrderBy(m => m.LocatNo).First(m => m.Row == 1 && m.Status == "0" && m.Flag == "0").LocatNo; //西侧房间库位和对面房间 |
| | | } |
| | | else if (outLine == "440") //东侧出库 |
| | | { |
| | | positionEnd = locateno.OrderBy(m => m.LocatNo).First(m => m.Row == 2 && m.Status == "0" && m.Flag == "0").LocatNo; //东侧房间库位 |
| | | } |
| | | } |
| | | else if (type1.Type == "2" || type1.Type == "3") //抽检出库 /取样出库 |
| | | { |
| | | positionEnd = Db.Queryable<SysStorageLocat>().OrderBy(m=>m.LocatNo).First(m => m.AreaNo == "B04" && m.Status == "0" && m.Flag == "0").LocatNo; |
| | | } |
| | | else if (type1.Type == "4")//不合格品出库 |
| | | { |
| | | |
| | | positionEnd = Db.Queryable<SysStorageLocat>().OrderBy(m => m.LocatNo).First(m => m.AreaNo == "B03" && m.Status == "0" && m.Flag == "0").LocatNo; |
| | | } |
| | | else //其他单据类型都存放发货缓存区 |
| | | { |
| | | positionEnd = Db.Queryable<SysStorageLocat>().OrderBy(m => m.LocatNo).First(m => m.AreaNo == "B02" && m.Status == "0" && m.Flag == "0").LocatNo; |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | |
| | | agvTask.CtnrTyp = "1"; //容器类型,值为1 |
| | | if (type == "D02") |
| | | { |
| | | agvTask.CtnrNum = "10"; //叠托任务需要下发空托盘数量 |
| | | var palnoNum = Db.Queryable<BllPalletBind>().OrderByDescending(w=>w.Id).First(w => w.IsDel == "0" && w.PalletNo == task.PalletNo); |
| | | agvTask.CtnrNum = palnoNum.Qty.ToString(); //叠托任务需要下发空托盘数量 |
| | | } |
| | | |
| | | agvTaskList.Add(agvTask); |
| | |
| | | LogFile.SaveLogToFile($"AGV任务反馈执行通知:( {jsonData} ),", logStr); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 添加出库任务信息 |
| | | |
| | | var taskNonew = new Common().GetMaxNo("TK"); |
| | | var exTask = new LogTask //小车移库任务 |
| | | { |
| | | TaskNo = TtaskNo, |
| | | Sender = "WMS", |
| | | Receiver = "AGV", |
| | | IsSuccess = 1, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = positionStart,//起始位置 |
| | | EndLocat = positionEnd,//目标位置 |
| | | PalletNo = task.PalletNo,//托盘码 |
| | | IsSend = 1,//是否可再次下发 |
| | | IsCancel = 1,//是否可取消 |
| | | IsFinish = 1,//是否可完成 |
| | | Type = "2",//任务类型 0 入库任务 1 出库任务 2 移库任务 |
| | | Status = "1",//任务状态0:等待执行1正在执行2执行完成 |
| | | OrderType = "3",//0 入库单 1 出库单 2 盘点单 3 移库单 |
| | | CreateTime = DateTime.Now, //创建时间 |
| | | CreateUser = userId, //创建人 |
| | | Msg = "小车从" + positionStart + "到" + positionEnd + "的移库任务", //关键信息 |
| | | //FinishDate = serverTime, //完成时间 |
| | | }; |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | |
| | | #endregion |
| | | |
| | | #region 储位状态变更 |
| | | //更改储位状态为出库中 |
| | | var locat = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == positionEnd); |
| | | locat.Status = "4"; //4 移入中 |
| | | Db.Updateable(locat).ExecuteCommand();//修改储位信息 |
| | | #endregion |
| | | } |
| | | Db.CommitTran(); |
| | |
| | | |
| | | // 出库总表 状态改为部分分配 |
| | | var noticeModel = Db.Queryable<BllExportNotice>().First(m => m.SONo == noticeDetailModel.SONo && m.IsDel == "0"); |
| | | noticeModel.Status = "1"; |
| | | if (noticeDetailModel.AllotQty<=0) |
| | | { |
| | | noticeModel.Status = "0"; |
| | | } |
| | | else |
| | | { |
| | | noticeModel.Status = "1"; |
| | | } |
| | | |
| | | Db.Updateable(noticeModel).ExecuteCommand(); |
| | | |
| | | // 库存明细表 状态修改为异常锁定 锁定数量修改为托盘上数量 |
| | |
| | | |
| | | // 库存总表 锁定数量=当前锁定数量 + (库存明细托盘上数量-库存明细托盘上已锁定的数量) |
| | | var stockModel = Db.Queryable<DataStock>().First(m => m.LotNo == stockDetailModel.LotNo && m.SkuNo == stockDetailModel.SkuNo && m.IsDel == "0"); |
| | | stockModel.LockQty = stockModel.LockQty + (int)(stockDetailModel.Qty - lockQty); |
| | | stockModel.LockQty = stockModel.LockQty + (decimal)(stockDetailModel.Qty - lockQty); |
| | | Db.Updateable(stockModel).ExecuteCommand(); |
| | | |
| | | // 拣货明细表 删除 |
| | |
| | | foreach (var item in detailList) |
| | | { |
| | | totalQty += item.Qty; |
| | | totalAllotQty += Convert.ToInt32(item.AllotQty); |
| | | totalAllotQty += Convert.ToDecimal(item.AllotQty); |
| | | } |
| | | |
| | | if (totalAllotQty >= totalQty) |
| | |
| | | } |
| | | } |
| | | var boxInfo = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.PalletNo == item.PalletNo && w.BitBoxMark == "1").ToList(); |
| | | if (boxInfo != null)//托盘上有零箱需要拆箱 |
| | | if (boxInfo.Count>0)//托盘上有零箱需要拆箱 |
| | | { |
| | | result = "1";//需要拆箱 |
| | | break; |
| | |
| | | try |
| | | { |
| | | // 判断当前任务状态 Status 1:正在执行 3:异常结束 |
| | | var taskModel = Db.Queryable<LogTask>().First(m => m.TaskNo == model.TaskNo && m.IsDel == "0" && m.Status == "1"); |
| | | var taskModel = Db.Queryable<LogTask>().First(m => m.TaskNo == model.TaskNo && m.IsDel == "0" ); |
| | | if (taskModel == null) |
| | | { |
| | | throw new Exception("此任务不存在或任务状态已变更!"); |
| | | } |
| | | // 验证托盘分配信息 |
| | | var palletBindModel = Db.Queryable<BllExportAllot>().First(m => m.PalletNo == model.PalletNo && m.TaskNo == model.TaskNo && m.IsDel == "0" && m.Status == "1"); |
| | | if (palletBindModel != null) |
| | | var palletBindModel = Db.Queryable<BllExportAllot>().First(m => m.PalletNo == model.PalletNo && m.TaskNo == model.TaskNo && m.IsDel == "0" && m.Status == "2"); |
| | | if (palletBindModel == null) |
| | | { |
| | | throw new Exception("未找到当前托盘分配任务信息!"); |
| | | } |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取拆垛分拣主扫箱码出库 |
| | | /// 拆垛分拣主扫箱码出库 |
| | | /// </summary> |
| | | /// <param name="model">拆垛托盘号和WCS任务号</param> |
| | | /// <returns>拆垛托盘信息</returns> |
| | | /// <param name="model">箱号</param> |
| | | /// <returns>出库分拣口</returns> |
| | | public string BoxInfoExportWcs(string boxno) |
| | | { |
| | | try |
| | |
| | | throw new Exception("拣货数量不能大于箱内剩余待拣数量"); |
| | | } |
| | | decimal pickQty = 0;//拣货的数量 |
| | | |
| | | Db.BeginTran(); |
| | | var comList = new List<BllCompleteDetail>(); |
| | | foreach (var item in boxInfos) |
| | | { |
| | |
| | | } |
| | | //修改出库单信息 |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | |
| | | return ""; |
| | | Db.CommitTran(); |
| | | return allot.LoadingAddre; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |