From dc06f58d8ed537555fd529551180f43a0586ec3f Mon Sep 17 00:00:00 2001
From: helongyang <647556386@qq.com>
Date: 星期日, 22 六月 2025 11:44:43 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/MeiRuiAn/HuaiAn

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs |  395 ++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 328 insertions(+), 67 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs"
index 71cd415..a5ebece 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs"
@@ -1,7 +1,9 @@
 锘�
 using AutoMapper;
+using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
+using System.Globalization;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -12,11 +14,16 @@
 using WIDESEA_Core.BaseServices;
 using WIDESEA_Core.CodeConfigEnum;
 using WIDESEA_Core.Helper;
+using WIDESEA_DTO;
 using WIDESEA_DTO.Basic;
+using WIDESEA_DTO.QMS;
+using WIDESEA_External.Model;
+using WIDESEA_External.QMSService;
 using WIDESEA_IBasicRepository;
 using WIDESEA_ICheckRepository;
 using WIDESEA_IInboundRepository;
 using WIDESEA_IInboundService;
+using WIDESEA_IStockRepository;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_InboundService
@@ -28,22 +35,34 @@
         private readonly IInboundRepository _inboundRepository;
         private readonly IBasicRepository _basicRepository;
         private readonly ICheckOrderRepository _checkOrderRepository;
+        private readonly IStockRepository _stockRepository;
+        private readonly ISupplierInfoRepository _supplierInfoRepository;
+        private readonly IInvokeQMSService _invokeQMSService;
 
-        public ReceiveOrderDetailService(IReceiveOrderDetailRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IInboundRepository inboundRepository, IBasicRepository basicRepository, ICheckOrderRepository checkOrderRepository) : base(BaseDal)
+        public ReceiveOrderDetailService(IReceiveOrderDetailRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IInboundRepository inboundRepository, IBasicRepository basicRepository, ICheckOrderRepository checkOrderRepository, IStockRepository stockRepository,ISupplierInfoRepository supplierInfoRepository,IInvokeQMSService invokeQMSService) : base(BaseDal)
         {
             _mapper = mapper;
             _unitOfWorkManage = unitOfWorkManage;
             _inboundRepository = inboundRepository;
             _basicRepository = basicRepository;
             _checkOrderRepository = checkOrderRepository;
+            _stockRepository = stockRepository;
+            _supplierInfoRepository = supplierInfoRepository;
+            _invokeQMSService = invokeQMSService;
         }
 
         private static object _rowNoLocker = new object();
+        /// <summary>
+        /// 鎵爜娣诲姞鏀惰揣鍗曟槑缁嗭紙鍗曚釜锛�
+        /// </summary>
+        /// <param name="serNum">鐗╂枡鐮�</param>
+        /// <param name="orderNo">鏀惰揣鍗曞彿</param>
+        /// <returns></returns>
         public WebResponseContent AddReceiveOrderDetail(string serNum, string orderNo)
         {
             try
             {
-                Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.QueryFirst(x => x.ReceiveOrderNo == orderNo);
+                Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == orderNo).Includes(x => x.Details).First();
                 if (receiveOrder == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒拌鏀惰揣鍗�");
@@ -53,100 +72,313 @@
                 {
                     return WebResponseContent.Instance.Error($"璇ュ崟鎹凡鏀惰揣瀹屾垚");
                 }
-
+                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == receiveOrder.WarehouseId);
                 MatSerNumAnalysisModel model = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNum);
