| | |
| | | using System; |
| | | using Microsoft.AspNetCore.Http; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | |
| | | /// <summary> |
| | | /// æå
æç®±æä½ |
| | | /// </summary> |
| | | public async Task<WebResponseContent> SplitPackage(SplitPackageRequest request) |
| | | public async Task<WebResponseContent> SplitPackage(SplitPackageDto request) |
| | | { |
| | | try |
| | | { |
| | | _unitOfWorkManage.BeginTran(); |
| | | |
| | | // 1. éªè¯åºåºéå®ä¿¡æ¯ |
| | | var lockInfo = await Db.Queryable<Dt_OutStockLockInfo>() |
| | | .Where(x => x.Id == request.OutStockLockInfoId && |
| | | x.Status == (int)OutLockStockStatusEnum.åºåºä¸) |
| | | var lockInfo = await _stockInfoDetailService.Db.Queryable<Dt_OutStockLockInfo>() |
| | | .Where(x => x.OrderNo == request.OrderNo && |
| | | x.PalletCode == request.PalletCode && |
| | | x.CurrentBarcode == request.OriginalBarcode && |
| | | x.Status == 0) |
| | | .FirstAsync(); |
| | | |
| | | if (lockInfo == null) |
| | | return WebResponseContent.Instance.Error("æªæ¾å°ææçåºåºéå®ä¿¡æ¯"); |
| | | |
| | | //// 2. éªè¯å½åæ¡ç çå¯ç¨æ°é |
| | | //var currentStockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>() |
| | | // .Where(x => x.Barcode == lockInfo.CurrentBarcode && |
| | | // x.MaterielCode == request.MaterielCode && |
| | | // x.StockId == lockInfo.StockId) |
| | | // .FirstAsync(); |
| | | |
| | | //if (currentStockDetail == null) |
| | | // return WebResponseContent.Instance.Error("å½åæ¡ç å¨åºåä¸ä¸åå¨"); |
| | | |
| | | //// 3. æ£æ¥å¯ç¨æ°é |
| | | //decimal availableQuantity = currentStockDetail.StockQuantity - currentStockDetail.OutboundQuantity; |
| | | //if (request.SplitQuantity > availableQuantity) |
| | | // return WebResponseContent.Instance.Error($"æå
æ°éä¸è½å¤§äºå¯ç¨æ°éï¼å¯ç¨æ°éï¼{availableQuantity}"); |
| | | |
| | | |
| | | // 2. æ£æ¥å©ä½é宿°é |
| | | decimal remainingLockQuantity = lockInfo.AssignQuantity - lockInfo.PickedQty; |
| | | if (request.SplitQuantity > remainingLockQuantity) |
| | | return WebResponseContent.Instance.Error($"æå
æ°éä¸è½å¤§äºå©ä½é宿°éï¼å©ä½ï¼{remainingLockQuantity}"); |
| | | |
| | | var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>() |
| | | .Where(x => x.Barcode == request.OriginalBarcode) |
| | | .FirstAsync(); |
| | | |
| | | // 3. çææ°æ¡ç |
| | | string newBarcode = ""; |
| | |
| | | OriginalBarcode = lockInfo.CurrentBarcode, |
| | | NewBarcode = newBarcode, |
| | | SplitQty = request.SplitQuantity, |
| | | MaterielCode = request.MaterielCode, |
| | | RemainQuantity = lockInfo.RemainQuantity - request.SplitQuantity, |
| | | MaterielCode = lockInfo.MaterielCode, |
| | | SplitTime = DateTime.Now, |
| | | Operator = request.Operator, |
| | | OrderNo = request.OrderNo, |
| | | PalletCode = request.PalletCode, |
| | | Status = (int)SplitPackageStatusEnum.å·²æå
|
| | | }; |
| | | await Db.Insertable(splitHistory).ExecuteCommandAsync(); |
| | |
| | | } |
| | | } |
| | | |
| | | // æ¤éæå
|
| | | public async Task<WebResponseContent> RevertSplitPackage(string originalBarcode) |
| | | { |
| | | try |
| | | { |
| | | _unitOfWorkManage.BeginTran(); |
| | | // æ¥æ¾æè¿çæªæ¤éæå
è®°å½ |
| | | var splitPackage = await Db.Queryable<Dt_SplitPackageRecord>() |
| | | .Where(x => x.OriginalBarcode == originalBarcode && !x.IsReverted) |
| | | .OrderByDescending(x => x.CreateDate) |
| | | .FirstAsync(); |
| | | |
| | | if (splitPackage == null) |
| | | return WebResponseContent.Instance.Error("æªæ¾å°æå
è®°å½"); |
| | | |
| | | // æ£æ¥æ°æ¡ç æ¯å¦å·²æ£é |
| | | var newOutStockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>() |
| | | .Where(x => x.CurrentBarcode == splitPackage.NewBarcode) |
| | | .FirstAsync(); |
| | | |
| | | if (newOutStockInfo.Status == 1) |
| | | return WebResponseContent.Instance.Error("æ°æ¡ç å·²æ£éï¼æ æ³æ¤éæå
"); |
| | | |
| | | // è¿åååºåºè¯¦æ
æ°é |
| | | var originalOutStockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>() |
| | | .Where(x => x.CurrentBarcode == originalBarcode) |
| | | .FirstAsync(); |
| | | |
| | | originalOutStockInfo.AssignQuantity += splitPackage.SplitQty; |
| | | await _outStockLockInfoService.Db.Updateable(originalOutStockInfo).ExecuteCommandAsync(); |
| | | |
| | | // å 餿°åºåºè¯¦æ
è®°å½ |
| | | await _outStockLockInfoService.Db.Deleteable<Dt_OutStockLockInfo>() |
| | | .Where(x => x.CurrentBarcode == splitPackage.NewBarcode) |
| | | .ExecuteCommandAsync(); |
| | | |
| | | // æ è®°æå
è®°å½ä¸ºå·²æ¤é |
| | | splitPackage.IsReverted = true; |
| | | await Db.Updateable(splitPackage).ExecuteCommandAsync(); |
| | | |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK("æ¤éæå
æå"); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æ¤éæå
失败ï¼{ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | // è·åæå
ä¿¡æ¯ |
| | | public async Task< WebResponseContent > GetSplitPackageInfo(string orderNo, string palletCode, string barcode) |
| | | { |
| | | var outStockInfo = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>() |
| | | .Where(x => x.OrderNo == orderNo && |
| | | x.PalletCode == palletCode && |
| | | x.CurrentBarcode == barcode && |
| | | x.Status == 0) |
| | | .FirstAsync(); |
| | | |
| | | if (outStockInfo == null) |
| | | return WebResponseContent.Instance .Error("æªæ¾å°å¯¹åºçåºåºä¿¡æ¯"); |
| | | |
| | | var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>() |
| | | .Where(x => x.Barcode == barcode) |
| | | .FirstAsync(); |
| | | |
| | | return WebResponseContent.Instance .OK("",new |
| | | { |
| | | MaterielCode = outStockInfo.MaterielCode, |
| | | RemainQuantity = outStockInfo.RemainQuantity, |
| | | Unit = "个" // æ ¹æ®å®é
æ
åµè·ååä½ |
| | | }); |
| | | } |
| | | /// <summary> |
| | | /// è·å坿å
çåºåºéå®ä¿¡æ¯ |
| | | /// </summary> |