zhaowc
2025-01-20 f2bc08e28dda7022202f07217f6a3c150f818af7
Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs
@@ -388,7 +388,7 @@
                {
                    throw new Exception("托盘码不能为空");
                }
                if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)
                if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)
                {
                    throw new Exception("追溯条码和拣货数量不能同时输入");
                }
@@ -399,9 +399,21 @@
                {
                    throw new Exception("未查询到该出库单的信息");
                }
                if (notice.Status != "3")
                var type1 = new List<string>() { "0", "4" }; //拣货不可多出 成品出库、不合格品出库
                var type2 = new List<string>() { "1", "2", "3", "5", "6", "7", "8" };//拣货可多出 领料出库、抽检出库、物料取样出库、中间品出库、代储出库、其他出库、寄存出库
                if (type1.Contains(notice.Type))
                {
                    throw new Exception("出库单的状态不是正在执行,不能拣货");
                    if (notice.Status != "3")
                    {
                        throw new Exception("出库单的状态不是正在执行,不能拣货");
                    }
                }
                if (type2.Contains(notice.Type))
                {
                    if (notice.Status != "3" && notice.Status != "4")
                    {
                        throw new Exception("出库单的状态不是正在执行或执行完成,不能拣货");
                    }
                }
                //出库单明细
                var noticeDetail = Db.Queryable<BllExportNoticeDetail>()
@@ -520,6 +532,7 @@
                    Db.Updateable(pallet).ExecuteCommand();
                    //修改出库单明细拣货数量
                    noticeDetail.CompleteQty += pickQty;
                    noticeDetail.Status = "2";
                    Db.Updateable(noticeDetail).ExecuteCommand();
                    var num = Db.Queryable<BllExportNoticeDetail>()
@@ -527,7 +540,10 @@
                    if (num <= 0)
                    {
                        notice.Status = "4"; //更改为执行完成
                        noticeDetail.Status = "3";
                        Db.Updateable(noticeDetail).ExecuteCommand();
                    }
                    //修改出库单信息
                    Db.Updateable(notice).ExecuteCommand();
                }
@@ -535,7 +551,7 @@
                {
                    var biaoShi = "0";//0:整箱拣货、1:散支拣货、2:数量拣货
                    List<DataBoxInfo> boxInfos;
                    var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo);
                    var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo && m.StockDetailId == stockDetail.Id);
                    if (boxInfo.Count() == 0)
                    {
                        throw new Exception("未查询到该箱码及追溯码的信息");
@@ -576,18 +592,18 @@
                        biaoShi = "1";
                    }
                    else if (!string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)//数量拣货
                    else if (!string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)//数量拣货
                    {
                        if (boxInfo.Count() > 1)
                        {
                            throw new Exception("该箱码内存在支码不能进行数量拣货");
                        }
                        decimal boxQty = boxInfo.First().Qty;
                        if (Convert.ToInt32(pickQty1) > boxQty)
                        if (Convert.ToDecimal(pickQty1) > boxQty)
                        {
                            throw new Exception("拣货数量不能大于箱内数量");
                        }
                        if (Convert.ToInt32(pickQty1) > needQty)
                        if (Convert.ToDecimal(pickQty1) > needQty)
                        {
                            throw new Exception("拣货数量不能大于剩余待拣数量");
                        }
@@ -649,6 +665,7 @@
                        if (biaoShi != "2")
                        {
                            pickQty += item.Qty;
                            //删除库存箱码明细
                            Db.Deleteable(item).ExecuteCommand();
                        }
@@ -656,17 +673,20 @@
                        {
                            if (decimal.Parse(pickQty1) == item.Qty)
                            {
                                pickQty += item.Qty;
                                //删除库存箱码明细
                                Db.Deleteable(item).ExecuteCommand();
                            }
                            else
                            {
                                pickQty += decimal.Parse(pickQty1);
                                item.Qty -= decimal.Parse(pickQty1);
                                item.BitBoxMark = "1";//零箱标识
                                Db.Updateable(item).ExecuteCommand();
                            }
                        }
                        pickQty += item.Qty;
                    }
                    //改变库内箱码是否零箱信息
                    if (biaoShi == "1")
@@ -739,6 +759,7 @@
                    }
                    //修改出库单明细拣货数量
                    noticeDetail.CompleteQty += pickQty;
                    noticeDetail.Status = "2";
                    Db.Updateable(noticeDetail).ExecuteCommand();
                    var num = Db.Queryable<BllExportNoticeDetail>()
@@ -746,6 +767,9 @@
                    if (num <= 0)
                    {
                        notice.Status = "4"; //更改为执行完成
                        noticeDetail.Status = "3";
                        Db.Updateable(noticeDetail).ExecuteCommand();
                    }
                    //修改出库单信息
                    Db.Updateable(notice).ExecuteCommand();
@@ -809,7 +833,7 @@
                }
                //剩余拣货数量(待拣减去已拣)
                var needQty = allot.Qty - allot.CompleteQty;
                if (int.Parse(PickQty) > needQty)
                if (decimal.Parse(PickQty) > needQty)
                {
                    throw new Exception("拣货数量不能大于托内剩余待拣数量");
                }
