public override void ErrorHanding(Exception exception, ProductInfo product)
        {
            try
            {
                throw exception;
            }
            catch (OperationCanceledException)
            { }
            // Утечка в системе
            catch (SetPressureTimeoutException)
            {
                product.Error = TestErrorEnum.Leakage;
                throw new OperationCanceledException();
            }

            // Изделие не поддерживается пневмосистемой
            catch (PsysSupportException)
            {
                product.Error = TestErrorEnum.RangeNotSupportByPsys;
                throw new OperationCanceledException();
            }

            // Авария амперметра
            catch (SDM_ErrException ex)
            {
                // Выводим сообщение и отменяем операцию
                product.Error = TestErrorEnum.SystemError;
                sysStatus.AmmetrStatusMessage = ex.Message;
                sysStatus.AmmetrStatus        = StatusEnum.Error;
                Cancel(ex.Message);
            }

            // Авария пневмосистемы
            catch (PressSystemException ex)
            {
                // Выводим сообщение и отменяем операцию
                product.Error = TestErrorEnum.SystemError;
                sysStatus.PressSystemStatusMessage = ex.Message;
                sysStatus.PressSystemStatus        = StatusEnum.Error;
                Cancel(ex.Message);
            }

            catch (ParseDeviceNameException)
            {
                // Выводим сообщение и отменяем операцию
                throw;
            }

            // Неисправность изделия. Измеренный ток ниже нижнего предела
            catch (LoCurrentAlarmException)
            {
                product.Error = TestErrorEnum.AlarmLoLimit;
                throw new OperationCanceledException();
            }
            // Неисправность изделия. Измеренный ток выше верхнего предела
            catch (HiCurrentAlarmException)
            {
                product.Error = TestErrorEnum.AlarmHiLimit;
                throw new OperationCanceledException();
            }


            // Непредусмотренные ошибки
            catch (Exception ex)
            {
                product.Error = TestErrorEnum.SystemError;
                Cancel("Непредусмотренная ошибка. Обратитесь к разработчику:\r\n" + ex.Message);
            }
        }
        public virtual void ErrorHanding(Exception exception, ProductInfo product)
        {
            try
            {
                throw exception;
            }
            catch (OperationCanceledException)
            { }
            // Утечка в системе
            catch (SetPressureTimeoutException ex)
            {
                product.Error = TestErrorEnum.Leakage;
                string message = ex.Message + ". Возможно, нарушена герметичность изделия";
                if (!settings.UsedStandDatabase)
                {
                    Cancel(message);
                }
                else
                {
                    // Работа с базой
                    // Спрашиваем, браковать или нет
                    RejectDialog(message, (int)product.Error);
                }
            }

            // Изделие не поддерживается пневмосистемой
            catch (PsysSupportException ex)
            {
                product.Error = TestErrorEnum.RangeNotSupportByPsys;
                if (!settings.UsedStandDatabase)
                {
                    Cancel(ex.Message);
                }
                else
                {
                    // Работа с базой
                    // Спрашиваем, браковать или нет
                    RejectDialog(ex.Message, (int)product.Error);
                }
            }

            // Авария амперметра
            catch (SDM_ErrException ex)
            {
                // Выводим сообщение и отменяем операцию
                product.Error = TestErrorEnum.SystemError;
                sysStatus.AmmetrStatusMessage = ex.Message;
                sysStatus.AmmetrStatus        = StatusEnum.Error;
                Cancel(ex.Message);
            }

            // Авария пневмосистемы
            catch (PressSystemException ex)
            {
                // Выводим сообщение и отменяем операцию
                product.Error = TestErrorEnum.SystemError;
                sysStatus.PressSystemStatusMessage = ex.Message;
                sysStatus.PressSystemStatus        = StatusEnum.Error;
                Cancel(ex.Message);
            }
            // Неисправность изделия. Измеренный ток ниже допустимого предела
            catch (LoCurrentAlarmException)
            {
                product.Error = TestErrorEnum.AlarmLoLimit;
                Cancel("Измеренный ток ниже допустимого предела");
            }
            // Неисправность изделия. Измеренный ток выше допустимого предела
            catch (HiCurrentAlarmException)
            {
                product.Error = TestErrorEnum.AlarmHiLimit;
                Cancel("Измеренный ток выше допустимого предела");
            }
            // Ошибка открытия порта цифрового датчика
            catch (OpenConnectPortException)
            {
                product.Error = TestErrorEnum.OpenPortError;
                Cancel("Ошибка открытия порта связи с поверяемым ПД");
            }
            // Ошибка подключения (для датчиков с цифровым интерфейсом)
            catch (ConnectException)
            {
                product.Error = TestErrorEnum.ConnectError;
                Cancel("Не удалось установить связь с поверяемым ПД");
            }
            // Потеря связи (для датчиков с цифровым интерфейсом)
            catch (LostConnectException)
            {
                product.Error = TestErrorEnum.LostConnect;
                Cancel("Потеря связи связи с поверяемым ПД");
            }
            // Непредусмотренные ошибки
            catch (Exception ex)
            {
                product.Error = TestErrorEnum.SystemError;
                Cancel("Непредусмотренная ошибка. Обратитесь к разработчику:\r\n" + ex.Message);
            }
        }
