bklLiudl
2024-09-07 8c6e292c508312eca0aef4c203e5857c4fc3094c
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
@@ -81,6 +81,24 @@
            return allotList2;
        }
        //获取托盘中含有的执行中的单据
        public async Task<List<string>> GetRunNoticeList(string type)
        {
            if (type == "1")//平库出库获取单据
            {
                var allotList = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "1" || m.Status =="0")).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync();
                return allotList;
            }
            //获取状态为待拣货或者部分拣货的出库单
            var allotList2 = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.Status == "2" || m.Status == "3")).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync();
            //var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToList();
            //获取出库单据不为待拣货 执行完毕 订单关闭 等待执行的单据
            //var export = Db.Queryable<BllExportNotice>().Where(a => a.IsDel == "0" && a.Status == "1" || a.Status == "2" || a.Status == "3").Select(a => a.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToList();
            return allotList2;
        }
        //获取出库托盘上的物料批次(根据托盘码)
        public async Task<List<DetailIdSkuLotNo>> GetSoSkuLotNoListByPallet(string palletNo, string soNo)
        {
@@ -960,6 +978,7 @@
            catch (Exception e)
            {
                Db.RollbackTran();
                throw e;
            }
        }
@@ -1175,18 +1194,64 @@
        //获取平库托盘信息
        public async Task<List<BoxInfo>> GetPingKuInfoByPallet(string soNo, string palletNo)
        {
            var info = Db.Queryable<BllExportAllot>().Where(m => m.SONo == soNo && m.PalletNo == palletNo && m.IsDel == "0");
            if (await info.CountAsync() == 0)
            {
                throw Oops.Bah("未查询到托盘分配下发的信息");
            }
            var data = await info.GroupBy(m => new { m.SkuNo, m.SkuName, m.LotNo }).Select(m => new BoxInfo()
            {
                SkuNo = m.SkuNo,
                SkuName = m.SkuName,
                LotNo = m.LotNo
            }).ToListAsync();
            var info = Db.Queryable<BllExportAllot>()
                .LeftJoin<DataStockDetail>((a, b) => a.PalletNo == b.PalletNo)
                .Where(a=>a.IsDel == "0" && (a.Status == "0"||a.Status =="1") && a.SONo == soNo)
                .GroupBy((a,b) => new { a.SkuNo, a.SkuName, a.LotNo}).Select((a,b) => new BoxInfo()
                {
                    SkuNo = a.SkuNo,
                    SkuName = a.SkuName,
                    LotNo = a.LotNo
                }).ToListAsync();
            var data = await info;
            /*v var info = Db.Queryable<BllExportAllot>()
                .LeftJoin<DataStockDetail>((a, b) => a.PalletNo == b.PalletNo)
                .Where(a=>a.IsDel == "0" && (a.Status == "0"||a.Status =="1") && a.SONo == soNo)
                .GroupBy((a,b) => new { a.SkuNo, a.SkuName, a.LotNo, a.PalletNo,b.LocatNo }).Select((a,b) => new BoxInfo()
                {
                    PalletNo = a.PalletNo,
                    SkuNo = a.SkuNo,
                    SkuName = a.SkuName,
                    LotNo = a.LotNo,
                    LocatNo =  b.LocatNo
                }).ToListAsync();
            var data = await info;*/
            return data;
        }
        //获取平库单据中托盘位置信息
        public async Task<List<BoxInfo>> GetPingKuLocationInfo(string soNo,string skuno,string lotno)
        {
            var info = Db.Queryable<BllExportAllot>()
                .LeftJoin<DataStockDetail>((a, b) => a.PalletNo == b.PalletNo)
                .LeftJoin<SysWareHouse>((a,b,c)=>b.WareHouseNo == c.WareHouseNo)
                .LeftJoin<SysStorageArea>((a,b,c,d)=>b.AreaNo == d.AreaNo)
                .Where(a => a.IsDel == "0" && (a.Status == "0" || a.Status == "1") && a.SONo == soNo && a.SkuNo == skuno && a.LotNo == lotno)
                .GroupBy((a, b,c,d) => new { a.PalletNo, b.LocatNo,c.WareHouseName,d.AreaName }).Select((a, b,c,d) => new BoxInfo()
                {
                    PalletNo = a.PalletNo,
                    LocatNo = b.LocatNo,
                    WareHouseName = c.WareHouseName,
                    AreaName = d.AreaName
                }).ToListAsync();
            var data = await info;
            /*v var info = Db.Queryable<BllExportAllot>()
                .LeftJoin<DataStockDetail>((a, b) => a.PalletNo == b.PalletNo)
                .Where(a=>a.IsDel == "0" && (a.Status == "0"||a.Status =="1") && a.SONo == soNo)
                .GroupBy((a,b) => new { a.SkuNo, a.SkuName, a.LotNo, a.PalletNo,b.LocatNo }).Select((a,b) => new BoxInfo()
                {
                    PalletNo = a.PalletNo,
                    SkuNo = a.SkuNo,
                    SkuName = a.SkuName,
                    LotNo = a.LotNo,
                    LocatNo =  b.LocatNo
                }).ToListAsync();
            var data = await info;*/
            return data;
        }
@@ -1222,10 +1287,10 @@
                throw Oops.Bah("库存信息中不存在该托盘信息,请检查!");
            }
            if (result.WareHouseNo != "W02")//W02:零箱库
            {
                throw Oops.Bah("该托盘未在零箱库,请检查!");
            }
            //if (result.WareHouseNo != "W02")//W02:零箱库
            //{
            //    throw Oops.Bah("该托盘未在零箱库,请检查!");
            //}
            #endregion
@@ -1236,7 +1301,7 @@
            {
                throw Oops.Bah("未获取到对应储位信息,请检查!");
            }
            if (locat.Status != "1")
            if (locat.Status != "3")
            {
                throw Oops.Bah("当前储位不是有物品,请检查!");
            }
@@ -1328,6 +1393,7 @@
            catch (Exception e)
            {
                Db.RollbackTran();
                throw e;
            }
        }
@@ -1385,7 +1451,8 @@
        }
        //取样出库拣货(标签)
        public async Task SampleSoSetPick(string soType, string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, string pickQty1, string asnNo, int userId)
        public async Task SampleSoSetPick(string soType, string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3,
            string pickQty1, string asnNo, int userId)
        {
            Db.BeginTran();
            try
@@ -2025,60 +2092,61 @@
            catch (Exception e)
            {
                Db.RollbackTran();
                throw e;
            }
        }
        //取样出库拣货(无标签)
        public void SampleSoSetQtyPick(string soType, string soNo, string soDetailId, string palletNo, string PickQty, string asnNo, int userId)
        public async Task SampleSoSetQtyPick(string soType, string soNo, string soDetailId, string palletNo, string PickQty, string asnNo, int userId)
        {
            Db.BeginTran();
            try
            {
                if (string.IsNullOrWhiteSpace(soType))
                {
                    throw new Exception("取样标识不能为空");
                    throw Oops.Bah("取样标识不能为空");
                }
                if (soType == "1")
                {
                    if (string.IsNullOrWhiteSpace(asnNo))
                    {
                        throw new Exception("入库单据不能为空");
                        throw Oops.Bah("入库单据不能为空");
                    }
                    if (string.IsNullOrWhiteSpace(palletNo))
                    {
                        throw new Exception("托盘码不能为空");
                        throw Oops.Bah("托盘码不能为空");
                    }
                    //先判断是否是库外取样托盘
                    var allot = Db.Queryable<BllExportAllot>().First(m =>
                    var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m =>
                        m.IsDel == "0" && m.PalletNo == palletNo && m.Status != "5" && m.Status != "6");
                    if (allot != null)
                    {
                        throw new Exception("当前托盘不属于库前取样");
                        throw Oops.Bah("当前托盘不属于库前取样");
                    }
                    //库存明细
                    var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.ASNNo == asnNo && m.PalletNo == palletNo);
                    var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == asnNo && m.PalletNo == palletNo);
                    if (stockDetail == null)
                    {
                        throw new Exception("未查询到该托盘的库存明细信息!");
                        throw Oops.Bah("未查询到该托盘的库存明细信息!");
                    }
                    var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == stockDetail.SkuNo);
                    var sku = await Db.Queryable<SysMaterials>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == stockDetail.SkuNo);
                    if (sku == null)
                    {
                        throw new Exception("未查询到当前托盘上的物料信息");
                        throw Oops.Bah("未查询到当前托盘上的物料信息");
                    }
                    //库存总表
                    var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo);
                    var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo);
                    if (stock == null)
                    {
                        throw new Exception("未查询到该托盘分配的库存信息!");
                        throw Oops.Bah("未查询到该托盘分配的库存信息!");
                    }
                    //出库单
                    var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.AsnSampleNo == asnNo);
                    var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.IsDel == "0" && m.AsnSampleNo == asnNo);
                    //创建出库单
                    if (notice == null || notice.Status == "6")
                    {
@@ -2089,7 +2157,7 @@
                            //获取自增单据号
                            billNo = new Common().GetMaxNo("SO");
                            var no = billNo;
                            bl = Db.Queryable<BllExportNotice>().Any(m => m.SONo == no);
                            bl = await Db.Queryable<BllExportNotice>().AnyAsync(m => m.SONo == no);
                        } while (bl);
                        var addNotice = new BllExportNotice()