@@ -872,7 +896,7 @@
                }
                else if (isComplete == 1)
                {
                    complete.CompleteQty += int.Parse(PickQty);
                    complete.CompleteQty += decimal.Parse(PickQty);
                    complete.UpdateUser = userId;
                    complete.UpdateTime = Db.GetDate();
@@ -880,7 +904,7 @@
                }
                //修改出库分配信息
                allot.CompleteQty += int.Parse(PickQty);
                allot.CompleteQty += decimal.Parse(PickQty);
                allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3";
                allot.UpdateTime = DateTime.Now;
                Db.Updateable(allot).ExecuteCommand();
@@ -889,8 +913,8 @@
                //删除或修改库存明细
                stockDetail.BitPalletMark = "1";//修改为零托标识
                stockDetail.Qty -= int.Parse(PickQty);
                stockDetail.LockQty -= int.Parse(PickQty);
                stockDetail.Qty -= decimal.Parse(PickQty);
                stockDetail.LockQty -= decimal.Parse(PickQty);
                if (stockDetail.Qty == stockDetail.LockQty)
                {
                    stockDetail.Status = "2";
@@ -913,8 +937,8 @@
                    Db.Updateable(stockDetail).ExecuteCommand();
                }
                //删除或修改库存
                stock.Qty -= int.Parse(PickQty);
                stock.LockQty -= int.Parse(PickQty);
                stock.Qty -= decimal.Parse(PickQty);
                stock.LockQty -= decimal.Parse(PickQty);
                if (stock.Qty <= 0)
                {
                    Db.Deleteable(stock).ExecuteCommand();
@@ -940,6 +964,7 @@
                //修改出库单明细拣货数量
                noticeDetail.CompleteQty += int.Parse(PickQty);
                noticeDetail.Status = "2";
                Db.Updateable(noticeDetail).ExecuteCommand();
                var num = Db.Queryable<BllExportNoticeDetail>()
@@ -947,6 +972,8 @@
                if (num <= 0)
                {
                    notice.Status = "4"; //更改为执行完成
                    noticeDetail.Status = "3";
                    Db.Updateable(noticeDetail).ExecuteCommand();
                }
                //修改出库单信息
                Db.Updateable(notice).ExecuteCommand();
@@ -1337,40 +1364,53 @@
                                    {
                                        #region 分配
                                        //添加分配表信息
                                        var allot = new BllExportAllot
                                        {
                                            SONo = "",
                                            WaveNo = "",
                                            SODetailNo = 0,
                                            StockId = s.Id,
                                            LotNo = "",
                                            LotText = "",
                                            SupplierLot = "",
                                            SkuNo = s.SkuNo,
                                            SkuName = s.SkuName,
                                            Standard = s.Standard,
                                            PalletNo = s.PalletNo,
                                            IsBale = "0", //是否裹包
                                            IsBelt = "0", //是否打带
                                        ////添加分配表信息
                                        //var allot = new BllExportAllot
                                        //{
                                        //    SONo = "",
                                        //    WaveNo = "",
                                        //    SODetailNo = 0,
                                        //    StockId = s.Id,
                                        //    LotNo = "",
                                        //    LotText = "",
                                        //    SupplierLot = "",
                                        //    SkuNo = s.SkuNo,
                                        //    SkuName = s.SkuName,
                                        //    Standard = s.Standard,
                                        //    PalletNo = s.PalletNo,
                                        //    IsBale = "0", //是否裹包
                                        //    IsBelt = "0", //是否打带
                                            //BoxexQty = s.Qty,
                                            Qty = (int)s.Qty,
                                            CompleteQty = 0,
                                            Status = "1",
                                            LogisticsId = 0,
                                            IsAdvance = "0",
                                            OutMode = model.OutMode,//出库口
                                        //    //BoxexQty = s.Qty,
                                        //    Qty = (int)s.Qty,
                                        //    CompleteQty = 0,
                                        //    Status = "1",
                                        //    LogisticsId = 0,
                                        //    IsAdvance = "0",
                                        //    OutMode = model.OutMode,//出库口
                                            CreateUser = userId,
                                            CreateTime = DateTime.Now
                                        };
                                        Db.Insertable(allot).ExecuteCommand();
                                        //    CreateUser = userId,
                                        //    CreateTime = DateTime.Now
                                        //};
                                        //Db.Insertable(allot).ExecuteCommand();
                                        #endregion
                                        #region 添加移库任务信息
                                        var stkModel = Db.Queryable<DataStockDetail>().First(m => m.LocatNo == slotBefore.LocatNo);
                                        string PalletNo = "LN000000";   // 默认演示托盘
                                        string SkuNo = "";
                                        if (stkModel != null)
                                        {
                                            PalletNo = stkModel.PalletNo;
                                            SkuNo = stkModel.SkuNo;
                                        }
                                        //获取移库的库位
                                        var newSlot = MoveAddress(slotBefore.LocatNo, slotBefore.RoadwayNo, SkuNo, slotBefore.AreaNo);
                                        if (string.IsNullOrWhiteSpace(newSlot))
                                        {
                                            continue;
                                        }
                                        var taskNo = new Common().GetMaxNo("TK");
                                        var exTask = new LogTask    //出库任务
                                        {
@@ -1379,9 +1419,9 @@
                                            Receiver = "PDA",
                                            IsSuccess = 1, //是否下发成功 0失败 1成功
                                            StartLocat = locat == null ? "" : s.LocatNo,//起始位置
                                            EndLocat = model.OutMode,//目标位置
                                            PalletNo = s.PalletNo,//托盘码
                                            StartLocat = slotBefore.LocatNo,//起始位置
                                            EndLocat = newSlot,//目标位置
                                            PalletNo = PalletNo,//托盘码
                                            IsSend = 1,//是否可再次下发
                                            IsCancel = 1,//是否可取消
                                            IsFinish = 1,//是否可完成
@@ -1390,7 +1430,7 @@
                                            OrderType = "1",//0 入库单 1 出库单  2 盘点单  3 移库单
                                            CreateTime = serverTime, //创建时间
                                            CreateUser = userId, //创建人
                                            Msg = "Pda空托从" + locat == null ? "" : s.LocatNo + "到" + model.OutMode + "的移库任务", //关键信息
                                            Msg = "Pda空托从" + locat == null ? "" : slotBefore.LocatNo + "到" + newSlot + "的移库任务", //关键信息
                                                                                                                             //FinishDate = serverTime, //完成时间
                                        };
                                        moveDto.Add(new OutCommandDto()
@@ -1398,10 +1438,10 @@
                                            PalletNo = exTask.PalletNo,//托盘号
                                            StartLocate = exTask.StartLocat, // 起始位置
                                            StartRoadway = locat.RoadwayNo, //所属巷道
                                            EndLocate = model.OutMode, // 目标位置
                                            EndLocate = exTask.EndLocat, // 目标位置
                                            TaskNo = exTask.TaskNo, // 任务号
                                            TaskType = "2",// 任务类型 (出库)
                                            OutMode = model.OutMode,  //目标地址
                                            TaskType = "2",// 任务类型 (移库)
                                            OutMode = "",  //目标地址
                                            Order = 1
                                        });
                                        Db.Insertable(exTask).ExecuteCommand();
@@ -1412,6 +1452,12 @@
                                        //更改储位状态为移出中
                                        slotBefore.Status = "5"; //5 移出中
                                        Db.Updateable(slotBefore).ExecuteCommand();//修改储位信息
                                        var newSlot2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == newSlot && m.IsDel == "0");
                                        if (newSlot2!= null)
                                        {
                                            newSlot2.Status = "4";//移入中
                                            Db.Updateable(newSlot2).ExecuteCommand();//修改储位信息
                                        }
                                        #endregion
                                    }
                                    else  //出库
