From 525556ed0baee98e6c50617f84cedb6437c19ce8 Mon Sep 17 00:00:00 2001 From: Derran Date: Thu, 5 Dec 2024 17:12:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E7=9B=8A=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WalletAccountUserQueryController.java | 12 ++--- .../response/WalletAccountRecordExportVo.java | 41 ++++++++++++++++++ .../WalletAccountQueryService.java | 2 + .../impl/WalletAccountQueryServiceImpl.java | 36 ++++++++++++++- .../templates/walletAccountRecordExport.xlsx | Bin 0 -> 10566 bytes 5 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/WalletAccountRecordExportVo.java create mode 100644 dating-agency-mall-server/src/main/resources/templates/walletAccountRecordExport.xlsx 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 index f2a2593..3bcccd9 100644 --- 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 @@ -1,19 +1,14 @@ package com.qniao.dam.api.query.walletaccount.user; -import com.qniao.dam.api.query.revenuereward.user.request.UsePageRevenueRewardRecordByOperatorQueryParams; -import com.qniao.dam.api.query.revenuereward.user.response.UsePageRevenueRewardRecordByOperatorVo; import com.qniao.dam.api.query.walletaccount.user.request.UsePageWalletAccountRecordByOperatorQueryParams; import com.qniao.dam.api.query.walletaccount.user.request.UserPageWalletAccountRecordQueryParam; -import com.qniao.dam.api.query.walletaccount.user.response.UseGetWalletAccountAbstractByOperatorVo; import com.qniao.dam.api.query.walletaccount.user.response.UsePageWalletAccountRecordByOperatorVo; 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.dau.infrastructure.constant.RequestHeaderFields; 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.*; @@ -58,4 +53,11 @@ public class WalletAccountUserQueryController { UsePageWalletAccountRecordByOperatorQueryParams queryParams) { return PageUtil.convert(walletAccountQueryService.pageWalletAccountRecordByOperator(pageUtil, queryParams), UsePageWalletAccountRecordByOperatorVo.class); } + + + @ApiOperation("运营端导出用户收益记录分页") + @GetMapping("/export/wallet-account-record/by/operator") + public String userExportWalletAccountRecordByOperator(UsePageWalletAccountRecordByOperatorQueryParams queryParams) { + return walletAccountQueryService.exportData(queryParams); + } } diff --git a/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/WalletAccountRecordExportVo.java b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/WalletAccountRecordExportVo.java new file mode 100644 index 0000000..ff4d58a --- /dev/null +++ b/dating-agency-mall-server/src/main/java/com/qniao/dam/api/query/walletaccount/user/response/WalletAccountRecordExportVo.java @@ -0,0 +1,41 @@ +package com.qniao.dam.api.query.walletaccount.user.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +public class WalletAccountRecordExportVo { + + @ApiModelProperty("流水明细ID") + private Long associateId; + + @ApiModelProperty("交易类型") + private String tradeTypeVal; + + @ApiModelProperty("是否收入") + private String isIncome; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("名称") + private String name; + + @ApiModelProperty("手机号") + private String phone; + + @ApiModelProperty("红娘等级") + private String matchmakerLevelVal; + + @ApiModelProperty("交易金额") + private BigDecimal tradeAmount; + + @ApiModelProperty("原始金额") + private BigDecimal originalBalance; + + @ApiModelProperty("当前金额") + private BigDecimal currentBalance; +} 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 index 7c18148..c430014 100644 --- 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 @@ -25,4 +25,6 @@ public interface WalletAccountQueryService { BigDecimal countAvailableWithdrawBalance(WalletAccount walletAccount); IPage pageWalletAccountRecordByOperator(PageUtil pageUtil, UsePageWalletAccountRecordByOperatorQueryParams queryParams); + + String exportData(UsePageWalletAccountRecordByOperatorQueryParams queryParams); } 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 index 97633d4..372b80b 100644 --- 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 @@ -7,9 +7,11 @@ import com.qniao.dam.api.query.walletaccount.user.request.UserPageWalletAccountR import com.qniao.dam.api.query.walletaccount.user.response.UsePageWalletAccountRecordByOperatorVo; import com.qniao.dam.api.query.walletaccount.user.response.UserGetWalletAccountRecordVo; import com.qniao.dam.api.query.walletaccount.user.response.UserGetWalletAccountVo; +import com.qniao.dam.api.query.walletaccount.user.response.WalletAccountRecordExportVo; import com.qniao.dam.domain.aggregate.walletaccount.valueobj.WalletAccountRecord; import com.qniao.dam.domian.aggregate.walletaccount.constant.IdentityTypeEnum; import com.qniao.dam.domian.aggregate.walletaccount.constant.TradeTypeEnum; +import com.qniao.dam.infrastructure.easyexcel.EasyExcelUtil; import com.qniao.dam.infrastructure.persistent.dao.domain.WalletAccountRecordDao; import com.qniao.dam.infrastructure.persistent.dao.view.WalletAccountViewDao; import com.qniao.dam.query.matchmaker.MatchmakerQueryService; @@ -18,13 +20,14 @@ 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 com.qniao.framework.utils.TypeConvertUtils; -import com.thoughtworks.xstream.converters.time.LocalDateTimeConverter; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; @Service @@ -38,6 +41,8 @@ public class WalletAccountQueryServiceImpl implements WalletAccountQueryService private WalletAccountRecordDao walletAccountRecordDao; @Resource private MatchmakerQueryService matchmakerQueryService; + @Resource + private EasyExcelUtil easyExcelUtil; @Override public WalletAccount queryByUserId(Long userId) { @@ -106,6 +111,35 @@ public class WalletAccountQueryServiceImpl implements WalletAccountQueryService return page; } + @Override + public String exportData(UsePageWalletAccountRecordByOperatorQueryParams queryParams) { + PageUtil pageUtil = new PageUtil(); + pageUtil.setOrders(null); + pageUtil.setPageNum(1); + pageUtil.setPageSize(-1); + IPage page = pageWalletAccountRecordByOperator(pageUtil, queryParams); + List list = transformExport(page.getRecords()); + return easyExcelUtil.writeToFilePath( + easyExcelUtil.getTemplateFileAsStream("walletAccountRecordExport"), + list + ); + } + + private List transformExport(List recordList) { + List list = new ArrayList<>(); + for (UsePageWalletAccountRecordByOperatorVo record : recordList) { + WalletAccountRecordExportVo exportVo = TypeConvertUtils.convert(record, WalletAccountRecordExportVo.class, (rVo, eVo) -> { + if (Objects.nonNull(rVo.getMatchmakerLevel())) { + eVo.setMatchmakerLevelVal(rVo.getMatchmakerLevel().getDesc()); + } + eVo.setTradeTypeVal(rVo.getTradeType().getDesc()); + eVo.setIsIncome(rVo.getIsIncome()?"收入":"支出"); + }); + list.add(exportVo); + } + return list; + } + private BigDecimal countUnavailableWithdrawBalance(Long walletAccountId, LocalDate date, int month) { LocalDateTime dateTime = date.minusMonths(month).withDayOfMonth(1).atStartOfDay(); return walletAccountRecordDao.selectList(new LambdaQueryWrapper() diff --git a/dating-agency-mall-server/src/main/resources/templates/walletAccountRecordExport.xlsx b/dating-agency-mall-server/src/main/resources/templates/walletAccountRecordExport.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b265e3a4cffaa9646a55989af1507dc465e52916 GIT binary patch literal 10566 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