| | |
| | | return WebResponseContent.Instance.Error($"åºåºå {request.OrderNo} ä¸åå¨"); |
| | | } |
| | | |
| | | // 5. æ¥æ¾åºåºåæç»ä¿¡æ¯ |
| | | List<Dt_OutboundOrderDetail> outboundOrderDetails = FindMatchingOutboundDetails(outboundOrder.Id, stockDetail); |
| | | if (!outboundOrderDetails.Any()) |
| | | { |
| | | response.Success = false; |
| | | response.Message = $"æªæ¾å°å¹é
çåºåºåæç»ï¼ç©æï¼{stockDetail.MaterielCode}ï¼æ¹æ¬¡ï¼{stockDetail.BatchNo}"; |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å¹é
çåºåºåæç»ï¼ç©æï¼{stockDetail.MaterielCode}ï¼æ¹æ¬¡ï¼{stockDetail.BatchNo}"); |
| | | } |
| | | |
| | | // 6. æ¥æ¾éå®è®°å½ |
| | | // 5. æ¥æ¾éå®è®°å½ |
| | | Dt_OutStockLockInfo lockInfo = _outboundLockInfoService.Repository.QueryFirst(x => |
| | | x.OrderNo == request.OrderNo && |
| | | x.StockId == stockInfo.Id && |
| | |
| | | response.Success = false; |
| | | response.Message = $"该åºå没æåé
åºåºéï¼æ¡ç ï¼{request.Barcode}"; |
| | | return WebResponseContent.Instance.Error($"该åºå没æåé
åºåºéï¼æ¡ç ï¼{request.Barcode}"); |
| | | } |
| | | |
| | | // æ¾åºå·²åé
ç订åæç»Id |
| | | List<int> detailIds = new List<int>(); |
| | | string[] ids = lockInfo.OrderDetailIds.Split(","); |
| | | foreach (string id in ids) |
| | | { |
| | | if(int.TryParse(id, out int detailId)) |
| | | { |
| | | detailIds.Add(detailId); |
| | | } |
| | | } |
| | | // 6. æ¥æ¾åºåºåæç»ä¿¡æ¯ |
| | | List<Dt_OutboundOrderDetail> outboundOrderDetails = FindMatchingOutboundDetails(outboundOrder.Id, stockDetail, detailIds); |
| | | if (!outboundOrderDetails.Any()) |
| | | { |
| | | response.Success = false; |
| | | response.Message = $"æªæ¾å°å¹é
çåºåºåæç»ï¼ç©æï¼{stockDetail.MaterielCode}ï¼æ¹æ¬¡ï¼{stockDetail.BatchNo}"; |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°å¹é
çåºåºåæç»ï¼ç©æï¼{stockDetail.MaterielCode}ï¼æ¹æ¬¡ï¼{stockDetail.BatchNo}"); |
| | | } |
| | | |
| | | // 7. 计ç®å®é
åºåºé |
| | |
| | | response.Success = false; |
| | | response.Message = $"æ æ³åºåºï¼æ¡ç ï¼{request.Barcode}ï¼åºåï¼{stockDetail.StockQuantity}ï¼å·²åºåºï¼{totalAllocatedQuantity}ï¼åé
éï¼{lockInfo.AssignQuantity}ï¼æç»å©ä½ï¼{detailRemainingQuantity}"; |
| | | return WebResponseContent.Instance.Error($"æ æ³åºåºï¼æ¡ç ï¼{request.Barcode}ï¼åºåï¼{stockDetail.StockQuantity}ï¼å·²åºåºï¼{totalAllocatedQuantity}ï¼åé
éï¼{lockInfo.AssignQuantity}ï¼æç»å©ä½ï¼{detailRemainingQuantity}"); |
| | | } |
| | | |
| | | if(actualOutboundQuantity + lockInfo.SortedQuantity > lockInfo.AssignQuantity) |
| | | { |
| | | response.Success = false; |
| | | response.Message = $"æ æ³åºåºï¼æ¡ç ï¼{request.Barcode}ï¼åºåï¼{stockDetail.StockQuantity}ï¼åºåºé{actualOutboundQuantity + lockInfo.SortedQuantity}大äºåé
é{lockInfo.AssignQuantity}"; |
| | | return WebResponseContent.Instance.Error($"æ æ³åºåºï¼æ¡ç ï¼{request.Barcode}ï¼åºåï¼{stockDetail.StockQuantity}ï¼åºåºé{actualOutboundQuantity + lockInfo.SortedQuantity}大äºåé
é{lockInfo.AssignQuantity}"); |
| | | } |
| | | |
| | | // 8. 夿æ¯å¦éè¦æå
ï¼å½åºåºæ°éå°äºåºåæ°éæ¶éè¦æå
ï¼ |
| | |
| | | /// <param name="orderId"></param> |
| | | /// <param name="stockDetail"></param> |
| | | /// <returns></returns> |
| | | private List<Dt_OutboundOrderDetail> FindMatchingOutboundDetails(int orderId, Dt_StockInfoDetail stockDetail) |
| | | private List<Dt_OutboundOrderDetail> FindMatchingOutboundDetails(int orderId, Dt_StockInfoDetail stockDetail, List<int> detailIds) |
| | | { |
| | | List<Dt_OutboundOrderDetail> details = _detailService.Repository.QueryData(x => |
| | | x.OrderId == orderId && |
| | | x.MaterielCode == stockDetail.MaterielCode && x.OrderQuantity - x.MoveQty > x.OverOutQuantity); |
| | | x.MaterielCode == stockDetail.MaterielCode && x.OrderQuantity - x.MoveQty > x.OverOutQuantity && detailIds.Contains(x.Id)); |
| | | |
| | | // 精确å¹é
ï¼å¤çnullå¼çæ¹æ¬¡ãä¾åºåãä»åº |
| | | List<Dt_OutboundOrderDetail> exactMatches = details.Where(x => |