diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountAssociateOrderRecord.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountAssociateOrderRecord.java new file mode 100644 index 0000000..d1b2321 --- /dev/null +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountAssociateOrderRecord.java @@ -0,0 +1,33 @@ +package com.qniao.dam.domain.aggregate.walletaccount.valueobj; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.qniao.domain.ValueObject; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("da_wallet_account_associate_order_record") +public class WalletAccountAssociateOrderRecord extends ValueObject { + + @ApiModelProperty("钱包记录标识") + private Long walletAccountRecordId; + + @ApiModelProperty("有关联的订单") + private Long associateOrderId; + + @ApiModelProperty("有关联的金额") + private BigDecimal associateOrderAmount; + + public static WalletAccountAssociateOrderRecord build(Long associateOrder, + BigDecimal associateOrderAmount) { + + WalletAccountAssociateOrderRecord associateOrderRecord = new WalletAccountAssociateOrderRecord(); + associateOrderRecord.setAssociateOrderId(associateOrder); + associateOrderRecord.setAssociateOrderAmount(associateOrderAmount); + return associateOrderRecord; + } +} diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountRecord.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountRecord.java index 28b6bbd..0d7bd1a 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountRecord.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/walletaccount/valueobj/WalletAccountRecord.java @@ -8,6 +8,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.math.BigDecimal; +import java.util.List; @Data @EqualsAndHashCode(callSuper = true) @@ -26,12 +27,18 @@ public class WalletAccountRecord extends ValueObject { @ApiModelProperty("是否收入") private Boolean isIncome; + @ApiModelProperty("内容") + private String content; + @ApiModelProperty("备注") private String remark; + private List associateOrderRecordList; + public static WalletAccountRecord build(TradeTypeEnum tradeType, BigDecimal tradeAmount, Boolean isIncome, + String content, String remark) { WalletAccountRecord record = new WalletAccountRecord(); record.setTradeType(tradeType); diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java index f33d2b3..6c49e36 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/application/service/reward/RewardApplicationService.java @@ -2,13 +2,17 @@ package com.qniao.dam.application.service.reward; import com.qniao.dam.api.command.reward.user.request.UserAcquireMatchmakerJoinRecommendRewardDto; import com.qniao.dam.api.query.walletaccount.WalletAccountQueryService; +import com.qniao.dam.domain.aggregate.order.entity.Order; import com.qniao.dam.domain.aggregate.rewardconfig.entity.RewardConfig; import com.qniao.dam.domain.aggregate.walletaccount.WalletAccountAggregate; import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; +import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountAssociateOrderRecord; import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord; +import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardAmountUnitEnum; import com.qniao.dam.domian.aggregate.rewardconfig.constant.RewardTypeEnum; import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; +import com.qniao.dam.query.order.OrderQueryService; import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; import org.springframework.stereotype.Service; @@ -25,6 +29,8 @@ public class RewardApplicationService { private WalletAccountQueryService walletAccountQueryService; @Resource private WalletAccountAggregate walletAccountAggregate; + @Resource + private OrderQueryService orderQueryService; /** * todo 财务入账 @@ -34,13 +40,19 @@ public class RewardApplicationService { RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND); if (Objects.nonNull(rewardConfig) && RewardAmountUnitEnum.NUM.equals(rewardConfig.getRewardAmountUnit())) { WalletAccount walletAccount = walletAccountQueryService.queryByUserId(dto.getInitiatorUserId()); + Order associateOrder = orderQueryService.queryBySubCategory(dto.getReceiveUserId(), ProductSubCategoryEnum.MATCHMAKER_FRANCHISE_FEE); if (Objects.isNull(walletAccount)) { walletAccount = WalletAccount.init(dto.getInitiatorUserId()); } + String content = "推荐红娘" + (Objects.nonNull(associateOrder) ? associateOrder.getOrderBelongName() : "") + "入驻平台"; walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(rewardConfig.getRewardAmount())); walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(walletAccount.getFrozenBalance())); WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, - rewardConfig.getRewardAmount(), true, TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE.getDesc()); + rewardConfig.getRewardAmount(), true, content, TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE.getDesc()); + if (Objects.nonNull(associateOrder)) { + WalletAccountAssociateOrderRecord associateOrderRecord = WalletAccountAssociateOrderRecord.build(associateOrder.getId(), associateOrder.getSettlementAmount()); + record.setAssociateOrderRecordList(Collections.singletonList(associateOrderRecord)); + } walletAccount.setRecordList(Collections.singletonList(record)); walletAccountAggregate.save(walletAccount); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/WalletAccountAssociateOrderRecordDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/WalletAccountAssociateOrderRecordDao.java new file mode 100644 index 0000000..4f4826e --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/domain/WalletAccountAssociateOrderRecordDao.java @@ -0,0 +1,7 @@ +package com.qniao.dam.infrastructure.persistent.dao.domain; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountAssociateOrderRecord; + +public interface WalletAccountAssociateOrderRecordDao extends BaseMapper { +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/OrderViewDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/OrderViewDao.java index bcb1d60..d6a3d60 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/OrderViewDao.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/OrderViewDao.java @@ -7,6 +7,8 @@ import com.qniao.dam.api.query.order.user.response.GetOrderStatisticsByOperatorV import com.qniao.dam.api.query.order.user.response.UserOrderRecordVo; import com.qniao.dam.api.query.order.user.response.UserPageOrderByOperatorVo; import com.qniao.dam.api.query.order.user.response.UserPageOrderItemByOperatorVo; +import com.qniao.dam.domain.aggregate.order.entity.Order; +import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -22,4 +24,6 @@ public interface OrderViewDao { GetOrderStatisticsByOperatorVo getOrderStatisticsByOperator(@Param("queryParam") UserPageOrderByOperatorQueryParam queryParam); IPage userUserOrderRecord(Page pageWithoutOrders,@Param("miId") Long miId,@Param("userId") Long userId); + + Order queryBySubCategory(@Param("userId") Long userId, @Param("subCategory") ProductSubCategoryEnum subCategory); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/WalletAccountRepositoryImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/WalletAccountRepositoryImpl.java index 4ecdb9b..cb4e210 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/WalletAccountRepositoryImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/repository/impl/WalletAccountRepositoryImpl.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; import com.qniao.dam.domain.aggregate.walletaccount.repository.WalletAccountRepository; import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord; +import com.qniao.dam.infrastructure.persistent.dao.domain.WalletAccountAssociateOrderRecordDao; import com.qniao.dam.infrastructure.persistent.dao.domain.WalletAccountDao; import com.qniao.dam.infrastructure.persistent.dao.domain.WalletAccountRecordDao; import org.springframework.stereotype.Service; @@ -19,13 +20,12 @@ public class WalletAccountRepositoryImpl implements WalletAccountRepository { private WalletAccountDao walletAccountDao; @Resource private WalletAccountRecordDao walletAccountRecordDao; + @Resource + private WalletAccountAssociateOrderRecordDao walletAccountAssociateOrderRecordDao; @Override public WalletAccount load(Long id) { - WalletAccount walletAccount = walletAccountDao.selectById(id); - walletAccount.setRecordList(walletAccountRecordDao.selectList(new LambdaQueryWrapper() - .eq(WalletAccountRecord::getWalletAccountId, id))); - return walletAccount; + return walletAccountDao.selectById(id); } @Override @@ -39,6 +39,12 @@ public class WalletAccountRepositoryImpl implements WalletAccountRepository { entity.getRecordList().forEach(record -> { record.setWalletAccountId(entity.getId()); walletAccountRecordDao.insert(record); + if (CollUtil.isNotEmpty(record.getAssociateOrderRecordList())) { + record.getAssociateOrderRecordList().forEach(associateOrderRecord -> { + associateOrderRecord.setWalletAccountRecordId(record.getId()); + walletAccountAssociateOrderRecordDao.insert(associateOrderRecord); + }); + } }); } return entity.getId(); diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/OrderQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/OrderQueryService.java index f35e01e..8697c0f 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/OrderQueryService.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/OrderQueryService.java @@ -8,6 +8,7 @@ import com.qniao.dam.api.query.order.user.response.UserPageOrderByOperatorVo; import com.qniao.dam.domain.aggregate.order.entity.Order; import com.qniao.dam.domain.aggregate.order.entity.OrderItem; import com.qniao.dam.domain.aggregate.productspec.entity.ProductSpec; +import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; import com.qniao.dau.infrastructure.constant.RequestHeaderFields; import com.qniao.domain.QnPage; import com.qniao.framework.utils.PageUtil; @@ -22,4 +23,6 @@ public interface OrderQueryService { boolean checkDiffSpecRight(Order order, OrderItem orderItem, ProductSpec productSpec); QnPage userUserOrderRecord(PageUtil pageUtil,Long miId,Long userId); + + Order queryBySubCategory(Long userId,ProductSubCategoryEnum subCategory); } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/impl/OrderQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/impl/OrderQueryServiceImpl.java index af47545..50efd88 100644 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/impl/OrderQueryServiceImpl.java +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/order/impl/OrderQueryServiceImpl.java @@ -14,6 +14,7 @@ import com.qniao.dam.domain.aggregate.productspec.repository.ProductSpecReposito import com.qniao.dam.domain.aggregate.productspec.valueobj.ProductSpecTerm; import com.qniao.dam.domain.aggregate.right.entity.Right; import com.qniao.dam.domain.aggregate.right.entity.RightTerm; +import com.qniao.dam.domian.aggregate.product.constant.ProductSubCategoryEnum; import com.qniao.dam.domian.aggregate.productspec.constant.ProductSpecTermNameEnum; import com.qniao.dam.domian.aggregate.right.constant.RightNameEnum; import com.qniao.dam.domian.aggregate.right.constant.RightTypeEnum; @@ -79,6 +80,11 @@ public class OrderQueryServiceImpl implements OrderQueryService { @Override public QnPage userUserOrderRecord(PageUtil pageUtil, Long miId, Long userId) { - return PageUtil.convert(orderViewDao.userUserOrderRecord(pageUtil.toPageWithoutOrders(),miId,userId)); + return PageUtil.convert(orderViewDao.userUserOrderRecord(pageUtil.toPageWithoutOrders(), miId, userId)); + } + + @Override + public Order queryBySubCategory(Long userId, ProductSubCategoryEnum subCategory) { + return orderViewDao.queryBySubCategory(userId, subCategory); } } diff --git a/dating-agency-mall-server/src/main/resources/mapper/activity/ActivityMapper.xml b/dating-agency-mall-server/src/main/resources/mapper/activity/WalletAccountAssociateOrderRecordDao.xml similarity index 100% rename from dating-agency-mall-server/src/main/resources/mapper/activity/ActivityMapper.xml rename to dating-agency-mall-server/src/main/resources/mapper/activity/WalletAccountAssociateOrderRecordDao.xml diff --git a/dating-agency-mall-server/src/main/resources/mapper/order/OrderViewMapper.xml b/dating-agency-mall-server/src/main/resources/mapper/order/WalletAccountAssociateOrderRecordDao.xml similarity index 85% rename from dating-agency-mall-server/src/main/resources/mapper/order/OrderViewMapper.xml rename to dating-agency-mall-server/src/main/resources/mapper/order/WalletAccountAssociateOrderRecordDao.xml index eec1acf..0e2e691 100644 --- a/dating-agency-mall-server/src/main/resources/mapper/order/OrderViewMapper.xml +++ b/dating-agency-mall-server/src/main/resources/mapper/order/WalletAccountAssociateOrderRecordDao.xml @@ -91,4 +91,24 @@ ORDER BY paid_time DESC + + diff --git a/dating-agency-mall-server/src/main/resources/mapper/product/ProductViewMapper.xml b/dating-agency-mall-server/src/main/resources/mapper/product/WalletAccountAssociateOrderRecordDao.xml similarity index 100% rename from dating-agency-mall-server/src/main/resources/mapper/product/ProductViewMapper.xml rename to dating-agency-mall-server/src/main/resources/mapper/product/WalletAccountAssociateOrderRecordDao.xml diff --git a/dating-agency-mall-server/src/main/resources/mapper/rewardconfig/RewardConfigViewMapper.xml b/dating-agency-mall-server/src/main/resources/mapper/rewardconfig/WalletAccountAssociateOrderRecordDao.xml similarity index 100% rename from dating-agency-mall-server/src/main/resources/mapper/rewardconfig/RewardConfigViewMapper.xml rename to dating-agency-mall-server/src/main/resources/mapper/rewardconfig/WalletAccountAssociateOrderRecordDao.xml diff --git a/dating-agency-mall-server/src/main/resources/mapper/right/RightMapper.xml b/dating-agency-mall-server/src/main/resources/mapper/right/WalletAccountAssociateOrderRecordDao.xml similarity index 100% rename from dating-agency-mall-server/src/main/resources/mapper/right/RightMapper.xml rename to dating-agency-mall-server/src/main/resources/mapper/right/WalletAccountAssociateOrderRecordDao.xml