zhaowc
2025-03-27 d07f25c163706ac46a83bd2c63db1e3c52715222
Wms/WMS.BLL/BllCheckServer/StockCheckServer.cs
@@ -11,8 +11,10 @@
using Model.ModelVm.BllCheckVm;
using Newtonsoft.Json;
using SqlSugar;
using SqlSugar.Extensions;
using Utility.Tools;
using WMS.BLL.LogServer;
using WMS.BLL.SysServer;
using WMS.DAL;
using WMS.Entity.BllAsnEntity;
using WMS.Entity.BllCheckEntity;
@@ -107,7 +109,7 @@
            try
            {
                var total = 0;
                var list = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel =="0" && m.CRNo == crNo)
                var list = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == crNo)
                    .LeftJoin<SysUserInfor>((a, b) => a.CreateUser == b.Id)
                    .LeftJoin<SysUserInfor>((a, b, c) => a.UpdateUser == c.Id)
                    .Select((a, b, c) => new StockCheckDetailDto()
@@ -143,7 +145,7 @@
        }
        //获取库存明细信息(盘点选择明细数据源)
        public List<StockDetailDto> GetCheckStockDetailList(string houseNo, string roadwayNo, string locateNo, string msg)
        public List<StockDetailDto> GetCheckStockDetailList(string houseNo, string roadwayNo, string locateNo, string msg, int page, int limit, out int count)
        {
            try
            {
@@ -158,7 +160,7 @@
                    .And(m => m.IsDel == "0" && m.SkuNo != "100099" && m.Status == "0")
                    .ToExpression();//注意 这一句 不能少
                var total = 0;
                var list = Db.Queryable<DataStockDetail>().Where(item).GroupBy(m => new { m.SkuNo, m.SkuName, m.Standard, m.LotNo, m.LotText, m.SupplierLot, m.LocatNo, m.PalletNo })
                    .Select(a => new StockDetailDto()
                    {
@@ -171,7 +173,8 @@
                        Qty = SqlFunc.AggregateSum(a.Qty),
                        LocatNo = a.LocatNo,
                        PalletNo = a.PalletNo
                    }).ToList();
                    }).ToOffsetPage(page, limit, ref total);
                count = total;
                return list;
            }
@@ -198,7 +201,7 @@
                    LotNo = m.LotNo,
                    LotText = m.LotText,
                    SupplierLot = m.SupplierLot,
                    Qty = (int)m.Qty,
                    Qty = m.Qty,
                    PalletNo = m.PalletNo
                }).ToList();
@@ -233,7 +236,7 @@
                if (string.IsNullOrWhiteSpace(model.CrNo))
                {
                    var num = Db.Queryable<BllStockCheck>().Count(m => m.IsDel == "0" && (m.Status == 0 || m.Status == 1));
                    if (num>0)
                    if (num > 0)
                    {
                        throw new Exception("已有等待执行的盘点单据请先完成或删除");
                    }
@@ -338,7 +341,7 @@
                                CreateTime = time
                            };
                            list.Add(detail);
                            var sd = Db.Queryable<DataStockDetail>().Where(m => m.IsDel =="0" && m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo && m.Status == "0").ToList();
                            var sd = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo && m.Status == "0").ToList();
                            foreach (var s in sd)
                            {
                                s.Status = "3";
@@ -355,7 +358,7 @@
                    }
                    if (list.Count>0)
                    if (list.Count > 0)
                    {
                        Db.Insertable(list).ExecuteCommand();
                    }
