From 93fe9c7f9106449b8263de56f3805495e7803078 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 22 Jan 2025 19:11:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=B8=AA=E4=BA=BA=E5=85=85=E5=80=BC?= =?UTF-8?q?=E3=80=81=E4=B8=AA=E4=BA=BA=E6=B6=88=E8=B4=B9=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E3=80=81=E4=B8=AA=E4=BA=BA=E9=80=80=E6=AC=BE=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/HardAfterSaleController.java | 6 +++ .../main/resources/file/商户交易金额汇总.xlsx | Bin 9884 -> 10010 bytes .../dto/recharge/WalletRechargeImportDto.java | 2 + .../vo/transaction/WalletTransactionVo.java | 5 +++ pjcloud-wallet/pjcloud-wallet-biz/pom.xml | 20 +++++++++ .../WalletTransactionController.java | 24 +++------- .../service/WalletTransactionService.java | 4 ++ .../impl/WalletTransactionServiceImpl.java | 41 ++++++++++++++++++ .../src/main/resources/file/个人充值明细.xlsx | Bin 0 -> 10021 bytes .../src/main/resources/file/个人消费明细.xlsx | Bin 0 -> 9952 bytes .../src/main/resources/file/个人退款明细.xlsx | Bin 0 -> 10021 bytes .../recharge/WalletRechargeImportMapper.xml | 6 +++ 12 files changed, 91 insertions(+), 17 deletions(-) create mode 100644 pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/file/个人充值明细.xlsx create mode 100644 pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/file/个人消费明细.xlsx create mode 100644 pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/file/个人退款明细.xlsx diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java index 013e8ffe2..f4df4ae41 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java @@ -76,6 +76,12 @@ public class HardAfterSaleController { } /* ************************************* end app end ************************************* */ + @GetMapping(value = "/refund") + @Operation(summary = "查询售后进度") + public R refund(@RequestParam Long id) { + return R.ok(hardAfterSaleService.refund(id)); + } + @GetMapping(value = "/history") @Operation(summary = "查询售后进度") public R> history(@RequestParam Long id) { diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/file/商户交易金额汇总.xlsx b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/file/商户交易金额汇总.xlsx index a410a196818560cbcf969a09da6ab18f40b80511..654b4df3749d8725a59009d2058a71006cc6d122 100644 GIT binary patch delta 4830 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 delta 4678 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 userIds; + private List userUniqueIds; + private Long userDeptId; private List userDeptIds; diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/transaction/WalletTransactionVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/transaction/WalletTransactionVo.java index be7397bc7..835b18713 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/transaction/WalletTransactionVo.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/transaction/WalletTransactionVo.java @@ -12,6 +12,11 @@ import java.time.LocalDateTime; @Data public class WalletTransactionVo extends WalletTransactionEntity implements BaseUserInterface, BaseDeptInterface, BaseWalletTypeInterface, BaseWalletInterface { + /** + * 字符串金额用于导出 + */ + private String priceStr; + /** * 用户相关 */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/pom.xml b/pjcloud-wallet/pjcloud-wallet-biz/pom.xml index 15ae7b61a..24f349f6c 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/pom.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/pom.xml @@ -149,4 +149,24 @@ boot + + + + src/main/resources + true + + **/*.xlsx + **/*.xls + + + + src/main/resources + false + + **/*.xlsx + **/*.xls + + + + diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletTransactionController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletTransactionController.java index a77c6a8bc..595385e48 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletTransactionController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletTransactionController.java @@ -1,11 +1,8 @@ package com.bsd.pjcloud.wallet.controller; -import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.data.datascope.DataScopeFuncEnum; @@ -17,14 +14,11 @@ import com.bsd.pjcloud.wallet.api.constant.WalletBizEnum; import com.bsd.pjcloud.wallet.api.dto.WalletBalanceTransactionDto; import com.bsd.pjcloud.wallet.api.dto.WalletTransactionDto; import com.bsd.pjcloud.wallet.api.entity.WalletTransactionEntity; -import com.bsd.pjcloud.wallet.api.vo.recharge.excel.WalletTransactionCzExcelVo; -import com.bsd.pjcloud.wallet.api.vo.recharge.excel.WalletTransactionTkExcelVo; -import com.bsd.pjcloud.wallet.api.vo.recharge.excel.WalletTransactionXfExcelVo; import com.bsd.pjcloud.wallet.api.vo.transaction.WalletTransactionVo; import com.bsd.pjcloud.wallet.service.WalletTransactionService; +import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; -import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import org.springdoc.core.annotations.ParameterObject; import org.springframework.http.HttpHeaders; @@ -33,7 +27,6 @@ import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; import java.util.List; /** @@ -153,34 +146,31 @@ public class WalletTransactionController { return R.ok(walletTransactionService.removeBatchByIds(CollUtil.toList(ids))); } - @ResponseExcel @Operation(summary = "充值导出", description = "充值导出") @GetMapping("/export-cz") @PreAuthorize("@pms.hasPermission('wallet_walletTransaction_export')") - public List exportCz(WalletTransactionDto dto) { + public void exportCz(HttpServletResponse response, WalletTransactionDto dto) { dto.setBizTypes(List.of(WalletBizEnum.RECHARGE.getCode())); List list = walletTransactionService.pageList(dto); - return BeanUtils.toBean(list, WalletTransactionCzExcelVo.class); + walletTransactionService.exportByTemplate(response, dto, "file/个人充值明细.xlsx", list); } - @ResponseExcel @Operation(summary = "消费导出", description = "消费导出") @GetMapping("/export-xf") @PreAuthorize("@pms.hasPermission('wallet_walletTransaction_export')") - public List exportXf(WalletTransactionDto dto) { + public void exportXf(HttpServletResponse response, WalletTransactionDto dto) { dto.setBizTypes(List.of(WalletBizEnum.PAYMENT.getCode())); List list = walletTransactionService.pageList(dto); - return BeanUtils.toBean(list, WalletTransactionXfExcelVo.class); + walletTransactionService.exportByTemplate(response, dto, "file/个人消费明细.xlsx", list); } - @ResponseExcel @Operation(summary = "退款导出", description = "退款导出") @GetMapping("/export-tk") @PreAuthorize("@pms.hasPermission('wallet_walletTransaction_export')") - public List exportTk(WalletTransactionDto dto) { + public void exportTk(HttpServletResponse response, WalletTransactionDto dto) { dto.setBizTypes(List.of(WalletBizEnum.REFUND.getCode())); dto.setIsFindOrder(true); List list = walletTransactionService.pageList(dto); - return BeanUtils.toBean(list, WalletTransactionTkExcelVo.class); + walletTransactionService.exportByTemplate(response, dto, "file/个人退款明细.xlsx", list); } } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletTransactionService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletTransactionService.java index 1e996cc1d..696c93014 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletTransactionService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletTransactionService.java @@ -7,7 +7,9 @@ import com.bsd.pjcloud.wallet.api.constant.WalletBizEnum; import com.bsd.pjcloud.wallet.api.dto.WalletTransactionDto; import com.bsd.pjcloud.wallet.api.entity.WalletTransactionEntity; import com.bsd.pjcloud.wallet.api.vo.transaction.WalletTransactionVo; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.List; public interface WalletTransactionService extends IService { @@ -46,4 +48,6 @@ public interface WalletTransactionService extends IService list); } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletTransactionServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletTransactionServiceImpl.java index 47152b50d..c5af86710 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletTransactionServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletTransactionServiceImpl.java @@ -1,7 +1,14 @@ package com.bsd.pjcloud.wallet.service.impl; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.extra.spring.SpringUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -28,6 +35,7 @@ import com.bsd.pjcloud.wallet.mapper.WalletTransactionMapper; import com.bsd.pjcloud.wallet.mapper.WalletTypeMapper; import com.bsd.pjcloud.wallet.service.WalletManageService; import com.bsd.pjcloud.wallet.service.WalletTransactionService; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.CacheEvict; @@ -35,7 +43,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.io.IOException; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -239,4 +251,33 @@ public class WalletTransactionServiceImpl extends ServiceImpl list) { + try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(ResourceUtil.getStream(fileName)).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + Map map = new HashMap(); + if (ObjectUtil.isNotEmpty(dto.getCreateTimeList())) { + map.put("timeSpan", " 到 "); + map.put("startTime", LocalDateTimeUtil.format(dto.getCreateTimeList()[0], DatePattern.NORM_DATETIME_PATTERN)); + map.put("endTime", LocalDateTimeUtil.format(dto.getCreateTimeList()[0], DatePattern.NORM_DATETIME_PATTERN)); + } + if (ObjectUtil.isNotEmpty(list)) { + BigDecimal priceTotal = BigDecimal.ZERO; + for (WalletTransactionVo v : list) { + if (ObjectUtil.isNotEmpty(v.getPrice())) { + priceTotal = priceTotal.add(BigDecimal.valueOf(v.getPrice())); + v.setPriceStr(BigDecimal.valueOf(v.getPrice()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toString()); + } + } + map.put("computeTotalPayPrice", priceTotal.divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toString()); + } + excelWriter.fill(map, writeSheet); + excelWriter.fill(list, fillConfig, writeSheet); + } catch (IOException e) { + e.printStackTrace(); + log.error("|{}|导入错误,dto:|{}|,fileName:|{}|,error:|{}|", TAG, JSON.toJSONString(dto), fileName, e.getMessage()); + } + } } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/file/个人充值明细.xlsx b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/file/个人充值明细.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7891f08cfc83c97e8ec6c354acfb57ff65b081d8 GIT binary patch literal 10021 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 + + and a.user_id in + + #{v} + + and a.user_dept_id in