Browse Source

线下收益

master
张彭杰 1 year ago
parent
commit
f5862def09
10 changed files with 153 additions and 2 deletions
  1. 2
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java
  2. 2
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/walletaccount/constant/TradeTypeEnum.java
  3. 2
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/valueobj/RevenueRewardRecord.java
  4. 31
      dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/siteactivity/event/SiteActivityParticipantSettledMQ.java
  5. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/externalorder/ExternalOrderEventHandler.java
  6. 108
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/siteactivity/SiteActivityEventHandler.java
  7. 3
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java
  8. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqQueue.java
  9. 1
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ExternalOrderRelDao.java
  10. 2
      dating-agency-mall-server/src/main/resources/mapper/externalorder/ExternalOrderRelMapper.xml

2
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java

@ -86,6 +86,8 @@ public enum RewardTypeEnum {
WITHDRAW_SERVICE_FEE(205, "提现手续费"), WITHDRAW_SERVICE_FEE(205, "提现手续费"),
SITE_ACTIVITY_INVITE_FEE(206, "活动邀约佣金"),
// 3** 招亲榜 MarriageBounty // 3** 招亲榜 MarriageBounty
//低消 //低消
MARRIAGE_BOUNTY_MEETING_MIN_AMOUNT(301,"招亲榜-见面低消"), MARRIAGE_BOUNTY_MEETING_MIN_AMOUNT(301,"招亲榜-见面低消"),

2
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/walletaccount/constant/TradeTypeEnum.java

@ -22,6 +22,8 @@ public enum TradeTypeEnum {
RAFFLE_PRIZE_ACTIVITY_WINNING(106, "抽奖活动奖励"), RAFFLE_PRIZE_ACTIVITY_WINNING(106, "抽奖活动奖励"),
SITE_ACTIVITY_INVITE_FEE(107, "活动邀约佣金"),
PLATFORM_SERVICE_FEE(201, "平台服务费"), PLATFORM_SERVICE_FEE(201, "平台服务费"),
WITHDRAW(202, "提现"); WITHDRAW(202, "提现");

2
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/revenuereward/valueobj/RevenueRewardRecord.java

@ -78,6 +78,8 @@ public class RevenueRewardRecord extends ValueObject<RevenueRewardRecord> {
content = StrUtil.format("推荐红娘{}入驻平台", elements.toArray()); content = StrUtil.format("推荐红娘{}入驻平台", elements.toArray());
} else if (TradeTypeEnum.MARRIAGE_BOUNTY_MEETING_FEE.equals(tradeType)) { } else if (TradeTypeEnum.MARRIAGE_BOUNTY_MEETING_FEE.equals(tradeType)) {
content = StrUtil.format("推荐嘉宾{}见面", elements.toArray()); content = StrUtil.format("推荐嘉宾{}见面", elements.toArray());
} else if (TradeTypeEnum.SITE_ACTIVITY_INVITE_FEE.equals(tradeType)) {
content = StrUtil.format("推荐{}参与{}", elements.toArray());
} }
} }
} }

31
dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/siteactivity/event/SiteActivityParticipantSettledMQ.java

@ -0,0 +1,31 @@
package com.qniao.dam.domian.aggregate.siteactivity.event;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SiteActivityParticipantSettledMQ implements Serializable {
@ApiModelProperty("线下活动id")
private Long siteActivityId;
@ApiModelProperty("线下活动名称")
private String siteActivityName;
@ApiModelProperty("征婚资料id")
private Long receiveMiId;
@ApiModelProperty("资料用户id")
private Long receiveUserId;
@ApiModelProperty("发起邀请红娘ID")
private Long inviteMatchmakerId;
}

2
dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/externalorder/ExternalOrderEventHandler.java

