增加租户表结构支持

develop
old易 2023-09-19 10:46:06 +08:00
parent 704ca53bc0
commit 57f651cc30
19 changed files with 358 additions and 16 deletions

View File

@ -0,0 +1,115 @@
using New_College.IServices;
using New_College.Model;
using New_College.Model.Models;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace New_College.Api.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
[Authorize(Permissions.Name)]
public class Sys_TenantController : ControllerBase
{
/// <summary>
/// 服务器接口,因为是模板生成,所以首字母是大写的,自己可以重构下
/// </summary>
private readonly ISys_TenantServices _sys_TenantServices;
public Sys_TenantController(ISys_TenantServices Sys_TenantServices)
{
_sys_TenantServices = Sys_TenantServices;
}
[HttpGet]
public async Task<MessageModel<PageModel<Sys_Tenant>>> Get(int page = 1, string key = "", int intPageSize = 50)
{
if (string.IsNullOrEmpty(key) || string.IsNullOrWhiteSpace(key))
{
key = "";
}
Expression<Func<Sys_Tenant, bool>> whereExpression = a => a.Id > 0;
return new MessageModel<PageModel<Sys_Tenant>>()
{
msg = "获取成功",
success = true,
response = await _sys_TenantServices.QueryPage(whereExpression, page, intPageSize)
};
}
[HttpGet("{id}")]
public async Task<MessageModel<Sys_Tenant>> Get(int id = 0)
{
return new MessageModel<Sys_Tenant>()
{
msg = "获取成功",
success = true,
response = await _sys_TenantServices.QueryById(id)
};
}
[HttpPost]
public async Task<MessageModel<string>> Post([FromBody] Sys_Tenant request)
{
var data = new MessageModel<string>();
var id = await _sys_TenantServices.Add(request);
data.success = id > 0;
if (data.success)
{
data.response = id.ObjToString();
data.msg = "添加成功";
}
return data;
}
[HttpPut]
public async Task<MessageModel<string>> Put([FromBody] Sys_Tenant request)
{
var data = new MessageModel<string>();
if (request.Id > 0)
{
data.success = await _sys_TenantServices.Update(request);
if (data.success)
{
data.msg = "更新成功";
data.response = request?.Id.ObjToString();
}
}
return data;
}
[HttpDelete("{id}")]
public async Task<MessageModel<string>> Delete(int id = 0)
{
var data = new MessageModel<string>();
if (id > 0)
{
var detail = await _sys_TenantServices.QueryById(id);
detail.IsDelete = true;
if (detail != null)
{
data.success = await _sys_TenantServices.Update(detail);
if (data.success)
{
data.msg = "删除成功";
data.response = id.ObjToString();
}
}
}
return data;
}
}
}

View File