@@ -2106,12 +2174,12 @@
                            CreateUser = userId,
                        };
                        var n = Db.Insertable(addNotice).ExecuteReturnEntity();
                        var n = await Db.Insertable(addNotice).ExecuteReturnEntityAsync();
                        notice = n;
                    }
                    //创建出库单明细
                    var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.SONo == notice.SONo && m.SkuNo == stockDetail.SkuNo && m.LotNo.Contains(stockDetail.LotNo));
                    var noticeDetail = await Db.Queryable<BllExportNoticeDetail>().FirstAsync(m => m.IsDel == "0" && m.SONo == notice.SONo && m.SkuNo == stockDetail.SkuNo && m.LotNo.Contains(stockDetail.LotNo));
                    if (noticeDetail == null)
                    {
                        var addNoticeDetail = new BllExportNoticeDetail()
@@ -2139,11 +2207,11 @@
                            CreateUser = userId,
                        };
                        var m = Db.Insertable(addNoticeDetail).ExecuteReturnEntity();
                        var m = await Db.Insertable(addNoticeDetail).ExecuteReturnEntityAsync();
                        noticeDetail = m;
                    }
                    //出库分配信息
                    var allot2 = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.Status == "5" && m.SONo == notice.SONo && m.PalletNo == palletNo);
                    var allot2 = await Db.Queryable<BllExportAllot>().FirstAsync(m => m.IsDel == "0" && m.Status == "5" && m.SONo == notice.SONo && m.PalletNo == palletNo);
                    if (allot2 == null)
                    {
                        //添加分配表信息
@@ -2175,12 +2243,12 @@
                            UpdateTime = DateTime.Now
                        };
                        var fp = Db.Insertable(addAllot).ExecuteReturnEntity();
                        var fp = await Db.Insertable(addAllot).ExecuteReturnEntityAsync();
                        allot2 = fp;
                    }
                    //获取当前托盘拣货明细
                    var complete = Db.Queryable<BllCompleteDetail>().First(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.ExportAllotId == allot2.Id && a.StockId == stockDetail.Id);
                    var complete = await Db.Queryable<BllCompleteDetail>().FirstAsync(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.ExportAllotId == allot2.Id && a.StockId == stockDetail.Id);
                    //判读是否存在拣货明细
                    int isComplete = 0;
@@ -2219,7 +2287,7 @@
                        comList.Add(completeDetail);
                        //添加拣货明细
                        Db.Insertable(comList).ExecuteCommand();
                        await Db.Insertable(comList).ExecuteCommandAsync();
                    }
                    else if (isComplete == 1)
                    {
@@ -2227,7 +2295,7 @@
                        complete.UpdateUser = userId;
                        complete.UpdateTime = Db.GetDate();
                        Db.Updateable(complete).ExecuteCommand();
                        await Db.Updateable(complete).ExecuteCommandAsync();
                    }
@@ -2235,7 +2303,7 @@
                    //修改出库分配信息
                    allot2.Qty += int.Parse(PickQty);
                    allot2.CompleteQty += int.Parse(PickQty);
                    Db.Updateable(allot2).ExecuteCommand();
                    await Db.Updateable(allot2).ExecuteCommandAsync();
                    int isDel = 0;
@@ -2257,36 +2325,36 @@
                    }
                    if (stockDetail.Qty <= 0)
                    {
                        Db.Deleteable(stockDetail).ExecuteCommand();
                        await Db.Deleteable(stockDetail).ExecuteCommandAsync();
                    }
                    else
                    {
                        isDel = 1;
                        Db.Updateable(stockDetail).ExecuteCommand();
                        await Db.Updateable(stockDetail).ExecuteCommandAsync();
                    }
                    //删除或修改库存
                    stock.Qty -= int.Parse(PickQty);
                    if (stock.Qty <= 0)
                    {
                        Db.Deleteable(stock).ExecuteCommand();
                        await Db.Deleteable(stock).ExecuteCommandAsync();
                    }
                    else
                    {
                        Db.Updateable(stock).ExecuteCommand();
                        await Db.Updateable(stock).ExecuteCommandAsync();
                    }
                    //改变托盘状态为:未使用
                    var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0");
                    var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0");
                    if (pallet == null)
                    {
                        throw new Exception("未在托盘表中查询到托盘信息");
                        throw Oops.Bah("未在托盘表中查询到托盘信息");
                    }
                    //判断托盘上物料是否拣货完毕
                    if (isDel == 0)
                    {
                        pallet.Status = "0";
                        Db.Updateable(pallet).ExecuteCommand();
                        await Db.Updateable(pallet).ExecuteCommandAsync();
                    }
                    //修改出库单明细拣货数量
@@ -2295,7 +2363,7 @@
                    noticeDetail.FactQty += int.Parse(PickQty);
                    noticeDetail.CompleteQty += int.Parse(PickQty);
                    noticeDetail.Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * noticeDetail.Qty;
                    Db.Updateable(noticeDetail).ExecuteCommand();
                    await Db.Updateable(noticeDetail).ExecuteCommandAsync();
                }
                else if (soType == "0")
@@ -2304,7 +2372,7 @@
                    if (string.IsNullOrWhiteSpace(soNo))
                    {
                        throw new Exception("出库单据不能为空");
                        throw Oops.Bah("出库单据不能为空");
                    }
                    //if (string.IsNullOrWhiteSpace(soDetailId))
                    //{
@@ -2312,56 +2380,56 @@
                    //}
                    if (string.IsNullOrWhiteSpace(palletNo))
                    {
                        throw new Exception("托盘码不能为空");
                        throw Oops.Bah("托盘码不能为空");
                    }
                    //出库单
                    var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo);
                    if (notice == null)
                    {
                        throw new Exception("未查询到该出库单的信息");
                        throw Oops.Bah("未查询到该出库单的信息");
                    }
                    if (notice.Status != "3")
                    {
                        throw new Exception("出库单的状态不是正在执行,不能拣货");
                        throw Oops.Bah("出库单的状态不是正在执行,不能拣货");
                    }
                    //出库单明细
                    var noticeDetail = Db.Queryable<BllExportNoticeDetail>()
                        .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId));
                    if (noticeDetail == null)
                    {
                        throw new Exception("未查询到该出库单明细的信息");
                        throw Oops.Bah("未查询到该出库单明细的信息");
                    }
                    //出库分配信息
                    var allot = Db.Queryable<BllExportAllot>().First(m =>
                    var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m =>
                        m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo &&
                        m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo);
                    if (allot == null)
                    {
                        throw new Exception("未查询到该托盘的分配信息");
                        throw Oops.Bah("未查询到该托盘的分配信息");
                    }
                    //剩余拣货数量(待拣减去已拣)
                    var needQty = allot.Qty - allot.CompleteQty;
                    if (int.Parse(PickQty) > needQty)
                    {
                        throw new Exception("拣货数量不能大于托内剩余待拣数量");
                        throw Oops.Bah("拣货数量不能大于托内剩余待拣数量");
                    }
                    //库存明细
                    var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId);
                    var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.Id == allot.StockId);
                    if (stockDetail == null)
                    {
                        throw new Exception("未查询到该托盘分配的库存明细信息!");
                        throw Oops.Bah("未查询到该托盘分配的库存明细信息!");
                    }
                    //库存总表
                    var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo);
                    var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo);
                    if (stock == null)
                    {
                        throw new Exception("未查询到该托盘分配的库存信息!");
                        throw Oops.Bah("未查询到该托盘分配的库存信息!");
                    }
                    #endregion
                    //获取当前托盘拣货明细
                    var complete = Db.Queryable<BllCompleteDetail>().First(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.ExportAllotId == allot.Id && a.StockId == stockDetail.Id);
                    var complete = await Db.Queryable<BllCompleteDetail>().FirstAsync(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.ExportAllotId == allot.Id && a.StockId == stockDetail.Id);
                    //判读是否存在拣货明细
                    int isComplete = 0;
