admin
2 天以前 9f3f798670e87b91c1b4c4d2b1c44bb850a34153
Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
@@ -23,13 +23,14 @@
using ZXing.OneD;
using System.Threading.Tasks;
using System.Security.Policy;
using Newtonsoft.Json;
using Newtonsoft.Json;
using Utility.Tools;
using Model.ModelDto.SysDto;
using Model.ModelVm.SysVm;
using System.Security.Cryptography.X509Certificates;
using AutoMapper.Configuration.Annotations;
using Utility;
using System.Diagnostics.Metrics;
namespace WMS.BLL.BllPdaServer
{
@@ -51,7 +52,7 @@
            {
                #region 判断
                //0:成品入库 1:采购入库 3:退货入库 4:车间余料入库 8:生产退料入库
                if (string.IsNullOrEmpty(model.AsnNo))
                {
@@ -111,17 +112,25 @@
                    throw new Exception("未查询到托盘信息,请核实!");
                }
                //验证入库单明细是否存在
                var detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailId && m.ASNNo == model.AsnNo && m.LotNo.Contains(model.LotNo));
                var detail = new BllArrivalNoticeDetail();
                if (string.IsNullOrEmpty(model.LotNo))
                {
                    detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailId && m.ASNNo == model.AsnNo);
                }
                else
                {
                    detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailId && m.ASNNo == model.AsnNo && m.LotNo.Contains(model.LotNo));
                }
                if (detail == null)
                {
                    throw new Exception("当前物料及批次与单据无关联,请核实!");
                }
                //判断托盘是否在库外
                var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo);
                if (stockDetail != null && !string.IsNullOrEmpty(stockDetail.WareHouseNo))
                {
                    throw new Exception("该托盘已有储位信息,不可组托,请核实!");
                }
                //var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo);
                //if (stockDetail != null && !string.IsNullOrEmpty(stockDetail.WareHouseNo))
                //{
                //    throw new Exception("该托盘已有储位信息,不可组托,请核实!");
                //}
                #endregion
@@ -133,13 +142,20 @@
                #region 包装 
                var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo);
                var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == detail.PackagNo);
                var pNum = 0;//托盘物品数量
                var bNum = 0;//箱码物品数量
                if (sku == null)
                {
                    throw new Exception("当前物料信息不存在,请核实!");
                }
                var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo);
                if (pack == null)
                {
                    throw new Exception("当前物料包装信息不存在,请核实!");
                }
                var pNum = 0m;//托盘物品数量
                var bNum = 0m;//箱码物品数量
                //公共方法获取包装数量
                new Common().GetPackQtyInfo(detail.PackagNo, ref pNum, ref bNum);
                new Common().GetPackQtyInfo(sku.PackagNo, ref pNum, ref bNum);
                #endregion
@@ -188,9 +204,9 @@
                //绑定箱总数量
                //model.SkuQty = boxInfoList.Sum(s => s.Qty);
                //和选择的批次同批次的箱码信息
                var sameBoxInfoList = boxInfoList.Where(w => w.LotNo == model.LotNo && w.Status == "0").ToList();
                var sameBoxInfoList = boxInfoList.Where(w => (w.LotNo ?? "") == model.LotNo && w.Status == "0").ToList();
                //和选择的批次不同批次的箱码信息(拼箱批次)
                var notBoxInfoList = boxInfoList.Where(w => w.LotNo != model.LotNo).ToList();
                var notBoxInfoList = boxInfoList.Where(w => (w.LotNo ?? "") != model.LotNo).ToList();
                #endregion
                if (sameBoxInfoList.Count <= 0)
@@ -234,7 +250,7 @@
                        bindId = bind.Id;
                        bind.Qty += model.SkuQty;
                    }
                    #endregion
                    #region 库存明细和质检信息
