| | |
| | | keyValuePairs.Add(item.SaleOrder, responseContent.Data[0].Endcustomer); |
| | | } |
| | | } |
| | | proOutOrderDetail.QtyPcs += proOutOrderDetail.SpareQty; |
| | | proOutOrderDetails.Add(proOutOrderDetail); |
| | | } |
| | | Dt_ProOutOrder proOutOrder= new Dt_ProOutOrder() |
| | |
| | | /// <summary> |
| | | /// æ¥è¯¢ERPè®¢åæ£é¤åºåæ°é |
| | | /// </summary> |
| | | public async Task<WebResponseContent> OutProErpSync(string outProOrderNo) |
| | | public WebResponseContent OutProErpSync(string outProOrderNo) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | |
| | | 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}")); |
| | | return content.Error($"æªæ¾å°æååºåºè®¢å{outProOrderNo}"); |
| | | } |
| | | if (proOutOrder.ProOrderStatus>=OutOrderStatusEnum.åºåºå®æ.ObjToInt()) |
| | | { |
| | | return await Task.FromResult(content.Error($"åºåºè®¢å已宿æå
³é")); |
| | | return 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}")); |
| | | return content.Error($"ERPåºåºè®¢åæ¥è¯¢æ¥å£è°ç¨å¤±è´¥,é误信æ¯:{erpOutProSyncResponse.Msg}"); |
| | | } |
| | | List<OutProStock> outProStocks = erpOutProSyncResponse.Data; |
| | | if (outProStocks.Count<=0 || outProStocks==null) |
| | | { |
| | | return await Task.FromResult(content.Error($"æååºåºè®¢å{outProOrderNo}ERPå½åæªæåºåºåºåä¿¡æ¯")); |
| | | return content.Error($"æååºåºè®¢å{outProOrderNo}ERPå½åæªæåºåºåºåä¿¡æ¯"); |
| | | } |
| | | // éªè¯ææåºåºåå·æ¯å¦ä¸è´ |
| | | OutProStock? outExist = outProStocks.FirstOrDefault(x => x.ShippingNumber != outProOrderNo); |
| | | if (outExist != null) |
| | | { |
| | | return content.Error($"ERPè¿åäºåºåºè®¢å{outExist.ShippingNumber}åºåä¿¡æ¯"); |
| | | } |
| | | //è·åå¹³åºåºåº |
| | | Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString()); |
| | | if (warehouse==null) |
| | | { |
| | | return await Task.FromResult(content.Error("æªæ¾å°åºåºä¿¡æ¯")); |
| | | return content.Error("æªæ¾å°åºåºä¿¡æ¯"); |
| | | } |
| | | var productCodes = outProStocks.Select(x => x.Partnum).Distinct().ToList(); |
| | | //è·åææå¹³åºåºå |
| | | 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); |
| | | } |
| | | List<Dt_ProStockInfoDetail> proStockInfoDetails = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo, Dt_ProStockInfoDetail>((master, detail) => master.Id == detail.ProStockId) |
| | | .Where((master, detail) => master.WarehouseId == warehouse.WarehouseId && productCodes.Contains(detail.ProductCode)) |
| | | .Select((master, detail) => detail) |
| | | .ToList(); |
| | | 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}产ååå·åºåä¸åå¨")); |
| | | return content.Error($"{item.Partnum}产ååå·åºåä¸åå¨"); |
| | | } |
| | | foreach (var itemOut in outStocks) |
| | | { |
| | |
| | | { |
| | | break; |
| | | } |
| | | Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x => x.SaleOrder == item.SoNumber && x.PCode == item.Partnum) ?? throw new Exception($"åºåºå{proOutOrder.ProOutOrderNo}æªæ¾å°éå®è®¢å{item.SoNumber}æç»,è¯·æ£æ¥"); |
| | | 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; |
| | |
| | | proStockInfoDetails.Remove(itemOut); |
| | | if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) |
| | | { |
| | | return await Task.FromResult(content.Error($"åºåºå{proOutOrder.ProOutOrderNo}éå®è®¢å{item.SoNumber}æ°é溢åº{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}")); |
| | | return content.Error($"åºåºå{proOutOrder.ProOutOrderNo}éå®è®¢å{item.SoNumber}æ°é溢åº{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}"); |
| | | } |
| | | if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.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; |
| | |
| | | itemOut.StockPcsQty -= item.Quantity; |
| | | if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs) |
| | | { |
| | | return await Task.FromResult(content.Error($"åºåºå{proOutOrder.ProOutOrderNo}éå®è®¢å{item.SoNumber}æ°é溢åº{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}")); |
| | | return content.Error($"åºåºå{proOutOrder.ProOutOrderNo}éå®è®¢å{item.SoNumber}æ°é溢åº{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}"); |
| | | } |
| | | if (proOutOrderDetail.ProOrderDetailStatus == OrderDetailStatusEnum.New.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}")); |
| | | return content.Error($"{proOutOrderDetail?.SaleOrder}éå®è®¢åæ°ééåº{proOutOrderDetail?.QtyPcs},å¯åº{proOutOrderDetail?.OverQtyPcs}"); |
| | | } |
| | | //æ´æ°æ°æ® |
| | | _unitOfWorkManage.BeginTran(); |
| | |
| | | { |
| | | _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(delStockInfoDetails, OperateTypeEnum.èªå¨å é¤); |
| | | } |
| | | await _stockRepository.ProStockInfoDetailRepository.UpdateDataAsync(proStockInfoDetails); |
| | | await BaseDal.UpdateDataAsync(proOutOrder); |
| | | await _outboundRepository.ProOutOrderDetailRepository.UpdateDataAsync(proOutOrder.Details); |
| | | _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails); |
| | | BaseDal.UpdateData(proOutOrder); |
| | | _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrder.Details); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return await Task.FromResult(content.OK()); |
| | | return content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return await Task.FromResult(content.Error(ex.Message)); |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |