You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
281 lines
15 KiB
281 lines
15 KiB
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<Site>().Property(o => o.Name).IsRequired();
|
|
modelBuilder.Entity<Site>().HasIndex(o => o.Name).IsUnique();
|
|
modelBuilder.Entity<Area>().HasIndex(o => o.Number).IsUnique(); ;
|
|
modelBuilder.Entity<Department>().HasIndex(o => new { o.OrganId, o.Number }).IsUnique();
|
|
modelBuilder.Entity<Organ>().HasIndex(o => o.Name).IsUnique();
|
|
modelBuilder.Entity<Organ>().HasIndex(o => o.Number).IsUnique();
|
|
modelBuilder.Entity<Organ>().HasOne(o => o.Area).WithMany(o => o.Organs).HasForeignKey(o => o.AreaId).OnDelete(DeleteBehavior.SetNull);
|
|
modelBuilder.Entity<Building>().HasIndex(o => o.Number).IsUnique();
|
|
modelBuilder.Entity<Building>().HasOne(o => o.Organ).WithMany(o => o.Buildings).HasForeignKey(o => o.OrganId).OnDelete(DeleteBehavior.SetNull);
|
|
modelBuilder.Entity<OrganUser>().HasOne(o => o.Organ).WithMany(o => o.OrganUsers).HasForeignKey(o => o.OrganId);
|
|
modelBuilder.Entity<OrganUser>().HasOne(o => o.User).WithMany(o => o.OrganUsers).HasForeignKey(o => o.UserId);
|
|
modelBuilder.Entity<OrganUser>().HasIndex(o => new { o.OrganId, o.UserId }).IsUnique();
|
|
|
|
//物联网
|
|
modelBuilder.Entity<OrganIoTScene>().HasOne(o => o.Organ).WithMany(o => o.OrganScenes).HasForeignKey(o => o.OrganId);
|
|
modelBuilder.Entity<OrganIoTSceneIoTCommand>().HasOne(o => o.OrganScene).WithMany(o => o.OrganSceneCommands).HasForeignKey(o => o.OrganSceneId);
|
|
modelBuilder.Entity<OrganIoTSceneIoTCommand>().HasOne(o => o.Command).WithMany(o => o.OrganSceneCommands).HasForeignKey(o => o.CommandId);
|
|
modelBuilder.Entity<OrganIoTSceneTimer>().HasOne(o => o.OrganScene).WithMany(o => o.OrganSceneTimers).HasForeignKey(o => o.OrganSceneId);
|
|
modelBuilder.Entity<OrganIoTSceneTigger>().HasOne(o => o.OrganScene).WithMany(o => o.OrganSceneTiggers).HasForeignKey(o => o.OrganSceneId);
|
|
modelBuilder.Entity<OrganIoTSceneTigger>().HasOne(o => o.Data).WithMany(o => o.OrganSceneTiggers).HasForeignKey(o => o.DataId);
|
|
|
|
modelBuilder.Entity<IoTGatewayCategoryIoTGateway>().HasOne(o => o.Node).WithMany(o => o.CategoryNodes).HasForeignKey(o => o.NodeId);
|
|
modelBuilder.Entity<IoTGatewayCategoryIoTGateway>().HasOne(o => o.Category).WithMany(o => o.CategoryNodes).HasForeignKey(o => o.CategoryId);
|
|
modelBuilder.Entity<IoTGatewayCategoryIoTGateway>().HasIndex(o => new { o.CategoryId, o.NodeId }).IsUnique();
|
|
modelBuilder.Entity<LiveRecord>().Property(o => o.DeviceNumber).IsRequired();
|
|
|
|
modelBuilder.Entity<BuildingIoTGateway>().HasOne(o => o.Building).WithMany(o => o.BuildingIoTGateways).HasForeignKey(o => o.BuildingId);
|
|
modelBuilder.Entity<BuildingIoTGateway>().HasOne(o => o.IoTGateway).WithMany(o => o.BuildingIoTGateways).HasForeignKey(o => o.IoTGatewayId);
|
|
modelBuilder.Entity<BuildingIoTGateway>().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<Area> {
|
|
new Area{
|
|
Type = AreaType.Province,
|
|
Name="吉林省",
|
|
Number="Jilin",
|
|
Children = new List<Area>
|
|
{
|
|
new Area{
|
|
Type= AreaType.City,
|
|
Name="长春市",
|
|
Number="changchun",
|
|
Children = new List<Area>
|
|
{
|
|
new Area
|
|
{
|
|
Type= AreaType.Township,
|
|
Name="南关区",
|
|
Number="nanguan"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
db.Set<Area>().Add(areaRoot);
|
|
db.SaveChanges();
|
|
//初始化机构
|
|
var organRoot = new Organ
|
|
{
|
|
Name = "机构",
|
|
Number = "root",
|
|
Children = new List<Organ>
|
|
{
|
|
new Organ
|
|
{
|
|
Area = db.Set<Area>().FirstOrDefault(o => o.Number == "changchun"),
|
|
Type= OrganType.Type5,
|
|
Name="默认教育局",
|
|
Number="jiaoyuju",
|
|
Children = new List<Organ>
|
|
{
|
|
new Organ
|
|
{
|
|
Area = db.Set<Area>().FirstOrDefault(o => o.Number == "nanguan"),
|
|
Type= OrganType.Type5,
|
|
Name="默认学校",
|
|
Number="xuexiao"
|
|
},
|
|
new Organ
|
|
{
|
|
Area = db.Set<Area>().FirstOrDefault(o => o.Number == "nanguan"),
|
|
Type= OrganType.Type1,
|
|
Name="其他学校",
|
|
Number="qitaxuexiao"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
db.Set<Organ>().Add(organRoot);
|
|
db.SaveChanges();
|
|
//初始化建筑
|
|
var buildingRoot = new Building
|
|
{
|
|
Name = "建筑",
|
|
Number = "root",
|
|
Children = new List<Building>
|
|
{
|
|
new Building
|
|
{
|
|
Organ= db.Set<Organ>().FirstOrDefault(o => o.Number == "xuexiao"),
|
|
Type= BuildingType.Building,
|
|
Name="默认建筑",
|
|
Number="1",
|
|
Children = new List<Building> {
|
|
new Building {
|
|
Organ= db.Set<Organ>().FirstOrDefault(o => o.Number == "xuexiao"),
|
|
Type= BuildingType.Layer,
|
|
Name="1楼",
|
|
Number="11",
|
|
Children=new List<Building>
|
|
{
|
|
new Building{
|
|
Organ= db.Set<Organ>().FirstOrDefault(o => o.Number == "xuexiao"),
|
|
Type= BuildingType.Room,
|
|
Name="101室",
|
|
Number="101"
|
|
},
|
|
new Building{
|
|
Organ= db.Set<Organ>().FirstOrDefault(o => o.Number == "xuexiao"),
|
|
Type= BuildingType.Room,
|
|
Name="102室",
|
|
Number="102"
|
|
}
|
|
}
|
|
},
|
|
new Building {
|
|
Organ= db.Set<Organ>().FirstOrDefault(o => o.Number == "xuexiao"),
|
|
Type= BuildingType.Layer,
|
|
Name="2楼",
|
|
Number="12",
|
|
Children=new List<Building>
|
|
{
|
|
new Building{
|
|
Organ= db.Set<Organ>().FirstOrDefault(o => o.Number == "xuexiao"),
|
|
Type= BuildingType.Room,
|
|
Name="201室",
|
|
Number="201"
|
|
},
|
|
new Building{
|
|
Organ= db.Set<Organ>().FirstOrDefault(o => o.Number == "xuexiao"),
|
|
Type= BuildingType.Room,
|
|
Name="202室",
|
|
Number="202"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
db.Set<Building>().Add(buildingRoot);
|
|
db.SaveChanges();
|
|
//更新Left和Right编号
|
|
db.Set<Area>().FirstOrDefault(o => o.Number == "root").Update();
|
|
db.Set<Organ>().FirstOrDefault(o => o.Number == "root").Update();
|
|
db.Set<Building>().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<Permission>())
|
|
{
|
|
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<User>().Add(new User
|
|
{
|
|
UserName = "super",
|
|
SecurityStamp = securityStam,
|
|
PasswordHash = _encryptionService.CreatePasswordHash("123456", securityStam),
|
|
PasswordConfirmed = true,
|
|
Email = "super@test.com",
|
|
EmailConfirmed = true,
|
|
NickName = "超级管理员",
|
|
UserRoles = new List<UserRole> { new UserRole { Role = saRole } },
|
|
OrganUsers = new List<OrganUser> {
|
|
new OrganUser { Organ = db.Set<Organ>().FirstOrDefault(o => o.Number == "jiaoyuju") },
|
|
new OrganUser { Organ = db.Set<Organ>().FirstOrDefault(o => o.Number == "xuexiao") }
|
|
}
|
|
});
|
|
db.Set<User>().Add(new User
|
|
{
|
|
UserName = "admin",
|
|
SecurityStamp = securityStam,
|
|
PasswordHash = _encryptionService.CreatePasswordHash("123456", securityStam),
|
|
PasswordConfirmed = true,
|
|
Email = "admin@test.com",
|
|
EmailConfirmed = true,
|
|
NickName = "管理员",
|
|
UserRoles = new List<UserRole> { new UserRole { Role = adminRole } },
|
|
OrganUsers = new List<OrganUser> { new OrganUser { Organ = db.Set<Organ>().FirstOrDefault(o => o.Number == "xuexiao") } }
|
|
});
|
|
db.SaveChanges();
|
|
//
|
|
var set = db.Set<Setting>();
|
|
|
|
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<IoTGatewayCategory>().Add(new IoTGatewayCategory { Name = "智慧教室", Template = "node" });
|
|
|
|
db.SaveChanges();
|
|
}
|
|
}
|
|
}
|