@@ -256,31 +272,20 @@
                    }
                    // 判断库存明细是否已有此托盘信息  
                    var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.ASNDetailNo == bind.ASNDetailNo && m.PalletNo == model.PalletNo);
                    var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo && m.LotNo == detail.LotNo && m.SkuNo == detail.SkuNo);// && m.ASNDetailNo == bind.ASNDetailNo
                    var sdId1 = 0;
                    if (sd1 != null)
                    {
                        sdId1 = sd1.Id;
                        // 库存已存在 更新数据
                        sd1.Qty = bind.Qty;
                        sd1.CompleteTime = comTime;
                        sd1.UpdateUser = userId;
                        sd1.UpdateTime = comTime;
                        Db.Updateable(sd1).ExecuteCommand();
                    }
                    else
                    if (sd1 == null)
                    {
                        // 库存不存在 插入数据
                        sd1 = new DataStockDetail()
                        {
                            LotNo = bind.LotNo,
                            LotText = bind.LotText,
                            //LotText = bind.LotText,
                            SupplierLot = bind.SupplierLot,
                            SkuNo = sku.SkuNo,
                            SkuName = sku.SkuName,
                            Standard = sku.Standard,
                            Qty = bind.Qty,
                            Qty = 0,
                            LockQty = 0,
                            FrozenQty = 0,
                            InspectQty = 0,
@@ -299,9 +304,9 @@
                            ExpirationTime = bind.ExpirationTime,
                            Status = "0",
                            InspectMark = bind.InspectMark,
                            InspectStatus = sku.IsInspect,
                            //InspectStatus = sku.IsInspect,
                            BitPalletMark = bind.BitPalletMark,
                            PackagNo = detail.PackagNo,                    //liudl 由sku的包装编号变为入库单明细的包装编码
                            PackagNo = sku.PackagNo,
                            IsBale = bind.IsBale,
                            IsBelt = bind.IsBelt,
@@ -309,6 +314,37 @@
                            CreateUser = 0,
                            CreateTime = comTime
                        };
                        //2025年12月04日甲方要求“生产退料入库”默认质检合格
                        if (notice.Type == "8")
                        {
                            sd1.InspectStatus = "1";
                            sd1.LotText = "";
                        }
                        else
                        {
                            sd1.InspectStatus = sku.IsInspect;
                            sd1.LotText = bind.LotText;
                        }
                        //生产日期
                        if (!string.IsNullOrEmpty(detail.Lot1))
                        {
                            sd1.ProductionTime = Convert.ToDateTime(detail.Lot1);
                        }
                        //到期日期
                        if (!string.IsNullOrEmpty(detail.Lot2))
                        {
                            sd1.ExpirationTime = Convert.ToDateTime(detail.Lot2);
                        }
                        var palletData = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == sd1.PalletNo && !string.IsNullOrEmpty(w.LocatNo));
                        if (palletData != null)
                        {
                            sd1.WareHouseNo = palletData.WareHouseNo;
                            sd1.RoadwayNo = palletData.RoadwayNo;
                            sd1.AreaNo = palletData.AreaNo;
                            sd1.LocatNo = palletData.LocatNo;
                        }
                        //维护库存明细货主/供应商信息 //0:成品入库,2:中间品入库,4:车间余料入库,6:代储入库,7:寄存入库
                        if (notice.Type == "0" || notice.Type == "2" || notice.Type == "4" || notice.Type == "6" || notice.Type == "7")
@@ -326,20 +362,19 @@
                            //修改合格不合格数量
                            if (quality.IsQualified == "1") //合格
                            {
                                //增加合格数量
                                quality.PassQty += bind.Qty;
                                sd1.InspectStatus = "1";
                            }
                            else if (quality.IsQualified == "0") //不合格
                            {
                                //增加不合格数量
                                quality.FailQty += bind.Qty;
                                sd1.InspectStatus = "2";
                            }
                            Db.Updateable(quality).ExecuteCommand(); //修改质检信息
                        }
                        //添加库存明细
                        sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity();
                    }
                    else
                    {
                        sdId1 = sd1.Id;
                    }
                    #endregion
@@ -360,7 +395,7 @@
                                continue;
                            }
                            //箱内物料批次与单据明细不符合
                            if (box.SkuNo != detail.SkuNo || box.LotNo != model.LotNo)
                            if (box.SkuNo != detail.SkuNo || (box.LotNo ?? "") != model.LotNo)
                            {
                                throw new Exception($"-1:{box.BoxNo}箱内物料及批次与单据不一致,请核实!");
                            }
@@ -408,7 +443,7 @@
                                Standard = sku.Standard,
                                ProductionTime = box.ProductionTime,
                                SupplierLot = box.SupplierLot,
                                InspectStatus = sku.IsInspect,
                                //InspectStatus = sku.IsInspect,
                                InspectMark = box.InspectMark,
                                BitBoxMark = box.BitBoxMark,
                                ExpirationTime = box.ExpirationTime,
@@ -416,6 +451,9 @@
                                CreateUser = 0,
                                CreateTime = comTime
                            };
                            //2025年12月04日甲方要求“生产退料入库”默认质检合格
                            box2.InspectStatus = (notice.Type == "8") ? "1" : sku.IsInspect;
                            //添加库存箱码明细
                            Db.Insertable(box2).ExecuteCommand();
                            #endregion
@@ -468,6 +506,10 @@
                    }
                    detail.UpdateUser = userId;
                    detail.UpdateTime = comTime;
                    if (notice.Type == "4" || notice.Type == "8")
                    {
                        detail.InspectStatus = "1";//车间退料默认检验合格
                    }
                    //更新入库单明细
                    Db.Updateable(detail).ExecuteCommand();
@@ -488,7 +530,13 @@
                    #endregion
                    #region 库存明细
                    sd1.Qty = bind.Qty;
                    // 库存已存在 更新数据
                    sd1.Qty += bind.Qty;
                    sd1.CompleteTime = comTime;
                    sd1.UpdateUser = userId;
                    sd1.UpdateTime = comTime;
                    //更改库存明细数量
                    Db.Updateable(sd1).Where(m => m.Id == sdId1).ExecuteCommand();
                    #endregion
