| | |
| | | try |
| | | { |
| | | //当前任务信息 |
| | | var task = await Db.Queryable<LogTask>().FirstAsync(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | if (task == null) |
| | | { |
| | | throw Oops.Bah($"未查询到任务号为:‘{taskNo}’的任务信息"); |
| | | throw new Exception($"未查询到任务号为:‘{taskNo}’的任务信息"); |
| | | } |
| | | if (task.Status == "2") |
| | | { |
| | | throw Oops.Bah("当前任务已完成"); |
| | | throw new Exception("当前任务已完成"); |
| | | } |
| | | Db.BeginTran(); |
| | | //库存中当前托盘的信息 |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToListAsync(); |
| | | var locateNo = stockDetail.Select(m => m.LocatNo).Distinct().FirstOrDefault(); |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList(); |
| | | //当前任务中的目标储位信息 |
| | | //当前任务中的原储位 |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat); |
| | | if (locate == null) |
| | | { |
| | | throw new Exception($"WMS系统中没有该{task.StartLocat}储位对应的信息"); |
| | | } |
| | | var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat); |
| | | if (locate2 == null) |
| | | { |
| | | throw new Exception($"WMS系统中没有该{task.EndLocat}储位对应的信息"); |
| | | } |
| | | //平库中储位集合 |
| | | var pingKuLocate = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == "W04" && m.IsDel == "0").ToList(); |
| | | //车间暂存区 |
| | | var pingKuLocate2 = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == "W04" && m.IsDel == "0" && (m.AreaNo == "B06" || m.AreaNo == "B07")).ToList(); |
| | | var pingKuList = pingKuLocate.Select(m => m.LocatNo).ToList(); |
| | | try |
| | | { |
| | | |
| | | //当前任务中的储位信息 |
| | | var locate = await Db.Queryable<SysStorageLocat>().FirstAsync(m => m.LocatNo == locateNo); |
| | | |
| | | //更改任务 |
| | | task.Status = "2";//任务状态 |
| | | //判断起始目标位置都是平库 |
| | | if (pingKuList.Contains(task.StartLocat) && pingKuList.Contains(task.EndLocat)) |
| | | { |
| | | task.Status = "5"; |
| | | } |
| | | |
| | | task.IsSend = 0; |
| | | task.IsCancel = 0; |
| | | task.IsFinish = 0; |
| | | task.FinishDate = DateTime.Now;//完成时间 |
| | | Db.Updateable(task).ExecuteCommand(); |
| | | // 更改当前任务中的储位状态(改为0空储位) |
| | | |
| | | #region 修改储位状态 |
| | | |
| | | if (!pingKuList.Contains(task.StartLocat)) |
| | | { |
| | | //原储位改为空储位 0 |
| | | locate.Status = "0"; |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | } |
| | | |
| | | //目标储位信息 |
| | | var endLocate = await Db.Queryable<SysStorageLocat>().FirstAsync(m => m.LocatNo == task.EndLocat); |
| | | if (endLocate != null) |
| | | |
| | | //目标储位改为有货物 1 |
| | | locate2.Status = "1"; |
| | | Db.Updateable(locate2).ExecuteCommand(); |
| | | //判断目标位置如果不是是车间暂存区 并且是平库储位 更改库存位置 |
| | | if (pingKuLocate2.Count(m=>m.LocatNo == task.EndLocat)<=0 && pingKuList.Contains(task.EndLocat)) |
| | | { |
| | | if (endLocate.Status != "0") |
| | | { |
| | | throw Oops.Bah("目标储位状态非空储位"); |
| | | } |
| | | } |
| | | //更改库存明细 |
| | | foreach (var item in stockDetail) |
| | | { |
| | | item.Status = "0";//待分配 |
| | | item.LockQty = 0;//锁定数量改为0 |
| | | if (endLocate != null)//有目标储位说明移到其他区域储位 |
| | | { |
| | | item.LocatNo = endLocate.LocatNo;//储位更改 |
| | | item.WareHouseNo = endLocate.WareHouseNo;//所属仓库更改 |
| | | item.RoadwayNo = endLocate.RoadwayNo;//所属巷道更改 |
| | | item.AreaNo = endLocate.AreaNo;//所属区域更改 |
| | | item.WareHouseNo = locate2.WareHouseNo; |
| | | item.AreaNo = locate2.AreaNo; |
| | | item.RoadwayNo = locate2.RoadwayNo; |
| | | item.LocatNo = locate2.LocatNo; |
| | | } |
| | | else//没有目标储位说明移到入库口 |
| | | { |
| | | item.LocatNo = "";//储位更改(改为空) |
| | | item.WareHouseNo = "";//所属仓库更改(改为空) |
| | | item.RoadwayNo = "";//所属巷道更改(改为空) |
| | | item.AreaNo = "";//所属区域更改(改为空) |
| | | } |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | |
| | | //更改库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo); |
| | | stock.LockQty -= (decimal)item.Qty; |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | } |
| | | if (endLocate != null) |
| | | { |
| | | //更改目标储位状态 |
| | | endLocate.Status = "1";//有物品 |
| | | await Db.Updateable(endLocate).ExecuteCommandAsync(); |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | if (_userManager.UserId != 0) |
| | | { |
| | | //添加操作日志记录 |
| | |
| | | }); |
| | | } |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |