Эх сурвалжийг харах

增加行业线索集合接口, 添加接口

qinchaoyue 4 сар өмнө
parent
commit
11c5b25a24

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

@@ -5,6 +5,7 @@ using Hotline.Repository.SqlSugar.Extensions;
 using Hotline.Share.Dtos;
 using Hotline.Share.Dtos.Snapshot;
 using Hotline.Share.Tools;
+using Hotline.Snapshot;
 using Hotline.Snapshot.Interfaces;
 using Microsoft.AspNetCore.Mvc;
 
@@ -73,4 +74,24 @@ public class IndustryController : BaseController
     [HttpPut]
     public async Task UpdateIndustry([FromBody] UpdateIndustryInDto dto)
         => await _industryApplication.UpdateIndustryAsync(dto, HttpContext.RequestAborted);
+
+    #region 行业线索
+    /// <summary>
+    /// 行业线索集合
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpGet("case")]
+    public async Task<PagedDto<IndustryCaseItemOutDto>> GetIndustryCaseItemAsync([FromQuery] IndustryCaseItemInDto dto)
+        => (await _industryApplication.GetIndustryCaseItems(dto).ToPagedListAsync(dto, HttpContext.RequestAborted)).ToPaged();
+
+    /// <summary>
+    /// 添加行业线索
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpPost("case")]
+    public async Task AddIndustryCaseAsync([FromBody] AddIndustryCaseDto dto)
+        => await _industryApplication.AddIndustryCaseAsync(dto);
+    #endregion
 }

+ 18 - 0
src/Hotline.Application.Tests/Application/IndustryApplicationTest.cs

@@ -54,4 +54,22 @@ public class IndustryApplicationTest : TestBase
         });
         await _industryApplication.UpdateIndustryAsync(item.Adapt<UpdateIndustryInDto>(), CancellationToken.None);
     }
+
+    [Fact]
+    public async Task AddIndustry_Test()
+    {
+        var industry = await _industryApplication.GetIndustres(new IndustryListInDto(null, null)).ToListAsync();
+        var industryCase = new AddIndustryCaseDto
+        {
+            IndustryId = industry.First().Id,
+            Name = "单元测试" + DateTime.Now.ToString("ss"),
+            CitizenReadPackAmount = 10,
+            GuiderReadPackAmount = 10,
+            IsEnable = true,
+            DisplayOrder = 1
+        };
+        var caseId = await _industryApplication.AddIndustryCaseAsync(industryCase);
+        var items = await _industryApplication.GetIndustryCaseItems(new IndustryCaseItemInDto(null, null)).ToListAsync();
+        items.Count.ShouldNotBe(0);
+    }
 }

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

@@ -1,4 +1,5 @@
 using Hotline.Share.Dtos.Snapshot;
+using Hotline.Snapshot;
 using SqlSugar;
 using System;
 using System.Collections.Generic;
@@ -36,4 +37,18 @@ public interface IIndustryApplication
     /// <param name="requestAborted"></param>
     /// <returns></returns>
     Task UpdateIndustryAsync(UpdateIndustryInDto dto, CancellationToken requestAborted);
+
+    /// <summary>
+    /// 行业线索集合
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    ISugarQueryable<IndustryCaseItemOutDto> GetIndustryCaseItems(IndustryCaseItemInDto dto);
+
+    /// <summary>
+    /// 添加行业线索
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    Task<string> AddIndustryCaseAsync(AddIndustryCaseDto dto);
 }

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

@@ -25,14 +25,15 @@ public class IndustryApplication : IIndustryApplication, IScopeDependency
     private readonly IIndustryRepository _industryRepository;
     private readonly IFileRepository _fileRepository;
     private readonly ISystemSettingCacheManager _sysSetting;
+    private readonly IIndustryCaseRepository _industryCaseRepository;
 
-    public IndustryApplication(IIndustryRepository industryRepository, IFileRepository fileRepository, ISystemSettingCacheManager sysSetting)
+    public IndustryApplication(IIndustryRepository industryRepository, IFileRepository fileRepository, ISystemSettingCacheManager sysSetting, IIndustryCaseRepository industryCaseRepository)
     {
         _industryRepository = industryRepository;
         _fileRepository = fileRepository;
         _sysSetting = sysSetting;
+        _industryCaseRepository = industryCaseRepository;
     }
-
     /// <summary>
     /// 新增行业
     /// </summary>
@@ -103,4 +104,33 @@ public class IndustryApplication : IIndustryApplication, IScopeDependency
         dto.Adapt(entity);
         await _industryRepository.UpdateAsync(entity, requestAborted);
     }