@@ -1419,17 +1465,17 @@
                                        #region 改变库存
                                        //增加库存锁定数量
                                        stock.LockQty += (int)s.Qty; //锁定数量
                                        stock.LockQty += (int)pallSku.Qty; //锁定数量
                                        stock.UpdateTime = serverTime; //修改时间
                                        stock.UpdateUser = userId; //修改人
                                        Db.Updateable(stock).ExecuteCommand();//修改库存总表信息
                                        //增加库存明细锁定数量
                                        s.LockQty += (int)s.Qty; //锁定数量
                                        s.UpdateTime = serverTime; //修改时间
                                        s.UpdateUser = userId; //修改人
                                        s.Status = "2"; //2 已分配
                                        Db.Updateable(s).ExecuteCommand();//修改库存明细信息
                                        pallSku.LockQty += (int)pallSku.Qty; //锁定数量
                                        pallSku.UpdateTime = serverTime; //修改时间
                                        pallSku.UpdateUser = userId; //修改人
                                        pallSku.Status = "2"; //2 已分配
                                        Db.Updateable(pallSku).ExecuteCommand();//修改库存明细信息
                                        #endregion
@@ -1441,19 +1487,19 @@
                                            SONo = "",
                                            WaveNo = "",
                                            SODetailNo = 0,
                                            StockId = s.Id,
                                            StockId = pallSku.Id,
                                            LotNo = "",
                                            LotText = "",
                                            SupplierLot = "",
                                            SkuNo = s.SkuNo,
                                            SkuName = s.SkuName,
                                            Standard = s.Standard,
                                            PalletNo = s.PalletNo,
                                            SkuNo = pallSku.SkuNo,
                                            SkuName = pallSku.SkuName,
                                            Standard = pallSku.Standard,
                                            PalletNo = pallSku.PalletNo,
                                            IsBale = "0", //是否裹包
                                            IsBelt = "0", //是否打带
                                            //BoxexQty = s.Qty,
                                            Qty = (int)s.Qty,
                                            Qty = (int)pallSku.Qty,
                                            CompleteQty = 0,
                                            Status = "1",
                                            LogisticsId = 0,
