wxw
2 天以前 047715a5e4f9895fe052f74a6d89a159a1d0c1b1
Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -305,26 +305,26 @@
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public SoResInfo ErpAddExportNotice(SoInfo model)
        public SoResInfo ErpAddExportNotice(SendSoVm model)
        {
            try
            {
                if (string.IsNullOrEmpty(model.SoType))
                if (string.IsNullOrEmpty(model.orderType))
                {
                    throw new Exception("单据类型不可为空!");
                }
                if (string.IsNullOrEmpty(model.OrderCode))
                if (string.IsNullOrEmpty(model.orderNo))
                {
                    throw new Exception("系统单号不可为空!");
                    throw new Exception("出库单号不可为空!");
                }
                if (model.SoDetails.Count <= 0)
                if (model.orderDetailList.Count <= 0)
                {
                    throw new Exception("出库单明细不可为空!");
                }
                //返回信息
                SoResInfo result = new SoResInfo();
                var skuNos = model.SoDetails.Select(a => a.SkuNo).Distinct().ToList();
                var skuNos = model.orderDetailList.Select(a => a.skuNo).Distinct().ToList();
                //根据物料号获取物料信息
                var skuList = Db.Queryable<SysMaterials>().Where(a => skuNos.Contains(a.SkuNo) && a.IsDel == "0").ToList();
                //获取库存明细
@@ -333,10 +333,10 @@
                var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList();
                string CustomerName = string.Empty;
                if (!string.IsNullOrEmpty(model.Customer))
                if (!string.IsNullOrEmpty(model.customerNo))
                {
                    //客户信息
                    var customer = Db.Queryable<SysCustomer>().First(m => m.IsDel == "0" && m.CustomerNo == model.Customer);
                    var customer = Db.Queryable<SysCustomer>().First(m => m.IsDel == "0" && m.CustomerNo == model.customerNo);
                    if (customer == null)
                    {
                        throw new Exception("客户信息不存在!");
@@ -344,12 +344,12 @@
                    CustomerName = customer.CustomerName;
                }               
                //承运商信息
                var logistics = Db.Queryable<SysLogisticsInfo>().First(m => m.IsDel == "0" && m.CarrierName == model.LogisticsNo);
                int? logisticsId = null;
                if (logistics != null)
                {
                    logisticsId = logistics.Id;
                }
                //var logistics = Db.Queryable<SysLogisticsInfo>().First(m => m.IsDel == "0" && m.CarrierName == model.LogisticsNo);
                //int? logisticsId = null;
                //if (logistics != null)
                //{
                //    logisticsId = logistics.Id;
                //}
                var billNo = "";
                var bl = true;
                do
@@ -367,21 +367,21 @@
                {
                    var list = new List<BllExportNoticeDetail>();
                    //添加出库单
                    foreach (var d in model.SoDetails)
                    foreach (var d in model.orderDetailList)
                    {
                        if (d.Qty < 1)
                        if (d.skuQty < 1)
                        {
                            throw new Exception("出库数量必须大于0");
                        }
                        var sku = skuList.FirstOrDefault(a => a.SkuNo == d.SkuNo);
                        var sku = skuList.FirstOrDefault(a => a.SkuNo == d.skuNo);
                        if (sku == null)
                        {
                            throw new Exception($"物料信息中未查询到出库物料信息:{d.SkuNo}");
                            throw new Exception($"物料信息中未查询到出库物料信息:{d.skuNo}");
                        }
                        //0:成品出库、1:领料出库、3:物料取样出库、4:不合格品出库、6:代储出库、7:其他出库、 ///2:抽检出库、5:中间品出库、8:寄存出库
                        if (model.SoType == "0" || model.SoType == "3" || model.SoType == "4" || model.SoType == "7")
                        if (model.orderType == "0" || model.orderType == "3" || model.orderType == "4" || model.orderType == "7")
                        {
                            if (string.IsNullOrWhiteSpace(d.LotNo))
                            if (string.IsNullOrWhiteSpace(d.lotNo))
                            {
                                throw new Exception("批次不可为空!");
                            }
@@ -389,29 +389,29 @@
                        //库存明细
                        List<DataStockDetail> stockDetails;
                        //指定批次
                        if (!string.IsNullOrWhiteSpace(d.LotNo))
                        if (!string.IsNullOrWhiteSpace(d.lotNo))
                        {
                            stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).ToList();
                            stockDetails = stockDetailList.Where(s => s.SkuNo == d.skuNo && s.LotNo == d.lotNo).ToList();
                            if (stockDetails.Count < 1)
                            {
                                throw new Exception($"库存中未查询到出库物料信息:{d.SkuNo}");
                                throw new Exception($"库存中未查询到出库物料信息:{d.skuNo}");
                            }
                            //判断数量
                            var qty = stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty);
                            if (d.Qty > qty)
                            if (d.skuQty > qty)
                            {
                                throw new Exception($"总库存中出库物料信息:{d.SkuNo}、{d.LotNo} 库存数量不足");
                                throw new Exception($"总库存中出库物料信息:{d.skuNo}、{d.lotNo} 库存数量不足");
                            }
                            //库存信息
                            var stockInfo = stockList.First(w => w.SkuNo == d.SkuNo && w.LotNo == d.LotNo);
                            var stockInfo = stockList.First(w => w.SkuNo == d.skuNo && w.LotNo == d.lotNo);
                            if (stockInfo == null)
                            {
                                throw new Exception($"总库存中未查询到出库物料信息:{d.SkuNo}");
                                throw new Exception($"总库存中未查询到出库物料信息:{d.skuNo}");
                            }
                            //判断总库存数量
                            if (d.Qty > stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty)
                            if (d.skuQty > stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty)
                            {
                                throw new Exception($"总库存中出库物料信息:{d.SkuNo}、{d.LotNo} 库存数量不足");
                                throw new Exception($"总库存中出库物料信息:{d.skuNo}、{d.lotNo} 库存数量不足");
                            }
                            //添加出库单明细
                            var noticeDetail = new BllExportNoticeDetail()
@@ -420,36 +420,36 @@
                                SkuNo = sku.SkuNo,
                                SkuName = sku.SkuName,
                                Standard = sku.Standard,
                                LotNo = d.LotNo,
                                LotNo = d.lotNo,
                                LotText = stockInfo.LotText,
                                Qty = d.Qty,
                                Qty = d.skuQty,
                                AllotQty = 0,
                                FactQty = 0,
                                CompleteQty = 0,
                                PackagNo = sku.PackagNo,
                                Price = sku.Price,
                                Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty,
                                Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.skuQty,
                                IsBale = "",
                                IsBelt = "",
                                SupplierLot = stockInfo.SupplierLot,
                                IsWave = "0",
                                WaveNo = "",
                                IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1",
                                IsMixBox = d.IsMixBox,
                                IsIssueLotNo = string.IsNullOrWhiteSpace(d.lotNo) ? "0" : "1",
                                IsMixBox = "0",
                                OrderDetailCode = d.OrderDetailCode,
                                OrderDetailCode = d.lineNo,
                                CreateUser = 0,
                            };
                            list.Add(noticeDetail);
                            //更新库存锁定数量
                            stockInfo.LockQty += d.Qty;
                            stockInfo.LockQty += d.skuQty;
                            var i = Db.Updateable(stockInfo).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
                            SoDetailInfo soDetail = new SoDetailInfo();
                            soDetail.OrderDetailCode = d.OrderDetailCode;
                            soDetail.LockQty = d.Qty;
                            soDetail.LotNo = d.LotNo;
                            soDetail.OrderDetailCode = d.lineNo;
                            soDetail.LockQty = d.skuQty;
                            soDetail.LotNo = d.lotNo;
                            soDetailList.Add(soDetail);
                        }
@@ -458,12 +458,12 @@
                            Dictionary<int, decimal> dic = new Dictionary<int, decimal>();
                            decimal q1 = 0;
                            //首先查询当前这种物料批次号为空的
                            stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList();
                            stockDetails = stockDetailList.Where(s => s.SkuNo == d.skuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList();
                            if (stockDetails.Count > 0)
                            {
                                q1 = (decimal)stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty);
                                //库存信息
                                var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(w.LotNo));
                                var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.skuNo && string.IsNullOrWhiteSpace(w.LotNo));
                                if (stockInfo != null)
                                {
                                    var q2 = stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty;
@@ -471,29 +471,29 @@
                                    {
                                        q1 = q2;
                                    }
                                    if (d.Qty > q1)
                                    if (d.skuQty > q1)
                                    {
                                        dic.Add(stockInfo.Id, q1);
                                    }
                                    else
                                    {
                                        dic.Add(stockInfo.Id, d.Qty);
                                        dic.Add(stockInfo.Id, d.skuQty);
                                    }
                                }
                            }
                            //如果批次号为空的数量不够,根据批次先进先出原则查找其它批次的
                            if (d.Qty > q1)
                            if (d.skuQty > q1)
                            {
                                stockDetails = stockDetailList.Where(m => m.SkuNo == d.SkuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList();
                                stockDetails = stockDetailList.Where(m => m.SkuNo == d.skuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList();
                                foreach (var demo in stockDetails)
                                {
                                    if (q1 >= d.Qty)
                                    if (q1 >= d.skuQty)
                                    {
                                        break;
                                    }
                                    var q2 = demo.Qty - demo.FrozenQty - demo.LockQty;
                                    //库存信息
                                    var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.SkuNo && w.LotNo == demo.LotNo);
                                    var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.skuNo && w.LotNo == demo.LotNo);
                                    if (stockInfo == null)
                                    {
                                        continue;
@@ -508,18 +508,18 @@
                                    {
                                        q2 = q3;
                                    }
                                    if (q2 > d.Qty - q1)
                                    if (q2 > d.skuQty - q1)
                                    {                                        
                                        if (!dic.ContainsKey(stockInfo.Id))
                                        {
                                            dic.Add(stockInfo.Id, d.Qty - q1);
                                            dic.Add(stockInfo.Id, d.skuQty - q1);
                                        }
                                        else
                                        {
                                            //更新值
                                            dic[stockInfo.Id] += d.Qty - q1;
                                            dic[stockInfo.Id] += d.skuQty - q1;
                                        }
                                        q1 += d.Qty - q1;
                                        q1 += d.skuQty - q1;
                                    }
                                    else
                                    {                                       
@@ -536,9 +536,9 @@
                                    }
                                }
                            }
                            if (d.Qty > q1)
                            if (d.skuQty > q1)
                            {
                                throw new Exception($"总库存中出库物料信息:{d.SkuNo} 库存数量不足");
                                throw new Exception($"总库存中出库物料信息:{d.skuNo} 库存数量不足");
                            }
                            foreach (var s in dic)
                            {
@@ -546,7 +546,7 @@
                                var item = new BllExportNoticeDetail()
                                {
                                    SONo = billNo,
                                    OrderDetailCode = d.OrderDetailCode,
                                    OrderDetailCode = d.lineNo,
                                    SkuNo = sku.SkuNo,
                                    SkuName = sku.SkuName,
                                    Standard = sku.Standard,
@@ -558,14 +558,14 @@
                                    CompleteQty = 0,
                                    PackagNo = sku.PackagNo,
                                    Price = sku.Price,
                                    Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty,
                                    Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.skuQty,
                                    IsBale = "",
                                    IsBelt = "",
                                    SupplierLot = st.SupplierLot,
                                    IsWave = "0",
                                    WaveNo = "",
                                    IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1",
                                    IsMixBox = d.IsMixBox,
                                    IsIssueLotNo = string.IsNullOrWhiteSpace(d.lotNo) ? "0" : "1",
                                    IsMixBox = "0",
                                    CreateUser = 0,
                                };
@@ -575,7 +575,7 @@
                                var i = Db.Updateable(st).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
                                SoDetailInfo soDetail = new SoDetailInfo();
                                soDetail.OrderDetailCode = d.OrderDetailCode;
                                soDetail.OrderDetailCode = d.lineNo;
                                soDetail.LockQty = s.Value;
                                soDetail.LotNo = st.LotNo;
@@ -586,13 +586,13 @@
                    var notice = new BllExportNotice()
                    {
                        SONo = billNo,
                        OrderCode=model.OrderCode,
                        Type = model.SoType,
                        OrderCode=model.orderNo,
                        Type = model.orderType,
                        Status = "0",
                        Origin = "WMS",
                        CustomerNo = model.Customer,
                        CustomerNo = model.customerNo,
                        CustomerName = CustomerName,
                        LogisticsId = logisticsId,
                        LogisticsId = null,//logisticsId,
                        IsWave = "0",
                        WaveNo = "",
                        IsDespatch = "0",