using SqlSugar; using System; using System.Collections.Generic; using System.Reflection; using System.Reflection.Emit; using System.Text; namespace ReZero.SuperAPI { /// /// Initialize system data /// public class DataInitializerService { List zeroInterfaceList = new List() { }; List zeroInterfaceCategory = new List() { }; public void Initialize(SuperAPIOptions options) { var db = App.PreStartupDb; if (db != null) { var version = GetVersion(); if (IsChangeVersion(db, version)) { App.PreStartupDb!.QueryFilter.ClearAndBackup(); InitUser(options); InitInterfaceCategory(db); InitEntityInfo(db); InitInterfaceList(db); InitIcon(); InitDatabase(db); InitSetting(db); UpgradeCompatibility(db); InitTempate(db); UpdateVersion(db, version); App.PreStartupDb!.QueryFilter.Restore(); } } } private static string GetVersion() { return Assembly.GetExecutingAssembly().GetName().Version.ToString(); } private static void UpdateVersion(ISqlSugarClient db, string version) { db.Insertable(new ZeroSysSetting() { StringValue = version }).ExecuteReturnSnowflakeId(); } private static bool IsChangeVersion(ISqlSugarClient db, string version) { return !db.Queryable().Any(it => it.StringValue == version); } private void InitTempate(ISqlSugarClient? db) { var entityTemplate = db!.Queryable().Where(it=>it.IsDeleted==false).First(it => it.TypeId==TemplateType.Entity); if (entityTemplate == null) { db!.Insertable(new ZeroTemplate() { Title=TextHandler.GetCommonText("SqlSugar实体类默认模版", "SqlSugar template"), TemplateContent=new MethodApi().ClassNameDefalutTemplateTemplate(), TemplateContentStyle="csharp", Url="c:\\models\\{0}.cs", Creator = DataBaseInitializerProvider.UserName, Id =SqlSugar.SnowFlakeSingle.Instance.NextId(), TypeId=TemplateType.Entity, IsDeleted=false, }).ExecuteCommand(); } } /// /// Initializes the setting. /// /// The database client. private void InitSetting(ISqlSugarClient? db) { var entityType = PubConst.Setting_EntityType; var importUnunderlineType = PubConst.Setting_ImportUnunderlineType; var entityExport = db!.Queryable().First(it => it.ChildTypeId == entityType && it.TypeId == importUnunderlineType); if (entityExport == null) { db!.Insertable(new ZeroSysSetting() { BoolValue = false, ChildTypeId = entityType, EasyDescription = TextHandler.GetCommonText("实体-导入实体是不是去掉下划线", "Entity-Importing entity is not without underline"), TypeId = importUnunderlineType, Creator = DataBaseInitializerProvider.UserName, Id = DataBaseInitializerProvider.Id }).ExecuteCommand(); } } /// /// Upgrades compatibility. /// /// The database client. private static void UpgradeCompatibility(ISqlSugarClient? db) { db!.Updateable() .SetColumns(it => it.IsAttributeMethod == false) .Where(it => it.IsAttributeMethod == null) .ExecuteCommand(); var list = db!.Queryable() .Where(it => it.IsInitialized == false) .Where(it => it.DatabaseId == null).ToList(); foreach (var item in list) { if (item?.DataModel?.TableId > 0) { var entity = db.Queryable().InSingle(item?.DataModel?.TableId); item!.DatabaseId = entity.DataBaseId; db.Updateable(item).ExecuteCommand(); } } } /// /// Initializes the database. /// /// The database client. private void InitDatabase(ISqlSugarClient? db) { db!.Storageable(new ZeroDatabaseInfo() { Connection = db.CurrentConnectionConfig.ConnectionString, DbType = db.CurrentConnectionConfig.DbType, IsInitialized = true, Name = TextHandler.GetCommonText("Rezero", "Rezero database"), Creator = DataBaseInitializerProvider.UserName, Id = DataBaseInitializerProvider.Id }).ExecuteCommand(); } /// /// Initializes the entity information. /// /// The database client. private void InitEntityInfo(ISqlSugarClient? db) { var entity = new EntityInfoInitializerProvider(); var datas = entity.GetDatas(); db!.UpdateNav(datas, new UpdateNavRootOptions() { IsInsertRoot = true }).Include(x => x.ZeroEntityColumnInfos).ExecuteCommand(); } /// /// Initializes the icon. /// private static void InitIcon() { var icon = new IconInitializerProvider(); } /// /// Initializes the interface list. /// /// The database client. private void InitInterfaceList(ISqlSugarClient? db) { db!.Deleteable().Where(it => it.IsInitialized).ExecuteCommand(); var interfaceListProvider = new InterfaceListInitializerProvider(zeroInterfaceList); interfaceListProvider.Set(); db!.Storageable(zeroInterfaceList).ExecuteCommand(); } /// /// Initializes the interface category. /// /// The database client. private void InitInterfaceCategory(ISqlSugarClient? db) { var data = db!.Queryable().InSingle(InterfaceCategoryInitializerProvider.Id200100); db!.Deleteable().Where(it => it.IsInitialized).ExecuteCommand(); var categoryProvider = new InterfaceCategoryInitializerProvider(zeroInterfaceCategory); categoryProvider.Set(); if (data != null) { zeroInterfaceCategory.RemoveAll(it => it.Id == InterfaceCategoryInitializerProvider.Id200100); zeroInterfaceCategory.Add(data); } db!.Storageable(zeroInterfaceCategory).ExecuteCommand(); } /// /// Initializes the user. /// /// The SuperAPI options. private static void InitUser(SuperAPIOptions options) { UserInitializerProvider userInitializerProvider = new UserInitializerProvider(); userInitializerProvider.Initialize(options); } } }