diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/prc/constant/PointRewardConfigTypeEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/prc/constant/PointRewardConfigTypeEnum.java index 094d0af..3560cae 100644 --- a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/prc/constant/PointRewardConfigTypeEnum.java +++ b/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 diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java index dc6f3f0..b558c23 100644 --- a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/product/constant/ProductSubCategoryEnum.java +++ b/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 diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/entity/PointAccountRecord.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/entity/PointAccountRecord.java index 7af6867..01ff297 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/entity/PointAccountRecord.java +++ b/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 { @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; + } } diff --git a/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/puc/event/MatchmakerPointUpgradeExchangedMQ.java b/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/puc/event/MatchmakerPointUpgradeExchangedMQ.java new file mode 100644 index 0000000..408c1f6 --- /dev/null +++ b/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; + +} diff --git a/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/puc/event/PointUpgradeConfigExchangedEvent.java b/dating-agency-mall-event/src/main/java/com/qniao/dam/domian/aggregate/puc/event/PointUpgradeConfigExchangedEvent.java new file mode 100644 index 0000000..57d244c --- /dev/null +++ b/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; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/puc/user/PointUpgradeConfigUserCommandController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/puc/user/PointUpgradeConfigUserCommandController.java index dc42b79..e8a87ff 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/puc/user/PointUpgradeConfigUserCommandController.java +++ b/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); + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/puc/user/request/UserExchangeMatchmakerPointUpgradeDto.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/command/puc/user/request/UserExchangeMatchmakerPointUpgradeDto.java new file mode 100644 index 0000000..5380a9d --- /dev/null +++ b/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; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/puc/PointUpgradeConfigEventHandler.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/handler/puc/PointUpgradeConfigEventHandler.java new file mode 100644 index 0000000..42999a1 --- /dev/null +++ b/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 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); + } +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/puc/PointUpgradeConfigApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/puc/PointUpgradeConfigApplicationService.java index babb7fc..81d769c 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/puc/PointUpgradeConfigApplicationService.java +++ b/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); + } } \ No newline at end of file diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/PointAccountAggregate.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/PointAccountAggregate.java index 48b6377..30e28c6 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/domain/aggregate/pointaccount/PointAccountAggregate.java +++ b/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; diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java index f5d09fd..9c99dc3 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/constant/MqExchange.java +++ b/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"; } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/ProductQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/ProductQueryService.java index 4ca9e45..3a923d4 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/ProductQueryService.java +++ b/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 listProductSpecBy(Long productId); UserGetMatchmakerFranchiseInfoVo getMatchmakerFranchiseInfo(); diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java index e73642b..d32d7bc 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/product/impl/ProductQueryServiceImpl.java +++ b/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() + .eq(Product::getSubCategory, subCategory) + .last("limit 1")); + } + @Override public List listProductSpecBy(Long productId) { List productSpecList = productSpecDao.selectList(new LambdaQueryWrapper()