@@ -2400,7 +2468,7 @@
                        comList.Add(completeDetail);
                        //添加拣货明细
                        Db.Insertable(comList).ExecuteCommand();
                        await Db.Insertable(comList).ExecuteCommandAsync();
                    }
                    else if (isComplete == 1)
                    {
@@ -2408,7 +2476,7 @@
                        complete.UpdateUser = userId;
                        complete.UpdateTime = Db.GetDate();
                        Db.Updateable(complete).ExecuteCommand();
                        await Db.Updateable(complete).ExecuteCommandAsync();
                    }
@@ -2418,7 +2486,7 @@
                    allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3";
                    allot.UpdateTime = DateTime.Now;
                    Db.Updateable(allot).ExecuteCommand();
                    await Db.Updateable(allot).ExecuteCommandAsync();
                    int isDel = 0;
@@ -2441,12 +2509,12 @@
                    }
                    if (stockDetail.Qty <= 0)
                    {
                        Db.Deleteable(stockDetail).ExecuteCommand();
                        await Db.Deleteable(stockDetail).ExecuteCommandAsync();
                    }
                    else
                    {
                        isDel = 1;
                        Db.Updateable(stockDetail).ExecuteCommand();
                        await Db.Updateable(stockDetail).ExecuteCommandAsync();
                    }
                    //删除或修改库存
                    stock.Qty -= int.Parse(PickQty);
@@ -2454,39 +2522,39 @@
                    stock.IsSampling = "1"; //是否取样
                    if (stock.Qty <= 0)
                    {
                        Db.Deleteable(stock).ExecuteCommand();
                        await Db.Deleteable(stock).ExecuteCommandAsync();
                    }
                    else
                    {
                        Db.Updateable(stock).ExecuteCommand();
                        await Db.Updateable(stock).ExecuteCommandAsync();
                    }
                    //改变托盘状态为:未使用
                    var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0");
                    var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0");
                    if (pallet == null)
                    {
                        throw new Exception("未在托盘表中查询到托盘信息");
                        throw Oops.Bah("未在托盘表中查询到托盘信息");
                    }
                    //判断托盘上物料是否拣货完毕
                    if (isDel == 0)
                    {
                        pallet.Status = "0";
                        Db.Updateable(pallet).ExecuteCommand();
                        await Db.Updateable(pallet).ExecuteCommandAsync();
                    }
                    //修改出库单明细拣货数量
                    noticeDetail.CompleteQty += int.Parse(PickQty);
                    Db.Updateable(noticeDetail).ExecuteCommand();
                    await Db.Updateable(noticeDetail).ExecuteCommandAsync();
                    var num = Db.Queryable<BllExportNoticeDetail>()
                        .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty);
                    var num = await Db.Queryable<BllExportNoticeDetail>()
                        .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty);
                    if (num <= 0)
                    {
                        notice.Status = "4"; //更改为执行完成
                    }
                    //修改出库单信息
                    Db.Updateable(notice).ExecuteCommand();
                    await Db.Updateable(notice).ExecuteCommandAsync();
                }
@@ -2497,7 +2565,7 @@
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
                throw e;
            }
        }
@@ -2513,7 +2581,7 @@
        /// <param name="pickQty1"></param>
        /// <param name="palletNoNew"></param>
        /// <param name="userId"></param>
        public void SoSetPinPick(string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, string pickQty1, string palletNoNew, int userId)
        public async Task SoSetPinPick(string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, string pickQty1, string palletNoNew, int userId)
        {
            Db.BeginTran();
            try
@@ -2523,71 +2591,71 @@
                if (string.IsNullOrWhiteSpace(soNo))
                {
                    throw new Exception("出库单据不能为空");
                    throw Oops.Bah("出库单据不能为空");
                }
                if (string.IsNullOrWhiteSpace(soDetailId))
                {
                    throw new Exception("出库物料-批次不能为空");
                    throw Oops.Bah("出库物料-批次不能为空");
                }
                if (string.IsNullOrWhiteSpace(palletNo))
                {
                    throw new Exception("托盘码不能为空");
                    throw Oops.Bah("托盘码不能为空");
                }
                if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)
                {
                    throw new Exception("追溯条码和拣货数量不能同时输入");
                    throw Oops.Bah("追溯条码和拣货数量不能同时输入");
                }
                if (string.IsNullOrWhiteSpace(palletNoNew))
                {
                    throw new Exception("新托盘码不能为空");
                    throw Oops.Bah("新托盘码不能为空");
                }
                if (palletNo == palletNoNew)//原托盘与新托盘一致
                {
                    if (!string.IsNullOrEmpty(boxNo))
                    {
                        throw new Exception("原托盘与新托盘一致,请选择整托出库");
                        throw Oops.Bah("原托盘与新托盘一致,请选择整托出库");
                    }
                }
                //出库单
                var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo);
                var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.IsDel == "0" && m.SONo == soNo);
                if (notice == null)
                {
                    throw new Exception("未查询到该出库单的信息");
                    throw Oops.Bah("未查询到该出库单的信息");
                }
                if (notice.Status != "3")
                {
                    throw new Exception("出库单的状态不是正在执行,不能拣货");
                    throw Oops.Bah("出库单的状态不是正在执行,不能拣货");
                }
                //出库单明细
                var noticeDetail = Db.Queryable<BllExportNoticeDetail>()
                    .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId));
                var noticeDetail = await Db.Queryable<BllExportNoticeDetail>()
                    .FirstAsync(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId));
                if (noticeDetail == null)
                {
                    throw new Exception("未查询到该出库单明细的信息");
                    throw Oops.Bah("未查询到该出库单明细的信息");
                }
                //出库分配信息
                var allot = Db.Queryable<BllExportAllot>().First(m =>
                var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m =>
                    m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo &&
                    m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo);
                if (allot == null)
                {
                    throw new Exception("未查询到该托盘的分配信息");
                    throw Oops.Bah("未查询到该托盘的分配信息");
                }
                //剩余拣货数量(待拣减去已拣)
                var needQty = allot.Qty - allot.CompleteQty;
                //库存明细
                var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId);
                var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.Id == allot.StockId);
                if (stockDetail == null)
                {
                    throw new Exception("未查询到该托盘分配的库存明细信息!");
                    throw Oops.Bah("未查询到该托盘分配的库存明细信息!");
                }
                //库存总表
                var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo);
                var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo);
                if (stock == null)
                {
                    throw new Exception("未查询到该托盘分配的库存信息!");
                    throw Oops.Bah("未查询到该托盘分配的库存信息!");
                }
                #endregion
