chengsc
2024-08-19 5e2454c2a75cb70afc0d1933e5c29e02e21231e6
Wms/WMS.BLL/BllCheckServer/StockCheckServer.cs
@@ -11,6 +11,7 @@
using Model.ModelVm.BllCheckVm;
using Newtonsoft.Json;
using SqlSugar;
using SqlSugar.Extensions;
using Utility.Tools;
using WMS.BLL.LogServer;
using WMS.DAL;
@@ -199,7 +200,7 @@
                    LotNo = m.LotNo,
                    LotText = m.LotText,
                    SupplierLot = m.SupplierLot,
                    Qty = (int)m.Qty,
                    Qty = m.Qty,
                    PalletNo = m.PalletNo
                }).ToList();
@@ -543,53 +544,90 @@
                    //循环盘点记录
                    foreach (var l in demo)
                    {
                        var sku = Db.Queryable<SysMaterials>().First(a => a.IsDel == "0" && a.SkuNo == l.SkuNo);
                        if (l.CheckResult == 0)//正常
                        {
                            var de3 = stockBox.First(m => m.BoxNo == l.BoxNo && m.BoxNo3 == l.BoxNo3);
                            if (de3 == null)
                            if (sku.Type != "4")
                            {
                                throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息");
                                var de3 = stockBox.First(m => m.BoxNo == l.BoxNo && m.BoxNo3 == l.BoxNo3);
                                if (de3 == null)
                                {
                                    throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息");
                                }
                                var de2 = stockDetail.First(m => m.Id == de3.StockDetailId);
                                if (de2 == null)
                                {
                                    throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息");
                                }
                                de2.Status = "0";//将库存明细状态改为待分配
                                Db.Updateable(de2).ExecuteCommand();
                            }
                            var de2 = stockDetail.First(m => m.Id == de3.StockDetailId);
                            if (de2 == null)
                            else
                            {
                                throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息");
                                var de2 = stockDetail.First(m => m.PalletNo == l.PalletNo && m.SkuNo == l.SkuNo);
                                if (de2 == null)
                                {
                                    throw new Exception($"未查询到{l.PalletNo}的库存明细的信息");
                                }
                                de2.Status = "0";//将库存明细状态改为待分配
                                Db.Updateable(de2).ExecuteCommand();
                            }
                            de2.Status = "0";//将库存明细状态改为待分配
                            Db.Updateable(de2).ExecuteCommand();
                        }
                        else if (l.CheckResult == 1)//盘亏
                        {
                            var de3 = stockBox.First(m => m.BoxNo == l.BoxNo && m.BoxNo3 == l.BoxNo3);
                            if (de3 == null)
                            if (sku.Type != "4")
                            {
                                throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息");
                            }
                                var de3 = stockBox.First(m => m.BoxNo == l.BoxNo && m.BoxNo3 == l.BoxNo3);
                                if (de3 == null)
                                {
                                    throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息");
                                }
                            var de2 = stockDetail.First(m => m.Id == de3.StockDetailId);
                            if (de2 == null)
                            {
                                throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息");
                            }
                            de2.Status = "0";
                            de2.Qty -= de3.Qty;
                            var de = stock.First(m => m.SkuNo == l.SkuNo && m.LotNo == l.LotNo);
                            if (de == null)
                            {
                                throw new Exception($"未查询到物料{l.SkuNo}批次{l.LotNo}的总库存的信息");
                            }
                            de.Qty -= de3.Qty;
                                var de2 = stockDetail.First(m => m.Id == de3.StockDetailId);
                                if (de2 == null)
                                {
                                    throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息");
                                }
                                de2.Status = "0";
                                de2.Qty -= de3.Qty;
                                var de = stock.First(m => m.SkuNo == l.SkuNo && m.LotNo == l.LotNo);
                                if (de == null)
                                {
                                    throw new Exception($"未查询到物料{l.SkuNo}批次{l.LotNo}的总库存的信息");
                                }
                                de.Qty -= de3.Qty;
                            Db.Updateable(de).ExecuteCommand();
                            Db.Updateable(de2).ExecuteCommand();
                            Db.Deleteable(de3).ExecuteCommand();
                                Db.Updateable(de).ExecuteCommand();
                                Db.Updateable(de2).ExecuteCommand();
                                Db.Deleteable(de3).ExecuteCommand();
                            }
                            else
                            {
                                var de2 = stockDetail.First(m => m.PalletNo == l.PalletNo && m.SkuNo == l.SkuNo);
                                if (de2 == null)
                                {
                                    throw new Exception($"未查询到{l.PalletNo}的库存明细的信息");
                                }
                                de2.Status = "0";
                                de2.Qty = l.RealQty;
                                var de = stock.First(m => m.SkuNo == l.SkuNo && m.LotNo == l.LotNo);
                                if (de == null)
                                {
                                    throw new Exception($"未查询到物料{l.SkuNo}批次{l.LotNo}的总库存的信息");
                                }
                                de.Qty -= Convert.ToDecimal(l.Qty - l.RealQty);
                                Db.Updateable(de).ExecuteCommand();
                                Db.Updateable(de2).ExecuteCommand();
                            }
                        }
                        else if (l.CheckResult == 2)//盘盈
                        {
                            var sku = Db.Queryable<SysMaterials>().First(a => a.IsDel == "0" && a.SkuNo == l.SkuNo);
                            var stockDetailInfo = stockDetail.First(m => m.PalletNo == d.PalletNo && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo);//库存明细
                            if (sku.Type != "4")
                            {
                                var stockBoxInfo = stockBox.First(m => m.StockDetailId == stockDetailInfo.Id);//库存箱支明细
@@ -603,7 +641,7 @@
                                    BoxNo2 = l.BoxNo2,
                                    BoxNo3 = l.BoxNo3,
                                    PalletNo = l.PalletNo,
                                    Qty = (int)l.RealQty,
                                    Qty = (decimal)l.RealQty,
                                    FullQty = stockBoxInfo.FullQty,//满箱数量
                                    Status = "2",
                                    SkuNo = l.SkuNo,
@@ -644,7 +682,7 @@
                            {
                                de.Qty += (int)(l.RealQty - l.Qty);
                            }
                            Db.Updateable(de).ExecuteCommand();
                        }
                    }