@@ -557,7 +605,7 @@
                    }
                    #endregion
                }
                //拼箱
                if (notBoxInfoList.Count > 0)
                {
@@ -1106,7 +1154,7 @@
                #region 判断
                //0:成品入库 1:采购入库 3:退货入库 4:车间余料入库 8:生产退料入库
                if (string.IsNullOrEmpty(model.AsnNo))
                {
@@ -1157,7 +1205,15 @@
                    throw new Exception("未查询到托盘信息,请核实!");
                }
                // 验证入库单明细是否存在
                var detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailId && m.ASNNo == model.AsnNo && m.LotNo.Contains(model.LotNo));
                var detail = new BllArrivalNoticeDetail();
                if (string.IsNullOrEmpty(model.LotNo))
                {
                    detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailId && m.ASNNo == model.AsnNo);
                }
                else
                {
                    detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailId && m.ASNNo == model.AsnNo && m.LotNo.Contains(model.LotNo));
                }
                if (detail == null)
                {
                    throw new Exception("当前物料及批次与单据无关联,请核实!");
@@ -1178,13 +1234,21 @@
                #region 包装
                var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo);
                //var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == detail.PackagNo);    // liudl 由Sku包装编号变更为入库单明细包装编号
                if (sku == null)
                {
                    throw new Exception("未查询到该物料信息,请核实!");
                }
                var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo);
                if (pack == null)
                {
                    throw new Exception("未查询到该物料包装信息,请核实!");
                }
                var pNum = 0;//托盘物品数量
                var bNum = 0;//箱码物品数量
                var pNum = 0m;//托盘物品数量
                var bNum = 0m;//箱码物品数量
                //公共方法获取包装数量
                new Common().GetPackQtyInfo(detail.PackagNo, ref pNum, ref bNum);
                new Common().GetPackQtyInfo(sku.PackagNo, ref pNum, ref bNum);
                #endregion