+                Dt_SupplierInfo supplierInfo = _supplierInfoRepository.QueryFirst(x => x.SupplierCode == receiveOrder.SuppliersId);
+                //鏀惰揣澧炲姞鎵规鍗℃帶,鏌ヨ鏀惰揣鏄庣粏鏄惁鏈夊瓨鍦ㄥ悓涓�涓壒娆�
+                Dt_ReceiveOrderDetail receiveOrderDetailOld = _inboundRepository.ReceiveOrderDetailRepository.QueryFirst(x => x.LotNo == model.LotNo && x.MaterielCode == model.MaterielCode);
+                Dt_ReceiveOrder? receiveOrderOld = null;
+                if (receiveOrderDetailOld!=null)
+                {
+                    receiveOrderOld = _inboundRepository.ReceiveOrderRepository.QueryFirst(x => x.ReceiveOrderId == receiveOrderDetailOld.ReceiveOrderId);
+                }
+                if (receiveOrderDetailOld!=null && receiveOrderOld?.WarehouseId== receiveOrder.WarehouseId)
+                {
+                    return WebResponseContent.Instance.Error($"鏀惰揣鍗曞彿{receiveOrderOld.ReceiveOrderNo}涓壒娆model.LotNo}宸插瓨鍦�");
+                }
+                //鏌ヨ搴撳瓨鎵规鏄惁鏈夊瓨鍦ㄥ悓涓�涓壒娆�
+                Dt_StockInfoDetail stockInfoDetail = _stockRepository.StockInfoDetailRepository.QueryFirst(x => x.BatchNo == model.LotNo && x.MaterielCode == model.MaterielCode);
+                Dt_StockInfo? stockInfo = null;
+                if (stockInfoDetail!=null)
+                {
+                    stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.Id == stockInfoDetail.Id);
+                }
+                if (stockInfoDetail!=null && stockInfo?.WarehouseId==receiveOrder.WarehouseId)
+                {
+                    return WebResponseContent.Instance.Error($"搴撳瓨{stockInfo.PalletCode}涓壒娆model.LotNo}宸插瓨鍦�");
+                }
+                if (model!=null)
+                {
+                    string format = "yyyy-MM-dd"; // 鐩爣鏍煎紡
+                    DateTime parsedDate;
+                    // 瑙f瀽楠岃瘉鏍煎紡
+                    bool isValidEffDate = DateTime.TryParseExact(
+                        model.EffectiveDate,
+                        format,
+                        CultureInfo.InvariantCulture,
+                        DateTimeStyles.None,
+                        out parsedDate
+                    );
+                    bool isValidProDate = DateTime.TryParseExact(
+                        model.ProductionDate,
+                        format,
+                        CultureInfo.InvariantCulture,
+                        DateTimeStyles.None,
+                        out parsedDate
+                    );
 
+                    if (!isValidEffDate || !isValidProDate)
+                    {
+                        return WebResponseContent.Instance.Error("鏍煎紡鏃犳晥鎴栨棩鏈熶笉鍚堟硶");
+                    }
+                }
                 Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == model.MaterielCode);
                 if (materielInfo == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�");
                 }
