- Model层新增AdminConfig实体和AdminConfigReadDbContext(只读连接Admin库) - API项目新增AdminConnection连接字符串,注册AdminConfigReadDbContext - Core层ConfigService按key路由:运营配置走Admin库,业务配置走业务库 - WechatPayConfigService改为从Admin库读取支付/小程序配置 - WechatService新增AdminConfigReadDbContext注入,配置读取改为Admin库 - Autofac注册同步更新三个服务的依赖注入 - Admin.Business的AdminConfigService改用AdminConfigDbContext连接Admin库
366 lines
11 KiB
C#
366 lines
11 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using MiAssessment.Admin.Business.Entities;
|
|
|
|
namespace MiAssessment.Admin.Business.Data;
|
|
|
|
/// <summary>
|
|
/// Admin 业务模块数据库上下文
|
|
/// 用于访问业务数据库中的所有业务表
|
|
/// </summary>
|
|
public class AdminBusinessDbContext : DbContext
|
|
{
|
|
public AdminBusinessDbContext(DbContextOptions<AdminBusinessDbContext> options) : base(options)
|
|
{
|
|
}
|
|
|
|
#region 系统配置
|
|
|
|
/// <summary>
|
|
/// 系统配置表
|
|
/// </summary>
|
|
public DbSet<Config> Configs { get; set; } = null!;
|
|
|
|
#endregion
|
|
|
|
#region 内容管理
|
|
|
|
/// <summary>
|
|
/// 轮播图表
|
|
/// </summary>
|
|
public DbSet<Banner> Banners { get; set; } = null!;
|
|
|
|
/// <summary>
|
|
/// 宣传图表
|
|
/// </summary>
|
|
public DbSet<Promotion> Promotions { get; set; } = null!;
|
|
|
|
#endregion
|
|
|
|
#region 测评管理
|
|
|
|
/// <summary>
|
|
/// 测评类型表
|
|
/// </summary>
|
|
public DbSet<AssessmentType> AssessmentTypes { get; set; } = null!;
|
|
|
|
/// <summary>
|
|
/// 题目表
|
|
/// </summary>
|
|
public DbSet<Question> Questions { get; set; } = null!;
|
|
|
|
/// <summary>
|
|
/// 报告分类表
|
|
/// </summary>
|
|
public DbSet<ReportCategory> ReportCategories { get; set; } = null!;
|
|
|
|
/// <summary>
|
|
/// 题目分类映射表
|
|
/// </summary>
|
|
public DbSet<QuestionCategoryMapping> QuestionCategoryMappings { get; set; } = null!;
|
|
|
|
/// <summary>
|
|
/// 报告结论表
|
|
/// </summary>
|
|
public DbSet<ReportConclusion> ReportConclusions { get; set; } = null!;
|
|
|
|
/// <summary>
|
|
/// 测评记录表
|
|
/// </summary>
|
|
public DbSet<AssessmentRecord> AssessmentRecords { get; set; } = null!;
|
|
|
|
/// <summary>
|
|
/// 测评答案表
|
|
/// </summary>
|
|
public DbSet<AssessmentAnswer> AssessmentAnswers { get; set; } = null!;
|
|
|
|
/// <summary>
|
|
/// 测评结果表
|
|
/// </summary>
|
|
public DbSet<AssessmentResult> AssessmentResults { get; set; } = null!;
|
|
|
|
#endregion
|
|
|
|
#region 用户管理
|
|
|
|
/// <summary>
|
|
/// 用户表
|
|
/// </summary>
|
|
public DbSet<User> Users { get; set; } = null!;
|
|
|
|
#endregion
|
|
|
|
#region 订单管理
|
|
|
|
/// <summary>
|
|
/// 订单表
|
|
/// </summary>
|
|
public DbSet<Order> Orders { get; set; } = null!;
|
|
|
|
#endregion
|
|
|
|
#region 规划师管理
|
|
|
|
/// <summary>
|
|
/// 规划师表
|
|
/// </summary>
|
|
public DbSet<Planner> Planners { get; set; } = null!;
|
|
|
|
/// <summary>
|
|
/// 规划预约表
|
|
/// </summary>
|
|
public DbSet<PlannerBooking> PlannerBookings { get; set; } = null!;
|
|
|
|
#endregion
|
|
|
|
#region 分销管理
|
|
|
|
/// <summary>
|
|
/// 邀请码表
|
|
/// </summary>
|
|
public DbSet<InviteCode> InviteCodes { get; set; } = null!;
|
|
|
|
/// <summary>
|
|
/// 佣金记录表
|
|
/// </summary>
|
|
public DbSet<Commission> Commissions { get; set; } = null!;
|
|
|
|
/// <summary>
|
|
/// 提现记录表
|
|
/// </summary>
|
|
public DbSet<Withdrawal> Withdrawals { get; set; } = null!;
|
|
|
|
#endregion
|
|
|
|
#region 业务介绍页管理
|
|
|
|
/// <summary>
|
|
/// 业务介绍页表
|
|
/// </summary>
|
|
public DbSet<BusinessPage> BusinessPages { get; set; } = null!;
|
|
|
|
#endregion
|
|
|
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
{
|
|
base.OnModelCreating(modelBuilder);
|
|
|
|
// =============================================
|
|
// Config 配置
|
|
// =============================================
|
|
modelBuilder.Entity<Config>(entity =>
|
|
{
|
|
// ConfigKey 唯一索引
|
|
entity.HasIndex(e => e.ConfigKey)
|
|
.IsUnique()
|
|
.HasDatabaseName("UK_configs_key");
|
|
|
|
// ConfigValue 使用 nvarchar(max)
|
|
entity.Property(e => e.ConfigValue)
|
|
.HasColumnType("nvarchar(max)");
|
|
});
|
|
|
|
// =============================================
|
|
// User 配置
|
|
// =============================================
|
|
modelBuilder.Entity<User>(entity =>
|
|
{
|
|
// Uid 唯一索引
|
|
entity.HasIndex(e => e.Uid)
|
|
.IsUnique()
|
|
.HasDatabaseName("UK_users_uid");
|
|
|
|
// OpenId 唯一索引
|
|
entity.HasIndex(e => e.OpenId)
|
|
.IsUnique()
|
|
.HasDatabaseName("UK_users_open_id");
|
|
|
|
// 金额字段精度配置
|
|
entity.Property(e => e.Balance)
|
|
.HasColumnType("decimal(10,2)");
|
|
|
|
entity.Property(e => e.TotalIncome)
|
|
.HasColumnType("decimal(10,2)");
|
|
|
|
entity.Property(e => e.WithdrawnAmount)
|
|
.HasColumnType("decimal(10,2)");
|
|
});
|
|
|
|
// =============================================
|
|
// AssessmentType 配置
|
|
// =============================================
|
|
modelBuilder.Entity<AssessmentType>(entity =>
|
|
{
|
|
// Code 唯一索引
|
|
entity.HasIndex(e => e.Code)
|
|
.IsUnique()
|
|
.HasDatabaseName("UK_assessment_types_code");
|
|
|
|
// IntroContent 使用 nvarchar(max)
|
|
entity.Property(e => e.IntroContent)
|
|
.HasColumnType("nvarchar(max)");
|
|
|
|
// Price 精度配置
|
|
entity.Property(e => e.Price)
|
|
.HasColumnType("decimal(10,2)");
|
|
});
|
|
|
|
// =============================================
|
|
// Question 配置
|
|
// =============================================
|
|
modelBuilder.Entity<Question>(entity =>
|
|
{
|
|
// (AssessmentTypeId, QuestionNo) 复合唯一索引
|
|
entity.HasIndex(e => new { e.AssessmentTypeId, e.QuestionNo })
|
|
.IsUnique()
|
|
.HasDatabaseName("UK_questions_type_no");
|
|
});
|
|
|
|
// =============================================
|
|
// QuestionCategoryMapping 配置
|
|
// =============================================
|
|
modelBuilder.Entity<QuestionCategoryMapping>(entity =>
|
|
{
|
|
// (QuestionId, CategoryId) 复合唯一索引
|
|
entity.HasIndex(e => new { e.QuestionId, e.CategoryId })
|
|
.IsUnique()
|
|
.HasDatabaseName("UK_question_category_mappings");
|
|
});
|
|
|
|
// =============================================
|
|
// ReportConclusion 配置
|
|
// =============================================
|
|
modelBuilder.Entity<ReportConclusion>(entity =>
|
|
{
|
|
// Content 使用 nvarchar(max)
|
|
entity.Property(e => e.Content)
|
|
.HasColumnType("nvarchar(max)");
|
|
});
|
|
|
|
// =============================================
|
|
// Order 配置
|
|
// =============================================
|
|
modelBuilder.Entity<Order>(entity =>
|
|
{
|
|
// OrderNo 唯一索引
|
|
entity.HasIndex(e => e.OrderNo)
|
|
.IsUnique()
|
|
.HasDatabaseName("UK_orders_order_no");
|
|
|
|
// 金额字段精度配置
|
|
entity.Property(e => e.Amount)
|
|
.HasColumnType("decimal(10,2)");
|
|
|
|
entity.Property(e => e.PayAmount)
|
|
.HasColumnType("decimal(10,2)");
|
|
|
|
entity.Property(e => e.RefundAmount)
|
|
.HasColumnType("decimal(10,2)");
|
|
});
|
|
|
|
// =============================================
|
|
// Planner 配置
|
|
// =============================================
|
|
modelBuilder.Entity<Planner>(entity =>
|
|
{
|
|
// Price 精度配置
|
|
entity.Property(e => e.Price)
|
|
.HasColumnType("decimal(10,2)");
|
|
});
|
|
|
|
// =============================================
|
|
// PlannerBooking 配置
|
|
// =============================================
|
|
modelBuilder.Entity<PlannerBooking>(entity =>
|
|
{
|
|
// BookingDate 使用 date 类型
|
|
entity.Property(e => e.BookingDate)
|
|
.HasColumnType("date");
|
|
});
|
|
|
|
// =============================================
|
|
// InviteCode 配置
|
|
// =============================================
|
|
modelBuilder.Entity<InviteCode>(entity =>
|
|
{
|
|
// Code 唯一索引
|
|
entity.HasIndex(e => e.Code)
|
|
.IsUnique()
|
|
.HasDatabaseName("UK_invite_codes_code");
|
|
});
|
|
|
|
// =============================================
|
|
// Commission 配置
|
|
// =============================================
|
|
modelBuilder.Entity<Commission>(entity =>
|
|
{
|
|
// 金额字段精度配置
|
|
entity.Property(e => e.OrderAmount)
|
|
.HasColumnType("decimal(10,2)");
|
|
|
|
entity.Property(e => e.CommissionRate)
|
|
.HasColumnType("decimal(5,2)");
|
|
|
|
entity.Property(e => e.CommissionAmount)
|
|
.HasColumnType("decimal(10,2)");
|
|
});
|
|
|
|
// =============================================
|
|
// Withdrawal 配置
|
|
// =============================================
|
|
modelBuilder.Entity<Withdrawal>(entity =>
|
|
{
|
|
// WithdrawalNo 唯一索引
|
|
entity.HasIndex(e => e.WithdrawalNo)
|
|
.IsUnique()
|
|
.HasDatabaseName("UK_withdrawals_withdrawal_no");
|
|
|
|
// 金额字段精度配置
|
|
entity.Property(e => e.Amount)
|
|
.HasColumnType("decimal(10,2)");
|
|
|
|
entity.Property(e => e.BeforeBalance)
|
|
.HasColumnType("decimal(10,2)");
|
|
|
|
entity.Property(e => e.AfterBalance)
|
|
.HasColumnType("decimal(10,2)");
|
|
});
|
|
|
|
// =============================================
|
|
// AssessmentAnswer 配置
|
|
// =============================================
|
|
modelBuilder.Entity<AssessmentAnswer>(entity =>
|
|
{
|
|
// (RecordId, QuestionId) 复合唯一索引
|
|
entity.HasIndex(e => new { e.RecordId, e.QuestionId })
|
|
.IsUnique()
|
|
.HasDatabaseName("UK_assessment_answers_record_question");
|
|
});
|
|
|
|
// =============================================
|
|
// AssessmentResult 配置
|
|
// =============================================
|
|
modelBuilder.Entity<AssessmentResult>(entity =>
|
|
{
|
|
// 分数字段精度配置
|
|
entity.Property(e => e.Score)
|
|
.HasColumnType("decimal(18,2)");
|
|
|
|
entity.Property(e => e.MaxScore)
|
|
.HasColumnType("decimal(18,2)");
|
|
|
|
entity.Property(e => e.Percentage)
|
|
.HasColumnType("decimal(18,2)");
|
|
});
|
|
|
|
// =============================================
|
|
// BusinessPage 配置
|
|
// =============================================
|
|
modelBuilder.Entity<BusinessPage>(entity =>
|
|
{
|
|
// Status 索引
|
|
entity.HasIndex(e => e.Status)
|
|
.HasDatabaseName("IX_business_pages_status");
|
|
});
|
|
}
|
|
}
|