11 changed files with 268 additions and 11 deletions
Split View
Diff Options
-
2dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/walletaccount/constant/TradeTypeEnum.java
-
8dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rpaw/entity/RafflePrizeActivityWinning.java
-
1dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rpc/entity/RafflePrizeConfig.java
-
19dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/rpaw/event/RafflePrizeActivityWinningDrawnEvent.java
-
32dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/rpaw/user/RafflePrizeActivityWinningUserCommandController.java
-
16dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/rpaw/user/request/UserDrawRafflePrizeActivityWinningDto.java
-
28dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/rpaw/user/response/UserDrawRafflePrizeActivityWinningVo.java
-
77dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/rpaw/RafflePrizeActivityWinningEventHandler.java
-
30dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/rpa/RafflePrizeActivityApplicationService.java
-
59dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/rpaw/RafflePrizeActivityWinningApplicationService.java
-
7dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/rpaw/RafflePrizeActivityWinningAggregate.java
@ -0,0 +1,19 @@ |
|||
package com.qniao.dam.domian.aggregate.rpaw.event; |
|||
|
|||
import com.qniao.domain.BaseDomainEvent; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
/** |
|||
* @author Zpj |
|||
* @date 2025/1/14 |
|||
*/ |
|||
@Data |
|||
@AllArgsConstructor |
|||
@NoArgsConstructor |
|||
public class RafflePrizeActivityWinningDrawnEvent extends BaseDomainEvent { |
|||
|
|||
private Long id; |
|||
|
|||
} |
|||
@ -0,0 +1,32 @@ |
|||
package com.qniao.dam.api.command.rpaw.user; |
|||
|
|||
import com.qniao.dam.api.command.rpaw.user.request.UserDrawRafflePrizeActivityWinningDto; |
|||
import com.qniao.dam.api.command.rpaw.user.response.UserDrawRafflePrizeActivityWinningVo; |
|||
import com.qniao.dam.application.service.rpaw.RafflePrizeActivityWinningApplicationService; |
|||
import io.swagger.annotations.Api; |
|||
import io.swagger.annotations.ApiOperation; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
import javax.annotation.Resource; |
|||
import javax.validation.Valid; |
|||
|
|||
/** |
|||
* @author Zpj |
|||
* @date 2025/1/14 |
|||
*/ |
|||
@Api(tags = "抽奖活动中奖信息") |
|||
@RestController |
|||
@RequestMapping("user") |
|||
public class RafflePrizeActivityWinningUserCommandController { |
|||
|
|||
@Resource |
|||
private RafflePrizeActivityWinningApplicationService rafflePrizeActivityWinningApplicationService; |
|||
|
|||
@ApiOperation("用户抽奖") |
|||
@PostMapping("draw/raffle-prize-activity-winning") |
|||
public UserDrawRafflePrizeActivityWinningVo userDrawRafflePrizeActivityWinning(@RequestBody @Valid UserDrawRafflePrizeActivityWinningDto dto, |
|||
@RequestParam("userId") Long userId) { |
|||
return rafflePrizeActivityWinningApplicationService.draw(dto.getRafflePrizeActivityWinningId()); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,16 @@ |
|||
package com.qniao.dam.api.command.rpaw.user.request; |
|||
|
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
|
|||
/** |
|||
* @author Zpj |
|||
* @date 2025/1/14 |
|||
*/ |
|||
@Data |
|||
public class UserDrawRafflePrizeActivityWinningDto { |
|||
|
|||
@ApiModelProperty("抽奖标识") |
|||
private Long rafflePrizeActivityWinningId; |
|||
|
|||
} |
|||
@ -0,0 +1,28 @@ |
|||
package com.qniao.dam.api.command.rpaw.user.response; |
|||
|
|||
import com.fasterxml.jackson.databind.annotation.JsonSerialize; |
|||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
/** |
|||
* @author Zpj |
|||
* @date 2025/1/14 |
|||
*/ |
|||
@Data |
|||
@AllArgsConstructor |
|||
@NoArgsConstructor |
|||
public class UserDrawRafflePrizeActivityWinningVo { |
|||
|
|||
@ApiModelProperty("中奖的抽奖活动项标识") |
|||
@JsonSerialize(using = ToStringSerializer.class) |
|||
private Long rafflePrizeActivityItemId; |
|||
|
|||
@ApiModelProperty("中奖产品") |
|||
private String rafflePrizeConfigName; |
|||
|
|||
@ApiModelProperty("奖励值") |
|||
private String rewardValue; |
|||
} |
|||
@ -0,0 +1,77 @@ |
|||
package com.qniao.dam.application.handler.rpaw; |
|||
|
|||
import cn.hutool.core.collection.CollUtil; |
|||
import com.google.common.eventbus.Subscribe; |
|||
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.rpaw.entity.RafflePrizeActivityWinning; |
|||
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.rpaw.event.RafflePrizeActivityWinningDrawnEvent; |
|||
import com.qniao.dam.domian.aggregate.rpc.constant.PrizeCategoryEnum; |
|||
import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; |
|||
import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; |
|||
import com.qniao.dam.infrastructure.persistent.dao.rpaw.RafflePrizeActivityWinningDao; |
|||
import com.qniao.dam.query.revenuereward.RevenueRewardQueryService; |
|||
import com.qniao.dam.query.walletaccount.WalletAccountQueryService; |
|||
import com.qniao.domain.BaseApplicationService; |
|||
import com.qniao.framework.exception.BizException; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
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; |
|||
|
|||
/** |
|||
* @author Zpj |
|||
* @date 2025/1/14 |
|||
*/ |
|||
@Service |
|||
@Slf4j |
|||
public class RafflePrizeActivityWinningEventHandler extends BaseApplicationService { |
|||
|
|||
@Resource |
|||
private RafflePrizeActivityWinningDao rafflePrizeActivityWinningDao; |
|||
@Resource |
|||
private WalletAccountQueryService walletAccountQueryService; |
|||
@Resource |
|||
private RevenueRewardQueryService revenueRewardQueryService; |
|||
@Resource |
|||
private AcquireRevenueRewardDomainService acquireRevenueRewardDomainService; |
|||
|
|||
@Subscribe |
|||
private void handle(RafflePrizeActivityWinningDrawnEvent event) { |
|||
try { |
|||
RafflePrizeActivityWinning winning = rafflePrizeActivityWinningDao.selectById(event.getId()); |
|||
//todo 暂时只有金额 |
|||
if (PrizeCategoryEnum.MATCHMAKER_STAY_FRANCHISE_FEE.equals(winning.getPrizeCategory())) { |
|||
BigDecimal earnings = new BigDecimal(winning.getRewardValue()); |
|||
|
|||
//收益信息 |
|||
RevenueReward revenueReward = revenueRewardQueryService.queryByType(winning.getUserId(), IdentityTypeEnum.INDIVIDUAL); |
|||
|
|||
RevenueRewardRecord revenueRewardRecord = RevenueRewardRecord.build(TradeTypeEnum.RAFFLE_PRIZE_ACTIVITY_WINNING, earnings, BigDecimal.ZERO, |
|||
BigDecimal.ZERO, earnings, earnings); |
|||
revenueRewardRecord.setContent("抽奖活动奖励"); |
|||
revenueReward.setRecordList(Collections.singletonList(revenueRewardRecord)); |
|||
|
|||
//钱包 |
|||
WalletAccount walletAccount = walletAccountQueryService.queryByType(winning.getUserId(), IdentityTypeEnum.INDIVIDUAL); |
|||
BigDecimal originalBalance = walletAccount.getTotalBalance(); |
|||
walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(earnings)); |
|||
walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); |
|||
WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.RAFFLE_PRIZE_ACTIVITY_WINNING, earnings, true, originalBalance, walletAccount.getTotalBalance()); |
|||
walletAccount.setRecordList(Collections.singletonList(record)); |
|||
acquireRevenueRewardDomainService.handle(revenueReward, walletAccount); |
|||
} |
|||
} catch (Exception e) { |
|||
log.error("抽奖事件处理异常", e); |
|||
} |
|||
} |
|||
} |
|||
@ -1,26 +1,63 @@ |
|||
package com.qniao.dam.application.service.rpaw; |
|||
|
|||
import com.qniao.dam.api.command.rpaw.user.response.UserDrawRafflePrizeActivityWinningVo; |
|||
import com.qniao.dam.application.service.rpa.RafflePrizeActivityApplicationService; |
|||
import com.qniao.dam.domain.aggregate.rpa.entity.RafflePrizeActivity; |
|||
import com.qniao.dam.domain.aggregate.rpa.entity.RafflePrizeActivityItem; |
|||
import com.qniao.dam.domain.aggregate.rpa.repository.RafflePrizeActivityRepository; |
|||
import com.qniao.dam.domain.aggregate.rpaw.RafflePrizeActivityWinningAggregate; |
|||
import com.qniao.dam.domain.aggregate.rpaw.entity.RafflePrizeActivityWinning; |
|||
import com.qniao.dam.domain.aggregate.rpc.entity.RafflePrizeConfig; |
|||
import com.qniao.dam.infrastructure.persistent.dao.rpaw.RafflePrizeActivityWinningDao; |
|||
import com.qniao.dam.infrastructure.persistent.dao.rpc.RafflePrizeConfigDao; |
|||
import com.qniao.domain.BaseApplicationService; |
|||
import com.qniao.domain.BaseDomainEvent; |
|||
import com.qniao.framework.exception.BizException; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.math.BigDecimal; |
|||
import java.math.RoundingMode; |
|||
import java.time.LocalDateTime; |
|||
import java.util.Objects; |
|||
|
|||
@Service |
|||
public class RafflePrizeActivityWinningApplicationService { |
|||
public class RafflePrizeActivityWinningApplicationService extends BaseApplicationService { |
|||
|
|||
@Resource |
|||
private RafflePrizeActivityWinningAggregate rafflePrizeActivityWinningAggregate; |
|||
@Resource |
|||
private RafflePrizeActivityWinningDao rafflePrizeActivityWinningDao; |
|||
@Resource |
|||
private RafflePrizeActivityApplicationService rafflePrizeActivityApplicationService; |
|||
@Resource |
|||
private RafflePrizeConfigDao rafflePrizeConfigDao; |
|||
|
|||
public void create(RafflePrizeActivityWinning rafflePrizeActivityWinning) { |
|||
rafflePrizeActivityWinningAggregate.create(rafflePrizeActivityWinning); |
|||
} |
|||
|
|||
public void edit(RafflePrizeActivityWinning rafflePrizeActivityWinning) { |
|||
rafflePrizeActivityWinningAggregate.edit(rafflePrizeActivityWinning); |
|||
} |
|||
|
|||
public void delete(Long id) { |
|||
rafflePrizeActivityWinningAggregate.delete(id); |
|||
public UserDrawRafflePrizeActivityWinningVo draw(Long id) { |
|||
UserDrawRafflePrizeActivityWinningVo vo = null; |
|||
RafflePrizeActivityWinning winning = rafflePrizeActivityWinningDao.selectById(id); |
|||
if (Objects.nonNull(winning)) { |
|||
if (winning.getIsDraw()) { |
|||
//已经抽奖 |
|||
throw new BizException("您已经使用了本次抽奖机会"); |
|||
} else { |
|||
//执行抽奖 |
|||
RafflePrizeActivityItem rafflePrizeActivityItem = rafflePrizeActivityApplicationService.draw(winning.getRafflePrizeActivityId()); |
|||
RafflePrizeConfig rafflePrizeConfig = rafflePrizeConfigDao.selectById(rafflePrizeActivityItem.getRafflePrizeConfigId()); |
|||
winning.setPrizeType(rafflePrizeConfig.getPrizeType()); |
|||
winning.setPrizeCategory(rafflePrizeConfig.getPrizeCategory()); |
|||
winning.setRafflePrizeConfigName(rafflePrizeConfig.getPrizeName()); |
|||
winning.setIsDraw(true); |
|||
winning.setDrawTime(LocalDateTime.now()); |
|||
//todo |
|||
BigDecimal reward = rafflePrizeConfig.getPrizePct().multiply(new BigDecimal(winning.getMaxReward())) |
|||
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); |
|||
winning.setRewardValue(reward.stripTrailingZeros().toPlainString()); |
|||
BaseDomainEvent event = rafflePrizeActivityWinningAggregate.draw(winning); |
|||
this.sendEvent(event); |
|||
vo = new UserDrawRafflePrizeActivityWinningVo(rafflePrizeActivityItem.getId(), winning.getRafflePrizeConfigName(), winning.getRewardValue()); |
|||
} |
|||
} |
|||
return vo; |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save