@@ -2595,14 +2663,14 @@
                #region 拼托信息
                var sdId = 0;
                bool isNew = false;
                var pinStockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew);
                var pinStockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew);
                if (pinStockDetail != null)
                {
                    if (palletNo != palletNoNew)//非整托拣货
                    {
                        if (pinStockDetail.SONo != notice.SONo)
                        {
                            throw new Exception("拼托托盘上只能放同一个出库单下的物料!");
                            throw Oops.Bah("拼托托盘上只能放同一个出库单下的物料!");
                        }
                        if (pinStockDetail.SkuName != stockDetail.SkuName || pinStockDetail.LotNo != stockDetail.LotNo)
                        {
@@ -2615,14 +2683,14 @@
                {
                    isNew = true;
                    var newPalletInfo = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0");
                    var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0");
                    if (newPalletInfo == null)
                    {
                        throw new Exception("新托盘信息不存在或已被使用!");
                        throw Oops.Bah("新托盘信息不存在或已被使用!");
                    }
                    //修改新托盘状态
                    newPalletInfo.Status = "1";
                    Db.Updateable(newPalletInfo).ExecuteCommand();
                    await Db.Updateable(newPalletInfo).ExecuteCommandAsync();
                }
                var sd = new DataStockDetail();
                if (isNew)
@@ -2668,7 +2736,7 @@
                    sd.CreateTime = nowDate;
                    //新增拼托库存明细信息
                    sdId = Db.Insertable(sd).ExecuteReturnIdentity();
                    sdId = await Db.Insertable(sd).ExecuteReturnIdentityAsync();
                }
                #endregion
@@ -2677,28 +2745,28 @@
                {
                    List<DataBoxInfo> boxInfos;
                    var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo);//找到托盘上所有箱码
                    boxInfos = boxInfo.ToList();
                    boxInfos = await boxInfo.ToListAsync();
                    if (boxInfo.Count() <= 0)
                    {
                        throw new Exception("该托盘上没有可拣货的箱子");
                        throw Oops.Bah("该托盘上没有可拣货的箱子");
                    }
                    var boxQty = boxInfo.GroupBy(m => m.PalletNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToList();
                    var boxQty = await boxInfo.GroupBy(m => m.PalletNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync();
                    if (boxQty[0] > needQty)
                    {
                        throw new Exception("拣货数量不能大于箱内剩余待拣数量");
                        throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量");
                    }
                    var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToList();
                    var comDetailList = await Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToListAsync();
                    var comList = new List<BllCompleteDetail>();
                    foreach (var item in boxInfos)
                    {
                        if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3))
                        {
                            throw new Exception($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货");
                            throw Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货");
                        }
                        if (item.SkuNo != allot.SkuNo || item.LotNo != allot.LotNo)
                        {
                            throw new Exception("当前托盘上有其他不同物料批次,拣货失败");
                            throw Oops.Bah("当前托盘上有其他不同物料批次,拣货失败");
                        }
                        //添加拣货明细
                        var completeDetail = new BllCompleteDetail()
@@ -2732,41 +2800,41 @@
                        }
                        item.Status = "5";//箱支状态,0:未组托  1:已组托 2:已入库 3:已出库 4:已分配 5:已拣货
                        //修改库存箱码明细
                        Db.Updateable(item).ExecuteCommand();
                        await Db.Updateable(item).ExecuteCommandAsync();
                        pickQty += item.Qty;
                    }
                    //添加拣货明细
                    Db.Insertable(comList).ExecuteCommand();
                    await Db.Insertable(comList).ExecuteCommandAsync();
                    //修改出库分配信息
                    allot.CompleteQty += pickQty;
                    allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3";
                    allot.UpdateTime = DateTime.Now;
                    Db.Updateable(allot).ExecuteCommand();
                    await Db.Updateable(allot).ExecuteCommandAsync();
                    if (palletNo != palletNoNew)
                    {
                        //删除原托盘库存明细
                        Db.Deleteable(stockDetail).ExecuteCommand();
                        await Db.Deleteable(stockDetail).ExecuteCommandAsync();
                        //改变原托盘状态为:未使用
                        var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0");
                        var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0");
                        if (pallet == null)
                        {
                            throw new Exception("未在托盘表中查询到托盘信息");
                            throw Oops.Bah("未在托盘表中查询到托盘信息");
                        }
                        pallet.Status = "0";
                        Db.Updateable(pallet).ExecuteCommand();
                        await Db.Updateable(pallet).ExecuteCommandAsync();
                    }
                    else
                    {
                        stockDetail.SONo = soNo;
                        Db.Updateable(stockDetail).ExecuteCommand();
                        await Db.Updateable(stockDetail).ExecuteCommandAsync();
                    }
                    //修改出库单明细拣货数量
                    noticeDetail.CompleteQty += pickQty;
                    Db.Updateable(noticeDetail).ExecuteCommand();
                    await Db.Updateable(noticeDetail).ExecuteCommandAsync();
                    var num = Db.Queryable<BllExportNoticeDetail>()
                        .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty);
@@ -2775,48 +2843,48 @@
                        notice.Status = "4"; //更改为执行完成
                    }
                    //修改出库单信息
                    Db.Updateable(notice).ExecuteCommand();
                    await Db.Updateable(notice).ExecuteCommandAsync();
                }
                else
                {
                    var biaoShi = "0";//0:整箱拣货、1:散支拣货、2:数量拣货
                    List<DataBoxInfo> boxInfos;
                    var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo);
                    if (boxInfo.Count() == 0)
                    if (await boxInfo.CountAsync() == 0)
                    {
                        throw new Exception("未查询到该箱码及追溯码的信息");
                        throw Oops.Bah("未查询到该箱码及追溯码的信息");
                    }
                    boxInfos = boxInfo.ToList();
                    boxInfos = await boxInfo.ToListAsync();
                    var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToList();
                    var comDetailList = await Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToListAsync();
                    if (!string.IsNullOrWhiteSpace(boxNo3)) //散支拣货
                    {
                        boxInfos = boxInfos.Where(m => m.BoxNo3 == boxNo3).ToList();
                        if (boxInfos.Count() == 0)
                        {
                            throw new Exception("未查询到该箱码及追溯码的信息");
                            throw Oops.Bah("未查询到该箱码及追溯码的信息");
                        }
                        if (boxInfos.Count() > 1)
                        {
                            throw new Exception("该追溯支码的信息大于1条,信息错误,请核实!");
                            throw Oops.Bah("该追溯支码的信息大于1条,信息错误,请核实!");
                        }
                        if (boxInfos.Any(m => m.PalletNo != palletNo))
                        {
                            throw new Exception("该托盘与箱码没有绑定关系");
                            throw Oops.Bah("该托盘与箱码没有绑定关系");
                        }
                        var boxQty = boxInfos.First().Qty;
                        if (boxQty > needQty)
                        {
                            throw new Exception("拣货数量不能大于剩余待拣数量");
                            throw Oops.Bah("拣货数量不能大于剩余待拣数量");
                        }
                        foreach (var item in boxInfos)
                        {
                            if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo3 == item.BoxNo3))
                            {
                                throw new Exception($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货");
                                throw Oops.Bah($"当前{item.BoxNo}中{item.BoxNo3}已拣货完成,请勿重复拣货");
                            }
                        }
@@ -2826,16 +2894,16 @@
                    {
                        if (boxInfo.Count() > 1)
                        {
                            throw new Exception("该箱码内存在支码不能进行数量拣货");
                            throw Oops.Bah("该箱码内存在支码不能进行数量拣货");
                        }
                        decimal boxQty = boxInfo.First().Qty;
                        if (Convert.ToInt32(pickQty1) > boxQty)
                        {
                            throw new Exception("拣货数量不能大于箱内数量");
                            throw Oops.Bah("拣货数量不能大于箱内数量");
                        }
                        if (Convert.ToInt32(pickQty1) > needQty)
                        {
                            throw new Exception("拣货数量不能大于剩余待拣数量");
                            throw Oops.Bah("拣货数量不能大于剩余待拣数量");
                        }
                        biaoShi = "2";
@@ -2844,23 +2912,23 @@
                    {
                        if (boxInfo.Count() == 0)
                        {
                            throw new Exception("未查询到该箱码的信息");
                            throw Oops.Bah("未查询到该箱码的信息");
                        }
                        if (boxInfo.Any(m => m.PalletNo != palletNo))
                        {
                            throw new Exception("该托盘与箱码没有绑定关系");
                            throw Oops.Bah("该托盘与箱码没有绑定关系");
                        }
                        var boxQty = boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToList();
                        var boxQty = await boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync();
                        if (boxQty[0] > needQty)
                        {
                            throw new Exception("拣货数量不能大于箱内剩余待拣数量");
                            throw Oops.Bah("拣货数量不能大于箱内剩余待拣数量");
                        }
                        foreach (var item in boxInfos)
                        {
                            if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo == item.BoxNo))
                            {
                                throw new Exception($"当前{item.BoxNo}已拣货完成,请勿重复拣货");
                                throw Oops.Bah($"当前{item.BoxNo}已拣货完成,请勿重复拣货");
                            }
                        }
                    }
@@ -2899,7 +2967,7 @@
                            item.BindNo = null;//托盘绑定号
                            item.PalletNo = palletNoNew;
                            item.Status = "5";//箱支状态,0:未组托  1:已组托 2:已入库 3:已出库 4:已分配 5:已拣货
                            Db.Updateable(item).ExecuteCommand();
                            await Db.Updateable(item).ExecuteCommandAsync();
                            pickQty += item.Qty;
                        }
@@ -2912,7 +2980,7 @@
                            item.BoxNo = item.BoxNo3;//将支码赋给箱码
                            item.BitBoxMark = "1";//零箱标记
                            item.Status = "5";//箱支状态,0:未组托  1:已组托 2:已入库 3:已出库 4:已分配 5:已拣货
                            Db.Updateable(item).ExecuteCommand();
                            await Db.Updateable(item).ExecuteCommandAsync();
                            pickQty += item.Qty;
                        }
