Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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
                });
            }
        }