From b2efd065beebf016c912043ebf8567c7c250bd66 Mon Sep 17 00:00:00 2001 From: chenchun Date: Wed, 30 Oct 2024 12:02:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CollectiblesServiceRecordService.cs | 3 +- .../Etos/SuccessMarketEto.cs | 37 +++++++++++++++++++ .../Record/MiningPoolRecordAggregateRoot.cs | 11 ++++++ .../SuccessMarketEventHandler.cs | 23 ++++++++++++ .../SuccessMiningEventHandler.cs | 8 +++- .../Managers/MarketManager.cs | 22 +++++++++-- 6 files changed, 98 insertions(+), 6 deletions(-) create mode 100644 Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/Etos/SuccessMarketEto.cs create mode 100644 Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/EventHandlers/SuccessMarketEventHandler.cs diff --git a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Application/Services/Record/CollectiblesServiceRecordService.cs b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Application/Services/Record/CollectiblesServiceRecordService.cs index e015b2b7..276834c5 100644 --- a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Application/Services/Record/CollectiblesServiceRecordService.cs +++ b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Application/Services/Record/CollectiblesServiceRecordService.cs @@ -16,9 +16,10 @@ public class CollectiblesServiceRecordService : ApplicationService { private readonly ISqlSugarRepository _miningPoolRecordRepository; private readonly ISqlSugarRepository _marketRecordRepository; - public CollectiblesServiceRecordService(ISqlSugarRepository miningPoolRecordRepository) + public CollectiblesServiceRecordService(ISqlSugarRepository miningPoolRecordRepository, ISqlSugarRepository marketRecordRepository) { _miningPoolRecordRepository = miningPoolRecordRepository; + _marketRecordRepository = marketRecordRepository; } /// diff --git a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/Etos/SuccessMarketEto.cs b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/Etos/SuccessMarketEto.cs new file mode 100644 index 00000000..7154da45 --- /dev/null +++ b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain.Shared/Etos/SuccessMarketEto.cs @@ -0,0 +1,37 @@ +namespace Yi.Framework.DigitalCollectibles.Domain.Shared.Etos; + +/// +/// 成功交易eto +/// +public class SuccessMarketEto +{ + /// + /// 出售者用户id + /// + public Guid SellUserId { get; set; } + + /// + /// 购买者用户id + /// + public Guid BuyId { get; set; } + + /// + /// 藏品id + /// + public Guid CollectiblesId { get; set; } + + /// + /// 出售数量 + /// + public int SellNumber{ get; set; } + + /// + /// 出售单价 + /// + public decimal UnitPrice{ get; set; } + + /// + /// 实际到手价格(扣除税收) + /// + public decimal RealTotalPrice{ get; set; } +} \ No newline at end of file diff --git a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/Entities/Record/MiningPoolRecordAggregateRoot.cs b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/Entities/Record/MiningPoolRecordAggregateRoot.cs index 8eea0874..82490f9c 100644 --- a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/Entities/Record/MiningPoolRecordAggregateRoot.cs +++ b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/Entities/Record/MiningPoolRecordAggregateRoot.cs @@ -9,6 +9,17 @@ namespace Yi.Framework.DigitalCollectibles.Domain.Entities.Record; [SugarTable("DC_MiningPoolRecord")] public class MiningPoolRecordAggregateRoot:FullAuditedAggregateRoot { + public MiningPoolRecordAggregateRoot(Guid userId, Guid collectiblesId) + { + UserId = userId; + CollectiblesId = collectiblesId; + } + + public MiningPoolRecordAggregateRoot() + { + } + + /// /// 用户id /// diff --git a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/EventHandlers/SuccessMarketEventHandler.cs b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/EventHandlers/SuccessMarketEventHandler.cs new file mode 100644 index 00000000..9682f109 --- /dev/null +++ b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/EventHandlers/SuccessMarketEventHandler.cs @@ -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, ITransientDependency +{ + private readonly ISqlSugarRepository _marketRecordRepository; + + public SuccessMarketEventHandler(ISqlSugarRepository marketRecordRepository) + { + _marketRecordRepository = marketRecordRepository; + } + + public async Task HandleEventAsync(SuccessMarketEto eventData) + { + await _marketRecordRepository.InsertAsync(eventData.Adapt()); + } +} \ No newline at end of file diff --git a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/EventHandlers/SuccessMiningEventHandler.cs b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/EventHandlers/SuccessMiningEventHandler.cs index 94ae9956..c172bf43 100644 --- a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/EventHandlers/SuccessMiningEventHandler.cs +++ b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/EventHandlers/SuccessMiningEventHandler.cs @@ -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, I private MiningPoolManager _miningPoolManager; private ISqlSugarRepository _repository; private readonly ISqlSugarRepository _userStoreRepository; + private readonly ISqlSugarRepository _miningPoolRecordRepository; public SuccessMiningEventHandler(MiningPoolManager miningPoolManager, - ISqlSugarRepository repository, ISqlSugarRepository userStoreRepository) + ISqlSugarRepository repository, ISqlSugarRepository userStoreRepository, ISqlSugarRepository miningPoolRecordRepository) { _miningPoolManager = miningPoolManager; _repository = repository; _userStoreRepository = userStoreRepository; + _miningPoolRecordRepository = miningPoolRecordRepository; } public async Task HandleEventAsync(SuccessMiningEto eventData) @@ -41,5 +44,8 @@ public class SuccessMiningEventHandler : ILocalEventHandler, I CollectiblesId = eventData.CollectiblesId, IsRead = false }); + + //新增一条挖矿记录 + await _miningPoolRecordRepository.InsertAsync(new MiningPoolRecordAggregateRoot(eventData.UserId,eventData.CollectiblesId)); } } \ No newline at end of file diff --git a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/Managers/MarketManager.cs b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/Managers/MarketManager.cs index bb11c253..ca64478c 100644 --- a/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/Managers/MarketManager.cs +++ b/Yi.Abp.Net8/module/digital-collectibles/Yi.Framework.DigitalCollectibles.Domain/Managers/MarketManager.cs @@ -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); } } \ No newline at end of file