·
hwh
2025-01-15 131347ad63bb534b5abb6dbc979f0a47d780d8ff
Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs
@@ -33,7 +33,7 @@
        #region 接口方法
        //JC23绑定物料托盘即增加库存
        //JC26绑定物料托盘即增加库存
        public void BindPalletStock(BoxPalletBindVm model, int userId)
        {
            try
@@ -72,10 +72,10 @@
                    {
                        throw new Exception("单据号不可为空!");
                    }
                    if (model.AsnDetailNo == 0)
                    {
                        throw new Exception("单据明细不可为空!");
                    }
                    //if (model.AsnDetailNo == 0)
                    //{
                    //    throw new Exception("单据明细不可为空!");
                    //}
                    //根据单据号获取入库单总单
                    notice = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.ASNNo == model.AsnNo && a.OrderCode == model.OrderCode);
                    if (notice.Status != "0" && notice.Status != "1" && notice.Status != "2")
@@ -91,15 +91,17 @@
                        throw new Exception("批次不能为空!");
                    }
                    // 验证入库单明细是否存在
                    detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailNo && m.ASNNo == model.AsnNo && m.LotNo == model.LotNo && m.SkuNo == model.SkuNo);
                    detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0"
                    && m.ASNNo == model.AsnNo && m.LotNo == model.LotNo && m.SkuNo == model.SkuNo);
                    if (detail == null)
                    {
                        throw new Exception("当前物料及批次与单据无关联,请核实!");
                    }
                    model.AsnDetailNo = detail.Id;
                }
                #endregion
@@ -113,13 +115,13 @@
                {
                    throw new Exception("未查询到托盘信息,请核实!");
                }
                #region 包装
                var package = Db.Queryable<SysPackag>().Where(m => m.IsDel == "0");
                var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == model.SkuNo);
                SysPackag pack = null ;
                SysPackag pack = null;
                if (model.Type == "0")
                {
                    pack = package.First(m => m.IsDel == "0" && m.PackagNo == detail.PackagNo);    // liudl 由Sku包装编号变更为入库单明细包装编号
@@ -128,7 +130,7 @@
                {
                    pack = package.First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo);    // liudl 由Sku包装编号变更为入库单明细包装编号
                }
                var pNum = 0;//托盘物品数量 
                var bNum = 0;//箱码物品数量 
@@ -172,7 +174,7 @@
                #region 验证是否允许立库同托盘不同物料入库或同托盘同物料不同批次入库
                var list = model.Detail.GroupBy(m => new { m.SkuNo, m.LotNo }).ToList();
                if (list.Count>=2)
                if (list.Count >= 2)
                {
                    var funSetting = Db.Queryable<SysFunSetting>().First(a => a.IsDel == "0" && a.FunSetNo == "Fun045");
                    if (funSetting == null || funSetting.IsEnable == "OFF")
@@ -180,7 +182,7 @@
                        throw new Exception($"不允许立库同托盘不同物料入库或同托盘不同批次入库!");
                    }
                }
                #endregion
                //liudl  && m.Status != "2"  组盘既入库完成无需根据托盘状态判断
@@ -204,10 +206,10 @@
                        SupplierLot = model.SupplierLot,
                        //InspectMark = model.IsSample,      //是否取样托盘  后期业务开发时 接口传值需添加对应字段判断
                        //SamplingQty = 0,     //取样数量  后期业务开发时 接口传值需添加对应字段判断
                        BitPalletMark = model.Qty == pNum ? "0": "1",
                        BitPalletMark = model.Qty == pNum ? "0" : "1",
                        IsBale = "0",
                        IsBelt = "0",
                        CreateUser = userId,
                        CreateUser = userId,
                    };
                    if (bind.FullQty < bind.Qty)
@@ -227,7 +229,9 @@
                BllQualityInspect quality = new BllQualityInspect();
                if (model.Type == "0")
                {
                    quality = Db.Queryable<BllQualityInspect>().Where(a => a.IsDel == "0" && a.SkuNo == detail.SkuNo && a.LotNo == detail.LotNo).OrderByDescending(a => a.CreateTime).First();
                    quality = Db.Queryable<BllQualityInspect>()
                        .Where(a => a.IsDel == "0" && a.SkuNo == detail.SkuNo && a.LotNo == detail.LotNo)
                        .OrderByDescending(a => a.CreateTime).First();
                }
                DataStockDetail sd1 = null;