-
-                Dt_PurchaseOrder purchaseOrder = _inboundRepository.PurchaseOrderRepository.QueryFirst(x => x.PurchaseOrderNo == model.PurchaseOrderNo);
+                //璇ユ敹璐у崟浠撳簱鏄惁鏈夎鐗╂枡
+                if (materielInfo.WarehouseId != receiveOrder.WarehouseId)
+                {
+                    return WebResponseContent.Instance.Error($"璇ョ墿鏂欎笉灞炰簬璇ヤ粨搴�");
+                }
+                //鏃犻噰璐崟杩涜鏀惰揣
+                if (receiveOrder.ReceiveOrderType != ReceiveOrderTypeEnum.PO.ObjToInt())
+                {
+                    //鑾峰彇鍏蜂綋鎵规鍙婄墿鏂�
+                    Dt_ReceiveOrderDetail? detailNoPo = receiveOrder.Details.FirstOrDefault(x => x.LotNo == model.LotNo && x.MaterielCode == model.MaterielCode);
+                    lock (_rowNoLocker)
+                    {
+                        if (detailNoPo != null)
+                        {
+                            //鍘熸湁鏀惰揣鏄庣粏澧炲姞鏀惰揣鏁伴噺
+                            detailNoPo.ReceivedQuantity += model.Quantity;
+                            _unitOfWorkManage.BeginTran();
+                            BaseDal.UpdateData(detailNoPo);
+                            _unitOfWorkManage.CommitTran();
+                        }
+                        else
+                        {
+                            int rowNo = 0;
+                            if (receiveOrder.Details.Count > 0)
+                            {
+                                rowNo = receiveOrder.Details.Max(x => x.RowNo);
+                            }
+                            Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail()
+                            {
+                                PurchaseOrderNo = model.PurchaseOrderNo,
+                                ReceivedQuantity = model.Quantity,
+                                MaterielCode = model.MaterielCode,
+                                LotNo = model.LotNo,
+                                MaterielName = materielInfo.MaterielName,
+                                MaterielSpec = materielInfo.MaterielSpec,
+                                ReceiveOrderId = receiveOrder.ReceiveOrderId,
+                                PurchaseOrderDetailRowNo = rowNo + 1,
+                                IfInspection = materielInfo.IsCheck.ObjToInt(),
+                                CurrCode = "",
+                                PriceInTax = 0,
+                                TaxRate = "",
+                                RowNo = rowNo + 1,
+                                Unit = materielInfo.MaterielUnit
+                            };
+                            if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.NotStarted.ObjToInt())
+                            {
+                                receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt();
+                            }
+                            _unitOfWorkManage.BeginTran();
+                            _inboundRepository.ReceiveOrderDetailRepository.AddData(receiveOrderDetail);
+                            _inboundRepository.ReceiveOrderRepository.UpdateData(receiveOrder);
+                            #region 娉ㄩ噴
+                            if (materielInfo.IsCheck == WhetherEnum.True)
+                            {
+                                Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail);
+                                checkOrder.OrderType = CheckTypeEnum.ReceiveCheck.ObjToInt();
+                                checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo;
+                                checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity;
+                                checkOrder.ReceiveDetailRowNo = receiveOrderDetail.RowNo;
+                                checkOrder.ScrappedQuantity = 0;
+                                checkOrder.ReturnQuantity = 0;
+                                checkOrder.DefectedQuantity = 0;
+                                _checkOrderRepository.AddData(checkOrder);
+                            }
+                            #endregion
+                            _unitOfWorkManage.CommitTran();
+                        }
+                        return WebResponseContent.Instance.OK();
+                    }
+                }
+                Dt_PurchaseOrder purchaseOrder = _inboundRepository.PurchaseOrderRepository.Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == model.PurchaseOrderNo).Includes(x => x.Details).First();
                 if (purchaseOrder == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒拌閲囪喘鍗�");
                 }
-
+                if (purchaseOrder.Details.Count == 0)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒拌閲囪喘鍗曟槑缁嗘暟鎹�");
+                }
                 if (purchaseOrder.SupplierCode != receiveOrder.SuppliersId)
                 {
                     return WebResponseContent.Instance.Error($"渚涘簲鍟嗕笉涓�鑷�,璇锋柊寤烘敹璐у崟");
                 }
-
                 if (purchaseOrder.PurchaseOrderStatus == PurchaseOrderStatusEnum.Received.ObjToInt())
                 {
                     return WebResponseContent.Instance.Error($"璇ラ噰璐崟鏀惰揣宸插畬鎴�");
                 }
-
-                List<Dt_PurchaseOrderDetail> purchaseOrderDetails = _inboundRepository.PurchaseOrderDetailRepository.QueryData(x => x.PurchaseOrderId == purchaseOrder.Id);
-                if (purchaseOrderDetails == null || purchaseOrderDetails.Count == 0)
-                {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒拌閲囪喘鍗曟槑缁嗘暟鎹�");
-                }
-
-                Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrderDetails.FirstOrDefault(x => x.PurchaseDetailQuantity == model.Quantity && x.MaterielCode == model.MaterielCode && x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt());
+                Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrder.Details.Where(x => x.MaterielCode == model.MaterielCode && (x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt() || x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.Receiving.ObjToInt())).OrderBy(x=>x.Id).FirstOrDefault();
                 if (purchaseOrderDetail == null)
                 {
-                    if (purchaseOrderDetails.Count > 0)
-                    {
-                        return WebResponseContent.Instance.Error($"璇ユ槑缁嗘敹璐у凡瀹屾垚");
-                    }
-                    return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑閲囪喘鍗曟槑缁嗘暟鎹�");
+                    return WebResponseContent.Instance.Error($"璇ラ噰璐崟鏄庣粏鏀惰揣宸插畬鎴�");
                 }
