| | |
| | | stockInfo.StockStatus = StockStatusEmun.å
¥åºå®æ.ObjToInt(); |
| | | stockInfo.Details.ForEach(x => |
| | | { |
| | | x.Status = StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt(); |
| | | x.Status = inboundOrders.FirstOrDefault().CreateType == (int)OrderCreateTypeEnum.CreateInSystem ? StockStatusEmun.å
¥åºå®æ.ObjToInt():StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt(); |
| | | }); |
| | | _stockService.StockInfoService.Repository.UpdateData(stockInfo); |
| | | _stockService.StockInfoDetailService.Repository.UpdateData(stockInfo.Details); |
| | |
| | | return await Task.FromResult(WebResponseContent.Instance.Error($"ç§»åºä»»å¡å¤ç失败ï¼{ex.Message}")); |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// è·¨åºåç§»åºä»»å¡å®æ |
| | | /// </summary> |
| | | /// <param name="task"></param> |
| | | /// <returns></returns> |
| | | public async Task<WebResponseContent> CrossAreaRelocationTaskCompleted(Dt_Task task) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | if (task == null || string.IsNullOrEmpty(task.PalletCode) || string.IsNullOrEmpty(task.TargetAddress)) |
| | | { |
| | | return WebResponseContent.Instance.Error("è·¨åºåç§»åºä»»å¡ä¿¡æ¯ä¸å®æ´ï¼æçå·/ç®æ è´§ä½ä¸ºç©ºï¼"); |
| | | } |
| | | |
| | | // 2. æ¥è¯¢æçåºåä¿¡æ¯ |
| | | Dt_StockInfo stockInfo = await _stockRepository.Db.Queryable<Dt_StockInfo>() |
| | | .Includes(x => x.Details) |
| | | .Where(x => x.PalletCode == task.PalletCode) |
| | | .FirstAsync(); |
| | | |
| | | if (stockInfo == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°æç[{task.PalletCode}]对åºçåºåä¿¡æ¯"); |
| | | } |
| | | |
| | | // é空æçå¿
é¡»ææç» |
| | | if (stockInfo.Details.Count == 0 && stockInfo.PalletType != PalletTypeEnum.Empty.ObjToInt()) |
| | | { |
| | | _logger.LogInformation($"CrossAreaRelocationTaskCompleted: æªæ¾å°è¯¥æçåºåæç»ä¿¡æ¯.{task.TaskNum}"); |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥æç[{task.PalletCode}]åºåæç»ä¿¡æ¯"); |
| | | } |
| | | |
| | | // 3. æ¥è¯¢ç®æ è´§ä½ + åè´§ä½ä¿¡æ¯ |
| | | Dt_LocationInfo targetLocationInfo = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); |
| | | if (targetLocationInfo == null) |
| | | { |
| | | return content.Error($"æªæ¾å°å¯¹åºçç»ç¹è´§ä½[{task.TargetAddress}]ä¿¡æ¯"); |
| | | } |
| | | |
| | | // åè´§ä½ä¿¡æ¯ |
| | | Dt_LocationInfo oldLocationInfo = null; |
| | | if (!string.IsNullOrEmpty(stockInfo.LocationCode)) |
| | | { |
| | | oldLocationInfo = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode); |
| | | if (oldLocationInfo == null) |
| | | { |
| | | return content.Error($"æªæ¾å°åè´§ä½[{stockInfo.LocationCode}]ä¿¡æ¯"); |
| | | } |
| | | } |
| | | |
| | | // 4. è´§ä½ç¶ææ ¡éª |
| | | if (targetLocationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error($"ç®æ è´§ä½[{task.TargetAddress}]ç¶æä¸æ£ç¡®ï¼å½å为已å ç¨ï¼"); |
| | | } |
| | | |
| | | // 5. å¼å¯äºå¡å¤çæ ¸å¿é»è¾ |
| | | _unitOfWorkManage.BeginTran(); |
| | | |
| | | // 5.1 ç®æ è´§ä½æ´æ°ä¸ºå ç¨ |
| | | var beforeTargetLocationStatus = targetLocationInfo.LocationStatus; |
| | | targetLocationInfo.LocationStatus = stockInfo.PalletType == PalletTypeEnum.Empty.ObjToInt() |
| | | ? LocationStatusEnum.Pallet.ObjToInt() |
| | | : LocationStatusEnum.InStock.ObjToInt(); |
| | | _locationInfoService.Repository.UpdateData(targetLocationInfo); |
| | | |
| | | // 5.2 åè´§ä½éæ¾ç©ºé² |
| | | int beforeOldLocationStatus = 0; |
| | | if (oldLocationInfo != null) |
| | | { |
| | | beforeOldLocationStatus = oldLocationInfo.LocationStatus; |
| | | oldLocationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); |
| | | _locationInfoService.Repository.UpdateData(oldLocationInfo); |
| | | } |
| | | |
| | | // 5.3 æ´æ°åºåï¼ç»å®æ°è´§ä½ + æ¢å¤æ£å¸¸ç¶æ |
| | | string oldLocationCode = stockInfo.LocationCode; |
| | | stockInfo.LocationCode = targetLocationInfo.LocationCode; |
| | | stockInfo.StockStatus = StockStatusEmun.å
¥åºå®æ.ObjToInt(); |
| | | stockInfo.LocationType = targetLocationInfo.LocationType; |
| | | _stockRepository.UpdateData(stockInfo); |
| | | |
| | | // 5.4 任塿 è®°ä¸ºå®æ |
| | | task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); |
| | | var result = _task_HtyService.DeleteAndMoveIntoHty(task, OperateTypeEnum.èªå¨å®æ); |
| | | |
| | | // æäº¤äºå¡ |
| | | _unitOfWorkManage.CommitTran(); |
| | | |
| | | // ä»»å¡å½æ¡£å¤±è´¥åå é¤ |
| | | if (!result) |
| | | { |
| | | await Db.Deleteable(task).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | // è®°å½è´§ä½ç¶æåæ´æ¥å¿ |
| | | try |
| | | { |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord( |
| | | targetLocationInfo, |
| | | beforeTargetLocationStatus, |
| | | StockChangeType.Inbound.ObjToInt(), |
| | | $"è·¨åºåç§»åºå
¥åºï¼åè´§ä½ï¼{oldLocationCode}ï¼", |
| | | task.TaskNum); |
| | | |
| | | if (oldLocationInfo != null) |
| | | { |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord( |
| | | oldLocationInfo, |
| | | beforeOldLocationStatus, |
| | | StockChangeType.Outbound.ObjToInt(), |
| | | $"è·¨åºåç§»åºåºåºï¼ç®æ è´§ä½ï¼{targetLocationInfo.LocationCode}ï¼", |
| | | task.TaskNum); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _logger.LogInformation($"CrossAreaRelocationTaskCompleted è®°å½æ¥å¿å¼å¸¸ï¼{ex.Message}"); |
| | | } |
| | | |
| | | return content.OK("è·¨åºåç§»åºä»»å¡å®æ"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | _logger.LogError($"CrossAreaRelocationTaskCompleted å¤ç失败ï¼{ex.Message}", ex); |
| | | return await Task.FromResult(WebResponseContent.Instance.Error($"è·¨åºåç§»åºä»»å¡å¤ç失败ï¼{ex.Message}")); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |