EmailController.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. using System;
  2. using System.IO;
  3. using System.Threading;
  4. using System.Web;
  5. using LeaRun.Application.Busines.PublicInfoManage;
  6. using LeaRun.Application.Code;
  7. using LeaRun.Application.Entity.PublicInfoManage;
  8. using LeaRun.Util;
  9. using LeaRun.Util.Extension;
  10. using LeaRun.Util.WebControl;
  11. using System.Web.Mvc;
  12. using Newtonsoft.Json.Linq;
  13. namespace LeaRun.Application.Web.Areas.PublicInfoManage.Controllers
  14. {
  15. /// <summary>
  16. /// 版 本 6.1
  17. /// Copyright (c) 2013-2016 上海力软信息技术有限公司
  18. /// 创建人:佘赐雄
  19. /// 日 期:2015.12.8 11:31
  20. /// 描 述:邮件中心
  21. /// </summary>
  22. public class EmailController : MvcControllerBase
  23. {
  24. private EmailCategoryBLL emailCategoryBLL = new EmailCategoryBLL();
  25. private EmailContentBLL emailContentBLL = new EmailContentBLL();
  26. #region 视图功能
  27. /// <summary>
  28. /// 邮件中心
  29. /// </summary>
  30. /// <returns></returns>
  31. [HttpGet]
  32. [HandlerAuthorize(PermissionMode.Enforce)]
  33. public ActionResult Index()
  34. {
  35. return View();
  36. }
  37. /// <summary>
  38. /// 邮件分类表单
  39. /// </summary>
  40. /// <returns></returns>
  41. [HttpGet]
  42. public ActionResult EmailCategoryForm()
  43. {
  44. return View();
  45. }
  46. /// <summary>
  47. /// 写邮件
  48. /// </summary>
  49. /// <returns></returns>
  50. [HttpGet]
  51. public ActionResult EmailWriteForm()
  52. {
  53. return View();
  54. }
  55. /// <summary>
  56. /// 查看邮件
  57. /// </summary>
  58. /// <returns></returns>
  59. /// <summary>
  60. /// 写邮件
  61. /// </summary>
  62. /// <returns></returns>
  63. [HttpGet]
  64. public ActionResult FileViewForm()
  65. {
  66. return View();
  67. }
  68. /// <summary>
  69. /// 查看邮件
  70. /// </summary>
  71. /// <returns></returns>
  72. [HttpGet]
  73. public ActionResult EmailLookDetail()
  74. {
  75. string keyValue = Request["keyValue"];
  76. EmailAddresseeEntity emailAddresseeEntity = emailContentBLL.GetAddresseeEntity(keyValue);
  77. if (emailAddresseeEntity != null)
  78. {
  79. ViewBag.contentId = emailAddresseeEntity.ContentId;
  80. }
  81. else
  82. {
  83. ViewBag.contentId = keyValue;
  84. keyValue = "";
  85. }
  86. ViewBag.keyValue = keyValue;
  87. return View();
  88. }
  89. #endregion
  90. #region 获取数据
  91. /// <summary>
  92. /// 分类列表
  93. /// </summary>
  94. /// <returns>返回列表Json</returns>
  95. [HttpGet]
  96. public ActionResult GetCategoryListJson()
  97. {
  98. string UserId = OperatorProvider.Provider.Current().UserId;
  99. var data = emailCategoryBLL.GetList(UserId);
  100. return ToJsonResult(data);
  101. }
  102. /// <summary>
  103. /// 分类实体
  104. /// </summary>
  105. /// <param name="keyValue">主键值</param>
  106. /// <returns>返回对象Json</returns>
  107. [HttpGet]
  108. public ActionResult GetCategoryFormJson(string keyValue)
  109. {
  110. var data = emailCategoryBLL.GetEntity(keyValue);
  111. return ToJsonResult(data);
  112. }
  113. /// <summary>
  114. /// 统计邮箱数量(未读、星标、草稿、回收、收件、已发)
  115. /// </summary>
  116. /// <returns>返回数量</returns>
  117. public ActionResult GetMailCount()
  118. {
  119. string userId = OperatorProvider.Provider.Current().UserId;
  120. var unreadcount = emailContentBLL.GetUnreadMailCount(userId);
  121. var asteriskcount = emailContentBLL.GetAsteriskMailCount(userId);
  122. var sentcount = emailContentBLL.GetSentMailCount(userId);
  123. var draftcount = emailContentBLL.GetDraftMailCount(userId);
  124. var recyclecount = emailContentBLL.GetRecycleMailCount(userId);
  125. var addresseecount = emailContentBLL.GetAddresseeMailCount(userId);
  126. var count = new
  127. {
  128. unread = unreadcount,
  129. asterisk = asteriskcount,
  130. draft = draftcount,
  131. recycle = recyclecount,
  132. addressee = addresseecount,
  133. sent = sentcount,
  134. };
  135. return Content(count.ToJson());
  136. }
  137. /// <summary>
  138. /// 未读邮件列表
  139. /// </summary>
  140. /// <param name="pagination">分页参数</param>
  141. /// <param name="keyword">关键字</param>
  142. /// <returns>返回列表Json</returns>
  143. public ActionResult GetUnreadMailJson(Pagination pagination, string keyword)
  144. {
  145. var watch = CommonHelper.TimerStart();
  146. string userId = OperatorProvider.Provider.Current().UserId;
  147. var data = emailContentBLL.GetUnreadMail(pagination, userId, keyword);
  148. var JsonData = new
  149. {
  150. rows = data,
  151. total = pagination.total,
  152. page = pagination.page,
  153. records = pagination.records,
  154. costtime = CommonHelper.TimerEnd(watch)
  155. };
  156. return Content(JsonData.ToJson());
  157. }
  158. /// <summary>
  159. /// 星标邮件列表
  160. /// </summary>
  161. /// <param name="pagination">分页参数</param>
  162. /// <param name="keyword">关键字</param>
  163. /// <returns>返回列表Json</returns>
  164. public ActionResult GetAsteriskMailJson(Pagination pagination, string keyword)
  165. {
  166. var watch = CommonHelper.TimerStart();
  167. string userId = OperatorProvider.Provider.Current().UserId;
  168. var data = emailContentBLL.GetAsteriskMail(pagination, userId, keyword);
  169. var JsonData = new
  170. {
  171. rows = data,
  172. total = pagination.total,
  173. page = pagination.page,
  174. records = pagination.records,
  175. costtime = CommonHelper.TimerEnd(watch)
  176. };
  177. return Content(JsonData.ToJson());
  178. }
  179. /// <summary>
  180. /// 草稿箱列表
  181. /// </summary>
  182. /// <param name="pagination">分页参数</param>
  183. /// <param name="keyword">关键字</param>
  184. /// <returns>返回列表Json</returns>
  185. public ActionResult GetDraftMailJson(Pagination pagination, string keyword)
  186. {
  187. var watch = CommonHelper.TimerStart();
  188. string userId = OperatorProvider.Provider.Current().UserId;
  189. var data = emailContentBLL.GetDraftMail(pagination, userId, keyword);
  190. var JsonData = new
  191. {
  192. rows = data,
  193. total = pagination.total,
  194. page = pagination.page,
  195. records = pagination.records,
  196. costtime = CommonHelper.TimerEnd(watch)
  197. };
  198. return Content(JsonData.ToJson());
  199. }
  200. /// <summary>
  201. /// 回收箱列表
  202. /// </summary>
  203. /// <param name="pagination">分页参数</param>
  204. /// <param name="keyword">关键字</param>
  205. /// <returns>返回列表Json</returns>
  206. public ActionResult GetRecycleMailJson(Pagination pagination, string keyword)
  207. {
  208. var watch = CommonHelper.TimerStart();
  209. string userId = OperatorProvider.Provider.Current().UserId;
  210. var data = emailContentBLL.GetRecycleMail(pagination, userId, keyword);
  211. var JsonData = new
  212. {
  213. rows = data,
  214. total = pagination.total,
  215. page = pagination.page,
  216. records = pagination.records,
  217. costtime = CommonHelper.TimerEnd(watch)
  218. };
  219. return Content(JsonData.ToJson());
  220. }
  221. /// <summary>
  222. /// 收件箱列表
  223. /// </summary>
  224. /// <param name="pagination">分页参数</param>
  225. /// <param name="keyword">关键字</param>
  226. /// <returns>返回列表Json</returns>
  227. public ActionResult GetAddresseeMailJson(Pagination pagination, string keyword)
  228. {
  229. var watch = CommonHelper.TimerStart();
  230. string userId = OperatorProvider.Provider.Current().UserId;
  231. var data = emailContentBLL.GetAddresseeMail(pagination, userId, keyword);
  232. var JsonData = new
  233. {
  234. rows = data,
  235. total = pagination.total,
  236. page = pagination.page,
  237. records = pagination.records,
  238. costtime = CommonHelper.TimerEnd(watch)
  239. };
  240. return Content(JsonData.ToJson());
  241. }
  242. /// <summary>
  243. /// 已发送列表
  244. /// </summary>
  245. /// <param name="pagination">分页参数</param>
  246. /// <param name="keyword">关键字</param>
  247. /// <returns>返回列表Json</returns>
  248. public ActionResult GetSentMailJson(Pagination pagination, string keyword)
  249. {
  250. var watch = CommonHelper.TimerStart();
  251. string userId = OperatorProvider.Provider.Current().UserId;
  252. var data = emailContentBLL.GetSentMail(pagination, userId, keyword);
  253. var JsonData = new
  254. {
  255. rows = data,
  256. total = pagination.total,
  257. page = pagination.page,
  258. records = pagination.records,
  259. costtime = CommonHelper.TimerEnd(watch)
  260. };
  261. return Content(JsonData.ToJson());
  262. }
  263. /// <summary>
  264. /// 邮件实体
  265. /// </summary>
  266. /// <param name="keyValue">主键值</param>
  267. /// <returns>返回对象Json</returns>
  268. [HttpGet]
  269. public ActionResult GetEmailFormJson(string keyValue)
  270. {
  271. var data = emailContentBLL.GetEntity(keyValue);
  272. string strJson = data.ToJson();
  273. strJson = strJson.Insert(1, "\"SenderTimeName\":\"" + Time.GetChineseDateTime(data.SenderTime.ToDate()) + "\",");
  274. return Content(strJson);
  275. }
  276. #endregion
  277. #region 提交数据
  278. /// <summary>
  279. /// 删除分类
  280. /// </summary>
  281. /// <param name="keyValue">主键值</param>
  282. /// <returns></returns>
  283. [HttpPost]
  284. [ValidateAntiForgeryToken]
  285. [AjaxOnly]
  286. public ActionResult RemoveCategoryForm(string keyValue)
  287. {
  288. emailCategoryBLL.RemoveForm(keyValue);
  289. return Success("删除成功。");
  290. }
  291. /// <summary>
  292. /// 保存分类表单(新增、修改)
  293. /// </summary>
  294. /// <param name="keyValue">主键值</param>
  295. /// <param name="emailCategoryEntity">分类实体</param>
  296. /// <returns></returns>
  297. [HttpPost]
  298. [ValidateAntiForgeryToken]
  299. [AjaxOnly]
  300. public ActionResult SaveCategoryForm(string keyValue, EmailCategoryEntity emailCategoryEntity)
  301. {
  302. emailCategoryBLL.SaveForm(keyValue, emailCategoryEntity);
  303. return Success("操作成功。");
  304. }
  305. /// <summary>
  306. /// 删除邮件
  307. /// </summary>
  308. /// <param name="keyValue">主键值</param>
  309. /// <param name="emailType">邮件类型:unreadMail starredMail draftMail recycleMail addresseeMail sendMail</param>
  310. /// <returns></returns>
  311. [HttpPost]
  312. [ValidateAntiForgeryToken]
  313. [AjaxOnly]
  314. [HandlerAuthorize(PermissionMode.Enforce)]
  315. public ActionResult RemoveEmailForm(string keyValue, string emailType)
  316. {
  317. emailContentBLL.RemoveForm(keyValue, emailType);
  318. return Success("删除成功。");
  319. }
  320. /// <summary>
  321. /// 彻底删除邮件
  322. /// </summary>
  323. /// <param name="keyValue">主键值</param>
  324. /// <param name="emailType">邮件类型:unreadMail starredMail draftMail recycleMail addresseeMail sendMail</param>
  325. /// <returns></returns>
  326. [HttpPost]
  327. [ValidateAntiForgeryToken]
  328. [AjaxOnly]
  329. [HandlerAuthorize(PermissionMode.Enforce)]
  330. public ActionResult ThoroughRemoveEmailForm(string keyValue, string emailType)
  331. {
  332. emailContentBLL.ThoroughRemoveForm(keyValue, emailType);
  333. return Success("删除成功。");
  334. }
  335. /// <summary>
  336. /// 保存写邮件表单(发送、草稿、编辑)
  337. /// </summary>
  338. /// <param name="keyValue">主键值</param>
  339. /// <param name="emailContentEntity">邮件信息实体</param>
  340. /// <param name="addresssIds">收件人</param>
  341. /// <param name="copysendIds">抄送人</param>
  342. /// <param name="bccsendIds">密送人</param>
  343. /// <returns></returns>
  344. [HttpPost]
  345. [AjaxOnly]
  346. [ValidateInput(false)]
  347. public ActionResult SaveEmailForm(string keyValue, EmailContentEntity emailContentEntity, string addresssIds, string copysendIds, string bccsendIds)
  348. {
  349. emailContentBLL.SaveForm(keyValue, emailContentEntity, addresssIds, copysendIds, bccsendIds);
  350. if (emailContentEntity.SendState == 1)
  351. {
  352. return Success("邮件发送成功。");
  353. }
  354. else
  355. {
  356. return Success("存入草稿成功。");
  357. }
  358. }
  359. /// <summary>
  360. /// 设置邮件已读/未读
  361. /// </summary>
  362. /// <param name="keyValue">主键值</param>
  363. /// <param name="IsRead">是否已读:0-未读1-已读</param>
  364. /// <returns></returns>
  365. [HttpPost]
  366. [AjaxOnly]
  367. public ActionResult ReadEmail(string keyValue, int IsRead = 1)
  368. {
  369. emailContentBLL.ReadEmail(keyValue, IsRead);
  370. return Success("操作成功。");
  371. }
  372. /// <summary>
  373. /// 设置邮件星标/取消星标
  374. /// </summary>
  375. /// <param name="keyValue">主键值</param>
  376. /// <param name="asterisk">星标:0-取消星标1-星标</param>
  377. /// <returns></returns>
  378. [HttpPost]
  379. [AjaxOnly]
  380. public ActionResult SteriskEmail(string keyValue, int asterisk = 1)
  381. {
  382. emailContentBLL.SteriskEmail(keyValue, asterisk);
  383. return Success("操作成功。");
  384. }
  385. /// <summary>
  386. /// 上传附件
  387. /// </summary>
  388. /// <returns></returns>
  389. public ActionResult FileUpload()
  390. {
  391. HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
  392. //如果没有文件上传,直接返回
  393. if (files[0].ContentLength == 0 || string.IsNullOrEmpty(files[0].FileName))
  394. {
  395. return HttpNotFound();
  396. }
  397. string originalName = files[0].FileName;
  398. string fileGuid = Guid.NewGuid().ToString();
  399. string uploadDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  400. string fileEextension = Path.GetExtension(files[0].FileName);
  401. string userId = OperatorProvider.Provider.Current().UserId;
  402. string virtualPath = string.Format("/Resource/EmailFile/{0}{1}", userId + "_" + fileGuid, fileEextension);
  403. string fullFileName = Server.MapPath("~" + virtualPath);
  404. //创建文件夹,保存文件
  405. string path = Path.GetDirectoryName(fullFileName);
  406. Directory.CreateDirectory(path);
  407. files[0].SaveAs(fullFileName);
  408. string nameSTR = Path.GetFileName(fullFileName);
  409. var JsonData = new
  410. {
  411. Success = true,
  412. Data = new { originalName = originalName, newName = nameSTR, path = virtualPath, uploadDate = uploadDate },
  413. SaveName = nameSTR
  414. };
  415. return Content(JsonData.ToJson());
  416. }
  417. #endregion
  418. /// <summary>
  419. /// 下载附件
  420. /// </summary>
  421. /// <param name="file"></param>
  422. [HttpPost]
  423. public void FileDownload(string file)
  424. {
  425. var data = JObject.Parse(Uri.UnescapeDataString(file));
  426. string filename = data["originalName"].ToString();//返回客户端文件名称
  427. string filepath = this.Server.MapPath(data["path"].ToString());
  428. if (FileDownHelper.FileExists(filepath))
  429. {
  430. FileDownHelper.DownLoadold(filepath, filename);
  431. }
  432. //return Content("下载成功");
  433. }
  434. }
  435. }