wxw
2 天以前 950fac9fd7b9477fc2bbe3253d217f62ac7608e5
Wms/WMS.BLL/BllAsnServer/ArrivalNoticeServer.cs
@@ -1,14 +1,17 @@
using Model.InterFaceModel;
using Model.ModelDto;
using Model.ModelDto.BllAsnDto;
using Model.ModelDto.SysDto;
using Model.ModelVm;
using Model.ModelVm.SysVm;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Utility.Tools;
using WMS.BLL.LogServer;
using WMS.DAL;
using WMS.Entity.BllAsnEntity;
@@ -138,7 +141,7 @@
        }
        //获取入库单明细剩余打印数量
        public string GetAsnDetailQtyList(int id)
        public LabelPrintInfoDto GetAsnDetailQtyList(int id)
        {
            try
            {
@@ -147,14 +150,23 @@
                {
                    throw new Exception("未查询到入库单明细");
                }
                var data = new LabelPrintInfoDto();
                data.ProductionTime = string.IsNullOrEmpty(detail.Lot1) ? "" : Convert.ToDateTime(detail.Lot1).ToString("yyyy-MM-dd");
                data.ExpirationTime = string.IsNullOrEmpty(detail.Lot2) ? "" : Convert.ToDateTime(detail.Lot2).ToString("yyyy-MM-dd");
                data.SupplierLot = detail.SupplierLot;
                var labelQty = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNDetailNo == id).Sum(m => m.Qty + (m.SamplingQty == null? 0: m.SamplingQty));
                if (labelQty == null)
                {
                    labelQty = 0;
                }
                var qty = detail.Qty - labelQty;
                if (qty<0)
                {
                    qty = 0;
                }
                return qty.ToString();
                data.Qty = qty.ToString();
                return data;
            }
            catch (Exception e)
            {
@@ -297,6 +309,8 @@
                    };
                    List<BllArrivalNoticeDetail> details = new List<BllArrivalNoticeDetail>();
                    var skuList = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0").ToList();
                    foreach (ArrivalNoticeDetailVm detailModel in model.AsnDetail)
                    {
                        if (string.IsNullOrEmpty(detailModel.SkuNo))
@@ -314,7 +328,7 @@
                            strMessage = "-1:数量必须大于0;";
                            continue;
                        }
                        if ( model.Type == "5" || model.Type == "6" || model.Type == "7")
                        {
                            if (!string.IsNullOrWhiteSpace(detailModel.LotNo))
@@ -347,12 +361,29 @@
                                detailModel.LotNo = maxLotNo;
                            }
                        }
                        if (model.Type == "0" || model.Type == "1" || model.Type == "2" || model.Type == "3" || model.Type == "4" && model.Type == "8")
                        //if (model.Type == "0" || model.Type == "1" || model.Type == "2" || model.Type == "3" || model.Type == "4" && model.Type == "8")
                        //{
                        //    if (string.IsNullOrWhiteSpace(detailModel.LotNo))
                        //    {
                        //        throw new Exception("当前单据类型批次不可为空!");
                        //    }
                        //}
                        detailModel.BoxCodeStr = detailModel.LotNo;
                        if (string.IsNullOrWhiteSpace(detailModel.LotNo))
                        {
                            if (string.IsNullOrWhiteSpace(detailModel.LotNo))
                            string toDayTime = DateTime.Now.ToString("yyyyMM");
                            var maxBoxCodeStr = Db.Queryable<BllArrivalNoticeDetail>()
                                .Where(m => m.IsDel == "0" && m.BoxCodeStr.Contains("BK")
                                && m.CreateTime.ToString("yyyyMM") == DateTime.Now.ToString("yyyyMM")).Max(m => m.BoxCodeStr);
                            if(string.IsNullOrWhiteSpace(maxBoxCodeStr))
                            {
                                throw new Exception("当前单据类型批次不可为空!");
                                maxBoxCodeStr = "BK" + toDayTime.Substring(2, 4) + "0001";
                            }
                            else
                            {
                                maxBoxCodeStr = "BK" + (int.Parse(maxBoxCodeStr.Replace("BK", "")) + 1).ToString();
                            }
                            detailModel.BoxCodeStr = maxBoxCodeStr;
                        }
                        // 判断是否已存在当前明细
