Quellcode durchsuchen

Merge branch 'feature/snapshot' of http://110.188.24.182:10023/Fengwo/hotline into feature/snapshot

xf vor 4 Monaten
Ursprung
Commit
93f004b3aa

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

@@ -43,6 +43,23 @@ 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/remark")]
+    //public async Task
+
+    /// <summary>
+    /// 红包审核通过或拒绝
+    /// </summary>
+    /// <param name="dto"></param>
+    /// <returns></returns>
+    [HttpPut("audit")]
+    public async Task UpdateRedPackAuditAsync([FromBody] UpdateRedPackAuditInDto dto)
+        => await _redPackApplication.AuditRedPackAuditAsync(dto);
+
     /// <summary>
     /// 获取审核短信模板
     /// </summary>

+ 51 - 0
src/Hotline.Application.Tests/Application/RedPackApplicationTest.cs

@@ -0,0 +1,51 @@
+using Hotline.Api.Controllers;
+using Hotline.Application.Snapshot;
+using Hotline.Identity.Accounts;
+using Hotline.Identity.Roles;
+using Hotline.Share.Dtos.Snapshot;
+using Hotline.Share.Enums.Snapshot;
+using Hotline.Snapshot.Interfaces;
+using Hotline.Users;
+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;
+public class RedPackApplicationTest : TestBase
+{
+    private readonly IRedPackApplication _redPackApplication;
+    private readonly IRedPackRecordRepository _redPackRecordRepository;
+
+    public RedPackApplicationTest(IAccountRepository accountRepository, IRepository<Role> roleRepository, UserController userController, IServiceScopeFactory scopeFactory, IRepository<User> userRepository, IHttpContextAccessor httpContextAccessor, IThirdIdentiyService thirdIdentiyService, IThirdAccountRepository thirdAccountRepository, IRedPackApplication redPackApplication, IRedPackRecordRepository redPackRecordRepository) : base(accountRepository, roleRepository, userController, scopeFactory, userRepository, httpContextAccessor, thirdIdentiyService, thirdAccountRepository)
+    {
+        _redPackApplication = redPackApplication;
+        _redPackRecordRepository = redPackRecordRepository;
+    }
+
+    [Fact]
+    public async Task AuditRedPackAudit_Test()
+    {
+        var items = await _redPackApplication.GetRedPackAuditItemsAsync(new SnapshotOrderAuditItemsInDto(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,null)).ToListAsync();
+        var audit = items.First();
+        var smsTemplate = await _redPackApplication.GetRedPackAuditSMSTemplateAsync(new GetRedPackAuditSMSTemplateInDto(audit.OrderId, ERedPackAuditStatus.Agree));
+        var inDto = new UpdateRedPackAuditInDto
+        {
+            Status = ERedPackAuditStatus.Agree,
+            Opinion = "单元测试" + DateTime.Now.ToShortDateString(),
+            SMSTemplateId = smsTemplate.First().Id,
+            IsSendSms = true,
+            RedPackAuditId = audit.Id,
+        };
+        await _redPackApplication.AuditRedPackAuditAsync(inDto);
+        var record = await _redPackRecordRepository.Queryable()
+            .Where(m => m.OrderId == audit.OrderId)
+            .FirstAsync();
+        record.ShouldNotBeNull();
+    }
+}

+ 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>

+ 39 - 2
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>
@@ -57,7 +93,8 @@ public class RedPackApplication : IRedPackApplication, IScopeDependency
         if (count != 0)
             outDto.RedPackTxt += $"今天审批【{count}】个";
 
-        outDto.AuditComBox = EnumExts.GetDescriptions<ERedPackAuditStatus>();
+        outDto.AuditComBox = EnumExts.GetDescriptions<ERedPackAuditStatus>()
+            .Where(m => m.Key.ToString() != "0").ToList();
         return outDto;
     }
 

+ 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)
+    {
+    }
+}
+

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

@@ -457,6 +457,17 @@ public class GetRedPackAuditSMSTemplateOutDto
 
 public class GetRedPackAuditSMSTemplateInDto
 {
+    public GetRedPackAuditSMSTemplateInDto()
+    {
+        
+    }
+
+    public GetRedPackAuditSMSTemplateInDto(string id, ERedPackAuditStatus status)
+    {
+        OrderId = id;
+        Status = status;
+    }
+
     /// <summary>
     /// OrderId
     /// </summary>
@@ -607,3 +618,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; }
 }

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

@@ -26,16 +26,16 @@ 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
     /// </summary>
     [SugarColumn(ColumnDescription = "用户微信OpenId")]
-    public string WXOpenId { get; set; }
+    public string? WXOpenId { get; set; }
 
     /// <summary>
     /// 红包领取人类型