@@ -1256,6 +1294,129 @@
            }
        }
        //AGV移库完成
        public void MoveSuccess(string taskNo, int userId)
        {
            try
            {
                //当前任务信息
                var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0");
                if (task == null)
                {
                    throw new Exception($"未查询到任务号为:‘{taskNo}’的任务信息");
                }
                if (task.Status == "2")
                {
                    throw new Exception("当前任务已完成");
                }
                Db.BeginTran();
                //库存中当前托盘的信息
                var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList();
                var locateNo = stockDetail.Select(m => m.LocatNo).Distinct().FirstOrDefault();
                //当前任务中的储位信息
                var locate = Db.Queryable<SysStorageLocat>().First(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 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat);
                if (endLocate != null)
                {
                    if (endLocate.Status != "4")
                    {
                        throw new Exception("目标储位状态非移入中");
                    }
                }
                //更改库存明细
                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 = "";//所属区域更改(改为空)
                    }
                    if (item.Qty == item.LockQty && item.LockQty>0)
                    {
                        item.Status = "2";
                    }
                    else if (item.Qty > item.LockQty && item.LockQty > 0)
                    {
                        item.Status = "1";
                    }
                    else if (item.Qty > item.LockQty && item.LockQty == 0)
                    {
                        item.Status = "0";
                    }
                    Db.Updateable(item).ExecuteCommand();
                    if (endLocate != null && endLocate.AreaNo == "B12") //是否是3楼缓存区 是:删除库存
                    {
                        //库存箱码明细删除
                        var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).ToList();
                        Db.Deleteable(boxInfo).ExecuteCommand();
                        //删除库存托盘信息
                        Db.Deleteable(item).ExecuteCommand();
                        //更改库存总表
                        var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo);
                        stock.LockQty -= (decimal)item.Qty;
                        stock.Qty -= (decimal)item.Qty;
                        Db.Updateable(stock).ExecuteCommand();
                        //更改托盘状态
                        var pallet = Db.Queryable<SysPallets>().First(m=>m.IsDel =="0" && m.PalletNo == task.PalletNo);
                        if (pallet != null)
                        {
                            pallet.Status = "0";
                            Db.Updateable(pallet).ExecuteCommand();
                        }
                    }
                }
                if (endLocate != null)
                {
                    //更改目标储位状态
                    endLocate.Status = "1";//有物品
                    Db.Updateable(endLocate).ExecuteCommand();
                }
                if (userId != 0)
                {
                    //添加操作日志记录
                    var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId);
                }
                Db.CommitTran();
            }
            catch (Exception ex)
            {
                Db.RollbackTran();
                throw new Exception("完成反馈失败:" + ex.Message);
            }
        }
        //重新下发盘点出库任务
        public OutCommandDto AgainSendCheckTask(string taskNo, int userId, string url)
        {
@@ -1379,7 +1540,7 @@
                    checkLog.IsDel = "1";
                    Db.Updateable(checkLog).ExecuteCommand();
                    //修改储位信息
                    var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat);
                    var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.StartLocat);
                    if (locat == null)
                    {
                        throw new Exception("未查询到储位信息,请核实!");
@@ -1403,6 +1564,74 @@
            }
        }
        //取消AGV移库任务
        public void CancelMoveTask(string taskNo, int userId)
        {
            try
            {
                Db.BeginTran();
                var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0");
                if (task == null)
                {
                    throw new Exception("未查询到任务信息");
                }
                //修改任务
                task.IsSuccess = 0;
                task.IsSend = 0;
                task.IsCancel = 0;
                task.IsFinish = 0;
                task.Status = "4";
                task.CancelDate = DateTime.Now;
                Db.Updateable(task).ExecuteCommand();
                //修改起始储位信息
                var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.StartLocat);
                if (locat == null)
                {
                    throw new Exception("未查询到储位信息,请核实!");
                }
                locat.Status = "1"; //有物品
                Db.Updateable(locat).ExecuteCommand();
                //修改目标储位信息
                var locatEnd = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.EndLocat);
                if (locatEnd != null)
                {
                    locatEnd.Status = "0"; //空储位
                    Db.Updateable(locatEnd).ExecuteCommand();
                }
                //修改库存明细
                var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == task.PalletNo);
                if (stockDetail == null)
                {
                    throw new Exception("托盘上物料库存明细信息不存在,请检查!");
                }
                stockDetail.Status = "0";//待分配
                stockDetail.LockQty = 0;//锁定数量
                Db.Updateable(stockDetail).ExecuteCommand();
                //修改库存
                var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == stockDetail.SkuNo && w.LotNo == stockDetail.LotNo);
                if (stock == null)
                {
                    throw new Exception("托盘上物料库存信息不存在,请检查!");
                }
                stock.LockQty -= (decimal)stockDetail.Qty;
                Db.Updateable(stock).ExecuteCommand();
                //添加操作日志记录
                var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "取消", $"点击取消按钮、取消了任务号为:{taskNo}的任务", userId);
                Db.CommitTran();
            }
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        #region 上游系统接口
        //盘点结果返回erp