Esempio n. 3
0
        public void SaveResult(ProductInfo product, TestResults results, IDialogService dialogService)
        {
            // Смысл формировать и посылать Json есть только когда статус продукта 0 - нет ошибок, или 14 - не прошел по точности,
            // или 18 - забракован оператором или 19 - большая вариация
            // Если были другие ошибки, то и результатов нет, формировать Json не из чего
            product.ClosingDateTime = DateTime.Now;
            try
            {
                string jsonContent = null;
                string fileName    = null;

                if ((product.Error == TestErrorEnum.NoError || product.Error == TestErrorEnum.BadPrecision ||
                     product.Error == TestErrorEnum.OperatorSolution || product.Error == TestErrorEnum.BadVariation))
                {
                    var jsonAdapter = new JsonAdapter(settings.JsonReportSettings);
                    jsonAdapter.AddResults(product.Device.SerialNumber, product.Device.DeviceTypeCode, product.Device.SensorTypeCode, product.PrimaryTest,
                                           results, new PressureIndication(product.Device.Range.Pressure_Pa), product.Error == 0, product.ClosingDateTime,
                                           product.Device.MetrologicGroupNumber);
                    jsonContent = jsonAdapter.JsonReportResult.GetJsonByString();
                    fileName    = jsonAdapter.JsonReportResult.GetFileName();
                }

                // Передача в базу стенда
                if (settings.UsedStandDatabase)
                {
                    db.AddTestInfo(product, jsonContent);
                    sysStatus.DataBaseStatus = StatusEnum.Ok;
                }

                // Передача на сервер
                if (settings.JsonReportSettings.ArchivingJsonFile && !string.IsNullOrEmpty(fileName))
                {
                    archiving.Save(fileName, jsonContent);
                    sysStatus.ServerStatus = StatusEnum.Ok;
                }
            }
            catch (DbException ex)
            {
                sysStatus.DataBaseStatusMessage = ex.Message;
                sysStatus.DataBaseStatus        = StatusEnum.Error;

                if (!settings.UsedRemoteControl)
                {
                    bool dialResult = dialogService.ErrorTwoButtonDialog(ex.Message + "\r\nЧтобы повторить попытку нажмите \"OK\". Для отмены операции нажмите \"Отмена\"");
                    if (dialResult)
                    {
                        SaveResult(product, results, dialogService); // Повторим операцию
                    }
                    else
                    {
                        throw new OperationCanceledException();
                    }
                }
                else
                {
                    product.Error = TestErrorEnum.SystemError;
                    throw new OperationCanceledException();
                }
            }
            catch (SavingToLocalFolderException ex)
            {
                string message = "Не удалось сохранить результаты в формате JSON ни на удаленном сервере, ни в локальной директории:\r\n"
                                 + ex.Message;
                sysStatus.ServerStatusMessage = message;
                sysStatus.ServerStatus        = StatusEnum.Error;
                dialogService.ErrorMessage(message);
                throw new OperationCanceledException();
            }
            catch (SavingToRemoteArchiveException ex)
            {
                // Json сохранился в локальной папке, можно продолжать. При восстановлении связи, файлы будут переданы на сервыер
                sysStatus.ServerStatusMessage = ex.Message;
                sysStatus.ServerStatus        = StatusEnum.Warning;
                // dialogService.WarningMessage(ex.Message);
            }
        }