@ -52,7 +52,7 @@ public class ExternalOrderEventHandler extends BaseApplicationService {
try { try {
log.error("接收到线下活动订单取消事件:{}", event); log.error("接收到线下活动订单取消事件:{}", event);
//社群活动允许退款 //社群活动允许退款
ExternalOrderRel externalOrderRel = externalOrderRelDao.queryCompletedBy(event.getExternalId(), event.getUserId(), ExternalOrderTypeEnum.SITE_ACTIVITY);
ExternalOrderRel externalOrderRel = externalOrderRelDao.queryCompletedBy(event.getExternalId(), event.getUserId(), event.getMiId(), ExternalOrderTypeEnum.SITE_ACTIVITY);
if (Objects.nonNull(externalOrderRel)) { if (Objects.nonNull(externalOrderRel)) {
externalOrderRel.setStatus(ExternalOrderRelStatus.CANCELED); externalOrderRel.setStatus(ExternalOrderRelStatus.CANCELED);
externalOrderRelAggregate.save(externalOrderRel); externalOrderRelAggregate.save(externalOrderRel);

108
dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/siteactivity/SiteActivityEventHandler.java

@ -0,0 +1,108 @@
package com.qniao.dam.application.handler.siteactivity;
import cn.hutool.core.collection.CollUtil;
import com.qniao.dam.domain.aggregate.externalorder.entity.ExternalOrderRel;
import com.qniao.dam.domain.aggregate.order.entity.Order;
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.aggregate.rewardconfig.entity.RewardConfig;
import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount;
import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord;
import com.qniao.dam.domain.service.revenuereward.AcquireRevenueRewardDomainService;
import com.qniao.dam.domian.aggregate.externalorder.constant.ExternalOrderTypeEnum;
import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum;
import com.qniao.dam.domian.aggregate.siteactivity.event.SiteActivityParticipantSettledMQ;
import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum;
import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeSceneEnum;
import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum;
import com.qniao.dam.infrastructure.constant.MqExchange;
import com.qniao.dam.infrastructure.constant.MqQueue;
import com.qniao.dam.infrastructure.persistent.dao.domain.ExternalOrderRelDao;
import com.qniao.dam.infrastructure.persistent.dao.domain.MarriageInformationDao;
import com.qniao.dam.infrastructure.persistent.dao.domain.MatchmakerDao;
import com.qniao.dam.infrastructure.persistent.dao.domain.OrderDao;
import com.qniao.dam.query.revenuereward.RevenueRewardQueryService;
import com.qniao.dam.query.rewardconfig.RewardConfigQueryService;
import com.qniao.dam.query.walletaccount.WalletAccountQueryService;
import com.qniao.das.domian.aggregate.marriageinformation.MarriageInformation;
import com.qniao.dau.domain.aggregate.matchmaker.entity.Matchmaker;
import com.qniao.domain.BaseApplicationService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
@Component
@Slf4j
public class SiteActivityEventHandler extends BaseApplicationService {
@Resource
private ExternalOrderRelDao externalOrderRelDao;
@Resource
private RewardConfigQueryService rewardConfigQueryService;
@Resource
private RevenueRewardQueryService revenueRewardQueryService;
@Resource
private OrderDao orderDao;
@Resource
private MatchmakerDao matchmakerDao;
@Resource
private MarriageInformationDao marriageInformationDao;
@Resource
private WalletAccountQueryService walletAccountQueryService;
@Resource
private AcquireRevenueRewardDomainService acquireRevenueRewardDomainService;
@RabbitListener(bindings = @QueueBinding(value = @Queue(MqQueue.SITE_ACTIVITY_PARTICIPANT_SETTLED),
exchange = @Exchange(value = MqExchange.SITE_ACTIVITY_PARTICIPANT_SETTLED,
type = ExchangeTypes.FANOUT)))
public void handle(SiteActivityParticipantSettledMQ mq) {
try {
//线下活动参入结算事件
ExternalOrderRel externalOrderRel = externalOrderRelDao.queryCompletedBy(mq.getSiteActivityId(), mq.getReceiveUserId(),
mq.getReceiveMiId(), ExternalOrderTypeEnum.SITE_ACTIVITY);
if (Objects.nonNull(externalOrderRel)) {
Order order = orderDao.selectById(externalOrderRel.getOrderId());
RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.PLATFORM_SERVICE_FEE);
if (Objects.nonNull(rewardConfig)) {
Matchmaker matchmaker = matchmakerDao.selectById(mq.getInviteMatchmakerId());
MarriageInformation marriageInformation = marriageInformationDao.selectById(mq.getReceiveMiId());
//收益信息
RevenueReward revenueReward = revenueRewardQueryService.queryByUserId(matchmaker.getUserId());
if (Objects.isNull(revenueReward)) {
revenueReward = RevenueReward.initUser(matchmaker.getUserId());
}
//营收额
BigDecimal earnings = rewardConfig.calculateReward(order.getSettlementAmount());
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.SITE_ACTIVITY_INVITE_FEE, TradeSceneEnum.ONLINE,
earnings, new BigDecimal(rewardConfig.getValue()), BigDecimal.ZERO, earnings, order.getSettlementAmount());
revenueRewardRecord.handleContent(Arrays.asList(marriageInformation.getNickName(), mq.getSiteActivityName()));
RevenueRewardAssociateOrderRecord associateOrderRecord = RevenueRewardAssociateOrderRecord.build(order.getId(), order.getSettlementAmount());
revenueRewardRecord.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord));
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord));
//钱包
WalletAccount walletAccount = walletAccountQueryService.queryByType(matchmaker.getUserId(), IdentityTypeEnum.INDIVIDUAL);
BigDecimal originalBalance = walletAccount.getTotalBalance();
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(earnings));
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance()));
WalletAccountRecord walletAccountRecord = WalletAccountRecord.build(TradeTypeEnum.SITE_ACTIVITY_INVITE_FEE, earnings, true, originalBalance, walletAccount.getTotalBalance());
walletAccount.setRecordList(Collections.singletonList(walletAccountRecord));
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount);
}
}
} catch (Exception e) {
log.error("线下活动参入结算事件处理异常", e);
}
}
}

