From 14200c6dd59ad58243f1eca07ac634cf62ed6ee2 Mon Sep 17 00:00:00 2001 From: Derran Date: Fri, 10 May 2024 15:32:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../valueobj/MarriageBountyOrderRel.java | 8 +- .../revenuereward/entity/RevenueReward.java | 29 ++++ .../RevenueRewardAssociateOrderRecord.java | 32 ++++ .../valueobj/RevenueRewardRecord.java | 61 +++++++ .../WalletAccountAssociateOrderRecord.java | 33 ---- .../valueobj/WalletAccountRecord.java | 26 +-- ...arriageBountyOrderConfirmedMatchEvent.java | 3 + ...riageBountyOrderConfirmedMeetingEvent.java | 3 + ...cquireMatchmakerConfirmMatchRewardDto.java | 3 + ...uireMatchmakerConfirmMeetingRewardDto.java | 3 + ...MarriageBountyOrderApplicationService.java | 15 +- .../reward/RewardApplicationService.java | 163 ++++++++++++------ .../MarriageBountyOrderAggregate.java | 23 ++- .../revenuereward/RevenueRewardAggregate.java | 18 ++ .../repository/RevenueRewardRepository.java | 7 + .../AcquireRevenueRewardDomainService.java | 25 +++ .../RevenueRewardAssociateOrderRecordDao.java | 7 + .../dao/domain/RevenueRewardDao.java | 7 + .../dao/domain/RevenueRewardRecordDao.java | 7 + .../WalletAccountAssociateOrderRecordDao.java | 7 - .../impl/RevenueRewardRepositoryImpl.java | 53 ++++++ .../impl/WalletAccountRepositoryImpl.java | 11 -- .../MarriageBountyOrderQueryServiceImpl.java | 2 +- .../dam/query/order/OrderQueryService.java | 5 +- .../RevenueRewardQueryService.java | 7 + .../impl/RevenueRewardQueryServiceImpl.java | 23 +++ 26 files changed, 431 insertions(+), 150 deletions(-) create mode 100644 dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/entity/RevenueReward.java create mode 100644 dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/valueobj/RevenueRewardAssociateOrderRecord.java create mode 100644 dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/valueobj/RevenueRewardRecord.java delete mode 100644 dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountAssociateOrderRecord.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/RevenueRewardAggregate.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/repository/RevenueRewardRepository.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/revenuereward/AcquireRevenueRewardDomainService.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RevenueRewardAssociateOrderRecordDao.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RevenueRewardDao.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RevenueRewardRecordDao.java delete mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/WalletAccountAssociateOrderRecordDao.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/RevenueRewardRepositoryImpl.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/RevenueRewardQueryService.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/impl/RevenueRewardQueryServiceImpl.java diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/valueobj/MarriageBountyOrderRel.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/valueobj/MarriageBountyOrderRel.java index f3e15a0..aafc0d9 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/valueobj/MarriageBountyOrderRel.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/marriagebounty/valueobj/MarriageBountyOrderRel.java @@ -6,6 +6,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + @Data @EqualsAndHashCode(callSuper = true) @TableName("da_marriage_bounty_order_rel") @@ -17,9 +19,13 @@ public class MarriageBountyOrderRel extends ValueObject @ApiModelProperty("订单标识") private Long orderId; - public static MarriageBountyOrderRel build(Long orderId) { + @ApiModelProperty("订单金额") + private BigDecimal orderAmount; + + public static MarriageBountyOrderRel build(Long orderId,BigDecimal orderAmount) { MarriageBountyOrderRel orderRel = new MarriageBountyOrderRel(); orderRel.setOrderId(orderId); + orderRel.setOrderAmount(orderAmount); return orderRel; } } diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/entity/RevenueReward.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/entity/RevenueReward.java new file mode 100644 index 0000000..262a454 --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/entity/RevenueReward.java @@ -0,0 +1,29 @@ +package com.qniao.dam.domain.aggregate.revenuereward.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardRecord; +import com.qniao.domain.Entity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("da_revenue_reward") +public class RevenueReward extends Entity { + + @ApiModelProperty("用户唯一标识") + private Long userId; + + @ApiModelProperty("收益记录") + private transient List recordList; + + public static RevenueReward init(Long initiatorUserId) { + RevenueReward revenueReward = new RevenueReward(); + revenueReward.setUserId(initiatorUserId); + return revenueReward; + } +} diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/valueobj/RevenueRewardAssociateOrderRecord.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/valueobj/RevenueRewardAssociateOrderRecord.java new file mode 100644 index 0000000..821c2e2 --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/valueobj/RevenueRewardAssociateOrderRecord.java @@ -0,0 +1,32 @@ +package com.qniao.dam.domain.aggregate.revenuereward.valueobj; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.domain.ValueObject; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("da_revenue_reward_associate_order_record") +public class RevenueRewardAssociateOrderRecord extends ValueObject { + + @ApiModelProperty("收益记录标识") + private Long revenueRewardRecordId; + + @ApiModelProperty("有关联的订单") + private Long associateOrderId; + + @ApiModelProperty("有关联的金额") + private BigDecimal associateOrderAmount; + + public static RevenueRewardAssociateOrderRecord build(Long associateOrderId, + BigDecimal associateOrderAmount) { + RevenueRewardAssociateOrderRecord record = new RevenueRewardAssociateOrderRecord(); + record.setAssociateOrderId(associateOrderId); + record.setAssociateOrderAmount(associateOrderAmount); + return record; + } +} \ No newline at end of file diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/valueobj/RevenueRewardRecord.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/valueobj/RevenueRewardRecord.java new file mode 100644 index 0000000..ef99d28 --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/valueobj/RevenueRewardRecord.java @@ -0,0 +1,61 @@ +package com.qniao.dam.domain.aggregate.revenuereward.valueobj; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; +import com.qniao.domain.ValueObject; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("da_revenue_reward_record") +public class RevenueRewardRecord extends ValueObject { + + @ApiModelProperty("收益标识") + private Long revenueRewardId; + + @ApiModelProperty("交易类型") + private TradeTypeEnum tradeType; + + @ApiModelProperty("营收额") + private BigDecimal revenue; + + @ApiModelProperty("收益额 营收额除去平台服务费") + private BigDecimal earnings; + + @ApiModelProperty("订单金额") + private BigDecimal totalAssociateOrderAmount; + + @ApiModelProperty("内容") + private String content; + + private transient List associateOrderRecordList; + + public static RevenueRewardRecord build(TradeTypeEnum tradeType, BigDecimal revenue, BigDecimal earnings, BigDecimal totalAssociateOrderAmount) { + RevenueRewardRecord record = new RevenueRewardRecord(); + record.setTradeType(tradeType); + record.setRevenue(revenue); + record.setEarnings(earnings); + record.setTotalAssociateOrderAmount(totalAssociateOrderAmount); + 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()); + } + } +} \ No newline at end of file diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountAssociateOrderRecord.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountAssociateOrderRecord.java deleted file mode 100644 index a5f4670..0000000 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountAssociateOrderRecord.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.qniao.dam.domain.aggregate.walletaccount.valueobj; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.qniao.domain.ValueObject; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.math.BigDecimal; - -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("da_wallet_account_associate_order_record") -public class WalletAccountAssociateOrderRecord extends ValueObject { - - @ApiModelProperty("钱包记录标识") - private Long walletAccountRecordId; - - @ApiModelProperty("有关联的订单") - private Long associateOrderId; - - @ApiModelProperty("有关联的金额") - private BigDecimal associateOrderAmount; - - public static WalletAccountAssociateOrderRecord build(Long associateOrderId, - BigDecimal associateOrderAmount) { - - WalletAccountAssociateOrderRecord associateOrderRecord = new WalletAccountAssociateOrderRecord(); - associateOrderRecord.setAssociateOrderId(associateOrderId); - associateOrderRecord.setAssociateOrderAmount(associateOrderAmount); - return associateOrderRecord; - } -} diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountRecord.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountRecord.java index 7ea04bc..059e8c7 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountRecord.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountRecord.java @@ -1,6 +1,5 @@ package com.qniao.dam.domain.aggregate.walletaccount.valueobj; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.annotation.TableName; import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; import com.qniao.domain.ValueObject; @@ -9,8 +8,6 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.math.BigDecimal; -import java.util.List; -import java.util.Objects; @Data @EqualsAndHashCode(callSuper = true) @@ -29,37 +26,16 @@ public class WalletAccountRecord extends ValueObject { @ApiModelProperty("是否收入") private Boolean isIncome; - @ApiModelProperty("内容") - private String content; - @ApiModelProperty("备注") private String remark; - private transient List associateOrderRecordList; - public static WalletAccountRecord build(TradeTypeEnum tradeType, BigDecimal tradeAmount, - Boolean isIncome, - String remark) { + Boolean isIncome) { WalletAccountRecord record = new WalletAccountRecord(); record.setTradeType(tradeType); record.setTradeAmount(tradeAmount); record.setIsIncome(isIncome); - 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 index 5d3d5b3..2725795 100644 --- 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 @@ -36,5 +36,8 @@ public class MarriageBountyOrderConfirmedMatchEvent extends BaseDomainEvent { @ApiModelProperty("领取金额") private BigDecimal receivedAmount; + + @ApiModelProperty("相关订单金额") + private BigDecimal totalAssociateOrderAmount; } } \ No newline at end of file diff --git a/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/marriagebounty/event/MarriageBountyOrderConfirmedMeetingEvent.java b/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/marriagebounty/event/MarriageBountyOrderConfirmedMeetingEvent.java index d0dad5b..904eb19 100644 --- a/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/marriagebounty/event/MarriageBountyOrderConfirmedMeetingEvent.java +++ b/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/marriagebounty/event/MarriageBountyOrderConfirmedMeetingEvent.java @@ -36,6 +36,9 @@ public class MarriageBountyOrderConfirmedMeetingEvent extends BaseDomainEvent { @ApiModelProperty("领取金额") private BigDecimal receivedAmount; + + @ApiModelProperty("相关订单金额") + private BigDecimal totalAssociateOrderAmount; } } 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 index e029651..51481a6 100644 --- 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 @@ -22,6 +22,9 @@ public class AcquireMatchmakerConfirmMatchRewardDto { @ApiModelProperty("领取金额") private BigDecimal receivedAmount; + @ApiModelProperty("相关订单金额") + private BigDecimal totalAssociateOrderAmount; + private List orderIdRelList; } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/request/AcquireMatchmakerConfirmMeetingRewardDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/request/AcquireMatchmakerConfirmMeetingRewardDto.java index 3ba4a3f..bcb133b 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/request/AcquireMatchmakerConfirmMeetingRewardDto.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/reward/user/request/AcquireMatchmakerConfirmMeetingRewardDto.java @@ -22,5 +22,8 @@ public class AcquireMatchmakerConfirmMeetingRewardDto { @ApiModelProperty("领取金额") private BigDecimal receivedAmount; + @ApiModelProperty("相关订单金额") + private BigDecimal totalAssociateOrderAmount; + private List orderIdRelList; } 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 c950a20..2f42270 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 @@ -26,6 +26,7 @@ import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum; import com.qniao.dam.infrastructure.persistent.dao.domain.ProductSpecDao; import com.qniao.dam.query.marriagebounty.MarriageBountyOrderQueryService; +import com.qniao.dam.query.order.OrderQueryService; import com.qniao.dam.query.paymentchannelorder.PaymentChannelOrderQueryService; import com.qniao.dam.query.paymentorder.PaymentOrderQueryService; import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; @@ -59,6 +60,8 @@ public class MarriageBountyOrderApplicationService extends BaseApplicationServic private PaymentOrderRefundApplicationService paymentOrderRefundApplicationService; @Resource private RewardConfigQueryService rewardConfigQueryService; + @Resource + private OrderQueryService orderQueryService; public void save(Long orderId) { Order order = orderRepository.load(orderId); @@ -68,7 +71,7 @@ public class MarriageBountyOrderApplicationService extends BaseApplicationServic //新的悬赏招亲 marriageBountyOrder = MarriageBountyOrder.build(order.getUserId(), order.getMiId()); //订单关系 - MarriageBountyOrderRel orderRel = MarriageBountyOrderRel.build(orderId); + MarriageBountyOrderRel orderRel = MarriageBountyOrderRel.build(orderId, order.getSettlementAmount()); marriageBountyOrder.setOrderRelList(Collections.singletonList(orderRel)); //悬赏招亲订单奖励 List orderRewardList = new ArrayList<>(); @@ -94,7 +97,7 @@ public class MarriageBountyOrderApplicationService extends BaseApplicationServic //修改悬赏招亲订单 Map rewardCategoryPriceMap = new HashMap<>(); //订单关系 - MarriageBountyOrderRel orderRel = MarriageBountyOrderRel.build(orderId); + MarriageBountyOrderRel orderRel = MarriageBountyOrderRel.build(orderId, order.getSettlementAmount()); marriageBountyOrder.setOrderRelList(Collections.singletonList(orderRel)); //悬赏招亲订单产品记录 MarriageBountyOrderProductRecord productRecord = new MarriageBountyOrderProductRecord(); @@ -235,7 +238,9 @@ public class MarriageBountyOrderApplicationService extends BaseApplicationServic } marriageBountyOrderReward.setRewardReceiveRecordList(rewardReceiveRecordList); marriageBountyOrder.setUpdateOrderRewardList(Collections.singletonList(marriageBountyOrderReward)); - BaseDomainEvent event = marriageBountyOrderAggregate.confirmMeeting(marriageBountyOrder, existMarriageBountyOrder.getOrderRelList()); + //相关订单金额 + BigDecimal totalAssociateOrderAmount = existMarriageBountyOrder.getOrderRelList().stream().map(MarriageBountyOrderRel::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + BaseDomainEvent event = marriageBountyOrderAggregate.confirmMeeting(marriageBountyOrder, existMarriageBountyOrder.getOrderRelList(), totalAssociateOrderAmount); this.sendEvent(event); } } @@ -315,7 +320,9 @@ public class MarriageBountyOrderApplicationService extends BaseApplicationServic } marriageBountyOrderReward.setRewardReceiveRecordList(rewardReceiveRecordList); marriageBountyOrder.setUpdateOrderRewardList(Collections.singletonList(marriageBountyOrderReward)); - BaseDomainEvent event = marriageBountyOrderAggregate.confirmMatch(marriageBountyOrder, existMarriageBountyOrder.getOrderRelList()); + //相关订单金额 + BigDecimal totalAssociateOrderAmount = existMarriageBountyOrder.getOrderRelList().stream().map(MarriageBountyOrderRel::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + BaseDomainEvent event = marriageBountyOrderAggregate.confirmMatch(marriageBountyOrder, existMarriageBountyOrder.getOrderRelList(),totalAssociateOrderAmount); 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 5b0443a..3d9b337 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 @@ -5,24 +5,25 @@ 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.domain.aggregate.revenuereward.entity.RevenueReward; +import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardAssociateOrderRecord; +import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardRecord; +import com.qniao.dam.domain.service.revenuereward.AcquireRevenueRewardDomainService; import com.qniao.dam.infrastructure.persistent.dao.domain.MarriageInformationDao; import com.qniao.dam.infrastructure.persistent.dao.domain.OrderDao; +import com.qniao.dam.query.revenuereward.RevenueRewardQueryService; import com.qniao.dam.query.walletaccount.WalletAccountQueryService; import com.qniao.dam.domain.aggregate.order.entity.Order; import com.qniao.dam.domain.aggregate.rewardconfig.entity.RewardConfig; import com.qniao.dam.domain.aggregate.walletaccount.WalletAccountAggregate; import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; -import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountAssociateOrderRecord; import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord; import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; -import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardAmountUnitEnum; import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum; import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; import com.qniao.dam.query.order.OrderQueryService; import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation; -import com.qniao.das.domian.aggregate.marriageinformation.constant.GenderEnum; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -44,29 +45,47 @@ public class RewardApplicationService { private MarriageInformationDao marriageInformationDao; @Resource private OrderDao orderDao; + @Resource + private RevenueRewardQueryService revenueRewardQueryService; + @Resource + private AcquireRevenueRewardDomainService acquireRevenueRewardDomainService; /** * 获得红娘推荐奖励 */ public void acquireMatchmakerJoinRecommendReward(UserAcquireMatchmakerJoinRecommendRewardDto dto) { synchronized (dto.getInitiatorUserId().toString().intern()) { - RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND); - if (Objects.nonNull(rewardConfig)) { - WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getInitiatorUserId()); + RewardConfig recommendRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND); + RewardConfig serviceFeeRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.PLATFORM_SERVICE_FEE); + if (Objects.nonNull(recommendRewardConfig) && Objects.nonNull(serviceFeeRewardConfig)) { Order associateOrder = orderQueryService.queryBySubCategory(dto.getReceiveUserId(), ProductSubCategoryEnum.MATCHMAKER_FRANCHISE_FEE); + //收益信息 + RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getInitiatorUserId()); + if (Objects.isNull(revenueReward)) { + revenueReward = RevenueReward.init(dto.getInitiatorUserId()); + } + //营收额 + BigDecimal revenue = recommendRewardConfig.calculate(associateOrder.getSettlementAmount()); + //服务费用 + BigDecimal serviceFee = serviceFeeRewardConfig.calculate(revenue); + BigDecimal earnings = revenue.subtract(serviceFee); + RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, + revenue, earnings, associateOrder.getSettlementAmount()); + revenueRewardRecord.handleContent(Collections.singletonList(StrUtil.isNotBlank(associateOrder.getOrderBelongName()) ? associateOrder.getOrderBelongName() : "")); + RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); + revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); + revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); + + //钱包信息 + WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getInitiatorUserId()); if (Objects.isNull(walletAccount)) { walletAccount = WalletAccount.init(dto.getInitiatorUserId()); } - BigDecimal rewardAmount = rewardConfig.calculate(associateOrder.getSettlementAmount()); - walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(rewardAmount)); + walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(earnings)); walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); - WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, - 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)); + WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, earnings, true); walletAccount.setRecordList(Collections.singletonList(record)); - walletAccountAggregate.save(walletAccount); + acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); } } } @@ -76,29 +95,44 @@ public class RewardApplicationService { */ public void acquireMatchmakerConfirmMeetingReward(AcquireMatchmakerConfirmMeetingRewardDto 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 meetingMi = marriageInformationDao.selectById(dto.getAssociatedMiId()); - walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(rewardAmount)); - walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); - WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MARRIAGE_BOUNTY_MEETING_FEE, - 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); + RewardConfig serviceFeeRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.PLATFORM_SERVICE_FEE); + if (Objects.nonNull(serviceFeeRewardConfig)) { + MarriageInformation meetingMi = marriageInformationDao.selectById(dto.getAssociatedMiId()); + //收益信息 + RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getReceiver()); + if (Objects.isNull(revenueReward)) { + revenueReward = RevenueReward.init(dto.getReceiver()); } - record.setAssociateOrderRecordList(associateOrderRecordList); - + //营收额 + BigDecimal revenue = dto.getReceivedAmount(); + //服务费用 + BigDecimal serviceFee = serviceFeeRewardConfig.calculate(revenue); + BigDecimal earnings = revenue.subtract(serviceFee); + RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.MARRIAGE_BOUNTY_MEETING_FEE, + revenue, earnings, dto.getTotalAssociateOrderAmount()); + revenueRewardRecord.handleContent(Collections.singletonList(meetingMi.getNickName())); + if (CollUtil.isNotEmpty(dto.getOrderIdRelList())) { + List associateOrderRecordList = new ArrayList<>(); + for (Long associateOrderId : dto.getOrderIdRelList()) { + Order associateOrder = orderDao.selectById(associateOrderId); + RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); + revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); + associateOrderRecordList.add(associateOrderRecord); + } + revenueRewardRecord.setAssociateOrderRecordList(associateOrderRecordList); + } + revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); + //钱包 + WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getReceiver()); + if (Objects.isNull(walletAccount)) { + walletAccount = WalletAccount.init(dto.getReceiver()); + } + walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(earnings)); + walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); + WalletAccountRecord walletAccountRecord = WalletAccountRecord.build(TradeTypeEnum.MARRIAGE_BOUNTY_MEETING_FEE, earnings, true); + walletAccount.setRecordList(Collections.singletonList(walletAccountRecord)); + acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); } - walletAccount.setRecordList(Collections.singletonList(record)); - walletAccountAggregate.save(walletAccount); } } @@ -107,30 +141,45 @@ public class RewardApplicationService { */ 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()) { - Order associateOrder = orderDao.selectById(associateOrderId); - WalletAccountAssociateOrderRecord associateOrderRecord = WalletAccountAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); - associateOrderRecordList.add(associateOrderRecord); + RewardConfig serviceFeeRewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.PLATFORM_SERVICE_FEE); + if (Objects.nonNull(serviceFeeRewardConfig)) { + MarriageInformation associatedMi = marriageInformationDao.selectById(dto.getAssociatedMiId()); + TradeTypeEnum tradeType = transform(dto.getRewardType()); + //收益信息 + RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(dto.getReceiver()); + if (Objects.isNull(revenueReward)) { + revenueReward = RevenueReward.init(dto.getReceiver()); } - record.setAssociateOrderRecordList(associateOrderRecordList); + //营收额 + BigDecimal revenue = dto.getReceivedAmount(); + //服务费用 + BigDecimal serviceFee = serviceFeeRewardConfig.calculate(revenue); + BigDecimal earnings = revenue.subtract(serviceFee); + RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(tradeType, revenue, earnings, dto.getTotalAssociateOrderAmount()); + revenueRewardRecord.handleContent(Collections.singletonList(associatedMi.getNickName())); + if (CollUtil.isNotEmpty(dto.getOrderIdRelList())) { + List associateOrderRecordList = new ArrayList<>(); + for (Long associateOrderId : dto.getOrderIdRelList()) { + Order associateOrder = orderDao.selectById(associateOrderId); + RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); + revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); + associateOrderRecordList.add(associateOrderRecord); + } + revenueRewardRecord.setAssociateOrderRecordList(associateOrderRecordList); + } + revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); + + WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getReceiver()); + if (Objects.isNull(walletAccount)) { + walletAccount = WalletAccount.init(dto.getReceiver()); + } + walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(earnings)); + walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); + WalletAccountRecord record = WalletAccountRecord.build(tradeType, earnings, true); + walletAccount.setRecordList(Collections.singletonList(record)); + acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); } - walletAccount.setRecordList(Collections.singletonList(record)); - walletAccountAggregate.save(walletAccount); } } 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 6999655..c4c486e 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 @@ -1,11 +1,9 @@ package com.qniao.dam.domain.aggregate.marriagebounty; -import cn.hutool.core.collection.CollUtil; import com.qniao.dam.domain.aggregate.marriagebounty.entity.MarriageBountyOrder; import com.qniao.dam.domain.aggregate.marriagebounty.entity.MarriageBountyOrderReward; import com.qniao.dam.domain.aggregate.marriagebounty.repository.MarriageBountyOrderRepository; import com.qniao.dam.domain.aggregate.marriagebounty.valueobj.MarriageBountyOrderRel; -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; @@ -16,6 +14,7 @@ import com.qniao.framework.utils.TypeConvertUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.List; import java.util.stream.Collectors; @@ -47,27 +46,35 @@ public class MarriageBountyOrderAggregate { marriageBountyOrderRepository.save(marriageBountyOrder); } - public BaseDomainEvent confirmMeeting(MarriageBountyOrder marriageBountyOrder, List orderRelList) { + public BaseDomainEvent confirmMeeting(MarriageBountyOrder marriageBountyOrder, + List orderRelList, + BigDecimal totalAssociateOrderAmount) { marriageBountyOrderRepository.save(marriageBountyOrder); MarriageBountyOrderConfirmedMeetingEvent event = new MarriageBountyOrderConfirmedMeetingEvent(); event.setId(marriageBountyOrder.getId()); MarriageBountyOrderReward marriageBountyOrderReward = marriageBountyOrder.getUpdateOrderRewardList().get(0); event.setMarriageBountyOrderRewardId(marriageBountyOrderReward.getId()); - event.setRewardReceiveRecordList(TypeConvertUtils.convert(marriageBountyOrderReward.getRewardReceiveRecordList(), - MarriageBountyOrderConfirmedMeetingEvent.MarriageBountyOrderRewardReceiveRecordEvent.class)); + event.setRewardReceiveRecordList(TypeConvertUtils.convertList(marriageBountyOrderReward.getRewardReceiveRecordList(), + MarriageBountyOrderConfirmedMeetingEvent.MarriageBountyOrderRewardReceiveRecordEvent.class, (a, b) -> { + b.setTotalAssociateOrderAmount(totalAssociateOrderAmount); + })); event.setOrderIdRelList(orderRelList.stream().map(MarriageBountyOrderRel::getOrderId).collect(Collectors.toList())); return event; } - public BaseDomainEvent confirmMatch(MarriageBountyOrder marriageBountyOrder, List orderRelList) { + public BaseDomainEvent confirmMatch(MarriageBountyOrder marriageBountyOrder, + List orderRelList, + BigDecimal totalAssociateOrderAmount) { 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.setRewardReceiveRecordList(TypeConvertUtils.convertList(marriageBountyOrderReward.getRewardReceiveRecordList(), + MarriageBountyOrderConfirmedMatchEvent.MarriageBountyOrderRewardReceiveRecordEvent.class, (a, b) -> { + b.setTotalAssociateOrderAmount(totalAssociateOrderAmount); + })); event.setOrderIdRelList(orderRelList.stream().map(MarriageBountyOrderRel::getOrderId).collect(Collectors.toList())); return event; } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/RevenueRewardAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/RevenueRewardAggregate.java new file mode 100644 index 0000000..b875515 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/RevenueRewardAggregate.java @@ -0,0 +1,18 @@ +package com.qniao.dam.domain.aggregate.revenuereward; + +import com.qniao.dam.domain.aggregate.revenuereward.entity.RevenueReward; +import com.qniao.dam.domain.aggregate.revenuereward.repository.RevenueRewardRepository; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class RevenueRewardAggregate { + + @Resource + private RevenueRewardRepository revenueRewardRepository; + + public void save(RevenueReward revenueReward) { + revenueRewardRepository.save(revenueReward); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/repository/RevenueRewardRepository.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/repository/RevenueRewardRepository.java new file mode 100644 index 0000000..0959e17 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/repository/RevenueRewardRepository.java @@ -0,0 +1,7 @@ +package com.qniao.dam.domain.aggregate.revenuereward.repository; + +import com.qniao.dam.domain.aggregate.revenuereward.entity.RevenueReward; +import com.qniao.domain.Repository; + +public interface RevenueRewardRepository extends Repository { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/revenuereward/AcquireRevenueRewardDomainService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/revenuereward/AcquireRevenueRewardDomainService.java new file mode 100644 index 0000000..5f06b1a --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/service/revenuereward/AcquireRevenueRewardDomainService.java @@ -0,0 +1,25 @@ +package com.qniao.dam.domain.service.revenuereward; + +import com.qniao.dam.domain.aggregate.revenuereward.RevenueRewardAggregate; +import com.qniao.dam.domain.aggregate.revenuereward.entity.RevenueReward; +import com.qniao.dam.domain.aggregate.walletaccount.WalletAccountAggregate; +import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +@Service +public class AcquireRevenueRewardDomainService { + + @Resource + private RevenueRewardAggregate revenueRewardAggregate; + @Resource + private WalletAccountAggregate walletAccountAggregate; + + @Transactional(rollbackFor = Exception.class) + public void handle(RevenueReward revenueReward, WalletAccount walletAccount) { + revenueRewardAggregate.save(revenueReward); + walletAccountAggregate.save(walletAccount); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RevenueRewardAssociateOrderRecordDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RevenueRewardAssociateOrderRecordDao.java new file mode 100644 index 0000000..4633b7a --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RevenueRewardAssociateOrderRecordDao.java @@ -0,0 +1,7 @@ +package com.qniao.dam.infrastructure.persistent.dao.domain; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardAssociateOrderRecord; + +public interface RevenueRewardAssociateOrderRecordDao extends BaseMapper { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RevenueRewardDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RevenueRewardDao.java new file mode 100644 index 0000000..bb4b591 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RevenueRewardDao.java @@ -0,0 +1,7 @@ +package com.qniao.dam.infrastructure.persistent.dao.domain; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qniao.dam.domain.aggregate.revenuereward.entity.RevenueReward; + +public interface RevenueRewardDao extends BaseMapper { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RevenueRewardRecordDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RevenueRewardRecordDao.java new file mode 100644 index 0000000..1fc444c --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/RevenueRewardRecordDao.java @@ -0,0 +1,7 @@ +package com.qniao.dam.infrastructure.persistent.dao.domain; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardRecord; + +public interface RevenueRewardRecordDao extends BaseMapper { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/WalletAccountAssociateOrderRecordDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/WalletAccountAssociateOrderRecordDao.java deleted file mode 100644 index 4f4826e..0000000 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/WalletAccountAssociateOrderRecordDao.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qniao.dam.infrastructure.persistent.dao.domain; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountAssociateOrderRecord; - -public interface WalletAccountAssociateOrderRecordDao extends BaseMapper { -} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/RevenueRewardRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/RevenueRewardRepositoryImpl.java new file mode 100644 index 0000000..fb7b0f4 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/RevenueRewardRepositoryImpl.java @@ -0,0 +1,53 @@ +package com.qniao.dam.infrastructure.persistent.repository.impl; + +import cn.hutool.core.collection.CollUtil; +import com.qniao.dam.domain.aggregate.revenuereward.entity.RevenueReward; +import com.qniao.dam.domain.aggregate.revenuereward.repository.RevenueRewardRepository; +import com.qniao.dam.domain.aggregate.revenuereward.valueobj.RevenueRewardAssociateOrderRecord; +import com.qniao.dam.infrastructure.persistent.dao.domain.RevenueRewardAssociateOrderRecordDao; +import com.qniao.dam.infrastructure.persistent.dao.domain.RevenueRewardDao; +import com.qniao.dam.infrastructure.persistent.dao.domain.RevenueRewardRecordDao; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Objects; + +@Service +public class RevenueRewardRepositoryImpl implements RevenueRewardRepository { + + @Resource + private RevenueRewardDao revenueRewardDao; + @Resource + private RevenueRewardRecordDao revenueRewardRecordDao; + @Resource + private RevenueRewardAssociateOrderRecordDao revenueRewardAssociateOrderRecordDao; + + @Override + public RevenueReward load(Long id) { + return revenueRewardDao.selectById(id); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Long save(RevenueReward entity) { + if (Objects.isNull(entity.getId()) || Objects.isNull(revenueRewardDao.selectById(entity.getId()))) { + revenueRewardDao.insert(entity); + } else { + revenueRewardDao.updateById(entity); + } + if (CollUtil.isNotEmpty(entity.getRecordList())) { + entity.getRecordList().forEach(record -> { + record.setRevenueRewardId(entity.getId()); + revenueRewardRecordDao.insert(record); + if (CollUtil.isNotEmpty(record.getAssociateOrderRecordList())) { + record.getAssociateOrderRecordList().forEach(associateOrderRecord -> { + associateOrderRecord.setRevenueRewardRecordId(record.getId()); + revenueRewardAssociateOrderRecordDao.insert(associateOrderRecord); + }); + } + }); + } + return entity.getId(); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/WalletAccountRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/WalletAccountRepositoryImpl.java index cb4e210..c881b87 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/WalletAccountRepositoryImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/WalletAccountRepositoryImpl.java @@ -1,11 +1,8 @@ package com.qniao.dam.infrastructure.persistent.repository.impl; import cn.hutool.core.collection.CollUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; import com.qniao.dam.domain.aggregate.walletaccount.repository.WalletAccountRepository; -import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord; -import com.qniao.dam.infrastructure.persistent.dao.domain.WalletAccountAssociateOrderRecordDao; import com.qniao.dam.infrastructure.persistent.dao.domain.WalletAccountDao; import com.qniao.dam.infrastructure.persistent.dao.domain.WalletAccountRecordDao; import org.springframework.stereotype.Service; @@ -20,8 +17,6 @@ public class WalletAccountRepositoryImpl implements WalletAccountRepository { private WalletAccountDao walletAccountDao; @Resource private WalletAccountRecordDao walletAccountRecordDao; - @Resource - private WalletAccountAssociateOrderRecordDao walletAccountAssociateOrderRecordDao; @Override public WalletAccount load(Long id) { @@ -39,12 +34,6 @@ public class WalletAccountRepositoryImpl implements WalletAccountRepository { entity.getRecordList().forEach(record -> { record.setWalletAccountId(entity.getId()); walletAccountRecordDao.insert(record); - if (CollUtil.isNotEmpty(record.getAssociateOrderRecordList())) { - record.getAssociateOrderRecordList().forEach(associateOrderRecord -> { - associateOrderRecord.setWalletAccountRecordId(record.getId()); - walletAccountAssociateOrderRecordDao.insert(associateOrderRecord); - }); - } }); } return entity.getId(); diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriagebounty/impl/MarriageBountyOrderQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriagebounty/impl/MarriageBountyOrderQueryServiceImpl.java index e6f5fcb..f8a9a30 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriagebounty/impl/MarriageBountyOrderQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/marriagebounty/impl/MarriageBountyOrderQueryServiceImpl.java @@ -59,7 +59,7 @@ public class MarriageBountyOrderQueryServiceImpl implements MarriageBountyOrderQ public UserGetMarriageBountyOrderPreRefundInfoVo getMarriageBountyOrderPreRefundInfo(Long marriageBountyOrderId) { UserGetMarriageBountyOrderPreRefundInfoVo refundInfoVo = new UserGetMarriageBountyOrderPreRefundInfoVo(); MarriageBountyOrder marriageBountyOrder = marriageBountyOrderRepository.load(marriageBountyOrderId); - if (Objects.nonNull(marriageBountyOrder)) { + if (Objects.nonNull(marriageBountyOrder) && MarriageBountyOrderPaymentStatusEnum.PAID.equals(marriageBountyOrder.getPaymentStatus())) { refundInfoVo.setMarriageBountyOrderId(marriageBountyOrder.getId()); BigDecimal refundableMeetingFee = BigDecimal.ZERO; BigDecimal refundableResultGift = BigDecimal.ZERO; diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/OrderQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/OrderQueryService.java index 8697c0f..e2574d9 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/OrderQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/OrderQueryService.java @@ -9,11 +9,9 @@ import com.qniao.dam.domain.aggregate.order.entity.Order; import com.qniao.dam.domain.aggregate.order.entity.OrderItem; import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; -import com.qniao.dau.infrastructure.constant.RequestHeaderFields; import com.qniao.domain.QnPage; import com.qniao.framework.utils.PageUtil; -import org.springframework.web.bind.annotation.RequestHeader; -import org.springframework.web.bind.annotation.RequestParam; + public interface OrderQueryService { IPage pageOrderByOperator(PageUtil pageUtil, UserPageOrderByOperatorQueryParam queryParam); @@ -25,4 +23,5 @@ public interface OrderQueryService { QnPage userUserOrderRecord(PageUtil pageUtil,Long miId,Long userId); Order queryBySubCategory(Long userId,ProductSubCategoryEnum subCategory); + } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/RevenueRewardQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/RevenueRewardQueryService.java new file mode 100644 index 0000000..c6c9c5f --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/RevenueRewardQueryService.java @@ -0,0 +1,7 @@ +package com.qniao.dam.query.revenuereward; + +import com.qniao.dam.domain.aggregate.revenuereward.entity.RevenueReward; + +public interface RevenueRewardQueryService { + RevenueReward queryByUserId(Long userId); +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/impl/RevenueRewardQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/impl/RevenueRewardQueryServiceImpl.java new file mode 100644 index 0000000..667716f --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/revenuereward/impl/RevenueRewardQueryServiceImpl.java @@ -0,0 +1,23 @@ +package com.qniao.dam.query.revenuereward.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qniao.dam.domain.aggregate.revenuereward.entity.RevenueReward; +import com.qniao.dam.infrastructure.persistent.dao.domain.RevenueRewardDao; +import com.qniao.dam.query.revenuereward.RevenueRewardQueryService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class RevenueRewardQueryServiceImpl implements RevenueRewardQueryService { + + @Resource + private RevenueRewardDao revenueRewardDao; + + @Override + public RevenueReward queryByUserId(Long userId) { + return revenueRewardDao.selectOne(new LambdaQueryWrapper() + .eq(RevenueReward::getUserId, userId) + .last("limit 1")); + } +}