添加项目文件。
This commit is contained in:
583
extend/Tnb.Extend/EmailService.cs
Normal file
583
extend/Tnb.Extend/EmailService.cs
Normal file
@@ -0,0 +1,583 @@
|
||||
using System.Web;
|
||||
using JNPF.Common.Configuration;
|
||||
using JNPF.Common.Core.Manager;
|
||||
using JNPF.Common.Core.Manager.Files;
|
||||
using JNPF.Common.Enums;
|
||||
using JNPF.Common.Extension;
|
||||
using JNPF.Common.Filter;
|
||||
using JNPF.Common.Models;
|
||||
using JNPF.Common.Options;
|
||||
using JNPF.Common.Security;
|
||||
using JNPF.DependencyInjection;
|
||||
using JNPF.DynamicApiController;
|
||||
using JNPF.Extend.Entitys;
|
||||
using JNPF.Extend.Entitys.Dto.Email;
|
||||
using JNPF.Extras.Thirdparty.Email;
|
||||
using JNPF.FriendlyException;
|
||||
using JNPF.LinqBuilder;
|
||||
using Mapster;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using SqlSugar;
|
||||
|
||||
namespace JNPF.Extend;
|
||||
|
||||
/// <summary>
|
||||
/// 邮件收发
|
||||
/// 版 本:V3.2
|
||||
/// 版 权:拓通智联科技有限公司(http://www.tuotong-tech.com)
|
||||
/// 日 期:2021-06-01 .
|
||||
/// </summary>
|
||||
[ApiDescriptionSettings(Tag = "Extend", Name = "Email", Order = 600)]
|
||||
[Route("api/extend/[controller]")]
|
||||
public class EmailService : IDynamicApiController, ITransient
|
||||
{
|
||||
private readonly ISqlSugarRepository<EmailReceiveEntity> _repository;
|
||||
private readonly ITenant _db;
|
||||
private readonly IUserManager _userManager;
|
||||
private readonly IFileManager _fileManager;
|
||||
|
||||
public EmailService(ISqlSugarRepository<EmailReceiveEntity> repository, IUserManager userManager, ISqlSugarClient context, IFileManager fileManager)
|
||||
{
|
||||
_repository = repository;
|
||||
_userManager = userManager;
|
||||
_db = context.AsTenant();
|
||||
_fileManager = fileManager;
|
||||
}
|
||||
|
||||
#region Get
|
||||
|
||||
/// <summary>
|
||||
/// (带分页)获取邮件列表(收件箱、标星件、草稿箱、已发送).
|
||||
/// </summary>
|
||||
/// <param name="input">请求参数</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("")]
|
||||
public async Task<dynamic> GetList([FromQuery] EmailListQuery input)
|
||||
{
|
||||
switch (input.type)
|
||||
{
|
||||
case "inBox"://收件箱
|
||||
return await GetReceiveList(input);
|
||||
case "star"://标星件
|
||||
return await GetStarredList(input);
|
||||
case "draft"://草稿箱
|
||||
return await GetDraftList(input);
|
||||
case "sent"://已发送
|
||||
return await GetSentList(input);
|
||||
default:
|
||||
return PageResult<EmailListOutput>.SqlSugarPageResult(new SqlSugarPagedList<EmailListOutput>());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 信息(收件/发件).
|
||||
/// </summary>
|
||||
/// <param name="id">主键值.</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{id}")]
|
||||
public async Task<dynamic> GetInfo_Api(string id)
|
||||
{
|
||||
var output = new EmailInfoOutput();
|
||||
var data = await GetInfo(id);
|
||||
var jobj = data.ToObject<JObject>();
|
||||
if (jobj.ContainsKey("Read"))
|
||||
{
|
||||
var entity = data.Adapt<EmailReceiveEntity>();
|
||||
output = entity.Adapt<EmailInfoOutput>();
|
||||
output.bodyText = HttpUtility.HtmlDecode(entity.BodyText);
|
||||
}
|
||||
else
|
||||
{
|
||||
var entity = data.Adapt<EmailSendEntity>();
|
||||
output = entity.Adapt<EmailInfoOutput>();
|
||||
output.bodyText = HttpUtility.HtmlDecode(entity.BodyText);
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 信息(配置).
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet("Config")]
|
||||
public async Task<dynamic> GetConfigInfo_Api()
|
||||
{
|
||||
return (await GetConfigInfo()).Adapt<EmailConfigInfoOutput>();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Post
|
||||
|
||||
/// <summary>
|
||||
/// 删除.
|
||||
/// </summary>
|
||||
/// <param name="id">主键值.</param>
|
||||
/// <returns></returns>
|
||||
[HttpDelete("{id}")]
|
||||
public async Task Delete(string id)
|
||||
{
|
||||
try
|
||||
{
|
||||
_db.BeginTran();
|
||||
|
||||
var entity = await GetInfo(id);
|
||||
if (entity is EmailReceiveEntity)
|
||||
{
|
||||
//删除邮件
|
||||
var mailConfig = await GetConfigInfo();
|
||||
var mailReceiveEntity = entity as EmailReceiveEntity;
|
||||
MailUtil.Delete(new MailParameterInfo { Account = mailConfig.Account, Password = mailConfig.Password, POP3Host = mailConfig.POP3Host, POP3Port = mailConfig.POP3Port.ParseToInt() }, mailReceiveEntity.MID);
|
||||
}
|
||||
//删除数据
|
||||
var isOk = false;
|
||||
if (entity is EmailReceiveEntity)
|
||||
isOk = await _repository.AsSugarClient().Updateable((EmailReceiveEntity)entity).CallEntityMethod(m => m.Delete()).UpdateColumns(it => new { it.DeleteMark, it.DeleteTime, it.DeleteUserId }).ExecuteCommandHasChangeAsync();
|
||||
else
|
||||
isOk = await _repository.AsSugarClient().Updateable((EmailSendEntity)entity).CallEntityMethod(m => m.Delete()).UpdateColumns(it => new { it.DeleteMark, it.DeleteTime, it.DeleteUserId }).ExecuteCommandHasChangeAsync();
|
||||
if (!isOk)
|
||||
throw Oops.Oh(ErrorCode.COM1002);
|
||||
|
||||
_db.CommitTran();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_db.RollbackTran();
|
||||
throw Oops.Oh(ErrorCode.COM1002);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置已读邮件.
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut("{id}/Actions/Read")]
|
||||
public async Task ReceiveRead(string id)
|
||||
{
|
||||
var isOk = await _repository.AsSugarClient().Updateable<EmailReceiveEntity>().SetColumns(it => new EmailReceiveEntity()
|
||||
{
|
||||
Read = 1,
|
||||
LastModifyUserId = _userManager.UserId,
|
||||
LastModifyTime = SqlFunc.GetDate()
|
||||
}).Where(it => it.Id.Equals(id)).ExecuteCommandHasChangeAsync();
|
||||
if (!isOk)
|
||||
throw Oops.Oh(ErrorCode.COM1008);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置未读邮件.
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut("{id}/Actions/Unread")]
|
||||
public async Task ReceiveUnread(string id)
|
||||
{
|
||||
var isOk = await _repository.AsSugarClient().Updateable<EmailReceiveEntity>().SetColumns(it => new EmailReceiveEntity()
|
||||
{
|
||||
Read = 0,
|
||||
LastModifyUserId = _userManager.UserId,
|
||||
LastModifyTime = SqlFunc.GetDate()
|
||||
}).Where(it => it.Id.Equals(id)).ExecuteCommandHasChangeAsync();
|
||||
if (!isOk)
|
||||
throw Oops.Oh(ErrorCode.COM1008);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置星标邮件
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut("{id}/Actions/Star")]
|
||||
public async Task ReceiveYesStarred(string id)
|
||||
{
|
||||
var isOk = await _repository.AsSugarClient().Updateable<EmailReceiveEntity>().SetColumns(it => new EmailReceiveEntity()
|
||||
{
|
||||
Starred = 1,
|
||||
LastModifyUserId = _userManager.UserId,
|
||||
LastModifyTime = SqlFunc.GetDate()
|
||||
}).Where(it => it.Id.Equals(id)).ExecuteCommandHasChangeAsync();
|
||||
if (!isOk)
|
||||
throw Oops.Oh(ErrorCode.COM1008);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置取消星标.
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut("{id}/Actions/Unstar ")]
|
||||
public async Task ReceiveNoStarred(string id)
|
||||
{
|
||||
var isOk = await _repository.AsSugarClient().Updateable<EmailReceiveEntity>().SetColumns(it => new EmailReceiveEntity()
|
||||
{
|
||||
Starred = 0,
|
||||
LastModifyUserId = _userManager.UserId,
|
||||
LastModifyTime = SqlFunc.GetDate()
|
||||
}).Where(it => it.Id.Equals(id)).ExecuteCommandHasChangeAsync();
|
||||
if (!isOk)
|
||||
throw Oops.Oh(ErrorCode.COM1008);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 收邮件.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost("Receive")]
|
||||
public async Task<dynamic> Receive()
|
||||
{
|
||||
var mailConfig = await GetConfigInfo();
|
||||
if (mailConfig != null)
|
||||
{
|
||||
var mailAccount = mailConfig.Adapt<MailParameterInfo>();
|
||||
if (MailUtil.CheckConnected(mailAccount))
|
||||
{
|
||||
new List<EmailReceiveEntity>();
|
||||
var startTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00");
|
||||
var endTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " 23:59");
|
||||
var receiveCount = await _repository.AsSugarClient().Queryable<EmailReceiveEntity>().CountAsync(x => x.MAccount == mailConfig.Account && SqlFunc.Between(x.CreatorTime, startTime, endTime));
|
||||
List<EmailReceiveEntity> entitys = MailUtil.Get(mailAccount, receiveCount).Select(item => new EmailReceiveEntity
|
||||
{
|
||||
MAccount = mailConfig.Account,
|
||||
MID = item.UID,
|
||||
Sender = item.To,
|
||||
SenderName = item.ToName,
|
||||
Subject = item.Subject,
|
||||
BodyText = HttpUtility.HtmlEncode(item.BodyText),
|
||||
Attachment = item.Attachment.ToJsonString(),
|
||||
Date = item.Date,
|
||||
Read = 0
|
||||
}).ToList();
|
||||
|
||||
if (entitys.Count > 0)
|
||||
{
|
||||
await _repository.AsSugarClient().Insertable(entitys).CallEntityMethod(m => m.Creator()).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
return entitys.Count;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw Oops.Oh(ErrorCode.Ex0003);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw Oops.Oh(ErrorCode.Ex0004);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 存草稿.
|
||||
/// </summary>
|
||||
/// <param name="input">对象实体.</param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("Actions/SaveDraft")]
|
||||
public async Task SaveDraft([FromBody] EmailActionsSaveDraftInput input)
|
||||
{
|
||||
var entity = input.Adapt<EmailSendEntity>();
|
||||
entity.BodyText = HttpUtility.HtmlEncode(entity.BodyText);
|
||||
entity.To = input.recipient;
|
||||
entity.Sender = App.GetConfig<AppOptions>("JNPF_App", true).ErrorReportTo;
|
||||
var isOk = 0;
|
||||
entity.State = -1;
|
||||
if (entity.Id.IsEmpty())
|
||||
{
|
||||
isOk = await _repository.AsSugarClient().Insertable(entity).CallEntityMethod(m => m.Creator()).ExecuteCommandAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
isOk = await _repository.AsSugarClient().Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).CallEntityMethod(m => m.LastModify()).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
if (isOk < 1)
|
||||
throw Oops.Oh(ErrorCode.COM1008);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发邮件.
|
||||
/// </summary>
|
||||
/// <param name="input">对象实体.</param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("")]
|
||||
public async Task SaveSent([FromBody] EmailSendInput input)
|
||||
{
|
||||
var entity = input.Adapt<EmailSendEntity>();
|
||||
var mailConfig = await GetConfigInfo();
|
||||
foreach (var item in input.recipient.Split(","))
|
||||
{
|
||||
if (!item.IsEmail())
|
||||
throw Oops.Oh(ErrorCode.Ex0003);
|
||||
if (mailConfig != null)
|
||||
{
|
||||
entity.BodyText = HttpUtility.HtmlEncode(entity.BodyText);
|
||||
entity.To = item;
|
||||
entity.Sender = App.GetConfig<AppOptions>("JNPF_App", true).ErrorReportTo;
|
||||
entity.State = 1;
|
||||
var isOk = 0;
|
||||
if (entity.Id.IsEmpty())
|
||||
{
|
||||
entity.Sender = mailConfig.Account;
|
||||
isOk = await _repository.AsSugarClient().Insertable(entity).CallEntityMethod(m => m.Creator()).ExecuteCommandAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
isOk = await _repository.AsSugarClient().Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).CallEntityMethod(m => m.LastModify()).ExecuteCommandAsync();
|
||||
}
|
||||
//拷贝文件,注意:从临时文件夹拷贝到邮件文件夹
|
||||
var attachmentList = entity.Attachment.ToList<MailFileParameterInfo>();
|
||||
var temporaryFile = FileVariable.TemporaryFilePath;
|
||||
var mailFilePath = FileVariable.EmailFilePath;
|
||||
foreach (MailFileParameterInfo mailFile in attachmentList)
|
||||
{
|
||||
FileHelper.MoveFile(Path.Combine(temporaryFile , mailFile.fileId), Path.Combine(mailFilePath , mailFile.fileId));
|
||||
mailFile.fileName = mailFile.name;
|
||||
}
|
||||
//发送邮件
|
||||
var mailModel = new MailInfo();
|
||||
mailModel.To = entity.To;
|
||||
mailModel.CC = entity.CC;
|
||||
mailModel.Bcc = entity.BCC;
|
||||
mailModel.Subject = entity.Subject;
|
||||
mailModel.BodyText = HttpUtility.HtmlDecode(entity.BodyText);
|
||||
mailModel.Attachment = attachmentList;
|
||||
MailUtil.Send(new MailParameterInfo { AccountName = mailConfig.SenderName, Account = mailConfig.Account, Password = mailConfig.Password, SMTPHost = mailConfig.SMTPHost, SMTPPort = mailConfig.SMTPPort.ParseToInt() }, mailModel);
|
||||
if (isOk < 1)
|
||||
throw Oops.Oh(ErrorCode.COM1008);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw Oops.Oh(ErrorCode.Ex0004);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 保存邮箱配置
|
||||
/// </summary>
|
||||
/// <param name="input">对象实体</param>
|
||||
/// <returns></returns>
|
||||
[HttpPut("Config")]
|
||||
public async Task SaveConfig([FromBody] EmailConfigUpInput input)
|
||||
{
|
||||
var entity = input.Adapt<EmailConfigEntity>();
|
||||
var data = await GetConfigInfo();
|
||||
var isOk = 0;
|
||||
if (data == null)
|
||||
{
|
||||
isOk = await _repository.AsSugarClient().Insertable(entity).CallEntityMethod(m => m.Creator()).ExecuteCommandAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
entity.Id = data.Id;
|
||||
isOk = await _repository.AsSugarClient().Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
|
||||
}
|
||||
if (isOk < 1)
|
||||
throw Oops.Oh(ErrorCode.COM1008);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 邮箱账户密码验证.
|
||||
/// </summary>
|
||||
/// <param name="input">对象实体</param>
|
||||
[HttpPost("Config/Actions/CheckMail")]
|
||||
public void CheckLogin([FromBody] EmailConfigActionsCheckMailInput input)
|
||||
{
|
||||
var entity = input.Adapt<EmailConfigEntity>();
|
||||
if (!MailUtil.CheckConnected(entity.Adapt<MailParameterInfo>()))
|
||||
throw Oops.Oh(ErrorCode.Ex0003);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 下载附件.
|
||||
/// </summary>
|
||||
/// <param name="fileModel">文件对象</param>
|
||||
[HttpPost("Download")]
|
||||
public async Task Download(AnnexModel fileModel)
|
||||
{
|
||||
var filePath = Path.Combine(FileVariable.EmailFilePath , fileModel.FileId);
|
||||
if (await _fileManager.ExistsFile(filePath))
|
||||
{
|
||||
_fileManager.DownloadFileByType(filePath, fileModel.FileName);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region PrivateMethod
|
||||
|
||||
/// <summary>
|
||||
/// 信息(配置).
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private async Task<EmailConfigEntity> GetConfigInfo()
|
||||
{
|
||||
return await _repository.AsSugarClient().Queryable<EmailConfigEntity>().FirstAsync(x => x.CreatorUserId == _userManager.UserId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 列表(收件箱).
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<dynamic> GetReceiveList(EmailListQuery input)
|
||||
{
|
||||
var whereLambda = LinqExpression.And<EmailReceiveEntity>();
|
||||
whereLambda = whereLambda.And(x => x.CreatorUserId == _userManager.UserId && x.DeleteMark == null);
|
||||
if (input.endTime != null && input.startTime != null)
|
||||
{
|
||||
var start = Convert.ToDateTime(string.Format("{0:yyyy-MM-dd 00:00:00}", input.startTime?.TimeStampToDateTime()));
|
||||
var end = Convert.ToDateTime(string.Format("{0:yyyy-MM-dd 23:59:59}", input.endTime?.TimeStampToDateTime()));
|
||||
whereLambda = whereLambda.And(x => SqlFunc.Between(x.Date, start, end));
|
||||
}
|
||||
if (!string.IsNullOrEmpty(input.keyword))
|
||||
{
|
||||
whereLambda = whereLambda.And(m => m.Sender.Contains(input.keyword) || m.Subject.Contains(input.keyword));
|
||||
}
|
||||
var list = await _repository.AsSugarClient().Queryable<EmailReceiveEntity>().Where(whereLambda)
|
||||
.OrderBy(x => x.Date, OrderByType.Desc).ToPagedListAsync(input.currentPage, input.pageSize);
|
||||
var pageList = new SqlSugarPagedList<EmailListOutput>()
|
||||
{
|
||||
list = list.list.Adapt<List<EmailListOutput>>(),
|
||||
pagination = list.pagination
|
||||
};
|
||||
return PageResult<EmailListOutput>.SqlSugarPageResult(pageList);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 列表(未读邮件).
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<dynamic> GetUnreadList(EmailListQuery input)
|
||||
{
|
||||
var whereLambda = LinqExpression.And<EmailReceiveEntity>();
|
||||
whereLambda = whereLambda.And(x => x.CreatorUserId == _userManager.UserId && x.Read == 0 && x.DeleteMark == null);
|
||||
if (input.endTime != null && input.startTime != null)
|
||||
{
|
||||
var start = Convert.ToDateTime(string.Format("{0:yyyy-MM-dd 00:00:00}", input.startTime?.TimeStampToDateTime()));
|
||||
var end = Convert.ToDateTime(string.Format("{0:yyyy-MM-dd 23:59:59}", input.endTime?.TimeStampToDateTime()));
|
||||
whereLambda = whereLambda.And(x => SqlFunc.Between(x.CreatorTime, start, end));
|
||||
}
|
||||
if (!string.IsNullOrEmpty(input.keyword))
|
||||
{
|
||||
whereLambda = whereLambda.And(m => m.Sender.Contains(input.keyword) || m.Subject.Contains(input.keyword));
|
||||
}
|
||||
var list = await _repository.AsSugarClient().Queryable<EmailReceiveEntity>().Where(whereLambda).OrderBy(x => x.Date, OrderByType.Desc).ToPagedListAsync(input.currentPage, input.pageSize);
|
||||
var pageList = new SqlSugarPagedList<EmailListOutput>()
|
||||
{
|
||||
list = list.list.Adapt<List<EmailListOutput>>(),
|
||||
pagination = list.pagination
|
||||
};
|
||||
return PageResult<EmailListOutput>.SqlSugarPageResult(pageList);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 列表(星标件).
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<dynamic> GetStarredList(EmailListQuery input)
|
||||
{
|
||||
var whereLambda = LinqExpression.And<EmailReceiveEntity>();
|
||||
whereLambda = whereLambda.And(x => x.CreatorUserId == _userManager.UserId && x.Starred == 1 && x.DeleteMark == null);
|
||||
if (input.endTime != null && input.startTime != null)
|
||||
{
|
||||
var start = Convert.ToDateTime(string.Format("{0:yyyy-MM-dd 00:00:00}", input.startTime?.TimeStampToDateTime()));
|
||||
var end = Convert.ToDateTime(string.Format("{0:yyyy-MM-dd 23:59:59}", input.endTime?.TimeStampToDateTime()));
|
||||
whereLambda = whereLambda.And(x => SqlFunc.Between(x.CreatorTime, start, end));
|
||||
}
|
||||
//关键字(用户、IP地址、功能名称)
|
||||
if (!string.IsNullOrEmpty(input.keyword))
|
||||
{
|
||||
whereLambda = whereLambda.And(m => m.Sender.Contains(input.keyword) || m.Subject.Contains(input.keyword));
|
||||
}
|
||||
var list = await _repository.AsSugarClient().Queryable<EmailReceiveEntity>().Where(whereLambda).OrderBy(x => x.Date, OrderByType.Desc).ToPagedListAsync(input.currentPage, input.pageSize);
|
||||
var pageList = new SqlSugarPagedList<EmailListOutput>()
|
||||
{
|
||||
list = list.list.Adapt<List<EmailListOutput>>(),
|
||||
pagination = list.pagination
|
||||
};
|
||||
return PageResult<EmailListOutput>.SqlSugarPageResult(pageList);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 列表(草稿箱).
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<dynamic> GetDraftList(EmailListQuery input)
|
||||
{
|
||||
var whereLambda = LinqExpression.And<EmailSendEntity>();
|
||||
whereLambda = whereLambda.And(x => x.CreatorUserId == _userManager.UserId && x.State == -1 && x.DeleteMark == null);
|
||||
if (input.endTime != null && input.startTime != null)
|
||||
{
|
||||
var start = Convert.ToDateTime(string.Format("{0:yyyy-MM-dd 00:00:00}", input.startTime?.TimeStampToDateTime()));
|
||||
var end = Convert.ToDateTime(string.Format("{0:yyyy-MM-dd 23:59:59}", input.endTime?.TimeStampToDateTime()));
|
||||
whereLambda = whereLambda.And(x => SqlFunc.Between(x.CreatorTime, start, end));
|
||||
}
|
||||
if (!string.IsNullOrEmpty(input.keyword))
|
||||
{
|
||||
whereLambda = whereLambda.And(m => m.Sender.Contains(input.keyword) || m.Subject.Contains(input.keyword));
|
||||
}
|
||||
var list = await _repository.AsSugarClient().Queryable<EmailSendEntity>().Where(whereLambda).OrderBy(x => x.CreatorTime, OrderByType.Desc).ToPagedListAsync(input.currentPage, input.pageSize);
|
||||
var pageList = new SqlSugarPagedList<EmailListOutput>()
|
||||
{
|
||||
list = list.list.Adapt<List<EmailListOutput>>(),
|
||||
pagination = list.pagination
|
||||
};
|
||||
return PageResult<EmailListOutput>.SqlSugarPageResult(pageList);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 列表(已发送).
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<dynamic> GetSentList(EmailListQuery input)
|
||||
{
|
||||
var whereLambda = LinqExpression.And<EmailSendEntity>();
|
||||
whereLambda = whereLambda.And(x => x.CreatorUserId == _userManager.UserId && x.State != -1 && x.DeleteMark == null);
|
||||
if (input.endTime != null && input.startTime != null)
|
||||
{
|
||||
var start = Convert.ToDateTime(string.Format("{0:yyyy-MM-dd 00:00:00}", input.startTime?.TimeStampToDateTime()));
|
||||
var end = Convert.ToDateTime(string.Format("{0:yyyy-MM-dd 23:59:59}", input.endTime?.TimeStampToDateTime()));
|
||||
whereLambda = whereLambda.And(x => SqlFunc.Between(x.CreatorTime, start, end));
|
||||
}
|
||||
if (!string.IsNullOrEmpty(input.keyword))
|
||||
{
|
||||
whereLambda = whereLambda.And(m => m.Sender.Contains(input.keyword) || m.Subject.Contains(input.keyword));
|
||||
}
|
||||
var list = await _repository.AsSugarClient().Queryable<EmailSendEntity>().Where(whereLambda).OrderBy(x => x.CreatorTime, OrderByType.Desc).ToPagedListAsync(input.currentPage, input.pageSize);
|
||||
var pageList = new SqlSugarPagedList<EmailListOutput>()
|
||||
{
|
||||
list = list.list.Adapt<List<EmailListOutput>>(),
|
||||
pagination = list.pagination
|
||||
};
|
||||
return PageResult<EmailListOutput>.SqlSugarPageResult(pageList);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 信息.
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
private async Task<object> GetInfo(string id)
|
||||
{
|
||||
var entity = new object();
|
||||
if (await _repository.AsSugarClient().Queryable<EmailReceiveEntity>().AnyAsync(x => x.Id == id && x.DeleteMark == null))
|
||||
{
|
||||
var receiveInfo = await _repository.AsSugarClient().Queryable<EmailReceiveEntity>().FirstAsync(x => x.Id == id && x.DeleteMark == null);
|
||||
receiveInfo.Read = 1;
|
||||
await _repository.AsSugarClient().Updateable(receiveInfo).CallEntityMethod(m => m.LastModify()).UpdateColumns(x => new { x.LastModifyTime, x.LastModifyUserId, x.Read }).ExecuteCommandHasChangeAsync();
|
||||
entity = receiveInfo;
|
||||
}
|
||||
else
|
||||
{
|
||||
entity = await _repository.AsSugarClient().Queryable<EmailSendEntity>().FirstAsync(x => x.Id == id && x.DeleteMark == null);
|
||||
}
|
||||
return entity;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
Reference in New Issue
Block a user