@@ -1283,19 +1347,28 @@
                //验证库存托盘是否有贴标物料
                var skuStr = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0" && m.IsPasteCode == "1").Select(m => m.SkuNo).ToList();
                var sdHave = Db.Queryable<DataStockDetail>().Count(m => m.IsDel == "0" && m.PalletNo == model.PalletNo && skuStr.Contains(m.SkuNo));
                if (sdHave>0)
                if (sdHave > 0)
                {
                    throw new Exception("当前托盘含有贴标物料信息,不能组托");
                }
                // 判断库存明细是否已有此托盘信息  
                var sd1 = Db.Queryable<DataStockDetail>()
                    .First(m => m.IsDel == "0" && m.ASNDetailNo == bind.ASNDetailNo && m.PalletNo == model.PalletNo && m.SkuNo == detail.SkuNo && m.LotNo == bind.LotNo);
                var sd1 = new DataStockDetail();
                if (!string.IsNullOrEmpty(bind.LotNo))
                {
                    sd1 = Db.Queryable<DataStockDetail>()
                    .First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo && m.SkuNo == detail.SkuNo && m.LotNo == bind.LotNo);//&& m.ASNDetailNo == bind.ASNDetailNo
                }
                else
                {
                    sd1 = Db.Queryable<DataStockDetail>()
                    .First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo && m.SkuNo == detail.SkuNo);// && m.ASNDetailNo == bind.ASNDetailNo
                }
                var sdId1 = 0;
                if (sd1 != null)
                {
                    sdId1 = sd1.Id;
                    // 库存已存在 更新数据
                    sd1.Qty = bind.Qty;
                    sd1.Qty += bind.Qty;
                    sd1.CompleteTime = comTime;
                    sd1.UpdateUser = userId;
                    sd1.UpdateTime = comTime;
@@ -1340,7 +1413,7 @@
                        InspectMark = bind.InspectMark,
                        InspectStatus = inspectStatusStr,
                        BitPalletMark = bind.BitPalletMark,
                        PackagNo = detail.PackagNo,                    //liudl 由sku的包装编号变为入库单明细的包装编码
                        PackagNo = sku.PackagNo,                    //liudl 由sku的包装编号变为入库单明细的包装编码
                        IsBale = bind.IsBale,
                        IsBelt = bind.IsBelt,
@@ -1555,10 +1628,10 @@
        {
            try
            {
                var modelList = Db.Queryable<BllArrivalNoticeDetail>()
                    .LeftJoin<BllArrivalNotice>((tb1, tb2) => tb1.ASNNo == tb2.ASNNo )
                    .LeftJoin<SysMaterials>((tb1, tb2, tb3) => tb1.SkuNo == tb3.SkuNo )
                    .LeftJoin<BllArrivalNotice>((tb1, tb2) => tb1.ASNNo == tb2.ASNNo)
                    .LeftJoin<SysMaterials>((tb1, tb2, tb3) => tb1.SkuNo == tb3.SkuNo)
                    .Where((tb1, tb2, tb3) => tb1.IsDel == "0" && tb2.IsDel == "0" && (tb2.Status == "0" || tb2.Status == "1") && tb3.IsDel == "0" && tb3.IsPasteCode == "1")
                    .Select((tb1, tb2, tb3) => tb1.ASNNo).Distinct().ToList();
@@ -1579,8 +1652,8 @@
            {
                var modelList = Db.Queryable<BllArrivalNoticeDetail>()
                     .LeftJoin<BllArrivalNotice>((tb1, tb2) => tb1.ASNNo == tb2.ASNNo )
                     .LeftJoin<SysMaterials>((tb1, tb2, tb3) => tb1.SkuNo == tb3.SkuNo )
                     .LeftJoin<BllArrivalNotice>((tb1, tb2) => tb1.ASNNo == tb2.ASNNo)
                     .LeftJoin<SysMaterials>((tb1, tb2, tb3) => tb1.SkuNo == tb3.SkuNo)
                     .Where((tb1, tb2, tb3) => tb1.IsDel == "0" && tb2.IsDel == "0" && (tb2.Status == "0" || tb2.Status == "1") && tb3.IsDel == "0" && tb3.IsPasteCode == "0")
                     .Select((tb1, tb2, tb3) => tb1.ASNNo).Distinct().ToList();
@@ -1591,7 +1664,7 @@
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 根据单据号获取单据明细列表
        /// </summary>
@@ -1737,7 +1810,7 @@
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public List<BoxInfoDto> GetBindBoxInfos(BoxInfoVm model,string url)
        public List<BoxInfoDto> GetBindBoxInfos(BoxInfoVm model, string url)
        {
            try
            {
@@ -1798,7 +1871,7 @@
                    }
                }
                else if (notice.Type == "1" || notice.Type == "4") //采购入库
                else if (notice.Type == "1" || notice.Type == "4" || notice.Type == "8") //采购入库
                {
                    string sqlString = $@"SELECT 
                                            ASNNo,
@@ -1922,8 +1995,8 @@
                        var addComBox = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allotId).ToList();
                        var addComList = addComBox.GroupBy(m => m.BoxNo).ToList();
                        var sku = Db.Queryable<SysMaterials>().First(m => m.SkuNo == addComBox.First().SkuNo);
                        var pNum = 0;
                        var bNum = 0;
                        var pNum = 0m;
                        var bNum = 0m;
                        new Common().GetPackQtyInfo(sku.PackagNo, ref pNum, ref bNum);
                        var boxList = new List<BllBoxInfo>();
                        foreach (var com in addComList)
@@ -2058,7 +2131,7 @@
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public List<BoxInfoDto> GetFMBindBoxInfos(string boxno,string url)
        /*public List<BoxInfoDto> GetFMBindBoxInfos(string boxno,string url)
        {
            try
            {
@@ -2161,6 +2234,133 @@
            {
                throw ex;
            }
        }*/
        public List<BoxInfoDto> GetFMBindBoxInfos(string boxno, string url)
        {
            try
            {
                #region 箱码请求接口,正式系统放开
                var data = new
                {
                    BoxNo = boxno
                };
                var jsonData = JsonConvert.SerializeObject(data);
                var response = HttpHelper.DoPost(url, jsonData, "箱码信息请求", "FM");
                var obj = JsonConvert.DeserializeObject<FuMaPostModel>(response);//解析返回数据
                if (obj.Success != true)
                {
                    throw new Exception("请求失败" + obj.Message);
                }
                #endregion
                if (string.IsNullOrEmpty(obj.Data.SkuNo))
                {
                    //测试用,发布正式前删除此段代码
                    //obj.Data.SkuNo = "50004632";
                    throw new Exception($"物料编码不能为空");
                }
                //查找物料信息
                var sku = Db.Queryable<SysMaterials>().First(m => m.SkuNo == obj.Data.SkuNo);
                if (sku == null)
                {
                    throw new Exception($"未查询到物料{obj.Data.SkuNo}信息");
                }
                var pNum = 0m;//托盘物品数量
                var bNum = 0m;//箱码物品数量
                //获取包装信息
                new Common().GetPackQtyInfo(sku.PackagNo, ref pNum, ref bNum);
                if (pNum == 0 || bNum == 0)
                {
                    throw new Exception($"{sku.SkuNo}物品包装未找到!");
                }
                var boxList = new List<BllBoxInfo>();
                var comTime = DateTime.Now;
                //添加箱码信息
                foreach (var box in obj.Data.DetailList)
                {
                    foreach (var box2 in box.DetailList2)
                    {
                        var boxInfo = new BllBoxInfo()
                        {
                            BoxNo = obj.Data.BoxNo,
                            BoxNo2 = box.BoxNo2,
                            BoxNo3 = box2.BoxNo3,
                            Qty = obj.Data.Qty,
                            BitBoxMark = obj.Data.BitBoxMark,
                            ASNNo = "",
                            //ASNDetailNo = noticeDetail.Id,
                            OrderCode = "",//notice.OrderCode
                                           //BindNo = bindId,
                                           //PalletNo = model.PallNo,
                            FullQty = bNum,
                            Status = "0",
                            SkuNo = sku.SkuNo,
                            SkuName = sku.SkuName,
                            LotNo = box2.LotNo,
                            LotText = obj.Data.LotNoBoxNum,
                            ProductionTime = DateTime.Parse(box2.ProductionTime),
                            ExpirationTime = DateTime.Parse(box2.ExpirationTime),
                            //CompleteTime = "",
                            InspectMark = "0",
                            InspectStatus = "0",
                            Origin = "赋码",
                            CreateTime = comTime,
                            CreateUser = 0
                        };
                        boxList.Add(boxInfo);
                    }
                    ;
                }
                try
                {
                    //开启事务
                    Db.BeginTran();
                    Db.Fastest<BllBoxInfo>().BulkCopy(boxList);
                    //提交事务
                    Db.CommitTran();
                }
                catch (Exception ex)
                {
                    //回滚事务
                    Db.RollbackTran();
                    throw new Exception("插入箱码失败:" + ex.Message);
                }
                string sqlString = $@"SELECT
                                        ASNNo,
                                        BoxNo,
                                        SkuNo,
                                        SkuName,
                                        LotNo,
                                        BitBoxMark,
                                        SUM(Qty) as Qty
                                      FROM BllBoxInfo
                                      WHERE IsDel = '0'
                                        AND Status='0'
                                        AND BoxNo = '{boxno}'
                                      GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; ";
                var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString);
                if (models.Count == 0)
                {
                    throw new Exception("箱码信息不存在!");
                }
                return models;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
@@ -2186,9 +2386,9 @@
                {
                    if (models[0].Status == "1")
                    {
                        var detail = Db.Queryable<DataStockDetail>().First(m=>m.PalletNo == palletNo );
                        if (detail!= null && !string.IsNullOrWhiteSpace(detail.LocatNo))
                        var detail = Db.Queryable<DataStockDetail>().First(m => m.PalletNo == palletNo);
                        if (detail != null && !string.IsNullOrWhiteSpace(detail.LocatNo))
                        {
                            var pingAreaStr = Db.Queryable<SysStorageArea>().Where(m => m.IsDel == "0" && m.WareHouseNo == "W04" && m.AreaNo != "B06" && m.AreaNo != "B07").Select(m => m.AreaNo).ToList();
                            var pingLocateInfo = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == detail.LocatNo && pingAreaStr.Contains(m.AreaNo) && m.IsDel == "0");
@@ -2218,11 +2418,11 @@
        /// <param name="asnNo">入库单</param>
        /// <param name="asnDetailId">入库单明细号</param>
        /// <returns></returns>
        public BoxListInfoDto GetBoxCountByAsn(string asnNo,int? asnDetailId)
        public BoxListInfoDto GetBoxCountByAsn(string asnNo, int? asnDetailId)
        {
            try
            {
                var detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == asnDetailId);
                if (detail == null)
                {
@@ -2237,8 +2437,8 @@
                };
                //获取状态是未组托的标签信息
                var models = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNNo == asnNo && m.ASNDetailNo == asnDetailId && m.Status == "0")
                    .GroupBy(m=> new { m.ProductionTime,m.ExpirationTime })
                    .Select(m=>new { m.ProductionTime ,m.ExpirationTime}).OrderBy(m=>m.ProductionTime).ToList();//&& m.Status == "0"
                    .GroupBy(m => new { m.ProductionTime, m.ExpirationTime })
                    .Select(m => new { m.ProductionTime, m.ExpirationTime }).OrderBy(m => m.ProductionTime).ToList();//&& m.Status == "0"
                foreach (var item in models)
                {
                    var boxNoList = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.Status == "0" && m.ASNNo == asnNo && m.ASNDetailNo == asnDetailId && m.ProductionTime == item.ProductionTime).Select(m => m.BoxNo).ToList();
@@ -2272,7 +2472,7 @@
            {
                //托盘库存信息
                var stockDetailList = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).ToList();
                if (stockDetailList.Count(m=> string.IsNullOrWhiteSpace(m.LocatNo)) > 0)
                if (stockDetailList.Count(m => string.IsNullOrWhiteSpace(m.LocatNo)) > 0)
                {
                    throw new Exception("托盘没有在平库储位上");
                }
@@ -2317,8 +2517,8 @@
                {
                    var time = DateTime.Now;
                    //判断当前托盘是否存在绑定信息
                    var task = Db.Queryable<LogTask>().First(m=> m.IsDel == "0" && m.PalletNo == palletNo && (m.Status == "0" || m.Status == "1") && m.OrderType == "0" && m.Type == "0");
                    var task = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.PalletNo == palletNo && (m.Status == "0" || m.Status == "1") && m.OrderType == "0" && m.Type == "0");
                    var upShelf = Db.Queryable<BllPalletUpShelf>().First(m => m.IsDel == "0" && m.PalletNo == palletNo && (m.Status == "0" || m.Status == "1"));
                    if (task != null)
                    {
@@ -2438,7 +2638,7 @@
                {
                    throw new Exception("请扫描外箱条码!");
                }
                string sqlString = $@"SELECT BoxNo, SkuNo, SkuName, LotNo, BitBoxMark, SUM(Qty) as Qty  FROM BllBoxInfo 
                                        WHERE IsDel = '0' and Status='0' and BoxNo = '{boxNo}'
                                        GROUP BY BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; ";
@@ -2452,7 +2652,7 @@
                {
                    throw new Exception("没有查询到箱码信息");
                }
            }
            catch (Exception ex)
            {
@@ -2461,7 +2661,7 @@
        }
        // 车间绑定托盘-贴标
        public void ChejianIn(string palletNo,string boxNo,decimal qty,string areaNo,int userId)
        public void ChejianIn(string palletNo, string boxNo, decimal qty, string areaNo, int userId)
        {
            try
            {
@@ -2475,7 +2675,7 @@
                {
                    throw new Exception("箱号不能为空");
                }
                if (qty<=0)
                if (qty <= 0)
                {
                    throw new Exception("数量不能小等0");
                }
@@ -2502,8 +2702,8 @@
                var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == boxInfoOne.SkuNo);
                var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo);
                var pNum = 0;//托盘物品数量
                var bNum = 0;//箱码物品数量
                var pNum = 0m;//托盘物品数量
                var bNum = 0m;//箱码物品数量
                //公共方法获取包装数量
                new Common().GetPackQtyInfo(pack.PackagNo, ref pNum, ref bNum);
@@ -2513,7 +2713,7 @@
                var msgStr = $"箱号为{boxNo}";
                var boxInfoList = new List<BllBoxInfo>();
                boxInfoList.AddRange(boxInfo);
                #region 库存明细
@@ -2523,15 +2723,15 @@
                {
                    throw new Exception("入库区域不能为空");
                }
                var tags = "0";
                // 判断库存明细是否已有此托盘信息  
                var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.SkuNo== boxInfoOne.SkuNo && m.LotNo == boxInfoOne.LotNo && m.PalletNo == palletNo);
                var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.SkuNo == boxInfoOne.SkuNo && m.LotNo == boxInfoOne.LotNo && m.PalletNo == palletNo);
                var sdId1 = 0;
                if (sd1 != null)
                {
                    if (sd1.AreaNo!= areaNo)
                    if (sd1.AreaNo != areaNo)
                    {
                        throw new Exception("选择的区域与库存不同");
                    }
@@ -2547,7 +2747,7 @@
                else
                {
                    var sd2 = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo && m.IsDel == "0" && !string.IsNullOrWhiteSpace(m.AreaNo));
                    if (sd2.Count(m=>m.AreaNo!= areaNo) > 0)
                    if (sd2.Count(m => m.AreaNo != areaNo) > 0)
                    {
                        throw new Exception("当前托盘位置与选择的不同,请核实");
                    }
@@ -2576,7 +2776,7 @@
                        ExpirationTime = boxInfoOne.ExpirationTime,
                        Status = "0",
                        InspectMark = boxInfoOne.InspectMark,
                        InspectStatus = sku.IsInspect,
                        InspectStatus = "1",//sku.IsInspect,//从车间入库的质检状态默认合格
                        BitPalletMark = "1",
                        PackagNo = sku.PackagNo,
@@ -2592,7 +2792,7 @@
                // 更改箱支关系表
                decimal factQty = 0.00m;//托盘总数量
                //标签组托
                var boxGroup = boxInfo.GroupBy(m => m.BoxNo).ToList();
@@ -2605,11 +2805,11 @@
                        {
                            continue;
                        }
                        box.PalletNo = palletNo;
                        box.Status = "2";
                        box.CompleteTime = comTime;
                        box.UpdateTime = comTime;
                        box.UpdateUser = userId;
@@ -2619,7 +2819,7 @@
                        factQty += box.Qty;
                        boxFullQty += box.Qty;
                        #region 库存箱码明细
                        var box2 = new DataBoxInfo()
                        {
@@ -2658,11 +2858,11 @@
                        {
                            Type = "0",//类型,0:入库 1:出库
                            PalletNo = palletNo,
                            BoxNo=box.BoxNo,
                            LotNo=box.LotNo,
                            SkuNo=box.SkuNo,
                            SkuName=box.SkuName,
                            Qty=box.Qty
                            BoxNo = box.BoxNo,
                            LotNo = box.LotNo,
                            SkuNo = box.SkuNo,
                            SkuName = box.SkuName,
                            Qty = box.Qty
                        };
                        //添加库存箱码明细
                        Db.Insertable(_log).ExecuteCommand();
@@ -2704,7 +2904,7 @@
                }
                #endregion
                // 更改托盘使用状态
                var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';";
                ////添加托盘记录表数据
@@ -2751,7 +2951,7 @@
                if (skuInfo == null)
                {
                    throw new Exception("未查询到物料信息");
                }
                }
                var pall = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo);
                if (pall == null)
                {
@@ -2765,11 +2965,11 @@
                var comTime = DateTime.Now;
                #region 包装 
                var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == skuInfo.PackagNo);
                var pNum = 0;//托盘物品数量
                var bNum = 0;//箱码物品数量
                var pNum = 0m;//托盘物品数量
                var bNum = 0m;//箱码物品数量
                //公共方法获取包装数量
                new Common().GetPackQtyInfo(pack.PackagNo, ref pNum, ref bNum);
@@ -2833,7 +3033,7 @@
                        Status = "0",
                        InspectMark = "0",
                        InspectStatus = "1",
                        BitPalletMark = qty >= pNum ?"0" :"1",
                        BitPalletMark = qty >= pNum ? "0" : "1",
                        PackagNo = skuInfo.PackagNo,
                        IsDel = "0",
@@ -3115,8 +3315,8 @@
                }
                //获取托盘信息
                var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == "100099");
                var pNum = 0;
                var bNum = 0;
                var pNum = 0m;
                var bNum = 0m;
                new Common().GetPackQtyInfo(sku.PackagNo, ref pNum, ref bNum);
@@ -4665,9 +4865,9 @@
        }
        #region 产品组托
        //根据物料获取是否存在包装信息
        public string BySkuNoGetPackInfo(string skuNo)
        {
@@ -6010,7 +6210,7 @@
                #endregion
                #region 质检请验
                if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1"  && sku.IsControlled != "1")
                if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1" && sku.IsControlled != "1")
                {
                    var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == bind.LotNo && m.SupplierLot == bind.SupplierLot);
                    if (qualityRequest == null)
@@ -6050,7 +6250,7 @@
            }
        }
        #endregion
