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<MiningPoolRecordAggregateRoot> _miningPoolRecordRepository;
private readonly ISqlSugarRepository<MarketRecordAggregateRoot> _marketRecordRepository; private readonly ISqlSugarRepository<MarketRecordAggregateRoot> _marketRecordRepository;
public CollectiblesServiceRecordService(ISqlSugarRepository<MiningPoolRecordAggregateRoot> miningPoolRecordRepository) public CollectiblesServiceRecordService(ISqlSugarRepository<MiningPoolRecordAggregateRoot> miningPoolRecordRepository, ISqlSugarRepository<MarketRecordAggregateRoot> marketRecordRepository)
{ {
_miningPoolRecordRepository = miningPoolRecordRepository; _miningPoolRecordRepository = miningPoolRecordRepository;
_marketRecordRepository = marketRecordRepository;
} }
/// <summary> /// <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")] [SugarTable("DC_MiningPoolRecord")]
public class MiningPoolRecordAggregateRoot:FullAuditedAggregateRoot<Guid> public class MiningPoolRecordAggregateRoot:FullAuditedAggregateRoot<Guid>
{ {
public MiningPoolRecordAggregateRoot(Guid userId, Guid collectiblesId)
{
UserId = userId;
CollectiblesId = collectiblesId;
}
public MiningPoolRecordAggregateRoot()
{
}
/// <summary> /// <summary>
/// 用户id /// 用户id
/// </summary> /// </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.DependencyInjection;
using Volo.Abp.EventBus; using Volo.Abp.EventBus;
using Yi.Framework.DigitalCollectibles.Domain.Entities; using Yi.Framework.DigitalCollectibles.Domain.Entities;
using Yi.Framework.DigitalCollectibles.Domain.Entities.Record;
using Yi.Framework.DigitalCollectibles.Domain.Managers; using Yi.Framework.DigitalCollectibles.Domain.Managers;
using Yi.Framework.DigitalCollectibles.Domain.Shared.Etos; using Yi.Framework.DigitalCollectibles.Domain.Shared.Etos;
@@ -16,12 +17,14 @@ public class SuccessMiningEventHandler : ILocalEventHandler<SuccessMiningEto>, I
private MiningPoolManager _miningPoolManager; private MiningPoolManager _miningPoolManager;
private ISqlSugarRepository<CollectiblesAggregateRoot> _repository; private ISqlSugarRepository<CollectiblesAggregateRoot> _repository;
private readonly ISqlSugarRepository<CollectiblesUserStoreAggregateRoot> _userStoreRepository; private readonly ISqlSugarRepository<CollectiblesUserStoreAggregateRoot> _userStoreRepository;
private readonly ISqlSugarRepository<MiningPoolRecordAggregateRoot> _miningPoolRecordRepository;
public SuccessMiningEventHandler(MiningPoolManager miningPoolManager, public SuccessMiningEventHandler(MiningPoolManager miningPoolManager,
ISqlSugarRepository<CollectiblesAggregateRoot> repository, ISqlSugarRepository<CollectiblesUserStoreAggregateRoot> userStoreRepository) ISqlSugarRepository<CollectiblesAggregateRoot> repository, ISqlSugarRepository<CollectiblesUserStoreAggregateRoot> userStoreRepository, ISqlSugarRepository<MiningPoolRecordAggregateRoot> miningPoolRecordRepository)
{ {
_miningPoolManager = miningPoolManager; _miningPoolManager = miningPoolManager;
_repository = repository; _repository = repository;
_userStoreRepository = userStoreRepository; _userStoreRepository = userStoreRepository;
_miningPoolRecordRepository = miningPoolRecordRepository;
} }
public async Task HandleEventAsync(SuccessMiningEto eventData) public async Task HandleEventAsync(SuccessMiningEto eventData)
@@ -41,5 +44,8 @@ public class SuccessMiningEventHandler : ILocalEventHandler<SuccessMiningEto>, I
CollectiblesId = eventData.CollectiblesId, CollectiblesId = eventData.CollectiblesId,
IsRead = false 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 Volo.Abp.Settings;
using Yi.Framework.Bbs.Domain.Shared.Etos; using Yi.Framework.Bbs.Domain.Shared.Etos;
using Yi.Framework.DigitalCollectibles.Domain.Entities; using Yi.Framework.DigitalCollectibles.Domain.Entities;
using Yi.Framework.DigitalCollectibles.Domain.Shared.Etos;
using Yi.Framework.SqlSugarCore.Abstractions; using Yi.Framework.SqlSugarCore.Abstractions;
namespace Yi.Framework.DigitalCollectibles.Domain.Managers; namespace Yi.Framework.DigitalCollectibles.Domain.Managers;
@@ -96,10 +97,12 @@ public class MarketManager : DomainService
//2-出售者新增钱,购买者扣钱 //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")); 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-出售者删除对应库存,购买者新增对应库存(只需更改用户者即可) //3-出售者删除对应库存,购买者新增对应库存(只需更改用户者即可)
var collectiblesList = await _collectiblesUserStoreRepository._DbQueryable.Where(x => x.IsAtMarketing == true) var collectiblesList = await _collectiblesUserStoreRepository._DbQueryable.Where(x => x.IsAtMarketing == true)
@@ -111,11 +114,22 @@ public class MarketManager : DomainService
throw new UserFriendlyException($"交易失败,当前出售者库存不足"); throw new UserFriendlyException($"交易失败,当前出售者库存不足");
} }
var updateStore = collectiblesList.Take(number); var updateStore = collectiblesList.Take(number).ToList();
foreach (var userStore in updateStore) foreach (var userStore in updateStore)
{ {
userStore.PurchaseMarket(userId); 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);
} }
} }