-                Dt_ReceiveOrderDetail detail = BaseDal.QueryFirst(x => x.PurchaseOrderNo == model.PurchaseOrderNo && x.PurchaseOrderDetailRowNo == purchaseOrderDetail.RowNo);
-                if (detail != null)
+                //鍒ゆ柇璇ラ噰璐崟鏄庣粏鏄惁宸插瓨鍦ㄦ槑缁�
+                List<Dt_ReceiveOrderDetail> details = receiveOrder.Details.Where(x => x.PurchaseOrderNo == model.PurchaseOrderNo && x.PurchaseOrderDetailRowNo == purchaseOrderDetail.RowNo && x.MaterielCode == model.MaterielCode).ToList();
+                if (details.Count >0 && details.Sum(x=>x.ReceivedQuantity) == purchaseOrderDetail.PurchaseDetailQuantity)
                 {
-                    return WebResponseContent.Instance.Error($"璇ユ槑缁嗘敹璐у凡瀹屾垚");
+                    return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏄庣粏宸叉敹璐�");
                 }
-
+                //鑾峰彇鍏蜂綋鎵规鍙婄墿鏂�
+                Dt_ReceiveOrderDetail? detail = details.FirstOrDefault(x => x.LotNo == model.LotNo && x.MaterielCode==model.MaterielCode);
                 lock (_rowNoLocker)
                 {
-                    int rowNo = 0;
-                    List<Dt_ReceiveOrderDetail> receiveOrderDetails = BaseDal.QueryData(x => x.ReceiveOrderId == receiveOrder.ReceiveOrderId);
-                    if (receiveOrderDetails != null && receiveOrderDetails.Count > 0)
+                    if (detail != null)
                     {
-                        rowNo = receiveOrderDetails.Max(x => x.RowNo);
+                        //鍘熸湁鏀惰揣鏄庣粏澧炲姞鏀惰揣鏁伴噺
+                        detail.ReceivedQuantity += model.Quantity;
+                        purchaseOrderDetail.PurchaseDetailReceiveQty += model.Quantity;
+                        if (purchaseOrderDetail.PurchaseDetailReceiveQty > purchaseOrderDetail.PurchaseDetailQuantity)
+                        {
+                            return WebResponseContent.Instance.Error($"閲囪喘鍗曡鍙穥purchaseOrderDetail.RowNo}鐗╂枡{purchaseOrderDetail.MaterielCode}鏁伴噺婧㈠嚭:{purchaseOrderDetail.PurchaseDetailReceiveQty - purchaseOrderDetail.PurchaseDetailQuantity}");
+                        }
+                        if (purchaseOrderDetail.PurchaseDetailReceiveQty == purchaseOrderDetail.PurchaseDetailQuantity)
+                        {
+                            purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt();
+                        }
+                        else
+                        {
+                            purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Receiving.ObjToInt();
+                        }
+                        float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty);
+                        if (purchaseOrder.OrderQuantity == sumQty)
+                        {
+                            purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Received.ObjToInt();
+                        }
+                        else
+                        {
+                            purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Receiving.ObjToInt();
+                        }
+                        _unitOfWorkManage.BeginTran();
+                        _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder);
+                        BaseDal.UpdateData(detail);
+                        _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail);
+                        _unitOfWorkManage.CommitTran();
+                    }
+                    else
+                    {
+                        int rowNo = 0;
+                        if (receiveOrder.Details.Count > 0)
+                        {
+                            rowNo = receiveOrder.Details.Max(x => x.RowNo);
+                        }
+                        Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail()
+                        {
+                            PurchaseOrderNo = model.PurchaseOrderNo,
+                            ReceivedQuantity = model.Quantity,
+                            MaterielCode = model.MaterielCode,
+                            LotNo = model.LotNo,
+                            MaterielName=materielInfo.MaterielName,
+                            MaterielSpec=materielInfo.MaterielSpec,
+                            ReceiveOrderId = receiveOrder.ReceiveOrderId,
+                            PurchaseOrderDetailRowNo = purchaseOrderDetail.RowNo,
+                            IfInspection = materielInfo.IsCheck.ObjToInt(),
+                            CurrCode = "",
+                            PriceInTax = 0,
+                            TaxRate = "",
+                            RowNo = rowNo + 1,
+                            Unit = purchaseOrderDetail.Unit
+                        };
+                        if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.NotStarted.ObjToInt())
+                        {
+                            receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt();
+                        }
+                        //鍒ゆ柇閲囪喘鏄庣粏鏁伴噺
+                        if (purchaseOrderDetail.PurchaseDetailQuantity < model.Quantity)
+                        {
+                            return WebResponseContent.Instance.Error($"璇锋牳瀵归噰璐崟璇ョ墿鏂欐暟閲�");
+                        }
+                        if (purchaseOrderDetail.PurchaseDetailReceiveQty > 0)
+                        {
+                            purchaseOrderDetail.PurchaseDetailReceiveQty += model.Quantity;
+                        }
+                        else
+                        {
+                            purchaseOrderDetail.PurchaseDetailReceiveQty = model.Quantity;
+                        }
+                        if (purchaseOrderDetail.PurchaseDetailReceiveQty > purchaseOrderDetail.PurchaseDetailQuantity)
+                        {
+                            return WebResponseContent.Instance.Error($"閲囪喘鍗曡鍙穥purchaseOrderDetail.RowNo}鐗╂枡{purchaseOrderDetail.MaterielCode}鏁伴噺婧㈠嚭:{purchaseOrderDetail.PurchaseDetailReceiveQty - purchaseOrderDetail.PurchaseDetailQuantity}");
+                        }
+                        if (purchaseOrderDetail.PurchaseDetailQuantity == purchaseOrderDetail.PurchaseDetailReceiveQty)
+                        {
+                            purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt();
+                        }
+                        else
+                        {
+                            purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Receiving.ObjToInt();
+                        }
+                        float sumQty = purchaseOrder.Details.Sum(x => x.PurchaseDetailReceiveQty); //+ model.Quantity
+                        _unitOfWorkManage.BeginTran();
+                        BaseDal.AddData(receiveOrderDetail);
+                        if (purchaseOrder.OrderQuantity == sumQty)
+                        {
+                            purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Received.ObjToInt();
+                            _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder);
+                        }
+                        if(purchaseOrder.PurchaseOrderStatus== PurchaseOrderStatusEnum.NotReceived.ObjToInt())
+                        {
+                            purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Receiving.ObjToInt();
+                            _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder);
+                        }
+                        _inboundRepository.ReceiveOrderRepository.UpdateData(receiveOrder);
+                        _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail);
+                        if (materielInfo.IsCheck == WhetherEnum.True)
+                        {
+                            Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail);
+                            checkOrder.OrderType = CheckTypeEnum.ReceiveCheck.ObjToInt();
+                            checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo;
+                            checkOrder.Result = CheckAcceptEnum.NotCheckAccept.ToString();
+                            checkOrder.QualifiedQuantity = 0;
+                            checkOrder.ReceiveDetailRowNo = receiveOrderDetail.RowNo;
+                            checkOrder.WarehouseId = receiveOrder.WarehouseId;
+                            checkOrder.ScrappedQuantity = 0;
+                            checkOrder.MaterielSpec = materielInfo.MaterielSpec;
+                            checkOrder.ReturnQuantity = 0;
+                            checkOrder.DefectedQuantity = 0;
+                            int id = _checkOrderRepository.AddData(checkOrder);
+                            QMSReceiveCheckModel qMSReceiveCheck = new QMSReceiveCheckModel()
+                            {
+                                UniqueTag = id.ToString(),
+                                EntryNumber = receiveOrder.ReceiveOrderNo,
+                                MaterialCode = receiveOrderDetail.MaterielCode,
+                                MaterialName = receiveOrderDetail.MaterielName,
+                                Quantity = (decimal)receiveOrderDetail.ReceivedQuantity,
+                                SupplierCode = receiveOrder.SuppliersId,
+                                SupplierName = supplierInfo.SupplierName,
+                                BatchNumber = receiveOrderDetail.LotNo,
+                                DeliveryNumber = receiveOrder.DeliveryCode,
+                                PurchaseNumber = receiveOrderDetail.PurchaseOrderNo,
+                                RowNumber = receiveOrderDetail.RowNo,
+                                WarehouseCode = warehouse.WarehouseCode,
+                                ReceiptDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                                Remark = " "
+                            };
+                            //璋冪敤QMS鏉ユ枡妫�楠屾帴鍙�
+                            string response = _invokeQMSService.InvokeReceiveCheckApi(qMSReceiveCheck);
+                            MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>();
+                            if (!mesResponseContent.BSucc)
+                            {
+                                throw new Exception(mesResponseContent.StrMsg);
+                            }
+                            ReceiveResultDTO? receiveResult = JsonConvert.DeserializeObject<ReceiveResultDTO>(mesResponseContent.Content.ToString());
+                            if (receiveResult == null)
+                            {
+                                throw new Exception("鎺ユ敹QMS缁撴灉澶辫触");
+                            }
+                            Dt_CheckOrder _CheckOrder = _checkOrderRepository.QueryFirst(x => x.CheckOrderId == id);
+                            _CheckOrder.CheckOrderNo = receiveResult.InspectionNumber;
+                            _checkOrderRepository.UpdateData(_CheckOrder);
+                        }
+                        _unitOfWorkManage.CommitTran();
                     }
 