@@ -1477,9 +1523,9 @@
                                            Receiver = "PDA",
                                            IsSuccess = 1, //是否下发成功 0失败 1成功
                                            StartLocat = locat == null ? "" : s.LocatNo,//起始位置
                                            StartLocat = locat == null ? "" : pallSku.LocatNo,//起始位置
                                            EndLocat = model.OutMode,//目标位置
                                            PalletNo = s.PalletNo,//托盘码
                                            PalletNo = pallSku.PalletNo,//托盘码
                                            IsSend = 1,//是否可再次下发
                                            IsCancel = 1,//是否可取消
                                            IsFinish = 1,//是否可完成
@@ -1488,7 +1534,7 @@
                                            OrderType = "1",//0 入库单 1 出库单  2 盘点单  3 移库单
                                            CreateTime = serverTime, //创建时间
                                            CreateUser = userId, //创建人
                                            Msg = "Pda空托从" + locat == null ? "" : s.LocatNo + "到" + model.OutMode + "的出库任务", //关键信息
                                            Msg = "Pda空托从" + locat == null ? "" : pallSku.LocatNo + "到" + model.OutMode + "的出库任务", //关键信息
                                                                                                                             //FinishDate = serverTime, //完成时间
                                        };
                                        outDto2.Add(new OutCommandDto()
@@ -1731,7 +1777,7 @@
                    }
                    ////更改储位状态为出库中
                    //locat.Status = "3"; //3 出库中
                    //locat.Status = "3"; //   1 有物品
                    //locat.UpdateTime = serverTime; //修改时间
                    //locat.UpdateUser = userId; //修改人
                    ////修改储位信息
@@ -2082,18 +2128,28 @@
                                        #endregion
                                        #region 添加移库任务信息
                                        var stkModel = Db.Queryable<DataStockDetail>().First(m=>m.LocatNo == slotBefore.LocatNo);
                                        string PalletNo = "LN000000";   // 默认演示托盘
                                        string SkuNo = "";
                                        if (stkModel != null)
                                        {
                                            PalletNo = stkModel.PalletNo;
                                            SkuNo= stkModel.SkuNo;
                                        }
                                        //获取移库的库位
                                        var newSlot = MoveAddress(slotBefore.LocatNo, slotBefore.RoadwayNo, SkuNo, slotBefore.AreaNo);
                                        var taskNo = new Common().GetMaxNo("TK");
                                        var exTask = new LogTask    //出库任务
                                        var exTask = new LogTask    // 移库任务
                                        {
                                            TaskNo = taskNo,
                                            Sender = "WMS",
                                            Receiver = "WCS",
                                            IsSuccess = 1, //是否下发成功 0失败 1成功
                                            StartLocat = locat == null ? "" : s.LocatNo,//起始位置
                                            EndLocat = model.OutMode,//目标位置
                                            PalletNo = s.PalletNo,//托盘码
                                            StartLocat = slotBefore.LocatNo,//起始位置
                                            EndLocat = newSlot,//目标位置
                                            PalletNo = PalletNo,//托盘码
                                            IsSend = 1,//是否可再次下发
                                            IsCancel = 1,//是否可取消
                                            IsFinish = 1,//是否可完成
@@ -2102,7 +2158,7 @@
                                            OrderType = "1",//0 入库单 1 出库单  2 盘点单  3 移库单
                                            CreateTime = serverTime, //创建时间
                                            CreateUser = userId, //创建人
                                            Msg = "WCS空托从" + locat == null ? "" : s.LocatNo + "到" + model.OutMode + "的移库任务", //关键信息
                                            Msg = "WCS空托从" + locat == null ? "" : s.LocatNo + "到" + newSlot + "的移库任务", //关键信息
                                                                                                                             //FinishDate = serverTime, //完成时间
                                        };
                                        moveDto.Add(new OutCommandDto()
@@ -2110,10 +2166,10 @@
                                            PalletNo = exTask.PalletNo,//托盘号
                                            StartLocate = exTask.StartLocat, // 起始位置
                                            StartRoadway = locat.RoadwayNo, //所属巷道
                                            EndLocate = model.OutMode, // 目标位置
                                            EndLocate = exTask.EndLocat, // 目标位置
                                            TaskNo = exTask.TaskNo, // 任务号
                                            TaskType = "2",// 任务类型 (出库)
                                            OutMode = model.OutMode,  //目标地址
                                            OutMode = "",  //目标地址
                                            Order = 1
                                        });
                                        Db.Insertable(exTask).ExecuteCommand();
