123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- using System.Threading.Tasks;
- using Datory;
- using GxPress.Common.Exceptions;
- using GxPress.Entity;
- using GxPress.Request.App.GroupUser;
- using System.Transactions;
- using GxPress.EnumConst;
- namespace GxPress.Service.Implement.Group
- {
- public partial class GroupService
- {
- /// <summary>
- /// 移除小组成员
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- public async Task<bool> DeleteAsync(GroupUserDeRequest request)
- {
- var group = await _groupRepository.GetAsync(request.GroupId);
- if (group == null)
- throw new BusinessException("小组不存在!");
- try
- {
- using (var transactionScope = new TransactionScope())
- {
- await _groupUserRepository.DeleteAsync(Q.Where(nameof(GroupUser.GroupId), request.GroupId)
- .WhereIn(nameof(GroupUser.UserId), request.GroupUserIds));
- //删除小组会话界面
- await _middleRepository.DeleteAsync(Q.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Group.GetHashCode())
- .Where(nameof(Entity.Middle.Middle.MiddleId), request.GroupId)
- .WhereIn(nameof(Entity.Middle.Middle.UserId), request.GroupUserIds));
- transactionScope.Complete();
- }
- }
- catch
- {
- return false;
- }
- return true;
- }
- /// <summary>
- /// 小组创建者退出小组
- /// </summary>
- /// <param name="userId"></param>
- /// <param name="groupId"></param>
- /// <returns></returns>
- public async Task<bool> IsDeleteGroupAsync(int userId, int groupId)
- {
- var query = Q.NewQuery();
- query.Where(nameof(Entity.GroupUser.UserId), userId);
- query.Where(nameof(Entity.GroupUser.GroupId), groupId);
- var groupUser = await _groupUserRepository.GetAsync(query);
- var groupUserCount = await _groupUserRepository.CountAsync(groupId);
- if (groupUser == null)
- throw new BusinessException("用户不存在");
- //删除小组和小组用户
- if (groupUserCount == 1)
- {
- await _groupRepository.DeleteAsync(groupId);
- await _groupUserRepository.DeleteAsync(Q.Where(nameof(GroupUser.GroupId), groupId));
- query = Q.NewQuery();
- query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Group.GetHashCode());
- query.Where(nameof(Entity.Middle.Middle.MiddleId), groupId);
- await _middleRepository.DeleteAsync(query);
- return true;
- }
- else
- {
- if (groupUser.GroupUserRoleId == GroupUserRoleTyeConst.SuperAdmin)
- throw new BusinessException("你的身份是小组创建者,请先转让小组给他人,然后才能退出小组!");
- query = Q.NewQuery();
- query.Where(nameof(Entity.GroupUser.UserId), userId);
- query.Where(nameof(Entity.GroupUser.GroupId), groupId);
- await _groupUserRepository.DeleteAsync(query);
- query = Q.NewQuery();
- query.Where(nameof(Entity.Middle.Middle.FolderType), AllTypeConst.Group.GetHashCode());
- query.Where(nameof(Entity.Middle.Middle.MiddleId), groupId);
- query.Where(nameof(Entity.Middle.Middle.UserId), userId);
- await _middleRepository.DeleteAsync(query);
- return true;
- }
- // if (groupUser.GroupUserRoleId == GroupUserRoleTyeConst.SuperAdmin)
- // throw new BusinessException("你的身份是小组创建者,请先转让小组给他人,然后才能退出小组!");
- //return true;
- }
- /// <summary>
- /// 退出小组
- /// </summary>
- /// <param name="userId"></param>
- /// <param name="groupId"></param>
- /// <returns></returns>
- public async Task<bool> DeleteAsync(int userId, int groupId)
- {
- var group = await _groupRepository.GetAsync(groupId);
- if (group == null)
- throw new BusinessException("小组不存在!");
- return await IsDeleteGroupAsync(userId, groupId);
- }
- }
- }
|