@@ -242,7 +246,7 @@
                    sd1 = Db.Queryable<DataStockDetail>()
                  .First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo);
                }
                var sdId1 = 0;
                if (sd1 != null)
                {
@@ -265,7 +269,7 @@
                        InspectQty = 0,
                        ASNNo = bind.ASNNo,
                        ASNDetailNo = bind.ASNDetailNo,
                        WareHouseNo = "",//所属仓库
                        WareHouseNo = "W01",//所属仓库
                        RoadwayNo = "",//所属巷道
                        AreaNo = "",//所属区域
                        LocatNo = "",//储位地址
@@ -280,11 +284,11 @@
                        InspectMark = bind.InspectMark,
                        InspectStatus = sku.IsInspect,
                        BitPalletMark = bind.BitPalletMark,
                        PackagNo = model.Type =="0"? detail.PackagNo : sku.PackagNo,                    //liudl 由sku的包装编号变为入库单明细的包装编码
                        PackagNo = model.Type == "0" ? detail.PackagNo : sku.PackagNo,                    //liudl 由sku的包装编号变为入库单明细的包装编码
                        IsBale = bind.IsBale,
                        IsBelt = bind.IsBelt,
                        OwnerNo = model.Type == "0" ? notice.CustomerNo: null,//货主编码
                        OwnerName = model.Type == "0" ? notice.CustomerName :null,//货主名称
                        OwnerNo = model.Type == "0" ? notice.CustomerNo : null,//货主编码
                        OwnerName = model.Type == "0" ? notice.CustomerName : null,//货主名称
                        IsDel = "0",
                        CreateUser = 0,
                        CreateTime = comTime
@@ -357,8 +361,8 @@
                            CreateUser = userId,
                            CreateTime = comTime,
                        };
                        boxInfoList.Add(boxInfo);
                        boxInfoList.Add(boxInfo);
                        factQty += box.Qty;
                        #region 库存箱码明细
@@ -399,10 +403,11 @@
                }
                else if (model.Type == "0")//物料托
                {
                    if (model.Detail.Count(m=>m.OrderCode != detail.OrderDetailCode)>0)
                    {
                        throw new Exception($"托盘绑定明细中,含有箱码生产工单不一致");
                    }
                    // 使用场景不明确
                    //if (model.Detail.Count(m => m.OrderCode != detail.OrderDetailCode) > 0)
                    //{
                    //    throw new Exception($"托盘绑定明细中,含有箱码生产工单不一致");
                    //}
                    if (model.Detail.Count(m => m.SkuNo != model.SkuNo || m.LotNo != model.LotNo) > 0)
                    {
                        throw new Exception($"托盘绑定明细中,含有箱码物料或批次不一致");
@@ -443,8 +448,8 @@
                                Standard = box.Standard,
                                PackageStandard = box.PackageStandard,
                                StoreTime = box.StoreTime,
                                QtyCount = (int)box.QtyCount,
                                QtyOrd = (int)box.QtyOrd,
                                QtyCount = box.QtyCount,
                                QtyOrd = box.QtyOrd,
                                CreateUser = userId,
                                CreateTime = comTime,
                            };
@@ -486,19 +491,19 @@
                            throw new Exception($"绑定失败,{g.Key}箱码绑定数量大于该物品包装数量!");
                        }
                    }
                }
                }
                Db.Insertable(boxInfoList).ExecuteCommand();
                #endregion
                if (factQty != bind.Qty)
                {
                    throw new Exception("箱码明细总数量不同于托盘总数量,请核实");
                }
                #region 入库单及明细
                if (model.Type =="0")
                if (model.Type == "0")
                {
                    detail.FactQty += factQty;//已组数量
                    detail.CompleteQty += factQty;//完成数量
@@ -529,7 +534,7 @@
                    //更新入库单
                    Db.Updateable(notice).ExecuteCommand();
                }
                #endregion
                #region 库存