-                    Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail()
-                    {
-                        PurchaseOrderNo = model.PurchaseOrderNo,
-                        ReceivedQuantity = model.Quantity,
-                        MaterielCode = model.MaterielCode,
-                        LotNo = model.LotNo,
-                        ReceiveOrderId = receiveOrder.ReceiveOrderId,
-                        PurchaseOrderDetailRowNo = purchaseOrderDetail.RowNo,
-                        IfInspection = materielInfo.IsCheck.ObjToInt(),
-                        CurrCode = "",
-                        PriceInTax = 0,
-                        TaxRate = "",
-                        RowNo = rowNo + 1,
-                        Unit = purchaseOrderDetail.Unit
-                    };
-
-                    if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.NotStarted.ObjToInt())
-                    {
-                        receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt();
-                    }
-                    purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt();
-
-                    _unitOfWorkManage.BeginTran();
-                    BaseDal.AddData(receiveOrderDetail);
-                    _inboundRepository.ReceiveOrderRepository.UpdateData(receiveOrder);
-                    _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail);
-
-                    if (materielInfo.IsCheck == WhetherEnum.True)
-                    {
-                        Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail);
-                        checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo;
-                        checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity;
-                        checkOrder.ScrappedQuantity = 0;
-                        checkOrder.ReturnQuantity = 0;
-                        checkOrder.DefectedQuantity = 0;
-                        _checkOrderRepository.AddData(checkOrder);
-                    }
-
-                    _unitOfWorkManage.CommitTran();
                     return WebResponseContent.Instance.OK();
                 }
             }
