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.
iot/projects/Platform/DbConfig.cs

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();
}
}
}