hwh
2024-08-05 e85e1603b2d1c013be767a393a27ff4f2b97be81
pda优化异步
3个文件已修改
789 ■■■■■ 已修改文件
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs 589 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/Wms/Controllers/PdaSoController.cs 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
@@ -2029,56 +2029,56 @@
        }
        //取样出库拣货(无标签)
        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 +2089,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 +2106,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 +2139,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 +2175,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 +2219,7 @@
                        comList.Add(completeDetail);
                        //添加拣货明细
                        Db.Insertable(comList).ExecuteCommand();
                        await Db.Insertable(comList).ExecuteCommandAsync();
                    }
                    else if (isComplete == 1)
                    {
@@ -2227,7 +2227,7 @@
                        complete.UpdateUser = userId;
                        complete.UpdateTime = Db.GetDate();
                        Db.Updateable(complete).ExecuteCommand();
                        await Db.Updateable(complete).ExecuteCommandAsync();
                    }
@@ -2235,7 +2235,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 +2257,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 +2295,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 +2304,7 @@
                    if (string.IsNullOrWhiteSpace(soNo))
                    {
                        throw new Exception("出库单据不能为空");
                        throw Oops.Bah("出库单据不能为空");
                    }
                    //if (string.IsNullOrWhiteSpace(soDetailId))
                    //{
@@ -2312,56 +2312,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 +2400,7 @@
                        comList.Add(completeDetail);
                        //添加拣货明细
                        Db.Insertable(comList).ExecuteCommand();
                        await Db.Insertable(comList).ExecuteCommandAsync();
                    }
                    else if (isComplete == 1)
                    {
@@ -2408,7 +2408,7 @@
                        complete.UpdateUser = userId;
                        complete.UpdateTime = Db.GetDate();
                        Db.Updateable(complete).ExecuteCommand();
                        await Db.Updateable(complete).ExecuteCommandAsync();
                    }
@@ -2418,7 +2418,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 +2441,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 +2454,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 +2497,6 @@
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
@@ -2513,7 +2512,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 +2522,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 +2594,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 +2614,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 +2667,7 @@
                    sd.CreateTime = nowDate;
                    //新增拼托库存明细信息
                    sdId = Db.Insertable(sd).ExecuteReturnIdentity();
                    sdId = await Db.Insertable(sd).ExecuteReturnIdentityAsync();
                }
                #endregion
@@ -2677,28 +2676,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 +2731,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 +2774,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 +2825,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 +2843,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 +2898,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 +2911,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 +2924,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 +2943,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 +2956,7 @@
                    {
                        //判断该托盘是否还存在物料 存在改为待回库 待回库完成后改为已完成
                    }
                    Db.Updateable(allot).ExecuteCommand();
                    await Db.Updateable(allot).ExecuteCommandAsync();
                    //删除或修改库存明细
                    stockDetail.BitPalletMark = "1";//修改为零托标识
@@ -2978,36 +2977,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 +3021,7 @@
                        //修改拼托托盘库存明细
                        pinStockDetail.Qty += pickQty;
                        pinStockDetail.LockQty += pickQty;
                        Db.Updateable(pinStockDetail).ExecuteCommand();
                        await Db.Updateable(pinStockDetail).ExecuteCommandAsync();
                    }
                }
@@ -3033,7 +3032,6 @@
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        /// <summary>
@@ -3045,7 +3043,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 +3053,7 @@
                if (string.IsNullOrWhiteSpace(soNo))
                {
                    throw new Exception("出库单据不能为空");
                    throw Oops.Bah("出库单据不能为空");
                }
                //if (string.IsNullOrWhiteSpace(soDetailId))
                //{
@@ -3063,76 +3061,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 +3142,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 +3200,7 @@
                    sd.CreateTime = nowDate;
                    //新增拼托库存明细信息
                    Db.Insertable(sd).ExecuteReturnIdentity();
                    await Db.Insertable(sd).ExecuteReturnIdentityAsync();
                }
                else
                {
@@ -3211,18 +3209,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 +3260,7 @@
                    comList.Add(completeDetail);
                    //添加拣货明细
                    Db.Insertable(comList).ExecuteCommand();
                    await Db.Insertable(comList).ExecuteCommandAsync();
                }
                else if (isComplete == 1)
                {
@@ -3270,14 +3268,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 +3299,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 +3315,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 +3345,6 @@
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        #endregion
@@ -3355,75 +3352,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;
            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 +3406,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 +3427,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 +3481,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 +3499,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 +3538,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 +3557,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 +3747,7 @@
                            CreateTime = DateTime.Now,
                            CreateUser = userId
                        };
                        Db.Insertable(sampleDetail).ExecuteCommand();
                        await Db.Insertable(sampleDetail).ExecuteCommandAsync();
                        //}
                        //else
                        //{
