feat: 新增记录

This commit is contained in:
chenchun
2024-10-30 12:02:34 +08:00
parent 050af30acb
commit b2efd065be
6 changed files with 98 additions and 6 deletions

View File

@@ -16,9 +16,10 @@ public class CollectiblesServiceRecordService : ApplicationService
{
private readonly ISqlSugarRepository<MiningPoolRecordAggregateRoot> _miningPoolRecordRepository;
private readonly ISqlSugarRepository<MarketRecordAggregateRoot> _marketRecordRepository;
public CollectiblesServiceRecordService(ISqlSugarRepository<MiningPoolRecordAggregateRoot> miningPoolRecordRepository)
public CollectiblesServiceRecordService(ISqlSugarRepository<MiningPoolRecordAggregateRoot> miningPoolRecordRepository, ISqlSugarRepository<MarketRecordAggregateRoot> marketRecordRepository)
{
_miningPoolRecordRepository = miningPoolRecordRepository;
_marketRecordRepository = marketRecordRepository;
}
/// <summary>

View File

@@ -0,0 +1,37 @@
namespace Yi.Framework.DigitalCollectibles.Domain.Shared.Etos;
/// <summary>
/// 成功交易eto
/// </summary>
public class SuccessMarketEto
{
/// <summary>
/// 出售者用户id
/// </summary>
public Guid SellUserId { get; set; }
/// <summary>
/// 购买者用户id
/// </summary>
public Guid BuyId { get; set; }
/// <summary>
/// 藏品id
/// </summary>
public Guid CollectiblesId { get; set; }
/// <summary>
/// 出售数量
/// </summary>
public int SellNumber{ get; set; }
/// <summary>
/// 出售单价
/// </summary>
public decimal UnitPrice{ get; set; }
/// <summary>
/// 实际到手价格(扣除税收)
/// </summary>
public decimal RealTotalPrice{ get; set; }
}

View File

@@ -9,6 +9,17 @@ namespace Yi.Framework.DigitalCollectibles.Domain.Entities.Record;
[SugarTable("DC_MiningPoolRecord")]
public class MiningPoolRecordAggregateRoot:FullAuditedAggregateRoot<Guid>
{
public MiningPoolRecordAggregateRoot(Guid userId, Guid collectiblesId)
{
UserId = userId;
CollectiblesId = collectiblesId;
}
public MiningPoolRecordAggregateRoot()
{
}
/// <summary>
/// 用户id
/// </summary>

View File

@@ -0,0 +1,23 @@
using Mapster;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus;
using Yi.Framework.DigitalCollectibles.Domain.Entities.Record;
using Yi.Framework.DigitalCollectibles.Domain.Shared.Etos;
using Yi.Framework.SqlSugarCore.Abstractions;
namespace Yi.Framework.DigitalCollectibles.Domain.EventHandlers;
public class SuccessMarketEventHandler : ILocalEventHandler<SuccessMarketEto>, ITransientDependency
{
private readonly ISqlSugarRepository<MarketRecordAggregateRoot> _marketRecordRepository;
public SuccessMarketEventHandler(ISqlSugarRepository<MarketRecordAggregateRoot> marketRecordRepository)
{
_marketRecordRepository = marketRecordRepository;
}
public async Task HandleEventAsync(SuccessMarketEto eventData)
{
await _marketRecordRepository.InsertAsync(eventData.Adapt<MarketRecordAggregateRoot>());
}
}

View File

@@ -1,6 +1,7 @@
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus;
using Yi.Framework.DigitalCollectibles.Domain.Entities;
using Yi.Framework.DigitalCollectibles.Domain.Entities.Record;
using Yi.Framework.DigitalCollectibles.Domain.Managers;
using Yi.Framework.DigitalCollectibles.Domain.Shared.Etos;
@@ -16,12 +17,14 @@ public class SuccessMiningEventHandler : ILocalEventHandler<SuccessMiningEto>, I
private MiningPoolManager _miningPoolManager;
private ISqlSugarRepository<CollectiblesAggregateRoot> _repository;
private readonly ISqlSugarRepository<CollectiblesUserStoreAggregateRoot> _userStoreRepository;
private readonly ISqlSugarRepository<MiningPoolRecordAggregateRoot> _miningPoolRecordRepository;
public SuccessMiningEventHandler(MiningPoolManager miningPoolManager,
ISqlSugarRepository<CollectiblesAggregateRoot> repository, ISqlSugarRepository<CollectiblesUserStoreAggregateRoot> userStoreRepository)
ISqlSugarRepository<CollectiblesAggregateRoot> repository, ISqlSugarRepository<CollectiblesUserStoreAggregateRoot> userStoreRepository, ISqlSugarRepository<MiningPoolRecordAggregateRoot> miningPoolRecordRepository)
{
_miningPoolManager = miningPoolManager;
_repository = repository;
_userStoreRepository = userStoreRepository;
_miningPoolRecordRepository = miningPoolRecordRepository;
}
public async Task HandleEventAsync(SuccessMiningEto eventData)
@@ -41,5 +44,8 @@ public class SuccessMiningEventHandler : ILocalEventHandler<SuccessMiningEto>, I
CollectiblesId = eventData.CollectiblesId,
IsRead = false
});
//新增一条挖矿记录
await _miningPoolRecordRepository.InsertAsync(new MiningPoolRecordAggregateRoot(eventData.UserId,eventData.CollectiblesId));
}
}

