Пример #1
0
        /*
         * Сохранение данных
         */

        #region public void Save(BaseSmartCoreObject obj)

        /// <summary>
        /// Сохраняет <see cref="BaseEntityObject"/> в БД сохраняет если такой уже есть или создает новый если такой объект появляется первый раз
        /// </summary>
        /// <param name="obj">Принимает <see cref="BaseEntityObject"/></param>
        /// <param name="saveAttachedFile">Сохранять прикрепленные файлы</param>
        public void Save(BaseEntityObject obj, bool saveAttachedFile = true)
        {
            if (_casEnvironment.IdentityUser.UserType == UsetType.ReadOnly)
            {
                return;
            }

            obj.CorrectorId = _casEnvironment.IdentityUser.ItemId;
            obj.Updated     = DateTime.Now;

            if (obj.ItemId <= 0)
            {
                var qr = BaseQueries.GetInsertQuery(obj);
                var ds = _casEnvironment.Execute(qr, BaseQueries.GetParameters(obj));
                obj.ItemId = DbTypes.ToInt32(ds.Tables[0].Rows[0][0]);
                _auditRepository.WriteAsync(obj, AuditOperation.Created, _casEnvironment.IdentityUser);
            }
            else
            {
                // update уже существующей записи
                var qr = BaseQueries.GetUpdateQuery(obj);
                _casEnvironment.Execute(qr, BaseQueries.GetParameters(obj));
                _auditRepository.WriteAsync(obj, AuditOperation.Changed, _casEnvironment.IdentityUser);
            }

            if (obj is IFileContainer && saveAttachedFile)
            {
                SaveAttachedFile(obj as IFileContainer);
            }

            if (obj is IFileDTOContainer && saveAttachedFile)
            {
                SaveAttachedFileDTO(obj as IFileDTOContainer);
            }
        }
Пример #2
0
        public void DeleteFromWorkPackage(int workPackageId, IEnumerable <IBaseEntityObject> recordsToDelete)
        {
            var recordsIds      = recordsToDelete.Select(r => r.ItemId).ToArray();
            var recordsTypesIds = recordsToDelete.Select(r => r.SmartCoreObjectType.ItemId).Distinct().ToArray();

            var query = BaseQueries.GetDeleteQuery <WorkPackageRecord>(new ICommonFilter[]
            {
                new CommonFilter <int>(WorkPackageRecord.DirectiveIdProperty, FilterType.In, recordsIds),
                new CommonFilter <int>(WorkPackageRecord.WorkPackageItemTypeProperty, FilterType.In, recordsTypesIds),
                new CommonFilter <int>(WorkPackageRecord.WorkPakageIdProperty, workPackageId)
            });

            _environment.Execute(query);
        }
