public static void ConfigureNh() { if (NhConfigered) { return; } //Использование другого способа формировать id объектов, чтобы они не пересекались. //По умолчанию все первые объекты каждого типа были 1, а вторые 2. Если сравнивать объекты по id, то не всегда можно //действительно проверить что id правильный. Что в некторых случаях приводило к некоректной проверки в тестах. Когда сравнивались id, разных объектов, //при этом тест проходил так как номера их совпадали. MappingParams.UseIdsForTest = true; Console.WriteLine("Инициализация"); var db_config = FluentNHibernate.Cfg.Db.MonoSqliteConfiguration.Standard.InMemory(); Console.WriteLine("ORM"); // Настройка ORM OrmConfig.ConfigureOrm(db_config, new System.Reflection.Assembly[] { System.Reflection.Assembly.GetAssembly(typeof(workwear.Domain.Users.UserSettings)), System.Reflection.Assembly.GetAssembly(typeof(MeasurementUnits)), System.Reflection.Assembly.GetAssembly(typeof(UserBase)), }); NhConfigered = true; }
public static void ConfigureNh() { if (NhConfigered) { return; } Console.WriteLine("Инициализация"); var db_config = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .Dialect <NHibernate.Spatial.Dialect.MySQL57SpatialDialect>() .ConnectionString("server=vod.qsolution.ru;port=3306;database=test-test;user id=test_only;password=7qqKWuNugQF2Y2W1;sslmode=None;"); Console.WriteLine("ORM"); // Настройка ORM OrmConfig.ConfigureOrm(db_config, new System.Reflection.Assembly[] { System.Reflection.Assembly.GetAssembly(typeof(QS.Project.HibernateMapping.UserBaseMap)), System.Reflection.Assembly.GetAssembly(typeof(Vodovoz.HibernateMapping.OrganizationMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.HibernateMapping.TypeOfEntityMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.Banks.HMap.BankMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.HistoryLog.HistoryMain)), System.Reflection.Assembly.GetAssembly(typeof(QS.Attachments.Domain.Attachment)) }); NhConfigered = true; }
public EmailPrepareWorker(ILogger <EmailPrepareWorker> logger, IConfiguration configuration, IModel channel, IEmailRepository emailRepository, IEmailParametersProvider emailParametersProvider) { if (configuration is null) { throw new ArgumentNullException(nameof(configuration)); } _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _channel = channel ?? throw new ArgumentNullException(nameof(channel)); _emailRepository = emailRepository ?? throw new ArgumentNullException(nameof(emailRepository)); _emailParametersProvider = emailParametersProvider ?? throw new ArgumentNullException(nameof(emailParametersProvider)); _emailSendKey = configuration.GetSection(_queuesConfigurationSection) .GetValue <string>(_emailSendKeyParameter); _emailSendExchange = configuration.GetSection(_queuesConfigurationSection) .GetValue <string>(_emailSendExchangeParameter); _channel.QueueDeclare(_emailSendKey, true, false, false, null); var conStrBuilder = new MySqlConnectionStringBuilder(); var databaseSection = configuration.GetSection("Database"); conStrBuilder.Server = databaseSection.GetValue("Hostname", "localhost"); conStrBuilder.Port = databaseSection.GetValue <uint>("Port", 3306); conStrBuilder.UserID = databaseSection.GetValue("Username", ""); conStrBuilder.Password = databaseSection.GetValue("Password", ""); conStrBuilder.Database = databaseSection.GetValue("DatabaseName", ""); conStrBuilder.SslMode = MySqlSslMode.None; QSMain.ConnectionString = conStrBuilder.GetConnectionString(true); var db_config = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .Dialect <NHibernate.Spatial.Dialect.MySQL57SpatialDialect>() .ConnectionString(QSMain.ConnectionString); OrmMain.ClassMappingList = new List <IOrmObjectMapping> (); // Нужно, чтобы запустился конструктор OrmMain OrmConfig.ConfigureOrm(db_config, new System.Reflection.Assembly[] { System.Reflection.Assembly.GetAssembly(typeof(Vodovoz.HibernateMapping.OrganizationMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.Banks.Domain.Bank)), System.Reflection.Assembly.GetAssembly(typeof(QS.HistoryLog.HistoryMain)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.HibernateMapping.TypeOfEntityMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.Domain.UserBase)), System.Reflection.Assembly.GetAssembly(typeof(QS.Attachments.HibernateMapping.AttachmentMap)) }); QS.HistoryLog.HistoryMain.Enable(); using (var unitOfWork = UnitOfWorkFactory.CreateWithoutRoot("Email prepare worker")) { _instanceId = Convert.ToInt32(unitOfWork.Session .CreateSQLQuery("SELECT GET_CURRENT_DATABASE_ID()") .List <object>() .FirstOrDefault()); } }
public void ConfigureOrm() { logger.Debug("Конфигурация ORM..."); //Увеличиваем таймаут если нужно var dbConnectionStringBuilder = new DbConnectionStringBuilder { ConnectionString = QSMain.ConnectionString }; if (dbConnectionStringBuilder.TryGetValue("ConnectionTimeout", out var timeoutAsObject) && timeoutAsObject is string timeoutAsString ) { if (Int32.TryParse(timeoutAsString, out int timeout) && timeout != connectionTimeoutSeconds) { dbConnectionStringBuilder["ConnectionTimeout"] = connectionTimeoutSeconds; QSMain.ConnectionString = dbConnectionStringBuilder.ConnectionString; } } else { dbConnectionStringBuilder.Add("ConnectionTimeout", connectionTimeoutSeconds); QSMain.ConnectionString = dbConnectionStringBuilder.ConnectionString; } var dbConfig = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .Dialect <MySQL57SpatialExtendedDialect>() .ConnectionString(QSMain.ConnectionString) .AdoNetBatchSize(100) .Driver <LoggedMySqlClientDriver>(); // Настройка ORM OrmConfig.ConfigureOrm( dbConfig, new[] { System.Reflection.Assembly.GetAssembly(typeof(QS.Project.HibernateMapping.UserBaseMap)), System.Reflection.Assembly.GetAssembly(typeof(HibernateMapping.OrganizationMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.HibernateMapping.TypeOfEntityMap)), System.Reflection.Assembly.GetAssembly(typeof(Bank)), System.Reflection.Assembly.GetAssembly(typeof(HistoryMain)), System.Reflection.Assembly.GetAssembly(typeof(QS.Attachments.Domain.Attachment)), System.Reflection.Assembly.GetAssembly(typeof(QS.Report.Domain.UserPrintSettings)) }, cnf => { cnf.DataBaseIntegration( dbi => { dbi.BatchSize = 100; dbi.Batcher <MySqlClientBatchingBatcherFactory>(); } ); } ); logger.Debug("OK"); }
public EmailStatusUpdateWorker(ILogger <EmailStatusUpdateWorker> logger, IConfiguration configuration, IModel channel, IEmailRepository emailRepository) { if (configuration is null) { throw new ArgumentNullException(nameof(configuration)); } _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _channel = channel ?? throw new ArgumentNullException(nameof(channel)); _emailRepository = emailRepository ?? throw new ArgumentNullException(nameof(emailRepository)); _storedEmailStatusUpdatingQueueId = configuration.GetSection(_queuesConfigurationSection) .GetValue <string>(_emailStatusUpdateQueueParameter); _channel.QueueDeclare(_storedEmailStatusUpdatingQueueId, true, false, false, null); _consumer = new AsyncEventingBasicConsumer(_channel); _consumer.Received += MessageRecieved; try { var conStrBuilder = new MySqlConnectionStringBuilder(); var databaseSection = configuration.GetSection("Database"); conStrBuilder.Server = databaseSection.GetValue("Host", "localhost"); conStrBuilder.Port = databaseSection.GetValue <uint>("Port", 3306); conStrBuilder.UserID = databaseSection.GetValue("Username", ""); conStrBuilder.Password = databaseSection.GetValue("Password", ""); conStrBuilder.Database = databaseSection.GetValue("DatabaseName", ""); conStrBuilder.SslMode = MySqlSslMode.None; QSMain.ConnectionString = conStrBuilder.GetConnectionString(true); var db_config = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .Dialect <NHibernate.Spatial.Dialect.MySQL57SpatialDialect>() .ConnectionString(QSMain.ConnectionString); OrmConfig.ConfigureOrm(db_config, new System.Reflection.Assembly[] { System.Reflection.Assembly.GetAssembly(typeof(Vodovoz.HibernateMapping.OrganizationMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.Banks.Domain.Bank)), System.Reflection.Assembly.GetAssembly(typeof(QS.HistoryLog.HistoryMain)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.HibernateMapping.TypeOfEntityMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.Domain.UserBase)), System.Reflection.Assembly.GetAssembly(typeof(QS.Attachments.HibernateMapping.AttachmentMap)) }); QS.HistoryLog.HistoryMain.Enable(); } catch (Exception ex) { _logger.LogCritical(ex, "Ошибка чтения конфигурационного файла."); return; } }
private void CreateBaseConfig() { _logger.LogInformation("Настройка параметров Nhibernate..."); var conStrBuilder = new MySqlConnectionStringBuilder(); var domainDBConfig = Configuration.GetSection("DomainDB"); conStrBuilder.Server = domainDBConfig.GetValue <string>("Server"); conStrBuilder.Port = domainDBConfig.GetValue <uint>("Port"); conStrBuilder.Database = domainDBConfig.GetValue <string>("Database"); conStrBuilder.UserID = domainDBConfig.GetValue <string>("UserID"); conStrBuilder.Password = domainDBConfig.GetValue <string>("Password"); conStrBuilder.SslMode = MySqlSslMode.None; var connectionString = conStrBuilder.GetConnectionString(true); var db_config = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .Dialect <MySQL57SpatialExtendedDialect>() .ConnectionString(connectionString) .AdoNetBatchSize(100); // Настройка ORM OrmConfig.ConfigureOrm( db_config, new System.Reflection.Assembly[] { System.Reflection.Assembly.GetAssembly(typeof(QS.Project.HibernateMapping.UserBaseMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.HibernateMapping.TypeOfEntityMap)), System.Reflection.Assembly.GetAssembly(typeof(Vodovoz.HibernateMapping.OrganizationMap)), System.Reflection.Assembly.GetAssembly(typeof(Bank)), System.Reflection.Assembly.GetAssembly(typeof(HistoryMain)), System.Reflection.Assembly.GetAssembly(typeof(Attachment)) } ); var serviceUserId = 0; using (var unitOfWork = UnitOfWorkFactory.CreateWithoutRoot("Получение пользователя")) { serviceUserId = unitOfWork.Session.Query <Vodovoz.Domain.Employees.User>() .Where(u => u.Login == domainDBConfig.GetValue <string>("UserID")) .Select(u => u.Id) .FirstOrDefault(); } QS.Project.Repositories.UserRepository.GetCurrentUserId = () => serviceUserId; HistoryMain.Enable(); }
/// <summary> /// Полная инициализация всего необходимого для тестирования в Nh /// </summary> public void InitialiseNHibernate(params Assembly[] assemblies) { if (configuration != null) { return; } var db_config = FluentNHibernate.Cfg.Db.MonoSqliteConfiguration.Standard.InMemory(); OrmConfig.ConfigureOrm(db_config, assemblies); configuration = OrmConfig.NhConfig; inMemoryDBTestSessionProvider = new InMemoryDBTestSessionProvider(configuration); UnitOfWorkFactory = new DefaultUnitOfWorkFactory(inMemoryDBTestSessionProvider); }
static void CreateBaseConfig() { logger.Info("Настройка параметров базы..."); // Настройка ORM var db = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .ConnectionString(QSMain.ConnectionString) .ShowSql() .FormatSql(); OrmConfig.ConfigureOrm(db, new System.Reflection.Assembly[] { System.Reflection.Assembly.GetAssembly(typeof(MainClass)), System.Reflection.Assembly.GetAssembly(typeof(UserBase)), }); OrmMain.AddObjectDescription <CarBrand>().DefaultTableView().SearchColumn("Наименование", i => i.Name).OrderAsc(i => i.Name).End(); OrmMain.AddObjectDescription <CarModel>().Dialog <CarModelDlg>(); OrmMain.AddObjectDescription <StoreItem>().Dialog <StoreItemDlg>(); JournalsColumnsConfigs.RegisterColumns(); }
static void CreateBaseConfig() { logger.Info("Настройка параметров базы..."); // Настройка ORM var db = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .Dialect <MySQL57ExtendedDialect>() .ConnectionString(QSProjectsLib.QSMain.ConnectionString) .AdoNetBatchSize(100) .ShowSql() .FormatSql(); OrmConfig.ConfigureOrm(db, new System.Reflection.Assembly[] { System.Reflection.Assembly.GetAssembly(typeof(MainClass)), System.Reflection.Assembly.GetAssembly(typeof(MeasurementUnits)), System.Reflection.Assembly.GetAssembly(typeof(UserBase)), System.Reflection.Assembly.GetAssembly(typeof(HistoryMain)), }); #if DEBUG NLog.LogManager.Configuration.RemoveRuleByName("HideNhibernate"); #endif //Настраиваем классы сущностей OrmMain.AddObjectDescription(MeasurementUnitsOrmMapping.GetOrmMapping()); //Спецодежда OrmMain.AddObjectDescription <RegulationDoc>().Dialog <RegulationDocDlg>().DefaultTableView().SearchColumn("Документ", i => i.Title).OrderAsc(i => i.Name).End(); //Общее OrmMain.AddObjectDescription <UserBase>().DefaultTableView().Column("Имя", e => e.Name).End(); OrmMain.AddObjectDescription <UserSettings>(); //Склад OrmMain.AddObjectDescription <Income>().Dialog <Dialogs.Stock.IncomeDocDlg>(); NotifyConfiguration.Enable(); BuisnessLogicGlobalEventHandler.Init(new GtkQuestionDialogsInteractive()); JournalsColumnsConfigs.RegisterColumns(); }
public static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += AppDomain_CurrentDomain_UnhandledException; logger.Info("Чтение конфигурационного файла..."); const string configValueNotFoundString = "Не удалось прочитать значение параметра \"{0}\" из файла конфигурации"; try { var builder = new ConfigurationBuilder() .AddJsonFile(configFile, false); var configuration = builder.Build(); var serviceConfig = configuration.GetSection("Service"); serviceHostName = serviceConfig["service_host_name"] ?? throw new ConfigurationErrorsException(string.Format(configValueNotFoundString, "service_host_name")); servicePort = serviceConfig["service_port"] ?? throw new ConfigurationErrorsException(string.Format(configValueNotFoundString, "service_port")); var modulKassaConfig = configuration.GetSection("ModulKassa"); modulKassaBaseAddress = modulKassaConfig["base_address"] ?? throw new ConfigurationErrorsException(string.Format(configValueNotFoundString, "base_address")); var mysqlConfig = configuration.GetSection("MySql"); mysqlServerHostName = mysqlConfig["mysql_server_host_name"] ?? throw new ConfigurationErrorsException(string.Format(configValueNotFoundString, "mysql_server_host_name")); mysqlServerPort = mysqlConfig["mysql_server_port"] ?? throw new ConfigurationErrorsException(string.Format(configValueNotFoundString, "mysql_server_port")); mysqlUser = mysqlConfig["mysql_user"] ?? throw new ConfigurationErrorsException(string.Format(configValueNotFoundString, "mysql_user")); mysqlPassword = mysqlConfig["mysql_password"] ?? throw new ConfigurationErrorsException(string.Format(configValueNotFoundString, "mysql_password")); mysqlDatabase = mysqlConfig["mysql_database"] ?? throw new ConfigurationErrorsException(string.Format(configValueNotFoundString, "mysql_database")); cashboxes = new List <CashBox>(); var cashboxesConfig = configuration.GetSection("Cashboxes")?.GetChildren() ?? throw new ConfigurationErrorsException(string.Format(configValueNotFoundString, "Cashboxes")); foreach (var cashboxConfig in cashboxesConfig) { string stringId = cashboxConfig["id"]; if (string.IsNullOrWhiteSpace(stringId) || !int.TryParse(stringId, out int id)) { throw new ConfigurationErrorsException(string.Format(configValueNotFoundString, "id")); } string stringUserName = cashboxConfig["user_name"]; if (string.IsNullOrWhiteSpace(stringUserName) || !Guid.TryParse(stringUserName, out Guid userName)) { throw new ConfigurationErrorsException(string.Format(configValueNotFoundString, "user_name")); } var cashBox = new CashBox { Id = id, UserName = userName, RetailPointName = cashboxConfig["retail_point_name"] ?? throw new ConfigurationErrorsException(string.Format(configValueNotFoundString, "retail_point_name")), Password = cashboxConfig["password"] ?? throw new ConfigurationErrorsException(string.Format(configValueNotFoundString, "password")), }; cashboxes.Add(cashBox); } if (!cashboxes.Any()) { throw new ConfigurationErrorsException( $"В конфигурационном файле не найдено данных ни для одной кассы ({nameof(CashBox)})"); } } catch (Exception ex) { logger.Fatal(ex, "Ошибка чтения конфигурационного файла."); return; } logger.Info("Настройка подключения к БД..."); try { var conStrBuilder = new MySqlConnectionStringBuilder { Server = mysqlServerHostName, Port = UInt32.Parse(mysqlServerPort), Database = mysqlDatabase, UserID = mysqlUser, Password = mysqlPassword, SslMode = MySqlSslMode.None }; var dbConfig = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .ConnectionString(conStrBuilder.GetConnectionString(true)); OrmConfig.ConfigureOrm( dbConfig, new[] { System.Reflection.Assembly.GetAssembly(typeof(QS.Banks.Domain.Bank)), System.Reflection.Assembly.GetAssembly(typeof(Vodovoz.HibernateMapping.OrganizationMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.HistoryLog.HistoryMain)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.Domain.UserBase)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.HibernateMapping.TypeOfEntityMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.Attachments.Domain.Attachment)) } ); QS.HistoryLog.HistoryMain.Enable(); } catch (Exception ex) { logger.Fatal(ex, "Ошибка в настройке подключения к БД."); return; } try { ReceiptServiceStarter.StartService(serviceHostName, servicePort, modulKassaBaseAddress, cashboxes); if (Environment.OSVersion.Platform == PlatformID.Unix) { UnixSignal[] signals = { new UnixSignal(Signum.SIGINT), new UnixSignal(Signum.SIGHUP), new UnixSignal(Signum.SIGTERM) }; UnixSignal.WaitAny(signals); } else { Console.ReadLine(); } } catch (Exception e) { logger.Fatal(e); } finally { if (Environment.OSVersion.Platform == PlatformID.Unix) { Thread.CurrentThread.Abort(); } Environment.Exit(0); } }
public static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += AppDomain_CurrentDomain_UnhandledException; try { IniConfigSource confFile = new IniConfigSource(configFile); confFile.Reload(); IConfig serviceConfig = confFile.Configs["Service"]; serviceHostName = serviceConfig.GetString("service_host_name"); servicePort = serviceConfig.GetString("service_port"); IConfig osrmConfig = confFile.Configs["OsrmService"]; serverUrl = osrmConfig.GetString("server_url"); IConfig mysqlConfig = confFile.Configs["Mysql"]; mysqlServerHostName = mysqlConfig.GetString("mysql_server_host_name"); mysqlServerPort = mysqlConfig.GetString("mysql_server_port", "3306"); mysqlUser = mysqlConfig.GetString("mysql_user"); mysqlPassword = mysqlConfig.GetString("mysql_password"); mysqlDatabase = mysqlConfig.GetString("mysql_database"); } catch (Exception ex) { logger.Fatal(ex, "Ошибка чтения конфигурационного файла."); return; } logger.Info(String.Format("Запуск службы правил доставки")); try { var conStrBuilder = new MySqlConnectionStringBuilder(); conStrBuilder.Server = mysqlServerHostName; conStrBuilder.Port = UInt32.Parse(mysqlServerPort); conStrBuilder.Database = mysqlDatabase; conStrBuilder.UserID = mysqlUser; conStrBuilder.Password = mysqlPassword; conStrBuilder.SslMode = MySqlSslMode.None; QSMain.ConnectionString = conStrBuilder.GetConnectionString(true); var db_config = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .Dialect <NHibernate.Spatial.Dialect.MySQL57SpatialDialect>() .ConnectionString(QSMain.ConnectionString); OrmConfig.ConfigureOrm(db_config, new System.Reflection.Assembly[] { System.Reflection.Assembly.GetAssembly(typeof(Vodovoz.HibernateMapping.OrganizationMap)), System.Reflection.Assembly.GetAssembly(typeof(Bank)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.Domain.UserBase)) }); OsrmMain.ServerUrl = serverUrl; IDeliveryRepository deliveryRepository = new DeliveryRepository(); DeliveryRulesInstanceProvider deliveryRulesInstanceProvider = new DeliveryRulesInstanceProvider(deliveryRepository); ServiceHost deliveryRulesHost = new DeliveryRulesServiceHost(deliveryRulesInstanceProvider); ServiceEndpoint webEndPoint = deliveryRulesHost.AddServiceEndpoint( typeof(IDeliveryRulesService), new WebHttpBinding(), $"http://{serviceHostName}:{servicePort}/DeliveryRules" ); WebHttpBehavior httpBehavior = new WebHttpBehavior(); webEndPoint.Behaviors.Add(httpBehavior); #if DEBUG deliveryRulesHost.Description.Behaviors.Add(new PreFilter()); #endif deliveryRulesHost.Open(); logger.Info("Server started."); UnixSignal[] signals = { new UnixSignal(Signum.SIGINT), new UnixSignal(Signum.SIGHUP), new UnixSignal(Signum.SIGTERM) }; UnixSignal.WaitAny(signals); } catch (Exception e) { logger.Fatal(e); } finally { if (Environment.OSVersion.Platform == PlatformID.Unix) { Thread.CurrentThread.Abort(); } Environment.Exit(0); } }
static void CreateBaseConfig() { logger.Info("Настройка параметров базы..."); //Увеличиваем таймоут QSMain.ConnectionString += ";ConnectionTimeout=120"; var db_config = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .Dialect <MySQL57SpatialExtendedDialect>() .ConnectionString(QSMain.ConnectionString) .AdoNetBatchSize(100) .Driver <LoggedMySqlClientDriver>(); // Настройка ORM OrmConfig.ConfigureOrm( db_config, new System.Reflection.Assembly[] { System.Reflection.Assembly.GetAssembly(typeof(QS.Project.HibernateMapping.UserBaseMap)), System.Reflection.Assembly.GetAssembly(typeof(HibernateMapping.OrganizationMap)), System.Reflection.Assembly.GetAssembly(typeof(Bank)), System.Reflection.Assembly.GetAssembly(typeof(HistoryMain)), }, (cnf) => { cnf.DataBaseIntegration( dbi => { dbi.BatchSize = 100; dbi.Batcher <MySqlClientBatchingBatcherFactory>(); } ); } ); #region Dialogs mapping OrmMain.ClassMappingList = new List <IOrmObjectMapping> { //Простые справочники OrmObjectMapping <CullingCategory> .Create().DefaultTableView().SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <Nationality> .Create().DefaultTableView().SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <Citizenship> .Create().DefaultTableView().SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <Manufacturer> .Create().DefaultTableView().SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <EquipmentColors> .Create().DefaultTableView().SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <User> .Create().DefaultTableView().SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <UserSettings> .Create().Dialog <UserSettingsView>(), OrmObjectMapping <FuelType> .Create().Dialog <FuelTypeDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).SearchColumn("Стоимость", x => x.Cost.ToString()).End(), OrmObjectMapping <MovementWagon> .Create().Dialog <MovementWagonViewModel>().DefaultTableView().SearchColumn("Название", x => x.Name).End(), //Остальные справочники OrmObjectMapping <CarProxyDocument> .Create().Dialog <CarProxyDlg>(), OrmObjectMapping <M2ProxyDocument> .Create().Dialog <M2ProxyDlg>(), OrmObjectMapping <ProductGroup> .Create().Dialog <ProductGroupDlg>(), OrmObjectMapping <CommentTemplate> .Create().Dialog <CommentTemplateDlg>().DefaultTableView().SearchColumn("Шаблон комментария", x => x.Comment).End(), OrmObjectMapping <FineTemplate> .Create().Dialog <FineTemplateDlg>().DefaultTableView().SearchColumn("Шаблон комментария", x => x.Reason).End(), OrmObjectMapping <PremiumTemplate> .Create().Dialog <PremiumTemplateDlg>().DefaultTableView().SearchColumn("Шаблон комментария", x => x.Reason).End(), OrmObjectMapping <MeasurementUnits> .Create().Dialog <MeasurementUnitsDlg>().DefaultTableView().SearchColumn("ОКЕИ", x => x.OKEI).SearchColumn("Название", x => x.Name).Column("Точность", x => x.Digits.ToString()).End(), OrmObjectMapping <Contact> .Create().Dialog <ContactDlg>() .DefaultTableView().SearchColumn("Фамилия", x => x.Surname).SearchColumn("Имя", x => x.Name).SearchColumn("Отчество", x => x.Patronymic).End(), OrmObjectMapping <Order> .Create().Dialog <OrderDlg>().PopupMenu(OrderPopupMenu.GetPopupMenu), OrmObjectMapping <UndeliveredOrder> .Create().Dialog <UndeliveredOrderDlg>(), OrmObjectMapping <Organization> .Create().Dialog <OrganizationDlg>().DefaultTableView().Column("Код", x => x.Id.ToString()).SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <DeliverySchedule> .Create().Dialog <DeliveryScheduleDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).SearchColumn("Время доставки", x => x.DeliveryTime).End(), OrmObjectMapping <ProductSpecification> .Create().Dialog <ProductSpecificationDlg>().DefaultTableView().SearchColumn("Код", x => x.Id.ToString()).SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <EquipmentType> .Create().Dialog <EquipmentTypeDlg>().DefaultTableView().Column("Название", equipmentType => equipmentType.Name).End(), //Связанное с клиентом OrmObjectMapping <Proxy> .Create().Dialog <ProxyDlg>() .DefaultTableView().SearchColumn("Номер", x => x.Number).SearchColumn("С", x => x.StartDate.ToShortDateString()).SearchColumn("По", x => x.ExpirationDate.ToShortDateString()).End(), OrmObjectMapping <DeliveryPoint> .Create().Dialog <DeliveryPointDlg>().DefaultTableView().SearchColumn("ID", x => x.Id.ToString()).Column("Адрес", x => x.Title).End(), OrmObjectMapping <PaidRentPackage> .Create().Dialog <PaidRentPackageDlg>() .DefaultTableView().SearchColumn("Название", x => x.Name).Column("Тип оборудования", x => x.EquipmentType.Name).SearchColumn("Цена в сутки", x => CurrencyWorks.GetShortCurrencyString(x.PriceDaily)).SearchColumn("Цена в месяц", x => CurrencyWorks.GetShortCurrencyString(x.PriceMonthly)).End(), OrmObjectMapping <FreeRentPackage> .Create().Dialog <FreeRentPackageDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).Column("Тип оборудования", x => x.EquipmentType.Name).OrderAsc(x => x.Name).End(), OrmObjectMapping <Counterparty> .Create().Dialog <CounterpartyDlg>().DefaultTableView().SearchColumn("Название", x => x.FullName).End(), OrmObjectMapping <Tag> .Create().Dialog <TagDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <CounterpartyContract> .Create().Dialog <CounterpartyContractDlg>(), OrmObjectMapping <DocTemplate> .Create().Dialog <DocTemplateDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).Column("Тип", x => x.TemplateType.GetEnumTitle()).End(), OrmObjectMapping <TransferOperationDocument> .Create().Dialog <TransferOperationDocumentDlg>(), //Справочники с фильтрами OrmObjectMapping <Equipment> .Create().Dialog <EquipmentDlg>().JournalFilter <EquipmentFilter>() .DefaultTableView().Column("Код", x => x.Id.ToString()).SearchColumn("Номенклатура", x => x.NomenclatureName).Column("Тип", x => x.Nomenclature.Type.Name).SearchColumn("Серийный номер", x => x.Serial).Column("Дата последней обработки", x => x.LastServiceDate.ToShortDateString()).End(), //Логисткика OrmObjectMapping <RouteList> .Create().Dialog <RouteListCreateDlg>() .DefaultTableView().SearchColumn("Номер", x => x.Id.ToString()).Column("Дата", x => x.Date.ToShortDateString()).Column("Статус", x => x.Status.GetEnumTitle()).SearchColumn("Водитель", x => String.Format("{0} - {1}", x.Driver.FullName, x.Car.Title)).End(), OrmObjectMapping <RouteColumn> .Create().DefaultTableView().Column("Код", x => x.Id.ToString()).SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <DeliveryShift> .Create().Dialog <DeliveryShiftDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).SearchColumn("Диапазон времени", x => x.DeliveryTime).End(), OrmObjectMapping <DeliveryDaySchedule> .Create().Dialog <DeliveryDayScheduleDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).End(), //Сервис OrmObjectMapping <ServiceClaim> .Create().Dialog <ServiceClaimDlg>().DefaultTableView().Column("Номер", x => x.Id.ToString()).Column("Тип", x => x.ServiceClaimType.GetEnumTitle()).Column("Оборудование", x => x.Equipment.Title).Column("Подмена", x => x.ReplacementEquipment != null ? "Да" : "Нет").Column("Точка доставки", x => x.DeliveryPoint.Title).End(), //Касса OrmObjectMapping <Income> .Create().Dialog <CashIncomeDlg> (), OrmObjectMapping <ExpenseCategory> .Create().Dialog <ExpenseCategoryViewModel>().DefaultTableView().Column("Код", x => x.Id.ToString()).SearchColumn("Название", e => e.Name).Column("Тип документа", e => e.ExpenseDocumentType.GetEnumTitle()).TreeConfig(new RecursiveTreeConfig <ExpenseCategory>(x => x.Parent, x => x.Childs)).End(), OrmObjectMapping <Expense> .Create().Dialog <CashExpenseDlg> (), OrmObjectMapping <AdvanceReport> .Create().Dialog <AdvanceReportDlg> (), OrmObjectMapping <Fine> .Create().Dialog <FineDlg> (), OrmObjectMapping <Premium> .Create().Dialog <PremiumDlg> (), OrmObjectMapping <IncomeCashTransferDocument> .Create().Dialog <IncomeCashTransferDlg>(), OrmObjectMapping <CommonCashTransferDocument> .Create().Dialog <CommonCashTransferDlg>(), //Банкинг OrmObjectMapping <AccountIncome> .Create(), OrmObjectMapping <AccountExpense> .Create(), //Склад OrmObjectMapping <Warehouse> .Create().Dialog <WarehouseDlg>().DefaultTableView().Column("Название", w => w.Name).Column("В архиве", w => w.IsArchive ? "Да":"").End(), OrmObjectMapping <RegradingOfGoodsTemplate> .Create().Dialog <RegradingOfGoodsTemplateDlg>().DefaultTableView().Column("Название", w => w.Name).End() }; #region Складские документы OrmMain.AddObjectDescription <IncomingWater>().Dialog <IncomingWaterDlg>(); OrmMain.AddObjectDescription <WriteoffDocument>().Dialog <WriteoffDocumentDlg>(); OrmMain.AddObjectDescription <InventoryDocument>().Dialog <InventoryDocumentDlg>(); OrmMain.AddObjectDescription <ShiftChangeWarehouseDocument>().Dialog <ShiftChangeWarehouseDocumentDlg>(); OrmMain.AddObjectDescription <RegradingOfGoodsDocument>().Dialog <RegradingOfGoodsDocumentDlg>(); OrmMain.AddObjectDescription <SelfDeliveryDocument>().Dialog <SelfDeliveryDocumentDlg>(); OrmMain.AddObjectDescription <CarLoadDocument>().Dialog <CarLoadDocumentDlg>(); OrmMain.AddObjectDescription <CarUnloadDocument>().Dialog <CarUnloadDocumentDlg>(); #endregion #region Goods OrmMain.AddObjectDescription <Nomenclature>().Dialog <NomenclatureDlg>().JournalFilter <NomenclatureFilter>(). DefaultTableView() .SearchColumn("Код", x => x.Id.ToString()) .SearchColumn("Название", x => x.Name) .Column("Тип", x => x.CategoryString) .SearchColumn("Номер в ИМ", x => x.OnlineStoreExternalId) .End(); OrmMain.AddObjectDescription <Folder1c>().Dialog <Folder1cDlg>() .DefaultTableView() .SearchColumn("Код 1С", x => x.Code1c) .SearchColumn("Название", x => x.Name) .TreeConfig(new RecursiveTreeConfig <Folder1c>(x => x.Parent, x => x.Childs)).End(); #endregion #region Простые справочники OrmMain.AddObjectDescription <DiscountReason>() .DefaultTableView() .SearchColumn("Название", x => x.Name) .End(); OrmMain.AddObjectDescription <GeographicGroup>() .Dialog <GeographicGroupDlg>() .DefaultTableView() .SearchColumn("Название", x => x.Name) .Column("Код", x => x.Id.ToString()) .End(); OrmMain.AddObjectDescription <TariffZone>() .DefaultTableView() .SearchColumn("Номер", x => x.Id.ToString()) .SearchColumn("Название", x => x.Name) .End(); OrmMain.AddObjectDescription <NonReturnReason>() .DefaultTableView() .SearchColumn("Код", x => x.Id.ToString()) .SearchColumn("Название", x => x.Name) .End(); OrmMain.AddObjectDescription <PaymentFrom>() .DefaultTableView() .SearchColumn("Код", x => x.Id.ToString()) .SearchColumn("Название", x => x.Name) .End(); OrmMain.AddObjectDescription <Post>() .DefaultTableView() .SearchColumn("Код", x => x.Id.ToString()) .SearchColumn("Название", x => x.Name) .End(); #endregion #region неПростые справочники OrmMain.AddObjectDescription <Subdivision>().Dialog <SubdivisionDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).Column("Руководитель", x => x.Chief == null ? "" : x.Chief.ShortName).SearchColumn("Номер", x => x.Id.ToString()).TreeConfig(new RecursiveTreeConfig <Subdivision>(x => x.ParentSubdivision, x => x.ChildSubdivisions)).End(); OrmMain.AddObjectDescription <TypeOfEntity>() .Dialog <TypeOfEntityDlg>() .DefaultTableView() .SearchColumn("Тип документа", x => TypeOfEntityRepository.GetEntityNameByString(x.Type)) .SearchColumn("Название документа", x => x.CustomName) .SearchColumn("Код", x => x.Id.ToString()) .Column("Активно", x => !x.IsActive ? "нет" : String.Empty) .SearchColumn("Имя класса", x => x.Type) .OrderAsc(x => x.CustomName) .End(); OrmMain.AddObjectDescription <Employee>().Dialog <EmployeeDlg>().DefaultTableView() .Column("Код", x => x.Id.ToString()) .SearchColumn("Ф.И.О.", x => x.FullName) .Column("Категория", x => x.Category.GetEnumTitle()) .OrderAsc(x => x.LastName).OrderAsc(x => x.Name).OrderAsc(x => x.Patronymic) .End(); OrmMain.AddObjectDescription <Trainee>().Dialog <TraineeDlg>().DefaultTableView() .Column("Код", x => x.Id.ToString()) .SearchColumn("Ф.И.О.", x => x.FullName) .OrderAsc(x => x.LastName).OrderAsc(x => x.Name).OrderAsc(x => x.Patronymic) .End(); OrmMain.AddObjectDescription <DeliveryPriceRule>().Dialog <DeliveryPriceRuleDlg>().DefaultTableView() .Column("< 19л б.", x => x.Water19LCount.ToString()) .Column("< 6л б.", x => x.Water6LCount) .Column("< 1,5л б.", x => x.Water1500mlCount) .Column("< 0,6л б.", x => x.Water600mlCount) .Column("Минимальная сумма заказа", x => x.OrderMinSumEShopGoods.ToString()) .SearchColumn("Описание правила", x => x.Title) .End(); OrmMain.AddObjectDescription <Car>().Dialog <CarsDlg>().DefaultTableView() .SearchColumn("Код", x => x.Id.ToString()) .SearchColumn("Модель а/м", x => x.Model) .SearchColumn("Гос. номер", x => x.RegistrationNumber) .SearchColumn("Водитель", x => x.Driver != null ? x.Driver.FullName : string.Empty) .End(); OrmMain.AddObjectDescription <Certificate>().Dialog <CertificateDlg>().DefaultTableView() .SearchColumn("Имя", x => x.Name) .Column("Тип", x => x.TypeOfCertificate.GetEnumTitle()) .SearchColumn("Номер", x => x.Id.ToString()) .SearchColumn("Начало срока", x => x.StartDate.HasValue ? x.StartDate.Value.ToString("dd.MM.yyyy") : "Ошибка!") .SearchColumn("Окончание срока", x => x.ExpirationDate.HasValue ? x.ExpirationDate.Value.ToString("dd.MM.yyyy") : "Бессрочно") .Column("Архивный?", x => x.IsArchive ? "Да" : string.Empty) .OrderAsc(x => x.IsArchive) .OrderAsc(x => x.Id) .End(); OrmMain.AddObjectDescription <StoredImageResource>().Dialog <ImageLoaderDlg>().DefaultTableView() .SearchColumn("Номер", x => x.Id.ToString()) .SearchColumn("Название", x => x.Name) .End(); OrmMain.AddObjectDescription <DeliveryPointCategory>().Dialog <DeliveryPointCategoryDlg>().DefaultTableView() .SearchColumn("Код", x => x.Id.ToString()) .SearchColumn("Название", x => x.Name) .Column("В архиве?", x => x.IsArchive ? "Да" : "Нет") .OrderAsc(x => x.Name) .End(); OrmMain.AddObjectDescription <CounterpartyActivityKind>().Dialog <CounterpartyActivityKindDlg>().DefaultTableView() .SearchColumn("Код", x => x.Id.ToString()) .SearchColumn("Название", x => x.Name) .End(); #endregion OrmMain.ClassMappingList.AddRange(QSBanks.QSBanksMain.GetModuleMaping()); #endregion HistoryMain.Enable(); TemplatePrinter.InitPrinter(); ImagePrinter.InitPrinter(); //Настройка ParentReference ParentReferenceConfig.AddActions(new ParentReferenceActions <Organization, Account> { AddNewChild = (o, a) => o.AddAccount(a) }); ParentReferenceConfig.AddActions(new ParentReferenceActions <Counterparty, Account> { AddNewChild = (c, a) => c.AddAccount(a) }); ParentReferenceConfig.AddActions(new ParentReferenceActions <Employee, Account> { AddNewChild = (c, a) => c.AddAccount(a) }); ParentReferenceConfig.AddActions(new ParentReferenceActions <Trainee, Account> { AddNewChild = (c, a) => c.AddAccount(a) }); }
public static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += AppDomain_CurrentDomain_UnhandledException; AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit; try { var builder = new ConfigurationBuilder() .AddIniFile(configFile, optional: false); var configuration = builder.Build(); var serviceSection = configuration.GetSection("Service"); serviceHostName = serviceSection["service_host_name"]; servicePort = serviceSection["service_port"]; serviceWebPort = serviceSection["service_web_port"]; var mysqlSection = configuration.GetSection("Mysql"); mysqlServerHostName = mysqlSection["mysql_server_host_name"]; mysqlServerPort = mysqlSection["mysql_server_port"]; mysqlUser = mysqlSection["mysql_user"]; mysqlPassword = mysqlSection["mysql_password"]; mysqlDatabase = mysqlSection["mysql_database"]; } catch (Exception ex) { logger.Fatal(ex, "Ошибка чтения конфигурационного файла."); return; } logger.Info("Запуск службы отправки электронной почты"); try { var conStrBuilder = new MySqlConnectionStringBuilder(); conStrBuilder.Server = mysqlServerHostName; conStrBuilder.Port = uint.Parse(mysqlServerPort); conStrBuilder.Database = mysqlDatabase; conStrBuilder.UserID = mysqlUser; conStrBuilder.Password = mysqlPassword; conStrBuilder.SslMode = MySqlSslMode.None; QSMain.ConnectionString = conStrBuilder.GetConnectionString(true); var db_config = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .Dialect <NHibernate.Spatial.Dialect.MySQL57SpatialDialect>() .ConnectionString(QSMain.ConnectionString); OrmConfig.ConfigureOrm(db_config, new System.Reflection.Assembly[] { System.Reflection.Assembly.GetAssembly(typeof(Vodovoz.HibernateMapping.OrganizationMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.Banks.Domain.Bank)), System.Reflection.Assembly.GetAssembly(typeof(EmailService.OrderEmail)), System.Reflection.Assembly.GetAssembly(typeof(QS.HistoryLog.HistoryMain)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.Domain.UserBase)) }); QS.HistoryLog.HistoryMain.Enable(); EmailInstanceProvider emailInstanceProvider = new EmailInstanceProvider(new BaseParametersProvider(new ParametersProvider())); ServiceHost EmailSendingHost = new EmailServiceHost(emailInstanceProvider); ServiceHost MailjetEventsHost = new EmailServiceHost(emailInstanceProvider); ServiceEndpoint webEndPoint = EmailSendingHost.AddServiceEndpoint( typeof(IEmailServiceWeb), new WebHttpBinding(), String.Format("http://{0}:{1}/EmailServiceWeb", serviceHostName, serviceWebPort) ); WebHttpBehavior httpBehavior = new WebHttpBehavior(); webEndPoint.Behaviors.Add(httpBehavior); EmailSendingHost.AddServiceEndpoint( typeof(IEmailService), new BasicHttpBinding(), String.Format("http://{0}:{1}/EmailService", serviceHostName, servicePort) ); var mailjetEndPoint = MailjetEventsHost.AddServiceEndpoint( typeof(IMailjetEventService), new WebHttpBinding(), String.Format("http://{0}:{1}/Mailjet", serviceHostName, servicePort) ); WebHttpBehavior mailjetHttpBehavior = new WebHttpBehavior(); mailjetEndPoint.Behaviors.Add(httpBehavior); #if DEBUG EmailSendingHost.Description.Behaviors.Add(new PreFilter()); MailjetEventsHost.Description.Behaviors.Add(new PreFilter()); #endif EmailSendingHost.Open(); MailjetEventsHost.Open(); logger.Info("Server started."); if (Environment.OSVersion.Platform == PlatformID.Unix) { UnixSignal[] signals = { new UnixSignal(Signum.SIGINT), new UnixSignal(Signum.SIGHUP), new UnixSignal(Signum.SIGTERM) }; UnixSignal.WaitAny(signals); } else { Console.ReadLine(); } } catch (Exception e) { logger.Fatal(e); } finally { if (Environment.OSVersion.Platform == PlatformID.Unix) { Thread.CurrentThread.Abort(); } Environment.Exit(0); } }
public static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += AppDomain_CurrentDomain_UnhandledException; try { IniConfigSource confFile = new IniConfigSource(configFile); confFile.Reload(); IConfig serviceConfig = confFile.Configs["Service"]; serviceHostName = serviceConfig.GetString("service_host_name"); servicePort = serviceConfig.GetString("service_port"); serviceWebPort = serviceConfig.GetString("service_web_port"); driverServiceHostName = serviceConfig.GetString("driver_service_host_name"); driverServicePort = serviceConfig.GetString("driver_service_port"); IConfig bitrixConfig = confFile.Configs["Bitrix"]; baseAddress = bitrixConfig.GetString("base_address"); IConfig mysqlConfig = confFile.Configs["Mysql"]; mysqlServerHostName = mysqlConfig.GetString("mysql_server_host_name"); mysqlServerPort = mysqlConfig.GetString("mysql_server_port", "3306"); mysqlUser = mysqlConfig.GetString("mysql_user"); mysqlPassword = mysqlConfig.GetString("mysql_password"); mysqlDatabase = mysqlConfig.GetString("mysql_database"); } catch (Exception ex) { logger.Fatal(ex, "Ошибка чтения конфигурационного файла."); return; } logger.Info("Запуск службы оплаты заказов по sms"); try { var conStrBuilder = new MySqlConnectionStringBuilder { Server = mysqlServerHostName, Port = UInt32.Parse(mysqlServerPort), Database = mysqlDatabase, UserID = mysqlUser, Password = mysqlPassword, SslMode = MySqlSslMode.None }; QSMain.ConnectionString = conStrBuilder.GetConnectionString(true); var dbConfig = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .Dialect <NHibernate.Spatial.Dialect.MySQL57SpatialDialect>() .ConnectionString(QSMain.ConnectionString); OrmConfig.ConfigureOrm(dbConfig, new[] { System.Reflection.Assembly.GetAssembly(typeof(Vodovoz.HibernateMapping.OrganizationMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.Banks.Domain.Bank)), System.Reflection.Assembly.GetAssembly(typeof(QS.HistoryLog.HistoryMain)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.Domain.UserBase)) }); MainSupport.LoadBaseParameters(); QS.HistoryLog.HistoryMain.Enable(); ChannelFactory <IAndroidDriverService> channelFactory = new ChannelFactory <IAndroidDriverService>( new BasicHttpBinding(), string.Format("http://{0}:{1}/AndroidDriverService", driverServiceHostName, driverServicePort) ); IDriverPaymentService driverPaymentService = new DriverPaymentService(channelFactory); var paymentSender = new BitrixPaymentWorker(baseAddress); SmsPaymentServiceInstanceProvider smsPaymentServiceInstanceProvider = new SmsPaymentServiceInstanceProvider(paymentSender, driverPaymentService); ServiceHost smsPaymentServiceHost = new SmsPaymentServiceHost(smsPaymentServiceInstanceProvider); ServiceEndpoint webEndPoint = smsPaymentServiceHost.AddServiceEndpoint( typeof(ISmsPaymentService), new WebHttpBinding(), $"http://{serviceHostName}:{serviceWebPort}/SmsPaymentWebService" ); WebHttpBehavior httpBehavior = new WebHttpBehavior(); webEndPoint.Behaviors.Add(httpBehavior); smsPaymentServiceHost.AddServiceEndpoint( typeof(ISmsPaymentService), new BasicHttpBinding(), $"http://{serviceHostName}:{servicePort}/SmsPaymentService" ); smsPaymentServiceHost.Description.Behaviors.Add(new PreFilter()); smsPaymentServiceHost.Open(); logger.Info("Server started."); (smsPaymentServiceInstanceProvider.GetInstance(null) as ISmsPaymentService)?.SynchronizePaymentStatuses(); UnixSignal[] signals = { new UnixSignal(Signum.SIGINT), new UnixSignal(Signum.SIGHUP), new UnixSignal(Signum.SIGTERM) }; UnixSignal.WaitAny(signals); } catch (Exception e) { logger.Fatal(e); } finally { if (Environment.OSVersion.Platform == PlatformID.Unix) { Thread.CurrentThread.Abort(); } Environment.Exit(0); } }
static void CreateBaseConfig() { logger.Info("Настройка параметров базы..."); //Увеличиваем таймоут QSMain.ConnectionString += ";ConnectionTimeout=120"; var db_config = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .Dialect <NHibernate.Spatial.Dialect.MySQL57SpatialDialect>() .ConnectionString(QSMain.ConnectionString) .AdoNetBatchSize(100) .ShowSql() .FormatSql(); // Настройка ORM OrmConfig.ConfigureOrm(db_config, new System.Reflection.Assembly[] { System.Reflection.Assembly.GetAssembly(typeof(QS.Project.HibernateMapping.UserBaseMap)), System.Reflection.Assembly.GetAssembly(typeof(Vodovoz.HibernateMapping.OrganizationMap)), System.Reflection.Assembly.GetAssembly(typeof(QSBanks.QSBanksMain)), System.Reflection.Assembly.GetAssembly(typeof(QSContacts.QSContactsMain)), System.Reflection.Assembly.GetAssembly(typeof(QS.HistoryLog.HistoryMain)), }, (cnf) => cnf.DataBaseIntegration( dbi => { dbi.BatchSize = 100; dbi.Batcher <MySqlClientBatchingBatcherFactory>(); } )); #region Dialogs mapping OrmMain.ClassMappingList = new List <IOrmObjectMapping> { //Простые справочники OrmObjectMapping <CullingCategory> .Create().DefaultTableView().SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <Nationality> .Create().DefaultTableView().SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <Manufacturer> .Create().DefaultTableView().SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <EquipmentColors> .Create().DefaultTableView().SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <User> .Create().DefaultTableView().SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <UserSettings> .Create().Dialog <UserSettingsDlg>(), OrmObjectMapping <FuelType> .Create().Dialog <FuelTypeDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).SearchColumn("Стоимость", x => x.Cost.ToString()).End(), OrmObjectMapping <MovementWagon> .Create().DefaultTableView().SearchColumn("Название", x => x.Name).End(), //Остальные справочники //OrmObjectMapping<CarProxyDocument>.Create().Dialog<ProxyDocumentDlg>().DefaultTableView().SearchColumn("Водитель", x => x.Driver != null ? x.Driver.Title : "").End(), OrmObjectMapping <CarProxyDocument> .Create().Dialog <CarProxyDlg>(), OrmObjectMapping <M2ProxyDocument> .Create().Dialog <M2ProxyDlg>(), OrmObjectMapping <CommentTemplate> .Create().Dialog <CommentTemplateDlg>().DefaultTableView().SearchColumn("Шаблон комментария", x => x.Comment).End(), OrmObjectMapping <FineTemplate> .Create().Dialog <FineTemplateDlg>().DefaultTableView().SearchColumn("Шаблон комментария", x => x.Reason).End(), OrmObjectMapping <PremiumTemplate> .Create().Dialog <PremiumTemplateDlg>().DefaultTableView().SearchColumn("Шаблон комментария", x => x.Reason).End(), OrmObjectMapping <MeasurementUnits> .Create().Dialog <MeasurementUnitsDlg>().DefaultTableView().SearchColumn("ОКЕИ", x => x.OKEI).SearchColumn("Название", x => x.Name).Column("Точность", x => x.Digits.ToString()).End(), OrmObjectMapping <Contact> .Create().Dialog <ContactDlg>() .DefaultTableView().SearchColumn("Фамилия", x => x.Surname).SearchColumn("Имя", x => x.Name).SearchColumn("Отчество", x => x.Patronymic).End(), OrmObjectMapping <Car> .Create().Dialog <CarsDlg>() .DefaultTableView().SearchColumn("Модель а/м", x => x.Model).SearchColumn("Гос. номер", x => x.RegistrationNumber).SearchColumn("Водитель", x => x.Driver != null ? x.Driver.FullName : String.Empty).End(), OrmObjectMapping <Order> .Create().Dialog <OrderDlg>().PopupMenu(OrderPopupMenu.GetPopupMenu), OrmObjectMapping <UndeliveredOrder> .Create().Dialog <UndeliveredOrderDlg>(), OrmObjectMapping <Organization> .Create().Dialog <OrganizationDlg>().DefaultTableView().Column("Код", x => x.Id.ToString()).SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <DeliverySchedule> .Create().Dialog <DeliveryScheduleDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).SearchColumn("Время доставки", x => x.DeliveryTime).End(), OrmObjectMapping <ProductSpecification> .Create().Dialog <ProductSpecificationDlg>().DefaultTableView().SearchColumn("Код", x => x.Id.ToString()).SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <EquipmentType> .Create().Dialog <EquipmentTypeDlg>().DefaultTableView().Column("Название", equipmentType => equipmentType.Name).End(), //Связанное с клиентом OrmObjectMapping <Proxy> .Create().Dialog <ProxyDlg>() .DefaultTableView().SearchColumn("Номер", x => x.Number).SearchColumn("С", x => x.StartDate.ToShortDateString()).SearchColumn("По", x => x.ExpirationDate.ToShortDateString()).End(), OrmObjectMapping <DeliveryPoint> .Create().Dialog <DeliveryPointDlg>().DefaultTableView().SearchColumn("ID", x => x.Id.ToString()).Column("Адрес", x => x.Title).End(), OrmObjectMapping <PaidRentPackage> .Create().Dialog <PaidRentPackageDlg>() .DefaultTableView().SearchColumn("Название", x => x.Name).Column("Тип оборудования", x => x.EquipmentType.Name).SearchColumn("Цена в сутки", x => CurrencyWorks.GetShortCurrencyString(x.PriceDaily)).SearchColumn("Цена в месяц", x => CurrencyWorks.GetShortCurrencyString(x.PriceMonthly)).End(), OrmObjectMapping <FreeRentPackage> .Create().Dialog <FreeRentPackageDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).Column("Тип оборудования", x => x.EquipmentType.Name).OrderAsc(x => x.Name).End(), OrmObjectMapping <FreeRentAgreement> .Create().Dialog <FreeRentAgreementDlg>(), OrmObjectMapping <DailyRentAgreement> .Create().Dialog <DailyRentAgreementDlg>(), OrmObjectMapping <NonfreeRentAgreement> .Create().Dialog <NonFreeRentAgreementDlg>(), OrmObjectMapping <SalesEquipmentAgreement> .Create().Dialog <EquipSalesAgreementDlg>(), OrmObjectMapping <WaterSalesAgreement> .Create().Dialog <WaterAgreementDlg>(), OrmObjectMapping <RepairAgreement> .Create().Dialog <RepairAgreementDlg>(), OrmObjectMapping <Counterparty> .Create().Dialog <CounterpartyDlg>().DefaultTableView().SearchColumn("Название", x => x.FullName).End(), OrmObjectMapping <Tag> .Create().Dialog <TagDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <ClientCameFrom> .Create().Dialog <ClientCameFromDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <CounterpartyContract> .Create().Dialog <CounterpartyContractDlg>(), OrmObjectMapping <DocTemplate> .Create().Dialog <DocTemplateDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).Column("Тип", x => x.TemplateType.GetEnumTitle()).End(), OrmObjectMapping <Residue> .Create().Dialog <ResidueDlg>(), OrmObjectMapping <TransferOperationDocument> .Create().Dialog <TransferOperationDocumentDlg>(), //Справочники с фильтрами OrmObjectMapping <Equipment> .Create().Dialog <EquipmentDlg>().JournalFilter <EquipmentFilter>() .DefaultTableView().Column("Код", x => x.Id.ToString()).SearchColumn("Номенклатура", x => x.NomenclatureName).Column("Тип", x => x.Nomenclature.Type.Name).SearchColumn("Серийный номер", x => x.Serial).Column("Дата последней обработки", x => x.LastServiceDate.ToShortDateString()).End(), //Логисткика OrmObjectMapping <RouteList> .Create().Dialog <RouteListCreateDlg>() .DefaultTableView().SearchColumn("Номер", x => x.Id.ToString()).Column("Дата", x => x.Date.ToShortDateString()).Column("Статус", x => x.Status.GetEnumTitle()).SearchColumn("Водитель", x => String.Format("{0} - {1}", x.Driver.FullName, x.Car.Title)).End(), OrmObjectMapping <RouteColumn> .Create().DefaultTableView().Column("Код", x => x.Id.ToString()).SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <DeliveryShift> .Create().Dialog <DeliveryShiftDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).SearchColumn("Диапазон времени", x => x.DeliveryTime).End(), OrmObjectMapping <DeliveryDaySchedule> .Create().Dialog <DeliveryDayScheduleDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).End(), OrmObjectMapping <LogisticsArea> .Create().Dialog <LogisticsAreaDlg>().DefaultTableView().SearchColumn("Название", x => x.Name).Column("Город", x => x.IsCity ? "Да" : "Нет").End(), //Сервис OrmObjectMapping <ServiceClaim> .Create().Dialog <ServiceClaimDlg>().DefaultTableView().Column("Номер", x => x.Id.ToString()).Column("Тип", x => x.ServiceClaimType.GetEnumTitle()).Column("Оборудование", x => x.Equipment.Title).Column("Подмена", x => x.ReplacementEquipment != null ? "Да" : "Нет").Column("Точка доставки", x => x.DeliveryPoint.Title).End(), //Касса OrmObjectMapping <IncomeCategory> .Create().EditPermision("money_manage_cash").DefaultTableView().Column("Код", x => x.Id.ToString()).Column("Название", e => e.Name).End(), OrmObjectMapping <ExpenseCategory> .Create().Dialog <CashExpenseCategoryDlg>().EditPermision("money_manage_cash").DefaultTableView().Column("Код", x => x.Id.ToString()).SearchColumn("Название", e => e.Name).TreeConfig(new RecursiveTreeConfig <ExpenseCategory>(x => x.Parent, x => x.Childs)).End(), OrmObjectMapping <Income> .Create().Dialog <CashIncomeDlg> (), OrmObjectMapping <Expense> .Create().Dialog <CashExpenseDlg> (), OrmObjectMapping <AdvanceReport> .Create().Dialog <AdvanceReportDlg> (), OrmObjectMapping <Fine> .Create().Dialog <FineDlg> (), OrmObjectMapping <Premium> .Create().Dialog <PremiumDlg> (), //Банкинг OrmObjectMapping <AccountIncome> .Create(), OrmObjectMapping <AccountExpense> .Create(), //Склад OrmObjectMapping <Warehouse> .Create().Dialog <WarehouseDlg>().DefaultTableView().Column("Название", w => w.Name).Column("В архиве", w => w.IsArchive ? "Да":"").End(), OrmObjectMapping <RegradingOfGoodsTemplate> .Create().Dialog <RegradingOfGoodsTemplateDlg>().DefaultTableView().Column("Название", w => w.Name).End() }; #region Складские документы OrmMain.AddObjectDescription <IncomingInvoice>().Dialog <IncomingInvoiceDlg>(); OrmMain.AddObjectDescription <IncomingWater>().Dialog <IncomingWaterDlg>(); OrmMain.AddObjectDescription <MovementDocument>().Dialog <MovementDocumentDlg>(); OrmMain.AddObjectDescription <WriteoffDocument>().Dialog <WriteoffDocumentDlg>(); OrmMain.AddObjectDescription <InventoryDocument>().Dialog <InventoryDocumentDlg>(); OrmMain.AddObjectDescription <ShiftChangeWarehouseDocument>().Dialog <ShiftChangeWarehouseDocumentDlg>(); OrmMain.AddObjectDescription <RegradingOfGoodsDocument>().Dialog <RegradingOfGoodsDocumentDlg>(); OrmMain.AddObjectDescription <SelfDeliveryDocument>().Dialog <SelfDeliveryDocumentDlg>(); OrmMain.AddObjectDescription <CarLoadDocument>().Dialog <CarLoadDocumentDlg>(); OrmMain.AddObjectDescription <CarUnloadDocument>().Dialog <CarUnloadDocumentDlg>(); #endregion #region Goods OrmMain.AddObjectDescription <Nomenclature>().Dialog <NomenclatureDlg>().JournalFilter <NomenclatureFilter>().DefaultTableView().SearchColumn("Код", x => x.Id.ToString()).SearchColumn("Название", x => x.Name).Column("Тип", x => x.CategoryString).End(); OrmMain.AddObjectDescription <Folder1c>().Dialog <Folder1cDlg>().DefaultTableView().SearchColumn("Код 1С", x => x.Code1c).SearchColumn("Название", x => x.Name).TreeConfig(new RecursiveTreeConfig <Folder1c>(x => x.Parent, x => x.Childs)).End(); OrmMain.AddObjectDescription <ProductGroup>().Dialog <ProductGroupDlg>().EditPermision("can_edit_online_store").DefaultTableView().SearchColumn("Код", x => x.Id.ToString()).SearchColumn("Название", x => x.Name).TreeConfig(new RecursiveTreeConfig <ProductGroup>(x => x.Parent, x => x.Childs)).End(); #endregion OrmMain.AddObjectDescription <DiscountReason>().DefaultTableView().SearchColumn("Название", x => x.Name).End(); # region Простые справочники
public static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += AppDomain_CurrentDomain_UnhandledException; AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit; try { IniConfigSource configFile = new IniConfigSource(ConfigFile); configFile.Reload(); IConfig config = configFile.Configs ["General"]; server = config.GetString("server"); port = config.GetString("port", "3306"); user = config.GetString("user"); pass = config.GetString("password"); db = config.GetString("database"); firebaseServerApiToken = config.GetString("server_api_token"); firebaseSenderId = config.GetString("firebase_sender"); servicePort = config.GetString("service_port"); serviceHostName = config.GetString("service_host_name"); OsmService.ConfigureService(configFile); } catch (Exception ex) { logger.Fatal(ex, "Ошибка чтения конфигурационного файла."); return; } WebServiceHost OsmHost = new WebServiceHost(typeof(OsmService)); logger.Info(String.Format("Создаем и запускаем службы...")); try { var conStrBuilder = new MySqlConnectionStringBuilder(); conStrBuilder.Server = server; conStrBuilder.Port = UInt32.Parse(port); conStrBuilder.Database = db; conStrBuilder.UserID = user; conStrBuilder.Password = pass; conStrBuilder.SslMode = MySqlSslMode.None; QSMain.ConnectionString = conStrBuilder.GetConnectionString(true); var db_config = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .Dialect <NHibernate.Spatial.Dialect.MySQL57SpatialDialect>() .ConnectionString(QSMain.ConnectionString); OrmConfig.ConfigureOrm(db_config, new System.Reflection.Assembly[] { System.Reflection.Assembly.GetAssembly(typeof(Vodovoz.HibernateMapping.OrganizationMap)), System.Reflection.Assembly.GetAssembly(typeof(QSBanks.QSBanksMain)), System.Reflection.Assembly.GetAssembly(typeof(QSContacts.QSContactsMain)), System.Reflection.Assembly.GetAssembly(typeof(EmailService.Email)) }); MainSupport.LoadBaseParameters(); FCMHelper.Configure(firebaseServerApiToken, firebaseSenderId); ServiceHost ChatHost = new ServiceHost(typeof(ChatService)); ServiceHost AndroidDriverHost = new ServiceHost(typeof(AndroidDriverService)); ServiceHost EmailSendingHost = new ServiceHost(typeof(EmailService.EmailService)); WebServiceHost MailjetEventsHost = new WebServiceHost(typeof(EmailService.EmailService)); WebServiceHost MobileHost = new WebServiceHost(typeof(MobileService)); ChatHost.AddServiceEndpoint( typeof(IChatService), new BasicHttpBinding(), String.Format("http://{0}:{1}/ChatService", serviceHostName, servicePort) ); AndroidDriverHost.AddServiceEndpoint( typeof(IAndroidDriverService), new BasicHttpBinding(), String.Format("http://{0}:{1}/AndroidDriverService", serviceHostName, servicePort) ); EmailSendingHost.AddServiceEndpoint( typeof(IEmailService), new BasicHttpBinding(), String.Format("http://{0}:{1}/EmailService", serviceHostName, servicePort) ); MailjetEventsHost.AddServiceEndpoint( typeof(IMailjetEventService), new WebHttpBinding(), String.Format("http://{0}:{1}/Mailjet", serviceHostName, servicePort) ); MobileService.BaseUrl = String.Format("http://{0}:{1}/Mobile", serviceHostName, servicePort); MobileHost.AddServiceEndpoint( typeof(IMobileService), new WebHttpBinding(), MobileService.BaseUrl ); OsmWorker.ServiceHost = serviceHostName; OsmWorker.ServicePort = Int32.Parse(servicePort); OsmHost.AddServiceEndpoint(typeof(IOsmService), new WebHttpBinding(), OsmWorker.ServiceAddress); //FIXME Тут добавлен без дебага, потому что без него не работает отдача изображений в потоке. Метод Stream GetImage(string filename) // Просто не смог быстро разобраться. А конкретнее нужна строка reply = TraceMessage (reply.CreateBufferedCopy (int.MaxValue), Action.Send); // видимо она как то обрабатывает сообщение. MobileHost.Description.Behaviors.Add(new PreFilter()); #if DEBUG ChatHost.Description.Behaviors.Add(new PreFilter()); AndroidDriverHost.Description.Behaviors.Add(new PreFilter()); EmailSendingHost.Description.Behaviors.Add(new PreFilter()); MailjetEventsHost.Description.Behaviors.Add(new PreFilter()); OsmHost.Description.Behaviors.Add(new PreFilter()); #endif ChatHost.Open(); AndroidDriverHost.Open(); EmailSendingHost.Open(); MailjetEventsHost.Open(); MobileHost.Open(); OsmHost.Open(); //Запускаем таймеры рутины OrderRoutineTimer = new System.Timers.Timer(120000); //2 минуты OrderRoutineTimer.Elapsed += OrderRoutineTimer_Elapsed; OrderRoutineTimer.Start(); TrackRoutineTimer = new System.Timers.Timer(30000); //30 секунд TrackRoutineTimer.Elapsed += TrackRoutineTimer_Elapsed; TrackRoutineTimer.Start(); logger.Info("Server started."); UnixSignal[] signals = { new UnixSignal(Signum.SIGINT), new UnixSignal(Signum.SIGHUP), new UnixSignal(Signum.SIGTERM) }; UnixSignal.WaitAny(signals); } catch (Exception e) { logger.Fatal(e); } finally { if (OsmHost.State == CommunicationState.Opened) { OsmHost.Close(); } if (Environment.OSVersion.Platform == PlatformID.Unix) { Thread.CurrentThread.Abort(); } Environment.Exit(0); } }
public static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += AppDomain_CurrentDomain_UnhandledException; IConfig driverServiceConfig; IConfig firebaseConfig; try { IniConfigSource driverConfFile = new IniConfigSource(driverConfigFile); driverConfFile.Reload(); driverServiceConfig = driverConfFile.Configs["Service"]; firebaseConfig = driverConfFile.Configs["Firebase"]; IConfig mysqlConfig = driverConfFile.Configs["Mysql"]; mysqlServerHostName = mysqlConfig.GetString("mysql_server_host_name"); mysqlServerPort = mysqlConfig.GetString("mysql_server_port", "3306"); mysqlUser = mysqlConfig.GetString("mysql_user"); mysqlPassword = mysqlConfig.GetString("mysql_password"); mysqlDatabase = mysqlConfig.GetString("mysql_database"); } catch (Exception ex) { logger.Fatal(ex, "Ошибка чтения конфигурационного файла."); return; } try { var conStrBuilder = new MySqlConnectionStringBuilder(); conStrBuilder.Server = mysqlServerHostName; conStrBuilder.Port = UInt32.Parse(mysqlServerPort); conStrBuilder.Database = mysqlDatabase; conStrBuilder.UserID = mysqlUser; conStrBuilder.Password = mysqlPassword; conStrBuilder.SslMode = MySqlSslMode.None; QSMain.ConnectionString = conStrBuilder.GetConnectionString(true); var db_config = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .Dialect <NHibernate.Spatial.Dialect.MySQL57SpatialDialect>() .ConnectionString(QSMain.ConnectionString); OrmConfig.ConfigureOrm(db_config, new System.Reflection.Assembly[] { System.Reflection.Assembly.GetAssembly(typeof(QS.Banks.Domain.Bank)), System.Reflection.Assembly.GetAssembly(typeof(Vodovoz.HibernateMapping.OrganizationMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.HistoryLog.HistoryMain)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.Domain.UserBase)) }); MainSupport.LoadBaseParameters(); QS.HistoryLog.HistoryMain.Enable(); } catch (Exception ex) { logger.Fatal(ex, "Ошибка в настройке подключения к БД."); } try { DriverServiceStarter.StartService(driverServiceConfig, firebaseConfig, new BaseParametersProvider()); UnixSignal[] signals = { new UnixSignal(Signum.SIGINT), new UnixSignal(Signum.SIGHUP), new UnixSignal(Signum.SIGTERM) }; UnixSignal.WaitAny(signals); } catch (Exception e) { logger.Fatal(e); } finally { if (Environment.OSVersion.Platform == PlatformID.Unix) { Thread.CurrentThread.Abort(); } Environment.Exit(0); } }
public static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += AppDomain_CurrentDomain_UnhandledException; IConfiguration configuration; try { var builder = new ConfigurationBuilder() .AddIniFile(configFile, optional: false); configuration = builder.Build(); var serviceSection = configuration.GetSection("Service"); serviceHostName = serviceSection["service_host_name"]; servicePort = serviceSection["service_port"]; serviceWebPort = serviceSection["service_web_port"]; var bitrixSection = configuration.GetSection("Bitrix"); baseAddress = bitrixSection["base_address"]; var mysqlSection = configuration.GetSection("Mysql"); mysqlServerHostName = mysqlSection["mysql_server_host_name"]; mysqlServerPort = mysqlSection["mysql_server_port"]; mysqlUser = mysqlSection["mysql_user"]; mysqlPassword = mysqlSection["mysql_password"]; mysqlDatabase = mysqlSection["mysql_database"]; } catch (Exception ex) { logger.Fatal(ex, "Ошибка чтения конфигурационного файла."); return; } logger.Info("Запуск службы оплаты заказов по sms..."); try { var conStrBuilder = new MySqlConnectionStringBuilder { Server = mysqlServerHostName, Port = UInt32.Parse(mysqlServerPort), Database = mysqlDatabase, UserID = mysqlUser, Password = mysqlPassword, SslMode = MySqlSslMode.None, ConnectionTimeout = 30 }; QSMain.ConnectionString = conStrBuilder.GetConnectionString(true); var dbConfig = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .Dialect <NHibernate.Spatial.Dialect.MySQL57SpatialDialect>() .ConnectionString(QSMain.ConnectionString); OrmConfig.ConfigureOrm(dbConfig, new[] { System.Reflection.Assembly.GetAssembly(typeof(Vodovoz.HibernateMapping.OrganizationMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.Banks.Domain.Bank)), System.Reflection.Assembly.GetAssembly(typeof(QS.HistoryLog.HistoryMain)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.Domain.UserBase)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.HibernateMapping.TypeOfEntityMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.Attachments.Domain.Attachment)) }); QS.HistoryLog.HistoryMain.Enable(); var driverApiSection = configuration.GetSection("DriverAPI"); var driverApiHelperConfiguration = new DriverApiHelperConfiguration { ApiBase = new Uri(driverApiSection["ApiBase"]), NotifyOfSmsPaymentStatusChangedURI = driverApiSection["NotifyOfSmsPaymentStatusChangedURI"], NotifyOfFastDeliveryOrderAddedURI = driverApiSection["NotifyOfFastDeliveryOrderAddedURI"] }; ISmsPaymentStatusNotificationReciever smsPaymentStatusNotificationReciever = new DriverAPIHelper(driverApiHelperConfiguration); var paymentSender = new BitrixPaymentController(baseAddress); var smsPaymentFileCache = new SmsPaymentFileCache("/tmp/VodovozSmsPaymentServiceTemp.txt"); SmsPaymentServiceInstanceProvider smsPaymentServiceInstanceProvider = new SmsPaymentServiceInstanceProvider( paymentSender, smsPaymentStatusNotificationReciever, new OrderParametersProvider(new ParametersProvider()), smsPaymentFileCache, new SmsPaymentDTOFactory(new OrderOrganizationProviderFactory().CreateOrderOrganizationProvider()), new SmsPaymentValidator(new OrganizationParametersProvider(new ParametersProvider())) ); ServiceHost smsPaymentServiceHost = new SmsPaymentServiceHost(smsPaymentServiceInstanceProvider); ServiceEndpoint webEndPoint = smsPaymentServiceHost.AddServiceEndpoint( typeof(ISmsPaymentService), new WebHttpBinding(), $"http://{serviceHostName}:{serviceWebPort}/SmsPaymentWebService" ); WebHttpBehavior httpBehavior = new WebHttpBehavior(); webEndPoint.Behaviors.Add(httpBehavior); smsPaymentServiceHost.AddServiceEndpoint( typeof(ISmsPaymentService), new BasicHttpBinding(), $"http://{serviceHostName}:{servicePort}/SmsPaymentService" ); smsPaymentServiceHost.Description.Behaviors.Add(new PreFilter()); smsPaymentServiceHost.Open(); logger.Info("Server started."); var serviceInstance = smsPaymentServiceInstanceProvider.GetInstance(null) as ISmsPaymentService; serviceInstance?.SynchronizePaymentStatuses(); var unsavedPaymentsWorker = new CachePaymentsWorker(smsPaymentFileCache, serviceInstance); var overduePaymentsWorker = new OverduePaymentsWorker(); unsavedPaymentsWorker.Start(); overduePaymentsWorker.Start(); if (Environment.OSVersion.Platform == PlatformID.Unix) { UnixSignal[] signals = { new UnixSignal(Signum.SIGINT), new UnixSignal(Signum.SIGHUP), new UnixSignal(Signum.SIGTERM) }; UnixSignal.WaitAny(signals); } else { Console.ReadLine(); } } catch (Exception e) { logger.Fatal(e); } finally { if (Environment.OSVersion.Platform == PlatformID.Unix) { Thread.CurrentThread.Abort(); } Environment.Exit(0); } }
public static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;; AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit; SmsRuConfiguration smsRuConfig; try { var builder = new ConfigurationBuilder() .AddIniFile(configFile, optional: false); var configuration = builder.Build(); var serviceSection = configuration.GetSection("Service"); serviceHostName = serviceSection["service_host_name"]; servicePort = serviceSection["service_port"]; var mysqlSection = configuration.GetSection("Mysql"); mysqlServerHostName = mysqlSection["mysql_server_host_name"]; mysqlServerPort = mysqlSection["mysql_server_port"]; mysqlUser = mysqlSection["mysql_user"]; mysqlPassword = mysqlSection["mysql_password"]; mysqlDatabase = mysqlSection["mysql_database"]; var smsRuSection = configuration.GetSection("SmsRu"); smsRuConfig = new SmsRuConfiguration( smsRuSection["login"], smsRuSection["password"], smsRuSection["appId"], smsRuSection["partnerId"], smsRuSection["email"], smsRuSection["smsNumberFrom"], smsRuSection["smtpLogin"], smsRuSection["smtpPassword"], smsRuSection["smtpServer"], int.Parse(smsRuSection["smtpPort"]), bool.Parse(smsRuSection["smtpUseSSL"]), bool.Parse(smsRuSection["translit"]), bool.Parse(smsRuSection["test"]) ); } catch (Exception ex) { logger.Fatal(ex, "Ошибка чтения конфигурационного файла."); return; } try { var conStrBuilder = new MySqlConnectionStringBuilder(); conStrBuilder.Server = mysqlServerHostName; conStrBuilder.Port = uint.Parse(mysqlServerPort); conStrBuilder.Database = mysqlDatabase; conStrBuilder.UserID = mysqlUser; conStrBuilder.Password = mysqlPassword; conStrBuilder.SslMode = MySqlSslMode.None; QSMain.ConnectionString = conStrBuilder.GetConnectionString(true); var db_config = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .Dialect <NHibernate.Spatial.Dialect.MySQL57SpatialDialect>() .ConnectionString(QSMain.ConnectionString); OrmConfig.ConfigureOrm(db_config, new System.Reflection.Assembly[] { System.Reflection.Assembly.GetAssembly(typeof(Vodovoz.HibernateMapping.OrganizationMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.Banks.Domain.Bank)), System.Reflection.Assembly.GetAssembly(typeof(QS.HistoryLog.HistoryMain)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.Domain.UserBase)) }); MainSupport.LoadBaseParameters(); QS.HistoryLog.HistoryMain.Enable(); ISmsNotificationRepository smsNotificationRepository = new SmsNotificationRepository(); SmsRuSendController smsSender = new SmsRuSendController(smsRuConfig); newClientInformer = new NewClientSmsInformer(smsSender, smsNotificationRepository); newClientInformer.Start(); BaseParametersProvider parametersProvider = new BaseParametersProvider(); LowBalanceNotifier lowBalanceNotifier = new LowBalanceNotifier(smsSender, smsSender, parametersProvider); lowBalanceNotifier.Start(); SmsInformerInstanceProvider serviceStatusInstanceProvider = new SmsInformerInstanceProvider( smsNotificationRepository, new BaseParametersProvider() ); WebServiceHost smsInformerStatus = new SmsInformerServiceHost(serviceStatusInstanceProvider); smsInformerStatus.AddServiceEndpoint( typeof(ISmsInformerService), new WebHttpBinding(), String.Format("http://{0}:{1}/SmsInformer", serviceHostName, servicePort) ); smsInformerStatus.Open(); logger.Info("Запущена служба мониторинга отправки смс уведомлений"); UnixSignal[] signals = { new UnixSignal(Signum.SIGINT), new UnixSignal(Signum.SIGHUP), new UnixSignal(Signum.SIGTERM) }; UnixSignal.WaitAny(signals); } catch (Exception ex) { logger.Fatal(ex); } finally { if (Environment.OSVersion.Platform == PlatformID.Unix) { Thread.CurrentThread.Abort(); } Environment.Exit(0); } }
public static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += AppDomain_CurrentDomain_UnhandledException; logger.Info("Чтение конфигурационного файла..."); IConfig serviceConfig; IConfig kassaConfig; IConfig[] cashboxesConfig; try { XmlConfigSource confFile = new XmlConfigSource(configFile); confFile.Reload(); serviceConfig = confFile.Configs["Service"]; kassaConfig = confFile.Configs["ModulKassa"]; cashboxesConfig = new[] { confFile.Configs["RetailPointSosnovcev"], confFile.Configs["RetailPointVodovozSouth"], confFile.Configs["RetailPointVodovozNorth"] }; IConfig mysqlConfig = confFile.Configs["Mysql"]; mysqlServerHostName = mysqlConfig.GetString("mysql_server_host_name"); mysqlServerPort = mysqlConfig.GetString("mysql_server_port", "3306"); mysqlUser = mysqlConfig.GetString("mysql_user"); mysqlPassword = mysqlConfig.GetString("mysql_password"); mysqlDatabase = mysqlConfig.GetString("mysql_database"); } catch (Exception ex) { logger.Fatal(ex, "Ошибка чтения конфигурационного файла."); return; } logger.Info("Настройка подключения к БД..."); try { var conStrBuilder = new MySqlConnectionStringBuilder { Server = mysqlServerHostName, Port = UInt32.Parse(mysqlServerPort), Database = mysqlDatabase, UserID = mysqlUser, Password = mysqlPassword, SslMode = MySqlSslMode.None }; var dbConfig = FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard .ConnectionString(conStrBuilder.GetConnectionString(true)); OrmConfig.ConfigureOrm( dbConfig, new[] { System.Reflection.Assembly.GetAssembly(typeof(QS.Banks.Domain.Bank)), System.Reflection.Assembly.GetAssembly(typeof(Vodovoz.HibernateMapping.OrganizationMap)), System.Reflection.Assembly.GetAssembly(typeof(QS.HistoryLog.HistoryMain)), System.Reflection.Assembly.GetAssembly(typeof(QS.Project.Domain.UserBase)) } ); QS.HistoryLog.HistoryMain.Enable(); } catch (Exception ex) { logger.Fatal(ex, "Ошибка в настройке подключения к БД."); return; } try { ReceiptServiceStarter.StartService(serviceConfig, kassaConfig, cashboxesConfig); if (Environment.OSVersion.Platform == PlatformID.Unix) { UnixSignal[] signals = { new UnixSignal(Signum.SIGINT), new UnixSignal(Signum.SIGHUP), new UnixSignal(Signum.SIGTERM) }; UnixSignal.WaitAny(signals); } else { Console.ReadLine(); } } catch (Exception e) { logger.Fatal(e); } finally { if (Environment.OSVersion.Platform == PlatformID.Unix) { Thread.CurrentThread.Abort(); } Environment.Exit(0); } }