+
+    #region 行业线索
+    public ISugarQueryable<IndustryCaseItemOutDto> GetIndustryCaseItems(IndustryCaseItemInDto dto)
+    { 
+        var query = _industryCaseRepository.Queryable()
+            .LeftJoin<Industry>((c, i) => c.IndustryId == i.Id)
+            .WhereIF(dto.IndustryName.NotNullOrEmpty(), (c, i) => i.Name.Contains(dto.IndustryName))
+            .WhereIF(dto.CaseName.NotNullOrEmpty(), (c, i) => c.Name.Contains(dto.CaseName))
+            .Select<IndustryCaseItemOutDto>((c, i) => 
+            new IndustryCaseItemOutDto {
+            IndustryId = i.Id, 
+            IndustryName = i.Name});
+        return query;
+    }
+
+    /// <summary>
+    /// 添加行业线索
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    public async Task<string> AddIndustryCaseAsync(AddIndustryCaseDto dto)
+    {
+        dto.ValidateObject();
+        var entity = dto.Adapt<IndustryCase>();
+        entity.CitizenReadPackAmount = entity.CitizenReadPackAmount * 100;
+        entity.GuiderReadPackAmount = entity.GuiderReadPackAmount * 100;
+        return await _industryCaseRepository.AddAsync(entity);
+    }
+    #endregion
 }

+ 19 - 0
src/Hotline.Repository.SqlSugar/Snapshot/IndustryCaseRepository.cs

@@ -0,0 +1,19 @@
+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 IndustryCaseRepository : BaseRepository<IndustryCase>, IIndustryCaseRepository, IScopeDependency
+{
+    public IndustryCaseRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder)
+    {
+    }
+}
+

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

@@ -1,6 +1,7 @@
 using Hotline.Share.Dtos.File;
 using Hotline.Share.Dtos.Settings;
 using Hotline.Share.Requests;
+using Hotline.Share.Tools;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
@@ -134,6 +135,13 @@ public class IndustryOutDto
 /// <param name="departmentName">审批部门</param>
 public record IndustryListInDto(string? Name, string? ApproveOrgName) : PagedRequest;
 
+/// <summary>
+/// 行业线索集合入参
+/// </summary>
+/// <param name="CaseName">线索名称</param>
+/// <param name="IndustryName">行业名称</param>
+public record IndustryCaseItemInDto(string? CaseName, string? IndustryName) : PagedRequest;
+
 
 public class IndustryBaseOutDto
 {
@@ -326,3 +334,71 @@ public class AddIndustryDto
     /// </summary>
     public IList<IndustryFileDto> Files { get; set; }
 }
+
+public class IndustryCaseItemOutDto : AddIndustryCaseDto
+{
+    /// <summary>
+    /// Id
+    /// </summary>
+    public string Id { get; set; }
+
+    /// <summary>
+    /// 行业名称
+    /// </summary>
+    public string IndustryName { get; set; }
+
+    /// <summary>
+    /// 市民发放红包金额(单位:元)
+    /// </summary>
+    public string CitizenReadPackAmountTxt => CitizenReadPackAmount.ToYuanFinance();
+
+    /// <summary>
+    /// 网络员发放红包金额(单位:元)
+    /// </summary>
+    public string GuiderReadPackAmountTxt => GuiderReadPackAmount.ToYuanFinance();
+
+    /// <summary>
+    /// 市民发放红包金额(单位:分)
+    /// </summary>
+    new public int CitizenReadPackAmount { get; set; }
+
+    /// <summary>
+    /// 网络员发放红包金额(单位:分)
+    /// </summary>
+    new public int GuiderReadPackAmount { get; set; }
+
+}
+public class AddIndustryCaseDto
+{
+    /// <summary>
+    /// 行业Id
+    /// </summary>
+    [Required]
+    public string IndustryId { get; set; }
+
+    /// <summary>
+    /// 线索名称
+    /// </summary>
+    [Required]
+    public string Name { get; set; }
+
+    /// <summary>
+    /// 市民发放红包金额(单位:元)
+    /// </summary>
+    public int CitizenReadPackAmount { get; set; }
+
+    /// <summary>
+    /// 网络员发放红包金额(单位:元)
+    /// </summary>
+    public int GuiderReadPackAmount { get; set; }
+
+    /// <summary>
+    /// 是否启用
+    /// </summary>
+    public bool IsEnable { get; set; }
+
+    /// <summary>
+    /// 排序
+    /// </summary>
+    public int DisplayOrder { get; set; }
+}

+ 6 - 0
src/Hotline/Snapshot/IndustryCase.cs

@@ -15,6 +15,12 @@ namespace Hotline.Snapshot;
 [Description("行业线索")]
 public class IndustryCase : CreationSoftDeleteEntity
 {
+    /// <summary>
+    /// 行业Id
+    /// </summary>
+    [SugarColumn(ColumnDescription = "行业Id")]
+    public string IndustryId { get; set; }
+
     /// <summary>
     /// 线索名称
     /// </summary>

+ 11 - 0
src/Hotline/Snapshot/Interfaces/IIndustryCaseRepository.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 IIndustryCaseRepository : IRepository<IndustryCase>
+{
+}