@@ -396,7 +399,7 @@
                    d.IsDel = "1";
                    d.UpdateTime = time;
                    d.UpdateUser = userId;
                    var item = Db.Queryable<DataStockDetail>().Where(m => m.IsDel =="0" && m.PalletNo == d.PalletNo && m.SkuNo ==d.SkuNo && m.LotNo == d.LotNo && m.Status == "3").ToList();
                    var item = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == d.PalletNo && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo && m.Status == "3").ToList();
                    foreach (var i in item)
                    {
                        i.Status = "0";
@@ -542,80 +545,129 @@
                    //循环盘点记录
                    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 stockDetailInfo = stockDetail.First(m => m.PalletNo == d.PalletNo && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo);//库存明细
                            var stockBoxInfo = stockBox.First(m => m.StockDetailId == stockDetailInfo.Id);//库存箱支明细
                            var boxInfo = boxQtyList.First(m => m.boxNo == l.BoxNo);//找到对应箱子是否零箱
                            //添加库存箱支信息
                            var databox = new DataBoxInfo
                            {
                                StockDetailId = stockDetailInfo.Id,
                                BindNo= stockBoxInfo.BindNo,
                                BoxNo = l.BoxNo,
                                BoxNo2 = l.BoxNo2,
                                BoxNo3 = l.BoxNo3,
                                PalletNo = l.PalletNo,
                                Qty = (int)l.RealQty,
                                FullQty = stockBoxInfo.FullQty,//满箱数量
                                Status = "2",
                                SkuNo = l.SkuNo,
                                SkuName = l.SkuName,
                                LotNo = l.LotNo,
                                LotText = l.LotText,
                                Standard = l.Standard,
                                SupplierLot = l.SupplierLot,
                        {
                                InspectMark = stockBoxInfo.InspectMark,
                                InspectStatus = stockBoxInfo.InspectStatus,
                                ProductionTime = stockBoxInfo.ProductionTime,
                                BitBoxMark = boxInfo.bitBoxMark,
                            };
                            Db.Insertable<DataBoxInfo>(databox).ExecuteCommand();
                            //库存明细增加数量
                            stockDetailInfo.Qty += (int)l.RealQty;
                            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);//库存箱支明细
                                var boxInfo = boxQtyList.First(m => m.boxNo == l.BoxNo);//找到对应箱子是否零箱
                                                                                        //添加库存箱支信息
                                var databox = new DataBoxInfo
                                {
                                    StockDetailId = stockDetailInfo.Id,
                                    BindNo = stockBoxInfo.BindNo,
                                    BoxNo = l.BoxNo,
                                    BoxNo2 = l.BoxNo2,
                                    BoxNo3 = l.BoxNo3,
                                    PalletNo = l.PalletNo,
                                    Qty = (decimal)l.RealQty,
                                    FullQty = stockBoxInfo.FullQty,//满箱数量
                                    Status = "2",
                                    SkuNo = l.SkuNo,
                                    SkuName = l.SkuName,
                                    LotNo = l.LotNo,
                                    LotText = l.LotText,
                                    Standard = l.Standard,
                                    SupplierLot = l.SupplierLot,
                                    InspectMark = stockBoxInfo.InspectMark,
                                    InspectStatus = stockBoxInfo.InspectStatus,
                                    ProductionTime = stockBoxInfo.ProductionTime,
                                    BitBoxMark = boxInfo.bitBoxMark,
                                };
                                Db.Insertable<DataBoxInfo>(databox).ExecuteCommand();
                                //库存明细增加数量
                                stockDetailInfo.Qty += (int)l.RealQty;
                            }
                            else
                            {
                                //库存明细增加数量
                                stockDetailInfo.Qty = (int)l.RealQty;
                            }
                            stockDetailInfo.Status = "0";
                            Db.Updateable(stockDetailInfo).ExecuteCommand();
                            //库存增加数量
                            var de = stock.First(m => m.SkuNo == l.SkuNo && m.LotNo == l.LotNo);
@@ -623,7 +675,15 @@
                            {
                                throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存的信息");
                            }
                            de.Qty += (int)l.RealQty;
                            if (sku.Type != "4")
                            {
                                de.Qty += (int)l.RealQty;
                            }
                            else
                            {
                                de.Qty += (int)(l.RealQty - l.Qty);
                            }
                            Db.Updateable(de).ExecuteCommand();
                        }
                    }
@@ -635,7 +695,7 @@
                    if (d.Qty == d.RealQty)
                    {
                        d.CheckResult = 0;
                        if (demo.Count(m=>m.CheckResult == 1 || m.CheckResult == 2)>0)
                        if (demo.Count(m => m.CheckResult == 1 || m.CheckResult == 2) > 0)
                        {
                            d.CheckResult = 3;
                        }
@@ -649,7 +709,7 @@
                        d.CheckResult = 1;
                    }
                    Db.Updateable(d).ExecuteCommand();
                    #region 添加判断盘点完托盘是否是零托 
                    var material = materialList.FirstOrDefault(m => m.SkuNo == d.SkuNo);
                    if (material == null)
