From bafd38976e18006bebabb9c2983df16afbfa83aa Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 22 Jan 2025 14:53:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=AE=BE=E5=A4=87=E4=BA=A4=E6=98=93?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E3=80=81=E5=95=86=E6=88=B7=E4=BA=A4=E6=98=93?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hard/api/vo/order/HardOrderCsVo.java | 8 -- .../hard/api/vo/order/HardOrderSbVo.java | 33 +++---- pjcloud-hardware/pjcloud-hardware-biz/pom.xml | 20 ++++ .../order/HardOrderTotalController.java | 86 ++++++++++++++++-- .../main/resources/file/商户交易金额汇总.xlsx | Bin 0 -> 9884 bytes .../main/resources/file/设备交易金额汇总.xlsx | Bin 0 -> 9978 bytes 6 files changed, 111 insertions(+), 36 deletions(-) create mode 100644 pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/file/商户交易金额汇总.xlsx create mode 100644 pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/file/设备交易金额汇总.xlsx diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderCsVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderCsVo.java index ca7cee6e3..c44275c98 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderCsVo.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderCsVo.java @@ -13,13 +13,8 @@ import lombok.Data; import java.math.BigDecimal; @Data -@HeadRowHeight(40) -@ColumnWidth(50) -@ContentRowHeight(20) -@ExcelIgnoreUnannotated public class HardOrderCsVo implements BaseMchInterface, BaseHardInterface { - @ExcelProperty("设备名称") @Schema(description = "设备id") private Long hardId; @@ -29,7 +24,6 @@ public class HardOrderCsVo implements BaseMchInterface, BaseHardInterface { @Schema(description = "设备类型") private String hardType; - @ExcelProperty("所属商户") @Schema(description = "商户名") private String merchantName; @@ -39,11 +33,9 @@ public class HardOrderCsVo implements BaseMchInterface, BaseHardInterface { @Schema(description = "商户id") private Long merchantId; - @ExcelProperty("总消费金额") @Schema(description = "总消费金额") private BigDecimal totalPayPrice; - @ExcelProperty("总消费次数") @Schema(description = "总消费次数") private BigDecimal totalPayCount; diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderSbVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderSbVo.java index d37d8f00f..62fcda01c 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderSbVo.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderSbVo.java @@ -1,6 +1,7 @@ package com.bsd.pjcloud.hard.api.vo.order; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowHeight; @@ -12,36 +13,30 @@ import lombok.Data; import java.math.BigDecimal; @Data -@HeadRowHeight(40) -@ColumnWidth(50) -@ContentRowHeight(20) -@ExcelIgnoreUnannotated public class HardOrderSbVo implements BaseMchInterface, BaseHardInterface { @Schema(description = "设备id") private Long hardId; + @Schema(description = "设备名称") + private String hardName; + + @Schema(description = "设备类型") + private String hardType; + @Schema(description = "商户id") private Long merchantId; - @Schema(description = "总消费金额") + @Schema(description = "商户名称") + private String merchantName; + + @Schema(description = "商户logo") + private String logoPic; + + @Schema(description = "总消费金额(元)") private BigDecimal totalPayPrice; @Schema(description = "总消费次数") private BigDecimal totalPayCount; - /** - * 商户相关 - */ - private String merchantName; - - private String logoPic; - - /** - * 设备相关 - */ - private String hardName; - - private String hardType; - } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/pom.xml b/pjcloud-hardware/pjcloud-hardware-biz/pom.xml index 3d004fc74..d4793a906 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/pom.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/pom.xml @@ -175,4 +175,24 @@ boot + + + + src/main/resources + true + + **/*.xlsx + **/*.xls + + + + src/main/resources + false + + **/*.xlsx + **/*.xls + + + + diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java index 1f3bac005..7e3511f83 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderTotalController.java @@ -1,25 +1,37 @@ package com.bsd.pjcloud.hard.controller.order; +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 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.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.excel.annotation.ResponseExcel; +import com.bsd.pjcloud.hard.api.constant.HardTypeEnum; import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.vo.order.HardOrderCsVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderSbVo; import com.bsd.pjcloud.hard.service.HardOrderTotalService; -import com.bsd.pjcloud.wallet.api.vo.recharge.excel.WalletTransactionTkExcelVo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.http.HttpHeaders; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; +import java.io.IOException; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.HashMap; import java.util.List; +import java.util.Map; @RestController @RequiredArgsConstructor @@ -44,24 +56,80 @@ public class HardOrderTotalController { return R.ok(HardOrderTotalService.pageListCs(page, dto)); } - @ResponseExcel @Operation(summary = "设备交易记录导出", description = "退款导出") @GetMapping("/export-sb") @PreAuthorize("@pms.hasPermission('hard_hardTotal_export_sb')") - public List exportSb(HardOrderDto dto) { + public void exportSb(HttpServletResponse response, HardOrderDto dto) throws IOException { dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes()); List list = HardOrderTotalService.listSb(dto); - return BeanUtils.toBean(list, WalletTransactionTkExcelVo.class); + try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(ResourceUtil.getStream("file/设备交易金额汇总.xlsx")).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + Map map = new HashMap(); + if (ObjectUtil.isNotEmpty(dto.getPayTimeList())) { + map.put("timeSpan", " 到 "); + map.put("startTime", LocalDateTimeUtil.format(dto.getPayTimeList()[0], DatePattern.NORM_DATETIME_PATTERN)); + map.put("endTime", LocalDateTimeUtil.format(dto.getPayTimeList()[0], DatePattern.NORM_DATETIME_PATTERN)); + } + if (ObjectUtil.isNotEmpty(list)) { + BigDecimal priceTotal = BigDecimal.ZERO; + BigDecimal countTotal = BigDecimal.ZERO; + for (HardOrderSbVo v : list) { + if (ObjectUtil.isNotEmpty(v.getHardType())) { + v.setHardType(HardTypeEnum.valueOfByType(v.getHardType()).getDescription()); + } + if (ObjectUtil.isNotEmpty(v.getTotalPayPrice())) { + priceTotal = priceTotal.add(v.getTotalPayPrice()); + v.setTotalPayPrice(v.getTotalPayPrice().divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP)); + } + if (ObjectUtil.isNotEmpty(v.getTotalPayCount())) { + countTotal = countTotal.add(v.getTotalPayCount()); + } + } + map.put("computeTotalPayPrice", priceTotal.divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toString()); + map.put("computeTotalPayCount", countTotal.toString()); + } + excelWriter.fill(map, writeSheet); + excelWriter.fill(list, fillConfig, writeSheet); + } } - @ResponseExcel @Operation(summary = "商户交易记录导出", description = "退款导出") @GetMapping("/export-cs") @PreAuthorize("@pms.hasPermission('hard_hardTotal_export_cs')") - public List exportTk(HardOrderDto dto) { + public void exportTk(HttpServletResponse response, HardOrderDto dto) throws IOException { dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes()); List list = HardOrderTotalService.listCs(dto); - return BeanUtils.toBean(list, WalletTransactionTkExcelVo.class); + try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(ResourceUtil.getStream("file/商户交易金额汇总.xlsx")).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + Map map = new HashMap(); + if (ObjectUtil.isNotEmpty(dto.getPayTimeList())) { + map.put("timeSpan", " 到 "); + map.put("startTime", LocalDateTimeUtil.format(dto.getPayTimeList()[0], DatePattern.NORM_DATETIME_PATTERN)); + map.put("endTime", LocalDateTimeUtil.format(dto.getPayTimeList()[0], DatePattern.NORM_DATETIME_PATTERN)); + } + if (ObjectUtil.isNotEmpty(list)) { + BigDecimal priceTotal = BigDecimal.ZERO; + BigDecimal countTotal = BigDecimal.ZERO; + for (HardOrderCsVo v : list) { + if (ObjectUtil.isNotEmpty(v.getHardType())) { + v.setHardType(HardTypeEnum.valueOfByType(v.getHardType()).getDescription()); + } + if (ObjectUtil.isNotEmpty(v.getTotalPayPrice())) { + priceTotal = priceTotal.add(v.getTotalPayPrice()); + v.setTotalPayPrice(v.getTotalPayPrice().divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP)); + } + if (ObjectUtil.isNotEmpty(v.getTotalPayCount())) { + countTotal = countTotal.add(v.getTotalPayCount()); + } + } + map.put("computeTotalPayPrice", priceTotal.divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toString()); + map.put("computeTotalPayCount", countTotal.toString()); + } + excelWriter.fill(map, writeSheet); + excelWriter.fill(list, fillConfig, writeSheet); + } } } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/file/商户交易金额汇总.xlsx b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/file/商户交易金额汇总.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a410a196818560cbcf969a09da6ab18f40b80511 GIT binary patch literal 9884 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 literal 0 HcmV?d00001 diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/file/设备交易金额汇总.xlsx b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/file/设备交易金额汇总.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..1ee074fd08d9a0c7660ca6ff28c6bf82612796df GIT binary patch literal 9978 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 BSY`kK literal 0 HcmV?d00001