@@ -2355,20 +2411,31 @@
        }
        public string MoveAddress(string oldAddress, string roadWay, string skuNo)//01020201  排-列-层-深度
        public string MoveAddress(string oldAddress, string roadWay, string skuNo,string areaNo="")//01020201  排-列-层-深度
        {
            string nowAddress = "";
            //根据物料编码获取对应区域
            var skuCategoryNo = Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.SkuNo == skuNo).Select(a => a.CategoryNo).First();
            var category = Db.Queryable<SysMaterialCategory>().First(a => a.IsDel == "0" && a.CategoryNo == skuCategoryNo);
            var category = new SysMaterialCategory();
            if (!string.IsNullOrEmpty(skuNo))
            {
                //根据物料编码获取对应区域
                var skuCategoryNo = Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.SkuNo == skuNo).Select(a => a.CategoryNo).First();
                category = Db.Queryable<SysMaterialCategory>().First(a => a.IsDel == "0" && a.CategoryNo == skuCategoryNo);
                areaNo = category.AreaNo;
            }
            else
            {
                //todo 待验证
                category = Db.Queryable<SysMaterialCategory>().First(a => a.IsDel == "0" && a.AreaNo == areaNo);
            }
            // 获取移库目标储位
            var row = int.Parse(oldAddress.Substring(0, 2));
            var lie = int.Parse(oldAddress.Substring(2, 2));
            var ceng = int.Parse(oldAddress.Substring(4, 2));
            var sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng}))  as distNum from SysStorageLocat where Flag = '0' and Status = '0' and Depth = '02' and RoadwayNo = '{roadWay}' and AreaNo in ('{category.AreaNo}') order by distNum;";
            var sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng}))  as distNum from SysStorageLocat where Flag = '0' and Status = '0' and Depth = '02' and RoadwayNo = '{roadWay}' and AreaNo in ('{areaNo}') order by distNum;";
            var addressModels = Db.Ado.SqlQuery<AddressCls>(sqlString).ToList();
            if (addressModels.Count > 0)   // 判断同巷道内排空库位
@@ -2683,7 +2750,7 @@
                    {
                        throw new Exception("托盘码不能为空");
                    }
                    if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)
                    if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)
                    {
                        throw new Exception("追溯条码和拣货数量不能同时输入");
                    }
@@ -2858,7 +2925,7 @@
                        }
                        biaoShi = "1";
                    }
                    else if (!string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)//数量拣货
                    else if (!string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)//数量拣货
                    {
                        if (boxInfo.Count() > 1)
                        {
@@ -3024,7 +3091,7 @@
                    {
                        throw new Exception("托盘码不能为空");
                    }
                    if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)
                    if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)
                    {
                        throw new Exception("追溯条码和拣货数量不能同时输入");
                    }
@@ -3112,18 +3179,18 @@
                        }
                        biaoShi = "1";
                    }
                    else if (!string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)//数量拣货
                    else if (!string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)//数量拣货
                    {
                        if (boxInfo.Count() > 1)
                        {
                            throw new Exception("该箱码内存在支码不能进行数量拣货");
                        }
                        decimal boxQty = boxInfo.First().Qty;
                        if (Convert.ToInt32(pickQty1) > boxQty)
                        if (Convert.ToDecimal(pickQty1) > boxQty)
                        {
                            throw new Exception("拣货数量不能大于箱内数量");
                        }
                        if (Convert.ToInt32(pickQty1) > needQty)
                        if (Convert.ToDecimal(pickQty1) > needQty)
                        {
                            throw new Exception("拣货数量不能大于剩余待拣数量");
                        }
@@ -3188,6 +3255,7 @@
                        if (biaoShi != "2")
                        {
                            pickQty += item.Qty;
                            //删除库存箱码明细
                            Db.Deleteable(item).ExecuteCommand();
                        }
@@ -3195,17 +3263,19 @@
                        {
                            if (decimal.Parse(pickQty1) == item.Qty)
                            {
                                pickQty += item.Qty;
                                //删除库存箱码明细
                                Db.Deleteable(item).ExecuteCommand();
                            }
                            else
                            {
                                pickQty += decimal.Parse(pickQty1);
                                item.Qty -= decimal.Parse(pickQty1);
                                item.BitBoxMark = "1";//零箱标识
                                Db.Updateable(item).ExecuteCommand();
                            }
                        }
                        pickQty += item.Qty;
                    }
                    //改变库内箱码是否零箱信息
                    if (biaoShi == "1")
@@ -3299,6 +3369,7 @@
                throw new Exception(e.Message);
            }
        }
        //取样出库拣货(无标签)
        public void SampleSoSetQtyPick(string soType, string soNo, string soDetailId, string palletNo, string PickQty, string asnNo, int userId)
@@ -3483,7 +3554,7 @@
                            SkuName = allot2.SkuName,
                            Standard = allot2.Standard,
                            PalletNo = palletNo,
                            CompleteQty = int.Parse(PickQty),
                            CompleteQty = decimal.Parse(PickQty),
                            InspectMark = "1",
                            CreateUser = userId