Пример #3
0
        public void GetDictionaries()
        {
            _casEnvironment.ClearDictionaries();

            var assembly = Assembly.GetAssembly(typeof(BaseEntityObject));
            var types    = assembly.GetTypes()
                           .Where(t => t.Namespace != null && t.IsClass && t.Namespace.StartsWith("SmartCore.Entities.Dictionaries"));

            var staticDictionaryType = types.Where(t => t.IsSubclassOf(typeof(StaticDictionary)) &&
                                                   t.GetCustomAttributes(typeof(TableAttribute), false).Length > 0).ToList();

            foreach (var type in staticDictionaryType)
            {
                try
                {
                    string  qr = BaseQueries.GetSelectQueryWithWhere(type, loadChild: true);
                    DataSet ds = _casEnvironment.Execute(qr);

                    //поиск в типе своиства Items
                    PropertyInfo itemsProp = type.GetProperty("Items");
                    //поиск у типа конструктора беза параметров
                    ConstructorInfo ci = type.GetConstructor(new Type[0]);
                    //создание экземпляра статического словаря
                    //(при этом будут созданы все его статические элементы,
                    // которые будут доступны через статическое своиство Items)
                    StaticDictionary instance = (StaticDictionary)ci.Invoke(null);
                    //Получение элементов статического своиства Items
                    IEnumerable staticList = (IEnumerable)itemsProp.GetValue(instance, null);

                    BaseQueries.SetFields(staticList, ds);
                }
                catch (Exception)
                {
                    continue;
                    //throw ex;
                }
            }

            var abstractDictionaryTypes = types.Where(t => t.IsSubclassOf(typeof(AbstractDictionary)) &&
                                                      !t.IsAbstract)
                                          .ToList();
            //коллекция дл типов, которые не удалось загрузить сразу
            //по причине отсутствия другого словаря в коллекции словарей ядра
            var defferedTypes = new List <Type>();

            foreach (var type in abstractDictionaryTypes)
            {
                try
                {
                    var dca = (DictionaryCollectionAttribute)type.GetCustomAttributes(typeof(DictionaryCollectionAttribute), false).FirstOrDefault();
                    var bl  = (DtoAttribute)type.GetCustomAttributes(typeof(DtoAttribute), false).FirstOrDefault();

                    var typeDict = dca == null
                                                ? new CommonDictionaryCollection <AbstractDictionary>()
                                                : dca.GetInstance();

                    IEnumerable items = GetObjectList(bl.Type, type, true);
                    typeDict.AddRange((IEnumerable <IDictionaryItem>)items);
                    _casEnvironment.AddDictionary(type, typeDict);
                }
                catch (KeyNotFoundException)
                {
                    defferedTypes.Add(type);
                    continue;
                }
                catch (Exception)
                {
                    continue;
                    //throw ex;
                }
            }

            //Повторная попытка загрузить типы данных, которые не удалось загрузить с первого раза
            foreach (var type in defferedTypes)
            {
                try
                {
                    var dca      = (DictionaryCollectionAttribute)type.GetCustomAttributes(typeof(DictionaryCollectionAttribute), false).FirstOrDefault();
                    var bl       = (DtoAttribute)type.GetCustomAttributes(typeof(DtoAttribute), false).FirstOrDefault();
                    var typeDict = dca == null
                                                ? new CommonDictionaryCollection <AbstractDictionary>()
                                                : dca.GetInstance();
                    IEnumerable items = GetObjectList(bl.Type, type, true);
                    typeDict.AddRange((IEnumerable <IDictionaryItem>)items);
                    _casEnvironment.AddDictionary(type, typeDict);
                }
                catch (Exception)
                {
                    continue;
                    //throw ex;
                }
            }
        }
Пример #4
0
        public void LoadBaseComponents(Aircraft aircraft)
        {
            if (aircraft == null)
            {
                return;
            }

            List <ExecutionResultArgs> resultArgses;
            var qrs  = BaseComponentQueries.GetSelectQueries(aircraft, loadChild: true);
            var ds   = _casEnvironment.Execute(qrs, out resultArgses);
            var args = resultArgses.FirstOrDefault(r => r.Exception != null);

            if (args != null)
            {
                throw args.Exception;
            }
            var baseComponents = BaseQueries.GetObjectList(ds, true, true);

            #region Проверка на еквивалентность базовых агрегатов ВС содержащийхся в ядре

            var equals = true;
            foreach (BaseComponent baseComponent in baseComponents)
            {
                var envBaseComponent = _casEnvironment.BaseComponents.GetItemById(baseComponent.ItemId);                //TODO(Evgenii Babak): использовать ComponentCore
                if (envBaseComponent != null && envBaseComponent.Equals(baseComponent))
                {
                    continue;
                }
                equals = false;
                break;
            }

            //Если коллекции идентичны, то никаких изменений производить не нужно
            if (equals)
            {
                return;
            }

            #endregion

            foreach (BaseComponent baseComponent in baseComponents)
            {
                _casEnvironment.BaseComponents.RemoveById(baseComponent.ItemId);
                _casEnvironment.BaseComponents.Add(baseComponent);
            }
            //return baseDetails;
        }