예제 #1
0
        Dictionary RefreshDictionary(DictionaryInfo dictInfo, User user, Stream stream)
        {
            using (var db = new DictServiceEntities())
            {
                var dict = db.Dictionaries.Single(x => x.Dictionary_id == dictInfo.Dictionary_id.Value);
                dict.DictionaryState = db.DictionaryStates.Single(x => x.State_id == (int)DictionaryStateEnum.Refreshing);
                db.Entry(dict).State = EntityState.Modified;
                var change = new UserChangeHistory()
                {
                    Dictionary_id = dict.Dictionary_id,
                    Action_id     = (int)ActionEnum.EditDict,
                    DateHistory   = DateTime.Now,
                    User_id       = user.User_id
                };
                db.UserChangeHistories.Add(change);
                db.SaveChanges();
                ExistDictFileProcessing(stream, dict, change);
                dict.DictionaryState = db.DictionaryStates.Single(x => x.State_id == (int)DictionaryStateEnum.Available);
                db.Entry(dict).State = EntityState.Modified;

                db.SaveChanges();
                AddNewQueue(dict.Dictionary_id, ActionEnum.EditDict, change.UserHistory_id);
                return(dict);
            }
        }
예제 #2
0
        private void AddNewDicionary(DictionaryInfo dictInfo, User user, Stream stream)
        {
            string uploadPath = GetUploadPath(dictInfo.Category_id, dictInfo.FriendlyName, dictInfo.FileName);
            // FileHelper.LoadFileFromStream(stream, uploadPath);
            var id = NewDictFileProcessing(stream, uploadPath, dictInfo);

            using (var db = new DictServiceEntities())
            {
                var change = new UserChangeHistory()
                {
                    User_id       = user.User_id,
                    Dictionary_id = id,
                    Action_id     = (int)dictInfo.Action,
                    DateHistory   = DateTime.Now
                };
                db.UserChangeHistories.Add(change);
                db.SaveChanges();
            }
        }
예제 #3
0
        void ExistDictFileProcessing(Stream stream, Dictionary dict, UserChangeHistory change)
        {
            var tmpFolder = FileHelper.GetTemporaryDirectory();
            var tmpFile   = Path.Combine(tmpFolder, Path.GetFileName(dict.FileName));

            FileHelper.LoadFileFromStream(stream, tmpFile);
            ZipHelper.UnZip(tmpFile);
            var newFile = Directory.GetFiles(tmpFolder, "*.mdb").Single();

            if (AccessHelper.CheckIdentifyInfo(newFile) == dict.Dictionary_id)
            {
                var unZipFoler = ZipHelper.UnZipToTempDir(dict.PathToDict);
                var oldDict    = Directory.GetFiles(unZipFoler, "*.mdb").Single();
                var changes    = DBComparer.CompareDataBase(newFile, oldDict);
                if (changes.Any())
                {
                    using (var db = new DictServiceEntities())
                    {
                        db.DictionaryChangeHistories.AddRange(changes.Select(x => new DictionaryChangeHistory()
                        {
                            UserHistory_id = change.UserHistory_id,
                            Change_id      = (int)x.ChangeType,
                            Dictionary_id  = dict.Dictionary_id,
                            TableName      = x.TableName,
                            PrimaryKey     = x.PrimaryKey,
                            ColumnName     = x.ColumnName,
                            OldValue       = x.OldValue,
                            NewValue       = x.NewValue
                        }));
                        db.SaveChanges();
                    }
                    CreateDictionaryVersion(dict);
                    File.Move(tmpFile, dict.PathToDict);
                }
            }
            else
            {
                throw new Exception("Попытка загрузить неизвестный словарь");
            }
        }