Browse Source

红娘积分升级

master
张彭杰 1 year ago
parent
commit
b110293201
13 changed files with 205 additions and 9 deletions
  1. 8
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/prc/constant/PointRewardConfigTypeEnum.java
  2. 6
      dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java
  3. 22
      dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/entity/PointAccountRecord.java
  4. 20
      dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/puc/event/MatchmakerPointUpgradeExchangedMQ.java
  5. 20
      dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/puc/event/PointUpgradeConfigExchangedEvent.java
  6. 9
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/puc/user/PointUpgradeConfigUserCommandController.java
  7. 15
      dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/puc/user/request/UserExchangeMatchmakerPointUpgradeDto.java
  8. 45
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/puc/PointUpgradeConfigEventHandler.java
  9. 55
      dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/puc/PointUpgradeConfigApplicationService.java
  10. 1
      dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/PointAccountAggregate.java
  11. 4
      dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java
  12. 2
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/ProductQueryService.java
  13. 7
      dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java

8
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/prc/constant/PointRewardConfigTypeEnum.java

@ -20,11 +20,13 @@ public enum PointRewardConfigTypeEnum {
INVITE_BOUNTY(5, "邀请嘉宾发布悬赏"),
COMPLETE_BOUNTY_AUTHENTICATION(6,"完成榜单悬赏注册"),
COMPLETE_BOUNTY_AUTHENTICATION(6, "完成榜单悬赏注册"),
COMPLETE_BOUNTY_PUBLISH(7,"完成榜单悬赏发布"),
COMPLETE_BOUNTY_PUBLISH(7, "完成榜单悬赏发布"),
COMPLETE_BOUNTY_MATCH(8,"完成榜单悬赏匹配");
COMPLETE_BOUNTY_MATCH(8, "完成榜单悬赏匹配"),
EXCHANGE_POINT_UPGRADE(201, "红娘积分升级");
@EnumValue
@JsonValue

6
dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java

@ -42,11 +42,11 @@ public enum ProductSubCategoryEnum {
MARRIAGE_BOUNTY_WOMAN_FEE(1002, "线下活动女性费用"),
MATCHMAKER_FRANCHISE_FEE(88801, "红娘合伙人加盟费"),
MATCHMAKER_FRANCHISE_FEE(88801, "高级红娘"),
MATCHMAKER_ONLINE_FEE(88802, "线上红娘加盟费"),
MATCHMAKER_ONLINE_FEE(88802, "线上红娘"),
MATCHMAKER_TRAINEE_FEE(88803, "实习红娘加盟费");
MATCHMAKER_TRAINEE_FEE(88803, "实习红娘");
@EnumValue
@JsonValue

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

@ -44,5 +44,25 @@ public class PointAccountRecord extends Entity<PointAccountRecord> {
@ApiModelProperty("是否已读")
private Boolean isRead;
public static PointAccountRecord build(Long pointAccountId,
PointRewardConfigTypeEnum pointType,
String content,
Integer points,
Boolean isIncome,
Integer originalPoints,
Integer currentPoints,
Long associateId,
Boolean isRead) {
PointAccountRecord record = new PointAccountRecord();
record.setPointAccountId(pointAccountId);
record.setPointType(pointType);
record.setContent(content);
record.setPoints(points);
record.setIsIncome(isIncome);
record.setOriginalPoints(originalPoints);
record.setCurrentPoints(currentPoints);
record.setAssociateId(associateId);
record.setIsRead(isRead);
return record;
}
}

20
dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/puc/event/MatchmakerPointUpgradeExchangedMQ.java

@ -0,0 +1,20 @@
package com.qniao.dam.domian.aggregate.puc.event;
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class MatchmakerPointUpgradeExchangedMQ implements Serializable {
private Long matchMakerId;
@ApiModelProperty("升级类型")
private ProductSubCategoryEnum upgradeType;
private Integer validityPeriodDays;
}

20
dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/puc/event/PointUpgradeConfigExchangedEvent.java

@ -0,0 +1,20 @@
package com.qniao.dam.domian.aggregate.puc.event;
import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum;
import com.qniao.domain.BaseDomainEvent;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PointUpgradeConfigExchangedEvent extends BaseDomainEvent {
private Long matchMakerId;
@ApiModelProperty("升级类型")
private ProductSubCategoryEnum upgradeType;
}

9
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/puc/user/PointUpgradeConfigUserCommandController.java

@ -35,7 +35,7 @@ public class PointUpgradeConfigUserCommandController {
@PostMapping("delete/point-upgrade-config")
public void userDeletePointUpgradeConfig(@RequestBody @Valid UserDeletePointUpgradeConfigDto dto,
@RequestParam("userId") Long userId) {
pointUpgradeConfigApplicationService.delete(dto.getId());
pointUpgradeConfigApplicationService.delete(dto.getId());
}
@ApiOperation("用户启停积分升级配置")
@ -44,4 +44,11 @@ public class PointUpgradeConfigUserCommandController {
@RequestParam("userId") Long userId) {
pointUpgradeConfigApplicationService.enable(dto.getId());
}
@ApiOperation("用户兑换红娘积分升级")
@PostMapping("exchange/matchmaker-point-upgrade")
public void userExchangeMatchmakerPointUpgrade(@RequestBody @Valid UserExchangeMatchmakerPointUpgradeDto dto,
@RequestParam("userId") Long userId) {
pointUpgradeConfigApplicationService.exchangeMatchmakerPointUpgrade(dto.getPointUpgradeConfigId(), userId);
}
}

15
dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/puc/user/request/UserExchangeMatchmakerPointUpgradeDto.java

@ -0,0 +1,15 @@
package com.qniao.dam.api.command.puc.user.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
public class UserExchangeMatchmakerPointUpgradeDto {
@ApiModelProperty("积分升级配置标识")
@NotNull(message = "积分升级配置标识不能为空")
private Long pointUpgradeConfigId;
}

45
dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/puc/PointUpgradeConfigEventHandler.java

@ -0,0 +1,45 @@
package com.qniao.dam.application.handler.puc;
import com.google.common.eventbus.Subscribe;
import com.qniao.dam.domain.aggregate.product.entity.Product;
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec;
import com.qniao.dam.domain.aggregate.productspec.valueobj.ProductSpecTerm;
import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermNameEnum;
import com.qniao.dam.domian.aggregate.puc.event.MatchmakerPointUpgradeExchangedMQ;
import com.qniao.dam.domian.aggregate.puc.event.PointUpgradeConfigExchangedEvent;
import com.qniao.dam.infrastructure.constant.MqExchange;
import com.qniao.dam.query.product.ProductQueryService;
import com.qniao.domain.BaseApplicationService;
import com.qniao.framework.utils.TypeConvertUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
@Component
@Slf4j
public class PointUpgradeConfigEventHandler extends BaseApplicationService {
@Resource
private AmqpTemplate amqpTemplate;
@Resource
private ProductQueryService productQueryService;
@Subscribe
private void handle(PointUpgradeConfigExchangedEvent event) {
MatchmakerPointUpgradeExchangedMQ mq = TypeConvertUtils.convert(event, MatchmakerPointUpgradeExchangedMQ.class);
//4.红娘对应等级的有效期查询
Product product = productQueryService.queryBy(event.getUpgradeType());
List<ProductSpec> productSpecList = productQueryService.listProductSpecBy(product.getId());
int validityPeriodDays = 0;
ProductSpecTerm term = productQueryService.getTermByName(productSpecList.get(0).getProductSpecTermList(), ProductSpecTermNameEnum.VALIDITY_PERIOD);
if (Objects.nonNull(term)) {
validityPeriodDays = Integer.parseInt(term.getValue());
}
mq.setValidityPeriodDays(validityPeriodDays);
amqpTemplate.convertAndSend(MqExchange.MATCHMAKER_POINT_UPGRADE_EXCHANGED, null, mq);
}
}

55
dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/puc/PointUpgradeConfigApplicationService.java

@ -1,19 +1,44 @@
package com.qniao.dam.application.service.puc;
import com.qniao.dam.domain.aggregate.pointaccount.PointAccountAggregate;
import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccount;
import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccountRecord;
import com.qniao.dam.domain.aggregate.product.entity.Product;
import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec;
import com.qniao.dam.domain.aggregate.productspec.valueobj.ProductSpecTerm;
import com.qniao.dam.domain.aggregate.puc.PointUpgradeConfigAggregate;
import com.qniao.dam.domain.aggregate.puc.entity.PointUpgradeConfig;
import com.qniao.dam.domian.aggregate.prc.constant.PointRewardConfigTypeEnum;
import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermNameEnum;
import com.qniao.dam.domian.aggregate.puc.event.PointUpgradeConfigExchangedEvent;
import com.qniao.dam.infrastructure.persistent.dao.puc.PointUpgradeConfigDao;
import com.qniao.dam.query.matchmaker.MatchmakerQueryService;
import com.qniao.dam.query.pointaccount.PointAccountQueryService;
import com.qniao.dam.query.product.ProductQueryService;
import com.qniao.dau.domain.aggregate.matchmaker.entity.Matchmaker;
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.util.Collections;
import java.util.List;
import java.util.Objects;
@Service
public class PointUpgradeConfigApplicationService {
public class PointUpgradeConfigApplicationService extends BaseApplicationService {
@Resource
private PointUpgradeConfigAggregate pointUpgradeConfigAggregate;
@Resource
private PointUpgradeConfigDao pointUpgradeConfigDao;
@Resource
private MatchmakerQueryService matchmakerQueryService;
@Resource
private PointAccountQueryService pointAccountQueryService;
@Resource
private PointAccountAggregate pointAccountAggregate;
public void create(PointUpgradeConfig pointUpgradeConfig) {
pointUpgradeConfig.setEnable(true);
@ -34,4 +59,32 @@ public class PointUpgradeConfigApplicationService {
pointUpgradeConfig.setEnable(!pointUpgradeConfig.getEnable());
pointUpgradeConfigAggregate.edit(pointUpgradeConfig);
}
public void exchangeMatchmakerPointUpgrade(Long pointUpgradeConfigId, Long userId) {
//1.必须是红娘
Matchmaker matchmaker = matchmakerQueryService.queryByUserId(userId);
if (Objects.isNull(matchmaker)) {
throw new BizException("您不是红娘");
}
//2.确认选中的配置是否匹配
PointUpgradeConfig pointUpgradeConfig = pointUpgradeConfigDao.selectById(pointUpgradeConfigId);
if (!pointUpgradeConfig.getOriginalType().equals(matchmaker.getType())) {
throw new BizException("不支持升级");
}
//3.判断积分是否足够
PointAccount pointAccount = pointAccountQueryService.queryByUserId(userId);
if (pointAccount.getPoints() < pointUpgradeConfig.getUpgradePoint()) {
throw new BizException("积分不足");
}
//4.逻辑处理
Integer originalPoints = pointAccount.getPoints();
pointAccount.setPoints(pointAccount.getPoints() - pointUpgradeConfig.getUpgradePoint());
PointAccountRecord record = PointAccountRecord.build(pointAccount.getId(), PointRewardConfigTypeEnum.EXCHANGE_POINT_UPGRADE,
"积分升级" + pointUpgradeConfig.getUpgradeType().getDesc(), pointUpgradeConfig.getUpgradePoint(), false,
originalPoints, pointAccount.getPoints(), null, false);
pointAccount.setRecordList(Collections.singletonList(record));
pointAccountAggregate.edit(pointAccount);
PointUpgradeConfigExchangedEvent event = new PointUpgradeConfigExchangedEvent(matchmaker.getId(), pointUpgradeConfig.getUpgradeType());
this.sendEvent(event);
}
}

1
dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/PointAccountAggregate.java

@ -2,6 +2,7 @@ package com.qniao.dam.domain.aggregate.pointaccount;
import com.qniao.dam.domain.aggregate.pointaccount.entity.PointAccount;
import com.qniao.dam.domain.aggregate.pointaccount.repository.PointAccountRepository;
import com.qniao.domain.BaseDomainEvent;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;

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

@ -1,5 +1,7 @@
package com.qniao.dam.infrastructure.constant;
import com.qniao.dam.domian.aggregate.puc.event.MatchmakerPointUpgradeExchangedMQ;
public interface MqExchange {
String MARRIAGE_BOUNTY_ORDER_CREATED = "fanout.marriageBountyOrderCreated";
@ -17,4 +19,6 @@ public interface MqExchange {
String CANCEL_SITE_ACTIVITY = "fanout.cancelSiteActivity";
String POINT_REWARD_CREATED = "fanout.pointRewardCreated";
String MATCHMAKER_POINT_UPGRADE_EXCHANGED = "fanout.matchmakerPointUpgradeExchanged";
}

2
dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/ProductQueryService.java

@ -32,6 +32,8 @@ public interface ProductQueryService {
Product queryBy(Long userId, Long miId, ProductSubCategoryEnum subCategory);
Product queryBy(ProductSubCategoryEnum subCategory);
List<ProductSpec> listProductSpecBy(Long productId);
UserGetMatchmakerFranchiseInfoVo getMatchmakerFranchiseInfo();

7
dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java

@ -103,6 +103,13 @@ public class ProductQueryServiceImpl implements ProductQueryService {
.last("limit 1"));
}
@Override
public Product queryBy(ProductSubCategoryEnum subCategory) {
return productDao.selectOne(new LambdaQueryWrapper<Product>()
.eq(Product::getSubCategory, subCategory)
.last("limit 1"));
}
@Override
public List<ProductSpec> listProductSpecBy(Long productId) {
List<ProductSpec> productSpecList = productSpecDao.selectList(new LambdaQueryWrapper<ProductSpec>()

Loading…
Cancel
Save