Pārlūkot izejas kodu

广告呈现优化

懒得勤快 3 gadi atpakaļ
vecāks
revīzija
a1bf859e50

+ 1 - 0
src/Masuit.MyBlogs.Core/Controllers/AdminController.cs

@@ -1,6 +1,7 @@
 using AutoMapper;
 using Collections.Pooled;
 using FreeRedis;
+using Masuit.MyBlogs.Core.Common;
 using Masuit.MyBlogs.Core.Configs;
 using Masuit.MyBlogs.Core.Extensions;
 using Masuit.MyBlogs.Core.Infrastructure.Services.Interface;

+ 3 - 2
src/Masuit.MyBlogs.Core/Infrastructure/Services/AdvertisementService.cs

@@ -8,9 +8,9 @@ using Masuit.MyBlogs.Core.Models.Entity;
 using Masuit.MyBlogs.Core.Models.Enum;
 using Masuit.Tools;
 using Masuit.Tools.Linq;
+using Microsoft.EntityFrameworkCore;
 using System.Linq.Expressions;
 using System.Text.RegularExpressions;
-using Microsoft.EntityFrameworkCore;
 
 namespace Masuit.MyBlogs.Core.Infrastructure.Services
 {
@@ -74,7 +74,8 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
                     where = where.And(a => Regex.IsMatch(a.Title + a.Description, regex));
                 }
 