@@ -3791,7 +3766,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 +3784,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 +3818,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 +3841,7 @@
                        inspecd.Status = "3";
                    }
                    Db.Updateable(inspecd).ExecuteCommand();
                    await Db.Updateable(inspecd).ExecuteCommandAsync();
                    #endregion
                }
@@ -3880,13 +3855,12 @@
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
        //取样出库拣货(数量)
        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 +3868,63 @@
                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("当前托盘不是库外托盘,请核实");
                    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 +3933,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 +3964,7 @@
                    CreateTime = DateTime.Now,
                    CreateUser = userId
                };
                Db.Insertable(sampleDetail).ExecuteCommand();
                await Db.Insertable(sampleDetail).ExecuteCommandAsync();
                //}
                //else
                //{
@@ -4009,24 +3983,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 +4010,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,7 +4030,7 @@
                {
                    inspecd.Status = "3";
                }
                Db.Updateable(inspecd).ExecuteCommand();
                await Db.Updateable(inspecd).ExecuteCommandAsync();
                #endregion
@@ -4068,7 +4042,6 @@
            catch (Exception e)
            {
                Db.RollbackTran();
                throw new Exception(e.Message);
            }
        }
Wms/WMS.IBLL/IPdaServer/IPdaSoServer.cs
@@ -157,7 +157,7 @@
        /// <param name="boxNo3">支/袋码</param>
        /// <param name="palletNo">新托盘号</param> 
        /// <param name="userId">操作人</param>
        void SoSetPinPick(string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, string PickQty, string palletNoNew, int userId);
        Task SoSetPinPick(string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, string PickQty, string palletNoNew, int userId);
        /// <summary>
        /// 拼托出库pda拣货-数量
        /// </summary>
@@ -167,7 +167,7 @@
        /// <param name="PickQty"></param>
        /// <param name="palletNoNew"></param>
        /// <param name="userId"></param>
        void SoSetQtyPinPick(string soNo, string soDetailId, string palletNo, string PickQty, string palletNoNew, int userId);
        Task SoSetQtyPinPick(string soNo, string soDetailId, string palletNo, string PickQty, string palletNoNew, int userId);
        /// <summary>
        ///  取样出库拣货(无标签)
        /// </summary>
