Zxd.Core/code/Zxd.Core.Domain/MeetingDomain.cs

233 lines
9.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Linq;
using Zxd.Core.Domain.Impl;
using Zxd.Entity.Zxd;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
namespace Zxd.Core.Domain
{
public class MeetingDomain : IMeetingDomain
{
private readonly IBaseRepository<ZxdDbContext> _zxdRepository;
private readonly IRedisManager _redisManager;
private readonly IConfiguration _configuration;
private readonly IDeptmentDomain _deptmentDomain;
private readonly IHttpClient _httpClient;
private readonly IMapper _mapper;
private readonly SystemConfig _systemConfig;
private readonly IInneruserDomain _inneruserDomain;
public MeetingDomain(IBaseRepository<ZxdDbContext> zxdRepository,
IRedisManager redisManager,
IConfiguration configuration,
IDeptmentDomain deptmentDomain,
IMapper mapper,
IHttpClient httpClient,
IInneruserDomain inneruserDomain)
{
_zxdRepository = zxdRepository;
_redisManager = redisManager;
_deptmentDomain = deptmentDomain;
_mapper = mapper;
_httpClient = httpClient;
_configuration = configuration;
_inneruserDomain = inneruserDomain;
_systemConfig = _configuration.GetSection("SystemConfig").Get<SystemConfig>();
}
/// <summary>
/// 分页
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
public async Task<PageResult<MeetingDto>> GetPage(SearchMeetingDto dto)
{
var query = _zxdRepository.GetRepository<Meeting>().Query()
.If(!string.IsNullOrEmpty(dto.MeetingName), x => x.Where(x => x.MeetingName.Contains(dto.MeetingName)))
.If(dto.MeetingType != null, x => x.Where(x => x.MeetingType == (MeetingType)dto.MeetingType))
.If(!string.IsNullOrEmpty(dto.Compere), x => x.Where(x => x.Compere.Contains(dto.Compere)))
.If(!string.IsNullOrEmpty(dto.CreateUser), x => x.Where(x => x.CreateUser == dto.CreateUser))
.If(!string.IsNullOrEmpty(dto.Paricipant), x => x.Where(x => x.MeetingParticipants.Any(y => y.Paricipant == dto.Paricipant)))
.If(dto.CreateTimeForm != null, x => x.Where(x => x.CreateTime >= dto.CreateTimeForm))
.If(dto.CreateTimeTo != null, x => x.Where(x => x.CreateTime < dto.CreateTimeTo.Value.AddDays(1)))
.If(dto.MeetingDateForm != null, x => x.Where(x => x.BeginTime >= dto.MeetingDateForm))
.If(dto.MeetingDateTo != null, x => x.Where(x => x.BeginTime < dto.MeetingDateTo.Value.AddDays(1)))
.Include(x => x.MeetingParticipants);
var total = await query.CountAsync();
var data = await query
.Select(x => new MeetingDto
{
Id = x.Id,
Compere = x.Compere,
CreateTime = x.CreateTime,
CreateUser = x.CreateUser,
MeetingName = x.MeetingName,
MeetingSite = x.Site,
MeetingTime = $"{x.BeginTime:yyyy.MM.dd}({x.BeginTime:HH:mm}-{x.BeginTime.AddHours(x.ContinueHour).AddMinutes(x.ContinueMinute):HH:mm})",
MeetingType = x.MeetingType.GetDescription(),
Remark = x.Remark,
UpdateTime = x.UpdateTime,
UpdateUser = x.UpdateUser
})
.Skip((dto.PageIndex - 1) * dto.PageSize)
.Take(dto.PageSize)
.ToListAsync();
return new PageResult<MeetingDto>(dto.PageIndex, dto.PageSize, total, data);
}
/// <summary>
/// 获取会议参与人
/// </summary>
/// <param name="meetingId"></param>
/// <returns></returns>
/// <exception cref="ApiException"></exception>
public async Task<List<MeetingParticipantDto>> GetMeetingParticipants(int? meetingId)
{
if (meetingId == null)
{
throw new ApiException("会议ID不能为空");
}
var data = await _zxdRepository.GetRepository<MeetingParticipant>().Query()
.Where(x => x.MeetingId == meetingId)
.Select(x => new MeetingParticipantDto
{
Id = x.Id,
Participant = x.Paricipant ?? ""
})
.ToListAsync();
return data;
}
/// <summary>
/// 获取会议附件
/// </summary>
/// <param name="meetingId"></param>
/// <returns></returns>
/// <exception cref="ApiException"></exception>
public async Task<MeetingAccessoryDto> GetMeetingAccessory(int? meetingId)
{
if (meetingId == null)
{
throw new ApiException("会议ID不能为空");
}
var meeting = await _zxdRepository.GetRepository<Meeting>().Query()
.Where(x => x.Id == meetingId)
.Where(x => !x.IsDelete)
.Include(x => x.MeetingAccessories)
.FirstOrDefaultAsync();
if (meeting == null)
{
throw new ApiException("会议不存或已删除!");
}
var data = new MeetingAccessoryDto
{
Id = meeting.Id,
Compere = meeting.Compere,
MeetingName = meeting.MeetingName,
MeetingType = meeting.MeetingType.GetDescription()
};
foreach (var meetingAccessory in meeting.MeetingAccessories)
{
data.Accessories.Add(new AccessoryDto
{
FileName = meetingAccessory.FileName,
FileSize = meetingAccessory.FileSize,
FileUrl = meetingAccessory.FileUrl,
Uploader = meetingAccessory.Uploader,
UploadTime = meetingAccessory.UploadTime,
Id = meetingAccessory.Id
});
}
return data;
}
/// <summary>
/// 创建或修改会议
/// </summary>
/// <param name="dto"></param>
/// <param name="user"></param>
/// <returns></returns>
public async Task CreateOrEditMeeting(CreateOrEditMeetingDto dto, int eid)
{
var user = await _inneruserDomain.GetInneruser(eid);
var userName = user.Username;
if (dto.Id != null && dto.Id > 0)
{
var meeting = await _zxdRepository.GetRepository<Meeting>()
.FirstOrDefaultAsync(x => x.Id == dto.Id);
if (meeting == null)
{
throw new ApiException("会议不存或已删除!");
}
meeting.BeginTime = dto.BigenTime;
meeting.Compere = dto.Compere;
meeting.ContinueHour = dto.ContinueHour;
meeting.ContinueMinute = dto.ContinueMinute;
meeting.MeetingName = dto.MeetingName;
meeting.MeetingType = (MeetingType)dto.MeetingType;
meeting.Remark = dto.Remark;
meeting.Site = dto.MeetingSite;
meeting.UpdateTime = DateTime.Now;
meeting.UpdateUser = userName;
await _zxdRepository.GetRepository<Meeting>().UpdateAsync(meeting);
return;
}
var meetingInfo = new Meeting
{
BeginTime = dto.BigenTime,
Compere = dto.Compere,
ContinueHour = dto.ContinueHour,
ContinueMinute = dto.ContinueMinute,
MeetingName = dto.MeetingName,
MeetingType = (MeetingType)dto.MeetingType,
Remark = dto.Remark,
Site = dto.MeetingSite,
CreateTime = DateTime.Now,
CreateUser = userName
};
await _zxdRepository.GetRepository<Meeting>().InsertAsync(meetingInfo);
}
public async Task DeleteMeeting(int? meetingId)
{
var meeting = await _zxdRepository.GetRepository<Meeting>().Query()
.Where(x => x.Id == meetingId)
.Where(x => !x.IsDelete)
.FirstOrDefaultAsync();
if (meeting == null)
{
throw new ApiException("会议不存或已删除!");
}
meeting.IsDelete = true;
await _zxdRepository.GetRepository<Meeting>().UpdateAsync(meeting);
}
public async Task CreateMeetingAccessory(CreateMeetingAccessoryDto dto, int eid)
{
var user = await _inneruserDomain.GetInneruser(eid);
var meetingAccessory = new MeetingAccessory
{
FileName = dto.FileName,
FileSize = dto.FileSize,
FileUrl = dto.FileUrl,
MeetingId = dto.MeetingId,
UploadEid = eid,
UploadTime = DateTime.Now,
Uploader = user.Username
};
await _zxdRepository.GetRepository<MeetingAccessory>().InsertAsync(meetingAccessory);
}
}
}