-                var list = GetQuery(where).OrderBy(a => -Math.Log(EF.Functions.Random()) / ((double)a.Price / a.Types.Length * catCount / (string.IsNullOrEmpty(a.CategoryIds) ? catCount : (a.CategoryIds.Length + 1)))).Take(count).ToList();
+                var array = GetQuery(a => a.Status == Status.Available).GroupBy(a => a.Merchant).Select(g => g.OrderBy(_ => EF.Functions.Random()).FirstOrDefault().Id).Take(50).ToArray();
+                var list = GetQuery(where).Where(a => array.Contains(a.Id)).OrderBy(a => -Math.Log(EF.Functions.Random()) / ((double)a.Price / a.Types.Length * catCount / (string.IsNullOrEmpty(a.CategoryIds) ? catCount : (a.CategoryIds.Length + 1)))).Take(count).ToList();
                 if (list.Count == 0 && keywords is { Length: > 0 })
                 {
                     return GetsByWeightedPrice(count, type, ipinfo, cid);

+ 53 - 49
src/Masuit.MyBlogs.Core/Models/DTO/AdvertisementDto.cs

@@ -1,64 +1,68 @@
 using Masuit.MyBlogs.Core.Models.Entity;
 using System.ComponentModel.DataAnnotations;
 
-namespace Masuit.MyBlogs.Core.Models.DTO
+namespace Masuit.MyBlogs.Core.Models.DTO;
+
+public class AdvertisementDto : BaseDto
 {
-    public class AdvertisementDto : BaseDto
-    {
-        /// <summary>
-        /// 标题
-        /// </summary>
-        [Required(ErrorMessage = "标题不能为空"), MinLength(10, ErrorMessage = "标题建议至少设置为10字"), MaxLength(128, ErrorMessage = "标题不能超过128字")]
-        public string Title { get; set; }
+    /// <summary>
+    /// 标题
+    /// </summary>
+    [Required(ErrorMessage = "标题不能为空"), MinLength(10, ErrorMessage = "标题建议至少设置为10字"), MaxLength(128, ErrorMessage = "标题不能超过128字")]
+    public string Title { get; set; }
+
+    /// <summary>
+    /// 宣传图片
+    /// </summary>
+    public string ImageUrl { get; set; }
 
-        /// <summary>
-        /// 宣传图片
-        /// </summary>
-        public string ImageUrl { get; set; }
+    /// <summary>
+    /// 宣传图片
+    /// </summary>
+    public string ThumbImgUrl { get; set; }
 
-        /// <summary>
-        /// 小宣传图片
-        /// </summary>
-        public string ThumbImgUrl { get; set; }
+    /// <summary>
+    /// 描述
+    /// </summary>
+    [Required(ErrorMessage = "描述文字不能为空"), MinLength(40, ErrorMessage = "描述文字建议至少设置为40字"), MaxLength(300, ErrorMessage = "描述文字不能超过300字")]
+    public string Description { get; set; }
 
-        /// <summary>
-        /// 描述
-        /// </summary>
-        [Required(ErrorMessage = "描述文字不能为空"), MinLength(40, ErrorMessage = "描述文字建议至少设置为40字"), MaxLength(300, ErrorMessage = "描述文字不能超过300字")]
-        public string Description { get; set; }
+    /// <summary>
+    /// 广告url
+    /// </summary>
+    [Required(ErrorMessage = "推广链接不能为空")]
+    public string Url { get; set; }
 
-        /// <summary>
-        /// 广告url
-        /// </summary>
-        [Required(ErrorMessage = "推广链接不能为空")]
-        public string Url { get; set; }
+    /// <summary>
+    /// 价格
+    /// </summary>
+    public decimal Price { get; set; }
 
-        /// <summary>
-        /// 价格
-        /// </summary>
-        public decimal Price { get; set; }
+    /// <summary>
+    /// 推广区域
+    /// </summary>
+    [Required(ErrorMessage = "推广区域不能为空,至少需要选择一个推广区域")]
+    public string Types { get; set; }
 
-        /// <summary>
-        /// 推广区域
-        /// </summary>
-        [Required(ErrorMessage = "推广区域不能为空,至少需要选择一个推广区域")]
-        public string Types { get; set; }
+    public string CategoryIds { get; set; }
 
-        public string CategoryIds { get; set; }
+    /// <summary>
+    /// 到期时间
+    /// </summary>
+    public DateTime? ExpireTime { get; set; }
 
-        /// <summary>
-        /// 到期时间
-        /// </summary>
-        public DateTime? ExpireTime { get; set; }
+    /// <summary>
+    /// 地区模式
+    /// </summary>
+    public RegionLimitMode RegionMode { get; set; }
 
-        /// <summary>
-        /// 地区模式
-        /// </summary>
-        public RegionLimitMode RegionMode { get; set; }
+    /// <summary>
+    /// 地区,逗号或竖线分隔
+    /// </summary>
+    public string Regions { get; set; }
 
-        /// <summary>
-        /// 地区,逗号或竖线分隔
-        /// </summary>
-        public string Regions { get; set; }
-    }
+    /// <summary>
+    /// 广告商
+    /// </summary>
+    public string Merchant { get; set; }
 }

+ 5 - 0
src/Masuit.MyBlogs.Core/Models/Entity/Advertisement.cs

@@ -88,6 +88,11 @@ namespace Masuit.MyBlogs.Core.Models.Entity
         /// </summary>
         public string Regions { get; set; }
 
+        /// <summary>
+        /// 广告商
+        /// </summary>
+        public string Merchant { get; set; }
+
         public virtual ICollection<AdvertisementClickRecord> ClickRecords { get; set; }
     }
 }

+ 6 - 0
src/Masuit.MyBlogs.Core/Models/ViewModel/AdvertisementViewModel.cs

@@ -84,6 +84,12 @@ namespace Masuit.MyBlogs.Core.Models.ViewModel
         /// 地区,逗号或竖线分隔
         /// </summary>
         public string Regions { get; set; }
+
+        /// <summary>
+        /// 广告商
+        /// </summary>
+        public string Merchant { get; set; }
+
     }
 
     public class AdvertisementClickRecordViewModel

+ 8 - 0
src/Masuit.MyBlogs.Core/wwwroot/ng-views/views/partner.html

@@ -89,6 +89,14 @@
             <div ng-show="!isAdd">
                 <input type="hidden" ng-model="partner.Id">
             </div>
+            <div class="form-group">
+                <div class="input-group">
+                    <label for="desc" class="input-group-addon control-label">广告商:</label>
+                    <div class="fg-line">
+                        <input type="text" class="form-control" id="merchant" placeholder="请输入广告商" ng-model="partner.Merchant">
+                    </div>
+                </div>
+            </div>
             <div class="form-group">
                 <div class="input-group">
                     <label for="desc" class="input-group-addon control-label">广告标题:</label>