@@ -156,6 +388,35 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+        public WebResponseContent ScaninnerCode(string innerCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                var innerCodes = innerCode.Split(',');
+                var matCode = innerCodes.FirstOrDefault(x => x.Contains("M:"));//.Replace("M:", "");
+                if (matCode == null) throw new Exception("鏈幏鍙栧埌鐗╂枡鐮�");
+                var batchNo = innerCodes.FirstOrDefault(x => x.Contains("BS:"));//.Replace("BS:", "")
+                if (batchNo == null) throw new Exception("鏈幏鍙栧埌鎵规鍙�");
+                var purchaseOrderNo = innerCodes.FirstOrDefault(x => x.Contains("PO:"));//.Replace("PO:", "")
+                if (purchaseOrderNo == null) throw new Exception("鏈幏鍙栧埌閲囪喘鍗曞彿");
+                var qty = innerCodes.FirstOrDefault(x => x.Contains("Q:"));
+                if (qty == null) throw new Exception("鏈幏鍙栧埌鏁伴噺");
+                InnerCodeDTO innerCodeDTO = new InnerCodeDTO()
+                {
+                    matCode = matCode.Replace("M:", ""),
+                    batchNo = batchNo.Replace("BS:", ""),
+                    purchaseOrderNo = purchaseOrderNo.Replace("PO:", ""),
+                    qty = Convert.ToInt32(qty.Replace("Q:", ""))
+                };
+                content.OK("鎵弿鎴愬姛", data: innerCodeDTO);
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
         public WebResponseContent GetReceiveOrderInfos(SaveModel saveModel)
         {
             WebResponseContent content = new WebResponseContent();

--
Gitblit v1.9.3