@@ -371,6 +402,33 @@
                        {
                            detailModel.Price = 0;
                        }
                        var sku = skuList.FirstOrDefault(m => m.SkuNo == detailModel.SkuNo);
                        if (sku == null)
                        {
                            throw new Exception("未查询出物料信息!");
                        }
                        string lot1 = detailModel.Lot1;
                        string lot2 = detailModel.Lot2;
                        if (sku.IsInspect == "0")//是否免检,0:否 1:是
                        {
                            //不免检物料 生产日期、有效期不能为空
                            DateTime lot12;
                            DateTime lot22;
                            if (!DateTime.TryParse(detailModel.Lot1, out lot12))
                            {
                                throw new Exception("不免检物料生产日期转换失败");
                            }
                            if (!DateTime.TryParse(detailModel.Lot2, out lot22))
                            {
                                throw new Exception("不免检物料过期日期转换失败");
                            }
                            lot1 = lot12.ToString();
                            lot2 = lot22.ToString();
                        }
                        if (string.IsNullOrWhiteSpace(detailModel.PackagNo))
                        {
                            throw new Exception("包装不能为空");
                        }
                        // 计算出总金额
                        detailModel.Money = detailModel.Price * detailModel.Qty;
                        BllArrivalNoticeDetail detail = new BllArrivalNoticeDetail()
@@ -379,7 +437,7 @@
                            SkuNo = detailModel.SkuNo,
                            SkuName = detailModel.SkuName,
                            Standard = detailModel.Standard,
                            LotNo = detailModel.LotNo.Trim(),
                            LotNo = detailModel.LotNo == null ? "" : detailModel.LotNo.Trim(),
                            LotText = detailModel.LotText,
                            Qty = (decimal)detailModel.Qty,
                            PackagNo = detailModel.PackagNo,
@@ -393,6 +451,9 @@
                            Status = "0",
                            IsSampling = "0",
                            InspectStatus = "0",
                            Lot1 = lot1, //生产日期
                            Lot2 = lot2, // 过期日期
                            BoxCodeStr = detailModel.BoxCodeStr,
                            UDF1 = detailModel.UDF1,
                            UDF2 = detailModel.UDF2,
                            UDF3 = detailModel.UDF3,