@@ -2925,13 +2993,13 @@
                                item.BindNo = null;//托盘绑定号
                                item.PalletNo = palletNoNew;
                                item.Status = "5";//箱支状态,0:未组托  1:已组托 2:已入库 3:已出库 4:已分配 5:已拣货
                                Db.Updateable(item).ExecuteCommand();
                                await Db.Updateable(item).ExecuteCommandAsync();
                            }
                            else
                            {
                                item.Qty -= decimal.Parse(pickQty1);
                                item.BitBoxMark = "1";//零箱标识
                                Db.Updateable(item).ExecuteCommand();
                                await Db.Updateable(item).ExecuteCommandAsync();
                            }
                            pickQty += int.Parse(pickQty1);
@@ -2944,11 +3012,11 @@
                        foreach (var item in boxSurplusList)
                        {
                            item.BitBoxMark = "1";
                            Db.Updateable(item).ExecuteCommand();
                            await Db.Updateable(item).ExecuteCommandAsync();
                        }
                    }
                    Db.Insertable(comList).ExecuteCommand();
                    await Db.Insertable(comList).ExecuteCommandAsync();
                    //修改出库分配信息
                    allot.CompleteQty += pickQty;
                    allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3";
@@ -2957,7 +3025,7 @@
                    {
                        //判断该托盘是否还存在物料 存在改为待回库 待回库完成后改为已完成
                    }
                    Db.Updateable(allot).ExecuteCommand();
                    await Db.Updateable(allot).ExecuteCommandAsync();
                    //删除或修改库存明细
                    stockDetail.BitPalletMark = "1";//修改为零托标识
@@ -2978,36 +3046,36 @@
                    if (stockDetail.Qty <= 0)
                    {
                        Db.Deleteable(stockDetail).ExecuteCommand();
                        await Db.Deleteable(stockDetail).ExecuteCommandAsync();
                    }
                    else
                    {
                        Db.Updateable(stockDetail).ExecuteCommand();
                        await Db.Updateable(stockDetail).ExecuteCommandAsync();
                    }
                    var num2 = Db.Queryable<DataStockDetail>().Count(m => m.IsDel == "0" && m.PalletNo == palletNo);
                    var num2 = await Db.Queryable<DataStockDetail>().CountAsync(m => m.IsDel == "0" && m.PalletNo == palletNo);
                    if (num2 <= 0)
                    {
                        //改变托盘状态
                        var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0");
                        var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0");
                        if (pallet == null)
                        {
                            throw new Exception("未在托盘表中查询到托盘信息");
                            throw Oops.Bah("未在托盘表中查询到托盘信息");
                        }
                        pallet.Status = "0";
                        Db.Updateable(pallet).ExecuteCommand();
                        await Db.Updateable(pallet).ExecuteCommandAsync();
                    }
                    //修改出库单明细拣货数量
                    noticeDetail.CompleteQty += pickQty;
                    Db.Updateable(noticeDetail).ExecuteCommand();
                    await Db.Updateable(noticeDetail).ExecuteCommandAsync();
                    var num = Db.Queryable<BllExportNoticeDetail>()
                        .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty);
                    var num = await Db.Queryable<BllExportNoticeDetail>()
                        .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty);
                    if (num <= 0)
                    {
                        notice.Status = "4"; //更改为执行完成
                    }
                    //修改出库单信息
                    Db.Updateable(notice).ExecuteCommand();
                    await Db.Updateable(notice).ExecuteCommandAsync();
                }
                if (isNew)
@@ -3022,7 +3090,7 @@
                        //修改拼托托盘库存明细
                        pinStockDetail.Qty += pickQty;
                        pinStockDetail.LockQty += pickQty;
                        Db.Updateable(pinStockDetail).ExecuteCommand();
                        await Db.Updateable(pinStockDetail).ExecuteCommandAsync();
                    }
                }
@@ -3033,7 +3101,7 @@
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
                throw e;
            }
        }
        /// <summary>
@@ -3045,7 +3113,7 @@
        /// <param name="PickQty"></param>
        /// <param name="palletNoNew"></param>
        /// <param name="userId"></param>
        public void SoSetQtyPinPick(string soNo, string soDetailId, string palletNo, string PickQty, string palletNoNew, int userId)
        public async Task SoSetQtyPinPick(string soNo, string soDetailId, string palletNo, string PickQty, string palletNoNew, int userId)
        {
            Db.BeginTran();
            try
@@ -3055,7 +3123,7 @@
                if (string.IsNullOrWhiteSpace(soNo))
                {
                    throw new Exception("出库单据不能为空");
                    throw Oops.Bah("出库单据不能为空");
                }
                //if (string.IsNullOrWhiteSpace(soDetailId))
                //{
@@ -3063,76 +3131,76 @@
                //}
                if (string.IsNullOrWhiteSpace(palletNo))
                {
                    throw new Exception("托盘码不能为空");
                    throw Oops.Bah("托盘码不能为空");
                }
                if (string.IsNullOrWhiteSpace(palletNoNew))
                {
                    throw new Exception("新托盘码不能为空");
                    throw Oops.Bah("新托盘码不能为空");
                }
                //出库单
                var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo);
                var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.IsDel == "0" && m.SONo == soNo);
                if (notice == null)
                {
                    throw new Exception("未查询到该出库单的信息");
                    throw Oops.Bah("未查询到该出库单的信息");
                }
                if (notice.Status != "3")
                {
                    throw new Exception("出库单的状态不是正在执行,不能拣货");
                    throw Oops.Bah("出库单的状态不是正在执行,不能拣货");
                }
                //出库单明细
                var noticeDetail = Db.Queryable<BllExportNoticeDetail>()
                    .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId));
                var noticeDetail = await Db.Queryable<BllExportNoticeDetail>()
                    .FirstAsync(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId));
                if (noticeDetail == null)
                {
                    throw new Exception("未查询到该出库单明细的信息");
                    throw Oops.Bah("未查询到该出库单明细的信息");
                }
                //出库分配信息
                var allot = Db.Queryable<BllExportAllot>().First(m =>
                var allot = await Db.Queryable<BllExportAllot>().FirstAsync(m =>
                    m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo &&
                    m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo);
                if (allot == null)
                {
                    throw new Exception("未查询到该托盘的分配信息");
                    throw Oops.Bah("未查询到该托盘的分配信息");
                }
                //剩余拣货数量(待拣减去已拣)
                var needQty = allot.Qty - allot.CompleteQty;
                if (int.Parse(PickQty) > needQty)
                {
                    throw new Exception("拣货数量不能大于托内剩余待拣数量");
                    throw Oops.Bah("拣货数量不能大于托内剩余待拣数量");
                }
                //库存明细
                var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId);
                var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.Id == allot.StockId);
                if (stockDetail == null)
                {
                    throw new Exception("未查询到该托盘分配的库存明细信息!");
                    throw Oops.Bah("未查询到该托盘分配的库存明细信息!");
                }
                //库存总表
                var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo);
                var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo);
                if (stock == null)
                {
                    throw new Exception("未查询到该托盘分配的库存信息!");
                    throw Oops.Bah("未查询到该托盘分配的库存信息!");
                }
                if (palletNo == palletNoNew)//原托盘与新托盘一致
                {
                    if (int.Parse(PickQty) != stockDetail.Qty)
                    {
                        throw new Exception("原托盘与新托盘一致,需要把托盘上所有数量拣货");
                        throw Oops.Bah("原托盘与新托盘一致,需要把托盘上所有数量拣货");
                    }
                }
                #endregion
                #region 拼托信息
                bool isNew = false;
                var pinStockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew);
                var pinStockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew);
                if (pinStockDetail != null)
                {
                    if (palletNo != palletNoNew)//非整托拣货
                    {
                        if (pinStockDetail.SONo != notice.SONo)
                        {
                            throw new Exception("拼托托盘上只能放同一个出库单下的物料!");
                            throw Oops.Bah("拼托托盘上只能放同一个出库单下的物料!");
                        }
                        if (pinStockDetail.SkuName != stockDetail.SkuName || pinStockDetail.LotNo != stockDetail.LotNo)
                        {
@@ -3144,14 +3212,14 @@
                {
                    isNew = true;
                    var newPalletInfo = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0");
                    var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0");
                    if (newPalletInfo == null)
                    {
                        throw new Exception("新托盘信息不存在或已被使用!");
                        throw Oops.Bah("新托盘信息不存在或已被使用!");
                    }
                    //修改新托盘状态
                    newPalletInfo.Status = "1";
                    Db.Updateable(newPalletInfo).ExecuteCommand();
                    await Db.Updateable(newPalletInfo).ExecuteCommandAsync();
                }
                if (isNew)
@@ -3202,7 +3270,7 @@
                    sd.CreateTime = nowDate;
                    //新增拼托库存明细信息
                    Db.Insertable(sd).ExecuteReturnIdentity();
                    await Db.Insertable(sd).ExecuteReturnIdentityAsync();
                }
                else
                {
@@ -3211,18 +3279,18 @@
                        //修改拼托托盘库存明细
                        pinStockDetail.Qty += int.Parse(PickQty);
                        pinStockDetail.LockQty += int.Parse(PickQty);
                        Db.Updateable(pinStockDetail).ExecuteCommand();
                        await Db.Updateable(pinStockDetail).ExecuteCommandAsync();
                    }
                    else
                    {
                        pinStockDetail.SONo = soNo;
                        Db.Updateable(pinStockDetail).ExecuteCommand();
                        await Db.Updateable(pinStockDetail).ExecuteCommandAsync();
                    }
                }
                #endregion
                //获取当前托盘拣货明细
                var complete = Db.Queryable<BllCompleteDetail>().First(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.ExportAllotId == allot.Id && a.StockId == stockDetail.Id);
                var complete = await Db.Queryable<BllCompleteDetail>().FirstAsync(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.ExportAllotId == allot.Id && a.StockId == stockDetail.Id);
                //判读是否存在拣货明细
                int isComplete = 0;
@@ -3262,7 +3330,7 @@
                    comList.Add(completeDetail);
                    //添加拣货明细
                    Db.Insertable(comList).ExecuteCommand();
                    await Db.Insertable(comList).ExecuteCommandAsync();
                }
                else if (isComplete == 1)
                {
@@ -3270,14 +3338,14 @@
                    complete.UpdateUser = userId;
                    complete.UpdateTime = Db.GetDate();
                    Db.Updateable(complete).ExecuteCommand();
                    await Db.Updateable(complete).ExecuteCommandAsync();
                }
                //修改出库分配信息
                allot.CompleteQty += int.Parse(PickQty);
                allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3";
                allot.UpdateTime = DateTime.Now;
                Db.Updateable(allot).ExecuteCommand();
                await Db.Updateable(allot).ExecuteCommandAsync();
                int isDel = 0;