@@ -3495,7 +3566,7 @@
                    }
                    else if (isComplete == 1)
                    {
                        complete.CompleteQty += int.Parse(PickQty);
                        complete.CompleteQty += decimal.Parse(PickQty);
                        complete.UpdateUser = userId;
                        complete.UpdateTime = Db.GetDate();
@@ -3505,8 +3576,8 @@
                    //修改出库分配信息
                    allot2.Qty += int.Parse(PickQty);
                    allot2.CompleteQty += int.Parse(PickQty);
                    allot2.Qty += decimal.Parse(PickQty);
                    allot2.CompleteQty += decimal.Parse(PickQty);
                    Db.Updateable(allot2).ExecuteCommand();
                    int isDel = 0;
@@ -3514,7 +3585,7 @@
                    //删除或修改库存明细
                    stockDetail.BitPalletMark = "1";//修改为零托标识
                    stockDetail.InspectMark = "1";//修改为抽检托标识
                    stockDetail.Qty -= int.Parse(PickQty);
                    stockDetail.Qty -= decimal.Parse(PickQty);
                    if (stockDetail.Qty == stockDetail.LockQty && stockDetail.Qty != 0)
                    {
                        stockDetail.Status = "2";
@@ -3562,10 +3633,10 @@
                    }
                    //修改出库单明细拣货数量
                    noticeDetail.Qty += int.Parse(PickQty);
                    noticeDetail.AllotQty += int.Parse(PickQty);
                    noticeDetail.FactQty += int.Parse(PickQty);
                    noticeDetail.CompleteQty += int.Parse(PickQty);
                    noticeDetail.Qty += decimal.Parse(PickQty);
                    noticeDetail.AllotQty += decimal.Parse(PickQty);
                    noticeDetail.FactQty += decimal.Parse(PickQty);
                    noticeDetail.CompleteQty += decimal.Parse(PickQty);
                    noticeDetail.Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * noticeDetail.Qty;
                    Db.Updateable(noticeDetail).ExecuteCommand();
@@ -3614,7 +3685,7 @@
                    }
                    //剩余拣货数量(待拣减去已拣)
                    var needQty = allot.Qty - allot.CompleteQty;
                    if (int.Parse(PickQty) > needQty)
                    if (decimal.Parse(PickQty) > needQty)
                    {
                        throw new Exception("拣货数量不能大于托内剩余待拣数量");
                    }
@@ -3664,7 +3735,7 @@
                            SkuName = allot.SkuName,
                            Standard = allot.Standard,
                            PalletNo = palletNo,
                            CompleteQty = int.Parse(PickQty),
                            CompleteQty = decimal.Parse(PickQty),
                            CreateUser = userId,
                            CreateTime = Db.GetDate(),
@@ -3676,7 +3747,7 @@
                    }
                    else if (isComplete == 1)
                    {
                        complete.CompleteQty += int.Parse(PickQty);
                        complete.CompleteQty += decimal.Parse(PickQty);
                        complete.UpdateUser = userId;
                        complete.UpdateTime = Db.GetDate();
@@ -3686,7 +3757,7 @@
                    //修改出库分配信息
                    allot.CompleteQty += int.Parse(PickQty);
                    allot.CompleteQty += decimal.Parse(PickQty);
                    allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3";
                    allot.UpdateTime = DateTime.Now;
@@ -3696,8 +3767,8 @@
                    //删除或修改库存明细
                    stockDetail.BitPalletMark = "1";//修改为零托标识
                    stockDetail.Qty -= int.Parse(PickQty);
                    stockDetail.LockQty -= int.Parse(PickQty);
                    stockDetail.Qty -= decimal.Parse(PickQty);
                    stockDetail.LockQty -= decimal.Parse(PickQty);
                    if (stockDetail.Qty == stockDetail.LockQty)
                    {
                        stockDetail.Status = "2";
@@ -3720,8 +3791,8 @@
                        Db.Updateable(stockDetail).ExecuteCommand();
                    }
                    //删除或修改库存
                    stock.Qty -= int.Parse(PickQty);
                    stock.LockQty -= int.Parse(PickQty);
                    stock.Qty -= decimal.Parse(PickQty);
                    stock.LockQty -= decimal.Parse(PickQty);
                    if (stock.Qty <= 0)
                    {
                        Db.Deleteable(stock).ExecuteCommand();
@@ -3746,7 +3817,7 @@
                    }
                    //修改出库单明细拣货数量
                    noticeDetail.CompleteQty += int.Parse(PickQty);
                    noticeDetail.CompleteQty += decimal.Parse(PickQty);
                    Db.Updateable(noticeDetail).ExecuteCommand();
                    var num = Db.Queryable<BllExportNoticeDetail>()
@@ -3803,7 +3874,7 @@
                {
                    throw new Exception("托盘码不能为空");
                }
                if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)
                if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)
                {
                    throw new Exception("追溯条码和拣货数量不能同时输入");
                }
@@ -3825,10 +3896,14 @@
                {
                    throw new Exception("未查询到该出库单的信息");
                }
                if (notice.Status != "3")
                if (notice.Type != "1" && notice.Type != "2" && notice.Type != "3")
                {
                    throw new Exception("出库单的状态不是正在执行,不能拣货");
                    if (notice.Status != "3")
                    {
                        throw new Exception("出库单的状态不是正在执行,不能拣货");
                    }
                }
                //出库单明细
                var noticeDetail = Db.Queryable<BllExportNoticeDetail>()
                    .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId));
