wxw
2 天以前 950fac9fd7b9477fc2bbe3253d217f62ac7608e5
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",
@@ -630,7 +630,7 @@
        }
        //回传出库单
        public bool FinishSo(int id, string url, int userId)
        public bool FinishSo(int id, string url, string url2, int userId)
        {
            try
            {
@@ -652,34 +652,83 @@
                {
                    throw new Exception("复核失败,复核人员和关闭订单人员不能相同!");
                }
                var list = new List<SoDetail>();
                foreach (var d in detail)
                if (notice.Type == "2")//抽检出库
                {
                    var item = new SoDetail()
                    var list = new List<SendSampleSku>();
                    foreach (var d in detail)
                    {
                        SkuNo = d.SkuNo,
                        LotNo = d.LotNo,
                        Qty = (decimal)d.CompleteQty
                    };
                    list.Add(item);
                }
                var soInfo = new SoInfo()
                {
                    OrderCode = notice.OrderCode,
                    SoDetails = list
                };
                #region 通过接口发送至erp
                //系统对接后放开
                /*var jsonData = JsonConvert.SerializeObject(soInfo);
                        var item = new SendSampleSku()
                        {
                            skuNo = d.SkuNo,
                            skuName = d.SkuName,
                            lotNo = d.LotNo,
                            skuQty = Convert.ToDecimal(d.CompleteQty)
                        };
                        list.Add(item);
                    }
                    SendSampleVm sendSampleVm = new SendSampleVm();
                    sendSampleVm.pallDataList = list;
                var response = HttpHelper.DoPost(url, jsonData, "出库单完成上传", "ERP");
                var obj = JsonConvert.DeserializeObject<ErpModel>(response);//解析返回数据
                if (obj.Success != 0)
                    SapSampleVm sapSampleVm = new SapSampleVm();
                    sapSampleVm.data = sendSampleVm;
                    #region 通过接口发送至erp
                    //系统对接后放开
                    /*var jsonData = JsonConvert.SerializeObject(sapSampleVm);
                    var response = HttpHelper.DoPost(url2, jsonData, "抽检出库完成上传", "ERP");
                    var obj = JsonConvert.DeserializeObject<ErpModel>(response);//解析返回数据
                    if (obj.Success != 0)
                    {
                        throw new Exception("上传失败" + obj.Message);
                    }*/
                    #endregion
                }
                else
                {
                    throw new Exception("上传失败" + obj.Message);
                }*/
                #endregion
                    var list = new List<BackSoDetail>();
                    foreach (var d in detail)
                    {
                        var mater = Db.Queryable<SysMaterials>().First(w => w.IsDel == "0" && w.SkuNo == d.SkuNo);
                        if (mater == null)
                        {
                            throw new Exception($"复核失败,物料编码:{d.SkuNo}的物料信息不存在");
                        }
                        var item = new BackSoDetail()
                        {
                            POSNR = d.OrderDetailCode,
                            MATNR = d.SkuNo,
                            CHARG = d.LotNo,
                            LFIMG = d.CompleteQty.ToString(),
                            MEINS = mater.UnitNo,
                            HSDAT = "",
                            VFDAT = ""
                        };
                        list.Add(item);
                    }
                    var soInfo = new BackSoVm()
                    {
                        ZUUID = Guid.NewGuid().ToString(),
                        VBELN = notice.OrderCode,
                        WERKS = notice.CustomerNo,
                        LFART = notice.Type,
                        WADAT_IST = Convert.ToDateTime(notice.CompleteTime).ToString("yyyy-MM-dd"),
                        ITEM = list
                    };
                    #region 通过接口发送至erp
                    //系统对接后放开
                    /*var jsonData = JsonConvert.SerializeObject(soInfo);
                    var response = HttpHelper.DoPost(url, jsonData, "出库单完成上传", "ERP");
                    var obj = JsonConvert.DeserializeObject<ErpModel>(response);//解析返回数据
                    if (obj.Success != 0)
                    {
                        throw new Exception("上传失败" + obj.Message);
                    }*/
                    #endregion
                }
                notice.Status = "6";
                notice.CheckTime = DateTime.Now;
@@ -1998,7 +2047,7 @@
                   .AndIF(!string.IsNullOrWhiteSpace(model.BitPalletMark), m => m.BitPalletMark == model.BitPalletMark)
                   .And(m => !string.IsNullOrWhiteSpace(m.WareHouseNo))
                   .And(a => a.Status == "0")
                   .And(a => a.WareHouseNo == "W01")
                   .And(a => a.WareHouseNo == "W02")
                   .ToExpression();
            var data = await Db.Queryable<DataStockDetail>().Where(item).OrderBy(m => m.LocatNo).ToPageListAsync(model.Page, model.Limit, count);
            //data.Select(m => m.Status == "0" && m.IsDel == "0");
@@ -2038,6 +2087,12 @@
                if (detailGroup.Count > 1)
                {
                    throw new Exception($"未在库内查询到该托盘信息");
                }
                var locatStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == outMode && w.Status == "0");
                if (locatStart == null)
                {
                    throw new Exception($"目标储位不存在或非空闲,请检查");
                }
@@ -2151,14 +2206,16 @@
                    outDtoList.Add(new OutCommandDto()
                    {
                        TaskNo = exTask.TaskNo, // 任务号
                        TaskType = "1",// 任务类型 (出库)
                        PalletNo = palletNo,//托盘号
                        StartLocate = locate.LocatNo, // 起始位置
                        StartRoadway = locate.RoadwayNo,
                        EndLocate = outMode, // 目标位置 
                        TaskNo = exTask.TaskNo, // 任务号
                        TaskType = "1",// 任务类型 (出库)
                        OutMode = outMode,  //目标地址
                        Order = 1
                        Order = 999,
                        Type = PLCTypeEnum.AGV
                    });
                    #endregion
@@ -2179,6 +2236,8 @@
                    Db.Updateable(locate).ExecuteCommand();
                    locatStart.Status = "2";//要入库的储位改变状态 正在入库
                    Db.Updateable(locate).ExecuteCommand();
                    #endregion
                    //添加操作日志记录