@@ -3301,12 +3369,12 @@
                    }
                    if (stockDetail.Qty <= 0)
                    {
                        Db.Deleteable(stockDetail).ExecuteCommand();
                        await Db.Deleteable(stockDetail).ExecuteCommandAsync();
                    }
                    else
                    {
                        isDel = 1;
                        Db.Updateable(stockDetail).ExecuteCommand();
                        await Db.Updateable(stockDetail).ExecuteCommandAsync();
                    }
                }
                else
@@ -3317,28 +3385,28 @@
                if (isDel == 0)
                {
                    //改变托盘状态为:未使用
                    var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0");
                    var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0");
                    if (pallet == null)
                    {
                        throw new Exception("未在托盘表中查询到托盘信息");
                        throw Oops.Bah("未在托盘表中查询到托盘信息");
                    }
                    pallet.Status = "0";
                    Db.Updateable(pallet).ExecuteCommand();
                    await Db.Updateable(pallet).ExecuteCommandAsync();
                }
                //修改出库单明细拣货数量
                noticeDetail.CompleteQty += int.Parse(PickQty);
                Db.Updateable(noticeDetail).ExecuteCommand();
                await Db.Updateable(noticeDetail).ExecuteCommandAsync();
                var num = Db.Queryable<BllExportNoticeDetail>()
                    .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty);
                var num = await Db.Queryable<BllExportNoticeDetail>()
                    .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty);
                if (num <= 0)
                {
                    notice.Status = "4"; //更改为执行完成
                }
                //修改出库单信息
                Db.Updateable(notice).ExecuteCommand();
                await Db.Updateable(notice).ExecuteCommandAsync();
                //添加操作日志记录
                var k = new OperationSOServer().AddLogOperationSo("PDA模块", "拣货拼托", soNo, "拣货", $"在PDA上对出库单号为:{soNo}的托盘码为:{palletNo},新托盘码为:{palletNoNew}的拣货操作", userId);
@@ -3347,7 +3415,7 @@
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
                throw e;
            }
        }
        #endregion
@@ -3355,75 +3423,53 @@
        #region JC23版取样
        //根据托盘号获取取样类型
        public string GetSampleType2(string palletNo)
        public async Task<string> GetSampleType2(string palletNo)
        {
            try
            var type = "";
            var detail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo);
            if (detail == null)
            {
                var type = "";
                var detail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNo);
                if (detail == null)
                {
                    throw new Exception("当前托盘未在库存中");
                }
                var boxInfo = Db.Queryable<DataBoxInfo>().Count(m => m.IsDel == "0" && m.StockDetailId == detail.Id);
                //判断托盘上是否有箱码信息
                if (boxInfo > 0)
                {
                    type = "0";//标签取样
                }
                else
                {
                    type = "1";//数量取样
                }
                return type;
                throw Oops.Bah("当前托盘未在库存中");
            }
            catch (Exception e)
            var boxInfo = await Db.Queryable<DataBoxInfo>().CountAsync(m => m.IsDel == "0" && m.StockDetailId == detail.Id);
            //判断托盘上是否有箱码信息
            if (boxInfo > 0)
            {
                throw new Exception(e.Message);
                type = "0";//标签取样
            }
            else
            {
                type = "1";//数量取样
            }
            return type;
        }
        //获取待出库或待取样的请验单
        public List<string> GetInspectionNo()
        public async Task<List<string>> GetInspectionNo()
        {
            try
            {
                var data = Db.Queryable<BllQualityInspectionRequest>().Where(m => m.IsDel == "0" && (m.Status == "1" || m.Status == "2")).OrderByDescending(m => m.QcNo).Select(m => m.QcNo).ToList();
                return data;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            return await Db.Queryable<BllQualityInspectionRequest>().Where(m => m.IsDel == "0" && (m.Status == "1" || m.Status == "2")).OrderByDescending(m => m.QcNo).Select(m => m.QcNo).ToListAsync();
        }
        //获取请验单相关信息
        public InspectionRequestDto GetInspectionRequestInfo(string qcNo)
        public async Task<InspectionRequestDto> GetInspectionRequestInfo(string qcNo)
        {
            try
            {
                var data = new InspectionRequestDto();
                var inspectionRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.QcNo == qcNo);
                var samplingQty = Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).Sum(m => m.CompleteQty);
            var data = new InspectionRequestDto();
            var inspectionRequest = await Db.Queryable<BllQualityInspectionRequest>().FirstAsync(m => m.IsDel == "0" && m.QcNo == qcNo);
            var samplingQty = await Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).SumAsync(m => m.CompleteQty);
                data.QcNo = qcNo;
                data.Sku = inspectionRequest.SkuNo;
                data.LotNo = inspectionRequest.LotNo;
                data.Qty = inspectionRequest.SamplingQty.ToString();
                data.SamplingQty = samplingQty == null ? "0" : samplingQty.ToString();
            data.QcNo = qcNo;
            data.Sku = inspectionRequest.SkuNo + "-" + inspectionRequest.SkuName;
            data.LotNo = inspectionRequest.LotNo;
            data.Qty = inspectionRequest.SamplingQty.ToString();
            data.SamplingQty = samplingQty == null ? "0" : samplingQty.ToString();
                return data;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            return data;
        }
        //取样出库拣货(标签)
        public void SampleSetPick(string qcNo, string palletNo, string boxNo, string boxNo3, string pickQty, int userId)
        public async Task SampleSetPick(string qcNo, string palletNo, string boxNo, string boxNo3, string pickQty, int userId)
        {
            try
            {
@@ -3431,20 +3477,20 @@
                if (string.IsNullOrWhiteSpace(qcNo))
                {
                    throw new Exception("请验单据不能为空");
                    throw Oops.Bah("请验单据不能为空");
                }
                if (string.IsNullOrWhiteSpace(palletNo))
                {
                    throw new Exception("托盘号不能为空");
                    throw Oops.Bah("托盘号不能为空");
                }
                var type = GetSampleType2(palletNo);
                var type = await GetSampleType2(palletNo);
                if (type != "0")
                {
                    throw new Exception("当前托盘请在数量页签取样");
                    throw Oops.Bah("当前托盘请在数量页签取样");
                }
                if (string.IsNullOrEmpty(boxNo))
                {
                    throw new Exception("外箱条码不能为空");
                    throw Oops.Bah("外箱条码不能为空");
                }
                //if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty) && int.Parse(pickQty) > 0)
                //{
@@ -3452,44 +3498,44 @@
                //}
                //请验单
                var inspecd = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.QcNo == qcNo);
                var inspecd = await Db.Queryable<BllQualityInspectionRequest>().FirstAsync(m => m.IsDel == "0" && m.QcNo == qcNo);
                if (inspecd == null)
                {
                    throw new Exception("未查询到请验单信息");
                    throw Oops.Bah("未查询到请验单信息");
                }
                if (inspecd.Status == "0" || inspecd.Status == "3")
                {
                    throw new Exception("请验单状态错误,请核实");
                    throw Oops.Bah("请验单状态错误,请核实");
                }
                //库存明细信息
                var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo);
                var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo);
                if (stockDetail == null)
                {
                    throw new Exception("未在库存中查询出当前托盘信息");
                    throw Oops.Bah("未在库存中查询出当前托盘信息");
                }
                if (!string.IsNullOrWhiteSpace(stockDetail.LocatNo))
                {
                    throw new Exception("当前托盘不是库外托盘,请核实");
                    throw Oops.Bah("当前托盘不是库外托盘,请核实");
                }
                //箱支信息 
                var boxInfoList = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo).ToList();
                var boxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo).ToListAsync();
                //库存总表
                var stock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo);
                var stock = await Db.Queryable<DataStock>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo);
                if (stock == null)
                {
                    throw new Exception("未查询出库存总信息");
                    throw Oops.Bah("未查询出库存总信息");
                }
                //入库单
                var notice = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo);
                var notice = await Db.Queryable<BllArrivalNotice>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo);
                if (notice == null)
                {
                    throw new Exception("未查询到入库单信息");
                    throw Oops.Bah("未查询到入库单信息");
                }
                #endregion
                //取样明细记录表
                var sampld = Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).ToList();
                var sampld = await Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).ToListAsync();
                var isAddSampld = false;
                var PickType = ""; //0数量拣货  1 箱支拣货