@@ -518,13 +579,13 @@
                            return strMessage;
                        }
                    
                        if (model.Type == "0" || model.Type == "2" || model.Type == "3" || model.Type == "4")
                        {
                            if (string.IsNullOrWhiteSpace(detailModel.LotNo))
                            {
                                throw new Exception("当前单据类型批次不可为空!");
                            }
                        }
                        //if (model.Type == "0" || model.Type == "2" || model.Type == "3" || model.Type == "4")
                        //{
                        //    if (string.IsNullOrWhiteSpace(detailModel.LotNo))
                        //    {
                        //        throw new Exception("当前单据类型批次不可为空!");
                        //    }
                        //}
                        if (TypeLot.Contains(model.Type)) 
                        {
@@ -554,29 +615,41 @@
                        //生成自有批次
                        if (detailModel.Id == 0 || detailModel.Id == null || string.IsNullOrWhiteSpace(detailModel.LotNo))
                        {
                            var notice = Db.Queryable<BllArrivalNotice>().Where(m => m.IsDel == "0" && TypeLot.Contains(m.Type)).Select(m => m.ASNNo).ToList();
                            if (string.IsNullOrWhiteSpace(maxLotNo))
                            //var notice = Db.Queryable<BllArrivalNotice>().Where(m => m.IsDel == "0" && TypeLot.Contains(m.Type)).Select(m => m.ASNNo).ToList();
                            //if (string.IsNullOrWhiteSpace(maxLotNo))
                            //{
                            //    maxLotNo = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && !string.IsNullOrWhiteSpace(m.LotNo) && notice.Contains(m.ASNNo)).Max(m => m.LotNo);
                            //}
                            //if (string.IsNullOrWhiteSpace(maxLotNo))
                            //{
                            //    maxLotNo = toDayTime.Substring(2, 6) + "0001";
                            //}
                            //else
                            //{
                            //    var lotStr = maxLotNo.Substring(0, 6);
                            //    var timeStr = toDayTime.Substring(2, 6);
                            //    if (lotStr == timeStr)
                            //    {
                            //        maxLotNo = toDayTime.Substring(2, 6) + (int.Parse(maxLotNo.Substring(6, 4)) + 1).ToString().PadLeft(4, '0');
                            //    }
                            //    else
                            //    {
                            //        maxLotNo = timeStr + "0001";
                            //    }
                            //}
                            //detailModel.LotNo = maxLotNo;
                            var maxBoxCodeStr = Db.Queryable<BllArrivalNoticeDetail>()
                                .Where(m => m.IsDel == "0" && m.BoxCodeStr.Contains("BK")
                                && m.CreateTime.ToString("yyyyMM") == DateTime.Now.ToString("yyyyMM")).Max(m => m.BoxCodeStr);
                            if (string.IsNullOrWhiteSpace(maxBoxCodeStr))
                            {
                                maxLotNo = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && !string.IsNullOrWhiteSpace(m.LotNo) && notice.Contains(m.ASNNo)).Max(m => m.LotNo);
                            }
                            if (string.IsNullOrWhiteSpace(maxLotNo))
                            {
                                maxLotNo = toDayTime.Substring(2, 6) + "0001";
                                maxBoxCodeStr = "BK" + toDayTime.Substring(2, 4) + "0001";
                            }
                            else
                            {
                                var lotStr = maxLotNo.Substring(0, 6);
                                var timeStr = toDayTime.Substring(2, 6);
                                if (lotStr == timeStr)
                                {
                                    maxLotNo = toDayTime.Substring(2, 6) + (int.Parse(maxLotNo.Substring(6, 4)) + 1).ToString().PadLeft(4, '0');
                                }
                                else
                                {
                                    maxLotNo = timeStr + "0001";
                                }
                                maxBoxCodeStr = "BK" + (int.Parse(maxBoxCodeStr.Replace("BK", "")) + 1).ToString();
                            }
                            detailModel.LotNo = maxLotNo;
                            detailModel.BoxCodeStr = maxBoxCodeStr;
                        }
                        if (detailModel.Id == 0 || detailModel.Id == null)
@@ -595,7 +668,7 @@
                                SkuNo = detailModel.SkuNo,
                                SkuName = detailModel.SkuName,
                                Standard = detailModel.Standard,
                                LotNo = detailModel.LotNo.Trim(),
                                LotNo = detailModel.LotNo == null ? "" : detailModel.LotNo.Trim(),
                                LotText = detailModel.LotText,
                                Qty = (decimal)detailModel.Qty,
                                PackagNo = detailModel.PackagNo,
@@ -607,8 +680,11 @@
                                IsBelt = detailModel.IsBelt,
                                SupplierLot = detailModel.SupplierLot,
                                Status = "0",
                                IsSampling = "0",
                                InspectStatus = "0",
                                Lot1 = detailModel.Lot1,
                                Lot2 = detailModel.Lot2,
                                BoxCodeStr = detailModel.BoxCodeStr,
                                UDF1 = detailModel.UDF1,
                                UDF2 = detailModel.UDF2,
                                UDF3 = detailModel.UDF3,
@@ -631,6 +707,7 @@
                                             && it.IsBelt == detailModel.IsBelt
                                             && it.Lot1 == detailModel.Lot1                                 // 生产日期
                                             && it.Lot2 == detailModel.Lot2                                 // 过期日期
                                             && it.BoxCodeStr == detailModel.BoxCodeStr
                                             && it.UDF1 == detailModel.UDF1
                                             && it.UDF2 == detailModel.UDF2
                                             && it.UDF3 == detailModel.UDF3
