EmailContentService.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508
  1. using Lottomat.Application.Entity.PublicInfoManage;
  2. using Lottomat.Application.IService.PublicInfoManage;
  3. using Lottomat.Data;
  4. using Lottomat.Data.Repository;
  5. using Lottomat.Util.Extension;
  6. using Lottomat.Util.WebControl;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Data.Common;
  10. using System.Linq;
  11. using System.Text;
  12. using Lottomat.Application.Code;
  13. using Lottomat.Util;
  14. using Lottomat.Utils.Date;
  15. namespace Lottomat.Application.Service.PublicInfoManage
  16. {
  17. /// <summary>
  18. /// 版 本 1.0
  19. /// Copyright (c) 2016-2017
  20. /// 创建人:赵轶
  21. /// 日 期:2015.12.8 11:31
  22. /// 描 述:邮件内容
  23. /// </summary>
  24. public class EmailContentService : RepositoryFactory<EmailContentEntity>, IEmailContentService
  25. {
  26. #region 获取数据
  27. /// <summary>
  28. /// 未读邮件
  29. /// </summary>
  30. /// <param name="pagination">分页参数</param>
  31. /// <param name="userId">用户Id</param>
  32. /// <param name="keyword">关键字</param>
  33. /// <returns></returns>
  34. public IEnumerable<EmailContentEntity> GetUnreadMail(Pagination pagination, string userId, string keyword)
  35. {
  36. var strSql = new StringBuilder();
  37. strSql.Append(@"SELECT a.AddresseeId AS ContentId ,
  38. c.Theme ,
  39. c.ThemeColor ,
  40. c.SenderId ,
  41. c.SenderName ,
  42. c.SenderTime ,
  43. c.SendPriority,
  44. a.IsHighlight,
  45. a.CreateDate
  46. FROM Email_Addressee a
  47. LEFT JOIN Email_Content c ON c.ContentId = a.ContentId
  48. WHERE a.RecipientId = @userId AND a.IsRead <> 1");
  49. strSql.Append(" AND a.DeleteMark = 0");
  50. var parameter = new List<DbParameter>();
  51. parameter.Add(DbParameters.CreateDbParameter("@userId", userId));
  52. if (!keyword.IsEmpty())
  53. {
  54. strSql.Append(" AND c.Theme like @Theme");
  55. parameter.Add(DbParameters.CreateDbParameter("@Theme", '%' + keyword + '%'));
  56. }
  57. return this.BaseRepository().FindList(strSql.ToString(), parameter.ToArray(), pagination);
  58. }
  59. /// <summary>
  60. /// 未读邮件数量
  61. /// </summary>
  62. /// <param name="userId">用户Id</param>
  63. /// <returns></returns>
  64. public int GetUnreadMailCount(string userId)
  65. {
  66. var expression = LinqExtensions.True<EmailAddresseeEntity>();
  67. expression = expression.And(t => t.RecipientId == userId);
  68. expression = expression.And(t => t.IsRead != 1);
  69. expression = expression.And(t => t.DeleteMark == 0);
  70. return new RepositoryFactory().BaseRepository().IQueryable<EmailAddresseeEntity>(expression).Count();
  71. }
  72. /// <summary>
  73. /// 星标邮件
  74. /// </summary>
  75. /// <param name="pagination">分页参数</param>
  76. /// <param name="userId">用户Id</param>
  77. /// <param name="keyword">关键字</param>
  78. /// <returns></returns>
  79. public IEnumerable<EmailContentEntity> GetAsteriskMail(Pagination pagination, string userId, string keyword)
  80. {
  81. var strSql = new StringBuilder();
  82. strSql.Append(@"SELECT a.AddresseeId AS ContentId ,
  83. c.Theme ,
  84. c.ThemeColor ,
  85. c.SenderId ,
  86. c.SenderName ,
  87. c.SenderTime ,
  88. c.SendPriority,
  89. a.IsHighlight,
  90. a.CreateDate
  91. FROM Email_Addressee a
  92. LEFT JOIN Email_Content c ON c.ContentId = a.ContentId
  93. WHERE a.RecipientId = @userId AND a.IsHighlight = 1");
  94. strSql.Append(" AND a.DeleteMark = 0");
  95. var parameter = new List<DbParameter>();
  96. parameter.Add(DbParameters.CreateDbParameter("@userId", userId));
  97. if (!keyword.IsEmpty())
  98. {
  99. strSql.Append(" AND c.Theme like @Theme");
  100. parameter.Add(DbParameters.CreateDbParameter("@Theme", '%' + keyword + '%'));
  101. }
  102. return this.BaseRepository().FindList(strSql.ToString(), parameter.ToArray(), pagination);
  103. }
  104. /// <summary>
  105. /// 星标邮件数量
  106. /// </summary>
  107. /// <param name="userId">用户Id</param>
  108. /// <returns></returns>
  109. public int GetAsteriskMailCount(string userId)
  110. {
  111. var expression = LinqExtensions.True<EmailAddresseeEntity>();
  112. expression = expression.And(t => t.RecipientId == userId);
  113. expression = expression.And(t => t.IsHighlight == 1);
  114. expression = expression.And(t => t.DeleteMark == (int)DeleteMarkEnum.NotDelete);
  115. return new RepositoryFactory().BaseRepository().IQueryable<EmailAddresseeEntity>(expression).Count();
  116. }
  117. /// <summary>
  118. /// 草稿箱
  119. /// </summary>
  120. /// <param name="pagination">分页参数</param>
  121. /// <param name="userId">用户Id</param>
  122. /// <param name="keyword">关键字</param>
  123. /// <returns></returns>
  124. public IEnumerable<EmailContentEntity> GetDraftMail(Pagination pagination, string userId, string keyword)
  125. {
  126. var expression = LinqExtensions.True<EmailContentEntity>();
  127. expression = expression.And(t => t.SendState == 0);
  128. expression = expression.And(t => t.CreateUserId == userId);
  129. if (!keyword.IsEmpty())
  130. {
  131. expression = expression.And(t => t.Theme.Contains(keyword));
  132. }
  133. return this.BaseRepository().FindList(expression, pagination);
  134. }
  135. /// <summary>
  136. /// 草稿箱数量
  137. /// </summary>
  138. /// <param name="userId">用户Id</param>
  139. /// <returns></returns>
  140. public int GetDraftMailCount(string userId)
  141. {
  142. var expression = LinqExtensions.True<EmailContentEntity>();
  143. expression = expression.And(t => t.SendState == 0);
  144. expression = expression.And(t => t.CreateUserId == userId);
  145. return this.BaseRepository().IQueryable(expression).Count();
  146. }
  147. /// <summary>
  148. /// 回收箱
  149. /// </summary>
  150. /// <param name="pagination">分页参数</param>
  151. /// <param name="userId">用户Id</param>
  152. /// <param name="keyword">关键字</param>
  153. /// <returns></returns>
  154. public IEnumerable<EmailContentEntity> GetRecycleMail(Pagination pagination, string userId, string keyword)
  155. {
  156. var strSql = new StringBuilder();
  157. strSql.Append(@"SELECT *
  158. FROM ( SELECT a.AddresseeId AS ContentId ,
  159. c.Theme ,
  160. c.ThemeColor ,
  161. c.SenderId ,
  162. c.SenderName ,
  163. c.SenderTime ,
  164. c.SendPriority ,
  165. a.IsHighlight ,
  166. a.CreateDate
  167. FROM Email_Addressee a
  168. LEFT JOIN Email_Content c ON c.ContentId = a.ContentId
  169. WHERE a.RecipientId = @userId
  170. AND a.DeleteMark = 1
  171. UNION
  172. SELECT c.ContentId ,
  173. c.Theme ,
  174. c.ThemeColor ,
  175. c.SenderId ,
  176. c.SenderName ,
  177. c.SenderTime ,
  178. c.SendPriority ,
  179. c.IsHighlight ,
  180. c.CreateDate
  181. FROM Email_Content c
  182. WHERE c.CreateUserId = @userId
  183. AND c.DeleteMark = 1
  184. ) t WHERE 1=1");
  185. var parameter = new List<DbParameter>();
  186. parameter.Add(DbParameters.CreateDbParameter("@userId", userId));
  187. if (!keyword.IsEmpty())
  188. {
  189. strSql.Append(" AND Theme like @Theme");
  190. parameter.Add(DbParameters.CreateDbParameter("@Theme", '%' + keyword + '%'));
  191. }
  192. return this.BaseRepository().FindList(strSql.ToString(), parameter.ToArray(), pagination);
  193. }
  194. /// <summary>
  195. /// 回收箱数量
  196. /// </summary>
  197. /// <param name="userId">用户Id</param>
  198. /// <returns></returns>
  199. public int GetRecycleMailCount(string userId)
  200. {
  201. var strSql = new StringBuilder();
  202. strSql.Append(@"SELECT COUNT(1)
  203. FROM ( SELECT a.AddresseeId AS ContentId ,
  204. c.Theme ,
  205. c.ThemeColor ,
  206. c.SenderId ,
  207. c.SenderName ,
  208. c.SenderTime ,
  209. c.SendPriority ,
  210. a.IsHighlight ,
  211. a.CreateDate
  212. FROM Email_Addressee a
  213. LEFT JOIN Email_Content c ON c.ContentId = a.ContentId
  214. WHERE a.RecipientId = @userId
  215. AND a.DeleteMark = 1
  216. UNION
  217. SELECT c.ContentId ,
  218. c.Theme ,
  219. c.ThemeColor ,
  220. c.SenderId ,
  221. c.SenderName ,
  222. c.SenderTime ,
  223. c.SendPriority ,
  224. c.IsHighlight ,
  225. c.CreateDate
  226. FROM Email_Content c
  227. WHERE c.CreateUserId = @userId
  228. AND c.DeleteMark = 1
  229. ) t");
  230. var parameter = new List<DbParameter>();
  231. parameter.Add(DbParameters.CreateDbParameter("@userId", userId));
  232. return this.BaseRepository().FindObject(strSql.ToString(), parameter.ToArray()).ToInt();
  233. }
  234. /// <summary>
  235. /// 收件箱
  236. /// </summary>
  237. /// <param name="pagination">分页参数</param>
  238. /// <param name="userId">用户Id</param>
  239. /// <param name="keyword">关键字</param>
  240. /// <returns></returns>
  241. public IEnumerable<EmailContentEntity> GetAddresseeMail(Pagination pagination, string userId, string keyword)
  242. {
  243. var strSql = new StringBuilder();
  244. strSql.Append(@"SELECT a.AddresseeId AS ContentId ,
  245. c.Theme ,
  246. c.ThemeColor ,
  247. c.SenderId ,
  248. c.SenderName ,
  249. c.SenderTime ,
  250. c.SendPriority,
  251. c.CreateDate,
  252. a.IsHighlight
  253. FROM Email_Addressee a
  254. LEFT JOIN Email_Content c ON c.ContentId = a.ContentId
  255. WHERE a.RecipientId = @userId");
  256. strSql.Append(" AND a.DeleteMark = 0 ");
  257. var parameter = new List<DbParameter>();
  258. parameter.Add(DbParameters.CreateDbParameter("@userId", userId));
  259. if (!keyword.IsEmpty())
  260. {
  261. strSql.Append(" AND c.Theme like @Theme");
  262. parameter.Add(DbParameters.CreateDbParameter("@Theme", '%' + keyword + '%'));
  263. }
  264. return this.BaseRepository().FindList(strSql.ToString(), parameter.ToArray(), pagination);
  265. }
  266. /// <summary>
  267. /// 收件箱数量
  268. /// </summary>
  269. /// <param name="userId">用户Id</param>
  270. /// <returns></returns>
  271. public int GetAddresseeMailCount(string userId)
  272. {
  273. var expression = LinqExtensions.True<EmailAddresseeEntity>();
  274. expression = expression.And(t => t.RecipientId == userId);
  275. expression = expression.And(t => t.DeleteMark == (int)DeleteMarkEnum.NotDelete);
  276. return new RepositoryFactory().BaseRepository().IQueryable<EmailAddresseeEntity>(expression).Count();
  277. }
  278. /// <summary>
  279. /// 已发送
  280. /// </summary>
  281. /// <param name="pagination">分页参数</param>
  282. /// <param name="userId">用户Id</param>
  283. /// <param name="keyword">关键字</param>
  284. /// <returns></returns>
  285. public IEnumerable<EmailContentEntity> GetSentMail(Pagination pagination, string userId, string keyword)
  286. {
  287. var expression = LinqExtensions.True<EmailContentEntity>();
  288. expression = expression.And(t => t.SendState == 1);
  289. expression = expression.And(t => t.CreateUserId == userId);
  290. expression = expression.And(t => t.DeleteMark == (int)DeleteMarkEnum.NotDelete);
  291. if (!keyword.IsEmpty())
  292. {
  293. expression = expression.And(t => t.Theme.Contains(keyword));
  294. }
  295. return this.BaseRepository().FindList(expression, pagination);
  296. }
  297. /// <summary>
  298. /// 已发送数量
  299. /// </summary>
  300. /// <param name="userId">用户Id</param>
  301. /// <returns></returns>
  302. public int GetSentMailCount(string userId)
  303. {
  304. var expression = LinqExtensions.True<EmailContentEntity>();
  305. expression = expression.And(t => t.SendState == 1);
  306. expression = expression.And(t => t.CreateUserId == userId);
  307. expression = expression.And(t => t.DeleteMark == (int)DeleteMarkEnum.NotDelete);
  308. return this.BaseRepository().IQueryable(expression).Count();
  309. }
  310. /// <summary>
  311. /// 邮件实体
  312. /// </summary>
  313. /// <param name="keyValue">主键值</param>
  314. /// <returns></returns>
  315. public EmailContentEntity GetEntity(string keyValue)
  316. {
  317. return this.BaseRepository().FindEntity(keyValue);
  318. }
  319. /// <summary>
  320. /// 收件邮件实体
  321. /// </summary>
  322. /// <param name="keyValue">主键值</param>
  323. /// <returns></returns>
  324. public EmailAddresseeEntity GetAddresseeEntity(string keyValue)
  325. {
  326. return new RepositoryFactory().BaseRepository().FindEntity<EmailAddresseeEntity>(keyValue);
  327. }
  328. #endregion
  329. #region 提交数据
  330. /// <summary>
  331. /// 删除草稿
  332. /// </summary>
  333. /// <param name="keyValue">主键</param>
  334. public void RemoveDraftForm(string keyValue)
  335. {
  336. this.BaseRepository().Delete(keyValue);
  337. }
  338. /// <summary>
  339. /// 删除未读、星标、收件
  340. /// </summary>
  341. /// <param name="keyValue">主键</param>
  342. public void RemoveAddresseeForm(string keyValue)
  343. {
  344. EmailAddresseeEntity emailAddresseeEntity = new EmailAddresseeEntity();
  345. emailAddresseeEntity.AddresseeId = keyValue;
  346. emailAddresseeEntity.DeleteMark = (int)DeleteMarkEnum.Delete;
  347. new RepositoryFactory().BaseRepository().Update(emailAddresseeEntity);
  348. }
  349. /// <summary>
  350. /// 彻底删除未读、星标、收件
  351. /// </summary>
  352. /// <param name="keyValue">主键</param>
  353. public void ThoroughRemoveAddresseeForm(string keyValue)
  354. {
  355. new RepositoryFactory().BaseRepository().Delete<EmailAddresseeEntity>(keyValue);
  356. }
  357. /// <summary>
  358. /// 删除回收
  359. /// </summary>
  360. /// <param name="keyValue">主键</param>
  361. /// <param name="Type">类型</param>
  362. public void RemoveRecycleForm(string keyValue, int Type)
  363. {
  364. this.BaseRepository().Delete(keyValue);
  365. }
  366. /// <summary>
  367. /// 删除已发
  368. /// </summary>
  369. /// <param name="keyValue">主键</param>
  370. public void RemoveSentForm(string keyValue)
  371. {
  372. EmailContentEntity emailContentEntity = new EmailContentEntity();
  373. emailContentEntity.ContentId = keyValue;
  374. emailContentEntity.DeleteMark = (int)DeleteMarkEnum.Delete;
  375. this.BaseRepository().Update(emailContentEntity);
  376. }
  377. /// <summary>
  378. /// 彻底删除已发
  379. /// </summary>
  380. /// <param name="keyValue">主键</param>
  381. public void ThoroughRemoveSentForm(string keyValue)
  382. {
  383. EmailContentEntity emailContentEntity = new EmailContentEntity();
  384. emailContentEntity.ContentId = keyValue;
  385. emailContentEntity.DeleteMark = (int)DeleteMarkEnum.DeleteCompletely;
  386. this.BaseRepository().Update(emailContentEntity);
  387. }
  388. /// <summary>
  389. /// 保存邮件表单(发送、存入草稿、草稿编辑)
  390. /// </summary>
  391. /// <param name="keyValue">主键值</param>
  392. /// <param name="emailContentEntity">邮件实体</param>
  393. /// <param name="addresssIds">收件人</param>
  394. /// <param name="copysendIds">抄送人</param>
  395. /// <param name="bccsendIds">密送人</param>
  396. /// <returns></returns>
  397. public void SaveForm(string keyValue, EmailContentEntity emailContentEntity, string[] addresssIds, string[] copysendIds, string[] bccsendIds)
  398. {
  399. if (emailContentEntity.SendState == 0)
  400. {
  401. if (!string.IsNullOrEmpty(keyValue))
  402. {
  403. emailContentEntity.Modify(keyValue);
  404. this.BaseRepository().Update(emailContentEntity);
  405. }
  406. else
  407. {
  408. emailContentEntity.Create();
  409. this.BaseRepository().Insert(emailContentEntity);
  410. }
  411. }
  412. else
  413. {
  414. IRepository db = new RepositoryFactory().BaseRepository().BeginTrans();
  415. try
  416. {
  417. if (!string.IsNullOrEmpty(keyValue))
  418. {
  419. emailContentEntity.Modify(keyValue);
  420. db.Update(emailContentEntity);
  421. }
  422. else
  423. {
  424. emailContentEntity.Create();
  425. db.Insert(emailContentEntity);
  426. }
  427. #region 收件人
  428. foreach (var item in addresssIds)
  429. {
  430. EmailAddresseeEntity emailAddresseeEntity = new EmailAddresseeEntity();
  431. emailAddresseeEntity.Create();
  432. emailAddresseeEntity.ContentId = emailContentEntity.ContentId;
  433. emailAddresseeEntity.RecipientId = item;
  434. emailAddresseeEntity.RecipientState = 0;
  435. db.Insert(emailAddresseeEntity);
  436. }
  437. #endregion
  438. #region 抄送人
  439. foreach (var item in copysendIds)
  440. {
  441. EmailAddresseeEntity emailAddresseeEntity = new EmailAddresseeEntity();
  442. emailAddresseeEntity.Create();
  443. emailAddresseeEntity.ContentId = emailContentEntity.ContentId;
  444. emailAddresseeEntity.RecipientId = item;
  445. emailAddresseeEntity.RecipientState = 1;
  446. db.Insert(emailAddresseeEntity);
  447. }
  448. #endregion
  449. #region 密送人
  450. foreach (var item in bccsendIds)
  451. {
  452. EmailAddresseeEntity emailAddresseeEntity = new EmailAddresseeEntity();
  453. emailAddresseeEntity.Create();
  454. emailAddresseeEntity.ContentId = emailContentEntity.ContentId;
  455. emailAddresseeEntity.RecipientId = item;
  456. emailAddresseeEntity.RecipientState = 2;
  457. db.Insert(emailAddresseeEntity);
  458. }
  459. #endregion
  460. db.Commit();
  461. }
  462. catch (System.Exception)
  463. {
  464. db.Rollback();
  465. throw;
  466. }
  467. }
  468. }
  469. /// <summary>
  470. /// 设置邮件已读/未读
  471. /// </summary>
  472. /// <param name="keyValue">主键</param>
  473. /// <param name="isRead">是否已读:0-未读1-已读</param>
  474. public void ReadEmail(string keyValue, int isRead = 1)
  475. {
  476. EmailAddresseeEntity emailAddresseeEntity = new EmailAddresseeEntity
  477. {
  478. AddresseeId = keyValue,
  479. IsRead = isRead
  480. };
  481. emailAddresseeEntity.ReadCount = emailAddresseeEntity.ReadCount + 1;
  482. emailAddresseeEntity.ReadDate = DateTimeHelper.Now;
  483. new RepositoryFactory().BaseRepository().Update(emailAddresseeEntity);
  484. }
  485. /// <summary>
  486. /// 设置邮件星标/取消星标
  487. /// </summary>
  488. /// <param name="keyValue">主键</param>
  489. /// <param name="sterisk">星标:0-取消星标1-星标</param>
  490. public void SteriskEmail(string keyValue, int sterisk = 1)
  491. {
  492. EmailAddresseeEntity emailAddresseeEntity = new EmailAddresseeEntity
  493. {
  494. AddresseeId = keyValue,
  495. IsHighlight = sterisk
  496. };
  497. new RepositoryFactory().BaseRepository().Update(emailAddresseeEntity);
  498. }
  499. #endregion
  500. }
  501. }