Browse Source

积分奖励配置

master
张彭杰 1 year ago
parent
commit
590494ed74
10 changed files with 157 additions and 1 deletions
  1. 8
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/entity/PointAccount.java
  2. 12
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/prc/entity/PointRewardConfig.java
  3. 34
      dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/pointaccount/event/PointRewardCreatedMQ.java
  4. 60
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/pointaccount/PointAccountEventHandler.java
  5. 1
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java
  6. 1
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqQueue.java
  7. 3
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/pointaccount/PointAccountQueryService.java
  8. 24
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/pointaccount/impl/PointAccountQueryServiceImpl.java
  9. 4
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/prc/PointRewardConfigQueryService.java
  10. 11
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/prc/impl/PointRewardConfigQueryServiceImpl.java

8
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/entity/PointAccount.java

@ -42,4 +42,12 @@ public class PointAccount extends Entity<PointAccount> {
pointAccount.setPoints(0);
return pointAccount;
}
public static PointAccount initOrg(Long orgId) {
PointAccount pointAccount = new PointAccount();
pointAccount.setOrgId(orgId);
pointAccount.setIdentityType(IdentityTypeEnum.ORGANIZATION);
pointAccount.setPoints(0);
return pointAccount;
}
}

12
dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/prc/entity/PointRewardConfig.java

@ -3,11 +3,15 @@ package com.qniao.dam.domain.aggregate.prc.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigAttributeEnum;
import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum;
import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardAmountUnitEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.qniao.domain.Entity;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* 积分奖励配置
*
@ -33,4 +37,12 @@ public class PointRewardConfig extends Entity<PointRewardConfig> {
@ApiModelProperty("备注")
private String remark;
public Integer calculateReward(BigDecimal amount) {
if (PointRewardConfigAttributeEnum.NUM.equals(attribute)) {
return Integer.valueOf(num);
} else {
return amount.multiply(new BigDecimal(num)).divide(BigDecimal.valueOf(100), 0, RoundingMode.HALF_UP).intValue();
}
}
}

34
dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/pointaccount/event/PointRewardCreatedMQ.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;
}

60
dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/pointaccount/PointAccountEventHandler.java

@ -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
dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java

@ -16,4 +16,5 @@ public interface MqExchange {
String CANCEL_SITE_ACTIVITY = "fanout.cancelSiteActivity";
String POINT_REWARD_CREATED = "fanout.pointRewardCreated";
}

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

@ -16,4 +16,5 @@ public interface MqQueue {
String CANCEL_SITE_ACTIVITY = MqExchange.CANCEL_SITE_ACTIVITY + serviceName;
String POINT_REWARD_CREATED = MqExchange.POINT_REWARD_CREATED + serviceName;
}

3
dating-agency-mall-server/src/main/java/com/qniao/dam/query/pointaccount/PointAccountQueryService.java

@ -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);
}

24
dating-agency-mall-server/src/main/java/com/qniao/dam/query/pointaccount/impl/PointAccountQueryServiceImpl.java

@ -22,9 +22,31 @@ public class PointAccountQueryServiceImpl implements PointAccountQueryService {
.eq(PointAccount::getIdentityType, IdentityTypeEnum.INDIVIDUAL)
.eq(PointAccount::getUserId, userId)
.last("limit 1"));
if (Objects.isNull(pointAccount)){
if (Objects.isNull(pointAccount)) {
pointAccount = PointAccount.initUser(userId);
}
return pointAccount;
}
private PointAccount queryByOrg(Long orgId) {
PointAccount pointAccount = pointAccountDao.selectOne(new LambdaQueryWrapper<PointAccount>()
.eq(PointAccount::getIdentityType, IdentityTypeEnum.INDIVIDUAL)
.eq(PointAccount::getOrgId, orgId)
.last("limit 1"));
if (Objects.isNull(pointAccount)) {
pointAccount = PointAccount.initOrg(orgId);
}
return pointAccount;
}
@Override
public PointAccount queryByType(Long ownId, IdentityTypeEnum identityType) {
if (IdentityTypeEnum.INDIVIDUAL.equals(identityType)) {
return queryByUserId(ownId);
} else if (IdentityTypeEnum.ORGANIZATION.equals(identityType)) {
return queryByOrg(ownId);
}
return null;
}
}

4
dating-agency-mall-server/src/main/java/com/qniao/dam/query/prc/PointRewardConfigQueryService.java

@ -3,9 +3,13 @@ package com.qniao.dam.query.prc;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qniao.dam.api.query.prc.user.request.UserPagePointRewardConfigQueryParams;
import com.qniao.dam.api.query.prc.user.response.UserPagePointRewardConfigVo;
import com.qniao.dam.domain.aggregate.prc.entity.PointRewardConfig;
import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum;
import com.qniao.framework.utils.PageUtil;
public interface PointRewardConfigQueryService {
IPage<UserPagePointRewardConfigVo> page(PageUtil pageUtil, UserPagePointRewardConfigQueryParams queryParams);
PointRewardConfig queryEnableByType(PointRewardConfigTypeEnum type);
}

11
dating-agency-mall-server/src/main/java/com/qniao/dam/query/prc/impl/PointRewardConfigQueryServiceImpl.java

@ -1,8 +1,11 @@
package com.qniao.dam.query.prc.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qniao.dam.api.query.prc.user.request.UserPagePointRewardConfigQueryParams;
import com.qniao.dam.api.query.prc.user.response.UserPagePointRewardConfigVo;
import com.qniao.dam.domain.aggregate.prc.entity.PointRewardConfig;
import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum;
import com.qniao.dam.infrastructure.persistent.dao.prc.PointRewardConfigDao;
import com.qniao.dam.query.prc.PointRewardConfigQueryService;
import com.qniao.framework.utils.PageUtil;
@ -21,4 +24,12 @@ public class PointRewardConfigQueryServiceImpl implements PointRewardConfigQuery
UserPagePointRewardConfigQueryParams queryParams) {
return pointRewardConfigDao.page(pageUtil.toPageWithoutOrders(), queryParams);
}
@Override
public PointRewardConfig queryEnableByType(PointRewardConfigTypeEnum type) {
return pointRewardConfigDao.selectOne(new LambdaQueryWrapper<PointRewardConfig>()
.eq(PointRewardConfig::getType, type)
.eq(PointRewardConfig::getEnable, true)
.last("limit 1"));
}
}
Loading…
Cancel
Save