@@ -3506,16 +3552,16 @@
                    {
                        if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) == 0)
                        {
                            throw new Exception("未查询到支码信息");
                            throw Oops.Bah("未查询到支码信息");
                        }
                        if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) > 1)
                        {
                            throw new Exception("支码信息数据信息错误,请核实");
                            throw Oops.Bah("支码信息数据信息错误,请核实");
                        }
                        EditboxInfo = Db.Queryable<DataBoxInfo>().First(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo && m.BoxNo3 == boxNo3);
                        EditboxInfo = await Db.Queryable<DataBoxInfo>().FirstAsync(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo && m.BoxNo3 == boxNo3);
                        if (EditboxInfo.Qty < decimal.Parse(pickQty))
                        {
                            throw new Exception("拣货数量不能大于箱内数量");
                            throw Oops.Bah("拣货数量不能大于箱内数量");
                        }
                        isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo && m.BoxNo3 == EditboxInfo.BoxNo3) == 0;
                    }
@@ -3524,33 +3570,33 @@
                        if (boxInfoList.Count == 0)
                        {
                            throw new Exception("未在托盘上查询到箱码信息,请核实");
                            throw Oops.Bah("未在托盘上查询到箱码信息,请核实");
                        }
                        if (boxInfoList.Count > 1)
                        {
                            throw new Exception("箱码数据信息错误,请核实");
                            throw Oops.Bah("箱码数据信息错误,请核实");
                        }
                        if (boxInfoList.Count(m => !string.IsNullOrWhiteSpace(m.BoxNo3)) > 0)
                        {
                            throw new Exception("当前箱码中含有支码,请输入支码信息取样");
                            throw Oops.Bah("当前箱码中含有支码,请输入支码信息取样");
                        }
                        EditboxInfo = Db.Queryable<DataBoxInfo>().First(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo);
                        EditboxInfo = await Db.Queryable<DataBoxInfo>().FirstAsync(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo);
                        if (EditboxInfo.Qty < decimal.Parse(pickQty))
                        {
                            throw new Exception("拣货数量不能大于箱内数量");
                            throw Oops.Bah("拣货数量不能大于箱内数量");
                        }
                        isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo) == 0;
                    }
                    if (sampld.Sum(m => m.CompleteQty) + decimal.Parse(pickQty) > inspecd.SamplingQty)
                    {
                        throw new Exception("取样总拣货数量大于请验单取样数量");
                        throw Oops.Bah("取样总拣货数量大于请验单取样数量");
                    }
                    //判断箱中是否含有支码,有:不让拣数量
                    if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < decimal.Parse(pickQty))
                    {
                        throw new Exception("托盘上可用数量小于取样数量,请核实锁定、冻结数量");
                        throw Oops.Bah("托盘上可用数量小于取样数量,请核实锁定、冻结数量");
                    }
                }
                else //箱支拣货
@@ -3563,16 +3609,16 @@
                        if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) == 0)
                        {
                            throw new Exception("未查询到支码信息");
                            throw Oops.Bah("未查询到支码信息");
                        }
                        if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) > 1)
                        {
                            throw new Exception("支码数据信息错误,请核实");
                            throw Oops.Bah("支码数据信息错误,请核实");
                        }
                        EditboxInfoList = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo && m.BoxNo3 == boxNo3).ToList();
                        EditboxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo && m.BoxNo3 == boxNo3).ToListAsync();
                        if (EditboxInfoList.Sum(m => m.Qty) + sampld.Sum(m => m.CompleteQty) > inspecd.SamplingQty)
                        {
                            throw new Exception("取样总拣货数量大于请验单取样数量");
                            throw Oops.Bah("取样总拣货数量大于请验单取样数量");
                        }
                        qty = EditboxInfoList.Sum(m => m.Qty);
                        //isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo && m.BoxNo3 == EditboxInfo.BoxNo3) == 0;
@@ -3582,32 +3628,32 @@
                        if (boxInfoList.Count == 0)
                        {
                            throw new Exception("未在托盘上查询到箱码信息,请核实");
                            throw Oops.Bah("未在托盘上查询到箱码信息,请核实");
                        }
                        if (boxInfoList.Count > 1)
                        {
                            throw new Exception("箱码数据信息错误,请核实");
                            throw Oops.Bah("箱码数据信息错误,请核实");
                        }
                        if (boxInfoList.Count(m => !string.IsNullOrWhiteSpace(m.BoxNo3)) > 0)
                        {
                            throw new Exception("当前箱码中含有支码,请输入支码信息取样");
                            throw Oops.Bah("当前箱码中含有支码,请输入支码信息取样");
                        }
                        EditboxInfoList = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo).ToList();
                        EditboxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo).ToListAsync();
                        if (EditboxInfo.Qty < decimal.Parse(pickQty))
                        {
                            throw new Exception("拣货数量不能大于箱内数量");
                            throw Oops.Bah("拣货数量不能大于箱内数量");
                        }
                        qty = EditboxInfoList.Sum(m => m.Qty);
                        //isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo) == 0;
                    }
                    if (sampld.Sum(m => m.CompleteQty) + qty > inspecd.SamplingQty)
                    {
                        throw new Exception("取样总拣货数量大于请验单取样数量");
                        throw Oops.Bah("取样总拣货数量大于请验单取样数量");
                    }
                    if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < qty)
                    {
                        throw new Exception("托盘上可用数量小于取样数量,请核实锁定、冻结数量");
                        throw Oops.Bah("托盘上可用数量小于取样数量,请核实锁定、冻结数量");
                    }
                }
                #endregion
@@ -3772,7 +3818,7 @@
                            CreateTime = DateTime.Now,
                            CreateUser = userId
                        };
                        Db.Insertable(sampleDetail).ExecuteCommand();
                        await Db.Insertable(sampleDetail).ExecuteCommandAsync();
                        //}
                        //else
                        //{
