Browse Source

Merge branch 'feature/snapshot' into dev

qinchaoyue 4 months ago
parent
commit
b76d5ce8c6

+ 9 - 0
src/Hotline.Api/Controllers/Snapshot/RedPackController.cs

@@ -43,6 +43,15 @@ public class RedPackController : BaseController
     public async Task<SnapshotOrderAuditDetailOutDto> GetRedPackAuditDetailAsync(string id)
         => await _redPackApplication.GetRedPackAuditDetailAsync(id);
 
+    /// <summary>
+    /// 红包审核通过或拒绝
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpPut("audit")]
+    public async Task UpdateRedPackAuditAsync([FromBody] UpdateRedPackAuditInDto dto)
+        => await _redPackApplication.AuditRedPackAuditAsync(dto);
+
     /// <summary>
     /// 获取审核短信模板
     /// </summary>

+ 7 - 0
src/Hotline.Application/Snapshot/IRedPackApplication.cs

@@ -9,6 +9,13 @@ using System.Threading.Tasks;
 namespace Hotline.Application.Snapshot;
 public interface IRedPackApplication
 {
+    /// <summary>
+    /// 审核红包发放
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    Task AuditRedPackAuditAsync(UpdateRedPackAuditInDto dto);
+
     /// <summary>
     /// 获取审核详情
     /// </summary>

+ 37 - 1
src/Hotline.Application/Snapshot/RedPackApplication.cs

@@ -20,14 +20,50 @@ public class RedPackApplication : IRedPackApplication, IScopeDependency
     private readonly ISnapshotSMSTemplateRepository _snapshotSMSTemplateRepository;
     private readonly IIndustryRepository _industryRepository;
     private readonly IRedPackAuditRepository _redPackAuditRepository;
+    private readonly IRedPackRecordRepository _redPackRecordRepository;
 
-    public RedPackApplication(IOrderSnapshotRepository orderSnapshotRepository, ISnapshotSMSTemplateRepository snapshotSMSTemplateRepository, IOrderRepository orderRepository, IIndustryRepository industryRepository, IRedPackAuditRepository redPackAuditRepository)
+    public RedPackApplication(IOrderSnapshotRepository orderSnapshotRepository, ISnapshotSMSTemplateRepository snapshotSMSTemplateRepository, IOrderRepository orderRepository, IIndustryRepository industryRepository, IRedPackAuditRepository redPackAuditRepository, IRedPackRecordRepository redPackRecordRepository)
     {
         _orderSnapshotRepository = orderSnapshotRepository;
         _snapshotSMSTemplateRepository = snapshotSMSTemplateRepository;
         _orderRepository = orderRepository;
         _industryRepository = industryRepository;
         _redPackAuditRepository = redPackAuditRepository;
+        _redPackRecordRepository = redPackRecordRepository;
+    }
+
+    /// <summary>
+    /// 审核红包发放
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    /// <exception cref="NotImplementedException"></exception>
+    public async Task AuditRedPackAuditAsync(UpdateRedPackAuditInDto dto)
+    {
+        var redPackAudit = await _redPackAuditRepository.GetAsync(dto.RedPackAuditId) ?? throw UserFriendlyException.SameMessage("审核记录不存在");
+        if (redPackAudit.Status != ERedPackAuditStatus.Pending) throw UserFriendlyException.SameMessage("已审核, 不可重复审核");
+        redPackAudit.SMSTemplateId = dto.SMSTemplateId;
+        redPackAudit.Status = dto.Status;
+        redPackAudit.Remark = dto.Opinion;
+        redPackAudit.IsSendSMS = dto.IsSendSms;
+        var order = await _orderRepository.Queryable()
+            .Where(m => m.Id == redPackAudit.OrderId)
+            .Select(m => new { m.Id, m.FromName })
+            .FirstAsync();
+        if (dto.Status == ERedPackAuditStatus.Agree)
+        {
+            var entity = new RedPackRecord
+            {
+                OrderId = redPackAudit.OrderId,
+                PeopleType = EReadPackUserType.Citizen,
+                Name = order.FromName,
+                PickupStatus = ERedPackPickupStatus.Unreceived,
+                DistributionState = EReadPackSendStatus.Unsend,
+            };
+            if (redPackAudit.ApprovedAmount.HasValue)
+                entity.Amount = redPackAudit.ApprovedAmount.Value;
+            await _redPackRecordRepository.AddAsync(entity);
+        }
     }
 
     /// <summary>

+ 19 - 0
src/Hotline.Repository.SqlSugar/Snapshot/RedPackRecordRepository.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 RedPackRecordRepository : BaseRepository<RedPackRecord>, IRedPackRecordRepository, IScopeDependency
+{
+    public RedPackRecordRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder)
+    {
+    }
+}
+

+ 29 - 0
src/Hotline.Share/Dtos/Snapshot/OrderDto.cs

@@ -607,3 +607,32 @@ public class SnapshotOrderAuditOrderDetailOutDto
     /// </summary>
     public string LicenceNo { get; set; }
 }
+
+public class UpdateRedPackAuditInDto
+{
+    /// <summary>
+    /// 审核Id
+    /// </summary>
+    public string RedPackAuditId { get; set; }
+
+    /// <summary>
+    /// 审核状态
+    /// </summary>
+    public ERedPackAuditStatus Status { get; set; }
+
+    /// <summary>
+    /// 审核意见
+    /// </summary>
+    public string Opinion { get; set; }
+
+    /// <summary>
+    /// 短信模板Id
+    /// </summary>
+    [Required]
+    public string SMSTemplateId { get; set; }
+
+    /// <summary>
+    /// 是否发送短信
+    /// </summary>
+    public bool IsSendSms { get; set; }
+}

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

+ 11 - 0
src/Hotline/Snapshot/RedPackAudit.cs

@@ -111,4 +111,15 @@ public class RedPackAudit : CreationSoftDeleteEntity
     [SugarColumn(ColumnDescription = "是否已发放")]
     public bool? IsIssued { get; set; }
 
+    /// <summary>
+    /// 短信Id
+    /// </summary>
+    [SugarColumn(ColumnDescription = "短信Id")]
+    public string? SMSTemplateId { get; set; }
+
+    /// <summary>
+    /// 是否发送短信
+    /// </summary>
+    [SugarColumn(ColumnDescription = "是否发送短信")]
+    public bool? IsSendSMS { get; set; }
 }

+ 3 - 3
src/Hotline/Snapshot/RedPackRecord.cs

@@ -26,10 +26,10 @@ public class RedPackRecord : CreationSoftDeleteEntity
     public string? WxOrderNo { get; set; }
 
     /// <summary>
-    /// 红包金额
+    /// 红包金额(单位:元)
     /// </summary>
-    [SugarColumn(ColumnDescription = "红包金额")]
-    public int Amount {get;set;}
+    [SugarColumn(ColumnDescription = "红包金额(单位:元)")]
+    public double Amount {get;set;}
 
     /// <summary>
     /// 用户微信OpenId