View File

@@ -3,6 +3,7 @@ using Volo.Abp.EventBus.Local;
using Volo.Abp.Settings;
using Yi.Framework.Bbs.Domain.Shared.Etos;
using Yi.Framework.DigitalCollectibles.Domain.Entities;
using Yi.Framework.DigitalCollectibles.Domain.Shared.Etos;
using Yi.Framework.SqlSugarCore.Abstractions;
namespace Yi.Framework.DigitalCollectibles.Domain.Managers;
@@ -96,10 +97,12 @@ public class MarketManager : DomainService
//2-出售者新增钱,购买者扣钱
//发布一个其他领域的事件-购买者扣钱
await _localEventBus.PublishAsync(new MoneyChangeEventArgs() { UserId = userId, Number = -number },false);
await _localEventBus.PublishAsync(new MoneyChangeEventArgs() { UserId = userId, Number = -(number*marketGoods.UnitPrice) },false);
//发布一个其他领域的事件-出售者加钱,同时扣税
var marketTaxRate = decimal.Parse(await _settingProvider.GetOrNullAsync("MarketTaxRate"));
await _localEventBus.PublishAsync(new MoneyChangeEventArgs() { UserId = userId, Number = number*(1-marketTaxRate) },false);
//价格*扣减税
var realTotalPrice = (number*marketGoods.UnitPrice) * (1 - marketTaxRate);
await _localEventBus.PublishAsync(new MoneyChangeEventArgs() { UserId = userId, Number = realTotalPrice },false);
//3-出售者删除对应库存,购买者新增对应库存(只需更改用户者即可)
var collectiblesList = await _collectiblesUserStoreRepository._DbQueryable.Where(x => x.IsAtMarketing == true)
@@ -111,11 +114,22 @@ public class MarketManager : DomainService
throw new UserFriendlyException($"交易失败,当前出售者库存不足");
}
var updateStore = collectiblesList.Take(number);
var updateStore = collectiblesList.Take(number).ToList();
foreach (var userStore in updateStore)
{
userStore.PurchaseMarket(userId);
}
await _collectiblesUserStoreRepository.UpdateRangeAsync(updateStore.ToList());
await _collectiblesUserStoreRepository.UpdateRangeAsync(updateStore);
//发布一个成功交易事件
await _localEventBus.PublishAsync(new SuccessMarketEto
{
SellUserId = marketGoods.SellUserId,
BuyId = userId,
CollectiblesId = marketGoods.CollectiblesId,
SellNumber = marketGoods.SellNumber,
UnitPrice = marketGoods.UnitPrice,
RealTotalPrice =realTotalPrice
},false);
}
}