| | |
| | | if (lockInfo.PalletCode != palletCode) |
| | | throw new Exception($"æ¡ç {barcode}ä¸å±äºæç{palletCode}"); |
| | | |
| | | var outorderdetail = _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>().First(x => x.Id == lockInfo.OrderDetailId); |
| | | if (outorderdetail != null && lockInfo.AssignQuantity > outorderdetail.OrderQuantity) |
| | | { |
| | | throw new Exception($"æ¡ç {barcode}çåºåºæ°é大äºè®¢åçæ°é"); |
| | | } |
| | | |
| | | var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>() |
| | | .Where(x => x.Barcode == barcode && x.StockId == lockInfo.StockId) |
| | | .FirstAsync(); |
| | |
| | | private async Task CheckAndUpdateOrderStatus(string orderNo) |
| | | { |
| | | |
| | | var orderDetails = _stockInfoDetailService.Db.Queryable<Dt_OutboundOrderDetail>() |
| | | .LeftJoin<Dt_OutboundOrder>((o, item) => o.OrderId == item.Id) // å
³èæ¡ä»¶ï¼ç¶è¡¨ Id = å表 OrderId |
| | | .Where((o, item) => item.OrderNo == orderNo) // è¿æ»¤ç¶è¡¨ OrderNo |
| | | .Select((o, item) => o) // åªè¿ååè¡¨æ°æ® |
| | | .ToList(); |
| | | |
| | | var orderDetails = await _stockInfoDetailService.Db.Queryable<Dt_OutboundOrderDetail>() |
| | | .Where(x => x.OrderId == orderNo.ObjToInt()) |
| | | .ToListAsync(); |
| | | //var orderDetails = await _stockInfoDetailService.Db.Queryable<Dt_OutboundOrderDetail>() |
| | | // .Where(x => x.OrderId == orderNo.ObjToInt()) |
| | | // .ToListAsync(); |
| | | |
| | | bool allCompleted = true; |
| | | foreach (var detail in orderDetails) |
| | |
| | | .SetColumns(x => x.OrderStatus == 2) // 已宿 |
| | | .Where(x => x.OrderNo == orderNo) |
| | | .ExecuteCommandAsync(); |
| | | |
| | | //åä¼ MES |
| | | } |
| | | } |
| | | |
| | |
| | | /// <summary> |
| | | /// ååºæä½ |
| | | /// </summary> |
| | | //public async Task<WebResponseContent> ReturnRemaining(string orderNo, string palletCode, string reason) |
| | | //{ |
| | | // try |
| | | // { |
| | | // // 1. è·åæææªåæ£çåºåºéå®è®°å½ï¼å
æ¬æå
产ççè®°å½ |
| | | // var remainingLocks = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>() |
| | | // .Where(it => it.OrderNo == orderNo && it.Status == 1) |
| | | // .ToListAsync(); |
| | | |
| | | // if (!remainingLocks.Any()) |
| | | // { |
| | | // return WebResponseContent.Instance.Error("没æéè¦ååºçå©ä½è´§ç©"); |
| | | // } |
| | | // var tasks = new List<Dt_Task>(); |
| | | // // ææçåç» |
| | | // var palletGroups = remainingLocks.GroupBy(x => x.PalletCode); |
| | | // //æ¥è¯¢ä»»å¡è¡¨ |
| | | // var task = _taskRepository.QueryData(x => x.TaskNum == remainingLocks.First().TaskNum).FirstOrDefault(); |
| | | // foreach (var group in palletGroups) |
| | | // { |
| | | // if (group.Key == palletCode) |
| | | // { |
| | | // var totalReturnQty = group.Sum(x => x.AssignQuantity - x.PickedQty); |
| | | |
| | | // if (totalReturnQty <= 0) continue; |
| | | |
| | | // // åé
æ°è´§ä½ |
| | | // var newLocation = _locationInfoService.AssignLocation(); |
| | | |
| | | // // æ´æ°åºåºéå®è®°å½ç¶æ |
| | | // var lockIds = group.Where(x => x.PalletCode == palletCode).Select(x => x.Id).ToList(); |
| | | // await _outStockLockInfoService.Db.Updateable<Dt_OutStockLockInfo>() |
| | | // .SetColumns(it => new Dt_OutStockLockInfo { Status = OutLockStockStatusEnum.ååºä¸.ObjToInt() }) |
| | | // .Where(it => lockIds.Contains(it.Id)) |
| | | // .ExecuteCommandAsync(); |
| | | |
| | | // // æ´æ°æå
æ¡ç è®°å½ç¶æ |
| | | // var splitBarcodes = await _splitPackageService.Db.Queryable<Dt_SplitPackageRecord>() |
| | | // .Where(it => lockIds.Contains(it.OutStockLockInfoId)) |
| | | // .ToListAsync(); |
| | | |
| | | // foreach (var splitBarcode in splitBarcodes) |
| | | // { |
| | | // splitBarcode.Status = 3; |
| | | // await _splitPackageService.Db.Updateable(splitBarcode).ExecuteCommandAsync(); |
| | | // } |
| | | |
| | | // foreach (var lockInfo in group) |
| | | // { |
| | | // if (lockInfo.PalletCode == palletCode) |
| | | // { |
| | | // decimal returnQty = lockInfo.AssignQuantity - lockInfo.PickedQty; |
| | | |
| | | // // æ£æ¥åºåè®°å½æ¯å¦åå¨ |
| | | // var existingStock = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>() |
| | | // .Where(it => it.Barcode == lockInfo.CurrentBarcode && it.StockId == lockInfo.StockId) |
| | | // .FirstAsync(); |
| | | |
| | | // if (existingStock != null) |
| | | // { |
| | | // // åºåè®°å½åå¨ï¼æ¢å¤é宿°é |
| | | // await _stockInfoDetailService.Db.Updateable<Dt_StockInfoDetail>() |
| | | // .SetColumns(it => new Dt_StockInfoDetail |
| | | // { |
| | | // OutboundQuantity = it.OutboundQuantity - returnQty |
| | | // }) |
| | | // .Where(it => it.Barcode == lockInfo.CurrentBarcode && it.StockId == lockInfo.StockId) |
| | | // .ExecuteCommandAsync(); |
| | | // } |
| | | // else |
| | | // { |
| | | // // åºåè®°å½ä¸åå¨ï¼å¯è½æ¯æå
产ççæ°æ¡ç ï¼ï¼å建æ°çåºåè®°å½ |
| | | // var newStockDetail = new Dt_StockInfoDetail |
| | | // { |
| | | // StockId = lockInfo.StockId, |
| | | // MaterielCode = lockInfo.MaterielCode, |
| | | // OrderNo = lockInfo.OrderNo, |
| | | // BatchNo = lockInfo.BatchNo, |
| | | // StockQuantity = returnQty, // å®é
åºåæ°é |
| | | // OutboundQuantity = 0, // ååºåä¸åéå® |
| | | // Barcode = lockInfo.CurrentBarcode, |
| | | // InboundOrderRowNo = "0", |
| | | // Status = StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt(), |
| | | |
| | | // }; |
| | | // await _stockInfoDetailService.Db.Insertable(newStockDetail).ExecuteCommandAsync(); |
| | | // } |
| | | // } |
| | | // } |
| | | |
| | | |
| | | // Dt_Task newtask = new() |
| | | // { |
| | | // CurrentAddress = stations[task.TargetAddress], |
| | | // Grade = 0, |
| | | // PalletCode = palletCode, |
| | | // NextAddress = "", |
| | | // OrderNo= task.OrderNo, |
| | | // Roadway = newLocation.RoadwayNo, |
| | | // SourceAddress = stations[task.TargetAddress], |
| | | // TargetAddress = newLocation.LocationCode, |
| | | // TaskStatus = TaskStatusEnum.New.ObjToInt(), |
| | | // TaskType = TaskTypeEnum.InPick.ObjToInt(), |
| | | // // TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), |
| | | // PalletType = task.PalletType, |
| | | // WarehouseId = task.WarehouseId, |
| | | // }; |
| | | // tasks.Add(newtask); |
| | | |
| | | // } |
| | | // } |
| | | // try |
| | | // { |
| | | // await _taskRepository.Db.Insertable(tasks).ExecuteCommandAsync(); |
| | | // //å é¤ åºåºç task |
| | | |
| | | |
| | | // //ç» ess æµå¨ä¿¡å· ååå»ºä»»å¡ |
| | | |
| | | |
| | | // } |
| | | // catch (Exception ex) |
| | | // { |
| | | |
| | | // } |
| | | |
| | | |
| | | |
| | | |
| | | // return WebResponseContent.Instance.OK(); |
| | | // } |
| | | // catch (Exception ex) |
| | | // { |
| | | // return WebResponseContent.Instance.Error($"ååºæä½å¤±è´¥: {ex.Message}"); |
| | | // } |
| | | //} |
| | | |
| | | |
| | | public async Task<WebResponseContent> ReturnRemaining(string orderNo, string palletCode, string reason) |
| | | { |
| | | try |
| | | { |
| | | // 1. è·åæææªåæ£çåºåºéå®è®°å½ï¼å
æ¬æå
产ççè®°å½ |
| | | // è·åæææªåæ£çåºåºéå®è®°å½ï¼å
æ¬æå
产ççè®°å½ |
| | | var remainingLocks = await _outStockLockInfoService.Db.Queryable<Dt_OutStockLockInfo>() |
| | | .Where(it => it.OrderNo == orderNo && it.Status == 1) |
| | | .ToListAsync(); |
| | | |
| | | var stockinfo = _stockInfoService.Db.Queryable<Dt_StockInfo>().First(x => x.PalletCode == palletCode); |
| | | |
| | | // 2. æ£æ¥æç䏿¯å¦æå
¶ä»éåºåºè´§ç©ï¼åºåè´§ç©ï¼ |
| | | var palletStockGoods = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>() |
| | | .Where(it => it.StockId == stockinfo.Id && it.Status == StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt()) |
| | | .Where(it => it.OutboundQuantity == 0 || it.OutboundQuantity < it.StockQuantity) // æªå®å
¨åºåºç |
| | | .ToListAsync(); |
| | | |
| | | // 3. å¦ææ²¡æéè¦ååºçè´§ç©ï¼æ¢æ æªåæ£åºåºè´§ç©ï¼ä¹æ å
¶ä»åºåè´§ç©ï¼ |
| | | if (!remainingLocks.Any() && !palletStockGoods.Any()) |
| | | { |
| | | return WebResponseContent.Instance.Error("没æéè¦ååºçå©ä½è´§ç©"); |
| | | } |
| | | |
| | | var tasks = new List<Dt_Task>(); |
| | | |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error("æªæ¾å°å¯¹åºçä»»å¡ä¿¡æ¯"); |
| | | } |
| | | |
| | | // æ£æ¥æç䏿¯å¦æå
¶ä»éåºåºè´§ç©ï¼åºåè´§ç©ï¼ |
| | | var palletStockGoods = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>() |
| | | .Where(it => it.StockId == stockinfo.Id &&( it.Status == StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt() || it.Status == StockStatusEmun.å
¥åºå®æ.ObjToInt())) |
| | | .Where(it => it.OutboundQuantity == 0 || it.OutboundQuantity < it.StockQuantity) // æªå®å
¨åºåºç |
| | | .ToListAsync(); |
| | | |
| | | // å¦ææ²¡æéè¦ååºçè´§ç©ï¼æ¢æ æªåæ£åºåºè´§ç©ï¼ä¹æ å
¶ä»åºåè´§ç©ï¼ |
| | | if (!remainingLocks.Any() && !palletStockGoods.Any()) |
| | | { |
| | | //æ¯å¦èªå¨ååºï¼æä¹ååºåºçä»»å¡å é¤ï¼ç¶åç»ä¸ªç©ºçå
¥åºã |
| | | return WebResponseContent.Instance.Error("没æéè¦ååºçå©ä½è´§ç©"); |
| | | } |
| | | |
| | | |
| | | var firstlocation = _locationInfoService.Db.Queryable<Dt_LocationInfo>().First(x => x.LocationCode == task.SourceAddress); |
| | | decimal totalReturnQty = 0; |
| | | var hasRemainingLocks = remainingLocks.Any(x => x.PalletCode == palletCode); |
| | |
| | | var stockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>() |
| | | .Where(x => x.Barcode == barcode && x.StockId == outStockInfo.StockId) |
| | | .FirstAsync(); |
| | | |
| | | |
| | | stockDetail.StockQuantity += outStockInfo.AssignQuantity; |
| | | stockDetail.OutboundQuantity += outStockInfo.AssignQuantity; |
| | | await _stockInfoDetailService.Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | |
| | | |
| | | |
| | | // è¿ååºåºåæç» |
| | | var orderDetail = await _outboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>() |
| | |
| | | .FirstAsync(); |
| | | |
| | | orderDetail.OverOutQuantity -= outStockInfo.AssignQuantity; |
| | | orderDetail.PickedQty = 0; |
| | | await _outboundOrderDetailService.Db.Updateable(orderDetail).ExecuteCommandAsync(); |
| | | |
| | | // å 餿£éåå² |