ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_BasicService/InvokeMESService.cs
@@ -41,6 +41,7 @@ private readonly IRepository<Dt_StockInfoDetail> _stockInfoDetailRepository; private readonly IRepository<Dt_StockInfo> _stockInfoRepository; private readonly IRepository<Dt_InboundOrder> _inboundOrderRepository; private readonly IRepository<Dt_InboundOrderDetail> _inboundOrderDetailRepository; private readonly IRepository<Dt_PickingRecord> _pickingRecoreRepository; private readonly IMaterialUnitService _materialUnitService; private readonly IOutboundOrderService _outboundOrderService; @@ -53,7 +54,7 @@ // å ¨å±éæéï¼ç¨äºä¿æ¤ _resourceLocks åå ¸ä¸ GetOrAdd æ TryRemove æ¶çç«äº private static readonly object _globalLocker = new object(); public InvokeMESService(IHttpClientFactory httpClientFactory, ILogger<InvokeMESService> logger, IRepository<Dt_FeedbackToMes> feedbacktomesRepository, IRepository<Dt_StockInfoDetail> stockInfoDetailRepository, IRepository<Dt_StockInfo> stockInfoRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IOutboundOrderService outboundOrderService, IOutboundOrderDetailService outboundOrderDetailService, IOutStockLockInfoService outStockLockInfoService, IMaterialUnitService materialUnitService, IRepository<Dt_PickingRecord> pickingRecoreRepository, IRepository<Dt_InterfaceLog> interfacelogRepository) public InvokeMESService(IHttpClientFactory httpClientFactory, ILogger<InvokeMESService> logger, IRepository<Dt_FeedbackToMes> feedbacktomesRepository, IRepository<Dt_StockInfoDetail> stockInfoDetailRepository, IRepository<Dt_StockInfo> stockInfoRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IOutboundOrderService outboundOrderService, IOutboundOrderDetailService outboundOrderDetailService, IOutStockLockInfoService outStockLockInfoService, IMaterialUnitService materialUnitService, IRepository<Dt_PickingRecord> pickingRecoreRepository, IRepository<Dt_InterfaceLog> interfacelogRepository, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository) { _httpClientFactory = httpClientFactory; _logger = logger; @@ -67,6 +68,7 @@ _materialUnitService = materialUnitService; _pickingRecoreRepository = pickingRecoreRepository; _interfacelogRepository = interfacelogRepository; _inboundOrderDetailRepository = inboundOrderDetailRepository; } /// <summary> @@ -245,7 +247,7 @@ public async Task<WebResponseContent> BatchOrderFeedbackToMes(List<string> orderNos, int inout) { try { { if (inout == 1) { @@ -260,6 +262,15 @@ var unreports = stockinfos.Where(x => !feeds.Contains(x.PalletCode)).ToList(); if (unreports != null && !unreports.Any()) { _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1, Remark = "" }) .Where(it => it.InboundOrderNo == orderNo).ExecuteCommand(); var inboundOrder = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().First(x => x.InboundOrderNo == orderNo); if (inboundOrder != null) { _inboundOrderDetailRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 }) .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand(); } return WebResponseContent.Instance.Error("没æéè¦åä¼ çæ°æ®"); } foreach (var item in unreports) @@ -351,6 +362,30 @@ if (result != null && result.code == 200) { _feedbacktomesRepository.Db.Insertable(new Dt_FeedbackToMes { OrderNo = orderNo, PalletCode = item.PalletCode, ReportStatus = 1 }).ExecuteCommand(); var feedstockinfos = _stockInfoRepository.Db.Queryable<Dt_StockInfo>("info").Where(info => info.StockStatus == 6) .Where(it => SqlFunc.Subqueryable<Dt_StockInfoDetail>().Where(s => s.StockId == it.Id && s.OrderNo == orderNo).Any()) .ToList(); var feedstomes = _feedbacktomesRepository.Db.Queryable<Dt_FeedbackToMes>().Where(x => x.OrderNo == orderNo && x.ReportStatus == 1).Select(o => o.PalletCode).ToList(); var feedunreports = feedstockinfos.Where(x => !feedstomes.Contains(x.PalletCode)).ToList(); if (feedunreports != null && !feedunreports.Any()) { _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1, Remark = "" }) .Where(it => it.InboundOrderNo == orderNo).ExecuteCommand(); var feedinboundOrder = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().First(x => x.InboundOrderNo == orderNo); if (feedinboundOrder != null) { _inboundOrderDetailRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 }) .Where(it => it.OrderId == feedinboundOrder.Id).ExecuteCommand(); } } } else { _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 2, Remark = result.message }) .Where(it => it.Id == inboundOrder.Id).ExecuteCommand(); _inboundOrderDetailRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 2 }) .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand(); } } } @@ -640,12 +675,21 @@ var mesResult = await FeedbackOutbound(feedModel); if (mesResult == null || mesResult.code != 200) { var messages = mesResult?.message??""; await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>() .SetColumns(x => new Dt_OutboundOrder { ReturnToMESStatus = 2, Remark = messages, }) .Where(x => x.OrderNo == orderNo) .ExecuteCommandAsync(); // æ´æ°æç»ä¸ºåä¼ å¤±è´¥ï¼ReturnToMESStatus=2ï¼ await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>() .SetColumns(it => new Dt_OutboundOrderDetail { ReturnToMESStatus = 2, ReturnToMESStatus = 2, documentsNO = documentNo, }) .Where(x => detailIds.Contains(x.Id)) @@ -653,10 +697,7 @@ return (flowControl: false, value: WebResponseContent.Instance.Error($"åä¼ MES失败")); } foreach (var record in pickingRecords.Where(x => detailIds.Contains(x.OrderDetailId)).ToList()) { record.ReturnToMESStatus = 1; } var updates = pickingRecords.Where(x => detailIds.Contains(x.OrderDetailId)).ToList(); updates.ForEach(x => { @@ -686,7 +727,7 @@ await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>() .SetColumns(x => new Dt_OutboundOrder { ReturnToMESStatus = 1, ReturnToMESStatus = 1,Remark="", OrderStatus = newStatus }) .Where(x => x.OrderNo == orderNo) @@ -717,6 +758,7 @@ .SetColumns(it => new Dt_OutboundOrder { ReturnToMESStatus = 1, Remark = "", OrderStatus = OutOrderStatusEnum.åºåºå®æ.ObjToInt(), }) .Where(x => x.OrderNo == orderNo) @@ -846,7 +888,7 @@ .ExecuteCommandAsync(); await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>() .SetColumns(x => x.ReturnToMESStatus == 1) .SetColumns(it => new Dt_OutboundOrder { ReturnToMESStatus = 1, Remark = "" }) .Where(x => x.OrderNo == orderNo) .ExecuteCommandAsync(); @@ -861,6 +903,17 @@ { var errorMsg = $"OrderNo: {orderNo} åä¼ MES失败ï¼é误ç ï¼{result.code}ï¼é误信æ¯ï¼{result.message ?? "æ "}"; _logger.LogError(errorMsg); await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>() .SetColumns(x => x.ReturnToMESStatus ==2) .Where(x => x.OrderId == outboundOrder.Id) .ExecuteCommandAsync(); await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>() .SetColumns(it => new Dt_OutboundOrder { ReturnToMESStatus = 2, Remark = result.message }) .Where(x => x.OrderNo == orderNo) .ExecuteCommandAsync(); return WebResponseContent.Instance.Error(errorMsg); } } ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs
@@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; using MailKit.Search; using Microsoft.Extensions.Logging; using SqlSugar; using WIDESEA_BasicService; using WIDESEA_Common.CommonEnum; @@ -934,7 +935,7 @@ return ValidationResult<(Dt_PickingRecord, Dt_OutStockLockInfo, Dt_OutboundOrderDetail)>.Success((pickingRecord, lockInfo, orderDetail)); } /// <summary> /// æ£æ¥éå®ä¿¡æ¯å¯¹åºçæ¡ç æ¯å¦å·²ç»ååº @@ -1172,7 +1173,7 @@ #endregion #region ååºæä½ç§ææ¹æ³ /// <summary> /// æ£æ¥æ´ä¸ªæçæ¯å¦å·²ç»ååº /// </summary> @@ -1250,7 +1251,7 @@ } private async Task<WebResponseContent> HandleNoReturnItems(string orderNo, string palletCode, Dt_Task originalTask, int stockInfoId) { { try { var locationtype = 0; @@ -1537,7 +1538,7 @@ } private async Task HandlePalletStockGoodsReturn(List<Dt_StockInfoDetail> palletStockGoods) { @@ -1894,7 +1895,7 @@ _logger.LogError($"UpdateOrderStatusForReturn失败 - OrderNo: {orderNo}, Error: {ex.Message}"); } } #endregion #region 空æç @@ -2143,7 +2144,7 @@ return result; } private async Task<string> GenerateNewBarcode() { @@ -2557,10 +2558,20 @@ if (result1 != null && result1.code == 200) { var orderIds = inboundOrderDetails.Select(x => x.Id).Distinct().ToList(); _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1 }) .Where(it => it.Id == inboundOrder.Id).ExecuteCommand(); if (inboundOrder.OrderStatus == InOrderStatusEnum.å ¥åºå®æ.ObjToInt()) { _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1, Remark = "" }) .Where(it => it.Id == inboundOrder.Id).ExecuteCommand(); } _inboundOrderDetailService.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 }) .Where(it => orderIds.Contains(it.Id)).ExecuteCommand(); } else { _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 2, Remark = result1.message }) .Where(it => it.Id == inboundOrder.Id).ExecuteCommand(); _inboundOrderDetailService.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 2 }) .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand(); } //åºåºåä¼ MES @@ -2632,12 +2643,30 @@ await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>() .SetColumns(x => x.ReturnToMESStatus == 1) .SetColumns(it => new Dt_OutboundOrder { ReturnToMESStatus = 1, Remark = "" }) .Where(x => x.Id == outboundOrder.Id) .ExecuteCommandAsync(); await _interfaceLog.Db.Updateable<Dt_InterfaceLog>() .SetColumns(x => x.ReturnToMESStatus == 1) .Where(x => x.DocumentNo == documentNo) .ExecuteCommandAsync(); } else { var uporderIds = outboundOrderDetails.Select(x => x.Id).Distinct().ToList(); await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>() .SetColumns(x => x.ReturnToMESStatus == 2) .Where(x => uporderIds.Contains(x.Id)) .ExecuteCommandAsync(); await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>() .SetColumns(it => new Dt_OutboundOrder { ReturnToMESStatus = 2, Remark = result.message }) .Where(x => x.Id == outboundOrder.Id) .ExecuteCommandAsync(); await _interfaceLog.Db.Updateable<Dt_InterfaceLog>() .SetColumns(x => x.ReturnToMESStatus == 2) .Where(x => x.DocumentNo == documentNo) .ExecuteCommandAsync(); } @@ -2654,8 +2683,8 @@ { try { Dt_InboundOrderDetail inboundOrderDetail = _stockInfoDetailService.Db.Queryable<Dt_InboundOrderDetail>().Where(x=>x.Barcode == barcode&& x.OrderDetailStatus !=OrderDetailStatusEnum.Over.ObjToInt()).First(); if(inboundOrderDetail == null) Dt_InboundOrderDetail inboundOrderDetail = _stockInfoDetailService.Db.Queryable<Dt_InboundOrderDetail>().Where(x => x.Barcode == barcode && x.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()).First(); if (inboundOrderDetail == null) { return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥æ¡ç {barcode}çå ¥åºæç»æè æç»ç¶æå·²å ¥æºä»å®æ"); } @@ -2668,7 +2697,7 @@ return WebResponseContent.Instance.OK("æ¥è¯¢éè´åæå", data: resultData); } catch(Exception ex) catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -130,17 +130,18 @@ _task_HtyService = task_HtyService; } public async Task TaskStatusChange(string taskNum,TaskStatusEnum taskStatusEnum) public async Task TaskStatusChange(string taskNum, TaskStatusEnum taskStatusEnum) { if (int.TryParse(taskNum, out var newTaskNum)) { await Db.Updateable<Dt_Task>().SetColumns(it => new Dt_Task { TaskStatus = taskStatusEnum.ObjToInt() }) await Db.Updateable<Dt_Task>().SetColumns(it => new Dt_Task { TaskStatus = taskStatusEnum.ObjToInt() }) .Where(it => it.TaskNum == newTaskNum) .ExecuteCommandAsync(); } } /// <summary> @@ -450,10 +451,17 @@ var feedbackresult = await _invokeMESService.FeedbackInbound(feedmodel); if (feedbackresult != null && feedbackresult.code == 200) { _inboundOrderService.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1 }) _inboundOrderService.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1, Remark = "" }) .Where(it => it.Id == inboundOrder.Id).ExecuteCommand(); _inboundOrderDetailService.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 }) .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand(); } else { _inboundOrderService.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 2, Remark = feedbackresult.message }) .Where(it => it.Id == inboundOrder.Id).ExecuteCommand(); _inboundOrderDetailService.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 2 }) .Where(it => it.OrderId == inboundOrder.Id).ExecuteCommand(); } } } @@ -586,7 +594,7 @@ _logger.LogInformation($"TaskService InPickTaskCompleted: {task.TaskNum}"); try { { // æ¥åºå Dt_StockInfo stockInfo = await _stockRepository.Db.Queryable<Dt_StockInfo>() .Includes(x => x.Details) @@ -624,7 +632,7 @@ // æ´æ°åºåºéå®è®°å½ç¶æä¸ºååºå®æ foreach (var lockInfo in returnLocks) { lockInfo.Status = (int)OutLockStockStatusEnum.å·²ååº; lockInfo.Status = (int)OutLockStockStatusEnum.å·²ååº; } if (returnLocks.Any()) @@ -685,7 +693,7 @@ ); await RecalculateOrderStatus(task.OrderNo); _logger.LogInformation($"æçååºå®æå¤çæå - ä»»å¡å·: {task.TaskNum}, æç: {task.PalletCode}, 订å: {task.OrderNo}"); _ = Task.Run(async () => { @@ -961,7 +969,7 @@ await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>() .SetColumns(x => new Dt_OutboundOrder { OrderStatus = newStatus, OrderStatus = newStatus, }) .Where(x => x.OrderNo == orderNo) .ExecuteCommandAsync(); @@ -1115,7 +1123,7 @@ await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>() .SetColumns(x => new Dt_OutboundOrder { ReturnToMESStatus = 1, ReturnToMESStatus = 1, }).Where(x => x.OrderNo == orderNo).ExecuteCommandAsync(); } } @@ -1200,8 +1208,20 @@ .ExecuteCommandAsync(); await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>() .SetColumns(x => x.ReturnToMESStatus == 1) .SetColumns(it => new Dt_OutboundOrder { ReturnToMESStatus = 2, Remark = "" }) .Where(x => x.OrderNo == orderNo) .ExecuteCommandAsync(); } else { await _outboundOrderDetailService.Db.Updateable<Dt_OutboundOrderDetail>() .SetColumns(x => x.ReturnToMESStatus == 2) .Where(x => x.OrderId == outboundOrder.Id) .ExecuteCommandAsync(); await _outboundOrderService.Db.Updateable<Dt_OutboundOrder>() .SetColumns(it => new Dt_OutboundOrder { ReturnToMESStatus = 2, Remark = result.message }) .Where(x => x.OrderNo == orderNo) .ExecuteCommandAsync(); } } @@ -1256,7 +1276,7 @@ var stockresult = _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.èªå¨å®æ : OperateTypeEnum.äººå·¥å®æ); if (!stockresult) { { _stockRepository.Db.Deleteable(stockInfo).ExecuteCommand(); } _stockService.StockInfoService.DeleteData(stockInfo);