using Infrastructure.Application.Entites.Settings; using Infrastructure.Data; using Infrastructure.Extensions; using Infrastructure.Security; using IoT.Shared; using IoT.Shared.Application.Domain.Entities; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using System.Linq; namespace Platform { public class DbConfig : IDbConfig { private readonly IEncryptionService _encryptionService; public DbConfig(IEncryptionService encryptionService) { this._encryptionService = encryptionService; } public void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { } public void OnModelCreating(ModelBuilder modelBuilder) { IoTSharedDbConfig.OnModelCreating(modelBuilder); //用户中心 modelBuilder.Entity().Property(o => o.Name).IsRequired(); modelBuilder.Entity().HasIndex(o => o.Name).IsUnique(); modelBuilder.Entity().HasIndex(o => o.Number).IsUnique(); ; modelBuilder.Entity().HasIndex(o => new { o.OrganId, o.Number }).IsUnique(); modelBuilder.Entity().HasIndex(o => o.Name).IsUnique(); modelBuilder.Entity().HasIndex(o => o.Number).IsUnique(); modelBuilder.Entity().HasOne(o => o.Area).WithMany(o => o.Organs).HasForeignKey(o => o.AreaId).OnDelete(DeleteBehavior.SetNull); modelBuilder.Entity().HasIndex(o => o.Number).IsUnique(); modelBuilder.Entity().HasOne(o => o.Organ).WithMany(o => o.Buildings).HasForeignKey(o => o.OrganId).OnDelete(DeleteBehavior.SetNull); modelBuilder.Entity().HasOne(o => o.Organ).WithMany(o => o.OrganUsers).HasForeignKey(o => o.OrganId); modelBuilder.Entity().HasOne(o => o.User).WithMany(o => o.OrganUsers).HasForeignKey(o => o.UserId); modelBuilder.Entity().HasIndex(o => new { o.OrganId, o.UserId }).IsUnique(); //物联网 modelBuilder.Entity().HasOne(o => o.Organ).WithMany(o => o.OrganScenes).HasForeignKey(o => o.OrganId); modelBuilder.Entity().HasOne(o => o.OrganScene).WithMany(o => o.OrganSceneCommands).HasForeignKey(o => o.OrganSceneId); modelBuilder.Entity().HasOne(o => o.Command).WithMany(o => o.OrganSceneCommands).HasForeignKey(o => o.CommandId); modelBuilder.Entity().HasOne(o => o.OrganScene).WithMany(o => o.OrganSceneTimers).HasForeignKey(o => o.OrganSceneId); modelBuilder.Entity().HasOne(o => o.OrganScene).WithMany(o => o.OrganSceneTiggers).HasForeignKey(o => o.OrganSceneId); modelBuilder.Entity().HasOne(o => o.Data).WithMany(o => o.OrganSceneTiggers).HasForeignKey(o => o.DataId); modelBuilder.Entity().HasOne(o => o.Node).WithMany(o => o.CategoryNodes).HasForeignKey(o => o.NodeId); modelBuilder.Entity().HasOne(o => o.Category).WithMany(o => o.CategoryNodes).HasForeignKey(o => o.CategoryId); modelBuilder.Entity().HasIndex(o => new { o.CategoryId, o.NodeId }).IsUnique(); modelBuilder.Entity().Property(o => o.DeviceNumber).IsRequired(); modelBuilder.Entity().HasOne(o => o.Building).WithMany(o => o.BuildingIoTGateways).HasForeignKey(o => o.BuildingId); modelBuilder.Entity().HasOne(o => o.IoTGateway).WithMany(o => o.BuildingIoTGateways).HasForeignKey(o => o.IoTGatewayId); modelBuilder.Entity().HasIndex(o => new { o.BuildingId, o.IoTGatewayId }).IsUnique(); } public void Seed(DbContext db) { IoTSharedDbConfig.Seed(db); //初始化区域 var areaRoot = new Area { Name = "区域", Number = "root", Children = new List { new Area{ Type = AreaType.Province, Name="吉林省", Number="Jilin", Children = new List { new Area{ Type= AreaType.City, Name="长春市", Number="changchun", Children = new List { new Area { Type= AreaType.Township, Name="南关区", Number="nanguan" } } } } } } }; db.Set().Add(areaRoot); db.SaveChanges(); //初始化机构 var organRoot = new Organ { Name = "机构", Number = "root", Children = new List { new Organ { Area = db.Set().FirstOrDefault(o => o.Number == "changchun"), Type= OrganType.Type5, Name="默认教育局", Number="jiaoyuju", Children = new List { new Organ { Area = db.Set().FirstOrDefault(o => o.Number == "nanguan"), Type= OrganType.Type5, Name="默认学校", Number="xuexiao" }, new Organ { Area = db.Set().FirstOrDefault(o => o.Number == "nanguan"), Type= OrganType.Type1, Name="其他学校", Number="qitaxuexiao" } } } } }; db.Set().Add(organRoot); db.SaveChanges(); //初始化建筑 var buildingRoot = new Building { Name = "建筑", Number = "root", Children = new List { new Building { Organ= db.Set().FirstOrDefault(o => o.Number == "xuexiao"), Type= BuildingType.Building, Name="默认建筑", Number="1", Children = new List { new Building { Organ= db.Set().FirstOrDefault(o => o.Number == "xuexiao"), Type= BuildingType.Layer, Name="1楼", Number="11", Children=new List { new Building{ Organ= db.Set().FirstOrDefault(o => o.Number == "xuexiao"), Type= BuildingType.Room, Name="101室", Number="101" }, new Building{ Organ= db.Set().FirstOrDefault(o => o.Number == "xuexiao"), Type= BuildingType.Room, Name="102室", Number="102" } } }, new Building { Organ= db.Set().FirstOrDefault(o => o.Number == "xuexiao"), Type= BuildingType.Layer, Name="2楼", Number="12", Children=new List { new Building{ Organ= db.Set().FirstOrDefault(o => o.Number == "xuexiao"), Type= BuildingType.Room, Name="201室", Number="201" }, new Building{ Organ= db.Set().FirstOrDefault(o => o.Number == "xuexiao"), Type= BuildingType.Room, Name="202室", Number="202" } } } } } } }; db.Set().Add(buildingRoot); db.SaveChanges(); //更新Left和Right编号 db.Set().FirstOrDefault(o => o.Number == "root").Update(); db.Set().FirstOrDefault(o => o.Number == "root").Update(); db.Set().FirstOrDefault(o => o.Number == "root").Update(); db.SaveChanges(); var saRole = new Role { Name = "超级管理员", IsReadOnly = true }; var adminRole = new Role { Name = "管理员", IsReadOnly = true }; var skips = new string[] { "添加Api", "修改Api", "添加分类", "修改分类", "添加参数", "修改参数", "添加产品", "修改产品", "添加节点", "添加权限", "修改权限", "添加权限分类", "修改权限分类", "添加设备" }; foreach (var item in db.Set()) { saRole.RolePermissions.Add(new RolePermission { Permission = item, IsReadOnly = true }); if (!item.Name.Contains("删除") && !skips.Contains(item.Name)) { adminRole.RolePermissions.Add(new RolePermission { Permission = item, IsReadOnly = true }); } } var securityStam = "123456"; db.Set().Add(new User { UserName = "super", SecurityStamp = securityStam, PasswordHash = _encryptionService.CreatePasswordHash("123456", securityStam), PasswordConfirmed = true, Email = "super@test.com", EmailConfirmed = true, NickName = "超级管理员", UserRoles = new List { new UserRole { Role = saRole } }, OrganUsers = new List { new OrganUser { Organ = db.Set().FirstOrDefault(o => o.Number == "jiaoyuju") }, new OrganUser { Organ = db.Set().FirstOrDefault(o => o.Number == "xuexiao") } } }); db.Set().Add(new User { UserName = "admin", SecurityStamp = securityStam, PasswordHash = _encryptionService.CreatePasswordHash("123456", securityStam), PasswordConfirmed = true, Email = "admin@test.com", EmailConfirmed = true, NickName = "管理员", UserRoles = new List { new UserRole { Role = adminRole } }, OrganUsers = new List { new OrganUser { Organ = db.Set().FirstOrDefault(o => o.Number == "xuexiao") } } }); db.SaveChanges(); // var set = db.Set(); set.Add(new Setting { Name = "name", Value = "物联平台", Type = SettingType.Text }); set.Add(new Setting { Name = "logo", Value = "/images/logo.png", Type = SettingType.ImageUrl }); set.Add(new Setting { Name = "copyright", Value = "Copyright © {0} Company. All rights reserved", Type = SettingType.Html }); set.Add(new Setting { Name = "iosAppUrl", Value = "itms-services://?action=download-manifest&url=https://iot.edusoa.com/IoTCenter/Info.plist", Type = SettingType.Text }); // var macAddress = Helper.Instance.GetMacAddress(); set.Add(new Setting { Name = "sn", Value = macAddress, Type = SettingType.Text }); set.Add(new Setting { Name = "id", Value = macAddress.Md5(), Type = SettingType.Text }); set.Add(new Setting { Name = "code", Value = "根据id生成的授权码", Type = SettingType.Text }); set.Add(new Setting { Name = "delay", Value = "500", Type = SettingType.Text }); db.SaveChanges(); // set.Add(new Setting { Name = "AccessTokenTimeout", Value = "1440", Type = SettingType.Text }); set.Add(new Setting { Name = "RefreshTokenTimeout", Value = "518400", Type = SettingType.Text }); set.Add(new Setting { Name = "MaxFailedAccessAttemptsBeforeLockout", Value = "5", Type = SettingType.Text }); set.Add(new Setting { Name = "DefaultAccountLockoutMinutes", Value = "10", Type = SettingType.Text }); set.Add(new Setting { Name = "CaptchaSeconds", Value = "60", Type = SettingType.Text }); set.Add(new Setting { Name = "RegisterDisabled", Value = "false", Type = SettingType.Text }); // set.Add(new Setting { Name = "email:host", Value = "nbaxp.com", Type = SettingType.Text }); set.Add(new Setting { Name = "email:port", Value = "25", Type = SettingType.Text }); set.Add(new Setting { Name = "email:user", Value = "admin@nbaxp.com", Type = SettingType.Text }); set.Add(new Setting { Name = "email:password", Value = "123456", Type = SettingType.Text }); set.Add(new Setting { Name = "sms", Value = "false", Type = SettingType.Text }); set.Add(new Setting { Name = "sms:url", Value = "https://api.netease.im/sms/sendcode.action", Type = SettingType.Text }); set.Add(new Setting { Name = "sms:key", Value = "123456", Type = SettingType.Text }); set.Add(new Setting { Name = "sms:secret", Value = "123456", Type = SettingType.Text }); // db.Set().Add(new IoTGatewayCategory { Name = "智慧教室", Template = "node" }); db.SaveChanges(); } } }