From 95e39ae7aecd6e1016c71cf5ae70a680d8f569bb Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期二, 29 四月 2025 10:48:30 +0800 Subject: [PATCH] 上传最新代码 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs | 818 +++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 639 insertions(+), 179 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs" index 0192475..94e8e3b 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs" @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; using WIDESEA_Common.OrderEnum; using WIDESEA_Common.StockEnum; @@ -15,6 +16,7 @@ using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_DTO.ERP; +using WIDESEA_DTO.Outbound; using WIDESEA_External.ERPService; using WIDESEA_External.Model; using WIDESEA_IBasicRepository; @@ -54,21 +56,21 @@ /// 鎺ユ敹ERP鎴愬搧鍑哄簱鍗� /// </summary> /// <returns></returns> - public WebResponseContent ProductDeliveryOrder(ErpProOutOrderDTO outOrderDTO) + public async Task<WebResponseContent> ProductDeliveryOrder(ErpProOutOrderDTO outOrderDTO) { try { return outOrderDTO.Way switch { - 1 => AddDeliveryOrder(outOrderDTO), - 2 => UpdateDeliveryOrder(outOrderDTO), - 3 => DeleteDeliveryOrder(outOrderDTO), - _ => WebResponseContent.Instance.Error($"鎿嶄綔绫诲瀷涓嶅瓨鍦�,Way:{outOrderDTO.Way}"), + 1 => await Task.FromResult(AddDeliveryOrder(outOrderDTO)), + 2 => await Task.FromResult(UpdateDeliveryOrder(outOrderDTO)), + 3 => await Task.FromResult(DeleteDeliveryOrder(outOrderDTO)), + _ => await Task.FromResult(WebResponseContent.Instance.Error($"鎿嶄綔绫诲瀷涓嶅瓨鍦�,Way:{outOrderDTO.Way}")), }; } catch (Exception ex) { - return WebResponseContent.Instance.Error(ex.Message); + return await Task.FromResult(WebResponseContent.Instance.Error(ex.Message)); } } /// <summary> @@ -95,6 +97,7 @@ warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString()); } List<Dt_ProOutOrderDetail> proOutOrderDetails = new List<Dt_ProOutOrderDetail>(); + Dictionary<string,string> keyValuePairs =new Dictionary<string, string>(); foreach (var item in outOrderDTO.OrderDetails) { //鍒ゆ柇瀹㈡埛鏄惁瀛樺湪 @@ -103,7 +106,32 @@ { return content.Error($"瀹㈡埛{item.Customer}涓嶅瓨鍦�!"); } - proOutOrderDetails.Add(_mapper.Map<Dt_ProOutOrderDetail>(item)); + Dt_ProOutOrderDetail proOutOrderDetail = _mapper.Map<Dt_ProOutOrderDetail>(item); + if (!string.IsNullOrEmpty(item.SaleOrder)) + { + if (keyValuePairs!=null && keyValuePairs.ContainsKey(item.SaleOrder)) + { + proOutOrderDetail.EndCustomer = keyValuePairs[item.SaleOrder]; + } + else + { + string request = _invokeERPService.InvokeProSaleCustomer(item.SaleOrder); + ErpSaleCustomResponseContent responseContent=request.DeserializeObject<ErpSaleCustomResponseContent>(); + if (responseContent.Code!=200) + { + return content.Error($"璁㈠崟{item.SaleOrder}缁堢瀹㈡埛鑾峰彇澶辫触!"); + } + //鍒ゆ柇缁堢瀹㈡埛鏄惁瀛樺湪 + Dt_CustomerInfo? customerInfoEnd = customerInfos.Where(x => x.Code == responseContent.Data[0].Endcustomer).FirstOrDefault(); + if (customerInfoEnd == null) + { + return content.Error($"缁堢瀹㈡埛{responseContent.Data[0].Endcustomer}涓嶅瓨鍦�!"); + } + proOutOrderDetail.EndCustomer = responseContent.Data[0].Endcustomer; + keyValuePairs.Add(item.SaleOrder, responseContent.Data[0].Endcustomer); + } + } + proOutOrderDetails.Add(proOutOrderDetail); } Dt_ProOutOrder proOutOrder= new Dt_ProOutOrder() { @@ -233,21 +261,24 @@ return content.Error($"鍑哄簱鏁伴噺{proStockInfoDetails.Sum(x => x.StockPcsQty)}>鎵�鍓╄鍗曟暟閲弡proOutOrder.Details.Sum(x => x.LockQtyPcs - x.OverQtyPcs)}"); } List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>(); - List<Dt_ProOutOrderDetail> proOutOrderDetails = proOutOrder.Details.Where(x=> proStockInfoDetails.Select(x=>x.SaleOrder).Contains(x.SaleOrder) && proStockInfoDetails.Select(x=>x.ProductCode).Contains(x.PCode) && proStockInfoDetails.Select(x => x.ProductVersion).Contains(x.PVer)).ToList(); + List<Dt_ProOutOrderDetail> proOutOrderDetails = proOutOrder.Details.Where(x=> proStockInfoDetails.Select(x=>x.ProductCode).Contains(x.PCode) && proStockInfoDetails.Select(x => x.ProductVersion).Contains(x.PVer)).ToList(); if (proOutOrderDetails==null || proOutOrderDetails.Count<=0) { return content.Error("瀵瑰簲鍑哄簱璁㈠崟鏄庣粏涓虹┖"); } int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); + List<Dt_ProOutOrderDetail> newProDetails=new List<Dt_ProOutOrderDetail>(); foreach (var item in proStockInfoDetails) { //鑾峰彇瀵瑰簲鏄庣粏澶勭悊鍑哄簱鏁版嵁 - Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrderDetails.Where(x => x.SaleOrder == item.SaleOrder && x.PVer == item.ProductVersion && x.PCode == item.ProductCode).FirstOrDefault(); + Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrderDetails.Where(x => x.Id==item.OutDetailId && x.PVer == item.ProductVersion && x.PCode == item.ProductCode).FirstOrDefault(); if (proOutOrderDetail==null) { return content.Error("鏈壘鍒板搴斿嚭搴撹鍗曟槑缁�"); } proOutOrderDetail.OverQtyPcs += item.StockPcsQty; + item.OutboundQuantity = item.StockPcsQty; + item.OutSETQty = item.SETQty; if (proOutOrderDetail.OverQtyPcs> proOutOrderDetail.QtyPcs) { return content.Error($"鍑哄簱璁㈠崟鏄庣粏琛寋proOutOrderDetail.RowId},婧㈠嚭{proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs}"); @@ -255,11 +286,12 @@ if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs) { proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); + newProDetails.Add(proOutOrderDetail); } } - int AddOverCount = proOutOrderDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); + int AddOverCount = newProDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); if (proOutOrder.Details.Count == (AddOverCount + OldOverCount)) { proOutOrder.ProOrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt(); @@ -278,10 +310,10 @@ { PartNum = item.ProductCode, Rev = item.ProductVersion, - SoNumber = item.SaleOrder, + SoNumber = item.OutDetailSaleNo, BatchNumber = item.BagNo, - QtyPcs = item.StockPcsQty, - QtySet = item.SETQty + QtyPcs = item.OutboundQuantity, + QtySet = item.OutSETQty }; stockOutItems.Add(outItemsItem); } @@ -296,8 +328,8 @@ { Way = 1, StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)), - ConfirmedUserNo = "admin", - AssignUserNo = "admin", + ConfirmedUserNo = App.User.UserName, + AssignUserNo = App.User.UserName, WarehouseCode = warehouse.WarehouseCode, ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), DeliverplanCode = proOutOrder.ProOutOrderNo, @@ -306,11 +338,11 @@ }; _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.鑷姩瀹屾垚); _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.鑷姩瀹屾垚); - WebResponseContent contentSaveInfos = SaveOutProPKInfos(proStockInfos); - if (!contentSaveInfos.Status) - { - throw new Exception(contentSaveInfos.Message); - }; + //WebResponseContent contentSaveInfos = SaveOutProPKInfos(proStockInfos); + //if (!contentSaveInfos.Status) + //{ + // throw new Exception(contentSaveInfos.Message); + //}; string response = _invokeERPService.InvokeProOutApi(proOutOrderModel); ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>(); if (erpRequestContent.res != 1) @@ -406,161 +438,163 @@ /// 鎴愬搧鍑哄緟鍙戣揣鍖�(骞冲簱)+鍚屾ERP鍑哄簱(鏈粦瀹氬嚭搴撳崟搴撳瓨) /// </summary> /// <returns></returns> - public WebResponseContent OutProductNoPK(string[] OutPKCodes, string ProOutNo) - { - WebResponseContent content = new WebResponseContent(); - try - { - if (OutPKCodes.IsNullOrEmpty()) - { - return content.Error("涓嶈兘涓虹┖"); - } - Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == ProOutNo).Includes(x => x.Details).First(); - if (proOutOrder == null) - { - return content.Error($"鍑哄簱鍗晎ProOutNo}涓嶅瓨鍦�"); - } - if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()) - { - return content.Error($"鍑哄簱鍗晎ProOutNo}宸插畬鎴�"); - } - string? userName = App.User.UserName;//GSWMS - //鑾峰彇鎵�鏈夊绠辩殑鏁版嵁 - List<Dt_ProStockInfo> AllproStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>() - .Where(x => OutPKCodes.Contains(x.PalletCode) && x.StockStatus == StockStatusEmun.骞冲簱鍏ュ簱瀹屾垚.ObjToInt()) - .Includes(x => x.proStockInfoDetails).ToList(); - List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>(); - List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>(); - List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData(x => x.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString()); - foreach (var item in OutPKCodes) - { - //鑾峰彇搴撳瓨 - Dt_ProStockInfo? proStockInfo = AllproStockInfos.Where(x => x.PalletCode == item).FirstOrDefault(); - if (proStockInfo == null) - { - return content.Error($"鏈壘鍒皗item}搴撳瓨"); - } - if (proStockInfo.ShipmentOrder!=null) - { - return content.Error($"澶栫鍙穥item}涓哄嚭搴撳崟{proStockInfo.ShipmentOrder}鎸囧畾搴撳瓨!"); - } - Dt_Warehouse? dt_Warehouse = warehouses.Where(x => x.WarehouseId == proStockInfo.WarehouseId).FirstOrDefault(); - if (dt_Warehouse == null) - { - return content.Error($"澶栫鍙穥item},涓嶅睘浜庢垚鍝佷粨"); - } - proStockInfos.Add(proStockInfo); - proStockInfoDetails.AddRange(proStockInfo.proStockInfoDetails); - } + //public WebResponseContent OutProductNoPK(string[] OutPKCodes, string ProOutNo) + //{ + // WebResponseContent content = new WebResponseContent(); + // try + // { + // if (OutPKCodes.IsNullOrEmpty()) + // { + // return content.Error("涓嶈兘涓虹┖"); + // } + // Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == ProOutNo).Includes(x => x.Details).First(); + // if (proOutOrder == null) + // { + // return content.Error($"鍑哄簱鍗晎ProOutNo}涓嶅瓨鍦�"); + // } + // if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()) + // { + // return content.Error($"鍑哄簱鍗晎ProOutNo}宸插畬鎴�"); + // } + // string? userName = App.User.UserName;//GSWMS + // //鑾峰彇鎵�鏈夊绠辩殑鏁版嵁 + // List<Dt_ProStockInfo> AllproStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>() + // .Where(x => OutPKCodes.Contains(x.PalletCode) && x.StockStatus == StockStatusEmun.骞冲簱鍏ュ簱瀹屾垚.ObjToInt()) + // .Includes(x => x.proStockInfoDetails).ToList(); + // List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>(); + // List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>(); + // List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData(x => x.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString()); + // foreach (var item in OutPKCodes) + // { + // //鑾峰彇搴撳瓨 + // Dt_ProStockInfo? proStockInfo = AllproStockInfos.Where(x => x.PalletCode == item).FirstOrDefault(); + // if (proStockInfo == null) + // { + // return content.Error($"鏈壘鍒皗item}搴撳瓨"); + // } + // if (proStockInfo.ShipmentOrder!=null) + // { + // return content.Error($"澶栫鍙穥item}涓哄嚭搴撳崟{proStockInfo.ShipmentOrder}鎸囧畾搴撳瓨!"); + // } + // Dt_Warehouse? dt_Warehouse = warehouses.Where(x => x.WarehouseId == proStockInfo.WarehouseId).FirstOrDefault(); + // if (dt_Warehouse == null) + // { + // return content.Error($"澶栫鍙穥item},涓嶅睘浜庢垚鍝佷粨"); + // } + // proStockInfos.Add(proStockInfo); + // proStockInfoDetails.AddRange(proStockInfo.proStockInfoDetails); + // } - if (proOutOrder.Details.Sum(x => x.QtyPcs - x.OverQtyPcs) < proStockInfoDetails.Sum(x => x.StockPcsQty)) - { - return content.Error($"鍑哄簱鏁伴噺{proStockInfoDetails.Sum(x => x.StockPcsQty)}>鎵�鍓╄鍗曟暟閲弡proOutOrder.Details.Sum(x => x.QtyPcs - x.OverQtyPcs)}"); - } - List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>(); - List<Dt_ProOutOrderDetail> proOutOrderDetails = proOutOrder.Details.Where(x => proStockInfoDetails.Select(x => x.SaleOrder).Contains(x.SaleOrder) && proStockInfoDetails.Select(x => x.ProductCode).Contains(x.PCode) && proStockInfoDetails.Select(x => x.ProductVersion).Contains(x.PVer)).ToList(); - if (proOutOrderDetails == null || proOutOrderDetails.Count <= 0) - { - return content.Error("瀵瑰簲鍑哄簱璁㈠崟鏄庣粏涓虹┖"); - } - int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); - foreach (var item in proStockInfoDetails) - { - //鑾峰彇瀵瑰簲鏄庣粏澶勭悊鍑哄簱鏁版嵁 - Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrderDetails.Where(x => x.SaleOrder == item.SaleOrder && x.PVer == item.ProductVersion && x.PCode == item.ProductCode).FirstOrDefault(); - if (proOutOrderDetail == null) - { - return content.Error("鏈壘鍒板搴斿嚭搴撹鍗曟槑缁�"); - } - proOutOrderDetail.OverQtyPcs += item.StockPcsQty; - if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) - { - return content.Error($"鍑哄簱璁㈠崟鏄庣粏琛寋proOutOrderDetail.RowId},婧㈠嚭{proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs}"); - } - if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs) - { - proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); - } + // if (proOutOrder.Details.Sum(x => x.QtyPcs - x.OverQtyPcs) < proStockInfoDetails.Sum(x => x.StockPcsQty)) + // { + // return content.Error($"鍑哄簱鏁伴噺{proStockInfoDetails.Sum(x => x.StockPcsQty)}>鎵�鍓╄鍗曟暟閲弡proOutOrder.Details.Sum(x => x.QtyPcs - x.OverQtyPcs)}"); + // } + // List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>(); + // List<Dt_ProOutOrderDetail> proOutOrderDetails = proOutOrder.Details.Where(x => proStockInfoDetails.Select(x => x.SaleOrder).Contains(x.SaleOrder) && proStockInfoDetails.Select(x => x.ProductCode).Contains(x.PCode) && proStockInfoDetails.Select(x => x.ProductVersion).Contains(x.PVer)).ToList(); + // if (proOutOrderDetails == null || proOutOrderDetails.Count <= 0) + // { + // return content.Error("瀵瑰簲鍑哄簱璁㈠崟鏄庣粏涓虹┖"); + // } + // int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); + // foreach (var item in proStockInfoDetails) + // { + // //鑾峰彇瀵瑰簲鏄庣粏澶勭悊鍑哄簱鏁版嵁 + // Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrderDetails.Where(x => x.SaleOrder == item.SaleOrder && x.PVer == item.ProductVersion && x.PCode == item.ProductCode).FirstOrDefault(); + // if (proOutOrderDetail == null) + // { + // return content.Error("鏈壘鍒板搴斿嚭搴撹鍗曟槑缁�"); + // } + // proOutOrderDetail.OverQtyPcs += item.StockPcsQty; + // item.OutboundQuantity = item.StockPcsQty; + // item.OutSETQty = item.SETQty; + // if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) + // { + // return content.Error($"鍑哄簱璁㈠崟鏄庣粏琛寋proOutOrderDetail.RowId},婧㈠嚭{proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs}"); + // } + // if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs) + // { + // proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); + // } - } - proStockInfos.ForEach(x => - { - x.StockStatus = StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt(); - }); - proStockInfoDetails.ForEach(x => - { - x.ProOutDetailStatus = StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt(); - }); - int AddOverCount = proOutOrderDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); - if (proOutOrder.Details.Count == (AddOverCount + OldOverCount)) - { - proOutOrder.ProOrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt(); - //鑾峰彇鎵�鏈夊凡鎵爜寰呭彂璐х殑搴撳瓨 - List<Dt_ProStockInfo> AllOutStocks = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>() - .Where(x => x.ShipmentOrder == ProOutNo && x.StockStatus == StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt()) - .Includes(x => x.proStockInfoDetails).ToList(); - AllOutStocks.ForEach(x => - { - proStockInfoDetails.AddRange(x.proStockInfoDetails); - }); - proStockInfos.AddRange(AllOutStocks); - foreach (var item in proStockInfoDetails) - { - StockOutItemsItem outItemsItem = new StockOutItemsItem() - { - PartNum = item.ProductCode, - Rev = item.ProductVersion, - SoNumber = item.SaleOrder, - BatchNumber = item.BagNo, - QtyPcs = item.StockPcsQty, - QtySet = item.SETQty - }; - stockOutItems.Add(outItemsItem); - } - } - _unitOfWorkManage.BeginTran(); - Dt_Warehouse warehouse = warehouses.Where(x => x.WarehouseId == proOutOrder.WarehouseId).FirstOrDefault(); - //澶勭悊搴撳瓨鏁版嵁鍜屼笂浼燛RP - if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()) - { - //鎴愬搧搴撳瓨璁板綍鍙樺姩寰呭姞鍏� - ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel() - { - Way = 1, - StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)), - ConfirmedUserNo = App.User.UserName, - AssignUserNo = App.User.UserName, - WarehouseCode = warehouse.WarehouseCode, - ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), - DeliverplanCode = proOutOrder.ProOutOrderNo, - Remark = proOutOrder.Remark, - StockOutItems = stockOutItems - }; - _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.鑷姩瀹屾垚); - _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.鑷姩瀹屾垚); - string response = _invokeERPService.InvokeProOutApi(proOutOrderModel); - ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>(); - if (erpRequestContent.res != 1) - { - throw new Exception("鍚屾ERP澶辫触,閿欒淇℃伅:" + erpRequestContent.Data); - } - } - else - { - _stockRepository.ProStockInfoRepository.UpdateData(proStockInfos); - _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails); - } - _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails); - BaseDal.UpdateData(proOutOrder); - _unitOfWorkManage.CommitTran(); - content.OK(); - } - catch (Exception ex) - { - content.Error(ex.Message); - } - return content; - } + // } + // proStockInfos.ForEach(x => + // { + // x.StockStatus = StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt(); + // }); + // proStockInfoDetails.ForEach(x => + // { + // x.ProOutDetailStatus = StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt(); + // }); + // int AddOverCount = proOutOrderDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); + // if (proOutOrder.Details.Count == (AddOverCount + OldOverCount)) + // { + // proOutOrder.ProOrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt(); + // //鑾峰彇鎵�鏈夊凡鎵爜寰呭彂璐х殑搴撳瓨 + // List<Dt_ProStockInfo> AllOutStocks = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>() + // .Where(x => x.ShipmentOrder == ProOutNo && x.StockStatus == StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt()) + // .Includes(x => x.proStockInfoDetails).ToList(); + // AllOutStocks.ForEach(x => + // { + // proStockInfoDetails.AddRange(x.proStockInfoDetails); + // }); + // proStockInfos.AddRange(AllOutStocks); + // foreach (var item in proStockInfoDetails) + // { + // StockOutItemsItem outItemsItem = new StockOutItemsItem() + // { + // PartNum = item.ProductCode, + // Rev = item.ProductVersion, + // SoNumber = item.SaleOrder, + // BatchNumber = item.BagNo, + // QtyPcs = item.OutboundQuantity, + // QtySet = item.OutSETQty + // }; + // stockOutItems.Add(outItemsItem); + // } + // } + // Dt_Warehouse warehouse = warehouses.Where(x => x.WarehouseId == proOutOrder.WarehouseId).FirstOrDefault(); + // _unitOfWorkManage.BeginTran(); + // //澶勭悊搴撳瓨鏁版嵁鍜屼笂浼燛RP + // if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()) + // { + // //鎴愬搧搴撳瓨璁板綍鍙樺姩寰呭姞鍏� + // ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel() + // { + // Way = 1, + // StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)), + // ConfirmedUserNo = App.User.UserName, + // AssignUserNo = App.User.UserName, + // WarehouseCode = warehouse.WarehouseCode, + // ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + // DeliverplanCode = proOutOrder.ProOutOrderNo, + // Remark = proOutOrder.Remark, + // StockOutItems = stockOutItems + // }; + // _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.鑷姩瀹屾垚); + // _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.鑷姩瀹屾垚); + // string response = _invokeERPService.InvokeProOutApi(proOutOrderModel); + // ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>(); + // if (erpRequestContent.res != 1) + // { + // throw new Exception("鍚屾ERP澶辫触,閿欒淇℃伅:" + erpRequestContent.Data); + // } + // } + // else + // { + // _stockRepository.ProStockInfoRepository.UpdateData(proStockInfos); + // _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails); + // } + // _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails); + // BaseDal.UpdateData(proOutOrder); + // _unitOfWorkManage.CommitTran(); + // content.OK(); + // } + // catch (Exception ex) + // { + // content.Error(ex.Message); + // } + // return content; + //} /// <summary> /// PDA鑾峰彇鍑哄簱鍗曟嵁 /// </summary> @@ -577,11 +611,11 @@ List<Dt_ProOutOrder> proOutOrders = new List<Dt_ProOutOrder>(); if (string.IsNullOrEmpty(orderNo)) { - proOutOrders = Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOrderStatus == OutOrderStatusEnum.鍑哄簱涓�.ObjToInt() && x.WarehouseId == warehouseId).Includes(x=>x.Details).OrderByDescending(x => x.Id).ToPageList(pageNo, 5); + proOutOrders = Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOrderStatus <= OutOrderStatusEnum.鍑哄簱涓�.ObjToInt() && x.WarehouseId == warehouseId).Includes(x=>x.Details).OrderByDescending(x => x.Id).ToPageList(pageNo, 5); } else { - proOutOrders = Db.Queryable<Dt_ProOutOrder>().Where(x => (x.ProOutOrderNo.Contains(orderNo) || x.ProOutOrderNo.Contains(orderNo)) && x.ProOrderStatus == OutOrderStatusEnum.鍑哄簱涓�.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.Id).Includes(x => x.Details).ToPageList(pageNo, 5); + proOutOrders = Db.Queryable<Dt_ProOutOrder>().Where(x => (x.ProOutOrderNo.Contains(orderNo) || x.ProOutOrderNo.Contains(orderNo)) && x.ProOrderStatus <= OutOrderStatusEnum.鍑哄簱涓�.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.Id).Includes(x => x.Details).ToPageList(pageNo, 5); } content.OK(data: proOutOrders); @@ -607,11 +641,9 @@ { return content.Error($"鏈壘鍒板嚭搴撳崟{proOutOrder.ProOutOrderNo}"); } - //鑾峰彇褰撳墠宸茬粦瀹氱殑澶栧寘鐮�(鍑哄簱鐘舵��) - List<string> outBags = _stockRepository.ProStockInfoRepository.QueryData(x => x.StockStatus == StockStatusEmun.骞冲簱寰呭彂璐�.ObjToInt() && x.ShipmentOrder== proOutOrder.ProOutOrderNo).Select(x=>x.PalletCode).ToList(); //鑾峰彇鏄庣粏 - List<Dt_ProOutOrderDetail> proOutOrderDetails = _outboundRepository.ProOutOrderDetailRepository.QueryData(x=>x.ProOrderId==keyId).OrderBy(x=>x.ProOrderDetailStatus).ThenBy(x=>x.Id).ToList(); - content.OK("鎴愬姛", new { outBags, proOutOrderDetails }); + List<Dt_ProOutOrderDetail> proOutOrderDetails = _outboundRepository.ProOutOrderDetailRepository.QueryData(x => x.ProOrderId == keyId).OrderBy(x => x.ProOrderDetailStatus).ThenBy(x => x.Id).ToList(); + content.OK("鎴愬姛", new { proOutOrderDetails }); } catch (Exception ex) { @@ -619,5 +651,433 @@ } return content; } + /// <summary> + /// 鏌ヨERP璁㈠崟鎵i櫎搴撳瓨鏁伴噺 + /// </summary> + public async Task<WebResponseContent> OutProErpSync(string outProOrderNo) + { + WebResponseContent content = new WebResponseContent(); + try + { + //鏍规嵁鍑哄簱鍗曞彿鑾峰彇璇ュ嚭搴撹鍗曠殑ERP鍑哄簱搴撳瓨淇℃伅 + Dt_ProOutOrder proOutOrder = BaseDal.Db.Queryable<Dt_ProOutOrder>().Where(x=>x.ProOutOrderNo== outProOrderNo).Includes(x => x.Details).First(); + if (proOutOrder==null) + { + return await Task.FromResult(content.Error($"鏈壘鍒版垚鍝佸嚭搴撹鍗晎outProOrderNo}")); + } + if (proOutOrder.ProOrderStatus>=OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()) + { + return await Task.FromResult(content.Error($"鍑哄簱璁㈠崟宸插畬鎴愭垨鍏抽棴")); + } + //璋冪敤erp鍑哄簱璁㈠崟搴撳瓨鏌ヨ鎺ュ彛 + string response = _invokeERPService.InvokeOutProErpSync(outProOrderNo); + ErpOutProSyncResponseContent erpOutProSyncResponse= response.DeserializeObject<ErpOutProSyncResponseContent>(); + if (erpOutProSyncResponse.Code!=200) + { + return await Task.FromResult(content.Error($"ERP鍑哄簱璁㈠崟鏌ヨ鎺ュ彛璋冪敤澶辫触,閿欒淇℃伅:{erpOutProSyncResponse.Msg}")); + } + List<OutProStock> outProStocks = erpOutProSyncResponse.Data; + if (outProStocks.Count<=0 || outProStocks==null) + { + return await Task.FromResult(content.Error($"鎴愬搧鍑哄簱璁㈠崟{outProOrderNo}ERP褰撳墠鏈湁鍑哄簱搴撳瓨淇℃伅")); + } + //鑾峰彇骞冲簱搴撳尯 + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString()); + if (warehouse==null) + { + return await Task.FromResult(content.Error("鏈壘鍒板簱鍖轰俊鎭�")); + } + //鑾峰彇鎵�鏈夊钩搴撳簱瀛� + List<Dt_ProStockInfo> proStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId).Includes(x => x.proStockInfoDetails).ToList(); + List<Dt_ProStockInfoDetail> proStockInfoDetails= new List<Dt_ProStockInfoDetail>(); + foreach (var item in proStockInfos) + { + proStockInfoDetails.AddRange(item.proStockInfoDetails); + } + proStockInfoDetails = proStockInfoDetails.OrderBy(x => x.DateCode).ThenBy(x => x.CreateDate).ToList() ; + List<Dt_ProStockInfo> delProStockInfos = new List<Dt_ProStockInfo>(); + List<Dt_ProStockInfoDetail> delStockInfoDetails = new List<Dt_ProStockInfoDetail>(); + foreach (var item in outProStocks) + { + //鏌ヨ搴撳瓨璁板綍 + if (item.ShippingNumber != outProOrderNo) + { + return await Task.FromResult(content.Error($"ERP杩斿洖浜嗗嚭搴撹鍗晎item.ShippingNumber}搴撳瓨淇℃伅")); + } + //鑾峰彇搴撳瓨 + List<Dt_ProStockInfoDetail> outStocks = proStockInfoDetails.Where(x=>x.ProductCode==item.Partnum).ToList(); + if (outStocks.Count==0 || outStocks==null) + { + return await Task.FromResult(content.Error($"{item.Partnum}浜у搧鍨嬪彿搴撳瓨涓嶅瓨鍦�")); + } + foreach (var itemOut in outStocks) + { + if (item.Quantity==0) + { + break; + } + if (item.Quantity >= itemOut.StockPcsQty) + { + Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.SaleOrder == item.SoNumber && x.PCode == item.Partnum); + if (proOutOrderDetail == null) + { + return await Task.FromResult(content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}鏈壘鍒伴攢鍞鍗晎item.SoNumber}鏄庣粏,璇锋鏌�")); + } + //鏇存柊鍑哄簱鏄庣粏鍗曟暟閲� + proOutOrderDetail.OverQtyPcs += itemOut.StockPcsQty; + item.Quantity -= (int)itemOut.StockPcsQty; + delStockInfoDetails.Add(itemOut); + proStockInfoDetails.Remove(itemOut); + if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) + { + return await Task.FromResult(content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}閿�鍞鍗晎item.SoNumber}鏁伴噺婧㈠嚭{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}")); + } + if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) + { + proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); + } + if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs) + { + proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); + } + } + else if (item.Quantity < itemOut.StockPcsQty) + { + Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.SaleOrder == item.SoNumber && x.PCode == item.Partnum); + if (proOutOrderDetail == null) + { + return await Task.FromResult(content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}鏈壘鍒伴攢鍞鍗晎item.SoNumber}鏄庣粏,璇锋鏌�")); + } + //鏇存柊鍑哄簱鏄庣粏鍗曟暟閲� + proOutOrderDetail.OverQtyPcs += item.Quantity; + item.Quantity -= item.Quantity; + float Range = itemOut.StockPcsQty / itemOut.SETQty; + itemOut.SETQty = item.Quantity / Range; + itemOut.StockPcsQty -= item.Quantity; + if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) + { + return await Task.FromResult(content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}閿�鍞鍗晎item.SoNumber}鏁伴噺婧㈠嚭{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}")); + } + if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) + { + proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); + } + if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs) + { + proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); + } + } + } + } + if (proOutOrder.Details.Count == proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count()) + { + proOutOrder.ProOrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt(); + } + else + { + Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.ProOrderDetailStatus <= OrderDetailStatusEnum.Over.ObjToInt()); + return await Task.FromResult(content.Error($"{proOutOrderDetail?.SaleOrder}閿�鍞鍗曟暟閲忛渶鍑簕proOutOrderDetail?.QtyPcs},鍙嚭{proOutOrderDetail?.OverQtyPcs}")); + } + //鏇存柊鏁版嵁 + _unitOfWorkManage.BeginTran(); + if (delStockInfoDetails.Count > 0) + { + _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(delStockInfoDetails, OperateTypeEnum.鑷姩鍒犻櫎); + } + await _stockRepository.ProStockInfoDetailRepository.UpdateDataAsync(proStockInfoDetails); + await BaseDal.UpdateDataAsync(proOutOrder); + await _outboundRepository.ProOutOrderDetailRepository.UpdateDataAsync(proOutOrder.Details); + _unitOfWorkManage.CommitTran(); + return await Task.FromResult(content.OK()); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + return await Task.FromResult(content.Error(ex.Message)); + } + } + /// <summary> + /// 鍑哄簱鍗曟壂鐮佸悓姝RP + /// </summary> + /// <returns></returns> + public async Task<WebResponseContent> OutProScanCodeSync(SaveModel saveModel) + { + WebResponseContent content = new WebResponseContent(); + try + { + string? ProOutNo = saveModel.MainData["outProOrderNo"].ToString(); + var Codes = saveModel.DelKeys.Select(x=>x.ToString().Trim()).ToList(); + if (Codes.Count<=0) + { + return await Task.FromResult(content.Error("鎵弿鍐呭涓嶈兘涓虹┖")); + } + Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == ProOutNo).Includes(x => x.Details).First(); + if (proOutOrder == null) + { + return await Task.FromResult(content.Error($"鍑哄簱鍗晎ProOutNo}涓嶅瓨鍦�")); + } + if (proOutOrder.ProOrderStatus >= OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()) + { + return await Task.FromResult(content.Error($"鍑哄簱鍗晎ProOutNo}宸插畬鎴愭垨鍏抽棴")); + } + string? userName = App.User.UserName;//GSWMS + List<OutProInfoDTO> outProInfos= new List<OutProInfoDTO>(); + foreach (var item in Codes) + { + string[] proInfoInputs = item.Split(','); + if (proInfoInputs.Length!=5) + { + return await Task.FromResult(content.Error($"澶栧寘{item}鎵弿涓嶅叏")); + } + OutProInfoDTO outProInfo=new OutProInfoDTO() + { + ProductCode= proInfoInputs[1], + OutQtys = proInfoInputs[4].ObjToInt() + }; + outProInfos.Add(outProInfo); + } + //鑾峰彇骞冲簱搴撳尯 + Dt_Warehouse warehouse = await _basicRepository.WarehouseRepository.QueryFirstAsync(x => x.WarehouseCode == WarehouseEnum.HA101.ToString()); + if (warehouse == null) + { + return await Task.FromResult(content.Error("鏈壘鍒板簱鍖轰俊鎭�")); + } + //鑾峰彇鎵�鏈夊钩搴撶殑鏁版嵁 + List<Dt_ProStockInfo> AllproStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>() + .Where(x => x.WarehouseId == warehouse.WarehouseId) + .Includes(x => x.proStockInfoDetails).ToList(); + List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>(); + List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>(); + foreach (var item in AllproStockInfos) + { + proStockInfoDetails.AddRange(item.proStockInfoDetails); + } + proStockInfoDetails = proStockInfoDetails.OrderBy(x => x.DateCode).ThenBy(x => x.CreateDate).ThenBy(x=>x.StockPcsQty).ToList(); + List<Dt_Warehouse> warehouses = await _basicRepository.WarehouseRepository.QueryDataAsync(x => x.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString()); + //灏嗗叾鍒嗙粍 + outProInfos = outProInfos.GroupBy(x => x.ProductCode).Select(x=>new OutProInfoDTO() + { + ProductCode=x.Key, + OutQtys=x.Sum(x=>x.OutQtys) + }).ToList(); + List<Dt_ProStockInfoDetail> UpStockInfoDetails = new List<Dt_ProStockInfoDetail>(); + foreach (var item in outProInfos) + { + //鑾峰彇搴撳瓨 + List<Dt_ProStockInfoDetail> outStocks = proStockInfoDetails.Where(x => x.ProductCode == item.ProductCode && x.OutProNo == null).ToList(); + if (outStocks.Count <= 0 || outProInfos==null) + { + return await Task.FromResult(content.Error($"鏈壘鍒颁骇鍝亄item.ProductCode}搴撳瓨")); + } + foreach (var outStock in outStocks) + { + //濡傛灉鎵e噺涓�0璺冲嚭閫昏緫 + if (item.OutQtys == 0) + { + break; + } + //鍒ゆ柇鍑哄簱鏁伴噺鏄惁澶т簬鎴栫瓑浜庡簱瀛樻暟閲� + if (item.OutQtys >= outStock.StockPcsQty) + { + Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.PCode == item.ProductCode && x.ProOrderDetailStatus < OrderDetailStatusEnum.Over.ObjToInt()); + //鍒ゆ柇鏄惁瀛樺湪鍚屼竴鍨嬪彿涓ゆ潯鏄庣粏 + if (proOutOrderDetail == null) + { + return await Task.FromResult(content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}鏈壘鍒颁骇鍝亄item.ProductCode}鏄庣粏,璇锋鏌�")); + } + List<Dt_ProOutOrderDetail>? outOrderDetails = proOutOrder.Details.Where(x => x.PCode == item.ProductCode && x.ProOrderDetailStatus < OrderDetailStatusEnum.Over.ObjToInt() && x.Id != proOutOrderDetail.Id).ToList(); + float BeyondQtys = proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs; + //鏇存柊鍑哄簱鏄庣粏鍗曟暟閲� + proOutOrderDetail.OverQtyPcs += outStock.StockPcsQty; + + //鏄惁瓒呭嚭 + if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) + { + if (outOrderDetails.Count>=1) + { + proOutOrderDetail.OverQtyPcs -= outStock.StockPcsQty; + proOutOrderDetail.OverQtyPcs += BeyondQtys; + outStock.OutboundQuantity = BeyondQtys; + outStock.OutDetailSaleNo = proOutOrderDetail.SaleOrder; + outStock.OutProNo = proOutOrder.ProOutOrderNo; + float Range = outStock.StockPcsQty / outStock.SETQty; + if (outStock.OutboundQuantity== outStock.StockPcsQty) + { + outStock.OutSETQty = outStock.SETQty; + outStock.AssignDel = 1; + } + else + { + outStock.OutSETQty = outStock.OutboundQuantity / Range; + } + item.OutQtys -= (int)BeyondQtys; + UpStockInfoDetails.Add(outStock); + proStockInfoDetails.Remove(outStock); + } + else + { + return await Task.FromResult(content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}琛屽彿{proOutOrderDetail.RowId}浜у搧鍨嬪彿{item.ProductCode}鏁伴噺婧㈠嚭{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}")); + } + } + else + { + outStock.OutboundQuantity = outStock.StockPcsQty; + outStock.OutDetailSaleNo = proOutOrderDetail.SaleOrder; + outStock.OutProNo = proOutOrder.ProOutOrderNo; + outStock.OutSETQty = outStock.SETQty; + outStock.AssignDel = 1; + item.OutQtys -= (int)outStock.StockPcsQty; + UpStockInfoDetails.Add(outStock); + proStockInfoDetails.Remove(outStock); + } + if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) + { + proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); + } + if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs) + { + proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); + } + } + else if (item.OutQtys < outStock.StockPcsQty) //鍓╀綑鏁伴噺灏忎簬 + { + Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.PCode == item.ProductCode && x.ProOrderDetailStatus < OrderDetailStatusEnum.Over.ObjToInt()); + if (proOutOrderDetail == null) + { + return await Task.FromResult(content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}鏈壘鍒颁骇鍝亄item.ProductCode}鏄庣粏,璇锋鏌�")); + } + List<Dt_ProOutOrderDetail>? outOrderDetails = proOutOrder.Details.Where(x => x.PCode == item.ProductCode && x.ProOrderDetailStatus < OrderDetailStatusEnum.Over.ObjToInt() && x.Id != proOutOrderDetail.Id).ToList(); + //鏇存柊鍑哄簱鏄庣粏鍗曟暟閲� + float BeyondQtys = proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs; + proOutOrderDetail.OverQtyPcs += item.OutQtys; + + //鏄惁瓒呭嚭 + if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) + { + if (outOrderDetails.Count >= 1) + { + proOutOrderDetail.OverQtyPcs -= outStock.StockPcsQty; + proOutOrderDetail.OverQtyPcs += BeyondQtys; + outStock.OutDetailSaleNo = proOutOrderDetail.SaleOrder; + outStock.OutProNo = proOutOrder.ProOutOrderNo; + outStock.OutboundQuantity = BeyondQtys; + float Range = outStock.StockPcsQty / outStock.SETQty; + outStock.OutSETQty = outStock.OutboundQuantity / Range; + item.OutQtys -= (int)BeyondQtys; + UpStockInfoDetails.Add(outStock); + proStockInfoDetails.Remove(outStock); + } + else + { + return await Task.FromResult(content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}琛屽彿{proOutOrderDetail.RowId}浜у搧鍨嬪彿{item.ProductCode}鏁伴噺婧㈠嚭{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}")); + } + } + else + { + outStock.OutDetailSaleNo = proOutOrderDetail.SaleOrder; + outStock.OutProNo = proOutOrder.ProOutOrderNo; + outStock.OutboundQuantity = item.OutQtys; + float Range = outStock.StockPcsQty / outStock.SETQty; + outStock.OutSETQty = outStock.OutboundQuantity / Range; + item.OutQtys -= item.OutQtys; + UpStockInfoDetails.Add(outStock); + proStockInfoDetails.Remove(outStock); + } + if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) + { + proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); + } + if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs) + { + proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); + } + } + } + } + if (proOutOrder.Details.Count == proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count()) + { + proOutOrder.ProOrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt(); + } + else + { + Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.ProOrderDetailStatus < OrderDetailStatusEnum.Over.ObjToInt()); + return await Task.FromResult(content.Error($"{proOutOrderDetail?.SaleOrder}閿�鍞鍗曟暟閲忛渶鍑簕proOutOrderDetail?.QtyPcs},鍙嚭{proOutOrderDetail?.OverQtyPcs}")); + } + List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>(); + if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()) + { + //鑾峰彇鎵�鏈夊凡鎵爜寰呭彂璐х殑搴撳瓨 + List<Dt_ProStockInfoDetail> assOutStocks = _stockRepository.ProStockInfoDetailRepository.Db.Queryable<Dt_ProStockInfoDetail>() + .Where(x => x.OutProNo == ProOutNo).ToList(); + UpStockInfoDetails.AddRange(assOutStocks); + foreach (var item in UpStockInfoDetails) + { + StockOutItemsItem outItemsItem = new StockOutItemsItem() + { + PartNum = item.ProductCode, + Rev = item.ProductVersion, + SoNumber = item.OutDetailSaleNo, + BatchNumber = item.ProductCode, + QtyPcs = item.OutboundQuantity, + QtySet = item.OutSETQty + }; + stockOutItems.Add(outItemsItem); + } + } + Dt_Warehouse warehouseOut = warehouses.Where(x => x.WarehouseId == proOutOrder.WarehouseId).FirstOrDefault(); + _unitOfWorkManage.BeginTran(); + //澶勭悊搴撳瓨鏁版嵁鍜屼笂浼燛RP + if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()) + { + //鎴愬搧搴撳瓨璁板綍鍙樺姩寰呭姞鍏� + ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel() + { + Way = 1, + StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)), + ConfirmedUserNo = App.User.UserName, + AssignUserNo = App.User.UserName, + WarehouseCode = warehouseOut.WarehouseCode, + ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + DeliverplanCode = proOutOrder.ProOutOrderNo, + Remark = proOutOrder.Remark, + StockOutItems = stockOutItems + }; + //鑾峰彇鍒犻櫎搴撳瓨 + List<Dt_ProStockInfoDetail> delDetails = UpStockInfoDetails.Where(x=>x.AssignDel==1).ToList(); + List<Dt_ProStockInfoDetail> UpDetails = UpStockInfoDetails.Where(x => x.AssignDel != 1).ToList(); + //鏇存柊鏁版嵁 + UpDetails.ForEach(x => + { + x.StockPcsQty -= x.OutboundQuantity; + x.SETQty -= x.OutSETQty; + x.OutDetailId = 0; + x.OutDetailSaleNo = null; + x.OutProNo = null; + }); + _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(delDetails, OperateTypeEnum.鑷姩瀹屾垚); + await _stockRepository.ProStockInfoDetailRepository.UpdateDataAsync(UpDetails); + //鍚屾ERP + string response = _invokeERPService.InvokeProOutApi(proOutOrderModel); + ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>(); + if (erpRequestContent.res != 1) + { + throw new Exception("鍚屾ERP澶辫触,閿欒淇℃伅:" + erpRequestContent.Data); + } + } + else + { + await _stockRepository.ProStockInfoDetailRepository.UpdateDataAsync(UpStockInfoDetails); + } + await _outboundRepository.ProOutOrderDetailRepository.UpdateDataAsync(proOutOrder.Details); + await BaseDal.UpdateDataAsync(proOutOrder); + _unitOfWorkManage.CommitTran(); + return await Task.FromResult(content.OK()); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + return await Task.FromResult(content.Error(ex.Message)); + } + } } } -- Gitblit v1.9.3