Exemplo n.º 1
0
        public OutsideStockInResponseResult ConfirmBalanceMES(OutsideStockInResponse obj)
        {
            OutsideStockInResponseResult retModel = new OutsideStockInResponseResult();

            retModel.WarehousingId     = obj.WarehousingId;
            retModel.IsNormalExecution = true;
            _eventBus.Post(new KeyValuePair <OutsideStockInResponse, OutsideStockInResponseResult>(obj, retModel), TimeSpan.Zero);
            return(retModel);
        }
        /// <summary>
        /// 通知MES入库完成
        /// </summary>
        /// <param name="stockOutId"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        public static async Task <RouteData> NofityStockIn(this ISqlSugarClient client, Wms_mestask mesTask)
        {
            mesTask.ModifiedDate = DateTime.Now;
            mesTask.WorkStatus   = MESTaskWorkStatus.WorkComplated;
            mesTask.NotifyStatus = MESTaskNotifyStatus.WaitResponse;

            try
            {
                List <Wms_stockin> stockIns = await client.Queryable <Wms_stockin>().Where(x => x.MesTaskId == mesTask.MesTaskId).ToListAsync();

                List <OutsideStockInResponseWarehouse> warehouseList = new List <OutsideStockInResponseWarehouse>();
                foreach (Wms_stockin stockIn in stockIns)
                {
                    OutsideStockInResponseWarehouse warehouse = warehouseList.FirstOrDefault(x => x.WarehouseId == stockIn.WarehouseId.ToString());
                    if (warehouse == null)
                    {
                        Wms_warehouse warehouseData = WMSApiManager.GetWarehouse(stockIn.WarehouseId);
                        warehouse = new OutsideStockInResponseWarehouse()
                        {
                            //WarehouseId = stockIn.WarehouseId.ToString(),
                            WarehouseId           = warehouseData?.WarehouseNo,
                            WarehouseName         = warehouseData?.WarehouseName,
                            WarehousePosition     = "",
                            WarehousingFinishTime = stockIn.ModifiedDate.Value.ToString("yyyy-MM-dd HH:mm:ss"),
                        };
                        warehouseList.Add(warehouse);
                    }
                    List <Wms_stockindetail> stockInDetails = await client.Queryable <Wms_stockindetail>().Where(x => x.StockInId == stockIn.StockInId).ToListAsync();

                    foreach (Wms_stockindetail stockInDetail in stockInDetails)
                    {
                        OutsideMaterialResult material = new OutsideMaterialResult()
                        {
                            UniqueIndex    = stockInDetail.UniqueIndex,
                            SuppliesId     = stockInDetail.MaterialNo.ToString(),
                            SuppliesName   = stockInDetail.MaterialName,
                            SuppliesNumber = stockInDetail.ActInQty.ToString(),
                            RefreshStock   = stockInDetail.ActInQty.ToString(),
                            ErrorId        = stockInDetail.ErrorId,
                            ErrorInfo      = stockInDetail.ErrorInfo
                        };
                        warehouse.SuppliesInfoList.Add(material);
                        warehouse.SuppliesKinds = warehouse.SuppliesInfoList.Count;
                    }
                }

                OutsideStockInResponse response = new OutsideStockInResponse()
                {
                    WarehousingId              = mesTask.WarehousingId,
                    WarehousingEntryNumber     = warehouseList.Count,
                    WarehousingEntryFinishList = JsonConvert.SerializeObject(warehouseList)
                };

                SelfReservoirAreaManager._logger.Info($"[通知MES入库完成]开始通知MES,param={JsonConvert.SerializeObject(response)}");
                OutsideStockInResponseResult result = await MESApiAccessor.Instance.WarehousingFinish(response);

                SelfReservoirAreaManager._logger.Info($"[通知MES入库完成]通知MES成功,result={JsonConvert.SerializeObject(result)}");
                if (String.IsNullOrWhiteSpace(result.IsNormalExecution))
                {
                    mesTask.NotifyStatus = MESTaskNotifyStatus.Responsed;
                }
                else
                {
                    mesTask.Remark       = $"Error={result.IsNormalExecution}";
                    mesTask.NotifyStatus = MESTaskNotifyStatus.Failed;
                }
            }
            catch (Exception ex)
            {
                mesTask.Remark       = $"InnerError={ex.Message}";
                mesTask.NotifyStatus = MESTaskNotifyStatus.Failed;
                //_logger.LogError(ex, "入库完成通知时发生异常");
                //逻辑继续,寻找其它时机重新通知
                SelfReservoirAreaManager._logger.Error($"[通知MES入库完成]通知MES时发生异常,{ex.ToString()}");
            }
            if (client.Updateable(mesTask).ExecuteCommand() == 0)
            {
                SelfReservoirAreaManager._logger.Error($"[通知MES入库完成]E-0002-更新状态失败");
                return(YL.Core.Dto.RouteData.From(PubMessages.E0002_UPDATE_COUNT_FAIL));
            }

            SelfReservoirAreaManager._logger.Info($"[通知MES入库完成]更新状态成功,NotifyStatus={mesTask.NotifyStatus}");
            if (mesTask.NotifyStatus == MESTaskNotifyStatus.Responsed)
            {
                return(new RouteData());
            }
            else
            {
                return(YL.Core.Dto.RouteData.From(PubMessages.E3001_MES_STOCKIN_NOFITY_FAIL));
            }
        }