@@ -6091,7 +6291,7 @@
                    {
                        if (!string.IsNullOrEmpty(item.WareHouseNo) && !string.IsNullOrEmpty(item.AreaNo))
                        {
                            if (item.AreaNo != "B06" && item.AreaNo != "B07" && item.AreaNo != "B09")
                            if (item.AreaNo != "B06" && item.AreaNo != "B07" && item.AreaNo != "B09")
                            {
                                throw new Exception("该托盘未在库外,请核查!");
                            }
@@ -6107,12 +6307,21 @@
                {
                    throw new Exception("储位信息不存,请核查!");
                }
                if (storageLocat.WareHouseNo != "W04")
                {
                    throw new Exception("该储位不是平库储位,请检查!");
                }
                if (storageLocat.Status != "0")
                {
                    var detailInfo=Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.LocatNo == storageLocat.LocatNo);
                {
                    var detailInfo = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.LocatNo == storageLocat.LocatNo);
                    if (detailInfo != null)
                    {
                        throw new Exception("储位不是空闲状态,请核查!");
                    }
                    var logIng = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.EndLocat == storageLocat.LocatNo && w.Status == "1" && w.PalletNo != model.PalletNo);
                    if (logIng != null)
                    {
                        throw new Exception("该储位有正在执行的入库任务,请核查!");
                    }
                }
                #endregion
