Sfoglia il codice sorgente

新增行业短信模板

qinchaoyue 4 mesi fa
parent
commit
2daf3c832d

+ 21 - 0
src/Hotline.Api/Controllers/Snapshot/IndustryController.cs

@@ -128,4 +128,25 @@ public class IndustryController : BaseController
         };
     }
     #endregion
+
+    #region 行业短信模板
+    /// <summary>
+    /// 行业短信模板集合
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("sms")]
+    public async Task<PagedDto<SnapshotSMSTemplateItemsOutDto>> GetSmsTemplateItemsAsync([FromQuery]SnapshotSMSTemplateItemsInDto dto)
+        => (await _industryApplication.GetSMSTemplates(dto).ToPagedListAsync(dto, HttpContext.RequestAborted)).ToPaged();
+
+    /// <summary>
+    /// 添加行业短信模板
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpPost("sms")]
+    public async Task AddSmsTemplateAsync([FromBody] AddSnapshotSMSTemplateInDto dto)
+        => await _industryApplication.AddSMSTemplateAsync(dto);
+
+    #endregion
 }

+ 23 - 8
src/Hotline.Application.Tests/Application/IndustryApplicationTest.cs

@@ -1,22 +1,16 @@
-using DocumentFormat.OpenXml.Wordprocessing;
-using Hotline.Api.Controllers;
+using Hotline.Api.Controllers;
+using AutoFixture;
 using Hotline.Application.Snapshot;
 using Hotline.Identity.Accounts;
 using Hotline.Identity.Roles;
 using Hotline.Share.Dtos.Snapshot;
 using Hotline.Share.Tools;
-using Hotline.Snapshot;
 using Hotline.Snapshot.Interfaces;
 using Hotline.Users;
 using Mapster;
 using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.DependencyInjection;
 using Shouldly;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using XF.Domain.Repository;
 
 namespace Hotline.Application.Tests.Application;
@@ -82,4 +76,25 @@ public class IndustryApplicationTest : TestBase
         caseEntityUpdate.DisplayOrder.ShouldBe(updateDto.DisplayOrder);
         caseEntityUpdate.Name.ShouldBe(updateDto.Name);
     }
+
+    /// <summary>
+    /// 新增行业短信模板
+    /// 行业短信模板集合
+    /// </summary>
+    /// <returns></returns>
+    [Fact]
+    public async Task SMSTemplate_Test()
+    {
+        var industryItems = await _industryApplication.GetIndustres(new IndustryListInDto(null, null)).ToListAsync();
+        var industry = industryItems.First();
+        var inDto = _fixture.Create<AddSnapshotSMSTemplateInDto>();
+        inDto.IndustryId = industry.Id;
+        var smsId = await _industryApplication.AddSMSTemplateAsync(inDto);
+        var items = await _industryApplication.GetSMSTemplates(new SnapshotSMSTemplateItemsInDto(null)).ToListAsync();
+        items.Count.ShouldNotBe(0);
+        var sms = items.Where(m => m.Id == smsId).First();
+        sms.Content.ShouldBe(inDto.Content);
+        sms.IndustryName.ShouldNotBeNullOrEmpty();
+        sms.IsEnable.ShouldBe(inDto.IsEnable);
+    }
 }

+ 14 - 0
src/Hotline.Application/Snapshot/IIndustryApplication.cs

@@ -65,4 +65,18 @@ public interface IIndustryApplication
     /// <param name="caseId"></param>
     /// <returns></returns>
     Task<IndustryCase> GetIndustryCaseAsync(string caseId);
+
+    /// <summary>
+    /// 添加行业模板
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    Task<string> AddSMSTemplateAsync(AddSnapshotSMSTemplateInDto dto);
+
+    /// <summary>
+    /// 行业模板集合
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    ISugarQueryable<SnapshotSMSTemplateItemsOutDto> GetSMSTemplates(SnapshotSMSTemplateItemsInDto dto);
 }

+ 32 - 1
src/Hotline.Application/Snapshot/IndustryApplication.cs

@@ -26,13 +26,15 @@ public class IndustryApplication : IIndustryApplication, IScopeDependency
     private readonly IFileRepository _fileRepository;
     private readonly ISystemSettingCacheManager _sysSetting;
     private readonly IIndustryCaseRepository _industryCaseRepository;
+    private readonly ISnapshotSMSTemplateRepository _snapshotSMSTemplateRepository;
 
-    public IndustryApplication(IIndustryRepository industryRepository, IFileRepository fileRepository, ISystemSettingCacheManager sysSetting, IIndustryCaseRepository industryCaseRepository)
+    public IndustryApplication(IIndustryRepository industryRepository, IFileRepository fileRepository, ISystemSettingCacheManager sysSetting, IIndustryCaseRepository industryCaseRepository, ISnapshotSMSTemplateRepository snapshotSMSTemplateRepository)
     {
         _industryRepository = industryRepository;
         _fileRepository = fileRepository;
         _sysSetting = sysSetting;
         _industryCaseRepository = industryCaseRepository;
+        _snapshotSMSTemplateRepository = snapshotSMSTemplateRepository;
     }
     /// <summary>
     /// 新增行业
@@ -154,4 +156,33 @@ public class IndustryApplication : IIndustryApplication, IScopeDependency
         return await _industryCaseRepository.GetAsync(caseId);
     }
     #endregion