@@ -178,7 +178,7 @@
        /// <param name="PickQty">拣货数量</param>
        /// <param name="asnNo">入库单</param>
        /// <param name="userId">操作人ID</param>
        void SampleSoSetQtyPick(string soType, string soNo, string soDetailId, string palletNo, string PickQty,
        Task SampleSoSetQtyPick(string soType, string soNo, string soDetailId, string palletNo, string PickQty,
            string asnNo, int userId);
@@ -189,18 +189,18 @@
        /// </summary>
        /// <param name="palletNo">托盘号</param>
        /// <returns>0:标签取样  1:数量取样</returns>
        string GetSampleType2(string palletNo);
        Task<string> GetSampleType2(string palletNo);
        /// <summary>
        /// 获取待出库或待取样的请验单
        /// </summary>
        /// <returns></returns>
        List<string> GetInspectionNo();
        Task<List<string>> GetInspectionNo();
        /// <summary>
        /// 获取请验单相关信息
        /// </summary>
        /// <param name="qcNo">请验单</param>
        /// <returns></returns>
        InspectionRequestDto GetInspectionRequestInfo(string qcNo);
        Task<InspectionRequestDto> GetInspectionRequestInfo(string qcNo);
        /// <summary>
        /// 取样出库拣货(标签)
@@ -211,7 +211,7 @@
        /// <param name="boxNo3">支码</param>
        /// <param name="pickQty">拣货数量</param>
        /// <param name="userId"></param>
        void SampleSetPick(string qcNo, string palletNo, string boxNo, string boxNo3, string pickQty, int userId);
        Task SampleSetPick(string qcNo, string palletNo, string boxNo, string boxNo3, string pickQty, int userId);
        /// <summary>
        /// 取样出库拣货(数量)
@@ -220,7 +220,7 @@
        /// <param name="palletNo">托盘号</param>
        /// <param name="pickQty">拣货数量</param>
        /// <param name="userId"></param>
        void SampleSetQtyPick(string qcNo, string palletNo, string pickQty, int userId);
        Task SampleSetQtyPick(string qcNo, string palletNo, string pickQty, int userId);
        #endregion
Wms/Wms/Controllers/PdaSoController.cs
@@ -20,6 +20,7 @@
    [Route("api/[controller]/[action]")]
    [ApiController]
    [Authorize]
    [ServiceFilter(typeof(ApiResponseActionFilter))]
    public class PdaSoController : ControllerBase
    {
        #region 依赖注入
@@ -42,7 +43,6 @@
        /// <param name="model">PalletNo:托盘条码</param>
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task IsEnableOkPalletNo(PdaSoVm model)
        {
            await _pdaSoSvc.IsEnableOkPalletNo(model.PalletNo);
@@ -54,7 +54,6 @@
        /// <param name="model">PalletNo:托盘号</param> 
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task<List<string>> GetRunSoNoticeList(PdaSoVm model)
        {
            return await _pdaSoSvc.GetRunSoNoticeList(model.PalletNo, model.Type);
@@ -66,7 +65,6 @@
        /// <param name="model">PalletNo:托盘码、SoNo:单据号</param> 
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task GetSoSkuLotNoListByPallet(PdaSoVm model)
        {
            var models = await _pdaSoSvc.GetSoSkuLotNoListByPallet(model.PalletNo, model.SoNo);
@@ -78,7 +76,6 @@
        /// <param name="model">SoDetailId:出库单明细ID、PalletNo:托盘码</param> 
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task<OutPdaInfo> GetOutlets(PdaSoVm model)
        {
            return await _pdaSoSvc.GetOutlets(model.SoDetailId, model.PalletNo);
@@ -90,7 +87,6 @@
        /// <param name="model">SoDetailId:出库单明细ID</param> 
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task<OutPdaInfo> GetPlanAndFinishQty(PdaSoVm model)
        {
            return await _pdaSoSvc.GetPlanAndFinishQty(model.SoDetailId);
@@ -102,7 +98,6 @@
        /// <param name="model">BoxNo:箱码号</param> 
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task<dynamic> GetDataComBoxInfo(PdaSoVm model)
        {
            return await _pdaSoSvc.GetDataComBoxInfo(model.SoDetailId, model.PalletNo, model.BoxNo, model.BoxNo3);
@@ -114,7 +109,6 @@
        /// <param name="model">BoxNo:箱码号</param> 
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task<dynamic> GetAllotPlnInfo(PdaSoVm model)
        {
            return await _pdaSoSvc.GetAllotPlnInfo(model.SoDetailId, model.PalletNo);
@@ -126,7 +120,6 @@
        /// <param name="model">SoDetailId:出库单明细ID、PalletNo:托盘码</param> 
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task SoSetPick(PdaSoVm model)
        {
            await _pdaSoSvc.SoSetPick(model.SoNo, model.SoDetailId, model.PalletNo, model.BoxNo, model.BoxNo3, model.PickQty, _userManager.UserId);
@@ -138,7 +131,6 @@
        /// <param name="model">SoDetailId:出库单明细ID、PalletNo:托盘码</param> 
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task SoSetQtyPick(PdaSoVm model)
        {
            await _pdaSoSvc.SoSetQtyPick(model.SoNo, model.SoDetailId, model.PalletNo, model.PickQty, _userManager.UserId);
@@ -151,7 +143,6 @@
        /// <param name="model">空托盘出库</param>
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task<string> IssuePlnOutHouse(OutModePalletVm model)
        {
            return await _pdaSoSvc.IssuePlnOutHouse(model, _userManager.UserId, _config.WcsHost + _config.IssueComApiUrl);
@@ -166,7 +157,6 @@
        /// <param name="palletNo">托盘号</param>
        /// <returns></returns>
        [HttpGet]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task<dynamic> GetPingKuInfoByPallet(string soNo, string palletNo)
        {
            return await _pdaSoSvc.GetPingKuInfoByPallet(soNo, palletNo);
@@ -179,7 +169,6 @@
        /// <param name="palletNo">托盘号</param>
        /// <returns></returns>
        [HttpGet]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task PlaneExportSuccess(string soNo, string palletNo)
        {
            await _pdaSoSvc.PlaneExportSuccess(soNo, palletNo, _userManager.UserId);
@@ -192,7 +181,6 @@
        /// <param name="palletNo">托盘号</param>
        /// <returns></returns>
        [HttpGet]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task<string> GetSampleType(string palletNo)
        {
            return await _pdaSoSvc.GetSampleType(palletNo);
@@ -204,7 +192,6 @@
        /// <param name="palletNo">托盘号</param>
        /// <returns></returns>
        [HttpGet]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task<List<string>> GetAsnNoByPallet(string palletNo)
        {
            return await _pdaSoSvc.GetAsnNoByPallet(palletNo);
@@ -215,7 +202,6 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        [ServiceFilter(typeof(ApiResponseActionFilter))]
        public async Task SampleSoSetPick(PdaSoVm model)
        {
            await _pdaSoSvc.SampleSoSetPick(model.Type, model.SoNo, model.SoDetailId, model.PalletNo, model.BoxNo, model.BoxNo3, model.PickQty, model.AsnNo, _userManager.UserId);
@@ -226,30 +212,9 @@
        /// <param name="model">SoDetailId:出库单明细ID、PalletNo:托盘码</param> 
        /// <returns></returns>
        [HttpPost]
        public IActionResult SampleSoSetQtyPick(PdaSoVm model)
        public async Task SampleSoSetQtyPick(PdaSoVm model)
        {
            try
            {
                //获取当前登录的用户ID
                var claimsIdentity = this.User.Identity as ClaimsIdentity;
                if (claimsIdentity == null)
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value;
                if (string.IsNullOrWhiteSpace(userId))
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                _pdaSoSvc.SampleSoSetQtyPick(model.Type, model.SoNo, model.SoDetailId, model.PalletNo, model.PickQty, model.AsnNo, int.Parse(userId));
                return Ok(new { data = "", code = 0, msg = "(无标签)取样出库拣货" });
            }
            catch (Exception e)
            {
                return Ok(new { data = "", code = 1, msg = "(无标签)取样出库拣货错误:" + e.Message });
            }
            await _pdaSoSvc.SampleSoSetQtyPick(model.Type, model.SoNo, model.SoDetailId, model.PalletNo, model.PickQty, model.AsnNo, _userManager.UserId);
        }
        #region 拣货拼托
        /// <summary>
@@ -258,29 +223,9 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult SoSetPinPick(PdaSoVm model)
        public async Task SoSetPinPick(PdaSoVm model)
        {
            try
            {
                //获取当前登录的用户ID
                var claimsIdentity = this.User.Identity as ClaimsIdentity;
                if (claimsIdentity == null)
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value;
                if (string.IsNullOrWhiteSpace(userId))
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                _pdaSoSvc.SoSetPinPick(model.SoNo, model.SoDetailId, model.PalletNo, model.BoxNo, model.BoxNo3, model.PickQty, model.PalletNoNew, int.Parse(userId));
                return Ok(new { code = 0, msg = "拣货完成", data = "" });
            }
            catch (Exception e)
            {
                return Ok(new { code = 1, msg = e.Message });
            }
            await _pdaSoSvc.SoSetPinPick(model.SoNo, model.SoDetailId, model.PalletNo, model.BoxNo, model.BoxNo3, model.PickQty, model.PalletNoNew, _userManager.UserId);
        }
        /// <summary>
        /// 拼托出库pda拣货-数量
@@ -288,30 +233,9 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult SoSetQtyPinPick(PdaSoVm model)
        public async Task SoSetQtyPinPick(PdaSoVm model)
        {
            try
            {
                //获取当前登录的用户ID
                var claimsIdentity = this.User.Identity as ClaimsIdentity;
                if (claimsIdentity == null)
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                var userId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value;
                if (string.IsNullOrWhiteSpace(userId))
                {
                    return Ok(new { code = 1, msg = "未获取到当前操作人信息" });
                }
                _pdaSoSvc.SoSetQtyPinPick(model.SoNo, model.SoDetailId, model.PalletNo, model.PickQty, model.PalletNoNew, int.Parse(userId));
                return Ok(new { code = 0, msg = "拣货完成", data = "" });
            }
            catch (Exception e)
            {
                return Ok(new { code = 1, msg = e.Message });
            }
            await _pdaSoSvc.SoSetQtyPinPick(model.SoNo, model.SoDetailId, model.PalletNo, model.PickQty, model.PalletNoNew, _userManager.UserId);
        }
        #endregion
@@ -324,19 +248,9 @@
        /// <param name="palletNo">托盘号</param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult GetSampleType2(string palletNo)
        public async Task<string> GetSampleType2(string palletNo)
        {
            try
            {
                var type = _pdaSoSvc.GetSampleType2(palletNo);
                return Ok(new { data = type, code = 0, msg = "根据托盘号获取取样类型" });
            }
            catch (Exception e)
            {
                return Ok(new { data = "", code = 1, msg = "根据托盘号获取取样类型:" + e.Message });
            }
            return await _pdaSoSvc.GetSampleType2(palletNo);
        }
        /// <summary>
@@ -344,19 +258,9 @@
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public IActionResult GetInspectionNo()
        public async Task<List<string>> GetInspectionNo()
        {
            try
            {
                var qcNoStr = _pdaSoSvc.GetInspectionNo();
                return Ok(new { data = qcNoStr, code = 0, msg = "获取待出库或待取样的请验单" });
            }
            catch (Exception e)
            {
                return Ok(new { data = "", code = 1, msg = "获取待出库或待取样的请验单:" + e.Message });
            }
            return await _pdaSoSvc.GetInspectionNo();
        }
        /// <summary>
@@ -365,19 +269,9 @@
        /// <param name="qcNo">请验单</param>
        /// <returns></returns>
        [HttpGet]
        public IActionResult GetInspectionRequestInfo(string qcNo)
        public async Task<InspectionRequestDto> GetInspectionRequestInfo(string qcNo)
        {
            try
            {
                var info = _pdaSoSvc.GetInspectionRequestInfo(qcNo);
                return Ok(new { data = info, code = 0, msg = "获取请验单相关信息" });
            }
            catch (Exception e)
            {
                return Ok(new { data = "", code = 1, msg = "获取请验单相关信息:" + e.Message });
            }
            return await _pdaSoSvc.GetInspectionRequestInfo(qcNo);
        }
        /// <summary>
@@ -386,31 +280,9 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult SampleSetPick(SampleSoVm model)
        public async Task SampleSetPick(SampleSoVm model)
        {
            try
            {
                var claimsIdentity = this.User.Identity as ClaimsIdentity;
                if (claimsIdentity == null)
                {
                    throw new Exception("未获取到用户信息");
                }
                string UserId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value;
                if (string.IsNullOrWhiteSpace(UserId))
                {
                    throw new Exception("未获取到用户信息");
                }
                int uid = Convert.ToInt32(UserId);
                _pdaSoSvc.SampleSetPick(model.QcNo, model.PalletNo, model.BoxNo, model.BoxNo3, model.PickQty, uid);
                return Ok(new { data = "", code = 0, msg = "(标签)取样出库拣货" });
            }
            catch (Exception e)
            {
                return Ok(new { data = "", code = 1, msg = "(标签)取样出库拣货错误:" + e.Message });
            }
            await _pdaSoSvc.SampleSetPick(model.QcNo, model.PalletNo, model.BoxNo, model.BoxNo3, model.PickQty, _userManager.UserId);
        }
        /// <summary>
@@ -419,31 +291,9 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult SampleSetQtyPick(SampleSoVm model)
        public async Task SampleSetQtyPick(SampleSoVm model)
        {
            try
            {
                var claimsIdentity = this.User.Identity as ClaimsIdentity;
                if (claimsIdentity == null)
                {
                    throw new Exception("未获取到用户信息");
                }
                string UserId = claimsIdentity.FindFirst(ClaimTypes.Name)?.Value;
                if (string.IsNullOrWhiteSpace(UserId))
                {
                    throw new Exception("未获取到用户信息");
                }
                int uid = Convert.ToInt32(UserId);
                _pdaSoSvc.SampleSetQtyPick(model.QcNo, model.PalletNo, model.PickQty, uid);
                return Ok(new { data = "", code = 0, msg = "(数量)取样出库拣货" });
            }
            catch (Exception e)
            {
                return Ok(new { data = "", code = 1, msg = "(数量)取样出库拣货错误:" + e.Message });
            }
            await _pdaSoSvc.SampleSetQtyPick(model.QcNo, model.PalletNo, model.PickQty, _userManager.UserId);
        }
        #endregion