@@ -3791,7 +3837,7 @@
                        #region 修改库存三表
                        //拆包有效期更改
                        var unpackWarranty = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo).UnpackWarranty;
                        var unpackWarranty = (await Db.Queryable<SysMaterials>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo)).UnpackWarranty;
                        foreach (var item in boxInfoList)
                        {
@@ -3809,31 +3855,31 @@
                                }
                            }
                        }
                        Db.Updateable(boxInfoList).ExecuteCommand();
                        await Db.Updateable(boxInfoList).ExecuteCommandAsync();
                        //库存箱码
                        Db.Deleteable(boxInfo).ExecuteCommand();
                        await Db.Deleteable(boxInfo).ExecuteCommandAsync();
                        //库存明细
                        stockDetail.Qty -= boxInfo.Qty;
                        if (stockDetail.Qty == 0)
                        {
                            Db.Deleteable(stockDetail).ExecuteCommand();
                            await Db.Deleteable(stockDetail).ExecuteCommandAsync();
                        }
                        else
                        {
                            Db.Updateable(stockDetail).ExecuteCommand();
                            await Db.Updateable(stockDetail).ExecuteCommandAsync();
                        }
                        //库存总表
                        stock.Qty -= boxInfo.Qty;
                        if (stock.Qty == 0)
                        {
                            Db.Deleteable(stock).ExecuteCommand();
                            await Db.Deleteable(stock).ExecuteCommandAsync();
                        }
                        else
                        {
                            Db.Updateable(stock).ExecuteCommand();
                            await Db.Updateable(stock).ExecuteCommandAsync();
                        }
                        #endregion
@@ -3843,12 +3889,12 @@
                        //不是上传完毕的修改取样状态
                        if (notice.Status != "4")
                        {
                            var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo);
                            var noticeDetail = await Db.Queryable<BllArrivalNoticeDetail>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo);
                            if (noticeDetail.IsSampling == "0")
                            {
                                noticeDetail.IsSampling = "1";
                                Db.Updateable(noticeDetail).ExecuteCommand();
                                await Db.Updateable(noticeDetail).ExecuteCommandAsync();
                            }
                        }
@@ -3866,7 +3912,7 @@
                        inspecd.Status = "3";
                    }
                    Db.Updateable(inspecd).ExecuteCommand();
                    await Db.Updateable(inspecd).ExecuteCommandAsync();
                    #endregion
                }
@@ -3880,13 +3926,13 @@
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
                throw e;
            }
        }
        //取样出库拣货(数量)
        public void SampleSetQtyPick(string qcNo, string palletNo, string pickQty, int userId)
        public async Task SampleSetQtyPick(string qcNo, string palletNo, string pickQty, int userId)
        {
            try
            {
@@ -3894,63 +3940,69 @@
                if (string.IsNullOrWhiteSpace(qcNo))
                {
                    throw new Exception("请验单据不能为空");
                    throw Oops.Bah("请验单据不能为空");
                }
                if (string.IsNullOrWhiteSpace(palletNo))
                {
                    throw new Exception("托盘号不能为空");
                    throw Oops.Bah("托盘号不能为空");
                }
                var type = GetSampleType2(palletNo);
                var type = await GetSampleType2(palletNo);
                if (type != "1")
                {
                    throw new Exception("当前托盘请在标签页签取样");
                    throw Oops.Bah("当前托盘请在标签页签取样");
                }
                if (string.IsNullOrWhiteSpace(pickQty))
                {
                    throw new Exception("拣货数量不能为空");
                    throw Oops.Bah("拣货数量不能为空");
                }
                if (decimal.Parse(pickQty) <= 0)
                {
                    throw new Exception("拣货数量不能小于等于0");
                    throw Oops.Bah("拣货数量不能小于等于0");
                }
                //请验单
                var inspecd = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.QcNo == qcNo);
                var inspecd = await Db.Queryable<BllQualityInspectionRequest>().FirstAsync(m => m.IsDel == "0" && m.QcNo == qcNo);
                if (inspecd == null)
                {
                    throw new Exception("未查询到请验单信息");
                    throw Oops.Bah("未查询到请验单信息");
                }
                if (inspecd.Status == "0" || inspecd.Status == "3")
                {
                    throw new Exception("请验单状态错误,请核实");
                    throw Oops.Bah("请验单状态错误,请核实");
                }
                //库存明细信息
                var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo);
                var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo
                && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo);
                if (stockDetail == null)
                {
                    throw new Exception("未在库存中查询出当前托盘信息");
                    throw Oops.Bah("未在库存中查询出当前托盘信息");
                }
                // 判断托盘是否在库内
                if (!string.IsNullOrWhiteSpace(stockDetail.LocatNo))
                {
                    throw new Exception("当前托盘不是库外托盘,请核实");
                    var wareHouseData = await Db.Queryable<SysWareHouse>().FirstAsync(m => m.IsDel == "0" && m.WareHouseNo == stockDetail.WareHouseNo);
                    if (wareHouseData.Type != "2")
                    {
                        throw Oops.Bah("当前托盘不是库外托盘,请核实");
                    }
                }
                //库存总表
                var stock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo);
                var stock = await Db.Queryable<DataStock>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo);
                if (stock == null)
                {
                    throw new Exception("未查询出库存总信息");
                    throw Oops.Bah("未查询出库存总信息");
                }
                //入库单
                var notice = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo);
                var notice = await Db.Queryable<BllArrivalNotice>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo);
                if (notice == null)
                {
                    throw new Exception("未查询到入库单信息");
                    throw Oops.Bah("未查询到入库单信息");
                }
                #endregion
                //取样明细记录表
                var sampld = Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).ToList();
                var sampld = await Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).ToListAsync();
                var qty = decimal.Parse(pickQty);
                //var isAddSampld = sampld.Count(m => m.PalletNo == palletNo) == 0; 
@@ -3959,12 +4011,12 @@
                if (sampld.Sum(m => m.CompleteQty) + qty > inspecd.SamplingQty)
                {
                    throw new Exception("取样总拣货数量大于请验单取样数量");
                    throw Oops.Bah("取样总拣货数量大于请验单取样数量");
                }
                //判断箱中是否含有支码,有:不让拣数量
                if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < qty)
                {
                    throw new Exception("托盘上可用数量小于取样数量,请核实锁定、冻结数量");
                    throw Oops.Bah("托盘上可用数量小于取样数量,请核实锁定、冻结数量");
                }
@@ -3990,7 +4042,7 @@
                    CreateTime = DateTime.Now,
                    CreateUser = userId
                };
                Db.Insertable(sampleDetail).ExecuteCommand();
                await Db.Insertable(sampleDetail).ExecuteCommandAsync();
                //}
                //else
                //{
@@ -4009,24 +4061,24 @@
                stockDetail.Qty -= qty;
                if (stockDetail.Qty == 0)
                {
                    Db.Deleteable(stockDetail).ExecuteCommand();
                    await Db.Deleteable(stockDetail).ExecuteCommandAsync();
                }
                else
                {
                    stockDetail.BitPalletMark = "1";
                    stockDetail.InspectMark = "1";
                    Db.Updateable(stockDetail).ExecuteCommand();
                    await Db.Updateable(stockDetail).ExecuteCommandAsync();
                }
                //库存总表
                stock.Qty -= qty;
                if (stock.Qty == 0)
                {
                    Db.Deleteable(stock).ExecuteCommand();
                    await Db.Deleteable(stock).ExecuteCommandAsync();
                }
                else
                {
                    Db.Updateable(stock).ExecuteCommand();
                    await Db.Updateable(stock).ExecuteCommandAsync();
                }
                #endregion
@@ -4036,12 +4088,12 @@
                //不是上传完毕的修改取样状态
                if (notice.Status != "4")
                {
                    var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo);
                    var noticeDetail = await Db.Queryable<BllArrivalNoticeDetail>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo);
                    if (noticeDetail.IsSampling == "0")
                    {
                        noticeDetail.IsSampling = "1";
                        Db.Updateable(noticeDetail).ExecuteCommand();
                        await Db.Updateable(noticeDetail).ExecuteCommandAsync();
                    }
                }
@@ -4056,10 +4108,8 @@
                {
                    inspecd.Status = "3";
                }
                Db.Updateable(inspecd).ExecuteCommand();
                await Db.Updateable(inspecd).ExecuteCommandAsync();
                #endregion
                //添加操作日志记录
                var k = new OperationSOServer().AddLogOperationSo("PDA模块", "取样拣货", qcNo, "拣货", $"在PDA上对请验单号为:{qcNo}的托盘码为:{palletNo}的拣货操作", userId);
@@ -4068,7 +4118,7 @@
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
                throw e;
            }
        }