public async Task <string> NofityStockIn(long mesTaskId) { Wms_mestask mesTask = await _sqlClient.Queryable <Wms_mestask>().FirstAsync(x => x.MesTaskId == mesTaskId); RouteData result = await _sqlClient.NofityStockIn(mesTask); return(JsonConvert.SerializeObject(result)); }
public async Task <RouteData> StockInReport(long stockInId, [FromBody] OutsideStockInReportDto result) { try { _logger.LogInformation($"[入库任务状态变化通知]收到通知,StockInId={stockInId},data={JsonConvert.SerializeObject(result)}"); result.StockInId = stockInId; Wms_stockin stockIn = await _client.Queryable <Wms_stockin>() .FirstAsync(x => x.StockInId == result.StockInId); if (stockIn == null) { _logger.LogError($"[入库任务状态变化通知]E2013-没有找到入库单,StockInId={stockInId}"); return(YL.Core.Dto.RouteData.From(PubMessages.E2013_STOCKIN_NOTFOUND)); } if (stockIn.StockInStatus == StockInStatus.task_finish.ToInt32()) { _logger.LogError($"[入库任务状态变化通知]E2014-入库单状态已标记为完成,本次操作中断,StockInId={stockInId}, StockInNo={stockIn.StockInNo}"); //return YL.Core.Dto.RouteData.From(PubMessages.E2014_STOCKIN_ALLOW_FINISHED); return(new RouteData()); } Wms_mestask mesTask = await _client.Queryable <Wms_mestask>() .FirstAsync(x => x.MesTaskId == stockIn.MesTaskId); if (mesTask == null) { _logger.LogError($"[入库任务状态变化通知]E3000-没有找到相应的Mes任务,StockInId={stockInId}, StockInNo={stockIn.StockInNo}, MesTaskId={stockIn.MesTaskId}"); return(YL.Core.Dto.RouteData.From(PubMessages.E3000_MES_STOCKINTASK_NOTFOUND)); } Wms_stockindetail[] details = _client.Queryable <Wms_stockindetail>() .Where(x => x.StockInId == result.StockInId).ToArray(); _client.BeginTran(); foreach (OutsideStockInReportDetail detail in result.Details) { Wms_stockindetail localDetail = details.FirstOrDefault( x => x.UniqueIndex == detail.UniqueIndex); if (localDetail == null) { _client.RollbackTran(); _logger.LogError($"[入库任务状态变化通知]E2015-没有找到相应的物料,StockInId={stockInId}, StockInNo={stockIn.StockInNo} ,UniqueIndex ={ detail.UniqueIndex}"); return(YL.Core.Dto.RouteData.From(PubMessages.E2015_STOCKIN_HASNOT_MATERIAL, $"MaterialId={detail.MaterialId}")); } localDetail.PlanInQty = detail.PlanInQty; localDetail.ActInQty = detail.ActInQty; localDetail.Status = detail.Status.ToInt32(); localDetail.ModifiedBy = PubConst.InterfaceUserId; localDetail.ModifiedUser = detail.ModifiedBy; localDetail.ModifiedDate = Convert.ToDateTime(detail.ModifiedDate); localDetail.Remark = detail.Remark; localDetail.ErrorId = detail.ErrorId; localDetail.ErrorInfo = detail.ErrorInfo; } if (_client.Updateable(details).ExecuteCommand() == 0) { _client.RollbackTran(); _logger.LogError($"[入库任务状态变化通知]E0002-任务明细更新失败,StockInId={stockInId}, StockInNo={stockIn.StockInNo}"); return(YL.Core.Dto.RouteData.From(PubMessages.E0002_UPDATE_COUNT_FAIL)); } stockIn.StockInStatus = result.StockInStatus.ToInt32(); stockIn.ModifiedBy = PubConst.InterfaceUserId; stockIn.ModifiedUser = PubConst.InterfaceUserName; if (_client.Updateable(stockIn).ExecuteCommand() == 0) { _client.RollbackTran(); _logger.LogError($"[入库任务状态变化通知]E0002-任务更新失败,StockInId={stockInId}, StockInNo={stockIn.StockInNo}"); return(YL.Core.Dto.RouteData.From(PubMessages.E0002_UPDATE_COUNT_FAIL)); } var anyWorking = await _client.Queryable <Wms_stockin>() .AnyAsync(x => x.MesTaskId == stockIn.MesTaskId && x.StockInStatus != (int)StockInStatus.task_finish && x.StockInStatus != (int)StockInStatus.task_canceled); if (!anyWorking) { _logger.LogInformation($"[入库任务状态变化通知]所有相关任务已完成,尝试通知MES MesTaskId={stockIn.MesTaskId}"); await _client.NofityStockIn(mesTask); } else { _logger.LogInformation($"[入库任务状态变化通知]尚有未完成任务,等待其余任务完成通知 MesTaskId={stockIn.MesTaskId}"); } _logger.LogInformation($"[入库任务状态变化通知]通知处理正常完成,StockInId={stockInId}"); _client.CommitTran(); return(new RouteData()); } catch (Exception ex) { _client.RollbackTran(); _logger.LogError($"[入库任务状态变化通知]E-1-发生异常,处理结束 ex={ex.ToString()}"); return(new RouteData() { Code = -1, Message = ex.Message }); } }