From bb66bf9372783cfb1af35a5384fdc69cc9c56a9f Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期二, 10 六月 2025 23:14:56 +0800
Subject: [PATCH] 1

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs |  398 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 387 insertions(+), 11 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs"
index ab95005..2e8992a 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs"
@@ -1,13 +1,25 @@
-锘縰sing System;
+锘縰sing AutoMapper;
+using MailKit.Search;
+using SqlSugar;
+using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Common.CommonEnum;
 using WIDESEA_Common.OrderEnum;
 using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_Core.Helper;
+using WIDESEA_Core.Utilities;
+using WIDESEA_DTO;
+using WIDESEA_DTO.Basic;
+using WIDESEA_DTO.ERP;
+using WIDESEA_External.ERPService;
+using WIDESEA_External.Model;
+using WIDESEA_IBasicRepository;
 using WIDESEA_ICheckRepository;
 using WIDESEA_IInboundRepository;
 using WIDESEA_IInboundService;
@@ -17,15 +29,32 @@
 {
     public class ReceiveOrderService : ServiceBase<Dt_ReceiveOrder, IReceiveOrderRepository>, IReceiveOrderService
     {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+        private readonly IMapper _mapper;
         private readonly ICheckOrderRepository _checkOrderRepository;
         private readonly IInboundRepository _inboundRepository;
+        private readonly IBasicRepository _basicRepository;
+        private readonly IInvokeERPService _invokeERPService;
 
-        public ReceiveOrderService(IReceiveOrderRepository BaseDal, ICheckOrderRepository checkOrderRepository, IInboundRepository inboundRepository) : base(BaseDal)
+        public ReceiveOrderService(IReceiveOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IMapper mapper, ICheckOrderRepository checkOrderRepository, IInboundRepository inboundRepository, IBasicRepository basicRepository, IInvokeERPService invokeERPService) : base(BaseDal)
         {
+            _mapper = mapper;
+            _unitOfWorkManage = unitOfWorkManage;
             _checkOrderRepository = checkOrderRepository;
             _inboundRepository = inboundRepository;
+            _basicRepository = basicRepository;
+            _invokeERPService = invokeERPService;
         }
-
+        public override PageGridData<Dt_ReceiveOrder> GetPageData(PageDataOptions options)
+        {
+            PageGridData<Dt_ReceiveOrder> pageGridData = base.GetPageData(options);
+            //foreach (var item in pageGridData.Rows)
+            //{
+            //    //鑾峰彇鏀惰揣鏄庣粏
+            //    item.PurchaseOrderNo
+            //}
+            return pageGridData;
+        }
         public override WebResponseContent AddData(SaveModel saveModel)
         {
             if (saveModel.MainData.ContainsKey(nameof(Dt_ReceiveOrder.ReceiveOrderStatus).FirstLetterToLower()))
@@ -55,8 +84,8 @@
 
             if (saveModel.MainData.TryGetValue(nameof(Dt_ReceiveOrder.SuppliersId).FirstLetterToLower(), out object? suppliersId) && suppliersId != null && !string.IsNullOrEmpty(suppliersId.ToString()))
             {
-                Dt_ReceiveOrder receiveOrder = BaseDal.QueryFirst(x => x.SuppliersId == suppliersId.ToString() && x.WarehouseId == Convert.ToInt32(saveModel.MainData[nameof(Dt_ReceiveOrder.WarehouseId).FirstLetterToLower()]));
-                if (receiveOrder != null && receiveOrder.ReceiveOrderStatus != ReceiveOrderStatusEnum.Completed.ObjToInt())
+                Dt_ReceiveOrder receiveOrder = BaseDal.QueryFirst(x => x.SuppliersId == suppliersId.ToString() && x.WarehouseId == Convert.ToInt32(saveModel.MainData[nameof(Dt_ReceiveOrder.WarehouseId).FirstLetterToLower()]) && x.ReceiveOrderStatus< ReceiveOrderStatusEnum.Completed.ObjToInt());
+                if (receiveOrder != null)
                 {
                     return WebResponseContent.Instance.Error("璇ヤ緵搴斿晢鏈夋湭瀹屾垚鐨勬敹璐у崟");
                 }
@@ -64,12 +93,175 @@
 
             return base.AddData(saveModel);
         }
+        public override object GetDetailPage(PageDataOptions pageData)
+        {
+            Type t = typeof(Dt_ReceiveOrder);
 
+            if (pageData.Value == null) return new PageGridData<object>(total: 0, null);
+            string keyName = t.GetKeyName();
+            ////鐢熸垚鏌ヨ鏉′欢
+            //Expression<Func<TEntity, bool>> whereExpression = keyName.CreateExpression<TEntity>(pageData.Value, LinqExpressionType.Equal);
+            int totalCount = 0;
+            PropertyInfo propertyInfo = t.GetProperties().FirstOrDefault(x => x.GetCustomAttribute<Navigate>() != null);
+            if (propertyInfo != null)
+            {
+                Type detailType = propertyInfo.PropertyType.GetGenericArguments()[0];
+                Navigate navigate = propertyInfo.GetCustomAttribute<Navigate>();
+                List<Dt_ReceiveOrderDetail> list = BaseDal.Db.Queryable<Dt_ReceiveOrderDetail>().Where(navigate.GetName(), "=", pageData.Value).ToPageList(pageData.Page, pageData.Rows, ref totalCount);
+                decimal sum = 0;
+                list.ForEach(x =>
+                {
+                    sum += Convert.ToDecimal(x.ReceivedQuantity);
+                });
+                PageGridData<Dt_ReceiveOrderDetail> pageGridData = new PageGridData<Dt_ReceiveOrderDetail>()
+                {
+                    Total = totalCount,
+                    Rows = list,
+                    Summary = new
+                    {
+                        ReceivedQuantity = Math.Round(sum, 3),
+                    }
+                };
+                return pageGridData;
+            }
+            return new PageGridData<object>(total: 0, null);
+        }
+        /// <summary>
+        /// 鏀惰揣瀹屾垚骞跺洖浼燛RP
+        /// </summary>
+        /// <param name="orderId"></param>
+        /// <returns></returns>
+        public WebResponseContent FeedbackReceiveOrder(int orderId)
+        {
+            try
+            {
+                Dt_ReceiveOrder receiveOrder = BaseDal.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderId == orderId).Includes(x => x.Details).First();
+                if (receiveOrder == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒版敹璐у崟");
+                }
+                if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.Completed.ObjToInt())
+                {
+                    return WebResponseContent.Instance.Error($"鏀惰揣鍗曞凡瀹屾垚");
+                }
+                if (receiveOrder.Details == null || receiveOrder.Details.Count == 0)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒版敹璐у崟鏄庣粏");
+                }
+
+                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == receiveOrder.WarehouseId);
+                if (warehouse == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒颁粨搴撲俊鎭�");
+                }
+
+                List<RecevieOrderDetailModel> recevieOrderDetails = new List<RecevieOrderDetailModel>();
+                foreach (var item in receiveOrder.Details)
+                {
+                    RecevieOrderDetailModel recevieOrderDetail = new RecevieOrderDetailModel()
+                    {
+                        Currcode = "",
+                        IfInspection = item.IfInspection,
+                        Lotno = item.LotNo,
+                        MaterialsId = item.MaterielCode,
+                        PriceInTax = 0,
+                        PurchaseOrderCode = item.PurchaseOrderNo,
+                        PurchaseOrderSerno = item.PurchaseOrderDetailRowNo,
+                        QtyRecieved = item.ReceivedQuantity,
+                        Serno = item.RowNo,
+                        Supplotno = item.LotNo,
+                        Taxrate = "",
+
+                    };
+                    if (receiveOrder.ReceiveOrderType!=ReceiveOrderTypeEnum.PO.ObjToInt())
+                    {
+                        recevieOrderDetail.Taxrate = "ZZ11";
+                        recevieOrderDetail.Currcode = "RMB";
+                    }
+                    recevieOrderDetails.Add(recevieOrderDetail);
+                }
+
+                ERPReceiveModel receiveModel = new ERPReceiveModel()
+                {
+                    Code = receiveOrder.ReceiveOrderNo,
+                    DeliveryCode = receiveOrder.DeliveryCode,
+                    CustomerId = receiveOrder.CustomerId,
+                    CreatorId = receiveOrder.Creater,
+                    EntDate = receiveOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"),
+                    ReceiveDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                    SuppliersId = receiveOrder.SuppliersId,
+                    Type = Enum.GetName(typeof(ReceiveOrderTypeEnum), receiveOrder.ReceiveOrderType) ?? throw new Exception($"閲囪喘鍗曠被鍨嬮敊璇�"),
+                    UniqueTag = receiveOrder.ReceiveOrderId.ToString(),
+                    WarehouseCode = warehouse.WarehouseCode,
+                    Way = 1,
+                    Details = recevieOrderDetails
+                };
+
+                //鏇存柊鏀惰揣鍗曚俊鎭�
+                receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Completed.ObjToInt();
+                //鏀惰揣鎺ㄩ�佽嚦ER
+                string response = _invokeERPService.InvokeMatReceiveApi(receiveModel);
+                ErpRequestContent requestContent = response.DeserializeObject<ErpRequestContent>();
+                if (requestContent.res != 1)
+                {
+                    return WebResponseContent.Instance.Error($"{requestContent.Data}");
+                }
+                receiveOrder.UploadStatus = WhetherEnum.True.ObjToInt();
+                BaseDal.UpdateData(receiveOrder);
+                if (receiveOrder.Details.FirstOrDefault(x=>x.IfInspection==WhetherEnum.True.ObjToInt())==null)
+                {
+                    //鍒涘缓鍏ュ簱鍗� todo:鏄庣粏閮芥槸涓嶆楠岃嚜鍔ㄥ垱寤哄叆搴撳崟
+                    CreateInboundOrder(orderId);
+                }
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        public WebResponseContent GetReceiveOrders(SaveModel saveModel)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                int pageNo = saveModel.MainData["pageNo"].ObjToInt();
+                int warehouseId = saveModel.MainData["warehouseId"].ObjToInt();
+                string orderNo = saveModel.MainData["orderNo"].ToString();
+                List<Dt_ReceiveOrder> dt_ReceiveOrders = new List<Dt_ReceiveOrder>();
+                if (string.IsNullOrEmpty(orderNo))
+                {
+                    dt_ReceiveOrders = Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderStatus < ReceiveOrderStatusEnum.Completed.ObjToInt() && x.WarehouseId == warehouseId).Includes(x=>x.Details).OrderByDescending(x=>x.ReceiveOrderId).ToPageList(pageNo, 5);
+                }
+                else
+                {
+                    dt_ReceiveOrders = Db.Queryable<Dt_ReceiveOrder>().Where(x => (x.ReceiveOrderNo.Contains(orderNo) || x.SuppliersId.Contains(orderNo)) && x.ReceiveOrderStatus < ReceiveOrderStatusEnum.Completed.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.ReceiveOrderId).Includes(x => x.Details).ToPageList(pageNo, 5);
+                }
+
+                content.OK(data: dt_ReceiveOrders);
+            }
+            catch (Exception)
+            {
+
+                throw;
+            }
+            return content;
+        }
+        /// <summary>
+        /// 鍒涘缓鍏ュ簱鍗�
+        /// </summary>
+        /// <param name="receiveOrderId">鏀惰揣鍗曠紪鍙�</param>
+        /// <returns></returns>
         public WebResponseContent CreateInboundOrder(int receiveOrderId)
         {
             try
             {
                 Dt_ReceiveOrder receiveOrder = Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderId == receiveOrderId).Includes(x => x.Details).First();
+                if (receiveOrder.UploadStatus!= WhetherEnum.True.ObjToInt())
+                {
+                    return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏉ユ枡涓婁紶ERP澶辫触鏃犳硶鍒涘缓鍏ュ簱鍗曟嵁");
+                }
                 if (receiveOrder == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒拌鏀惰揣鍗曚俊鎭�");
@@ -82,17 +274,27 @@
                 {
                     return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏈畬鎴�");
                 }
-
+                Dt_InboundOrder OldCreateOrder = _inboundRepository.InboundOrderRepository.QueryFirst(x => x.UpperOrderNo == receiveOrder.ReceiveOrderNo);
+                if (receiveOrder.CreateInOrderStatus==WhetherEnum.True.ObjToInt() || OldCreateOrder!=null)
+                {
+                    return WebResponseContent.Instance.Error($"璇ユ敹璐у崟瀵瑰簲鐨勫叆搴撳崟宸插瓨鍦�");
+                }
+                #region 娉ㄩ噴
                 List<Dt_CheckOrder> checkOrders = _checkOrderRepository.QueryData(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo);
                 if (checkOrders.FirstOrDefault(x => x.CheckOrderStatus == CheckOrderStatusEnum.NotCheck.ObjToInt()) != null)
                 {
                     return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏈川妫�瀹屾垚");
                 }
 
-                if (checkOrders.FirstOrDefault(x => x.AuditStatus != AuditStatusEnum.Agree.ObjToInt()) != null)
+                //if (checkOrders.FirstOrDefault(x => x.AuditStatus != AuditStatusEnum.Agree.ObjToInt()) != null)
+                //{
+                //    return WebResponseContent.Instance.Error($"璇ユ敹璐у崟璐ㄦ缁撴灉瀹℃壒鏈畬鎴�");
+                //}
+                if (checkOrders.FirstOrDefault(x => x.Result != CheckAcceptEnum.Accept.ToString()) != null)
                 {
-                    return WebResponseContent.Instance.Error($"璇ユ敹璐у崟璐ㄦ缁撴灉瀹℃壒鏈畬鎴�");
+                    return WebResponseContent.Instance.Error($"鏀惰揣鏄庣粏涓瓨鏈夎川妫�鏈�氳繃");
                 }
+                #endregion
 
                 Dt_InboundOrder inboundOrder = new Dt_InboundOrder()
                 {
@@ -104,10 +306,11 @@
                     SupplierId = receiveOrder.SuppliersId,
                     Details = new List<Dt_InboundOrderDetail>()
                 };
-
+                List<Dt_MaterielInfo> materielCodeInfos = _basicRepository.MaterielInfoRepository.QueryData(x => receiveOrder.Details.Select(x => x.MaterielCode).ToList().Contains(x.MaterielCode));
                 foreach (var item in receiveOrder.Details)
                 {
                     float quantity = item.ReceivedQuantity;
+                    #region 娉ㄩ噴
                     if (item.IfInspection == WhetherEnum.True.ObjToInt())
                     {
                         Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo);
@@ -117,9 +320,12 @@
                         }
                         quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault();
                     }
+                    #endregion
                     Dt_InboundOrderDetail detail = new Dt_InboundOrderDetail()
                     {
                         MaterielCode = item.MaterielCode,
+                        MaterielName = materielCodeInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode)?.MaterielName ?? "",
+                        MaterielSpec= materielCodeInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode)?.MaterielSpec ?? "",
                         OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(),
                         OrderQuantity = quantity,
                         OverInQuantity = 0,
