diff --git a/dating-agency-mall-entity/pom.xml b/dating-agency-mall-entity/pom.xml index 3bc4cec..0014c77 100644 --- a/dating-agency-mall-entity/pom.xml +++ b/dating-agency-mall-entity/pom.xml @@ -27,5 +27,9 @@ dating-agency-mall-constant 0.0.1-SNAPSHOT + + cn.hutool + hutool-all + \ No newline at end of file diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/valueobj/MarriageBountyOrderRewardReceiveRecord.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/valueobj/MarriageBountyOrderRewardReceiveRecord.java index db35643..b996eac 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/valueobj/MarriageBountyOrderRewardReceiveRecord.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/valueobj/MarriageBountyOrderRewardReceiveRecord.java @@ -26,6 +26,9 @@ public class MarriageBountyOrderRewardReceiveRecord extends ValueObject { public static WalletAccountRecord build(TradeTypeEnum tradeType, BigDecimal tradeAmount, Boolean isIncome, - String content, String remark) { WalletAccountRecord record = new WalletAccountRecord(); record.setTradeType(tradeType); record.setTradeAmount(tradeAmount); record.setIsIncome(isIncome); - record.setContent(content); record.setRemark(remark); return record; } + + public void handleContent(List elements) { + if (TradeTypeEnum.GUEST_CERTIFICATION_FEE.equals(tradeType)) { + content = StrUtil.format("悬赏成功,认证嘉宾{}", elements.toArray()); + } else if (TradeTypeEnum.PUBLISH_MARRIAGE_BOUNTY_FEE.equals(tradeType)) { + content = StrUtil.format("悬赏成功,嘉宾{}发布悬赏", elements.toArray()); + } else if (TradeTypeEnum.MATCH_MARRIAGE_BOUNTY_FEE.equals(tradeType)) { + content = StrUtil.format("悬赏成功,匹配嘉宾{}", elements.toArray()); + } else if (TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE.equals(tradeType)) { + content = StrUtil.format("推荐红娘{}入驻平台", elements.toArray()); + } else if (TradeTypeEnum.MARRIAGE_BOUNTY_MEETING_FEE.equals(tradeType)) { + content = StrUtil.format("推荐嘉宾{}见面", elements.toArray()); + } + } } diff --git a/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/marriagebounty/event/MarriageBountyOrderConfirmedMatchEvent.java b/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/marriagebounty/event/MarriageBountyOrderConfirmedMatchEvent.java new file mode 100644 index 0000000..5d3d5b3 --- /dev/null +++ b/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/marriagebounty/event/MarriageBountyOrderConfirmedMatchEvent.java @@ -0,0 +1,40 @@ +package com.qniao.dam.domian.aggregate.marriagebounty.event; + + +import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum; +import com.qniao.domain.BaseDomainEvent; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class MarriageBountyOrderConfirmedMatchEvent extends BaseDomainEvent { + + @ApiModelProperty("悬赏招亲订单标识") + private Long id; + + @ApiModelProperty("悬赏招亲订单奖励标识") + private Long marriageBountyOrderRewardId; + + private List orderIdRelList; + + private List rewardReceiveRecordList; + + @Data + public static class MarriageBountyOrderRewardReceiveRecordEvent { + + @ApiModelProperty("关联嘉宾") + private Long associatedMiId; + + @ApiModelProperty("奖励类型") + private RewardTypeEnum rewardType; + + @ApiModelProperty("领取人标识") + private Long receiver; + + @ApiModelProperty("领取金额") + private BigDecimal receivedAmount; + } +} \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/request/AcquireMatchmakerConfirmMatchRewardDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/request/AcquireMatchmakerConfirmMatchRewardDto.java new file mode 100644 index 0000000..e029651 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/request/AcquireMatchmakerConfirmMatchRewardDto.java @@ -0,0 +1,27 @@ +package com.qniao.dam.api.command.reward.user.request; + +import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class AcquireMatchmakerConfirmMatchRewardDto { + + @ApiModelProperty("关联嘉宾") + private Long associatedMiId; + + @ApiModelProperty("奖励类型") + private RewardTypeEnum rewardType; + + @ApiModelProperty("领取人标识") + private Long receiver; + + @ApiModelProperty("领取金额") + private BigDecimal receivedAmount; + + private List orderIdRelList; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/marriagebounty/MarriageBountyOrderEventHandle.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/marriagebounty/MarriageBountyOrderEventHandle.java index 99a4e00..3778211 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/marriagebounty/MarriageBountyOrderEventHandle.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/marriagebounty/MarriageBountyOrderEventHandle.java @@ -1,14 +1,18 @@ package com.qniao.dam.application.handler.marriagebounty; +import cn.hutool.core.collection.CollUtil; import com.google.common.eventbus.Subscribe; +import com.qniao.dam.api.command.reward.user.request.AcquireMatchmakerConfirmMatchRewardDto; import com.qniao.dam.api.command.reward.user.request.AcquireMatchmakerConfirmMeetingRewardDto; import com.qniao.dam.application.service.marriagebounty.MarriageBountyOrderApplicationService; import com.qniao.dam.application.service.reward.RewardApplicationService; +import com.qniao.dam.domian.aggregate.marriagebounty.event.MarriageBountyOrderConfirmedMatchEvent; import com.qniao.dam.domian.aggregate.marriagebounty.event.MarriageBountyOrderConfirmedMeetingEvent; import com.qniao.dam.domian.aggregate.marriagebounty.event.MarriageBountyOrderCreatedEvent; import com.qniao.dam.domian.aggregate.marriagebounty.event.MarriageBountyOrderCreatedMQ; import com.qniao.dam.infrastructure.constant.MqExchange; import com.qniao.dam.infrastructure.constant.MqQueue; +import com.qniao.das.domian.aggregate.marriageseekingreward.event.MatchSuccessfullyEvent; import com.qniao.das.domian.aggregate.marriageseekingreward.event.RewardSelectedGuestEvent; import com.qniao.domain.BaseApplicationService; import com.qniao.framework.utils.TypeConvertUtils; @@ -60,17 +64,48 @@ public class MarriageBountyOrderEventHandle extends BaseApplicationService { } } + @Subscribe + public void handle(MarriageBountyOrderConfirmedMatchEvent event) { + try { + //红娘获取奖励 + if (Objects.nonNull(event.getMarriageBountyOrderRewardId()) && CollUtil.isNotEmpty(event.getRewardReceiveRecordList())) { + for (MarriageBountyOrderConfirmedMatchEvent.MarriageBountyOrderRewardReceiveRecordEvent rewardReceiveRecordEvent : event.getRewardReceiveRecordList()) { + AcquireMatchmakerConfirmMatchRewardDto confirmMatchRewardDto = + TypeConvertUtils.convert(rewardReceiveRecordEvent, AcquireMatchmakerConfirmMatchRewardDto.class); + confirmMatchRewardDto.setOrderIdRelList(event.getOrderIdRelList()); + rewardApplicationService.acquireMatchmakerConfirmMatchReward(confirmMatchRewardDto); + } + } + } catch (Exception e) { + log.error("悬赏招亲订单确认pip事件处理异常", e); + } + } + @RabbitListener(bindings = @QueueBinding(value = @Queue(MqQueue.REWARD_SELECTED_GUEST), exchange = @Exchange(value = MqExchange.REWARD_SELECTED_GUEST, type = ExchangeTypes.FANOUT))) public void handle(RewardSelectedGuestEvent event) { try { - //创建榜单 - marriageBountyOrderApplicationService.confirmMeeting(event.getMarriageBountyOrderId(),event.getMatchmakerUserId(),event.getMiId()); + //悬赏招亲确认见面 + marriageBountyOrderApplicationService.confirmMeeting(event.getMarriageBountyOrderId(), event.getMatchmakerUserId(), event.getMiId()); log.error("接收到MQ事件:{}", event); } catch (Exception e) { log.error("悬赏招亲确认见面处理异常", e); } } + + @RabbitListener(bindings = @QueueBinding(value = @Queue(MqQueue.REWARD_MATCH_SUCCESSFULLY), + exchange = @Exchange(value = MqExchange.REWARD_MATCH_SUCCESSFULLY, + type = ExchangeTypes.FANOUT))) + public void handle(MatchSuccessfullyEvent event) { + try { + //悬赏招亲匹配成功 + marriageBountyOrderApplicationService.confirmMatch(event.getMarriageBountyOrderId(), event.getRewardInviteUserId(), event.getRewardPublishMatchmakerUserId(), + event.getGuestsInviteMiId(), event.getGuestsInviteUserId(), event.getGuestsMatchmakerUserId()); + log.error("接收到MQ事件:{}", event); + } catch (Exception e) { + log.error("悬赏招亲匹配成功处理异常", e); + } + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/marriagebounty/MarriageBountyOrderApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/marriagebounty/MarriageBountyOrderApplicationService.java index b6dc078..e185302 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/marriagebounty/MarriageBountyOrderApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/marriagebounty/MarriageBountyOrderApplicationService.java @@ -18,6 +18,7 @@ import com.qniao.dam.domain.aggregate.paymentchannelorder.entity.PaymentChannelO import com.qniao.dam.domain.aggregate.paymentorder.entity.PaymentOrder; import com.qniao.dam.domain.aggregate.paymentorderrefund.entity.PaymentOrderRefund; import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; +import com.qniao.dam.domain.aggregate.rewardconfig.entity.RewardConfig; import com.qniao.dam.domian.aggregate.marriagebount.constant.MarriageBountyOrderPaymentStatusEnum; import com.qniao.dam.domian.aggregate.marriagebount.constant.MarriageBountyOrderStatusEnum; import com.qniao.dam.domian.aggregate.paymentorder.constant.PaymentOrderStatusEnum; @@ -27,6 +28,7 @@ import com.qniao.dam.infrastructure.persistent.dao.domain.ProductSpecDao; import com.qniao.dam.query.marriagebounty.MarriageBountyOrderQueryService; import com.qniao.dam.query.paymentchannelorder.PaymentChannelOrderQueryService; import com.qniao.dam.query.paymentorder.PaymentOrderQueryService; +import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; import com.qniao.domain.BaseApplicationService; import com.qniao.domain.BaseDomainEvent; import com.qniao.framework.exception.BizException; @@ -55,6 +57,8 @@ public class MarriageBountyOrderApplicationService extends BaseApplicationServic private PaymentChannelOrderQueryService paymentChannelOrderQueryService; @Resource private PaymentOrderRefundApplicationService paymentOrderRefundApplicationService; + @Resource + private RewardConfigQueryService rewardConfigQueryService; public void save(Long orderId) { Order order = orderRepository.load(orderId); @@ -159,8 +163,8 @@ public class MarriageBountyOrderApplicationService extends BaseApplicationServic public void confirmMeeting(Long marriageBountyOrderId, Long receiver, Long meetingMiId) { MarriageBountyOrder existMarriageBountyOrder = marriageBountyOrderRepository.load(marriageBountyOrderId); if (Objects.nonNull(existMarriageBountyOrder) && MarriageBountyOrderStatusEnum.MATCHMAKING.equals(existMarriageBountyOrder.getStatus())) { - if (CollUtil.isNotEmpty(existMarriageBountyOrder.getOrderRewardList())&& - existMarriageBountyOrder.getOrderRewardList().stream().noneMatch(orderReward->meetingMiId.equals(orderReward.getMeetingMiId()))) { + if (CollUtil.isNotEmpty(existMarriageBountyOrder.getOrderRewardList()) && + existMarriageBountyOrder.getOrderRewardList().stream().noneMatch(orderReward -> meetingMiId.equals(orderReward.getMeetingMiId()))) { MarriageBountyOrderReward marriageBountyOrderReward = null; for (MarriageBountyOrderReward orderReward : existMarriageBountyOrder.getOrderRewardList()) { if (ProductSubCategoryEnum.MARRIAGE_BOUNTY_MEETING_FEE.equals(orderReward.getRewardCategory())) { @@ -186,4 +190,82 @@ public class MarriageBountyOrderApplicationService extends BaseApplicationServic } } + /** + * 确认匹配 + * + * @param marriageBountyOrderId 悬赏招亲订单 + * @param rewardInviteUserId 榜单邀请用户的红娘用户 + * @param rewardPublishMatchmakerUserId 榜单发布红娘用户 + * @param guestsInviteUserId 嘉宾邀请用户的红娘用户 + * @param guestsMatchmakerUserId 嘉宾邀请用户匹配榜单的红娘用户 + */ + public void confirmMatch(Long marriageBountyOrderId, + Long rewardInviteUserId, + Long rewardPublishMatchmakerUserId, + Long guestsInviteMiId, + Long guestsInviteUserId, + Long guestsMatchmakerUserId) { + MarriageBountyOrder existMarriageBountyOrder = marriageBountyOrderRepository.load(marriageBountyOrderId); + if (Objects.nonNull(existMarriageBountyOrder) && MarriageBountyOrderStatusEnum.MATCHMAKING.equals(existMarriageBountyOrder.getStatus())) { + MarriageBountyOrderReward marriageBountyOrderReward = null; + for (MarriageBountyOrderReward orderReward : existMarriageBountyOrder.getOrderRewardList()) { + if (ProductSubCategoryEnum.MARRIAGE_BOUNTY_RESULT_GIFT.equals(orderReward.getRewardCategory())) { + if (!orderReward.getIsReceive()) { + marriageBountyOrderReward = orderReward; + break; + } + } + } + if (Objects.nonNull(marriageBountyOrderReward)) { + MarriageBountyOrder marriageBountyOrder = new MarriageBountyOrder(); + marriageBountyOrder.setId(marriageBountyOrderId); + marriageBountyOrderReward.setIsReceive(true); + List rewardReceiveRecordList = new ArrayList<>(); + //分润 嘉宾实名认证 + RewardConfig guestCertificationReward = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.GUEST_CERTIFICATION); + if (Objects.nonNull(guestCertificationReward)) { + if (Objects.nonNull(rewardInviteUserId)) { + BigDecimal receivedAmount = guestCertificationReward.calculate(marriageBountyOrderReward.getRewardAmount()); + MarriageBountyOrderRewardReceiveRecord rewardReceiveRecord = MarriageBountyOrderRewardReceiveRecord.build( + RewardTypeEnum.GUEST_CERTIFICATION, rewardInviteUserId, receivedAmount); + rewardReceiveRecord.setAssociatedMiId(existMarriageBountyOrder.getMiId()); + rewardReceiveRecordList.add(rewardReceiveRecord); + } + if (Objects.nonNull(guestsInviteUserId)) { + BigDecimal receivedAmount = guestCertificationReward.calculate(marriageBountyOrderReward.getRewardAmount()); + MarriageBountyOrderRewardReceiveRecord rewardReceiveRecord = MarriageBountyOrderRewardReceiveRecord.build( + RewardTypeEnum.GUEST_CERTIFICATION, guestsInviteUserId, receivedAmount); + rewardReceiveRecord.setAssociatedMiId(guestsInviteMiId); + rewardReceiveRecordList.add(rewardReceiveRecord); + } + } + //分润 发布悬赏招亲 + RewardConfig publishMarriageBountyReward = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.PUBLISH_MARRIAGE_BOUNTY); + if (Objects.nonNull(publishMarriageBountyReward)) { + if (Objects.nonNull(rewardPublishMatchmakerUserId)) { + BigDecimal receivedAmount = guestCertificationReward.calculate(marriageBountyOrderReward.getRewardAmount()); + MarriageBountyOrderRewardReceiveRecord rewardReceiveRecord = MarriageBountyOrderRewardReceiveRecord.build( + RewardTypeEnum.PUBLISH_MARRIAGE_BOUNTY, rewardPublishMatchmakerUserId, receivedAmount); + rewardReceiveRecord.setAssociatedMiId(existMarriageBountyOrder.getMiId()); + rewardReceiveRecordList.add(rewardReceiveRecord); + } + } + //分润 发布悬赏招亲 + RewardConfig matchMarriageBountyReward = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCH_MARRIAGE_BOUNTY); + if (Objects.nonNull(matchMarriageBountyReward)) { + if (Objects.nonNull(guestsMatchmakerUserId)) { + BigDecimal receivedAmount = guestCertificationReward.calculate(marriageBountyOrderReward.getRewardAmount()); + MarriageBountyOrderRewardReceiveRecord rewardReceiveRecord = MarriageBountyOrderRewardReceiveRecord.build( + RewardTypeEnum.MATCH_MARRIAGE_BOUNTY, guestsMatchmakerUserId, receivedAmount); + rewardReceiveRecord.setAssociatedMiId(guestsInviteMiId); + rewardReceiveRecordList.add(rewardReceiveRecord); + } + } + marriageBountyOrderReward.setRewardReceiveRecordList(rewardReceiveRecordList); + marriageBountyOrder.setUpdateOrderRewardList(Collections.singletonList(marriageBountyOrderReward)); + BaseDomainEvent event = marriageBountyOrderAggregate.confirmMatch(marriageBountyOrder, existMarriageBountyOrder.getOrderRelList()); + this.sendEvent(event); + } + } + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java index 5461c90..4c0b320 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java @@ -2,8 +2,10 @@ package com.qniao.dam.application.service.reward; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; +import com.qniao.dam.api.command.reward.user.request.AcquireMatchmakerConfirmMatchRewardDto; import com.qniao.dam.api.command.reward.user.request.AcquireMatchmakerConfirmMeetingRewardDto; import com.qniao.dam.api.command.reward.user.request.UserAcquireMatchmakerJoinRecommendRewardDto; +import com.qniao.dam.domian.aggregate.right.constant.RightTypeEnum; import com.qniao.dam.infrastructure.persistent.dao.domain.MarriageInformationDao; import com.qniao.dam.infrastructure.persistent.dao.domain.OrderDao; import com.qniao.dam.query.walletaccount.WalletAccountQueryService; @@ -25,10 +27,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; +import java.util.*; @Service public class RewardApplicationService { @@ -59,11 +58,11 @@ public class RewardApplicationService { walletAccount = WalletAccount.init(dto.getInitiatorUserId()); } BigDecimal rewardAmount = rewardConfig.calculate(associateOrder.getSettlementAmount()); - String content = "推荐红娘" + (StrUtil.isNotBlank(associateOrder.getOrderBelongName()) ? associateOrder.getOrderBelongName() : "") + "入驻平台"; walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(rewardAmount)); walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, - rewardAmount, true, content, TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE.getDesc()); + rewardAmount, true, TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE.getDesc()); + record.handleContent(Collections.singletonList(StrUtil.isNotBlank(associateOrder.getOrderBelongName()) ? associateOrder.getOrderBelongName() : "")); WalletAccountAssociateOrderRecord associateOrderRecord = WalletAccountAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); record.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); walletAccount.setRecordList(Collections.singletonList(record)); @@ -83,13 +82,43 @@ public class RewardApplicationService { } BigDecimal rewardAmount = dto.getReceivedAmount(); MarriageInformation meetingMi = marriageInformationDao.selectById(dto.getMeetingMiId()); - String content = "推荐嘉宾" + meetingMi.getNickName() + StrUtil.SPACE + meetingMi.getGenderValue() + "见面"; - walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(rewardAmount)); walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); - WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MARRIAGE_BOUNTY_MEETING_FEE, - rewardAmount, true, content, TradeTypeEnum.MARRIAGE_BOUNTY_MEETING_FEE.getDesc()); + rewardAmount, true, TradeTypeEnum.MARRIAGE_BOUNTY_MEETING_FEE.getDesc()); + record.handleContent(Collections.singletonList(meetingMi.getNickName())); + if (CollUtil.isNotEmpty(dto.getOrderIdRelList())) { + List associateOrderRecordList = new ArrayList<>(); + for (Long associateOrderId : dto.getOrderIdRelList()) { + Order associateOrder = orderDao.selectById(associateOrderId); + WalletAccountAssociateOrderRecord associateOrderRecord = WalletAccountAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); + associateOrderRecordList.add(associateOrderRecord); + } + record.setAssociateOrderRecordList(associateOrderRecordList); + + } + walletAccount.setRecordList(Collections.singletonList(record)); + walletAccountAggregate.save(walletAccount); + } + } + + /** + * 确认匹配 + */ + public void acquireMatchmakerConfirmMatchReward(AcquireMatchmakerConfirmMatchRewardDto dto) { + synchronized (dto.getReceiver().toString().intern()) { + WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getReceiver()); + if (Objects.isNull(walletAccount)) { + walletAccount = WalletAccount.init(dto.getReceiver()); + } + BigDecimal rewardAmount = dto.getReceivedAmount(); + MarriageInformation associatedMi = marriageInformationDao.selectById(dto.getAssociatedMiId()); + walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(rewardAmount)); + walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); + TradeTypeEnum tradeType = transform(dto.getRewardType()); + WalletAccountRecord record = WalletAccountRecord.build(tradeType, + rewardAmount, true, Objects.nonNull(tradeType) ? tradeType.getDesc() : null); + record.handleContent(Collections.singletonList(associatedMi.getNickName())); if (CollUtil.isNotEmpty(dto.getOrderIdRelList())) { List associateOrderRecordList = new ArrayList<>(); for (Long associateOrderId : dto.getOrderIdRelList()) { @@ -104,4 +133,23 @@ public class RewardApplicationService { walletAccountAggregate.save(walletAccount); } } + + private TradeTypeEnum transform(RewardTypeEnum rewardType) { + switch (rewardType) { + case GUEST_CERTIFICATION: + return TradeTypeEnum.GUEST_CERTIFICATION_FEE; + case PUBLISH_MARRIAGE_BOUNTY: + return TradeTypeEnum.PUBLISH_MARRIAGE_BOUNTY_FEE; + case MATCH_MARRIAGE_BOUNTY: + return TradeTypeEnum.MATCH_MARRIAGE_BOUNTY_FEE; + case MATCHMAKER_JOIN_RECOMMEND: + return TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE; + case MARRIAGE_BOUNTY_MEETING_FEE: + return TradeTypeEnum.MARRIAGE_BOUNTY_MEETING_FEE; + case PLATFORM_SERVICE_FEE: + return TradeTypeEnum.PLATFORM_SERVICE_FEE; + default: + return null; + } + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/MarriageBountyOrderAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/MarriageBountyOrderAggregate.java index fe72658..11143ba 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/MarriageBountyOrderAggregate.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/MarriageBountyOrderAggregate.java @@ -8,6 +8,7 @@ import com.qniao.dam.domain.aggregate.marriagebounty.valueobj.MarriageBountyOrde import com.qniao.dam.domain.aggregate.marriagebounty.valueobj.MarriageBountyOrderRewardReceiveRecord; import com.qniao.dam.domian.aggregate.marriagebount.constant.MarriageBountyOrderPaymentStatusEnum; import com.qniao.dam.domian.aggregate.marriagebount.constant.MarriageBountyOrderStatusEnum; +import com.qniao.dam.domian.aggregate.marriagebounty.event.MarriageBountyOrderConfirmedMatchEvent; import com.qniao.dam.domian.aggregate.marriagebounty.event.MarriageBountyOrderConfirmedMeetingEvent; import com.qniao.dam.domian.aggregate.marriagebounty.event.MarriageBountyOrderCreatedEvent; import com.qniao.domain.BaseDomainEvent; @@ -60,4 +61,17 @@ public class MarriageBountyOrderAggregate { event.setOrderIdRelList(orderRelList.stream().map(MarriageBountyOrderRel::getOrderId).collect(Collectors.toList())); return event; } + + public BaseDomainEvent confirmMatch(MarriageBountyOrder marriageBountyOrder, List orderRelList) { + marriageBountyOrder.setStatus(MarriageBountyOrderStatusEnum.MATCH_SUCCESS); + marriageBountyOrderRepository.save(marriageBountyOrder); + MarriageBountyOrderConfirmedMatchEvent event = new MarriageBountyOrderConfirmedMatchEvent(); + event.setId(marriageBountyOrder.getId()); + MarriageBountyOrderReward marriageBountyOrderReward = marriageBountyOrder.getUpdateOrderRewardList().get(0); + event.setMarriageBountyOrderRewardId(marriageBountyOrderReward.getId()); + event.setRewardReceiveRecordList(TypeConvertUtils.convert(marriageBountyOrderReward.getRewardReceiveRecordList(), + MarriageBountyOrderConfirmedMatchEvent.MarriageBountyOrderRewardReceiveRecordEvent.class)); + event.setOrderIdRelList(orderRelList.stream().map(MarriageBountyOrderRel::getOrderId).collect(Collectors.toList())); + return event; + } }