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,7 +150,11 @@
                {
                    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)
                {
@@ -158,7 +165,8 @@
                {
                    qty = 0;
                }
                return qty.ToString();
                data.Qty = qty.ToString();
                return data;
            }
            catch (Exception e)
            {
@@ -364,7 +372,9 @@
                        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("yyyyMMdd") == DateTime.Now.ToString("yyyyMMdd")).Max(m => m.BoxCodeStr);
                            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))
                            {
                                maxBoxCodeStr = "BK" + toDayTime.Substring(2, 4) + "0001";
@@ -399,18 +409,18 @@
                        }
                        string lot1 = detailModel.Lot1;
                        string lot2 = detailModel.Lot2;
                        if (sku.IsPasteCode == "0")
                        if (sku.IsInspect == "0")//是否免检,0:否 1:是
                        {
                            //不贴标物料 生产日期、有效期不能为空
                            //不免检物料 生产日期、有效期不能为空
                            DateTime lot12;
                            DateTime lot22;
                            if (!DateTime.TryParse(detailModel.Lot1, out lot12))
                            {
                                throw new Exception("非贴标物料生产日期转换失败");
                                throw new Exception("不免检物料生产日期转换失败");
                            }
                            if (!DateTime.TryParse(detailModel.Lot2, out lot22))
                            {
                                throw new Exception("非贴标物料过期日期转换失败");
                                throw new Exception("不免检物料过期日期转换失败");
                            }
                            lot1 = lot12.ToString();
                            lot2 = lot22.ToString();
@@ -628,7 +638,9 @@
                            //    }
                            //}
                            //detailModel.LotNo = maxLotNo;
                            var maxBoxCodeStr = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && m.BoxCodeStr.Contains("BK") && m.CreateTime.ToString("yyyyMMdd") == DateTime.Now.ToString("yyyyMMdd")).Max(m => m.BoxCodeStr);
                            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))
                            {
                                maxBoxCodeStr = "BK" + toDayTime.Substring(2, 4) + "0001";
@@ -695,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
@@ -729,6 +742,7 @@
                            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;
@@ -1244,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 = "不存在当前物料信息!";
@@ -1325,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",
@@ -1388,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");
@@ -1417,7 +1432,7 @@
                if (obj.Success != 0)
                {
                    throw new Exception("上传失败" + obj.Message);
                }*/
                }
                #endregion
                notice.Status = "4";