using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Datory;
using GxPress.Common.Tools;
using GxPress.Entity;
using GxPress.EnumConst;
using GxPress.Repository.Interface;
using GxPress.Repository.Interface.AdminVerify;
using GxPress.Request.App.AdminVerify;
using GxPress.Request.App.Middle;
using GxPress.Service.Interface.AdminVerify;
using GxPress.Service.Interface.Middle;
namespace GxPress.Service.Implement.AdminVerify
{
public class AdminVerifyInsetService : IAdminVerifyInsertService
{
private readonly IAdminVerifyRepository _adminVerifyRepository;
private readonly IUserRepository _userRepository;
private readonly IDepartmentRepository _departmentRepository;
private readonly IMiddleService _middleService;
private readonly IGroupRepository _groupRepository;
private readonly IGroupChatRepository _groupChatRepository;
private readonly IMiddleRepository _middleRepository;
private readonly IGroupUserRepository _groupUserRepository;
public AdminVerifyInsetService(IAdminVerifyRepository adminVerifyRepository, IUserRepository userRepository,
IDepartmentRepository departmentRepository, IMiddleService middleService, IGroupRepository groupRepository,
IGroupChatRepository groupChatRepository, IMiddleRepository middleRepository, IGroupUserRepository groupUserRepository)
{
_adminVerifyRepository = adminVerifyRepository;
_userRepository = userRepository;
_departmentRepository = departmentRepository;
_groupRepository = groupRepository;
_middleService = middleService;
_groupChatRepository = groupChatRepository;
_middleRepository = middleRepository;
_groupUserRepository = groupUserRepository;
}
///
/// 添加成员
///
///
///
public async Task InsertAsync(AdminVerifyInsertRequest request)
{
var adminVerifys = new List();
//获取邀请人信息
var userDto = await _userRepository.GetAsync(request.UserId);
//获取员工所有信息
var users = await _userRepository.GetAllAsync(Q.WhereIn(nameof(Entity.User.Id), request.UserIds));
var departments = await _departmentRepository.GetAllAsync(Q.WhereIn(nameof(Entity.Department.Id), users.Select(n => n.DepartmentId)));
foreach (var userId in request.UserIds)
{
var adminVerify = new Entity.AdminVerify();
var adminVerifyDto = new Entity.AdminVerify();
//获取用户
var user = users.FirstOrDefault(n => n.Id == userId);
if (user == null)
continue;
var department = departments.FirstOrDefault(n => n.Id == user.DepartmentId);
var group = await _groupRepository.GetAsync(request.SourceId);
//查询是否存在
adminVerify = await _adminVerifyRepository.GetAsync(Q.Where(nameof(Entity.AdminVerify.AdminId), userId).Where(nameof(Entity.AdminVerify.SourceType), request.SourceType).Where(nameof(Entity.AdminVerify.SourceId), group.Id).WhereIn(nameof(Entity.AdminVerify.DisposeType), new List { 0, 1 }));
if (adminVerify != null)
continue;
adminVerify = new Entity.AdminVerify();
//申请
if (request.SourceType == 1)
{
var ids = new List { GroupUserRoleTyeConst.Admin.GetHashCode(), GroupUserRoleTyeConst.SuperAdmin.GetHashCode() };
//创建人
var groupUsers = await _groupUserRepository.GetAllAsync(Q.Where(nameof(GroupUser.GroupId), group.Id).WhereIn(nameof(GroupUser.GroupUserRoleId), ids));
foreach (var groupUser in groupUsers)
{
//设置群主验证
await InsertMiddleVerify(groupUser.UserId);
adminVerifyDto.AvatarUrl = StringUtils.RemoveDomain(user.AvatarUrl);
adminVerifyDto.SourceName = group.Name;
adminVerifyDto.Name = user.Name;
adminVerifyDto.DisposeType = AdminVerifyTypeConst.UDispose.GetHashCode();
adminVerifyDto.VerifyType = request.VerifyType;
adminVerifyDto.AdminId = groupUser.UserId;
adminVerifyDto.SourceType = request.SourceType;
adminVerifyDto.SourceId = request.SourceId;
adminVerifyDto.UserId = userId;
adminVerifyDto.IsDelete = "";
//获取部门
adminVerifyDto.Remark = department.Name + "-" + user.Name;
//await _adminVerifyRepository.InsertAsync(adminVerifyDto);
adminVerifys.Add(adminVerifyDto);
}
}
//邀请
if (request.SourceType == 2)
{
//await _adminVerifyRepository.InsertAsync(adminVerifyDto);
adminVerifys.Add(adminVerifyDto);
adminVerify.AvatarUrl = StringUtils.RemoveDomain(userDto.AvatarUrl);
adminVerify.Name = userDto.Name;
adminVerify.DisposeType = AdminVerifyTypeConst.UDispose.GetHashCode();
adminVerify.VerifyType = request.VerifyType;
adminVerify.AdminId = userId;
adminVerify.SourceType = request.SourceType;
adminVerify.SourceId = request.SourceId;
adminVerify.UserId = request.UserId;
adminVerify.SourceName = group.Name;
adminVerify.IsDelete = "";
//获取部门
adminVerify.Remark = department.Name + "-" + userDto.Name;
//await _adminVerifyRepository.InsertAsync(adminVerify);
adminVerifys.Add(adminVerify);
await InsertMiddleVerify(userId);
}
}
await _adminVerifyRepository.InsertAsync(adminVerifys);
return true;
}
///
/// 设置用户通知验证
///
///
///
private async Task InsertMiddleVerify(int userId)
{
var middle = await _middleRepository.GetMiddleAsync(Q
.Where(nameof(Entity.Middle.Middle.AttributeValue), 3)
.Where(nameof(Entity.Middle.Middle.UserId), userId));
if (middle == null)
{
//添加验证信息
var middleInsertTypeRequest = new MiddleInsertTypeRequest
{
AttributeValue = 3,
FolderId = 0,
FolderType = 1,
MiddleId = 0,
MiddleSonId = 0,
UserId = userId
};
await _middleService.InsertAsync(middleInsertTypeRequest);
}
else if (middle.IsDelete)
{
middle.IsDelete = false;
await _middleRepository.UpdateAsync(middle);
}
}
}
}