@@ -3865,7 +3940,7 @@
                #region 拼托信息
                var sdId = 0;
                bool isNew = false;
                var pinStockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.SkuNo == allot.SkuNo && m.LotNo == allot.LotNo);
                var pinStockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew);
                if (pinStockDetail != null)
                {
                    if (palletNo != palletNoNew)//非整托拣货
@@ -4036,6 +4111,7 @@
                   
                    //修改出库单明细拣货数量
                    noticeDetail.CompleteQty += pickQty;
                    noticeDetail.Status = "2";
                    Db.Updateable(noticeDetail).ExecuteCommand();
                    var num = Db.Queryable<BllExportNoticeDetail>()
@@ -4043,6 +4119,8 @@
                    if (num <= 0)
                    {
                        notice.Status = "4"; //更改为执行完成
                        noticeDetail.Status = "3";
                        Db.Updateable(noticeDetail).ExecuteCommand();
                    }
                    //修改出库单信息
                    Db.Updateable(notice).ExecuteCommand();
@@ -4051,7 +4129,7 @@
                {
                    var biaoShi = "0";//0:整箱拣货、1:散支拣货、2:数量拣货
                    List<DataBoxInfo> boxInfos;
                    var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo);
                    var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo && m.StockDetailId == stockDetail.Id);
                    if (boxInfo.Count() == 0)
                    {
                        throw new Exception("未查询到该箱码及追溯码的信息");
@@ -4092,18 +4170,18 @@
                        biaoShi = "1";
                    }
                    else if (!string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)//数量拣货
                    else if (!string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)//数量拣货
                    {
                        if (boxInfo.Count() > 1)
                        {
                            throw new Exception("该箱码内存在支码不能进行数量拣货");
                        }
                        decimal boxQty = boxInfo.First().Qty;
                        if (Convert.ToInt32(pickQty1) > boxQty)
                        if (decimal.Parse(pickQty1) > boxQty)
                        {
                            throw new Exception("拣货数量不能大于箱内数量");
                        }
                        if (Convert.ToInt32(pickQty1) > needQty)
                        if (decimal.Parse(pickQty1) > needQty)
                        {
                            throw new Exception("拣货数量不能大于剩余待拣数量");
                        }
@@ -4188,6 +4266,8 @@
                        }
                        else//数量拣货
                        {
                            var boxInfo2 = Db.Queryable<DataBoxInfo>().First(m => m.IsDel == "0" && m.BoxNo == boxNo && m.StockDetailId == sdId);
                            if (decimal.Parse(pickQty1) == item.Qty)
                            {
                                //修改库存箱码明细
@@ -4199,12 +4279,56 @@
                            }
                            else
                            {
                                if (boxInfo2 == null)
                                {
                                    var dataBoxInfo = new DataBoxInfo()
                                    {
                                        StockDetailId = sdId,
                                        BindNo = item.BindNo,
                                        BoxNo = item.BoxNo,
                                        BoxNo2 = item.BoxNo2,
                                        BoxNo3 = item.BoxNo3,
                                        PalletNo = item.PalletNo,
                                        PalletNo2 = item.PalletNo2,
                                        PalletNo3 = item.PalletNo3,
                                        Qty = decimal.Parse(pickQty1),
                                        FullQty = item.FullQty,
                                        Status = "5",
                                        LotNo = item.LotNo,
                                        LotText = item.LotText,
                                        SkuNo = item.SkuNo,
                                        SkuName = item.SkuName,
                                        Standard = item.Standard,
                                        ProductionTime = item.ProductionTime,
                                        SupplierLot = item.SupplierLot,
                                        InspectMark = item.InspectMark,
                                        BitBoxMark = "1",
                                        InspectStatus = item.InspectStatus,
                                        InspectTime = item.InspectTime,
                                    };
                                    Db.Insertable(dataBoxInfo).ExecuteCommand();
                                }
                                else
                                {
                                    boxInfo2.Qty += decimal.Parse(pickQty1);
                                    item.BitBoxMark = boxInfo2.Qty>= boxInfo2.FullQty? "0":"1" ;//零箱标识
                                    Db.Updateable(boxInfo2).ExecuteCommand();
                                }
                                item.Qty -= decimal.Parse(pickQty1);
                                item.BitBoxMark = "1";//零箱标识
                                Db.Updateable(item).ExecuteCommand();
                                if (item.Qty<=0)
                                {
                                    Db.Deleteable(item).ExecuteCommand();
                                }
                                else
                                {
                                    Db.Updateable(item).ExecuteCommand();
                                }
                            }
                            pickQty += int.Parse(pickQty1);
                            pickQty += decimal.Parse(pickQty1);
                        }
                    }
                    //改变库内箱码是否零箱信息