@@ -537,7 +542,7 @@
                if (dataStock != null)
                {
                    dataStock.Qty += factQty;
                    if (bind.InspectMark == "1")
                    {
                        dataStock.IsSampling = bind.InspectMark;
@@ -573,7 +578,7 @@
                    Db.Insertable(stock).ExecuteCommand();
                }
                #endregion
                // 更改托盘使用状态
                var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{model.PalletNo}';";
                //添加托盘记录表数据
@@ -592,7 +597,7 @@
        #endregion
        #region 托盘绑定
        #region 组托收货
        public List<PalletBindDto> GetPalletBindList(PalletBindVm model, out int count)
        {
            try
@@ -601,8 +606,17 @@
                if (!string.IsNullOrWhiteSpace(model.SkuNo) || !string.IsNullOrWhiteSpace(model.SkuName))
                {
                    var detailList = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && m.SkuNo.Contains(model.SkuNo.Trim()) && m.SkuName.Contains(model.SkuName.Trim())).Select(m => m.Id).Distinct().ToList();
                    var detailList = Db.Queryable<BllArrivalNoticeDetail>()
                        .Where(m => m.IsDel == "0" && m.SkuNo.Contains(model.SkuNo.Trim()) && m.SkuName.Contains(model.SkuName.Trim()))
                        .Select(m => m.Id).Distinct().ToList();
                    strList = detailList;
                    if (strList.Count <= 0)
                    {
                        // 物料编码、名称检索失败直接返回null
                        count = 0;
                        return null;
                    }
                }
                Expression<Func<BllPalletBind, bool>> item = Expressionable.Create<BllPalletBind>()
                  .AndIF(!string.IsNullOrWhiteSpace(model.ASNNo), it => it.ASNNo.Contains(model.ASNNo.Trim()))
@@ -614,7 +628,7 @@
                  .AndIF(!string.IsNullOrWhiteSpace(model.LotNo), it => it.LotNo.Contains(model.LotNo.Trim()))
                  .AndIF(!string.IsNullOrWhiteSpace(model.LotText), it => it.LotText.Contains(model.LotText.Trim()))
                  .AndIF(!string.IsNullOrWhiteSpace(model.StartTime), it => it.CreateTime >= Convert.ToDateTime(model.StartTime))
                  .AndIF(!string.IsNullOrWhiteSpace(model.EndTime), it => it.CreateTime <= Convert.ToDateTime(model.EndTime))
                  .AndIF(!string.IsNullOrWhiteSpace(model.EndTime), it => it.CreateTime <= Convert.ToDateTime(model.EndTime).AddDays(1))
                  .AndIF(!string.IsNullOrWhiteSpace(model.Status), it => it.Status == model.Status)
                  .And(m => m.IsDel == "0")
                  .ToExpression();//注意 这一句 不能少
@@ -624,9 +638,10 @@
                    .LeftJoin<BllArrivalNoticeDetail>((a, b) => a.ASNDetailNo == b.Id)
                    .LeftJoin<SysUserInfor>((a, b, c) => a.CreateUser == c.Id)
                    .LeftJoin<SysUserInfor>((a, b, c, d) => a.UpdateUser == d.Id)
                    //.LeftJoin<SysStorageLocat>((a, b, c, d, e) => a.LocatNo == e.LocatNo)
                    .LeftJoin<SysStorageLocat>((a, b, c, d, e) => a.LocatNo == e.LocatNo)
                    .LeftJoin<SysWareHouse>((a, b, c, d, e,f) => a.WareHouseNo == f.WareHouseNo)
                    //.LeftJoin<BllBoxInfo>((a, b, c, d, e, f) => a.Id == e.BindNo)
                    .Select((a, b, c, d) => new PalletBindDto()
                    .Select((a, b, c, d,e,f) => new PalletBindDto()
                    {
                        Id = a.Id,
                        ASNNo = a.ASNNo,
@@ -638,6 +653,7 @@
                        LocatNo = a.LocatNo,
                        RoadwayNo = a.RoadwayNo,
                        WareHouseNo = a.WareHouseNo,
                        WareHouseName = a.WareHouseNo+"-"+f.WareHouseName,
                        Qty = a.Qty,
                        FullQty = a.FullQty,
                        SamplingQty = a.SamplingQty,
@@ -671,6 +687,7 @@
                throw new Exception(ex.Message);
            }
        }
        public List<BoxInfoDto> GetBoxInfoList(BoxInfoVm model, out int count)
        {
@@ -712,7 +729,7 @@
                    {
                        BoxNo = a.BoxNo,
                        PalletNo = a.PalletNo,
                        BindNo=a.BindNo,
                        BindNo = a.BindNo,
                        Qty = SqlFunc.AggregateSum(a.Qty),
                        SamplingQty = SqlFunc.AggregateSum(a.SamplingQty),
                        FullQty = a.FullQty,
@@ -743,7 +760,7 @@
        /// <param name="boxNo">箱码</param>
        /// <param name="boxNo3">支码</param>
        /// <returns></returns>
        public List<BoxInfoDto> GetBoxInfoByBoxNo(string boxNo, string boxNo3,int bindNo)
        public List<BoxInfoDto> GetBoxInfoByBoxNo(string boxNo, string boxNo3, int bindNo)
        {
            Expression<Func<BllBoxInfo, bool>> item = Expressionable.Create<BllBoxInfo>()
                .AndIF(!string.IsNullOrWhiteSpace(boxNo), it => it.BoxNo == boxNo.Trim())
@@ -805,16 +822,16 @@
                #region 验证当前托盘信息是否可删除
                // 判断订单是否关闭
                var asnData = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == bind.ASNNo);
                if (asnData != null)
                if (asnData != null)
                {
                    if (asnData.Status == "3" ||asnData.Status == "4")
                    if (asnData.Status == "3" || asnData.Status == "4")
                    {
                        throw new Exception("单据已关单不可删除");
                    }
                }
                // 判断是否已有巷道和储位
                if ( !string.IsNullOrWhiteSpace(bind.LocatNo) || !string.IsNullOrWhiteSpace(bind.RoadwayNo) )
                if (!string.IsNullOrWhiteSpace(bind.LocatNo) || !string.IsNullOrWhiteSpace(bind.RoadwayNo))
                {
                    throw new Exception("托盘已上架不可删除组托");
                }
@@ -827,9 +844,9 @@
                {
                    throw new Exception("库内不存在此托盘!");
                }
                else
                else
                {
                    if (dataBindItem.Status != "0")
                    if (dataBindItem.Status != "0")
                    {
                        throw new Exception("托盘不是待分配状态,不可删除");
                    }
@@ -842,35 +859,35 @@
                {
                    throw new Exception("库内不存在此托盘上物料批次信息!");
                }
                if (dataStocks.Qty - dataBindItem.Qty < dataStocks.LockQty)
                if (dataStocks.Qty - dataBindItem.Qty < dataStocks.LockQty)
                {
                    throw new Exception("托盘上货物已被锁定不可删除");
                }
                // 验证库内托盘信息和绑定托盘信息是否一致
                var bllboxItem = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BindNo == bind.Id).ToList();
                var databoxItem = new List<DataBoxInfo>();
                if (bllboxItem.Count == 0)
                if (bllboxItem.Count == 0)
                {
                    // 按数量组托,没有箱支关系
                    if (dataBindItem.ASNDetailNo != bind.ASNDetailNo
                        || dataBindItem.ASNNo != bind.ASNNo
                        || dataBindItem.LotNo != bind.LotNo
                        || dataBindItem.Qty != bind.Qty)
                        || dataBindItem.LotNo != bind.LotNo
                        || dataBindItem.Qty != bind.Qty)
                    {
                        throw new Exception("托盘上货物已变更不可删除");
                    }
                }
                else
                else
                {
                    // 循环对比箱支关系是否存在
                    foreach (BllBoxInfo box in bllboxItem)
                    foreach (BllBoxInfo box in bllboxItem)
                    {
                        var databox = Db.Queryable<DataBoxInfo>()
                            .First(m => m.IsDel == "0" && m.BoxNo == box.BoxNo
                            .First(m => m.IsDel == "0" && m.BoxNo == box.BoxNo
                            && m.BoxNo2 == box.BoxNo2 && m.BoxNo3 == box.BoxNo3);
                        if (databox == null)
                        if (databox == null)
                        {
                            throw new Exception("托盘上货物已变更不可删除");
                        }
@@ -882,13 +899,13 @@
                // 验证是否已有入库任务
                var taskitem = new LogTask();
                if (!string.IsNullOrWhiteSpace(bind.TaskNo))
                if (!string.IsNullOrWhiteSpace(bind.TaskNo))
                {
                    taskitem = Db.Queryable<LogTask>().First(m => m.TaskNo == bind.TaskNo);
                    if (taskitem != null)
                    if (taskitem != null)
                    {
                        if (taskitem.IsSuccess == 1)
                        if (taskitem.IsSuccess == 1)
                        {
                            throw new Exception("托盘关联的入库任务已下发不可删除");
                        }
@@ -907,10 +924,10 @@
                var time = DateTime.Now;
                //托盘绑定的箱支信息集合
                //var boxList = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BindNo == bind.Id).ToList();
                if (bllboxItem.Count != 0)
                if (bllboxItem.Count != 0)
                {
                    var ids = databoxItem.Select(m => m.StockDetailId).Distinct().ToList();
                    var dataStockDetail = Db.Queryable<DataStockDetail>().Where(m=>m.IsDel == "0" && ids.Contains(m.Id)).ToList();
                    var dataStockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && ids.Contains(m.Id)).ToList();
                    var stockItem = new List<DataStock>();
                    foreach (var item in dataStockDetail)
                    {
@@ -920,10 +937,10 @@
                            stockItem.Add(dataStock);
                        }
                    }
                    foreach (var b in bllboxItem)
                    {
                        b.IsDel = "0";
                        b.IsDel = "0";
                        b.PalletNo = "";
                        b.BindNo = null;
                        b.Status = "0";
@@ -936,7 +953,7 @@
                            throw new Exception($"{b.BoxNo}箱码、{b.BoxNo3}支码删除失败");
                        }
                        //删除库存箱码明细信息
                        var box = databoxItem.FirstOrDefault(m=>m.BoxNo == b.BoxNo && m.BoxNo2 == b.BoxNo2 && m.BoxNo3 == b.BoxNo3);
                        var box = databoxItem.FirstOrDefault(m => m.BoxNo == b.BoxNo && m.BoxNo2 == b.BoxNo2 && m.BoxNo3 == b.BoxNo3);
                        if (box == null)
                        {
                            throw new Exception($"未查询到{b.BoxNo}箱码、{b.BoxNo3}支码的库存信息");
@@ -948,8 +965,8 @@
                            throw new Exception($"未查询到{b.BoxNo}箱码、{b.BoxNo3}支码的库存托盘信息");
                        }
                        stockDetail.Qty -= box.Qty;
                        if (stockDetail.Qty<=0)
                        if (stockDetail.Qty <= 0)
                        {
                            Db.Deleteable(stockDetail).ExecuteCommand();
                        }
@@ -958,7 +975,7 @@
                            Db.Updateable(stockDetail).ExecuteCommand();
                        }
                        //删除/修改库存总表信息
                        var stock = stockItem.FirstOrDefault(m=>m.SkuNo == b.SkuNo && m.LotNo == b.LotNo);
                        var stock = stockItem.FirstOrDefault(m => m.SkuNo == b.SkuNo && m.LotNo == b.LotNo);
                        if (stock == null)
                        {
                            throw new Exception($"未查询到{b.BoxNo}箱码、{b.BoxNo3}支码的库存总信息");
@@ -981,7 +998,7 @@
                {
                    //删除/修改库存托盘明细信息
                    var stockDetail = dataBindItem;
                    stockDetail.Qty -= bind.Qty;
                    if (stockDetail.Qty <= 0)
@@ -994,7 +1011,7 @@
                    }
                    //删除/修改库存总表信息
                    var stock = dataStocks;
                    stock.Qty -= bind.Qty;
                    if (stock.Qty <= 0)
                    {
@@ -1006,7 +1023,7 @@
                    }
                }
                //判断是否有指定储位
                if (taskitem != null)
                if (taskitem != null)
                {
                    if (!string.IsNullOrWhiteSpace(taskitem.EndLocat))
                    {
@@ -1044,10 +1061,10 @@
                    {
                        throw new Exception("查询到空托有单据信息,错误。");
                    }
                    //修改入库单明细
                    noticeDetail.FactQty -= bind.Qty;
                    noticeDetail.CompleteQty -= bind.Qty;
                    noticeDetail.CompleteQty -= bind.Qty;
                    //判断入库单明细组托数量是否为0,是:修改明细状态
                    //入库总单信息
                    var notice = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == bind.ASNNo);
@@ -1147,7 +1164,7 @@
                    item.UpdateTime = time;
                    item.UpdateUser = userId;
                    qty += item.Qty;
                    qty2 += item.SamplingQty == null? 0 : item.SamplingQty;
                    qty2 += item.SamplingQty == null ? 0 : item.SamplingQty;
                }
                Db.Updateable(boxInfos).ExecuteCommand();
@@ -1155,11 +1172,11 @@
                //修改托盘绑定信息
                bind.Qty -= qty;                    // 数量变更
                bind.BitPalletMark = "1";           // 零托标记变更
                if (bind.SamplingQty!= null)
                if (bind.SamplingQty != null)
                {
                    bind.SamplingQty -= qty2;
                }
                if (bind.Qty == 0)
                {
                    //判断是否有指定储位
@@ -1361,7 +1378,7 @@
                   .AndIF(!string.IsNullOrWhiteSpace(layer), m => m.Layer == int.Parse(layer))
                   .AndIF(!string.IsNullOrWhiteSpace(locateNo), m => m.LocatNo.Contains(locateNo))
                   .And(m => m.IsDel == "0" && m.Status == "0" && m.Flag == "0" && m.WareHouseNo == houseNo)
                   .And(m => m.AreaNo.Contains(categoryAreaNo))
                   .And(m => categoryAreaNo.Contains(m.AreaNo))
                   .ToExpression();//注意 这一句 不能少
                var total = 0;
                var list = Db.Queryable<SysStorageLocat>().Where(item).OrderByDescending(a => a.Depth).OrderBy(a => a.Column)
@@ -1546,7 +1563,9 @@
                    throw new Exception("请选择所属仓库");
                }
                //验证是否为平库入库
                if (houseNo == "W02")
                var houseType = Db.Queryable<SysWareHouse>().First(a => a.WareHouseNo == houseNo);//获取仓库类型
                //验证是否为平库入库
                if (houseType.Type == "2")
                {
                    throw new Exception("平库请使用PDA手持进行平库入库");
                }
@@ -1588,7 +1607,7 @@
                        {
                            throw new Exception("该托盘正在入库,但未查询到任务信息");
                        }
                        comDto = new OutCommandDto()
                        {
                            PalletNo = palletNo,//托盘号
@@ -1607,7 +1626,7 @@
                            Db.Updateable(beingTask).ExecuteCommand();
                        }
                        return comDto;
                    }
                    if (haveLocate != null)
                    {
@@ -1661,7 +1680,7 @@
                    skuNo = stockDetail.First().SkuNo;
                    #region 判断任务是否已经存在,若存在直接返回任务;
                    var beingTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0"
                    var beingTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0"
                    && (m.Status == "0" || m.Status == "1") && m.PalletNo == palletNo && m.Type == "0");
                    if (beingTask != null)
                    {
@@ -1680,7 +1699,7 @@
                        if (beingTask.IsSuccess == 0)
                        {
                            beingTask.IsSuccess = 1;
                            beingTask.Status = "1";
                            beingTask.Status = "1";
                            Db.Updateable(beingTask).ExecuteCommand();
                        }
@@ -1690,12 +1709,12 @@
                    #region 判断该托盘,是否符合回库功能设定的回库规则
                    //获取对应回库规则
                    var function = Db.Queryable<SysFunSetting>().First(a => a.IsDel == "0"
                    var function = Db.Queryable<SysFunSetting>().First(a => a.IsDel == "0"
                    && a.FunSetNo == "Fun041" && a.IsEnable == "NO");
                    if (function != null)
                    {
                        //拣货完成后允许托盘回库
                        var allot = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0"
                        var allot = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0"
                        && a.LotNo == stockDetail[0].LotNo && a.PalletNo == palletNo && a.SkuNo == stockDetail[0].SkuNo);
                        //验证拣货明细是否存在
@@ -1719,18 +1738,18 @@
                var sku = skuList.FirstOrDefault(m => m.SkuNo == skuNo);
                if (sku == null)
                {
                    throw new Exception("物料信息中未查询到入库单明细包含的物料信息,不可入库");
                    throw new Exception("物料编码不存在,不可入库");
                }
                //判断物料是否含有类别信息
                if (string.IsNullOrWhiteSpace(sku.CategoryNo))
                {
                    throw new Exception($"物料:{sku.SkuNo}未查询到类别信息");
                    throw new Exception($"物料:{sku.SkuNo}未设置类别,不可入库");
                }
                var skuCategory = skuCategoryList.FirstOrDefault(m => m.CategoryNo == sku.CategoryNo);
                if (skuCategory == null)
                {
                    throw new Exception($"未在类别信息中查询到物料:{sku.SkuNo}包含的类别");
                    throw new Exception($"{sku.SkuNo}物料类别不存在,不可入库");
                }
                var areaStr = skuCategory.AreaNo.Split(",");
@@ -1834,7 +1853,7 @@
                    }
                    //如果跳巷道并且未找到合适空储位,则跳到最后一次使用的巷道查询
                    if (roadNo == "")
                    if (string.IsNullOrWhiteSpace(roadNo))
                    {
                        if (useLog != null)
                        {
@@ -1867,7 +1886,7 @@
                            roadNo = item;
                        }
                        //当前巷有位置则退出
                        if (roadNo != null)
                        if (!string.IsNullOrWhiteSpace(roadNo))
                        {
                            break;
                        }
@@ -1919,6 +1938,7 @@
                    };
                    Db.Insertable(exTask).ExecuteCommand();
                    var asnNo = "";
                    // 添加托盘绑定表托盘入库任务号  liudl
                    if (palletBindList.Count < 1)
                    {
@@ -1932,9 +1952,35 @@
                                bindModel.WareHouseNo = houseNo;
                                bindModel.RoadwayNo = roadNo;
                                Db.Updateable(bindModel).ExecuteCommand();
                                asnNo = stockModel.ASNNo;
                            }
                        }
                    }
                    foreach (DataStockDetail stockModel in stockDetail)
                    {
                        //添加托盘上架记录
                        var upShelf = new BllPalletUpShelf()
                        {
                            TaskNo = exTask.TaskNo,
                            TraceNo = asnNo,
                            PalletNo = palletNo,
                            SkuNo = stockModel.SkuNo,
                            SkuName = stockModel.SkuName,
                            LotNo = stockModel.LotNo,
                            Status = "1",
                            WareHouseNo = houseNo,
                            RoadwayNo = roadNo,
                            AreaNo = "",
                            LocatNo = "",
                            CreateUser = 0,
                        };
                        Db.Insertable(upShelf).ExecuteCommand();
                    }
                    if (palletBindList.Count >= 1)
                    {
@@ -2104,13 +2150,13 @@
                    {
                        throw new Exception($"{palletNo}托盘条码不具有箱码信息,不可入库!");
                    }
                    if (stockDetail.Count(m=>!string.IsNullOrWhiteSpace(m.LocatNo)) >0)
                    if (stockDetail.Count(m => !string.IsNullOrWhiteSpace(m.LocatNo)) > 0)
                    {
                        throw new Exception("当前托盘已在库内,请核实");
                    }
                    skuNo = stockDetail.First().SkuNo;
                    var beingTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0"
                    var beingTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0"
                    && (m.Status == "0" || m.Status == "1") && m.PalletNo == palletNo && m.Type == "0");
                    if (beingTask != null)
                    {
@@ -2215,7 +2261,7 @@
                Db.BeginTran();
                try
                {
                    if (isAddTask) // 正常入库
                    {
                        var taskNo = new Common().GetMaxNo("TK");
@@ -2242,7 +2288,7 @@
                        };
                        Db.Insertable(exTask).ExecuteCommand();
                        var asnNo = "";
                        // 添加托盘绑定表托盘入库任务号 liudl
                        foreach (DataStockDetail stockModel in stockDetail)
                        {
@@ -2255,9 +2301,32 @@
                                bindModel.RoadwayNo = locate.RoadwayNo;
                                bindModel.LocatNo = locate.LocatNo;
                                Db.Updateable(bindModel).ExecuteCommand();
                                asnNo = stockModel.ASNNo;
                            }
                        }
                        foreach (DataStockDetail stockModel in stockDetail)
                        {
                            //添加托盘上架记录
                            var upShelf = new BllPalletUpShelf()
                            {
                                TaskNo = exTask.TaskNo,
                                TraceNo = asnNo,
                                PalletNo = palletNo,
                                SkuNo = stockModel.SkuNo,
                                SkuName = stockModel.SkuName,
                                LotNo = stockModel.LotNo,
                                Status = "1",
                                WareHouseNo = houseNo,
                                RoadwayNo = locate.RoadwayNo,
                                AreaNo = locate.AreaNo,
                                LocatNo = locate.LocatNo,
                                CreateUser = 0,
                            };
                            Db.Insertable(upShelf).ExecuteCommand();
                        }
                        oldTaskNo = taskNo;
                    }
                    else
@@ -2272,18 +2341,36 @@
                        }
                        Db.Updateable(oldTask).ExecuteCommand();
                        var bindModel = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.Status == "2"
                           && m.PalletNo == oldTask.PalletNo && m.TaskNo == oldTaskNo );
                        if (bindModel != null && string.IsNullOrWhiteSpace(bindModel.LocatNo))
                        var bindModelList = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.Status == "2"
                           && m.PalletNo == oldTask.PalletNo && m.TaskNo == oldTaskNo).ToList();
                        foreach (var bindModel in bindModelList)
                        {
                            bindModel.TaskNo = oldTask.TaskNo;
                            bindModel.WareHouseNo = locate.WareHouseNo;
                            bindModel.RoadwayNo = locate.RoadwayNo;
                            bindModel.LocatNo = locate.LocatNo;
                            Db.Updateable(bindModel).ExecuteCommand();
                            if (string.IsNullOrWhiteSpace(bindModel.LocatNo))
                            {
                                bindModel.TaskNo = oldTask.TaskNo;
                                bindModel.WareHouseNo = locate.WareHouseNo;
                                bindModel.RoadwayNo = locate.RoadwayNo;
                                bindModel.LocatNo = locate.LocatNo;
                                Db.Updateable(bindModel).ExecuteCommand();
                            }
                        }
                        //更改上架信息
                        var upShelfList = Db.Queryable<BllPalletUpShelf>().Where(m => m.IsDel == "0" && m.TaskNo == oldTask.TaskNo && m.PalletNo == palletNo).ToList();
                        foreach (var upShelf in upShelfList)
                        {
                            upShelf.WareHouseNo = locate.WareHouseNo;
                            upShelf.RoadwayNo = locate.RoadwayNo;
                            upShelf.LocatNo = locate.LocatNo;
                            upShelf.Status = "1";
                            Db.Updateable(upShelf).ExecuteCommand();
                        }
                    }
                    locate.Status = "2";
                    Db.Updateable(locate).ExecuteCommand();
                    if (palletBindList.Count >= 1)