@@ -6364,26 +6573,26 @@
                    Db.Updateable(bindInfo).ExecuteCommand();
                    #endregion
                   /* #region 添加托盘上架记录
                    var upShelf = new BllPalletUpShelf()
                    {
                        TaskNo = exTask.TaskNo,
                        TraceNo = bindInfo.ASNNo,
                        PalletNo = bindInfo.PalletNo,
                        SkuNo = stockModel.SkuNo,
                        SkuName = stockModel.SkuName,
                        LotNo = stockModel.LotNo,
                        Status = "1",
                    /* #region 添加托盘上架记录
                     var upShelf = new BllPalletUpShelf()
                     {
                         TaskNo = exTask.TaskNo,
                         TraceNo = bindInfo.ASNNo,
                         PalletNo = bindInfo.PalletNo,
                         SkuNo = stockModel.SkuNo,
                         SkuName = stockModel.SkuName,
                         LotNo = stockModel.LotNo,
                         Status = "1",
                        WareHouseNo = bindInfo.WareHouseNo,
                        RoadwayNo = bindInfo.RoadwayNo,
                        AreaNo = "",
                        LocatNo = "",
                         WareHouseNo = bindInfo.WareHouseNo,
                         RoadwayNo = bindInfo.RoadwayNo,
                         AreaNo = "",
                         LocatNo = "",
                        CreateUser = 0,
                    };
                    Db.Insertable(upShelf).ExecuteCommand();
                    #endregion*/
                         CreateUser = 0,
                     };
                     Db.Insertable(upShelf).ExecuteCommand();
                     #endregion*/
                    #region 库存箱支明细表
                    // 插入新组的箱支信息
