/* * Сохранение данных */ #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); } }
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); }
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; } } }
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; }