@@ -130,15 +336,185 @@
                     };
                     inboundOrder.Details.Add(detail);
                 }
-
+                //鏇存柊鍏ュ簱鍗曞垱寤虹姸鎬�
+                receiveOrder.CreateInOrderStatus = WhetherEnum.True.ObjToInt();
+                _unitOfWorkManage.BeginTran();
+                BaseDal.UpdateData(receiveOrder);
                 _inboundRepository.InboundOrderRepository.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand();
-
+                _unitOfWorkManage.CommitTran();
                 return WebResponseContent.Instance.OK();
             }
             catch (Exception ex)
             {
+                _unitOfWorkManage.RollbackTran();
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+        #region 娴嬭瘯
+        public WebResponseContent ReceiveAllOrder(int purchaseOrderId, string lotNo)
+        {
+            try
+            {
+                Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().Where(x => x.Id == purchaseOrderId).Includes(x => x.Details).First();
+                if (purchaseOrder == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒拌閲囪喘鍗�");
+                }
+                if (purchaseOrder.Details.Count == 0)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒伴噰璐崟鏄庣粏淇℃伅");
+                }
+                if (purchaseOrder.PurchaseOrderStatus == PurchaseOrderStatusEnum.Received.ObjToInt())
+                {
+                    return WebResponseContent.Instance.Error($"宸叉敹璐у畬鎴�");
+                }
+                if (purchaseOrder.Details.FirstOrDefault(x => x.PurchaseDetailStatus == PurchaseOrderStatusEnum.NotReceived.ObjToInt()) == null)
+                {
+                    return WebResponseContent.Instance.Error($"宸叉敹璐у畬鎴�");
+                }
+                List<Dt_CheckOrder> checkOrders = new List<Dt_CheckOrder>();
+                List<Dt_MaterielInfo> materielInfos = new List<Dt_MaterielInfo>();
+                List<Dt_ReceiveOrderDetail> receiveOrderDetails = new List<Dt_ReceiveOrderDetail>();
+                Dt_ReceiveOrder receiveOrder = BaseDal.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.SuppliersId == purchaseOrder.SupplierCode && x.ReceiveOrderStatus != ReceiveOrderStatusEnum.Completed.ObjToInt()).Includes(x => x.Details).First();
+                if (receiveOrder == null)
+                {
+                    int rowNo = 0;
+                    foreach (var item in purchaseOrder.Details)
+                    {
+                        Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode);
+                        if (materielInfo == null)
+                        {
+                            materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == item.MaterielCode);
+                            if (materielInfo == null)
+                            {
+                                return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�");
+                            }
+                            materielInfos.Add(materielInfo);
+                        }
+                        Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail()
+                        {
+                            PurchaseOrderNo = purchaseOrder.PurchaseOrderNo,
+                            ReceivedQuantity = item.PurchaseDetailQuantity,
+                            MaterielCode = item.MaterielCode,
+                            LotNo = lotNo,
+                            PurchaseOrderDetailRowNo = item.RowNo,
+                            IfInspection = materielInfo.IsCheck.ObjToInt(),
+                            CurrCode = "",
+                            PriceInTax = 0,
+                            TaxRate = "",
+                            RowNo = rowNo + 1,
+                            Unit = item.Unit
+                        };
+                        rowNo += 1;
+                        receiveOrderDetails.Add(receiveOrderDetail);
+                        #region 娉ㄩ噴
+                        if (materielInfo.IsCheck == WhetherEnum.True)
+                        {
+                            Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail);
+                            checkOrder.CheckOrderNo = "TestCheckNo21";//娴嬭瘯
+                            checkOrder.ReceiveOrderNo = "";
+                            checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity;
+                            checkOrder.ScrappedQuantity = 0;
+                            checkOrder.ReturnQuantity = 0;
+                            checkOrder.DefectedQuantity = 0;
+                            checkOrder.ReceiveDetailRowNo = rowNo;
+                            checkOrder.UploadStatus = CheckUploadEnum.UploadNo.ObjToInt();
+                            checkOrders.Add(checkOrder);
+                        }
+                        #endregion
+                    }
+                    receiveOrder = new Dt_ReceiveOrder()
+                    {
+                        ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt(),
+                        CustomerId = "",
+                        DeliveryCode = "/",
+                        ReceiveDate = DateTime.Now,
+                        ReceiveOrderType = ReceiveOrderTypeEnum.PO.ObjToInt(),
+                        SuppliersId = purchaseOrder.SupplierCode,
+                        WarehouseId = purchaseOrder.Details.FirstOrDefault()?.WarehouseId ?? 0,
+                        UploadStatus = WhetherEnum.False.ObjToInt(),
+                        Details = receiveOrderDetails
+                    };
+                }
+                else
+                {
+                    int rowNo = receiveOrder.Details.Count > 0 ? receiveOrder.Details.Max(x => x.RowNo) : 0;
+
+                    foreach (var item in purchaseOrder.Details)
+                    {
+                        Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode);
+                        if (materielInfo == null)
+                        {
+                            materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == item.MaterielCode);
+                            if (materielInfo == null)
+                            {
+                                return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�");
+                            }
+                            materielInfos.Add(materielInfo);
+                        }
+                        Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail()
+                        {
+                            PurchaseOrderNo = purchaseOrder.PurchaseOrderNo,
+                            ReceivedQuantity = item.PurchaseDetailQuantity,
+                            MaterielCode = item.MaterielCode,
+                            LotNo = lotNo,
+                            ReceiveOrderId = receiveOrder.ReceiveOrderId,
+                            PurchaseOrderDetailRowNo = item.RowNo,
+                            IfInspection = materielInfo.IsCheck.ObjToInt(),
+                            CurrCode = "",
+                            PriceInTax = 0,
+                            TaxRate = "",
+                            RowNo = rowNo + 1,
+                            Unit = item.Unit,
+
+                        };
+                        rowNo += 1;
+                        receiveOrderDetails.Add(receiveOrderDetail);
+
+                        if (materielInfo.IsCheck == WhetherEnum.True)
+                        {
+                            Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail);
+                            checkOrder.CheckOrderNo = "Test-CheckNo1";//娴嬭瘯
+                            checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity;
+                            checkOrder.ScrappedQuantity = 0;
+                            checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo;
+                            checkOrder.ReturnQuantity = 0;
+                            checkOrder.DefectedQuantity = 0;
+                            checkOrder.ReceiveDetailRowNo = rowNo;
+                            checkOrder.UploadStatus = CheckUploadEnum.UploadNo.ObjToInt();
+                            checkOrders.Add(checkOrder);
+                        }
+                    }
+                }
+
+                purchaseOrder.Details.ForEach(x => x.PurchaseDetailStatus = PurchaseOrderStatusEnum.Received.ObjToInt());
+                purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Received.ObjToInt();
+
+                _unitOfWorkManage.BeginTran();
+                if (receiveOrder.ReceiveOrderId > 0)
+                {
+                    Db.Insertable(receiveOrderDetails).ExecuteCommand();
+                }
+                else
+                {
+                    Db.InsertNav(receiveOrder).Include(x => x.Details).ExecuteCommand();
+                    checkOrders.ForEach(x => x.ReceiveOrderNo = receiveOrder.ReceiveOrderNo);
+                }
+                if (checkOrders.Count > 0)
+                {
+                    _checkOrderRepository.AddData(checkOrders);
+                }
+                _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder);
+                _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrder.Details);
+                _unitOfWorkManage.CommitTran();
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+        #endregion
     }
 }

--
Gitblit v1.9.3