@@ -6460,7 +6669,7 @@
                        //修改库存明细信息                                           
                        Db.Updateable(item).ExecuteCommand();
                    }
                    #region 任务及组托信息
                    //创建任务信息
                    var taskNo = new Common().GetMaxNo("TK");
@@ -6485,7 +6694,7 @@
                    };
                    Db.Insertable(exTask).ExecuteCommand();
                    //托盘绑定信息
                    var bindInfo = Db.Queryable<BllPalletBind>().First(w => w.IsDel == "0" && w.PalletNo == model.PalletNo
                    var bindInfo = Db.Queryable<BllPalletBind>().First(w => w.IsDel == "0" && w.PalletNo == model.PalletNo
                    && w.Status == "2" && string.IsNullOrEmpty(w.LocatNo));
                    if (bindInfo != null)
                    {
@@ -6505,7 +6714,7 @@
                    var upShelf = new BllPalletUpShelf()
                    {
                        TaskNo = exTask.TaskNo,
                        TraceNo = bindInfo== null? "": bindInfo.ASNNo,
                        TraceNo = bindInfo == null ? "" : bindInfo.ASNNo,
                        PalletNo = model.PalletNo,
                        SkuNo = palletupinfo.SkuNo,
                        SkuName = palletupinfo.SkuName,
@@ -6527,7 +6736,7 @@
                //修改储位信息                                        
                Db.Updateable(storageLocat).ExecuteCommand();
                new OperationASNServer().AddLogOperationAsn("PDA模块", "平库入库", model.PalletNo, "完成",
                new OperationASNServer().AddLogOperationAsn("PDA模块", "平库入库", model.PalletNo, "完成",
                    $"在PDA上完成单据号为:{model.ASNNo}的托盘码为:{model.PalletNo}的平库入库操作", (int)model.CreateUser);
                Db.CommitTran();
            }
@@ -6544,7 +6753,7 @@
        /// 仓库确认收货
        /// </summary>
        /// <param name="model"></param>
        public void ConfirmTakeOf(string palletNo,int userId)
        public void ConfirmTakeOf(string palletNo, int userId)
        {
            try
            {
@@ -6570,7 +6779,7 @@
                //获取库存明细信息
                var stockDetailList = Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.PalletNo == palletNo).ToList();
                //验证库存明细信息是否存在
                if (stockDetailList.Count<=0)
                if (stockDetailList.Count <= 0)
                {
                    throw new Exception("库存明细不存在,请检查库存信息!");
                }
@@ -6609,7 +6818,7 @@
                        //删除库存箱码信息
                        Db.Deleteable(boxInfoList).ExecuteCommand();
                    }
                    //删除或修改库存
                    stock.Qty -= (decimal)item.Qty;
                    if (stock.Qty <= 0)
@@ -6976,7 +7185,7 @@
        /// </summary>
        /// <param name="model">编码 名称</param>
        /// <returns>物料详细信息</returns>
        public MaterialsDto GetSkuInfo(GetMaterialsVm model)
        public MaterialsDto GetSkuInfo(GetMaterialsVm model)
        {
            try
            {
@@ -6985,8 +7194,8 @@
                    throw new Exception("请输入物料编码或物料名称!");
                }
                var skuModels = Db.Queryable<SysMaterials>().Where(m => (m.SkuNo == model.SkuNo || m.SkuName == model.SkuName) && m.IsDel == "0").Select< MaterialsDto>().ToList();
                if (skuModels.Count <= 0)
                var skuModels = Db.Queryable<SysMaterials>().Where(m => (m.SkuNo == model.SkuNo || m.SkuName == model.SkuName) && m.IsDel == "0").Select<MaterialsDto>().ToList();
                if (skuModels.Count <= 0)
                {
                    throw new Exception("物料不存在!");
                }
@@ -7005,18 +7214,18 @@
        /// <param name="model"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public List<BllBoxInfo> AddLabels(LabelsVm model)
        public List<BllBoxInfo> AddLabels(LabelsVm model)
        {
            try
            {
                if (decimal.TryParse(model.SkuNum, out decimal skuQty))
                {
                    if (skuQty <= 0)
                    if (skuQty <= 0)
                    {
                        throw new Exception("箱内数量不能小于等于0");
                    }
                }
                else
                else
                {
                    throw new Exception("箱内数量请输入数字!");
                }
@@ -7101,7 +7310,7 @@
                if (packLevel == 1)
                {
                    #region 一级包装
                    int labelNum = 1;
                    int labelNum = 1;
                    labelNum = int.Parse(Math.Ceiling(skuQty / bNum).ToString());//标签数量