diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/BbsUser/BbsUserGetListOutputDto.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/BbsUser/BbsUserGetListOutputDto.cs
new file mode 100644
index 00000000..7197366a
--- /dev/null
+++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/BbsUser/BbsUserGetListOutputDto.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Yi.Framework.Bbs.Domain.Shared.Enums;
+using Yi.Framework.Rbac.Application.Contracts.Dtos.User;
+
+namespace Yi.Framework.Bbs.Application.Contracts.Dtos.BbsUser
+{
+ public class BbsUserGetListOutputDto: UserGetListOutputDto
+ {
+ ///
+ /// 用户等级
+ ///
+ public int Level { get; set; }
+
+ ///
+ /// 用户限制
+ ///
+ public UserLimitEnum UserLimit { get; set; }
+ }
+}
diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetListOutputDto.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetListOutputDto.cs
index fc50f834..df37566f 100644
--- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetListOutputDto.cs
+++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetListOutputDto.cs
@@ -1,4 +1,5 @@
using Volo.Abp.Application.Dtos;
+using Yi.Framework.Bbs.Application.Contracts.Dtos.BbsUser;
using Yi.Framework.Bbs.Domain.Shared.Consts;
using Yi.Framework.Bbs.Domain.Shared.Enums;
using Yi.Framework.Rbac.Application.Contracts.Dtos.User;
@@ -47,7 +48,7 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Discuss
public List? PermissionUserIds { get; set; }
- public UserGetListOutputDto User { get; set; }
+ public BbsUserGetListOutputDto User { get; set; }
public void SetBan()
{
diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetOutputDto.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetOutputDto.cs
index cb0b1806..27ec1708 100644
--- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetOutputDto.cs
+++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application.Contracts/Dtos/Discuss/DiscussGetOutputDto.cs
@@ -1,4 +1,5 @@
using Volo.Abp.Application.Dtos;
+using Yi.Framework.Bbs.Application.Contracts.Dtos.BbsUser;
using Yi.Framework.Bbs.Domain.Shared.Enums;
using Yi.Framework.Rbac.Application.Contracts.Dtos.User;
@@ -35,6 +36,6 @@ namespace Yi.Framework.Bbs.Application.Contracts.Dtos.Discuss
public DiscussPermissionTypeEnum PermissionType { get; set; }
public List? PermissionUserIds { get; set; }
- public UserGetListOutputDto User { get; set; }
+ public BbsUserGetListOutputDto User { get; set; }
}
}
diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/EventHandlers/UserCreateEventHandler.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/EventHandlers/UserCreateEventHandler.cs
new file mode 100644
index 00000000..55674057
--- /dev/null
+++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/EventHandlers/UserCreateEventHandler.cs
@@ -0,0 +1,27 @@
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.EventBus;
+using Yi.Framework.Bbs.Domain.Entities;
+using Yi.Framework.Bbs.Domain.Shared.Enums;
+using Yi.Framework.Rbac.Domain.Shared.Etos;
+
+namespace Yi.Framework.Rbac.Application.EventHandlers
+{
+ public class UserCreateEventHandler : ILocalEventHandler, ITransientDependency
+ {
+ private IRepository _repository;
+ public UserCreateEventHandler(IRepository repository)
+ {
+ _repository = repository;
+ }
+ public async Task HandleEventAsync(UserCreateEventArgs eventData)
+ {
+ //创建主表
+ var bbsUser = new BbsUserExtraInfoEntity(eventData.UserId)
+ {
+
+ };
+ await _repository.InsertAsync(bbsUser);
+ }
+ }
+}
diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/DiscussService.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/DiscussService.cs
index 7fe70ea6..f4107307 100644
--- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/DiscussService.cs
+++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Application/Services/DiscussService.cs
@@ -6,6 +6,7 @@ using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.EventBus.Local;
using Volo.Abp.Users;
+using Yi.Framework.Bbs.Application.Contracts.Dtos.BbsUser;
using Yi.Framework.Bbs.Application.Contracts.Dtos.Discuss;
using Yi.Framework.Bbs.Application.Contracts.IServices;
using Yi.Framework.Bbs.Domain.Entities;
@@ -55,10 +56,20 @@ namespace Yi.Framework.Bbs.Application.Services
//查询主题发布 浏览主题 事件,浏览数+1
var item = await _forumManager._discussRepository._DbQueryable.LeftJoin((discuss, user) => discuss.CreatorId == user.Id)
- .Select((discuss, user) => new DiscussGetOutputDto
+ .LeftJoin((discuss, user, info) => user.Id == info.UserId)
+ .Select((discuss, user, info) => new DiscussGetOutputDto
{
- User = new UserGetListOutputDto() { UserName = user.UserName, Nick = user.Nick, Icon = user.Icon ,Id=user.Id}
- }, true).SingleAsync(discuss => discuss.Id == id);
+ User = new BbsUserGetListOutputDto()
+ {
+ UserName = user.UserName,
+ Nick = user.Nick,
+ Icon = user.Icon,
+ Id = user.Id,
+ Level = info.Level,
+ UserLimit = info.UserLimit
+ }
+ }, true)
+ .SingleAsync(discuss => discuss.Id == id);
if (item is not null)
{
@@ -87,18 +98,26 @@ namespace Yi.Framework.Bbs.Application.Services
.WhereIF(input.IsTop == true, x => x.IsTop == input.IsTop)
.LeftJoin((discuss, user) => discuss.CreatorId == user.Id)
+ .LeftJoin((discuss, user, info) => user.Id == info.UserId)
.OrderByDescending(discuss => discuss.OrderNum)
.OrderByIF(input.Type == QueryDiscussTypeEnum.New, discuss => discuss.CreationTime, OrderByType.Desc)
.OrderByIF(input.Type == QueryDiscussTypeEnum.Host, discuss => discuss.SeeNum, OrderByType.Desc)
.OrderByIF(input.Type == QueryDiscussTypeEnum.Suggest, discuss => discuss.AgreeNum, OrderByType.Desc)
- .Select((discuss, user) => new DiscussGetListOutputDto
+ .Select((discuss, user,info) => new DiscussGetListOutputDto
{
Id = discuss.Id,
IsAgree = SqlFunc.Subqueryable().WhereIF(CurrentUser.Id != null, x => x.CreatorId == CurrentUser.Id && x.DiscussId == discuss.Id).Any(),
- User = new UserGetListOutputDto() { Id = user.Id, UserName = user.UserName, Nick = user.Nick, Icon = user.Icon }
+ User = new BbsUserGetListOutputDto() {
+ Id = user.Id,
+ UserName = user.UserName,
+ Nick = user.Nick,
+ Icon = user.Icon,
+ Level = info.Level,
+ UserLimit = info.UserLimit
+ }
}, true)
.ToPageListAsync(input.SkipCount, input.MaxResultCount, total);
diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Enums/UserLimitEnum.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Enums/UserLimitEnum.cs
new file mode 100644
index 00000000..adc5e927
--- /dev/null
+++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain.Shared/Enums/UserLimitEnum.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Yi.Framework.Bbs.Domain.Shared.Enums
+{
+
+ public enum UserLimitEnum
+ {
+ ///
+ /// 正常
+ ///
+ Normal,
+
+ ///
+ /// 危险
+ ///
+ Dangerous,
+
+ ///
+ /// 已禁止
+ ///
+ Ban
+
+ }
+}
diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Entities/BbsUserExtraInfoEntity.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Entities/BbsUserExtraInfoEntity.cs
new file mode 100644
index 00000000..a1d6b0d2
--- /dev/null
+++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Entities/BbsUserExtraInfoEntity.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using SqlSugar;
+using Volo.Abp.Domain.Entities;
+using Yi.Framework.Bbs.Domain.Shared.Enums;
+
+namespace Yi.Framework.Bbs.Domain.Entities
+{
+ ///
+ /// 评论表
+ ///
+ [SugarTable("BbsUserExtraInfo")]
+ public class BbsUserExtraInfoEntity : Entity
+ {
+ public BbsUserExtraInfoEntity() { }
+
+ public BbsUserExtraInfoEntity(Guid userId) { this.UserId = userId; }
+
+ [SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
+ public override Guid Id { get; protected set; }
+
+ ///
+ /// 用户id
+ ///
+ public Guid UserId { get; set; }
+
+ ///
+ /// 用户等级
+ ///
+ public int Level { get; set; } = 1;
+
+ ///
+ /// 用户限制
+ ///
+ public UserLimitEnum UserLimit { get; set; } = UserLimitEnum.Normal;
+ }
+
+}
diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.SqlSugarCore/DataSeeds/BbsUserInfoDataSeed.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.SqlSugarCore/DataSeeds/BbsUserInfoDataSeed.cs
new file mode 100644
index 00000000..4093e115
--- /dev/null
+++ b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.SqlSugarCore/DataSeeds/BbsUserInfoDataSeed.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Volo.Abp.Data;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Domain.Repositories;
+using Yi.Framework.Bbs.Domain.Entities;
+using Yi.Framework.Rbac.Domain.Entities;
+using Yi.Framework.SqlSugarCore.Abstractions;
+
+namespace Yi.Framework.Bbs.SqlSugarCore.DataSeeds
+{
+ public class BbsUserInfoDataSeed : IDataSeedContributor, ITransientDependency
+ {
+ private ISqlSugarRepository _repository;
+ private ISqlSugarRepository _userRepository;
+ public BbsUserInfoDataSeed(ISqlSugarRepository repository, ISqlSugarRepository userReponse)
+ {
+ _repository = repository;
+ _userRepository = userReponse;
+ }
+ public async Task SeedAsync(DataSeedContext context)
+ {
+ //如果没有bbs的用户额外数据,自动插入
+ if (!await _repository.IsAnyAsync(x => true))
+ {
+ var userList = await _userRepository.GetListAsync(x => true);
+ var userInfoList = userList.Select(x => new BbsUserExtraInfoEntity(x.Id)).ToList();
+ await _repository.InsertManyAsync(userInfoList);
+ }
+ }
+ }
+}
diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/AccountService.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/AccountService.cs
index 04dcf05e..148ee3f7 100644
--- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/AccountService.cs
+++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/AccountService.cs
@@ -298,6 +298,8 @@ namespace Yi.Framework.Rbac.Application.Services
{
await _userManager.GiveUserSetRoleAsync(new List { entity.Id }, new List { role.Id });
}
+
+ await _localEventBus.PublishAsync(new UserCreateEventArgs(entity.Id));
return true;
}
diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/UserService.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/UserService.cs
index b3a16cb2..a8f3bf8c 100644
--- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/UserService.cs
+++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/UserService.cs
@@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
+using Volo.Abp.EventBus.Local;
using Volo.Abp.Uow;
using Volo.Abp.Users;
using Yi.Framework.Ddd.Application;
@@ -12,6 +13,7 @@ using Yi.Framework.Rbac.Domain.Entities;
using Yi.Framework.Rbac.Domain.Managers;
using Yi.Framework.Rbac.Domain.Repositories;
using Yi.Framework.Rbac.Domain.Shared.Consts;
+using Yi.Framework.Rbac.Domain.Shared.Etos;
using Yi.Framework.Rbac.Domain.Shared.OperLog;
using Yi.Framework.SqlSugarCore.Abstractions;
@@ -23,10 +25,10 @@ namespace Yi.Framework.Rbac.Application.Services
public class UserService : YiCrudAppService
//IUserService
{
- public UserService(ISqlSugarRepository repository, UserManager userManager, IUserRepository userRepository, ICurrentUser currentUser, IDeptService deptService) : base(repository)
+ public UserService(ISqlSugarRepository repository, UserManager userManager, IUserRepository userRepository, ICurrentUser currentUser, IDeptService deptService, ILocalEventBus localEventBus) : base(repository)
=>
- (_userManager, _userRepository, _currentUser, _deptService, _repository) =
- (userManager, userRepository, currentUser, deptService, repository);
+ (_userManager, _userRepository, _currentUser, _deptService, _repository, _localEventBus) =
+ (userManager, userRepository, currentUser, deptService, repository, localEventBus);
private UserManager _userManager { get; set; }
private ISqlSugarRepository _repository;
private IUserRepository _userRepository { get; set; }
@@ -34,6 +36,7 @@ namespace Yi.Framework.Rbac.Application.Services
private ICurrentUser _currentUser { get; set; }
+ private ILocalEventBus _localEventBus;
///
/// 查询用户
///
@@ -102,6 +105,9 @@ namespace Yi.Framework.Rbac.Application.Services
//uow.Commit();
var result = await MapToGetOutputDtoAsync(returnEntity);
+
+
+ await _localEventBus.PublishAsync(new UserCreateEventArgs(returnEntity.Id));
return result;
//}
}
diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain.Shared/Etos/UserCreateEventArgs.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain.Shared/Etos/UserCreateEventArgs.cs
new file mode 100644
index 00000000..2500fd83
--- /dev/null
+++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain.Shared/Etos/UserCreateEventArgs.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Yi.Framework.Rbac.Domain.Shared.Etos
+{
+ ///
+ /// 用户创建的id
+ ///
+ public class UserCreateEventArgs
+ {
+ public UserCreateEventArgs(Guid userId)
+ {
+ UserId = userId;
+ }
+ public Guid UserId { get; set; }
+ }
+}