using Lottomat.Application.Entity.PublicInfoManage;
using Lottomat.Application.IService.PublicInfoManage;
using Lottomat.Data;
using Lottomat.Data.Repository;
using Lottomat.Util.Extension;
using Lottomat.Util.WebControl;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
using Lottomat.Application.Code;
using Lottomat.Util;
using Lottomat.Utils.Date;
namespace Lottomat.Application.Service.PublicInfoManage
{
///
/// 版 本 1.0
/// Copyright (c) 2016-2017
/// 创建人:赵轶
/// 日 期:2015.12.8 11:31
/// 描 述:邮件内容
///
public class EmailContentService : RepositoryFactory, IEmailContentService
{
#region 获取数据
///
/// 未读邮件
///
/// 分页参数
/// 用户Id
/// 关键字
///
public IEnumerable GetUnreadMail(Pagination pagination, string userId, string keyword)
{
var strSql = new StringBuilder();
strSql.Append(@"SELECT a.AddresseeId AS ContentId ,
c.Theme ,
c.ThemeColor ,
c.SenderId ,
c.SenderName ,
c.SenderTime ,
c.SendPriority,
a.IsHighlight,
a.CreateDate
FROM Email_Addressee a
LEFT JOIN Email_Content c ON c.ContentId = a.ContentId
WHERE a.RecipientId = @userId AND a.IsRead <> 1");
strSql.Append(" AND a.DeleteMark = 0");
var parameter = new List();
parameter.Add(DbParameters.CreateDbParameter("@userId", userId));
if (!keyword.IsEmpty())
{
strSql.Append(" AND c.Theme like @Theme");
parameter.Add(DbParameters.CreateDbParameter("@Theme", '%' + keyword + '%'));
}
return this.BaseRepository().FindList(strSql.ToString(), parameter.ToArray(), pagination);
}
///
/// 未读邮件数量
///
/// 用户Id
///
public int GetUnreadMailCount(string userId)
{
var expression = LinqExtensions.True();
expression = expression.And(t => t.RecipientId == userId);
expression = expression.And(t => t.IsRead != 1);
expression = expression.And(t => t.DeleteMark == 0);
return new RepositoryFactory().BaseRepository().IQueryable(expression).Count();
}
///
/// 星标邮件
///
/// 分页参数
/// 用户Id
/// 关键字
///
public IEnumerable GetAsteriskMail(Pagination pagination, string userId, string keyword)
{
var strSql = new StringBuilder();
strSql.Append(@"SELECT a.AddresseeId AS ContentId ,
c.Theme ,
c.ThemeColor ,
c.SenderId ,
c.SenderName ,
c.SenderTime ,
c.SendPriority,
a.IsHighlight,
a.CreateDate
FROM Email_Addressee a
LEFT JOIN Email_Content c ON c.ContentId = a.ContentId
WHERE a.RecipientId = @userId AND a.IsHighlight = 1");
strSql.Append(" AND a.DeleteMark = 0");
var parameter = new List();
parameter.Add(DbParameters.CreateDbParameter("@userId", userId));
if (!keyword.IsEmpty())
{
strSql.Append(" AND c.Theme like @Theme");
parameter.Add(DbParameters.CreateDbParameter("@Theme", '%' + keyword + '%'));
}
return this.BaseRepository().FindList(strSql.ToString(), parameter.ToArray(), pagination);
}
///
/// 星标邮件数量
///
/// 用户Id
///
public int GetAsteriskMailCount(string userId)
{
var expression = LinqExtensions.True();
expression = expression.And(t => t.RecipientId == userId);
expression = expression.And(t => t.IsHighlight == 1);
expression = expression.And(t => t.DeleteMark == (int)DeleteMarkEnum.NotDelete);
return new RepositoryFactory().BaseRepository().IQueryable(expression).Count();
}
///
/// 草稿箱
///
/// 分页参数
/// 用户Id
/// 关键字
///
public IEnumerable GetDraftMail(Pagination pagination, string userId, string keyword)
{
var expression = LinqExtensions.True();
expression = expression.And(t => t.SendState == 0);
expression = expression.And(t => t.CreateUserId == userId);
if (!keyword.IsEmpty())
{
expression = expression.And(t => t.Theme.Contains(keyword));
}
return this.BaseRepository().FindList(expression, pagination);
}
///
/// 草稿箱数量
///
/// 用户Id
///
public int GetDraftMailCount(string userId)
{
var expression = LinqExtensions.True();
expression = expression.And(t => t.SendState == 0);
expression = expression.And(t => t.CreateUserId == userId);
return this.BaseRepository().IQueryable(expression).Count();
}
///
/// 回收箱
///
/// 分页参数
/// 用户Id
/// 关键字
///
public IEnumerable GetRecycleMail(Pagination pagination, string userId, string keyword)
{
var strSql = new StringBuilder();
strSql.Append(@"SELECT *
FROM ( SELECT a.AddresseeId AS ContentId ,
c.Theme ,
c.ThemeColor ,
c.SenderId ,
c.SenderName ,
c.SenderTime ,
c.SendPriority ,
a.IsHighlight ,
a.CreateDate
FROM Email_Addressee a
LEFT JOIN Email_Content c ON c.ContentId = a.ContentId
WHERE a.RecipientId = @userId
AND a.DeleteMark = 1
UNION
SELECT c.ContentId ,
c.Theme ,
c.ThemeColor ,
c.SenderId ,
c.SenderName ,
c.SenderTime ,
c.SendPriority ,
c.IsHighlight ,
c.CreateDate
FROM Email_Content c
WHERE c.CreateUserId = @userId
AND c.DeleteMark = 1
) t WHERE 1=1");
var parameter = new List();
parameter.Add(DbParameters.CreateDbParameter("@userId", userId));
if (!keyword.IsEmpty())
{
strSql.Append(" AND Theme like @Theme");
parameter.Add(DbParameters.CreateDbParameter("@Theme", '%' + keyword + '%'));
}
return this.BaseRepository().FindList(strSql.ToString(), parameter.ToArray(), pagination);
}
///
/// 回收箱数量
///
/// 用户Id
///
public int GetRecycleMailCount(string userId)
{
var strSql = new StringBuilder();
strSql.Append(@"SELECT COUNT(1)
FROM ( SELECT a.AddresseeId AS ContentId ,
c.Theme ,
c.ThemeColor ,
c.SenderId ,
c.SenderName ,
c.SenderTime ,
c.SendPriority ,
a.IsHighlight ,
a.CreateDate
FROM Email_Addressee a
LEFT JOIN Email_Content c ON c.ContentId = a.ContentId
WHERE a.RecipientId = @userId
AND a.DeleteMark = 1
UNION
SELECT c.ContentId ,
c.Theme ,
c.ThemeColor ,
c.SenderId ,
c.SenderName ,
c.SenderTime ,
c.SendPriority ,
c.IsHighlight ,
c.CreateDate
FROM Email_Content c
WHERE c.CreateUserId = @userId
AND c.DeleteMark = 1
) t");
var parameter = new List();
parameter.Add(DbParameters.CreateDbParameter("@userId", userId));
return this.BaseRepository().FindObject(strSql.ToString(), parameter.ToArray()).ToInt();
}
///
/// 收件箱
///
/// 分页参数
/// 用户Id
/// 关键字
///
public IEnumerable GetAddresseeMail(Pagination pagination, string userId, string keyword)
{
var strSql = new StringBuilder();
strSql.Append(@"SELECT a.AddresseeId AS ContentId ,
c.Theme ,
c.ThemeColor ,
c.SenderId ,
c.SenderName ,
c.SenderTime ,
c.SendPriority,
c.CreateDate,
a.IsHighlight
FROM Email_Addressee a
LEFT JOIN Email_Content c ON c.ContentId = a.ContentId
WHERE a.RecipientId = @userId");
strSql.Append(" AND a.DeleteMark = 0 ");
var parameter = new List();
parameter.Add(DbParameters.CreateDbParameter("@userId", userId));
if (!keyword.IsEmpty())
{
strSql.Append(" AND c.Theme like @Theme");
parameter.Add(DbParameters.CreateDbParameter("@Theme", '%' + keyword + '%'));
}
return this.BaseRepository().FindList(strSql.ToString(), parameter.ToArray(), pagination);
}
///
/// 收件箱数量
///
/// 用户Id
///
public int GetAddresseeMailCount(string userId)
{
var expression = LinqExtensions.True();
expression = expression.And(t => t.RecipientId == userId);
expression = expression.And(t => t.DeleteMark == (int)DeleteMarkEnum.NotDelete);
return new RepositoryFactory().BaseRepository().IQueryable(expression).Count();
}
///
/// 已发送
///
/// 分页参数
/// 用户Id
/// 关键字
///
public IEnumerable GetSentMail(Pagination pagination, string userId, string keyword)
{
var expression = LinqExtensions.True();
expression = expression.And(t => t.SendState == 1);
expression = expression.And(t => t.CreateUserId == userId);
expression = expression.And(t => t.DeleteMark == (int)DeleteMarkEnum.NotDelete);
if (!keyword.IsEmpty())
{
expression = expression.And(t => t.Theme.Contains(keyword));
}
return this.BaseRepository().FindList(expression, pagination);
}
///
/// 已发送数量
///
/// 用户Id
///
public int GetSentMailCount(string userId)
{
var expression = LinqExtensions.True();
expression = expression.And(t => t.SendState == 1);
expression = expression.And(t => t.CreateUserId == userId);
expression = expression.And(t => t.DeleteMark == (int)DeleteMarkEnum.NotDelete);
return this.BaseRepository().IQueryable(expression).Count();
}
///
/// 邮件实体
///
/// 主键值
///
public EmailContentEntity GetEntity(string keyValue)
{
return this.BaseRepository().FindEntity(keyValue);
}
///
/// 收件邮件实体
///
/// 主键值
///
public EmailAddresseeEntity GetAddresseeEntity(string keyValue)
{
return new RepositoryFactory().BaseRepository().FindEntity(keyValue);
}
#endregion
#region 提交数据
///
/// 删除草稿
///
/// 主键
public void RemoveDraftForm(string keyValue)
{
this.BaseRepository().Delete(keyValue);
}
///
/// 删除未读、星标、收件
///
/// 主键
public void RemoveAddresseeForm(string keyValue)
{
EmailAddresseeEntity emailAddresseeEntity = new EmailAddresseeEntity();
emailAddresseeEntity.AddresseeId = keyValue;
emailAddresseeEntity.DeleteMark = (int)DeleteMarkEnum.Delete;
new RepositoryFactory().BaseRepository().Update(emailAddresseeEntity);
}
///
/// 彻底删除未读、星标、收件
///
/// 主键
public void ThoroughRemoveAddresseeForm(string keyValue)
{
new RepositoryFactory().BaseRepository().Delete(keyValue);
}
///
/// 删除回收
///
/// 主键
/// 类型
public void RemoveRecycleForm(string keyValue, int Type)
{
this.BaseRepository().Delete(keyValue);
}
///
/// 删除已发
///
/// 主键
public void RemoveSentForm(string keyValue)
{
EmailContentEntity emailContentEntity = new EmailContentEntity();
emailContentEntity.ContentId = keyValue;
emailContentEntity.DeleteMark = (int)DeleteMarkEnum.Delete;
this.BaseRepository().Update(emailContentEntity);
}
///
/// 彻底删除已发
///
/// 主键
public void ThoroughRemoveSentForm(string keyValue)
{
EmailContentEntity emailContentEntity = new EmailContentEntity();
emailContentEntity.ContentId = keyValue;
emailContentEntity.DeleteMark = (int)DeleteMarkEnum.DeleteCompletely;
this.BaseRepository().Update(emailContentEntity);
}
///
/// 保存邮件表单(发送、存入草稿、草稿编辑)
///
/// 主键值
/// 邮件实体
/// 收件人
/// 抄送人
/// 密送人
///
public void SaveForm(string keyValue, EmailContentEntity emailContentEntity, string[] addresssIds, string[] copysendIds, string[] bccsendIds)
{
if (emailContentEntity.SendState == 0)
{
if (!string.IsNullOrEmpty(keyValue))
{
emailContentEntity.Modify(keyValue);
this.BaseRepository().Update(emailContentEntity);
}
else
{
emailContentEntity.Create();
this.BaseRepository().Insert(emailContentEntity);
}
}
else
{
IRepository db = new RepositoryFactory().BaseRepository().BeginTrans();
try
{
if (!string.IsNullOrEmpty(keyValue))
{
emailContentEntity.Modify(keyValue);
db.Update(emailContentEntity);
}
else
{
emailContentEntity.Create();
db.Insert(emailContentEntity);
}
#region 收件人
foreach (var item in addresssIds)
{
EmailAddresseeEntity emailAddresseeEntity = new EmailAddresseeEntity();
emailAddresseeEntity.Create();
emailAddresseeEntity.ContentId = emailContentEntity.ContentId;
emailAddresseeEntity.RecipientId = item;
emailAddresseeEntity.RecipientState = 0;
db.Insert(emailAddresseeEntity);
}
#endregion
#region 抄送人
foreach (var item in copysendIds)
{
EmailAddresseeEntity emailAddresseeEntity = new EmailAddresseeEntity();
emailAddresseeEntity.Create();
emailAddresseeEntity.ContentId = emailContentEntity.ContentId;
emailAddresseeEntity.RecipientId = item;
emailAddresseeEntity.RecipientState = 1;
db.Insert(emailAddresseeEntity);
}
#endregion
#region 密送人
foreach (var item in bccsendIds)
{
EmailAddresseeEntity emailAddresseeEntity = new EmailAddresseeEntity();
emailAddresseeEntity.Create();
emailAddresseeEntity.ContentId = emailContentEntity.ContentId;
emailAddresseeEntity.RecipientId = item;
emailAddresseeEntity.RecipientState = 2;
db.Insert(emailAddresseeEntity);
}
#endregion
db.Commit();
}
catch (System.Exception)
{
db.Rollback();
throw;
}
}
}
///
/// 设置邮件已读/未读
///
/// 主键
/// 是否已读:0-未读1-已读
public void ReadEmail(string keyValue, int isRead = 1)
{
EmailAddresseeEntity emailAddresseeEntity = new EmailAddresseeEntity
{
AddresseeId = keyValue,
IsRead = isRead
};
emailAddresseeEntity.ReadCount = emailAddresseeEntity.ReadCount + 1;
emailAddresseeEntity.ReadDate = DateTimeHelper.Now;
new RepositoryFactory().BaseRepository().Update(emailAddresseeEntity);
}
///
/// 设置邮件星标/取消星标
///
/// 主键
/// 星标:0-取消星标1-星标
public void SteriskEmail(string keyValue, int sterisk = 1)
{
EmailAddresseeEntity emailAddresseeEntity = new EmailAddresseeEntity
{
AddresseeId = keyValue,
IsHighlight = sterisk
};
new RepositoryFactory().BaseRepository().Update(emailAddresseeEntity);
}
#endregion
}
}