diff --git a/src/0-core/HuanMeng.MiaoYu.Code/Chat/ChatBLL.cs b/src/0-core/HuanMeng.MiaoYu.Code/Chat/ChatBLL.cs new file mode 100644 index 0000000..2416718 --- /dev/null +++ b/src/0-core/HuanMeng.MiaoYu.Code/Chat/ChatBLL.cs @@ -0,0 +1,38 @@ +using HuanMeng.DotNetCore.Base; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HuanMeng.MiaoYu.Code.Chat +{ + /// + /// 聊天类 + /// + public class ChatBLL : MiaoYuBase + { + public ChatBLL(IServiceProvider serviceProvider) : base(serviceProvider) + { + + } + /// + /// 删除聊天记录 + /// + /// 聊天id + /// + /// + public async Task DelChatByIds(List id,int characterId) + { + var chatsToDelete = Dao.daoDbMiaoYu.context.T_Chat.Where(t => id.Contains(t.Id)).ToList(); + if (chatsToDelete.Count <= 0) + { + throw new Exception(""); + } + var chatList = chatsToDelete.Where(t => t.UserId == _UserId && t.CharacterId == characterId && t.IsDel == false).ToList(); + Dao.daoDbMiaoYu.context.T_Chat.RemoveRange(chatList); + Dao.daoDbMiaoYu.context.SaveChanges(); + return true; + } + } +} diff --git a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/MiaoYuContext.cs b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/MiaoYuContext.cs index 363d32d..f26e777 100644 --- a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/MiaoYuContext.cs +++ b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/MiaoYuContext.cs @@ -38,6 +38,36 @@ public partial class MiaoYuContext : MultiTenantDbContext//DbContext } + /// + /// 人物表 + /// + public virtual DbSet T_Character { get; set; } + + /// + /// 角色标签表 + /// + public virtual DbSet T_Character_Label { get; set; } + + /// + /// 关联角色和标签 + /// + public virtual DbSet T_Character_Label_Relation { get; set; } + + /// + /// 发现页类型分类 + /// + public virtual DbSet T_Character_Type { get; set; } + + /// + /// 存储用户和角色之间的亲密值 + /// + public virtual DbSet T_Character_User_Intimacy { get; set; } + + /// + /// 聊天记录表 + /// + public virtual DbSet T_Chat { get; set; } + /// /// 用户表 /// @@ -63,6 +93,193 @@ public partial class MiaoYuContext : MultiTenantDbContext//DbContext protected override void OnModelCreating(ModelBuilder modelBuilder) { + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PK__T_Charac__3214EC070A8D79B3"); + + entity.ToTable(tb => tb.HasComment("人物表")); + + entity.Property(e => e.Id) + .ValueGeneratedNever() + .HasComment("人物id"); + entity.Property(e => e.Biography) + .HasMaxLength(500) + .HasComment("人物简介"); + entity.Property(e => e.CreateTime) + .HasComment("创建时间") + .HasColumnType("datetime"); + entity.Property(e => e.Gender).HasComment("性别0男1女2其他"); + entity.Property(e => e.Model) + .HasMaxLength(255) + .IsUnicode(false) + .HasComment("人物模型"); + entity.Property(e => e.Name) + .HasMaxLength(50) + .HasComment("人物名字"); + entity.Property(e => e.Prologue) + .HasMaxLength(255) + .HasComment("开场白"); + entity.Property(e => e.Style).HasComment("风格id"); + entity.Property(e => e.System) + .HasMaxLength(255) + .IsUnicode(false) + .HasComment("人物初始设定"); + entity.Property(e => e.TenantId).HasComment("租户Id"); + entity.Property(e => e.UpdateTime) + .HasComment("更新时间") + .HasColumnType("datetime"); + entity.Property(e => e.Visibility).HasComment("公开/私密 0公开 1私密"); + //添加全局筛选器 + if (this.TenantInfo != null) + { + entity.HasQueryFilter(it => it.TenantId == this.TenantInfo.TenantId); + } + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PK__T_Charac__3214EC0777B5F217"); + + entity.ToTable(tb => tb.HasComment("角色标签表")); + + entity.Property(e => e.Id) + .ValueGeneratedNever() + .HasComment("标签id"); + entity.Property(e => e.CreateTime) + .HasComment("创建时间") + .HasColumnType("datetime"); + entity.Property(e => e.LabelName) + .HasMaxLength(50) + .HasComment("标签名称"); + entity.Property(e => e.TenantId).HasComment("租户id"); + entity.Property(e => e.UpdateTime) + .HasComment("更新时间") + .HasColumnType("datetime"); + //添加全局筛选器 + if (this.TenantInfo != null) + { + entity.HasQueryFilter(it => it.TenantId == this.TenantInfo.TenantId); + } + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PK__T_Charac__3214EC071FC16A53"); + + entity.ToTable(tb => tb.HasComment("关联角色和标签")); + + entity.Property(e => e.Id) + .ValueGeneratedNever() + .HasComment("人物和标签的关联id"); + entity.Property(e => e.CharacterId_) + .HasComment("人物Id") + .HasColumnName("CharacterId "); + entity.Property(e => e.CharacterLabelId).HasComment("人物标签id"); + entity.Property(e => e.CreateTime) + .HasComment("创建时间") + .HasColumnType("datetime"); + entity.Property(e => e.TenantId).HasComment("租户id"); + entity.Property(e => e.UpdateTime) + .HasComment("更新时间") + .HasColumnType("datetime"); + //添加全局筛选器 + if (this.TenantInfo != null) + { + entity.HasQueryFilter(it => it.TenantId == this.TenantInfo.TenantId); + } + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PK__T_Charac__3214EC070CC04F82"); + + entity.ToTable(tb => tb.HasComment("发现页类型分类")); + + entity.Property(e => e.Id) + .ValueGeneratedNever() + .HasComment("类型id"); + entity.Property(e => e.CreateTime).HasComment("创建时间"); + entity.Property(e => e.Name) + .HasMaxLength(255) + .HasComment("类型名称"); + entity.Property(e => e.TenantId).HasComment("租户id"); + entity.Property(e => e.UpdateTime).HasComment("更新时间"); + //添加全局筛选器 + if (this.TenantInfo != null) + { + entity.HasQueryFilter(it => it.TenantId == this.TenantInfo.TenantId); + } + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PK__T_Charac__3214EC079BEEBDEA"); + + entity.ToTable(tb => tb.HasComment("存储用户和角色之间的亲密值")); + + entity.Property(e => e.Id) + .ValueGeneratedNever() + .HasComment("亲密度id"); + entity.Property(e => e.CharacterId).HasComment("人物Id"); + entity.Property(e => e.CreateTime) + .HasComment("创建时间") + .HasColumnType("datetime"); + entity.Property(e => e.IntimacyValue).HasComment("亲密值"); + entity.Property(e => e.TenantId).HasComment("租户id"); + entity.Property(e => e.UpdateTime) + .HasComment("更新时间") + .HasColumnType("datetime"); + entity.Property(e => e.UserId).HasComment("用户Id"); + //添加全局筛选器 + if (this.TenantInfo != null) + { + entity.HasQueryFilter(it => it.TenantId == this.TenantInfo.TenantId); + } + }); + + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id).HasName("PK__T_Chat__3214EC079C2C8859"); + + entity.ToTable(tb => tb.HasComment("聊天记录表")); + + entity.Property(e => e.Id) + .ValueGeneratedNever() + .HasComment("聊天id"); + entity.Property(e => e.CharacterId).HasComment("人物表Id"); + entity.Property(e => e.Content) + .HasMaxLength(255) + .HasComment("消息内容"); + entity.Property(e => e.CreateDay).HasComment("发送日期"); + entity.Property(e => e.CreateTime) + .HasComment("创建时间") + .HasColumnType("datetime"); + entity.Property(e => e.Input_tokens).HasComment("输入token"); + entity.Property(e => e.IsDel).HasComment("是否假删除0否1是"); + entity.Property(e => e.Model) + .HasMaxLength(255) + .IsUnicode(false) + .HasComment("人物模型"); + entity.Property(e => e.Output_tokens).HasComment("输出token"); + entity.Property(e => e.Role) + .HasMaxLength(50) + .IsUnicode(false) + .HasComment("user/assistant"); + entity.Property(e => e.TenantId).HasComment("租户id"); + entity.Property(e => e.TimeStamp) + .HasComment("发送时间") + .HasColumnType("datetime"); + entity.Property(e => e.UpdateTime) + .HasComment("更新时间") + .HasColumnType("datetime"); + entity.Property(e => e.UserId).HasComment("聊天内容"); + //添加全局筛选器 + if (this.TenantInfo != null) + { + entity.HasQueryFilter(it => it.TenantId == this.TenantInfo.TenantId); + } + }); + modelBuilder.Entity(entity => { entity.HasKey(e => e.Id).HasName("PK__T_User__3214EC073733108B"); diff --git a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Character.cs b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Character.cs new file mode 100644 index 0000000..46dceb5 --- /dev/null +++ b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Character.cs @@ -0,0 +1,65 @@ +using System; + +namespace HuanMeng.MiaoYu.Model.DbSqlServer.Db_MiaoYu; + +/// +/// 人物表 +/// +public partial class T_Character: MultiTenantEntity +{ + /// + /// 人物id + /// + public int Id { get; set; } + + /// + /// 人物名字 + /// + public string? Name { get; set; } + + /// + /// 人物简介 + /// + public string? Biography { get; set; } + + + /// + /// 开场白 + /// + public string Prologue { get; set; } = null!; + + /// + /// 风格id + /// + public int? Style { get; set; } + + /// + /// 公开/私密 0公开 1私密 + /// + public bool Visibility { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreateTime { get; set; } + + /// + /// 更新时间 + /// + public DateTime? UpdateTime { get; set; } + + /// + /// 性别0男1女2其他 + /// + public int Gender { get; set; } + + /// + /// 人物模型 + /// + public string? Model { get; set; } + + /// + /// 人物初始设定 + /// + public string? System { get; set; } +} diff --git a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Character_Label.cs b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Character_Label.cs new file mode 100644 index 0000000..d2f565c --- /dev/null +++ b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Character_Label.cs @@ -0,0 +1,30 @@ +using System; + +namespace HuanMeng.MiaoYu.Model.DbSqlServer.Db_MiaoYu; + +/// +/// 角色标签表 +/// +public partial class T_Character_Label: MultiTenantEntity +{ + /// + /// 标签id + /// + public int Id { get; set; } + + + /// + /// 标签名称 + /// + public string? LabelName { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreateTime { get; set; } + + /// + /// 更新时间 + /// + public DateTime? UpdateTime { get; set; } +} diff --git a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Character_Label_Relation.cs b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Character_Label_Relation.cs new file mode 100644 index 0000000..91e1ed3 --- /dev/null +++ b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Character_Label_Relation.cs @@ -0,0 +1,35 @@ +using System; + +namespace HuanMeng.MiaoYu.Model.DbSqlServer.Db_MiaoYu; + +/// +/// 关联角色和标签 +/// +public partial class T_Character_Label_Relation: MultiTenantEntity +{ + /// + /// 人物和标签的关联id + /// + public int Id { get; set; } + + /// + /// 人物Id + /// + public int? CharacterId_ { get; set; } + + /// + /// 人物标签id + /// + public int? CharacterLabelId { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreateTime { get; set; } + + /// + /// 更新时间 + /// + public DateTime? UpdateTime { get; set; } + +} diff --git a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Character_Type.cs b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Character_Type.cs new file mode 100644 index 0000000..fd0d9dc --- /dev/null +++ b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Character_Type.cs @@ -0,0 +1,30 @@ +using System; + +namespace HuanMeng.MiaoYu.Model.DbSqlServer.Db_MiaoYu; + +/// +/// 发现页类型分类 +/// +public partial class T_Character_Type: MultiTenantEntity +{ + /// + /// 类型id + /// + public int Id { get; set; } + + /// + /// 类型名称 + /// + public string? Name { get; set; } + + + /// + /// 创建时间 + /// + public DateTime CreateTime { get; set; } + + /// + /// 更新时间 + /// + public DateTime UpdateTime { get; set; } +} diff --git a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Character_User_Intimacy.cs b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Character_User_Intimacy.cs new file mode 100644 index 0000000..17579eb --- /dev/null +++ b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Character_User_Intimacy.cs @@ -0,0 +1,40 @@ +using System; + +namespace HuanMeng.MiaoYu.Model.DbSqlServer.Db_MiaoYu; + +/// +/// 存储用户和角色之间的亲密值 +/// +public partial class T_Character_User_Intimacy: MultiTenantEntity +{ + /// + /// 亲密度id + /// + public int Id { get; set; } + + + /// + /// 人物Id + /// + public int? CharacterId { get; set; } + + /// + /// 用户Id + /// + public int? UserId { get; set; } + + /// + /// 亲密值 + /// + public int? IntimacyValue { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreateTime { get; set; } + + /// + /// 更新时间 + /// + public DateTime? UpdateTime { get; set; } +} diff --git a/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Chat.cs b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Chat.cs new file mode 100644 index 0000000..f20ee9b --- /dev/null +++ b/src/0-core/HuanMeng.MiaoYu.Model/DbSqlServer/Db_MiaoYu/T_Chat.cs @@ -0,0 +1,75 @@ +using System; + +namespace HuanMeng.MiaoYu.Model.DbSqlServer.Db_MiaoYu; + +/// +/// 聊天记录表 +/// +public partial class T_Chat: MultiTenantEntity +{ + /// + /// 聊天id + /// + public int Id { get; set; } + + + /// + /// 聊天内容 + /// + public int? UserId { get; set; } + + /// + /// 消息内容 + /// + public string Content { get; set; } = null!; + + /// + /// 发送时间 + /// + public DateTime? TimeStamp { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreateTime { get; set; } + + /// + /// 更新时间 + /// + public DateTime? UpdateTime { get; set; } + + /// + /// 输入token + /// + public int? Input_tokens { get; set; } + + /// + /// 输出token + /// + public int Output_tokens { get; set; } + + /// + /// 人物表Id + /// + public int? CharacterId { get; set; } + + /// + /// user/assistant + /// + public string Role { get; set; } = null!; + + /// + /// 发送日期 + /// + public DateOnly? CreateDay { get; set; } + + /// + /// 是否假删除0否1是 + /// + public bool IsDel { get; set; } + + /// + /// 人物模型 + /// + public string Model { get; set; } = null!; +} diff --git a/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/ChatController.cs b/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/ChatController.cs index 890f777..9a4b3dd 100644 --- a/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/ChatController.cs +++ b/src/2-api/HuanMeng.MiaoYu.WebApi/Controllers/ChatController.cs @@ -1,4 +1,5 @@ using HuanMeng.DotNetCore.Base; +using HuanMeng.MiaoYu.Code.Chat; using HuanMeng.MiaoYu.Model.Dto.Home; using HuanMeng.MiaoYu.WebApi.Base; @@ -46,5 +47,23 @@ namespace HuanMeng.MiaoYu.WebApi.Controllers var obj = JsonConvert.DeserializeObject("{\"ChatList\":[{\"Id\":\"1\",\"Role\":\"user\",\"Content\":\"Hello, how are you?\",\"Timestamp\":\"2022-03-01 12:00:00 \",\"MessageType\":0,\"UserIcon\":\"\"},{\"Id\":\"2\",\"Role\":\"assistant\",\"Content\":\"I'm fine, thanks!\",\"Timestamp\":\"2022-03-01 12:05:00 \",\"UserIcon\":\"\"}]}"); return new BaseResponse(ResonseCode.Success, "", obj); } + + /// + /// 删除聊天记录 + /// + /// + /// + /// + [HttpPost] + public async Task> DelChatByIds(List id, int characterId) + { + if(id == null || characterId == 0) + { + throw new ArgumentNullException(); + } + ChatBLL chatBLL = new ChatBLL(ServiceProvider); + var obj =await chatBLL.DelChatByIds(id, characterId); + return new BaseResponse(ResonseCode.Success, "", obj); + } } }