10 changed files with 157 additions and 1 deletions
Split View
Diff Options
-
8dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/entity/PointAccount.java
-
12dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/prc/entity/PointRewardConfig.java
-
34dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/pointaccount/event/PointRewardCreatedMQ.java
-
60dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/pointaccount/PointAccountEventHandler.java
-
1dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java
-
1dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqQueue.java
-
3dating-agency-mall-server/src/main/java/com/qniao/dam/query/pointaccount/PointAccountQueryService.java
-
24dating-agency-mall-server/src/main/java/com/qniao/dam/query/pointaccount/impl/PointAccountQueryServiceImpl.java
-
4dating-agency-mall-server/src/main/java/com/qniao/dam/query/prc/PointRewardConfigQueryService.java
-
11dating-agency-mall-server/src/main/java/com/qniao/dam/query/prc/impl/PointRewardConfigQueryServiceImpl.java
@ -0,0 +1,34 @@ |
|||
package com.qniao.dam.domian.aggregate.pointaccount.event; |
|||
|
|||
import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum; |
|||
import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
|
|||
import java.io.Serializable; |
|||
import java.math.BigDecimal; |
|||
|
|||
@Data |
|||
public class PointRewardCreatedMQ implements Serializable { |
|||
|
|||
@ApiModelProperty("用户唯一标识") |
|||
private Long ownId; |
|||
|
|||
@ApiModelProperty("身份类型(个人、组织)") |
|||
private IdentityTypeEnum identityType; |
|||
|
|||
@ApiModelProperty("积分类型") |
|||
private PointRewardConfigTypeEnum pointType; |
|||
|
|||
@ApiModelProperty("内容") |
|||
private String content; |
|||
|
|||
@ApiModelProperty("是否收入") |
|||
private Boolean isIncome; |
|||
|
|||
@ApiModelProperty("关联ID") |
|||
private Long associateId; |
|||
|
|||
@ApiModelProperty("金额") |
|||
private BigDecimal amount; |
|||
} |
|||
@ -0,0 +1,60 @@ |
|||
package com.qniao.dam.application.handler.pointaccount; |
|||
|
|||
import com.qniao.dam.domain.aggregate.pointaccount.PointAccountAggregate; |
|||
import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccount; |
|||
import com.qniao.dam.domain.aggregate.pointaccount.valueobj.PointAccountRecord; |
|||
import com.qniao.dam.domain.aggregate.prc.entity.PointRewardConfig; |
|||
import com.qniao.dam.domian.aggregate.pointaccount.event.PointRewardCreatedMQ; |
|||
import com.qniao.dam.infrastructure.constant.MqExchange; |
|||
import com.qniao.dam.infrastructure.constant.MqQueue; |
|||
import com.qniao.dam.query.pointaccount.PointAccountQueryService; |
|||
import com.qniao.dam.query.prc.PointRewardConfigQueryService; |
|||
import com.qniao.domain.BaseApplicationService; |
|||
import com.qniao.framework.utils.TypeConvertUtils; |
|||
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.util.Collections; |
|||
import java.util.Objects; |
|||
|
|||
@Component |
|||
@Slf4j |
|||
public class PointAccountEventHandler extends BaseApplicationService { |
|||
|
|||
@Resource |
|||
private PointAccountQueryService pointAccountQueryService; |
|||
@Resource |
|||
private PointRewardConfigQueryService pointRewardConfigQueryService; |
|||
@Resource |
|||
private PointAccountAggregate pointAccountAggregate; |
|||
|
|||
@RabbitListener(bindings = @QueueBinding(value = @Queue(MqQueue.POINT_REWARD_CREATED), |
|||
exchange = @Exchange(value = MqExchange.POINT_REWARD_CREATED, |
|||
type = ExchangeTypes.FANOUT))) |
|||
public void handle(PointRewardCreatedMQ mq) { |
|||
try { |
|||
PointAccount pointAccount = pointAccountQueryService.queryByType(mq.getOwnId(), mq.getIdentityType()); |
|||
//积分计算 |
|||
PointRewardConfig pointRewardConfig = pointRewardConfigQueryService.queryEnableByType(mq.getPointType()); |
|||
if (Objects.nonNull(pointRewardConfig)) { |
|||
Integer points = pointRewardConfig.calculateReward(mq.getAmount()); |
|||
PointAccountRecord pointAccountRecord = TypeConvertUtils.convert(mq, PointAccountRecord.class); |
|||
pointAccountRecord.setPoints(points); |
|||
pointAccountRecord.setOriginalPoints(pointAccount.getPoints()); |
|||
pointAccount.setPoints(pointAccount.getPoints() + points); |
|||
pointAccountRecord.setCurrentPoints(pointAccount.getPoints()); |
|||
pointAccount.setRecordList(Collections.singletonList(pointAccountRecord)); |
|||
pointAccountAggregate.edit(pointAccount); |
|||
} |
|||
} catch (Exception e) { |
|||
log.error("积分奖励创建事件处理异常", e); |
|||
} |
|||
} |
|||
|
|||
} |
|||
@ -1,8 +1,11 @@ |
|||
package com.qniao.dam.query.pointaccount; |
|||
|
|||
import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccount; |
|||
import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; |
|||
|
|||
public interface PointAccountQueryService { |
|||
|
|||
PointAccount queryByUserId(Long userId); |
|||
|
|||
PointAccount queryByType(Long ownId, IdentityTypeEnum identityType); |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save