using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Transactions;
using Datory;
using GxPress.Common.Exceptions;
using GxPress.Common.Tools;
using GxPress.Entity;
using GxPress.Entity.Topic;
using GxPress.Request.App.Note;
using GxPress.Request.App.Topic;
using GxPress.Result;
using Newtonsoft.Json;
namespace GxPress.Service.Implement.Topic
{
public partial class TopicService
{
///
/// 创建话题
///
///
///
public async Task InsertTopicAsync(TopicInRequest request)
{
if (string.IsNullOrWhiteSpace(request.Title) && string.IsNullOrWhiteSpace(request.HtmlContent))
throw new BusinessException("标题和内容必填一项!");
try
{
using (TransactionScope transactionScope = new TransactionScope())
{
//创建话题
var topic = new Entity.Topic.Topic
{
UserId = request.UserId,
Content = request.Content,
HtmlContent = request.HtmlContent,
Title = request.Title,
GroupId = request.GroupId,
FolderId = request.FolderId
};
if (!string.IsNullOrEmpty(request.Content))
{
var contentJsonData = JsonConvert.DeserializeObject>(request.Content);
foreach (var item in contentJsonData)
{
item.File = StringUtils.RemoveDomain(item.File);
}
topic.Content = JsonConvert.SerializeObject(contentJsonData);
}
var topicId = await _topicRepository.InsertAsync(topic);
//创建话题管理员
var topicAddressee = new TopicAddressee
{
IsAdmin = true,
IsRead = true,
TopicId = topicId,
UserId = request.UserId,
IsUpload = false
};
//获取用用户
var user = await _userRepository.GetAsync(request.UserId);
topicAddressee.UserName = user.Name;
await _topicAddresseeRepository.InsertAsync(topicAddressee);
//获取小组成员
if (request.GroupId > 0)
{
var groupUsers =
await _groupUserRepository.GetAllAsync(Q.Where(nameof(GroupUser.GroupId), request.GroupId));
request.TopicAddresseeUserIds = groupUsers.Select(n => n.UserId).ToList();
}
//获取共享文件夹成员
if (request.FolderId > 0)
{
var middle = await _middleRepository.GetMiddleAsync(request.FolderId);
if (middle.AttributeValue == 2 && middle.RoleId == 1)
{
var users = await _userRepository.GetAllAsync(Q.Where(nameof(Entity.User.Id), ">", 0));
request.TopicAddresseeUserIds = users.Select(n => n.Id).ToList();
}
else
{
var folderUsers = await _folderUserRepository.GetAllAsync(request.FolderId);
request.TopicAddresseeUserIds = folderUsers.Select(n => n.UserId).ToList();
}
//另存为笔记
var noteRequest = new NoteInRequest
{
Title = request.Title,
Content = request.Content,
UserId = request.UserId,
FolderId = request.FolderId,
HtmlContent = request.HtmlContent
};
await _noteService.InsertNoteAsync(noteRequest);
//设置默认共享文件夹
await _middleRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.IsDefault), false).Where(nameof(Entity.Middle.Middle.UserId), request.UserId).WhereIn(nameof(Entity.Middle.Middle.RoleId), new List { 1, 3 }));
//修改默认
await _middleRepository.UpdateAsync(Q.Set(nameof(Entity.Middle.Middle.IsDefault), true).Where(nameof(Entity.Middle.Middle.Id), request.FolderId));
}
var topicAddressees = new List();
//
request.TopicAddresseeUserIds.Add(request.UserId);
//创建话题讨论成员
foreach (var item in request.TopicAddresseeUserIds)
{
if (item == request.UserId)
continue;
//创建话题管理员
topicAddressee = new TopicAddressee
{
TopicId = topicId,
UserId = item
};
topicAddressees.Add(topicAddressee);
}
//添加话题阅读成员
await _topicAddresseeRepository.InsertAsync(topicAddressees);
//修改话题访问量
await _visitService.AddVisit(request.UserId, 2, topicId);
transactionScope.Complete();
}
}
catch (Exception e)
{
throw new BusinessException(e.Message);
}
return true;
}
}
}