+
+    #region 行业短信模板
+
+    /// <summary>
+    /// 行业模板集合
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    public ISugarQueryable<SnapshotSMSTemplateItemsOutDto> GetSMSTemplates(SnapshotSMSTemplateItemsInDto dto)
+    {
+        var query = _snapshotSMSTemplateRepository.Queryable()
+            .LeftJoin<Industry>((s, i) => s.IndustryId == i.Id)
+            .WhereIF(dto.IndustryName.NotNullOrEmpty(), (s, i) => i.Name.Contains(dto.IndustryName))
+            .Select<SnapshotSMSTemplateItemsOutDto>();
+        return query;
+    }
+
+    /// <summary>
+    /// 添加行业模板
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    public async Task<string> AddSMSTemplateAsync(AddSnapshotSMSTemplateInDto dto)
+    {
+        dto.ValidateObject();
+        var entity = dto.Adapt<SnapshotSMSTemplate>();
+        return await _snapshotSMSTemplateRepository.AddAsync(entity);
+    }
+    #endregion
 }

+ 18 - 0
src/Hotline.Repository.SqlSugar/Snapshot/SnapshotSMSTemplateRepository.cs

@@ -0,0 +1,18 @@
+using Hotline.Repository.SqlSugar.DataPermissions;
+using Hotline.Snapshot;
+using Hotline.Snapshot.Interfaces;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Dependency;
+
+namespace Hotline.Repository.SqlSugar.Snapshot;
+public class SnapshotSMSTemplateRepository : BaseRepository<SnapshotSMSTemplate>, ISnapshotSMSTemplateRepository, IScopeDependency
+{
+    public SnapshotSMSTemplateRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder)
+    {
+    }
+}

+ 61 - 0
src/Hotline.Share/Dtos/Snapshot/IndustryDto.cs

@@ -1,5 +1,6 @@
 using Hotline.Share.Dtos.File;
 using Hotline.Share.Dtos.Settings;
+using Hotline.Share.Enums.Snapshot;
 using Hotline.Share.Requests;
 using Hotline.Share.Tools;
 using System;
@@ -8,6 +9,7 @@ using System.ComponentModel.DataAnnotations;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using XF.Utility.EnumExtensions;
 
 namespace Hotline.Share.Dtos.Snapshot;
 internal class IndustryDto
@@ -401,3 +403,62 @@ public class AddIndustryCaseDto
     /// </summary>
     public int DisplayOrder { get; set; }
 }
+
+/// <summary>
+/// 行业短信模板集合入参
+/// </summary>
+/// <param name="IndustryName">行业名称</param>
+public record SnapshotSMSTemplateItemsInDto(string? IndustryName) : PagedRequest;
+
+public class SnapshotSMSTemplateItemsOutDto : AddSnapshotSMSTemplateInDto
+{
+    /// <summary>
+    /// Id
+    /// </summary>
+    public string Id { get; set; }
+
+    /// <summary>
+    /// 审核状态
+    /// </summary>
+    public string StatusTxt => Status.GetDescription();
+
+    /// <summary>
+    /// 行业名称
+    /// </summary>
+    public string IndustryName { get; set; }
+}
+
+public class AddSnapshotSMSTemplateInDto
+{
+    /// <summary>
+    /// 行业Id
+    /// </summary>
+    [Required]
+    public string IndustryId { get; set; }
+
+    /// <summary>
+    /// 模板内容
+    /// </summary>
+    [Required]
+    public string Content { get; set; }
+
+    /// <summary>
+    /// 审核状态
+    /// </summary>
+    public ESnapshotSMSStatus Status { get; set; }
+
+    /// <summary>
+    /// 是否启用
+    /// </summary>
+    public bool IsEnable { get; set; }
+
+    /// <summary>
+    /// 是否公用
+    /// </summary>
+    public bool IsPublic { get; set; }
+
+    /// <summary>
+    /// 排序
+    /// </summary>
+    public int DisplayOrder { get; set; }
+}

+ 23 - 0
src/Hotline.Share/Enums/Snapshot/ESnapshotSMSStatus.cs

@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Hotline.Share.Enums.Snapshot;
+public enum ESnapshotSMSStatus
+{
+    /// <summary>
+    /// 同意
+    /// </summary>
+    [Description("同意")]
+    Agree,
+
+    /// <summary>
+    /// 不同意
+    /// </summary>
+    [Description("不同意")]
+    Refuse,
+
+}

+ 11 - 0
src/Hotline/Snapshot/Interfaces/ISnapshotSMSTemplateRepository.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Repository;
+
+namespace Hotline.Snapshot.Interfaces;
+public interface ISnapshotSMSTemplateRepository : IRepository<SnapshotSMSTemplate>
+{
+}

+ 48 - 0
src/Hotline/Snapshot/SnapshotSMSTemplate.cs

@@ -0,0 +1,48 @@
+using Hotline.Share.Enums.Snapshot;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using XF.Domain.Repository;
+
+namespace Hotline.Snapshot;
+public class SnapshotSMSTemplate : FullStateEntity
+{
+    /// <summary>
+    /// 行业Id
+    /// </summary>
+    [SugarColumn(ColumnDescription = "行业Id")]
+    public string IndustryId { get; set; }
+
+    /// <summary>
+    /// 模板内容
+    /// </summary>
+    [SugarColumn(ColumnDescription = "模板内容")]
+    public string Content { get; set; }
+
+    /// <summary>
+    /// 审核状态
+    /// </summary>
+    [SugarColumn(ColumnDescription = "审核状态")]
+    public ESnapshotSMSStatus Status { get; set; }
+
+    /// <summary>
+    /// 是否启用
+    /// </summary>
+    [SugarColumn(ColumnDescription = "是否启用")]
+    public bool IsEnable { get; set; }
+
+    /// <summary>
+    /// 是否公用
+    /// </summary>
+    [SugarColumn(ColumnDescription = "是否公用")]
+    public bool IsPublic { get; set; }
+
+    /// <summary>
+    /// 排序
+    /// </summary>
+    [SugarColumn(ColumnDescription = "排序")]
+    public int DisplayOrder { get; set; }
+}