AdvertisementController.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using JiebaNet.Segmenter.Common;
  2. using Masuit.LuceneEFCore.SearchEngine.Linq;
  3. using Masuit.MyBlogs.Core.Common;
  4. using Masuit.MyBlogs.Core.Extensions;
  5. using Masuit.MyBlogs.Core.Infrastructure.Repository;
  6. using Masuit.MyBlogs.Core.Infrastructure.Services.Interface;
  7. using Masuit.MyBlogs.Core.Models.DTO;
  8. using Masuit.MyBlogs.Core.Models.Entity;
  9. using Masuit.MyBlogs.Core.Models.Enum;
  10. using Masuit.MyBlogs.Core.Models.ViewModel;
  11. using Masuit.Tools.Core.Net;
  12. using Microsoft.AspNetCore.Mvc;
  13. using Microsoft.EntityFrameworkCore;
  14. using System;
  15. using System.ComponentModel.DataAnnotations;
  16. using System.Linq;
  17. using System.Linq.Expressions;
  18. using System.Threading.Tasks;
  19. namespace Masuit.MyBlogs.Core.Controllers
  20. {
  21. [Route("partner/[action]")]
  22. public class AdvertisementController : BaseController
  23. {
  24. public ICategoryService CategoryService { get; set; }
  25. /// <summary>
  26. /// 前往
  27. /// </summary>
  28. /// <param name="id">广告id</param>
  29. /// <returns></returns>
  30. [HttpGet("{id:int}"), ResponseCache(Duration = 3600)]
  31. public async Task<IActionResult> Redirect(int id)
  32. {
  33. var ad = await AdsService.GetByIdAsync(id) ?? throw new NotFoundException("推广链接不存在");
  34. if (!HttpContext.Request.IsRobot() && string.IsNullOrEmpty(HttpContext.Session.Get<string>("ads" + id)))
  35. {
  36. HttpContext.Session.Set("ads" + id, id.ToString());
  37. ad.ViewCount++;
  38. await AdsService.SaveChangesAsync();
  39. }
  40. return Redirect(ad.Url);
  41. }
  42. /// <summary>
  43. /// 获取分页
  44. /// </summary>
  45. /// <returns></returns>
  46. [MyAuthorize]
  47. public async Task<ActionResult> GetPageData([Range(1, int.MaxValue, ErrorMessage = "页数必须大于0")] int page = 1, [Range(1, int.MaxValue, ErrorMessage = "页大小必须大于0")] int size = 10, string kw = "")
  48. {
  49. Expression<Func<Advertisement, bool>> where = p => true;
  50. if (!string.IsNullOrEmpty(kw))
  51. {
  52. where = where.And(p => p.Title.Contains(kw) || p.Description.Contains(kw));
  53. }
  54. var list = AdsService.GetQuery(where).OrderByDescending(p => p.Status == Status.Available).ThenByDescending(a => a.Price).ToPagedList<Advertisement, AdvertisementViewModel>(page, size, MapperConfig);
  55. var cids = list.Data.Where(m => !string.IsNullOrEmpty(m.CategoryIds)).SelectMany(m => m.CategoryIds.Split(",", StringSplitOptions.RemoveEmptyEntries).Select(int.Parse)).Distinct().ToArray();
  56. var dic = await CategoryService.GetQuery(c => cids.Contains(c.Id)).ToDictionaryAsync(c => c.Id + "", c => c.Name);
  57. foreach (var ad in list.Data.Where(ad => !string.IsNullOrEmpty(ad.CategoryIds)))
  58. {
  59. ad.CategoryNames = ad.CategoryIds.Split(",").Select(c => dic.GetValueOrDefault(c)).Join(",");
  60. ad.CreateTime = ad.CreateTime.ToTimeZone(HttpContext.Session.Get<string>(SessionKey.TimeZone));
  61. ad.UpdateTime = ad.UpdateTime.ToTimeZone(HttpContext.Session.Get<string>(SessionKey.TimeZone));
  62. }
  63. return Ok(list);
  64. }
  65. /// <summary>
  66. /// 保存banner
  67. /// </summary>
  68. /// <param name="model"></param>
  69. /// <returns></returns>
  70. [HttpPost, MyAuthorize]
  71. public async Task<IActionResult> Save(AdvertisementDto model)
  72. {
  73. model.CategoryIds = model.CategoryIds?.Replace("null", "");
  74. var b = await AdsService.AddOrUpdateSavedAsync(a => a.Id, model.Mapper<Advertisement>()) > 0;
  75. return ResultData(null, b, b ? "保存成功" : "保存失败");
  76. }
  77. /// <summary>
  78. /// 删除banner
  79. /// </summary>
  80. /// <param name="id"></param>
  81. /// <returns></returns>
  82. [HttpPost("{id}"), HttpGet("{id}"), MyAuthorize]
  83. public async Task<IActionResult> Delete(int id)
  84. {
  85. bool b = await AdsService.DeleteByIdSavedAsync(id) > 0;
  86. return ResultData(null, b, b ? "删除成功" : "删除失败");
  87. }
  88. /// <summary>
  89. /// 禁用或开启文章评论
  90. /// </summary>
  91. /// <param name="id">文章id</param>
  92. /// <returns></returns>
  93. [MyAuthorize, HttpPost("{id}")]
  94. public async Task<ActionResult> ChangeState(int id)
  95. {
  96. var ad = await AdsService.GetByIdAsync(id) ?? throw new NotFoundException("广告不存在!");
  97. ad.Status = ad.Status == Status.Available ? Status.Unavailable : Status.Available;
  98. return ResultData(null, await AdsService.SaveChangesAsync() > 0, ad.Status == Status.Available ? $"【{ad.Title}】已上架!" : $"【{ad.Title}】已下架!");
  99. }
  100. }
  101. }