From 535ef3e10e9f2967216840a5c2b93c2978a6da91 Mon Sep 17 00:00:00 2001 From: Derran Date: Mon, 29 Apr 2024 15:51:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rewardconfig/constant/RewardTypeEnum.java | 11 +++- .../rewardconfig/entity/RewardConfig.java | 9 +++ .../valueobj/WalletAccountRecord.java | 1 + .../WalletAccountQueryService.java | 7 --- .../impl/WalletAccountQueryServiceImpl.java | 23 ------- .../WalletAccountUserQueryController.java | 45 ++++++++++++++ ...UserPageWalletAccountRecordQueryParam.java | 12 ++++ .../UserGetWalletAccountRecordVo.java | 46 ++++++++++++++ .../user/response/UserGetWalletAccountVo.java | 26 ++++++++ .../WalletAccountAssociateOrderRecordVo.java | 23 +++++++ .../reward/RewardApplicationService.java | 20 +++--- .../dao/view/WalletAccountViewDao.java | 20 ++++++ .../WalletAccountQueryService.java | 14 +++++ .../impl/WalletAccountQueryServiceImpl.java | 62 +++++++++++++++++++ .../walletaccount/WalletAccountViewMapper.xml | 37 +++++++++++ 15 files changed, 314 insertions(+), 42 deletions(-) delete mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/WalletAccountQueryService.java delete mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/impl/WalletAccountQueryServiceImpl.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/WalletAccountUserQueryController.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/request/UserPageWalletAccountRecordQueryParam.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/UserGetWalletAccountRecordVo.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/UserGetWalletAccountVo.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/WalletAccountAssociateOrderRecordVo.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/WalletAccountViewDao.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/WalletAccountQueryService.java create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/impl/WalletAccountQueryServiceImpl.java create mode 100644 dating-agency-mall-server/src/main/resources/mapper/walletaccount/WalletAccountViewMapper.xml diff --git a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java index 2db4995..5aaee9d 100644 --- a/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java +++ b/dating-agency-mall-constant/src/main/java/com/qniao/dam/domian/aggregate/rewardconfig/constant/RewardTypeEnum.java @@ -10,9 +10,16 @@ import lombok.Getter; @JsonFormat(shape = JsonFormat.Shape.OBJECT) public enum RewardTypeEnum { - MATCHMAKER_JOIN_RECOMMEND(1, "红娘入驻推荐"), - PLATFORM_SERVICE_FEE(2, "平台服务费"); + GUEST_CERTIFICATION(101, "嘉宾实名认证"), + + PUBLISH_MARRIAGE_BOUNTY(102, "发布悬赏招亲"), + + MATCH_MARRIAGE_BOUNTY(103, "匹配悬赏招亲"), + + MATCHMAKER_JOIN_RECOMMEND(104, "红娘入驻推荐"), + + PLATFORM_SERVICE_FEE(201, "平台服务费"); @EnumValue @JsonValue diff --git a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rewardconfig/entity/RewardConfig.java b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rewardconfig/entity/RewardConfig.java index a7368a5..fe1a754 100644 --- a/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rewardconfig/entity/RewardConfig.java +++ b/dating-agency-mall-entity/src/main/java/com/qniao/dam/domain/aggregate/rewardconfig/entity/RewardConfig.java @@ -9,6 +9,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.math.BigDecimal; +import java.math.RoundingMode; @Data @EqualsAndHashCode(callSuper = true) @@ -23,4 +24,12 @@ public class RewardConfig extends Entity { @ApiModelProperty("奖励金额") private BigDecimal rewardAmount; + + public BigDecimal calculate(BigDecimal amount) { + if (RewardAmountUnitEnum.NUM.equals(rewardAmountUnit)) { + return rewardAmount; + } else { + return amount.multiply(rewardAmount).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); + } + } } 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 0d7bd1a..25bad22 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 @@ -44,6 +44,7 @@ public class WalletAccountRecord extends ValueObject { record.setTradeType(tradeType); record.setTradeAmount(tradeAmount); record.setIsIncome(isIncome); + record.setContent(content); record.setRemark(remark); return record; } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/WalletAccountQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/WalletAccountQueryService.java deleted file mode 100644 index bec0517..0000000 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/WalletAccountQueryService.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.qniao.dam.api.query.walletaccount; - -import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; - -public interface WalletAccountQueryService { - WalletAccount queryByUserId(Long userId); -} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/impl/WalletAccountQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/impl/WalletAccountQueryServiceImpl.java deleted file mode 100644 index 719defd..0000000 --- a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/impl/WalletAccountQueryServiceImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.qniao.dam.api.query.walletaccount.impl; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.qniao.dam.api.query.walletaccount.WalletAccountQueryService; -import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; -import com.qniao.dam.infrastructure.persistent.dao.domain.WalletAccountDao; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; - -@Service -public class WalletAccountQueryServiceImpl implements WalletAccountQueryService { - - @Resource - private WalletAccountDao walletAccountDao; - - @Override - public WalletAccount queryByUserId(Long userId) { - return walletAccountDao.selectOne(new LambdaQueryWrapper() - .eq(WalletAccount::getUserId, userId) - .last("limit 1")); - } -} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/WalletAccountUserQueryController.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/WalletAccountUserQueryController.java new file mode 100644 index 0000000..4f912f7 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/WalletAccountUserQueryController.java @@ -0,0 +1,45 @@ +package com.qniao.dam.api.query.walletaccount.user; + +import com.qniao.dam.api.query.walletaccount.user.request.UserPageWalletAccountRecordQueryParam; +import com.qniao.dam.api.query.walletaccount.user.response.UserGetWalletAccountRecordVo; +import com.qniao.dam.api.query.walletaccount.user.response.UserGetWalletAccountVo; +import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; +import com.qniao.dam.query.walletaccount.WalletAccountQueryService; +import com.qniao.domain.QnPage; +import com.qniao.framework.utils.PageUtil; +import com.qniao.framework.utils.TypeConvertUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Objects; + +@RestController +@RequestMapping("user") +@Api(tags = "权益") +public class WalletAccountUserQueryController { + + @Resource + private WalletAccountQueryService walletAccountQueryService; + + @PostMapping("get/wallet-account") + @ApiOperation("用户获取钱包账号") + public UserGetWalletAccountVo userGetWalletAccount(@RequestParam("userId") Long userId) { + UserGetWalletAccountVo vo = new UserGetWalletAccountVo(); + WalletAccount walletAccount = walletAccountQueryService.queryByUserId(userId); + if (Objects.nonNull(walletAccount)) { + vo = TypeConvertUtils.convert(walletAccount, UserGetWalletAccountVo.class); + } + return vo; + } + + @PostMapping("get/wallet-account-record/page") + @ApiOperation("用户获取钱包账号记录") + public QnPage userPageWalletAccountRecord(@RequestParam("userId") Long userId, + PageUtil pageUtil, + UserPageWalletAccountRecordQueryParam queryParam) { + return PageUtil.convert(walletAccountQueryService.pageWalletAccountRecord(userId, queryParam, pageUtil), UserGetWalletAccountRecordVo.class); + } + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/request/UserPageWalletAccountRecordQueryParam.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/request/UserPageWalletAccountRecordQueryParam.java new file mode 100644 index 0000000..3b01eb1 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/request/UserPageWalletAccountRecordQueryParam.java @@ -0,0 +1,12 @@ +package com.qniao.dam.api.query.walletaccount.user.request; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class UserPageWalletAccountRecordQueryParam { + + @ApiModelProperty("交易收益类型 1推荐 2平台服务费") + private Integer tradeType; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/UserGetWalletAccountRecordVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/UserGetWalletAccountRecordVo.java new file mode 100644 index 0000000..6c789f9 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/UserGetWalletAccountRecordVo.java @@ -0,0 +1,46 @@ +package com.qniao.dam.api.query.walletaccount.user.response; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class UserGetWalletAccountRecordVo { + + @ApiModelProperty("唯一标识") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @ApiModelProperty("用户钱包账号标识") + @JsonSerialize(using = ToStringSerializer.class) + private Long walletAccountId; + + @ApiModelProperty("时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; + + @ApiModelProperty("交易类型") + private TradeTypeEnum tradeType; + + @ApiModelProperty("交易金额") + private BigDecimal tradeAmount; + + @ApiModelProperty("是否收入") + private Boolean isIncome; + + @ApiModelProperty("内容") + private String content; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("关联订单") + private List associateOrderRecordList; +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/UserGetWalletAccountVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/UserGetWalletAccountVo.java new file mode 100644 index 0000000..c23c1a7 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/UserGetWalletAccountVo.java @@ -0,0 +1,26 @@ +package com.qniao.dam.api.query.walletaccount.user.response; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class UserGetWalletAccountVo { + + @ApiModelProperty("钱包账户标识") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + @ApiModelProperty("总余额") + private BigDecimal totalBalance = BigDecimal.ZERO; + + @ApiModelProperty("可用余额") + private BigDecimal availableBalance = BigDecimal.ZERO; + + @ApiModelProperty("冻结余额") + private BigDecimal frozenBalance = BigDecimal.ZERO; + +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/WalletAccountAssociateOrderRecordVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/WalletAccountAssociateOrderRecordVo.java new file mode 100644 index 0000000..abb1943 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/WalletAccountAssociateOrderRecordVo.java @@ -0,0 +1,23 @@ +package com.qniao.dam.api.query.walletaccount.user.response; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class WalletAccountAssociateOrderRecordVo { + + @ApiModelProperty("钱包记录标识") + @JsonSerialize(using = ToStringSerializer.class) + private Long walletAccountRecordId; + + @ApiModelProperty("有关联的订单") + @JsonSerialize(using = ToStringSerializer.class) + private Long associateOrderId; + + @ApiModelProperty("有关联的金额") + private BigDecimal associateOrderAmount; +} 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 6c49e36..f5105a5 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 @@ -1,7 +1,7 @@ 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.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; @@ -17,6 +17,7 @@ import com.qniao.dam.query.rewardconfig.RewardConfigQueryService; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.Collections; import java.util.Objects; @@ -38,21 +39,20 @@ public class RewardApplicationService { public void acquireMatchmakerJoinRecommendReward(UserAcquireMatchmakerJoinRecommendRewardDto dto) { synchronized (dto.getInitiatorUserId().toString().intern()) { RewardConfig rewardConfig = rewardConfigQueryService.queryByRewardType(RewardTypeEnum.MATCHMAKER_JOIN_RECOMMEND); - if (Objects.nonNull(rewardConfig) && RewardAmountUnitEnum.NUM.equals(rewardConfig.getRewardAmountUnit())) { + if (Objects.nonNull(rewardConfig)) { 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())); + BigDecimal rewardAmount = rewardConfig.calculate(associateOrder.getSettlementAmount()); + String content = "推荐红娘" + associateOrder.getOrderBelongName() + "入驻平台"; + walletAccount.setAvailableBalance(walletAccount.getAvailableBalance().add(rewardAmount)); + walletAccount.setTotalBalance(walletAccount.getAvailableBalance().add(rewardAmount)); WalletAccountRecord record = WalletAccountRecord.build(TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE, - 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)); - } + rewardAmount, true, content, TradeTypeEnum.MATCHMAKER_JOIN_RECOMMEND_FEE.getDesc()); + 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/view/WalletAccountViewDao.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/WalletAccountViewDao.java new file mode 100644 index 0000000..11564f7 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/infrastructure/persistent/dao/view/WalletAccountViewDao.java @@ -0,0 +1,20 @@ +package com.qniao.dam.infrastructure.persistent.dao.view; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.qniao.dam.api.query.walletaccount.user.request.UserPageWalletAccountRecordQueryParam; +import com.qniao.dam.api.query.walletaccount.user.response.UserGetWalletAccountRecordVo; +import com.qniao.dam.api.query.walletaccount.user.response.WalletAccountAssociateOrderRecordVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface WalletAccountViewDao { + IPage pageWalletAccountRecord(Page pageWithoutOrders, + @Param("queryParam") UserPageWalletAccountRecordQueryParam queryParam, + @Param("userId") Long userId); + + List listAssociateOrderRecordBy(@Param("recordIdList") List recordIdList); +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/WalletAccountQueryService.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/WalletAccountQueryService.java new file mode 100644 index 0000000..27cb854 --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/WalletAccountQueryService.java @@ -0,0 +1,14 @@ +package com.qniao.dam.query.walletaccount; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.qniao.dam.api.query.walletaccount.user.request.UserPageWalletAccountRecordQueryParam; +import com.qniao.dam.api.query.walletaccount.user.response.UserGetWalletAccountRecordVo; +import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; +import com.qniao.framework.utils.PageUtil; + + +public interface WalletAccountQueryService { + WalletAccount queryByUserId(Long userId); + + IPage pageWalletAccountRecord(Long userId, UserPageWalletAccountRecordQueryParam queryParam, PageUtil pageUtil); +} diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/impl/WalletAccountQueryServiceImpl.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/impl/WalletAccountQueryServiceImpl.java new file mode 100644 index 0000000..92ac8ae --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/query/walletaccount/impl/WalletAccountQueryServiceImpl.java @@ -0,0 +1,62 @@ +package com.qniao.dam.query.walletaccount.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.qniao.dam.api.query.walletaccount.user.request.UserPageWalletAccountRecordQueryParam; +import com.qniao.dam.api.query.walletaccount.user.response.UserGetWalletAccountRecordVo; +import com.qniao.dam.api.query.walletaccount.user.response.WalletAccountAssociateOrderRecordVo; +import com.qniao.dam.infrastructure.persistent.dao.view.WalletAccountViewDao; +import com.qniao.dam.query.walletaccount.WalletAccountQueryService; +import com.qniao.dam.domain.aggregate.walletaccount.entity.WalletAccount; +import com.qniao.dam.infrastructure.persistent.dao.domain.WalletAccountDao; +import com.qniao.framework.utils.PageUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class WalletAccountQueryServiceImpl implements WalletAccountQueryService { + + @Resource + private WalletAccountDao walletAccountDao; + @Resource + private WalletAccountViewDao walletAccountViewDao; + + @Override + public WalletAccount queryByUserId(Long userId) { + return walletAccountDao.selectOne(new LambdaQueryWrapper() + .eq(WalletAccount::getUserId, userId) + .last("limit 1")); + } + + @Override + public IPage pageWalletAccountRecord(Long userId, UserPageWalletAccountRecordQueryParam queryParam, PageUtil pageUtil) { + IPage page = walletAccountViewDao.pageWalletAccountRecord(pageUtil.toPageWithoutOrders(), queryParam, userId); + if (page.getRecords().size() > 0) { + List recordIdList = page.getRecords().stream().map(UserGetWalletAccountRecordVo::getWalletAccountId).collect(Collectors.toList()); + Map> associateOrderRecordMap = mapAssociateOrderRecordBy(recordIdList); + page.getRecords().forEach(record -> { + record.setAssociateOrderRecordList(associateOrderRecordMap.get(record.getId())); + }); + } + return page; + } + + private Map> mapAssociateOrderRecordBy(List recordIdList) { + List list = listAssociateOrderRecordBy(recordIdList); + return list.stream().collect(Collectors.groupingBy(WalletAccountAssociateOrderRecordVo::getAssociateOrderId)); + } + + private List listAssociateOrderRecordBy(List recordIdList) { + List list = new ArrayList<>(); + if (CollUtil.isNotEmpty(recordIdList)) { + list = walletAccountViewDao.listAssociateOrderRecordBy(recordIdList); + } + return list; + } +} diff --git a/dating-agency-mall-server/src/main/resources/mapper/walletaccount/WalletAccountViewMapper.xml b/dating-agency-mall-server/src/main/resources/mapper/walletaccount/WalletAccountViewMapper.xml new file mode 100644 index 0000000..ef1de56 --- /dev/null +++ b/dating-agency-mall-server/src/main/resources/mapper/walletaccount/WalletAccountViewMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + \ No newline at end of file