using System.Linq;
using System.Threading.Tasks;
using AutoMapper;
using Datory;
using GxPress.Common.Exceptions;
using GxPress.Common.Page;
using GxPress.Common.Tools;
using GxPress.Entity;
using GxPress.Repository.Interface;
using GxPress.Repository.Interface.Analyze;
using GxPress.Request.Analyze;
using GxPress.Request.App.Analyze;
using GxPress.Result.App.Analyze;
using GxPress.Service.Interface.Analyze;
namespace GxPress.Service.Implement.Analyze
{
public class AnalyzeService : IAnalyzeService
{
private readonly IUserRepository _userRepository;
private readonly IAnalyzeRepository _repository;
private readonly ICommentRepository _commentRepository;
private readonly IDepartmentRepository _departmentRepository;
private readonly IMapper _mapper;
public AnalyzeService(IUserRepository userRepository, IAnalyzeRepository analyzeRepository, ICommentRepository commentRepository, IMapper mapper, IDepartmentRepository departmentRepository)
{
_userRepository = userRepository;
_repository = analyzeRepository;
_commentRepository = commentRepository;
_departmentRepository = departmentRepository;
_mapper = mapper;
}
///
/// 设置 点赞 转发 收藏
///
///
///
public async Task SetAnalyzeAsync(AnalyzeRequest request)
{
var user = await _userRepository.GetAsync(request.UserId);
if (user == null) throw new BusinessException("不存在该账号");
//查询该用户是否存在记录
var query = new SqlKata.Query();
query
.Where(nameof(Entity.Analyze.Analyze.AnalyzeType), request.AnalyzeType)
.Where(nameof(Entity.Analyze.Analyze.SourceId), request.SourceId).Where(nameof(Entity.Analyze.Analyze.CommentId), request.CommentId)
.Where(nameof(Entity.Analyze.Analyze.UserId), request.UserId).Where(nameof(Entity.Analyze.Analyze.TypeValue), request.TypeValue);
if (request.SourceUserId > 0)
query.Where(nameof(Entity.Analyze.Analyze.SourceUserId), request.SourceUserId);
var analyze = await _repository.GetAsync(query);
if (analyze != null && analyze.Id > 0 && analyze.AnalyzeType != 4)
{
return await _repository.DeleteAsync(analyze.Id);
}
//添加
var analyzeDto = new Entity.Analyze.Analyze();
analyzeDto.SourceId = request.SourceId;
analyzeDto.UserId = request.UserId;
analyzeDto.AnalyzeType = request.AnalyzeType;
analyzeDto.TypeValue = request.TypeValue;
analyzeDto.CommentId = request.CommentId;
analyzeDto.SourceUserId = request.SourceUserId;
//修改文章评论的点赞数量
if (request.CommentId > 0)
{
//查询评论
var commit = await _commentRepository.GetAsync(Q.Where(nameof(Comment.TypeValue), request.TypeValue).Where(nameof(Comment.ArticleId), request.SourceId).Where(nameof(Comment.Id), request.CommentId));
commit.Laud = await _repository.CountAsync(Q.Where(nameof(Entity.Analyze.Analyze.SourceId), request.SourceId).Where(nameof(Entity.Analyze.Analyze.TypeValue), request.TypeValue).Where(nameof(Entity.Analyze.Analyze.CommentId), request.CommentId));
await _commentRepository.UpdateAsync(commit);
}
return await _repository.InsertAsync(analyzeDto) > 0;
}
///
/// 获取点赞数据
///
///
///
public async Task> GetPraisePageAsync(PraisePageSearchRequest request)
{
var query = Q.NewQuery();
query.Where(nameof(Entity.Analyze.Analyze.AnalyzeType), 1).Where(nameof(Entity.Analyze.Analyze.SourceId), request.SourceId).Where(nameof(Entity.Analyze.Analyze.TypeValue), request.TypeValue);
if (request.Sort == "desc")
query.OrderByDesc(nameof(Entity.Analyze.Analyze.CreatedDate));
var pagedList = new PagedList
{
Total = await _repository.CountAsync(query)
};
var list = await _repository.GetAllAsync(query.ForPage(request.Page, request.PerPage));
var items = list.Select(user => _mapper.Map(user)).ToList();
for (int i = 0; i < items.Count; i++)
{
//获取用户
var user = await _userRepository.GetAsync(items[i].UserId);
if (user == null)
{
items.Remove(items[i]);
continue;
}
items[i].UserName = user.Name;
items[i].Signature = user.Signature;
items[i].AvatarUrl = StringUtils.AddDomainMin(user.AvatarUrl);
//获取部门
var department = await _departmentRepository.GetAsync(user.DepartmentId);
items[i].DepartmentName = department != null ? department.Name : "";
}
// foreach (var item in items)
// {
// //获取用户
// var user = await _userRepository.GetAsync(item.UserId);
// item.UserName = user.Name;
// item.Signature = user.Signature;
// item.AvatarUrl = StringUtils.AddDomainMin(user.AvatarUrl);
// //获取部门
// var department = await _departmentRepository.GetAsync(user.DepartmentId);
// item.DepartmentName = department != null ? department.Name : "";
// }
pagedList.Items = items;
return pagedList;
}
///
/// 是否存在
///
///
///
public async Task ExistsAsync(AnalyzeRequest request)
{
return await _repository.ExistsAsync(Q.Where(nameof(Entity.Analyze.Analyze.SourceId), request.SourceId).Where(nameof(Entity.Analyze.Analyze.TypeValue), request.TypeValue).Where(nameof(Entity.Analyze.Analyze.UserId), request.UserId).Where(nameof(Entity.Analyze.Analyze.AnalyzeType), request.AnalyzeType).Where(nameof(Entity.Analyze.Analyze.CommentId), request.CommentId));
}
///
/// 是否存在
///
///
///
public async Task ExistsSourceUserAsync(AnalyzeRequest request)
{
return await _repository.ExistsAsync(Q.Where(nameof(Entity.Analyze.Analyze.SourceId), request.SourceId).Where(nameof(Entity.Analyze.Analyze.TypeValue), request.TypeValue).Where(nameof(Entity.Analyze.Analyze.UserId), request.UserId).Where(nameof(Entity.Analyze.Analyze.AnalyzeType), request.AnalyzeType).Where(nameof(Entity.Analyze.Analyze.CommentId), request.CommentId).Where(nameof(Entity.Analyze.Analyze.SourceUserId), request.SourceUserId));
}
///
/// 条数
///
///
///
public async Task CountAsync(AnalyzeRequest request)
{
return await _repository.CountAsync(Q.Where(nameof(Entity.Analyze.Analyze.SourceId), request.SourceId).Where(nameof(Entity.Analyze.Analyze.TypeValue), request.TypeValue).Where(nameof(Entity.Analyze.Analyze.AnalyzeType), request.AnalyzeType).Where(nameof(Entity.Analyze.Analyze.CommentId), request.CommentId));
}
///
/// 转发数量
///
///
///
public async Task RetransmissionCountAsync(AnalyzeRequest request)
{
return await _repository.CountAsync(Q.Where(nameof(Entity.Analyze.Analyze.SourceId), request.SourceId).Where(nameof(Entity.Analyze.Analyze.TypeValue), request.TypeValue).Where(nameof(Entity.Analyze.Analyze.AnalyzeType), request.AnalyzeType).Where(nameof(Entity.Analyze.Analyze.CommentId), request.CommentId).Where(nameof(Entity.Analyze.Analyze.SourceUserId), request.SourceUserId));
}
///
/// 获取
///
///
///
public async Task GetAnalyzeAsync(AnalyzeRequest request)
{
var query = new SqlKata.Query();
query.Where(nameof(Entity.Analyze.Analyze.SourceId), request.SourceId).Where(nameof(Entity.Analyze.Analyze.TypeValue), request.TypeValue).Where(nameof(Entity.Analyze.Analyze.AnalyzeType), request.AnalyzeType).Where(nameof(Entity.Analyze.Analyze.CommentId), request.CommentId);
if (request.SourceUserId > 0)
query.Where(nameof(Entity.Analyze.Analyze.SourceUserId), request.SourceUserId);
return await _repository.GetAsync(query);
}
public async Task DeleteAsync(int id)
{
return await _repository.DeleteAsync(id);
}
}
}