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 } }