chengsc
2025-04-19 16865166b741233bad83756ab30899440ecc0dd3
Wms/WMS.BLL/BllCheckServer/StockCheckServer.cs
@@ -1686,90 +1686,99 @@
            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 locate = await Db.Queryable<SysStorageLocat>().FirstAsync(m => m.LocatNo == locateNo);
                //更改任务
                task.Status = "2";//任务状态
                task.IsSend = 0;
                task.IsCancel = 0;
                task.IsFinish = 0;
                task.FinishDate = DateTime.Now;//完成时间
                Db.Updateable(task).ExecuteCommand();
                // 更改当前任务中的储位状态(改为0空储位)
                locate.Status = "0";
                Db.Updateable(locate).ExecuteCommand();
                //目标储位信息
                var endLocate = await Db.Queryable<SysStorageLocat>().FirstAsync(m => m.LocatNo == task.EndLocat);
                if (endLocate != null)
                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)
                {
                    if (endLocate.Status != "0")
                    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
                {
                    task.Status = "2";//任务状态
                    //判断起始目标位置都是平库
                    if (pingKuList.Contains(task.StartLocat) && pingKuList.Contains(task.EndLocat))
                    {
                        throw Oops.Bah("目标储位状态非空储位");
                        task.Status = "5";
                    }
                }
                //更改库存明细
                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;//所属区域更改
                    }
                    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();
                }
                    task.IsSend = 0;
                    task.IsCancel = 0;
                    task.IsFinish = 0;
                    task.FinishDate = DateTime.Now;//完成时间
                    Db.Updateable(task).ExecuteCommand();
                if (_userManager.UserId != 0)
                {
                    //添加操作日志记录
                    //var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId);
                    await _operation.AddLogOperationCr(new OperationInputVm()
                    #region 修改储位状态
                    if (!pingKuList.Contains(task.StartLocat))
                    {
                        ParentName = "库内作业",
                        MenuName = "库内日志",
                        FkNo = taskNo,
                        TypeName = "完成",
                        Msg = $"点击完成按钮、完成任务号为:{taskNo}的任务"
                    });
                        //原储位改为空储位 0
                        locate.Status = "0";
                        Db.Updateable(locate).ExecuteCommand();
                    }
                    //目标储位改为有货物 1
                    locate2.Status = "1";
                    Db.Updateable(locate2).ExecuteCommand();
                    //判断目标位置如果不是是车间暂存区  并且是平库储位 更改库存位置
                    if (pingKuLocate2.Count(m=>m.LocatNo == task.EndLocat)<=0 && pingKuList.Contains(task.EndLocat))
                    {
                        foreach (var item in stockDetail)
                        {
                            item.WareHouseNo = locate2.WareHouseNo;
                            item.AreaNo = locate2.AreaNo;
                            item.RoadwayNo = locate2.RoadwayNo;
                            item.LocatNo = locate2.LocatNo;
                        }
                        Db.Updateable(stockDetail).ExecuteCommand();
                    }
                    #endregion
                    if (_userManager.UserId != 0)
                    {
                        //添加操作日志记录
                        //var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId);
                        await _operation.AddLogOperationCr(new OperationInputVm()
                        {
                            ParentName = "库内作业",
                            MenuName = "库内日志",
                            FkNo = taskNo,
                            TypeName = "完成",
                            Msg = $"点击完成按钮、完成任务号为:{taskNo}的任务"
                        });
                    }
                    Db.CommitTran();
                }
                Db.CommitTran();
                catch (Exception ex)
                {
                    Db.RollbackTran();
                    throw new Exception(ex.Message);
                }
            }
            catch (Exception ex)