| | |
| | | SupplyCode = stockDetail.SupplyCode, |
| | | WarehouseCode = stockDetail.WarehouseCode, |
| | | BarcodeQty = stockDetail.BarcodeQty, |
| | | BarcodeUnit = stockDetail.Barcode, |
| | | BarcodeUnit = stockDetail.BarcodeUnit, |
| | | BusinessType = stockDetail.BusinessType, |
| | | Unit = stockDetail.Unit, |
| | | StockId = lockInfo.StockId, |
| | |
| | | } |
| | | } |
| | | |
| | | // æ¤éæå
|
| | | |
| | | //public async Task<WebResponseContent> RevertSplitPackage(string originalBarcode) |
| | | //{ |
| | | // try |
| | | // { |
| | | // _unitOfWorkManage.BeginTran(); |
| | | |
| | | // // 1. æ¥æ¾æè¿çæªæ¤éæå
è®°å½ |
| | | // var splitRecord = await Db.Queryable<Dt_SplitPackageRecord>() |
| | | // .Where(x => x.OriginalBarcode == originalBarcode && !x.IsReverted) |
| | | // .OrderByDescending(x => x.SplitTime) |
| | | // .FirstAsync(); |
| | | |
| | | // if (splitRecord == null) |
| | | // return WebResponseContent.Instance.Error("æªæ¾å°å¯æ¤éçæå
è®°å½"); |
| | | |
| | | // // 2. æ£æ¥æ°æ¡ç æ¯å¦å·²æ£é |
| | | // var newLockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>() |
| | | // .Where(x => x.CurrentBarcode == splitRecord.NewBarcode) |
| | | // .FirstAsync(); |
| | | |
| | | // if (newLockInfo?.Status ==6) // åè®¾ç¶æ2表示已æ£é |
| | | // return WebResponseContent.Instance.Error("æ°æ¡ç å·²æ£éï¼æ æ³æ¤éæå
"); |
| | | |
| | | // // 3. è·ååæ¡ç çéå®ä¿¡æ¯ |
| | | // var originalLockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>() |
| | | // .Where(x => x.CurrentBarcode == originalBarcode) |
| | | // .FirstAsync(); |
| | | |
| | | // if (originalLockInfo == null) |
| | | // return WebResponseContent.Instance.Error("æªæ¾å°åæ¡ç éå®ä¿¡æ¯"); |
| | | |
| | | |
| | | // originalLockInfo.AssignQuantity += splitRecord.RemainQuantity; |
| | | // // originalLockInfo.Status = (int)OutLockStockStatusEnum.åºåºä¸; |
| | | // originalLockInfo.IsSplitted = 0; // æ è®°ä¸ºæªæå
|
| | | // await _outStockLockInfoService.Db.Updateable(originalLockInfo).ExecuteCommandAsync(); |
| | | |
| | | // // 5. è¿ååæ¡ç åºåè®°å½ |
| | | // var originalStockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>() |
| | | // .Where(x => x.Barcode == originalBarcode && x.StockId == splitRecord.StockId) |
| | | // .FirstAsync(); |
| | | |
| | | // if (originalStockDetail != null) |
| | | // { |
| | | // // å°æåºçæ°éå åå°åæ¡ç åºå |
| | | // originalStockDetail.StockQuantity += splitRecord.RemainQuantity; |
| | | // originalStockDetail.OutboundQuantity += splitRecord.RemainQuantity; |
| | | // await _stockInfoDetailService.Db.Updateable(originalStockDetail).ExecuteCommandAsync(); |
| | | // } |
| | | |
| | | // // 6. å 餿°æ¡ç çéå®ä¿¡æ¯ |
| | | // if (newLockInfo != null) |
| | | // { |
| | | // await _outStockLockInfoService.Db.Deleteable<Dt_OutStockLockInfo>() |
| | | // .Where(x => x.CurrentBarcode == splitRecord.NewBarcode) |
| | | // .ExecuteCommandAsync(); |
| | | // } |
| | | |
| | | // // 7. å 餿°æ¡ç çåºåè®°å½ |
| | | // var newStockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>() |
| | | // .Where(x => x.Barcode == splitRecord.NewBarcode) |
| | | // .FirstAsync(); |
| | | |
| | | // if (newStockDetail != null) |
| | | // { |
| | | // await _stockInfoDetailService.Db.Deleteable<Dt_StockInfoDetail>() |
| | | // .Where(x => x.Barcode == splitRecord.NewBarcode) |
| | | // .ExecuteCommandAsync(); |
| | | // } |
| | | |
| | | // // 8. æ´æ°æå
è®°å½ä¸ºå·²æ¤é |
| | | // splitRecord.IsReverted = true; |
| | | |
| | | // await Db.Updateable(splitRecord).ExecuteCommandAsync(); |
| | | |
| | | // _unitOfWorkManage.CommitTran(); |
| | | |
| | | // return WebResponseContent.Instance.OK($"æ¤éæå
æåï¼è¿åæ°éï¼{splitRecord.SplitQty}"); |
| | | |
| | | // } |
| | | // catch (Exception ex) |
| | | // { |
| | | // _unitOfWorkManage.RollbackTran(); |
| | | // return WebResponseContent.Instance.Error($"æ¤éæå
失败ï¼{ex.Message}"); |
| | | // } |
| | | //} |
| | | |
| | | public async Task<WebResponseContent> RevertSplitPackage(string originalBarcode) |
| | | { |
| | | try |
| | | { |
| | | _unitOfWorkManage.BeginTran(); |
| | | // æ¥æ¾æè¿çæªæ¤éæå
è®°å½ |
| | | var splitPackage = await Db.Queryable<Dt_SplitPackageRecord>() |
| | | |
| | | // 1. æ¥æ¾æææªæ¤éçæå
è®°å½ |
| | | var splitRecords = await Db.Queryable<Dt_SplitPackageRecord>() |
| | | .Where(x => x.OriginalBarcode == originalBarcode && !x.IsReverted) |
| | | .OrderByDescending(x => x.CreateDate) |
| | | .FirstAsync(); |
| | | .OrderBy(x => x.SplitTime) // ææ¶é´æ£åºï¼ä»ææ©å¼å§æ¤é |
| | | .ToListAsync(); |
| | | |
| | | if (splitPackage == null) |
| | | return WebResponseContent.Instance.Error("æªæ¾å°æå
è®°å½"); |
| | | if (splitRecords == null || !splitRecords.Any()) |
| | | return WebResponseContent.Instance.Error("æªæ¾å°å¯æ¤éçæå
è®°å½"); |
| | | |
| | | // æ£æ¥æ°æ¡ç æ¯å¦å·²æ£é |
| | | var newOutStockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>() |
| | | .Where(x => x.CurrentBarcode == splitPackage.NewBarcode) |
| | | .FirstAsync(); |
| | | // 2. æ£æ¥æææ°æ¡ç æ¯å¦å·²æ£é |
| | | var newBarcodes = splitRecords.Select(x => x.NewBarcode).ToList(); |
| | | var newLockInfos = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>() |
| | | .Where(x => newBarcodes.Contains(x.CurrentBarcode)) |
| | | .ToListAsync(); |
| | | |
| | | if (newOutStockInfo.Status == 2) |
| | | return WebResponseContent.Instance.Error("æ°æ¡ç å·²æ£éï¼æ æ³æ¤éæå
"); |
| | | var pickedBarcodes = newLockInfos.Where(x => x.Status == 2).Select(x => x.CurrentBarcode).ToList(); |
| | | if (pickedBarcodes.Any()) |
| | | return WebResponseContent.Instance.Error($"以䏿¡ç å·²æ£éï¼æ æ³æ¤éï¼{string.Join(",", pickedBarcodes)}"); |
| | | |
| | | // è¿åååºåºè¯¦æ
æ°é |
| | | var originalOutStockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>() |
| | | // 3. è·ååæ¡ç ä¿¡æ¯ |
| | | var originalLockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>() |
| | | .Where(x => x.CurrentBarcode == originalBarcode) |
| | | .FirstAsync(); |
| | | |
| | | originalOutStockInfo.AssignQuantity += splitPackage.SplitQty; |
| | | await _outStockLockInfoService.Db.Updateable(originalOutStockInfo).ExecuteCommandAsync(); |
| | | if (originalLockInfo == null) |
| | | return WebResponseContent.Instance.Error("æªæ¾å°åæ¡ç éå®ä¿¡æ¯"); |
| | | |
| | | // å 餿°åºåºè¯¦æ
è®°å½ |
| | | var originalStockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>() |
| | | .Where(x => x.Barcode == originalBarcode && x.StockId == originalLockInfo.StockId) |
| | | .FirstAsync(); |
| | | |
| | | // 4. è·åæææ°æ¡ç çåºåè®°å½ |
| | | var newStockDetails = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>() |
| | | .Where(x => newBarcodes.Contains(x.Barcode)) |
| | | .ToListAsync(); |
| | | |
| | | // 5. è®¡ç®æ»è¿åæ°é |
| | | decimal totalRevertQty = newStockDetails.Sum(x => x.StockQuantity); |
| | | |
| | | // 6. è¿ååæ¡ç åºåè®°å½ |
| | | if (originalStockDetail != null) |
| | | { |
| | | // åæ¡ç å½åæ°éå ä¸æææ°æ¡ç çæ°é |
| | | originalStockDetail.StockQuantity += totalRevertQty; |
| | | originalStockDetail.OutboundQuantity += totalRevertQty; |
| | | await _stockInfoDetailService.Db.Updateable(originalStockDetail).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | // 7. è¿ååæ¡ç éå®ä¿¡æ¯ |
| | | decimal totalAssignQty = newLockInfos.Sum(x => x.AssignQuantity); |
| | | originalLockInfo.AssignQuantity += totalAssignQty; |
| | | if (originalLockInfo.OrderQuantity < originalLockInfo.AssignQuantity) |
| | | { |
| | | originalLockInfo.AssignQuantity=originalLockInfo.OrderQuantity; |
| | | } |
| | | originalLockInfo.Status = (int)OutLockStockStatusEnum.åºåºä¸; |
| | | originalLockInfo.IsSplitted = 0; |
| | | await _outStockLockInfoService.Db.Updateable(originalLockInfo).ExecuteCommandAsync(); |
| | | |
| | | // 8. å é¤æææ°æ¡ç çéå®ä¿¡æ¯ |
| | | await _outStockLockInfoService.Db.Deleteable<Dt_OutStockLockInfo>() |
| | | .Where(x => x.CurrentBarcode == splitPackage.NewBarcode) |
| | | .Where(x => newBarcodes.Contains(x.CurrentBarcode)) |
| | | .ExecuteCommandAsync(); |
| | | |
| | | // æ è®°æå
è®°å½ä¸ºå·²æ¤é |
| | | splitPackage.IsReverted = true; |
| | | await Db.Updateable(splitPackage).ExecuteCommandAsync(); |
| | | // 9. å é¤æææ°æ¡ç çåºåè®°å½ |
| | | await _stockInfoDetailService.Db.Deleteable<Dt_StockInfoDetail>() |
| | | .Where(x => newBarcodes.Contains(x.Barcode)) |
| | | .ExecuteCommandAsync(); |
| | | |
| | | // 10. æ è®°æææå
è®°å½ä¸ºå·²æ¤é |
| | | foreach (var record in splitRecords) |
| | | { |
| | | record.IsReverted = true; |
| | | |
| | | } |
| | | await Db.Updateable(splitRecords).ExecuteCommandAsync(); |
| | | |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK("æ¤éæå
æå"); |
| | | |
| | | return WebResponseContent.Instance.OK($"æ¤éæå
æåï¼å
±è¿å{splitRecords.Count}次æå
ï¼æ»æ°éï¼{totalRevertQty}"); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | |
| | | return WebResponseContent.Instance.Error($"æ¤éæå
失败ï¼{ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | // è·åæå
ä¿¡æ¯ |
| | | public async Task<WebResponseContent> GetSplitPackageInfo(string orderNo, string palletCode, string barcode) |
| | | { |