@@ -707,13 +767,13 @@
                Db.Updateable(notice).ExecuteCommand();
                //添加操作日志记录
                var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "调整单据", $"调整了单据号为{notice.CRNo}的盘点单信息", userId);
                //提交事务
                Db.CommitTran();
                return true;
            }
            catch (Exception e)
            {
            {
                //回滚事务
                Db.RollbackTran();
                throw new Exception(e.Message);
@@ -867,6 +927,8 @@
                //要出库的明细集合
                var outStockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList();
                var outStockBox = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList();
                //获取物料信息
                var skuNo = Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.Type == "4").Select(a => a.SkuNo).ToList();
                var time = DateTime.Now;
                Db.BeginTran();
                try
@@ -876,33 +938,64 @@
                    {
                        if (item.Status == 0)
                        {
                            var de = outStockDetail.Where(m =>
                                m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo).Select(m => m.Id).ToList();
                            var bo = outStockBox.Where(m => de.Contains(m.StockDetailId)).ToList();
                            var logList = new List<BllStockCheckLog>();
                            foreach (var b in bo)
                            //判断是否为无码物料
                            if (skuNo.Contains(item.SkuNo))
                            {
                                var de = outStockDetail.First(m => m.IsDel == "0" &&
                                m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo);
                                var checkLog = new BllStockCheckLog()
                                {
                                    CRNo = item.CRNo,
                                    PalletNo = item.PalletNo,
                                    BoxNo = b.BoxNo,
                                    BoxNo2 = b.BoxNo2,
                                    BoxNo3 = b.BoxNo3,
                                    Qty = b.Qty,
                                    SkuNo = b.SkuNo,
                                    SkuName = b.SkuName,
                                    Standard = b.Standard,
                                    LotNo = b.LotNo,
                                    LotText = b.LotText,
                                    SupplierLot = b.SupplierLot,
                                    BoxNo = "",
                                    BoxNo2 = "",
                                    BoxNo3 = "",
                                    Qty = (int?)de.Qty,
                                    SkuNo = de.SkuNo,
                                    SkuName = de.SkuName,
                                    Standard = de.Standard,
                                    LotNo = de.LotNo,
                                    LotText = de.LotText,
                                    SupplierLot = de.SupplierLot,
                                    CreateUser = userId,
                                    CreateTime = time
                                };
                                logList.Add(checkLog);
                            }
                            //生成盘点记录
                            }
                            else
                            {
                                var de = outStockDetail.Where(m =>
                                m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo).Select(m => m.Id).ToList();
                                var bo = outStockBox.Where(m => de.Contains(m.StockDetailId)).ToList();
                                foreach (var b in bo)
                                {
                                    var checkLog = new BllStockCheckLog()
                                    {
                                        CRNo = item.CRNo,
                                        PalletNo = item.PalletNo,
                                        BoxNo = b.BoxNo,
                                        BoxNo2 = b.BoxNo2,
                                        BoxNo3 = b.BoxNo3,
                                        Qty = b.Qty,
                                        SkuNo = b.SkuNo,
                                        SkuName = b.SkuName,
                                        Standard = b.Standard,
                                        LotNo = b.LotNo,
                                        LotText = b.LotText,
                                        SupplierLot = b.SupplierLot,
                                        CreateUser = userId,
                                        CreateTime = time
                                    };
                                    logList.Add(checkLog);
                                }
                            }
                            //生成盘点记录
                            Db.Insertable(logList).ExecuteCommand();
                        }
                        // 储位号
@@ -914,10 +1007,10 @@
                        {
                            var de = outStockDetail.First(m => m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo);
                            //判断是否是零箱库,当前明细信息直接更新出库完成 
                            if (de!= null && de.WareHouseNo=="W02")
                            if (de != null && de.WareHouseNo == "W02")
                            {
                                //盘点明细状态改为待盘点 
                                item.Status = 2;
                                item.Status = 2;
                                Db.Updateable(item).ExecuteCommand();
                                //盘点信息修改
                                if (notice.Status == 0)
@@ -984,7 +1077,7 @@
                            #region 添加出库任务
                            var taskNo = new Common().GetMaxNo("TK");
                            //添加出库任务
                            var exTask = new LogTask
                            var exTask = new LogTask
                            {
                                TaskNo = taskNo,
                                Sender = "WMS",
@@ -1103,22 +1196,22 @@
                        try
                        {
                            var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss")
                            response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS");
                            //response = HttpHelper.DoPost(url, jsonData, "下发给WCS出库命令", "WCS"); //正式版本放开
                            var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss")
                            ////解析返回数据 
                            var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
                            if (wcsModel.StatusCode == 0)
                            {
                                //        //更改任务的发送返回时间//
                                new TaskServer().EditTaskIssueOk(list2, time1, time2);
                            str += "下发成功";
                            }
                            if (wcsModel.StatusCode == -1)
                            {
                                new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg);
                                throw new Exception(wcsModel.Msg);
                            }
                            //var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
                            //if (wcsModel.StatusCode == 0)
                            //{
                            //        //更改任务的发送返回时间//
                            //    new TaskServer().EditTaskIssueOk(list2, time1, time2);
                            //str += "下发成功";
                            //}
                            //if (wcsModel.StatusCode == -1)
                            //{
                            //    new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg);
                            //    throw new Exception(wcsModel.Msg);
                            //}
                        }
                        catch (Exception ex)
                        {
@@ -1187,6 +1280,180 @@
                    Db.Updateable(item).ExecuteCommand();
                }
                if (userId != 0)
                {
                    //添加操作日志记录
                    var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId);
                }
                Db.CommitTran();
            }
            catch (Exception ex)
            {
                Db.RollbackTran();
                throw new Exception("完成反馈失败:" + ex.Message);
            }
        }
        //AGV移库完成
        public void MoveSuccess(string taskNo,string mesTokenUrl, string mesUrl, 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("目标储位状态非移入中");
                    }
                }
                var data = new List<RequertBeiliaoInfoModel>();
                //更改库存明细
                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楼缓存区 是:删除库存
                    {
                        if (string.IsNullOrWhiteSpace(item.SONo))
                        {
                            throw new Exception("当前托盘不是拼托出库托盘");
                        }
                        //记录托盘上信息给MES
                        var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == item.Id).ToList();
                        if (boxInfo.Count == 0)
                        {
                            throw new Exception("托盘上物料箱码信息不存在,请检查!");
                        }
                        foreach (var item2 in boxInfo)
                        {
                            data.Add(new RequertBeiliaoInfoModel()
                            {
                                no = item2.BoxNo,
                                materiel_no = item.SkuNo,
                                materiel_name = item.SkuName,
                                qty = item.Qty,
                                batch = item.LotNo,
                                producttime = item2.ProductionTime.ToString().Substring(1, 8),
                                expiry = item2.ExpirationTime.ToString().Substring(1, 8)
                            });
                        }
                        //库存箱码明细删除
                        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 (endLocate != null && endLocate.AreaNo == "B12")
                {
                    //获取令牌
                    var token = new Token().GetMesToken(mesTokenUrl);
                    Dictionary<string, string> mesDic = new Dictionary<string, string>()
                    {
                        {"Authorization",token }
                    };
                    var mesData = new RequertBeiliaoModel()
                    {
                        morder_no = stockDetail.First().SONo,
                        pallet = stockDetail.First().PalletNo,
                        layer_no = endLocate.LocatNo,
                        items = data
                    };
                    var jsonData = JsonConvert.SerializeObject(mesData);
                    //调用接口
                    var response = HttpHelper.DoPost(mesUrl, jsonData, "备料完成运至缓存区反馈至MES", "MES", mesDic);
                    var obj = JsonConvert.DeserializeObject<MesModel>(response);//解析返回数据
                    if (obj.status != "0")
                    {
                        throw new Exception("备料同步MES失败:" + obj.message);
                    }
                }
                if (userId != 0)
                {
                    //添加操作日志记录
@@ -1325,7 +1592,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("未查询到储位信息,请核实!");
@@ -1345,6 +1612,74 @@
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        //取消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);
            }
        }
@@ -1382,5 +1717,5 @@
        }
        #endregion
    }
    }
}