@ -88,6 +88,7 @@ namespace New_College.Api.Controllers.Front
[AllowAnonymous]
[HttpPost]
[DisplayName("获取微信用户电话号码")]
public async Task<MessageModel<string>> GetWxPhone(DecryptUserPhoneRequest request)
{

View File

@ -1090,6 +1090,11 @@
ID
</summary>
</member>
<member name="P:New_College.Model.Models.Role.TenantId">
<summary>
租户id
</summary>
</member>
<member name="P:New_College.Model.Models.Role.IsDeleted">
<summary>
获取或设置是否禁用,逻辑上的删除,非物理删除
@ -1255,6 +1260,21 @@
是否删除
</summary>
</member>
<member name="P:New_College.Model.Models.DEntityRootTenant.TenantId">
<summary>
租户id
</summary>
</member>
<member name="T:New_College.Model.Models.DEntityTenant">
<summary>
带上租户Id
</summary>
</member>
<member name="P:New_College.Model.Models.DEntityTenant.TenantId">
<summary>
租户id
</summary>
</member>
<member name="T:New_College.Model.Models.EntityModel">
<summary>
不带创建人BaseModel
@ -1301,6 +1321,11 @@
用户信息表
</summary>
</member>
<member name="P:New_College.Model.Models.sysUserInfo.TenantId">
<summary>
租户Id
</summary>
</member>
<member name="P:New_College.Model.Models.sysUserInfo.uID">
<summary>
用户ID
@ -1356,6 +1381,51 @@
登录账号
</summary>
</member>
<member name="T:New_College.Model.Models.Sys_Tenant">
<summary>
租户表
</summary>
</member>
<member name="P:New_College.Model.Models.Sys_Tenant.Name">
<summary>
公司名称
</summary>
</member>
<member name="P:New_College.Model.Models.Sys_Tenant.AdminName">
<summary>
管理员名称
</summary>
</member>
<member name="P:New_College.Model.Models.Sys_Tenant.Host">
<summary>
主机
</summary>
</member>
<member name="P:New_College.Model.Models.Sys_Tenant.Email">
<summary>
电子邮箱
</summary>
</member>
<member name="P:New_College.Model.Models.Sys_Tenant.Phone">
<summary>
电话
</summary>
</member>
<member name="P:New_College.Model.Models.Sys_Tenant.Connection">
<summary>
数据库连接
</summary>
</member>
<member name="P:New_College.Model.Models.Sys_Tenant.Schema">
<summary>
架构
</summary>
</member>
<member name="P:New_College.Model.Models.Sys_Tenant.Remark">
<summary>
备注
</summary>
</member>
<member name="T:New_College.Model.Models.TasksQz">
<summary>
任务计划表

View File

@ -108,6 +108,11 @@
</summary>
<returns></returns>
</member>
<member name="F:New_College.Api.Controllers.Sys_TenantController._sys_TenantServices">
<summary>
服务器接口,因为是模板生成,所以首字母是大写的,自己可以重构下
</summary>
</member>
<member name="M:New_College.Api.Controllers.Front.CustomerController.GetWxOpenId(New_College.Model.WeixinLogin)">
<summary>
获取微信openid

View File

@ -152,7 +152,7 @@ namespace New_College
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, MyContext myContext, ITasksQzServices tasksQzServices, ISchedulerCenter schedulerCenter, IHostApplicationLifetime lifetime)
{
// Ip限流,尽量放管道外层
//app.UseIpLimitMildd();
app.UseIpLimitMildd();
// 记录请求与返回数据
app.UseReuestResponseLog();
// signalr
@ -215,7 +215,7 @@ namespace New_College
});
// 生成种子数据
app.UseSeedDataMildd(myContext, Env.WebRootPath);
// app.UseSeedDataMildd(myContext, Env.WebRootPath);
// 开启QuartzNetJob调度服务
app.UseQuartzJobMildd(tasksQzServices, schedulerCenter);
//服务注册

View File

@ -48,7 +48,7 @@
},
"Date": "2018-08-28",
"SeedDBEnabled": true, //
"SeedDBDataEnabled": true, //,
"SeedDBDataEnabled": false, //,
"Author": "New_College"
},
@ -168,22 +168,22 @@
{
"Endpoint": "*:/api/blog*",
"Period": "1m",
"Limit": 20000
"Limit": 200000
},
{
"Endpoint": "*/api/*",
"Period": "1s",
"Limit": 3000
},
{
"Endpoint": "*/api/*",
"Period": "1m",
"Limit": 300000
},
{
"Endpoint": "*/api/*",
"Period": "1m",
"Limit": 3000000
},
{
"Endpoint": "*/api/*",
"Period": "12h",
"Limit": 5000000
"Limit": 50000000000
}
]

View File

@ -20,7 +20,7 @@ namespace New_College.Extensions
{
if (Appsettings.app("AppSettings", "SeedDBEnabled").ObjToBool() || Appsettings.app("AppSettings", "SeedDBDataEnabled").ObjToBool())
{
// DBSeed.SeedAsync(myContext, webRootPath).Wait();
DBSeed.SeedAsync(myContext, webRootPath).Wait();
}
}
catch (Exception e)

View File

@ -0,0 +1,12 @@
using New_College.IServices.BASE;
using New_College.Model.Models;
namespace New_College.IServices
{
/// <summary>
/// ISys_TenantServices
/// </summary>
public interface ISys_TenantServices :IBaseServices<Sys_Tenant>
{
}
}

View File