3
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java

@ -21,4 +21,7 @@ public interface MqExchange {
String POINT_REWARD_CREATED = "fanout.pointRewardCreated"; String POINT_REWARD_CREATED = "fanout.pointRewardCreated";
String MATCHMAKER_POINT_UPGRADE_EXCHANGED = "fanout.matchmakerPointUpgradeExchanged"; String MATCHMAKER_POINT_UPGRADE_EXCHANGED = "fanout.matchmakerPointUpgradeExchanged";
String SITE_ACTIVITY_PARTICIPANT_SETTLED = "fanout.siteActivityParticipantSettled";
} }

2
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqQueue.java

@ -17,4 +17,6 @@ public interface MqQueue {
String CANCEL_SITE_ACTIVITY = MqExchange.CANCEL_SITE_ACTIVITY + serviceName; String CANCEL_SITE_ACTIVITY = MqExchange.CANCEL_SITE_ACTIVITY + serviceName;
String POINT_REWARD_CREATED = MqExchange.POINT_REWARD_CREATED + serviceName; String POINT_REWARD_CREATED = MqExchange.POINT_REWARD_CREATED + serviceName;
String SITE_ACTIVITY_PARTICIPANT_SETTLED = MqExchange.SITE_ACTIVITY_PARTICIPANT_SETTLED + serviceName;
} }

1
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/ExternalOrderRelDao.java

@ -8,5 +8,6 @@ import org.apache.ibatis.annotations.Param;
public interface ExternalOrderRelDao extends BaseMapper<ExternalOrderRel> { public interface ExternalOrderRelDao extends BaseMapper<ExternalOrderRel> {
ExternalOrderRel queryCompletedBy(@Param("externalId") Long externalId, ExternalOrderRel queryCompletedBy(@Param("externalId") Long externalId,
@Param("userId") Long userId, @Param("userId") Long userId,
@Param("miId") Long miId,
@Param("type") ExternalOrderTypeEnum type); @Param("type") ExternalOrderTypeEnum type);
} }

2
dating-agency-mall-server/src/main/resources/mapper/externalorder/ExternalOrderRelMapper.xml

@ -10,7 +10,7 @@
deor.order_id, deor.order_id,
deor.type deor.type
from da_external_order_rel as deor from da_external_order_rel as deor
INNER JOIN da_order as dao on deor.order_id = dao.id and dao.`status` = 5 and dao.user_id = #{userId}
INNER JOIN da_order as dao on deor.order_id = dao.id and dao.`status` = 5 and dao.user_id = #{userId} and dao.mi_id = #{miId}
where deor.is_delete = 0 where deor.is_delete = 0
and deor.status = 2 and deor.status = 2
and deor.external_id = #{externalId} and deor.external_id = #{externalId}

Loading…
Cancel
Save