@@ -2610,7 +2697,7 @@
        //        throw new Exception(e.Message);
        //    }
        //}
        #endregion
        //入库完成(wcs反馈、wms手动完成)
@@ -2652,6 +2739,7 @@
                    //添加操作日志记录
                    var k = new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId);
                }
                //判断是否是回流入库完成
                if (stockDetail.Any())
                {
@@ -2667,7 +2755,7 @@
                            item.UpdateUser = userId;
                        }
                    }
                    locate.Status = "1";
                    Db.Updateable(locate).ExecuteCommand();
                    Db.Updateable(stockDetail).ExecuteCommand();
@@ -2756,7 +2844,7 @@
                                InspectStatus = sku.IsInspect,
                                InspectMark = boxInfo.InspectMark,
                                BitBoxMark = boxInfo.BitBoxMark,
                                ExpirationTime=boxInfo.ExpirationTime,
                                ExpirationTime = boxInfo.ExpirationTime,
                                CreateUser = 0,
                                CreateTime = comTime
@@ -2789,7 +2877,7 @@
                                    Qty = item.Qty,
                                    LockQty = 0,
                                    FrozenQty = 0,
                                    IsSampling = item.InspectMark,
                                    IsSampling = item.InspectMark,
                                    IsDel = "0",
                                    CreateUser = userId,
                                    CreateTime = comTime