@ -9,7 +9,7 @@ namespace New_College.Model.Models
/// <summary>
/// 海报管理
/// </summary>
public class BannerInfo : RootEntity
public class BannerInfo : DEntityRootTenant
{
/// <summary>
/// banner name

View File

@ -4,7 +4,7 @@ using System.Text;
namespace New_College.Model.Models
{
public class D_NewsInfo : RootEntity
public class D_NewsInfo : DEntityRootTenant
{
public int CategoryId { get; set; }

View File

@ -32,7 +32,10 @@ namespace New_College.Model.Models
[SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 租户id
/// </summary>
public virtual int? TenantId { get; set; }
/// <summary>
///获取或设置是否禁用,逻辑上的删除,非物理删除
/// </summary>

View File

@ -59,6 +59,25 @@ namespace New_College.Model.Models
}
public abstract class DEntityRootTenant : RootEntity
{
/// <summary>
/// 租户id
/// </summary>
public virtual int? TenantId { get; set; }
}
/// <summary>
///带上租户Id
/// </summary>
public abstract class DEntityTenant : EntityModel
{
/// <summary>
/// 租户id
/// </summary>
public virtual int? TenantId { get; set; }
}
/// <summary>
/// 不带创建人BaseModel
/// </summary>

View File

@ -0,0 +1,64 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace New_College.Model.Models
{
/// <summary>
/// 租户表
/// </summary>
[Table("sys_tenant")]
public class Sys_Tenant : EntityModel
{
/// <summary>
/// 公司名称
/// </summary>
[Required, MaxLength(30)]
public string Name { get; set; }
/// <summary>
/// 管理员名称
/// </summary>
[Required, MaxLength(20)]
public string AdminName { get; set; }
/// <summary>
/// 主机
/// </summary>
[MaxLength(100)]
public string Host { get; set; }
/// <summary>
/// 电子邮箱
/// </summary>
[MaxLength(50)]
public string Email { get; set; }
/// <summary>
/// 电话
/// </summary>
[MaxLength(20)]
public string Phone { get; set; }
/// <summary>
/// 数据库连接
/// </summary>
[MaxLength(200)]
public string Connection { get; set; }
/// <summary>
/// 架构
/// </summary>
[MaxLength(50)]
public string Schema { get; set; }
/// <summary>
/// 备注
/// </summary>
[MaxLength(100)]
public string Remark { get; set; }
}
}

View File

@ -10,7 +10,7 @@ namespace New_College.Model.Models
/// <summary>
/// 用户跟角色关联表
/// </summary>
public class UserRole : RootEntity
public class UserRole : DEntityRootTenant
{
public UserRole() { }

View File

@ -6,7 +6,7 @@ using System.Text;
namespace New_College.Model.Models
{
public class V_CustomerInfo : EntityModel
public class V_CustomerInfo : DEntityTenant
{
/// <summary>
/// 用户头像

View File

@ -27,6 +27,12 @@ namespace New_College.Model.Models
name = "";
}
/// <summary>
/// 租户Id
/// </summary>
public virtual int? TenantId { get; set; }
/// <summary>
/// 用户ID
/// </summary>

View File

@ -0,0 +1,12 @@
using New_College.IRepository.Base;
using New_College.Model.Models;
namespace New_College.IRepository
{
/// <summary>
/// ISys_TenantRepository
/// </summary>
public interface ISys_TenantRepository : IBaseRepository<Sys_Tenant>
{
}
}

View File

@ -0,0 +1,17 @@
using New_College.IRepository;
using New_College.IRepository.UnitOfWork;
using New_College.Model.Models;
using New_College.Repository.Base;
namespace New_College.Repository
{
/// <summary>
/// Sys_TenantRepository
/// </summary>
public class Sys_TenantRepository : BaseRepository<Sys_Tenant>, ISys_TenantRepository
{
public Sys_TenantRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
{
}
}
}

View File

@ -0,0 +1,18 @@

using New_College.IServices;
using New_College.Model.Models;
using New_College.Services.BASE;
using New_College.IRepository.Base;
namespace New_College.Services
{
public class Sys_TenantServices : BaseServices<Sys_Tenant>, ISys_TenantServices
{
private readonly IBaseRepository<Sys_Tenant> _dal;
public Sys_TenantServices(IBaseRepository<Sys_Tenant> dal)
{
this._dal = dal;
base.BaseDal = dal;
}
}
}