Пример #1
0
        /// <summary>
        /// Получить данные из кэша.
        /// </summary>
        /// <param name="login">Поиск по логину</param>
        /// <returns>Данные из кэша</returns>
        internal new ADLoginsDB this[string login] {
            get{
                if (login.IndexOf('\\') == -1)
                {
                    throw new ArgumentException($"Неверный формат логина AD. Логин должен быть вида: \"domain\\login\". Передан логин \"{login}\"");
                }

                login = login.Substring(login.IndexOf('\\') + 1);

                lock (Locker) {
                    if (_ADLogins.Keys.Contains(login))
                    {
                        UpdateDataInDB(login);
                    }
                    else
                    {
                        using (IDBSource dbSource = new MKKContext()) {
                            ADLoginsDB adLoginsIDB = dbSource.ADLoginsDBs.AsNoTracking().FirstOrDefault(i => i.Login.Equals(login));
                            if (adLoginsIDB == default)
                            {
                                AddDataToDB(dbSource, login);
                            }
                            else
                            {
                                UpdateCacheFromDB(dbSource, adLoginsIDB, login);
                            }
                        }
                    }

                    return((ADLoginsDB)_ADLogins[login]);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Обновить кэш.
        /// </summary>
        /// <param name="dbSource">БД</param>
        /// <param name="adLoginsIDB">Логин в БД</param>
        /// <param name="login">Логин пользователя</param>
        private void UpdateCacheFromDB(IDBSource dbSource, ADLoginsDB adLoginsIDB, string login)
        {
            _ADLogins.TryAdd(login, adLoginsIDB);

            _ADLogins[login].Name       = GetNameByLogin(login);
            _ADLogins[login].UpdateDate = DateTime.Now;

            dbSource.SaveChanges();
        }
Пример #3
0
        /// <summary>
        /// Добавить в БД новую запись пользователя.
        /// </summary>
        /// <param name="dBSource">БД</param>
        /// <param name="login">Логин пользователя</param>
        private void AddDataToDB(IDBSource dBSource, string login)
        {
            ADLoginsDB adLoginsIDB = new ADLoginsDB()
            {
                Login      = login,
                Name       = GetNameByLogin(login),
                UpdateDate = DateTime.Now
            };

            dBSource.ADLoginsDBs.Add(adLoginsIDB);
            dBSource.SaveChanges();

            _ADLogins.TryAdd(login, adLoginsIDB);
        }
Пример #4
0
        /// <summary>
        /// Установить проверяющего асинхронно.
        /// </summary>
        /// <param name="account1CCode">Номер договора 1С</param>
        /// <param name="login">Логин проверяющего</param>
        /// <param name="assignDate">Дата операции</param>
        /// <param name="timeZone">Часовой пояс проверяющего</param>
        /// <param name="cancellationToken">Токен отмены</param>
        public async Task SetInspectionAsync(string account1CCode, string login, DateTime assignDate, int timeZone,
                                             CancellationToken cancellationToken)
        {
            SetInspectionCheckParams(login, assignDate, timeZone);

            using (IDBSource dbSource = new MKKContext()) {
                Account1C account1C = await FindAccountAndLogErrorAsync <EFServiceInspecting>(account1CCode, cancellationToken);

                ADLoginsDB adLogin = Singleton <ProxyADLoginsDB> .Values[login];

                await dbSource.AccountInspectingDB.AddAsync(
                    new AccountInspectingDB()
                {
                    Account1CID    = account1C.Account1CCode,
                    OperationDate  = assignDate,
                    TimeZone       = timeZone,
                    UserPermission = PermissionLevel.GetInt(login),
                    ADLoginsDBID   = adLogin.ID
                },
                    cancellationToken);

                await dbSource.SaveChangesAndLogErrorAsync <EFServiceInspecting>(cancellationToken);
            }
        }
Пример #5
0
        /// <summary>
        /// Получить все сообщения по договору асинхронно.
        /// </summary>
        /// <param name="adLogin">Логин пользователя AD</param>
        /// <param name="account1CCode">Номер договора 1С</param>
        /// <param name="cancellationToken">Токен отмены</param>
        /// <returns>Все сообщения по договору</returns>
        public async Task <Post[]> GetPostsAsync(string adLogin, string account1CCode, CancellationToken cancellationToken)
        {
            GetPostsCheckParams(adLogin, account1CCode);

            ADLoginsDB author  = Singleton <ProxyADLoginsDB> .Values[adLogin];
            Account1C  account = await FindAccountAndLogErrorAsync <EFServicePosts>(account1CCode, cancellationToken,
                                                                                    i => i.Client);

            if (account == default)
            {
                return(new Post[0]);
            }

            Task <List <PostsDB> > postsInAccountTask = GetPostsInAccountAsync(account, cancellationToken);
            Task <List <PostsDB> > postsByClientTask  = GetPostsByClientAsync(account, cancellationToken);

            List <PostsDB> posts = (await postsByClientTask).Where(i => i.Author.ID.Equals(author.ID) || CanReadAllPost(adLogin)).ToList();

            posts.AddRange((await postsInAccountTask).Where(i => i.Author.ID.Equals(author.ID) || CanReadAllPost(adLogin)).ToArray());

            Post[] result = posts.Select(i => (Post)i).ToArray();

            return(result);
        }