| | |
| | | |
| | | return ValidationResult<bool>.Success(true); |
| | | } |
| | | |
| | | |
| | | private async Task<PickingResult> ExecutePickingLogic( |
| | | Dt_OutStockLockInfo lockInfo, Dt_OutboundOrderDetail orderDetail, Dt_StockInfoDetail stockDetail, |
| | | string orderNo, string palletCode, string barcode, decimal actualQty) |
| | | Dt_OutStockLockInfo lockInfo, Dt_OutboundOrderDetail orderDetail, Dt_StockInfoDetail stockDetail, |
| | | string orderNo, string palletCode, string barcode, decimal actualQty) |
| | | { |
| | | decimal stockQuantity = stockDetail.StockQuantity; |
| | | var result = new PickingResult |
| | |
| | | ActualPickedQty = actualQty |
| | | }; |
| | | |
| | | decimal finalPickedQty = actualQty; |
| | | |
| | | if (actualQty < stockQuantity) |
| | | { |
| | | // æå
åºæ¯ |
| | | await HandleSplitPacking(lockInfo, stockDetail, actualQty, stockQuantity, result); |
| | | finalPickedQty = actualQty; |
| | | } |
| | | else if (actualQty == stockQuantity) |
| | | { |
| | | // æ´å
æ£é |
| | | await HandleFullPicking(lockInfo, stockDetail, actualQty, result); |
| | | finalPickedQty = actualQty; |
| | | } |
| | | else |
| | | { |
| | | // é¨åæ£éï¼åºåä¸è¶³ï¼ |
| | | await HandlePartialPicking(lockInfo, stockDetail, actualQty, stockQuantity, result); |
| | | finalPickedQty = result.ActualPickedQty; // å¯è½è¢«è°æ´ |
| | | } |
| | | |
| | | // ç»ä¸æ´æ°è®¢åæ°æ®ï¼ææåæ¯é½ä»è¿éæ´æ°ï¼ |
| | | await UpdateOrderRelatedData(lockInfo.OrderDetailId, finalPickedQty, orderNo); |
| | | |
| | | return result; |
| | | } |
| | |
| | | result.FinalBarcode = newBarcode; |
| | | result.SplitResults.AddRange(CreateSplitResults(lockInfo, actualQty, remainingStockQty, newBarcode, stockDetail.Barcode)); |
| | | |
| | | await UpdateOrderRelatedData(lockInfo.OrderDetailId, actualQty, lockInfo.OrderNo); |
| | | |
| | | |
| | | _logger.LogInformation($"æå
åæ£æ´æ°è®¢åæç» - OrderDetailId: {lockInfo.OrderDetailId}, 忣æ°é: {actualQty}"); |
| | | } |
| | | |