@@ -4268,6 +4392,7 @@
                    }
                    //修改出库单明细拣货数量
                    noticeDetail.CompleteQty += pickQty;
                    noticeDetail.Status = "2";
                    Db.Updateable(noticeDetail).ExecuteCommand();
                    var num = Db.Queryable<BllExportNoticeDetail>()
@@ -4275,17 +4400,21 @@
                    if (num <= 0)
                    {
                        notice.Status = "4"; //更改为执行完成
                        noticeDetail.Status = "3";
                        Db.Updateable(noticeDetail).ExecuteCommand();
                    }
                    //修改出库单信息
                    Db.Updateable(notice).ExecuteCommand();
                }
                if (isNew)
                {
                    sd.Qty = pickQty;
                    sd.LockQty = pickQty;
                    var sd2 = Db.Queryable<DataStockDetail>().First(m=>m.Id == sdId);
                    sd2.Qty = pickQty;
                    sd2.LockQty = pickQty;
                    Db.Updateable(sd).ExecuteCommand();
                    Db.Updateable(sd2).ExecuteCommand();
                }
                else
                {
@@ -4369,7 +4498,7 @@
                }
                //剩余拣货数量(待拣减去已拣)
                var needQty = allot.Qty - allot.CompleteQty;
                if (int.Parse(PickQty) > needQty)
                if (decimal.Parse(PickQty) > needQty)
                {
                    throw new Exception("拣货数量不能大于托内剩余待拣数量");
                }
@@ -4388,7 +4517,7 @@
                }
                if (palletNo == palletNoNew)//原托盘与新托盘一致
                {
                    if (int.Parse(PickQty) != stockDetail.Qty)
                    if (decimal.Parse(PickQty) != stockDetail.Qty)
                    {
                        throw new Exception("原托盘与新托盘一致,需要把托盘上所有数量拣货");
                    }
@@ -4437,8 +4566,8 @@
                    sd.SkuName = stockDetail.SkuName;
                    sd.Standard = stockDetail.Standard;
                    sd.Qty = int.Parse(PickQty);
                    sd.LockQty = int.Parse(PickQty);
                    sd.Qty = decimal.Parse(PickQty);
                    sd.LockQty = decimal.Parse(PickQty);
                    sd.FrozenQty = 0;
                    sd.InspectQty = 0;
@@ -4481,8 +4610,8 @@
                    if (palletNo != palletNoNew)
                    {
                        //修改拼托托盘库存明细
                        pinStockDetail.Qty += int.Parse(PickQty);
                        pinStockDetail.LockQty += int.Parse(PickQty);
                        pinStockDetail.Qty += decimal.Parse(PickQty);
                        pinStockDetail.LockQty += decimal.Parse(PickQty);
                        Db.Updateable(pinStockDetail).ExecuteCommand();
                    }
                    else
@@ -4526,7 +4655,7 @@
                        SkuName = allot.SkuName,
                        Standard = allot.Standard,
                        PalletNo = palletNo,
                        CompleteQty = int.Parse(PickQty),
                        CompleteQty = decimal.Parse(PickQty),
                        CreateUser = userId,
                        CreateTime = Db.GetDate(),
@@ -4538,7 +4667,7 @@
                }
                else if (isComplete == 1)
                {
                    complete.CompleteQty += int.Parse(PickQty);
                    complete.CompleteQty += decimal.Parse(PickQty);
                    complete.UpdateUser = userId;
                    complete.UpdateTime = Db.GetDate();
@@ -4546,7 +4675,7 @@
                }
                //修改出库分配信息
                allot.CompleteQty += int.Parse(PickQty);
                allot.CompleteQty += decimal.Parse(PickQty);
                allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3";
                allot.UpdateTime = DateTime.Now;
                Db.Updateable(allot).ExecuteCommand();
@@ -4557,8 +4686,8 @@
                {
                    //删除或修改库存明细
                    stockDetail.BitPalletMark = "1";//修改为零托标识
                    stockDetail.Qty -= int.Parse(PickQty);
                    stockDetail.LockQty -= int.Parse(PickQty);
                    stockDetail.Qty -= decimal.Parse(PickQty);
                    stockDetail.LockQty -= decimal.Parse(PickQty);
                    if (stockDetail.Qty == stockDetail.LockQty)
                    {
                        stockDetail.Status = "2";
@@ -4600,7 +4729,8 @@
                }
                //修改出库单明细拣货数量
                noticeDetail.CompleteQty += int.Parse(PickQty);
                noticeDetail.CompleteQty += decimal.Parse(PickQty);
                noticeDetail.Status = "2";
                Db.Updateable(noticeDetail).ExecuteCommand();
                var num = Db.Queryable<BllExportNoticeDetail>()
@@ -4608,6 +4738,8 @@
                if (num <= 0)
                {
                    notice.Status = "4"; //更改为执行完成
                    noticeDetail.Status = "3";
                    Db.Updateable(noticeDetail).ExecuteCommand();
                }
                //修改出库单信息
                Db.Updateable(notice).ExecuteCommand();