@@ -3251,7 +3339,13 @@
                task.FinishDate = comTime;//完成时间
                //更新任务信息
                Db.Updateable(task).ExecuteCommand();
                //更改托盘上架记录信息
                var upShelfList = Db.Queryable<BllPalletUpShelf>().Where(m => m.IsDel == "0" && m.TaskNo == taskNo && m.PalletNo == task.PalletNo).ToList();
                foreach (var upShelf in upShelfList)
                {
                    upShelf.Status = "2";
                    Db.Updateable(upShelf).ExecuteCommand();
                }
                //判断是否是回流入库完成
                if (stockDetail.Any())
                {
@@ -3272,7 +3366,7 @@
                    Db.Updateable(locate).ExecuteCommand();
                    //更新库存明细信息
                    Db.Updateable(stockDetail).ExecuteCommand();
                    var bindList = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.TaskNo == taskNo && m.Status == "2").ToList();
                    foreach (var item in bindList)
                    {
@@ -3294,49 +3388,6 @@
                        Db.Updateable(dataBoxInfoList).ExecuteCommand();
                        #endregion
                        #region 采购计划
                        //var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.ASNDetailNo);
                        //if (noticeDetail == null)
                        //{
                        //    throw new Exception("未查询到托盘绑定的入库单明细信息");
                        //}
                        //var notice = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == noticeDetail.ASNNo);
                        //if (notice == null)
                        //{
                        //    throw new Exception("未查询到托盘绑定的入库单信息");
                        //}
                        //if (notice.Type == "1" && !string.IsNullOrEmpty(noticeDetail.OrderDetailCode))
                        //{
                        //    //采购单明细
                        //    var planDetail = Db.Queryable<BllProcurePlanNoticeDetail>().First(it => it.OrderDetailCode == noticeDetail.OrderDetailCode && it.IsDel == "0");
                        //    planDetail.CompleteQty += item.Qty;
                        //    if (planDetail.CompleteQty >= planDetail.Qty)
                        //    {
                        //        planDetail.Status = "2";
                        //        planDetail.CompleteTime = comTime;
                        //    }
                        //    Db.Updateable(planDetail).ExecuteCommand();
                        //    //采购单
                        //    var planOrd = Db.Queryable<BllProcurePlanNotice>().First(it => it.Id == planDetail.ParentId && it.IsDel == "0");
                        //    var planDetailNum = Db.Queryable<BllProcurePlanNoticeDetail>()
                        //    .Count(m => m.IsDel == "0" && m.ParentId == planDetail.ParentId && m.Status != "2");
                        //    if (planDetailNum == 0)
                        //    {
                        //        planOrd.Status = "2";
                        //        planOrd.CompleteTime = comTime;
                        //        Db.Updateable(planOrd).ExecuteCommand();
                        //    }
                        //    else
                        //    {
                        //        if (planOrd.Status == "0")
                        //        {
                        //            planOrd.Status = "1";
                        //            Db.Updateable(planOrd).ExecuteCommand();
                        //        }
                        //    }
                        //}
                        #endregion
                        item.Status = "3";
                        item.CompleteTime = comTime;
                    }