@@ -658,13 +735,14 @@
                            detailModel.Money = detailModel.Price * detailModel.Qty;
                            dbDetail.Qty = (decimal)detailModel.Qty;
                            dbDetail.LotNo = detailModel.LotNo;
                            dbDetail.LotNo = detailModel.LotNo == null ? "" : detailModel.LotNo.Trim();
                            dbDetail.Money = detailModel.Money;
                            dbDetail.LotText = detailModel.LotText;
                            dbDetail.SupplierLot = detailModel.SupplierLot;
                            dbDetail.IsBale = detailModel.IsBale;
                            dbDetail.Lot1 = detailModel.Lot1;
                            dbDetail.Lot2 = detailModel.Lot2;
                            dbDetail.BoxCodeStr = detailModel.BoxCodeStr;
                            dbDetail.UDF1 = detailModel.UDF1;
                            dbDetail.UDF2 = detailModel.UDF2;
                            dbDetail.UDF3 = detailModel.UDF3;
@@ -1180,77 +1258,64 @@
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public ErpModel CreateAsn(AsnInfo model)
        public ErpModel CreateAsn(SendAsnVm model,string userName)
        {
            try
            {
                var resultModel = new ErpModel() { Success = -1, Message = "" };
                if (string.IsNullOrEmpty(model.AsnType))
                if (string.IsNullOrEmpty(model.billType.ToString()))
                {
                    resultModel.Message = "单据类型不可为空!";
                    return resultModel;
                }
                if (string.IsNullOrEmpty(model.Customer))
                {
                    resultModel.Message = "客户不可为空!";
                    return resultModel;
                }
                if (string.IsNullOrEmpty(model.OrderCode))
                if (string.IsNullOrEmpty(model.orderNo.ToString()))
                {
                    resultModel.Message = "上游系统单号不可为空!";
                    return resultModel;
                }
                if (model.AsnDetails.Count <= 0)
                if (model.orderDCmdList.Count <= 0)
                {
                    resultModel.Message = "入库单明细不可为空!";
                    return resultModel;
                }
                // 根据客户编号获取客户名称
                var CustomerModel = Db.Queryable<SysCustomer>().First(it => it.CustomerNo == model.Customer && it.IsDel == "0");
                if (CustomerModel == null)
                {
                    resultModel.Message = "客户编号不存在!";
                    return resultModel;
                }
                // 入库总表信息
                string asnNo = new Common().GetMaxNo("ASN");
                var asnModel = new BllArrivalNotice()
                {
                    ASNNo = asnNo,
                    Status = "0",//等待执行
                    Type = model.AsnType,
                    Origin = string.IsNullOrEmpty(model.Origin) ? "ERP" : model.Origin,
                    CustomerNo = model.Customer,
                    CustomerName = CustomerModel.CustomerName,
                    OrderCode = model.OrderCode,
                    UserName = model.Username
                    Type = model.billType.ToString(),
                    Origin = "SAP",
                    CustomerNo = model.vendorNo,
                    CustomerName = model.vendorName,
                    OrderCode = model.orderNo.ToString(),
                    UserName = userName
                };
                // 入库明细表信息
                List<BllArrivalNoticeDetail> detailModels = new List<BllArrivalNoticeDetail>();
                foreach (AsnDetail asnDetailModel in model.AsnDetails)
                foreach (var asnDetailModel in model.orderDCmdList)
                {
                    if (string.IsNullOrEmpty(asnDetailModel.SkuNo))
                    if (string.IsNullOrEmpty(asnDetailModel.skuNo.ToString()))
                    {
                        resultModel.Message = "物料编码不可为空!";
                        return resultModel;
                    }
                    if (asnDetailModel.Qty <= 0)
                    if (Convert.ToDecimal(asnDetailModel.expectedQty) <= 0)
                    {
                        resultModel.Message = "数量应为正整数!";
                        resultModel.Message = "应收物料数量应大于0!";
                        return resultModel;
                    }
                    if (string.IsNullOrEmpty(asnDetailModel.LotNo))
                    if (string.IsNullOrEmpty(asnDetailModel.lotNo.ToString()))
                    {
                        resultModel.Message = "批次号不可为空!";
                        return resultModel;
                    }
                    // 获取物料详细信息
                    var skuModel = Db.Queryable<SysMaterials>().First(it => it.SkuNo == asnDetailModel.SkuNo && it.IsDel == "0");
                    var skuModel = Db.Queryable<SysMaterials>().First(it => it.SkuNo == asnDetailModel.skuNo.ToString() && it.IsDel == "0");
                    if (skuModel == null)
                    {
                        resultModel.Message = "不存在当前物料信息!";
@@ -1261,17 +1326,20 @@
                    var detailModel = new BllArrivalNoticeDetail()
                    {
                        OrderDetailCode = asnDetailModel.lineNo,
                        ASNNo = asnNo,
                        SkuNo = asnDetailModel.SkuNo,
                        SkuNo = asnDetailModel.skuNo.ToString(),
                        SkuName = skuModel.SkuName,
                        Standard = skuModel.Standard,
                        LotNo = asnDetailModel.LotNo,
                        LotNo = asnDetailModel.lotNo.ToString(),
                        LotText = "",
                        Qty = (decimal)asnDetailModel.Qty,
                        FactQty=0,
                        CompleteQty=0,
                        Qty = Convert.ToDecimal(asnDetailModel.expectedQty),
                        FactQty = 0,
                        CompleteQty = 0,
                        PackagNo = skuModel.PackagNo,
                        SupplierLot = asnDetailModel.SupplierLot,
                        SupplierLot = asnDetailModel.supplyBatch,
                        Lot1 = asnDetailModel.productionDate,//生产日期
                        Lot2 = asnDetailModel.expireDate,//过期日期
                        Status = "0",
                        IsSampling = "0",
                        InspectStatus = "0",
@@ -1324,28 +1392,39 @@
                {
                    throw new Exception("复核失败,复核人员和关闭订单人员不能相同!");
                }
                var list = new List<AsnDetail>();
                var list = new List<BackAsnDetail>();
                foreach (var d in detail)
                {
                    var item = new AsnDetail()
                    var mater = Db.Queryable<SysMaterials>().First(w => w.IsDel == "0" && w.SkuNo == d.SkuNo);
                    if (mater == null)
                    {
                        SkuNo = d.SkuNo,
                        LotNo = d.LotNo,
                        Qty = d.CompleteQty,
                        PackagNo = d.PackagNo,
                        SupplierLot = d.SupplierLot
                        throw new Exception($"复核失败,物料编码:{d.SkuNo}的物料信息不存在");
                    }
                    var item = new BackAsnDetail()
                    {
                        POSNR=d.OrderDetailCode,
                        MATNR = d.SkuNo,
                        MAKTX=d.SkuName,
                        LFIMG = d.CompleteQty.ToString(),
                        MEINS= mater.UnitNo,
                        CHARG = d.LotNo,
                        HSDAT = d.Lot1,
                        VFDAT = d.Lot2
                    };
                    list.Add(item);
                }
                var soInfo = new AsnInfo()
                var soInfo = new BackAsnVm()
                {
                    OrderCode = notice.OrderCode,
                    AsnDetails = list
                    ZUUID = Guid.NewGuid().ToString(),
                    VBELN = notice.OrderCode,
                    LFART = notice.Type,
                    WADAT_IST = Convert.ToDateTime(notice.CompleteTime).ToString("yyyy-MM-dd"),
                    ITEM = list
                };
                #region 通过接口发送至erp 
                //系统对接后放开
                /*var jsonData = JsonConvert.SerializeObject(soInfo);
                var jsonData = JsonConvert.SerializeObject(soInfo);
                var response = HttpHelper.DoPost(url, jsonData, "入库单完成上传", "ERP");
@@ -1353,7 +1432,7 @@
                if (obj.Success != 0)
                {
                    throw new Exception("上传失败" + obj.Message);
                }*/
                }
                #endregion
                notice.Status = "4";