| | |
| | | |
| | | _unitOfWorkManage.CommitTran(); |
| | | |
| | | return WebResponseContent.Instance.OK("忣æå", new |
| | | { |
| | | PickedQuantity = actualPickedQty, |
| | | Barcode = barcode, |
| | | MaterialCode = lockInfo.MaterielCode, |
| | | AutoSplitted = autoSplitResult != null, |
| | | RemainingStock = stockDetail.StockQuantity, |
| | | CurrentOutbound = stockDetail.OutboundQuantity, |
| | | // 妿æ¯èªå¨æå
ï¼è¿åç¸å
³ä¿¡æ¯ |
| | | UnallocatedCreated = autoSplitResult != null ? "æ¯" : "å¦" |
| | | }); |
| | | return WebResponseContent.Instance.OK("忣æå", autoSplitResult); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | |
| | | |
| | | /// <summary> |
| | | /// æ§è¡æå¨æå
é»è¾ - ä¿®å¤çæ¬ |
| | | /// æ§è¡æå¨æå
é»è¾ |
| | | /// </summary> |
| | | private async Task<List<SplitResult>> ExecuteManualSplitLogic(Dt_OutStockLockInfo lockInfo, Dt_StockInfoDetail stockDetail, |
| | | decimal splitQuantity, string palletCode) |
| | |
| | | MaterielCode = stockDetail.MaterielCode, |
| | | OrderNo = stockDetail.OrderNo, |
| | | BatchNo = stockDetail.BatchNo, |
| | | StockQuantity = newStockQuantity, // ä¿®å¤ï¼ä½¿ç¨æ£ç¡®çæå
æ°é |
| | | OutboundQuantity = 0, // æ°æ¡ç åå§åºåºæ°é为0 |
| | | StockQuantity = newStockQuantity, |
| | | OutboundQuantity = 0, |
| | | Barcode = newBarcode, |
| | | Status = (int)StockStatusEmun.åºåºéå®, |
| | | SupplyCode = stockDetail.SupplyCode, |
| | |
| | | BarcodeUnit = stockDetail.BarcodeUnit, |
| | | BusinessType = stockDetail.BusinessType, |
| | | InboundOrderRowNo = stockDetail.InboundOrderRowNo, |
| | | FactoryArea = stockDetail.FactoryArea, |
| | | WarehouseCode = stockDetail.WarehouseCode, |
| | | }; |
| | | |
| | | await _stockInfoDetailService.Db.Insertable(newStockDetail).ExecuteCommandAsync(); |
| | |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | _logger.LogError($"空箱ååºå¤±è´¥: {ex.Message}"); |
| | | return WebResponseContent.Instance.Error($"空箱ååºå¤±è´¥ï¼{ex.Message}"); |
| | | _logger.LogError($"空箱ååºExecutePalletReturn失败: {ex.Message}"); |
| | | return WebResponseContent.Instance.Error($"空箱ååºExecutePalletReturn失败ï¼{ex.Message}"); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | catch (Exception taskEx) |
| | | { |
| | | _logger.LogError($"ååºä»»å¡å建失败: {taskEx.Message}"); |
| | | _logger.LogError($"ååºä»»å¡CreateReturnTaskWithoutESSå建失败: {taskEx.Message}"); |
| | | // ä»»å¡å建失败ä¸å½±åæ°æ®ååº |
| | | } |
| | | _unitOfWorkManage.CommitTran(); |
| | |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | _logger.LogError($"ååºå¤±è´¥: {ex.Message}"); |
| | | return WebResponseContent.Instance.Error($"ååºå¤±è´¥ï¼{ex.Message}"); |
| | | _logger.LogError($"ExecutePalletReturn ååºå¤±è´¥: {ex.Message}"); |
| | | return WebResponseContent.Instance.Error($"ExecutePalletReturn ååºå¤±è´¥ï¼{ex.Message}"); |
| | | } |
| | | } |
| | | |
| | |
| | | // å建ååºä»»å¡ï¼ä¸åéESSå½ä»¤ï¼ |
| | | var returnTaskInfo = await CreateEmptyPalletReturnTask(orderNo, palletCode, emptyStockInfo, currentTask); |
| | | |
| | | return WebResponseContent.Instance.OK("空æçååºæå"); |
| | | return WebResponseContent.Instance.OK("空æçååºæå", returnTaskInfo); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _logger.LogError($"空æçååºå¤±è´¥: {ex.Message}"); |
| | | return WebResponseContent.Instance.Error($"空æçååºå¤±è´¥: {ex.Message}"); |
| | | _logger.LogError($"空æçååºå¤±è´¥ HandleEmptyPalletReturn: {ex.Message}"); |
| | | return WebResponseContent.Instance.Error($"空æçååºå¤±è´¥ HandleEmptyPalletReturn: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | /// <summary> |
| | | /// å走空箱 - ä¿®æ£çï¼æ£ç¡®å¤çæªåé
éå®è®°å½ |
| | | /// å走空箱 -æ£ç¡®å¤çæªåé
éå®è®°å½ |
| | | /// </summary> |
| | | public async Task<WebResponseContent> RemoveEmptyPallet(string orderNo, string palletCode) |
| | | { |
| | |
| | | _logger.LogInformation($"éè¦èªå¨æå
- åºå: {stockDetail.StockQuantity}, åé
: {lockInfo.AssignQuantity}, æå
æ°é: {splitQuantity}"); |
| | | |
| | | // æ§è¡èªå¨æå
|
| | | var splitResult = await ExecuteAutoSplitLogic(lockInfo, stockDetail, splitQuantity, palletCode); |
| | | |
| | | // å°æå
æ°éä¼ éç»è°ç¨æ¹ï¼ç¨äºéªè¯ |
| | | if (splitResult != null && splitResult.Any()) |
| | | { |
| | | // å¨è¿åç»æä¸æºå¸¦æå
æ°éä¿¡æ¯ |
| | | foreach (var result in splitResult) |
| | | { |
| | | result.quantityTotal = splitQuantity.ToString("F2"); |
| | | } |
| | | } |
| | | var splitResult = await ExecuteAutoSplitLogic(lockInfo, stockDetail, splitQuantity, palletCode); |
| | | |
| | | return splitResult; |
| | | } |
| | |
| | | /// ååï¼åªå离ç©çåºåï¼ä¸æ¹åå订åçä»»ä½åé
ååºåºæ°é |
| | | /// </summary> |
| | | private async Task<List<SplitResult>> ExecuteAutoSplitLogic(Dt_OutStockLockInfo lockInfo, Dt_StockInfoDetail stockDetail, |
| | | decimal splitQuantity, string palletCode) |
| | | decimal splitQuantity,string palletCode) |
| | | { |
| | | _logger.LogInformation($"å¼å§æ§è¡èªå¨æå
é»è¾ - åæ¡ç : {stockDetail.Barcode}, æå
æ°é: {splitQuantity}"); |
| | | |
| | |
| | | BarcodeUnit = stockDetail.BarcodeUnit, |
| | | BusinessType = stockDetail.BusinessType, |
| | | InboundOrderRowNo = stockDetail.InboundOrderRowNo, |
| | | FactoryArea=stockDetail.FactoryArea, |
| | | WarehouseCode = stockDetail.WarehouseCode, |
| | | }; |
| | | |
| | | await _stockInfoDetailService.Db.Insertable(newStockDetail).ExecuteCommandAsync(); |
| | |
| | | await RecordSplitHistory(lockInfo, stockDetail, splitQuantity, newBarcode, true, originalStockQty); |
| | | |
| | | // å建æå
ç»æå表 |
| | | var splitResults = CreateSplitResults(lockInfo, splitQuantity, lockInfo.AssignQuantity, newBarcode, stockDetail.Barcode); |
| | | var splitResults = CreateSplitResults(lockInfo, splitQuantity, stockDetail.StockQuantity, newBarcode, stockDetail.Barcode); |
| | | |
| | | _logger.LogInformation($"èªå¨æå
é»è¾æ§è¡å®æ - åå»ºäºæªåé
çåºååéå®è®°å½"); |
| | | |
| | |
| | | { |
| | | var splitHistory = new Dt_SplitPackageRecord |
| | | { |
| | | OrderNo = lockInfo.OrderNo, |
| | | FactoryArea = lockInfo.FactoryArea, |
| | | TaskNum = lockInfo.TaskNum, |
| | | OutStockLockInfoId = lockInfo.Id, |
| | | StockId = stockDetail.StockId, |
| | | Operator = App.User.UserName, |
| | | IsReverted = false, |
| | | OriginalBarcode = stockDetail.Barcode, |
| | | NewBarcode = newBarcode, |
| | | SplitQty = splitQty, |
| | | // RemainQuantity = remainQty, |
| | | MaterielCode = lockInfo.MaterielCode, |
| | | SplitTime = DateTime.Now, |
| | | OrderNo = lockInfo.OrderNo, |
| | | PalletCode = lockInfo.PalletCode, |
| | | |
| | | |
| | | |
| | | Status = (int)SplitPackageStatusEnum.å·²æå
, |
| | | IsAutoSplit = isAutoSplit, |
| | | // SplitType = isAutoSplit ? "èªå¨æå
" : "æå¨æå
" |
| | | OriginalStockQuantity = originalStockQuantity ?? stockDetail.StockQuantity, |
| | | //RemainingStockQuantity = stockDetail.StockQuantity - splitQty |
| | | TaskNum = lockInfo.TaskNum |
| | | |
| | | }; |
| | | |
| | | await _splitPackageService.Db.Insertable(splitHistory).ExecuteCommandAsync(); |