@@ -3587,6 +3638,15 @@
                    }
                    Db.Updateable(bind).ExecuteCommand();
                }
                //更改托盘上架记录信息
                var upShelfList = Db.Queryable<BllPalletUpShelf>().Where(m => m.IsDel == "0" && m.TaskNo == taskNo && m.PalletNo == task.PalletNo).ToList();
                foreach (var upShelf in upShelfList)
                {
                    upShelf.IsDel = "1";
                    Db.Updateable(upShelf).ExecuteCommand();
                }
                //储位信息
                var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat);
                if (locate != null)
                {
@@ -3614,11 +3674,11 @@
                if (!string.IsNullOrWhiteSpace(model.SkuNo) || !string.IsNullOrWhiteSpace(model.SkuName))
                {
                    string sql = $"select Distinct Id from ArchivingArrivalNoticeDetail where IsDel='0' and SkuNo like '%{model.SkuNo}%' and SkuName like '{model.SkuName}'";
                    var detailList= Db.Ado.SqlQuery<int>(sql);
                    var detailList = Db.Ado.SqlQuery<int>(sql);
                    strList = detailList;
                }
                string strListStr= string.Join(",", strList);
                string strListStr = string.Join(",", strList);
                string sqlString = string.Empty;
                string sqlCount = string.Empty;
@@ -3697,7 +3757,7 @@
                        item.SkuName = sku.SkuName;
                    }
                }
                return modelList;
            }
            catch (Exception ex)
@@ -3783,11 +3843,11 @@
            sqlPub += "where tb1.IsDel = '0' ";
            if (!string.IsNullOrEmpty(boxNo))
            {
                sqlPub += $"AND tb1.BoxNo = '{ boxNo.Trim()}' ";
                sqlPub += $"AND tb1.BoxNo = '{boxNo.Trim()}' ";
            }
            if (!string.IsNullOrEmpty(boxNo3))
            {
                sqlPub += $"AND tb1.BoxNo3 = '{ boxNo3.Trim()}' ";
                sqlPub += $"AND tb1.BoxNo3 = '{boxNo3.Trim()}' ";
            }
            sqlString += sqlPub;