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 1/7] =?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 From a5bfdd6ced2f63d4d6e00d945ebbe81f86e01621 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 22 Jan 2025 21:04:28 +0800 Subject: [PATCH 2/7] =?UTF-8?q?feat:=E5=90=8E=E5=8F=B0=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/dto/order/HardAdminRefundDto.java | 28 ++++++++++++ .../order/HardAfterSaleController.java | 12 +++-- .../hard/service/HardAfterSaleService.java | 16 ++++++- .../impl/order/HardAfterSaleServiceImpl.java | 45 ++++++++++++++++++- 4 files changed, 93 insertions(+), 8 deletions(-) create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardAdminRefundDto.java diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardAdminRefundDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardAdminRefundDto.java new file mode 100644 index 000000000..1e2d46b6f --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardAdminRefundDto.java @@ -0,0 +1,28 @@ +package com.bsd.pjcloud.hard.api.dto.order; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class HardAdminRefundDto { + + @Schema(description = "订单id不能为空") + @NotNull(message = "订单id不能为空") + private Long orderId; + + @Schema(description = "售后方式") + @NotNull(message = "售后方式不能为空") + private String way; + + @Schema(description = "退款原因") + @NotNull(message = "退款原因不能为空") + private String applyReason; + + @Schema(description = "相关描述") + private String applyDescription; + + @Schema(description="补充凭证图片") + private String applyPicUrls; + +} 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 f4df4ae41..be78ebb5f 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 @@ -10,6 +10,7 @@ import com.bsd.pjcloud.common.idempotent.annotation.Idempotent; import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.common.security.service.PjcloudUser; import com.bsd.pjcloud.common.security.util.SecurityUtils; +import com.bsd.pjcloud.hard.api.dto.order.HardAdminRefundDto; import com.bsd.pjcloud.hard.api.dto.order.HardAfterSaleDto; import com.bsd.pjcloud.hard.api.dto.order.HardDisagreeDto; import com.bsd.pjcloud.hard.api.entity.order.HardAfterSaleEntity; @@ -76,10 +77,13 @@ public class HardAfterSaleController { } /* ************************************* end app end ************************************* */ - @GetMapping(value = "/refund") - @Operation(summary = "查询售后进度") - public R refund(@RequestParam Long id) { - return R.ok(hardAfterSaleService.refund(id)); + @PostMapping(value = "/admin-refund") + @Operation(summary = "后台退款") + @Idempotent(expireTime = 10, info = "正在退款中,请勿重复操作") + @PreAuthorize("@pms.hasPermission('hard_hardAfterSale_adminRefund')") + public R adminRefund(@RequestBody HardAdminRefundDto dto) { + PjcloudUser user = SecurityUtils.getUser(); + return R.ok(hardAfterSaleService.adminRefund(dto, user)); } @GetMapping(value = "/history") diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAfterSaleService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAfterSaleService.java index 6ff3615e4..908eb2e4a 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAfterSaleService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAfterSaleService.java @@ -2,6 +2,8 @@ package com.bsd.pjcloud.hard.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.bsd.pjcloud.common.security.service.PjcloudUser; +import com.bsd.pjcloud.hard.api.dto.order.HardAdminRefundDto; import com.bsd.pjcloud.hard.api.dto.order.HardAfterSaleDto; import com.bsd.pjcloud.hard.api.dto.order.HardDisagreeDto; import com.bsd.pjcloud.hard.api.entity.order.HardAfterSaleEntity; @@ -20,6 +22,7 @@ public interface HardAfterSaleService extends IService { /** * 申请售后 + * * @param dto * @return */ @@ -27,7 +30,8 @@ public interface HardAfterSaleService extends IService { /** * 取消售后 - * @param userId 用户id + * + * @param userId 用户id * @param afterSaleId 售后id * @return */ @@ -51,7 +55,7 @@ public interface HardAfterSaleService extends IService { * 同意售后 * * @param userId 用户id - * @param id 售后id + * @param id 售后id */ Boolean agreeAfterSale(Long userId, Long id); @@ -63,4 +67,12 @@ public interface HardAfterSaleService extends IService { * @return */ Boolean disagreeRefund(Long userId, HardDisagreeDto dto); + + /** + * 后台退款 + * + * @param dto + * @return + */ + Boolean adminRefund(HardAdminRefundDto dto, PjcloudUser user); } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java index 342c2755e..fcb2b4489 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardAfterSaleServiceImpl.java @@ -17,12 +17,14 @@ import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.CollectionUtils; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; +import com.bsd.pjcloud.common.security.service.PjcloudUser; import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum; import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum; import com.bsd.pjcloud.hard.api.constant.refund.HardAfterSaleOperateTypeEnum; import com.bsd.pjcloud.hard.api.constant.refund.HardRefundStatusEnum; import com.bsd.pjcloud.hard.api.constant.refund.HardSaleStatusEnum; import com.bsd.pjcloud.hard.api.constant.refund.HardSaleTypeEnum; +import com.bsd.pjcloud.hard.api.dto.order.HardAdminRefundDto; import com.bsd.pjcloud.hard.api.dto.order.HardAfterSaleDto; import com.bsd.pjcloud.hard.api.dto.order.HardDisagreeDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; @@ -216,7 +218,10 @@ public class HardAfterSaleServiceImpl extends ServiceImpl walletRefundResult = walletRechargeService.refund(hardRefundDto); - WalletRechargeVo walletRefund = Optional.of(walletRefundResult).map(R::getData).orElseThrow(() -> new RuntimeException("钱包退款错误")); + if (walletRefundResult.getCode() != 0 || ObjectUtil.isEmpty(walletRefundResult.getData())) { + throw new RuntimeException("钱包退款错误"); + } + WalletRechargeVo walletRefund = walletRefundResult.getData(); HardOrderEntity updateObj = HardOrderEntity.builder() .id(order.getId()) .orderStatus(HardOrderStatusEnum.REFUND.getType()) @@ -303,7 +308,7 @@ public class HardAfterSaleServiceImpl extends ServiceImpl Date: Thu, 23 Jan 2025 10:03:52 +0800 Subject: [PATCH 3/7] =?UTF-8?q?feat:=E9=92=B1=E5=8C=85=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/SysUserController.java | 1 + .../wallet/api/dto/WalletManageDto.java | 4 + .../controller/WalletManageController.java | 16 ++-- .../WalletTransactionController.java | 12 +-- .../wallet/mapper/WalletManageMapper.java | 25 ++++-- .../wallet/service/WalletManageService.java | 23 +++--- .../service/impl/WalletManageServiceImpl.java | 74 +++++++++++++++--- .../src/main/resources/file/账户余额.xlsx | Bin 0 -> 10046 bytes 8 files changed, 117 insertions(+), 38 deletions(-) create mode 100644 pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/file/账户余额.xlsx diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java index bd43c2dd3..df43e0495 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysUserController.java @@ -20,6 +20,7 @@ package com.bsd.pjcloud.admin.controller; 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.admin.api.dto.UserDTO; diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletManageDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletManageDto.java index 4ec219993..d9470b02e 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletManageDto.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletManageDto.java @@ -3,6 +3,8 @@ package com.bsd.pjcloud.wallet.api.dto; import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity; import lombok.Data; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; @Data @@ -12,4 +14,6 @@ public class WalletManageDto extends WalletManageEntity { private List walletIds; + private LocalDateTime[] createTimeList; + } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletManageController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletManageController.java index 091b42029..57015aced 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletManageController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/WalletManageController.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.data.datascope.DataScope; +import com.bsd.pjcloud.common.data.datascope.DataScopeFuncEnum; import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.common.security.annotation.Inner; import com.bsd.pjcloud.common.security.service.PjcloudUser; @@ -18,6 +20,7 @@ import com.bsd.pjcloud.wallet.api.vo.WalletManageVo; import com.bsd.pjcloud.wallet.mapper.WalletManageMapper; import com.bsd.pjcloud.wallet.service.WalletCodeUseService; import com.bsd.pjcloud.wallet.service.WalletManageService; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.security.access.prepost.PreAuthorize; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; import io.swagger.v3.oas.annotations.security.SecurityRequirement; @@ -112,7 +115,9 @@ public class WalletManageController { PjcloudUser user = SecurityUtils.getUser(); WalletManageDto dto = new WalletManageDto(); dto.setUserId(user.getId()); - return R.ok(walletManageService.pageJoin(page, dto)); + DataScope dataScope = new DataScope(); + dataScope.func(DataScopeFuncEnum.ALL); + return R.ok(walletManageService.scopePageList(page, dto, dataScope)); } @Operation(summary = "分页查询", description = "分页查询") @@ -142,7 +147,7 @@ public class WalletManageController { @GetMapping("/page-join") @PreAuthorize("@pms.hasPermission('wallet_walletManage_view')") public R getWalletManagePageJoin(@ParameterObject Page page, @ParameterObject WalletManageDto dto) { - return R.ok(walletManageService.scopePageList(page, dto)); + return R.ok(walletManageService.scopePageList(page, dto, DataScope.of())); } @Operation(summary = "通过id查询", description = "通过id查询") @@ -175,11 +180,10 @@ public class WalletManageController { public R removeById(@RequestBody Long[] ids) { return R.ok(walletManageService.removeBatchByIds(CollUtil.toList(ids))); } - - @ResponseExcel + @GetMapping("/export") @PreAuthorize("@pms.hasPermission('wallet_walletManage_export')") - public List export(WalletManageEntity walletManage, Long[] ids) { - return walletManageService.list(Wrappers.lambdaQuery(walletManage).in(ArrayUtil.isNotEmpty(ids), WalletManageEntity::getId, ids)); + public void export(HttpServletResponse response, @ParameterObject Page page, @ParameterObject WalletManageDto dto) { + walletManageService.export(response, page, dto); } } \ No newline at end of file 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 595385e48..108bd2c99 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 @@ -149,28 +149,28 @@ public class WalletTransactionController { @Operation(summary = "充值导出", description = "充值导出") @GetMapping("/export-cz") @PreAuthorize("@pms.hasPermission('wallet_walletTransaction_export')") - public void exportCz(HttpServletResponse response, WalletTransactionDto dto) { + public void exportCz(HttpServletResponse response, @ParameterObject Page page, WalletTransactionDto dto) { dto.setBizTypes(List.of(WalletBizEnum.RECHARGE.getCode())); - List list = walletTransactionService.pageList(dto); + List list = walletTransactionService.scopePageList(page, dto, DataScope.of()).getRecords(); walletTransactionService.exportByTemplate(response, dto, "file/个人充值明细.xlsx", list); } @Operation(summary = "消费导出", description = "消费导出") @GetMapping("/export-xf") @PreAuthorize("@pms.hasPermission('wallet_walletTransaction_export')") - public void exportXf(HttpServletResponse response, WalletTransactionDto dto) { + public void exportXf(HttpServletResponse response, @ParameterObject Page page, WalletTransactionDto dto) { dto.setBizTypes(List.of(WalletBizEnum.PAYMENT.getCode())); - List list = walletTransactionService.pageList(dto); + List list = walletTransactionService.scopePageList(page, dto, DataScope.of()).getRecords(); walletTransactionService.exportByTemplate(response, dto, "file/个人消费明细.xlsx", list); } @Operation(summary = "退款导出", description = "退款导出") @GetMapping("/export-tk") @PreAuthorize("@pms.hasPermission('wallet_walletTransaction_export')") - public void exportTk(HttpServletResponse response, WalletTransactionDto dto) { + public void exportTk(HttpServletResponse response, @ParameterObject Page page, WalletTransactionDto dto) { dto.setBizTypes(List.of(WalletBizEnum.REFUND.getCode())); dto.setIsFindOrder(true); - List list = walletTransactionService.pageList(dto); + List list = walletTransactionService.scopePageList(page, dto, DataScope.of()).getRecords(); 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/mapper/WalletManageMapper.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletManageMapper.java index bdcbde69b..e1c871278 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletManageMapper.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletManageMapper.java @@ -13,7 +13,6 @@ import com.bsd.pjcloud.wallet.api.entity.WalletTypeEntity; import com.bsd.pjcloud.wallet.api.vo.WalletManageVo; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; import java.util.List; @@ -59,7 +58,7 @@ public interface WalletManageMapper extends PjcloudBaseMapper pageJoin(Page page, @Param("pa") WalletManageDto dto) { + default List joinList(WalletManageDto dto) { MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .selectAll(WalletManageEntity.class) .selectAs(WalletTypeEntity::getName, WalletManageVo::getWalletTypeName) @@ -70,8 +69,14 @@ public interface WalletManageMapper extends PjcloudBaseMapper list(WalletManageDto dto) { @@ -95,14 +100,20 @@ public interface WalletManageMapper extends PjcloudBaseMapper scopePageList(Page page, WalletManageDto dto) { + default Page scopePageList(Page page, WalletManageDto dto, DataScope dataScope) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper() .eq(ObjectUtil.isNotEmpty(dto.getUserId()), WalletManageEntity::getUserId, dto.getUserId()) .eq(ObjectUtil.isNotEmpty(dto.getWalletTypeId()), WalletManageEntity::getWalletTypeId, dto.getWalletTypeId()) .eq(ObjectUtil.isNotEmpty(dto.getIsFreeze()), WalletManageEntity::getIsFreeze, dto.getIsFreeze()) .in(ObjectUtil.isNotEmpty(dto.getWalletIds()), WalletManageEntity::getId, dto.getWalletIds()) - .in(ObjectUtil.isNotEmpty(dto.getUserIds()), WalletManageEntity::getUserId, dto.getUserIds()); - Page list = selectPageByScope(page, wrapper, DataScope.of()); + .in(ObjectUtil.isNotEmpty(dto.getUserIds()), WalletManageEntity::getUserId, dto.getUserIds()) + .between( + ObjectUtil.isNotEmpty(dto.getCreateTimeList()), + WalletManageEntity::getCreateTime, + ObjectUtil.isNotEmpty(dto.getCreateTimeList()) ? dto.getCreateTimeList()[0] : null, + ObjectUtil.isNotEmpty(dto.getCreateTimeList()) ? dto.getCreateTimeList()[1] : null + ); + Page list = selectPageByScope(page, wrapper, dataScope); list.setRecords(BeanUtils.toBean(list.getRecords(), WalletManageVo.class)); return list; } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletManageService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletManageService.java index 55af4c61d..53feeb7b6 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletManageService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletManageService.java @@ -3,10 +3,12 @@ package com.bsd.pjcloud.wallet.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum; import com.bsd.pjcloud.wallet.api.dto.WalletManageDto; import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity; import com.bsd.pjcloud.wallet.api.vo.WalletManageVo; +import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotNull; import java.util.List; @@ -47,6 +49,7 @@ public interface WalletManageService extends IService { /** * 获取钱包(没有缓存) + * * @param cardNumber * @return */ @@ -70,7 +73,6 @@ public interface WalletManageService extends IService { */ WalletManageEntity getWallet(@NotNull Long walletId); - /** * 根据用户id删除用户钱包 * @@ -79,16 +81,9 @@ public interface WalletManageService extends IService { */ Boolean delWalletByUserIds(List<@NotNull Long> userIds); - /** - * 分页连表查询 - * - * @param page - * @param dto - * @return - */ - Page pageJoin(Page page, WalletManageDto dto); + Page scopePageList(Page page, WalletManageDto dto, DataScope dataScope); - Page scopePageList(Page page, WalletManageDto dto); + List joinList(WalletManageDto dto); WalletManageVo join(Long user, Long walletId); @@ -98,4 +93,12 @@ public interface WalletManageService extends IService { * @param walletId 钱包id */ String getQrCode(Long walletId); + + /** + * 导出 + * + * @param response + * @param dto + */ + void export(HttpServletResponse response, Page page, WalletManageDto dto); } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java index 146841a91..aaad3d1ea 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletManageServiceImpl.java @@ -1,8 +1,15 @@ package com.bsd.pjcloud.wallet.service.impl; import cn.hutool.core.codec.Base64; +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.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -18,6 +25,7 @@ import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.CollectionUtils; import com.bsd.pjcloud.common.core.util.R; +import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.data.resolver.ParamResolver; import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum; import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum; @@ -31,11 +39,13 @@ import com.bsd.pjcloud.wallet.api.entity.WalletTypeEntity; import com.bsd.pjcloud.wallet.api.utils.WalletDataUtil; import com.bsd.pjcloud.wallet.api.vo.WalletManageVo; import com.bsd.pjcloud.wallet.api.vo.WalletSettingVo; +import com.bsd.pjcloud.wallet.api.vo.transaction.WalletTransactionVo; import com.bsd.pjcloud.wallet.mapper.WalletManageMapper; import com.bsd.pjcloud.wallet.mapper.WalletTypeMapper; import com.bsd.pjcloud.wallet.service.WalletManageService; import com.bsd.pjcloud.wallet.service.WalletSettingService; import com.bsd.pjcloud.wallet.service.WalletTypeService; +import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -45,6 +55,9 @@ 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.time.LocalDateTime; import java.time.ZoneId; import java.util.*; @@ -206,28 +219,28 @@ public class WalletManageServiceImpl extends ServiceImpl pageJoin(Page page, WalletManageDto dto) { - Page list = baseMapper.pageJoin(page, dto); - if (ObjectUtil.isNotEmpty(list.getRecords())) { + public List joinList(WalletManageDto dto) { + List list = baseMapper.joinList(dto); + if (ObjectUtil.isNotEmpty(list)) { // 用户 - List userIds = list.getRecords().stream().map(WalletManageVo::getUserId).distinct().toList(); + List userIds = list.stream().map(WalletManageVo::getUserId).distinct().toList(); R> userList = userService.getUserById(new ArrayList<>(userIds)); if (ObjectUtil.isNotEmpty(userList.getData())) { - DataUtil.convertUserList(list.getRecords(), CollectionUtils.convertMap(userList.getData(), SysUser::getUserId)); + DataUtil.convertUserList(list, CollectionUtils.convertMap(userList.getData(), SysUser::getUserId)); } // 部门 - List deptIds = list.getRecords().stream().map(WalletManageVo::getDeptId).distinct().toList(); + List deptIds = list.stream().map(WalletManageVo::getDeptId).distinct().toList(); R> deptList = deptService.getDeptByDeptIds(deptIds); if (ObjectUtil.isNotEmpty(deptList.getData())) { - DataUtil.convertDeptList(list.getRecords(), deptList.getData()); + DataUtil.convertDeptList(list, deptList.getData()); } } return list; } @Override - public Page scopePageList(Page page, WalletManageDto dto) { - Page list = baseMapper.scopePageList(page, dto); + public Page scopePageList(Page page, WalletManageDto dto, DataScope dataScope) { + Page list = baseMapper.scopePageList(page, dto, dataScope); if (ObjectUtil.isNotEmpty(list.getRecords())) { // 用户 List userIds = list.getRecords().stream().map(WalletManageVo::getUserId).distinct().toList(); @@ -267,6 +280,49 @@ public class WalletManageServiceImpl extends ServiceImpl list = scopePageList(page, dto, DataScope.of()).getRecords(); + 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 balanceSum = BigDecimal.ZERO; + BigDecimal totalExpenseSum = BigDecimal.ZERO; + BigDecimal totalRechargeSum = BigDecimal.ZERO; + for (WalletManageVo v : list) { + if (ObjectUtil.isNotEmpty(v.getBalance())) { + balanceSum = balanceSum.add(BigDecimal.valueOf(v.getBalance())); + v.setBalance(BigDecimal.valueOf(v.getBalance()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).intValue()); + } + if (ObjectUtil.isNotEmpty(v.getTotalExpense())) { + totalExpenseSum = totalExpenseSum.add(BigDecimal.valueOf(v.getTotalExpense())); + v.setTotalExpense(BigDecimal.valueOf(v.getTotalExpense()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).intValue()); + } + if (ObjectUtil.isNotEmpty(v.getTotalRecharge())) { + totalRechargeSum = totalRechargeSum.add(BigDecimal.valueOf(v.getTotalRecharge())); + v.setTotalRecharge(BigDecimal.valueOf(v.getTotalRecharge()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).intValue()); + } + } + map.put("balanceSum", balanceSum.divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toString()); + map.put("totalExpenseSum", totalExpenseSum.divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toString()); + map.put("totalRechargeSum", totalRechargeSum.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()); + } + } + private WalletManageServiceImpl getSelf() { return SpringUtil.getBean(getClass()); } 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..e0c7f7c366c8256b0e0094e3d074e4370d9bb6fe GIT binary patch literal 10046 zcma)iWmp|c@;4UT-Q9z`6Wrb134X}IgS!R|5CQ>$y9a`6aCg_>?jGJlvU_uHcK`dl z{h?>3Pf4Gu>6-4UpRybz6g=2-3sqcy^?dzzg9F`|1I(0x07oZgWe^!AXaM#nnYw$l z6g@Z?7&8PI80z22OdK7V-0kf?#kI?Jv0zGE2RxxxWytV{Nz1S!hV9ri6dak|@nKjc z#0m^Vt*mzkuabN{17JQNPGHw$mn}A5A8l^wcO*B~k`dixmiAfmDba#w+vN^X=g(|@ zJBW(+8&|KYga$T*zDi!d3By_DJ1HQG#WfLCtP5i@V<=#(VH?c0%Tm=_k&P-|VbPn> zZLimGW5hL&q~x`z5M#koXTQdh?&&J&dLMutIdmtCR5q6 zZufROne=`+cv1*<*<{*ZbYEuly7D$4UJox*Y0#RcISJYf2p~u{anOIoylj-dY)B$R zoWUD;=T6XF=)$*;5r-VYLx_Lx7e@gf8kE}&-O<35(eemj1#^7(s#+#<#{;FNbejj55v(1UE1%ZOJFYFsi4l@(ZP|JHg4f!+p%#UX=Ju=Y#c-xf7z@ zz1Oh7S7)L*K-7VW2B<0|V`@+nVvOOvJmKyVl`(F)eSKrMxB=gz7i~QE17vzGNy3&)pkx<=G zl-h5jMW~Dpr&teR37>edQ0wGKo!^6Y6jh96DW6)obmaoSZk*^P*y1A~;M=m;+A1h< zQ|D0V5)O^jQCVrFW}2-Z6e=}=CJTXnVX)pP0+79{!BG`0E84C*(qc^&X+b_EG3B9x zoJT2G*+=E}%NcHdW=qhv|SD=Dif$b-G#ey1g9Psq{ zdpfm3t&!Y<#eF3yG3I2mtjxrcXu^9+1B0$7ha?v)6vGRircU;eLGxlQ*0(TaLz(8t z5G0T>a(N9RN5GSdul{f+QT7%y(XwZRg!SOX>v!~xGdAn<$cygCWD3Yv(~5FIhzm|* z_$%MWshY>LzLZV!=iK=iH)+~o>+6cMM5Cs@(|}Mk;&I$!M7b*ORjf?-G$%w%ldor< zagsfQ!0*iKUffw!CPpYao`Z$xsNC^BkF^V~JBM0Y;r<8hPZri^UnOc708&{ny)$Z_{2mNpWj=DKNKb|2q}Iqx z31tvD$&^4?)?&>2w%YRhgN;o#lkx~%?=S8TtpDH~X`+z+CV>_=N`i_4PmOMPKz?@K zv$YlNE;~W~Ifa FW=jc(xHLLG?Xy9?}X$5R;zVvvj}%m9{oCjo#?J@~RBIxgw`e zzd@!f97m<32R0&1piHcqA?mgX)5?Ze4&7^11lQirqr>4rQ8t4{haQE)%Z3SVw{n!F z71K^aICR}dIafH*p0}H6GM~kZys6LHa;M9I*n_$*TP52&5!$?o%%Nw{M9JEVNw4)= z=YS({{tgf78k<_VXF6~C*F`fO@%;>m-eY^nb5aciAGTE^CPfBiN90|m2XT<2tUXxE zqt-Hf;sikEJb3wP5 z`ejBt-ugt>R*Ic7G()Mr?Y)pSZ}rH!MoWofzfw@o@H@W3S4+9!$z9K6H*CY<5e*4N z!~4SOj2;&bH!L0!ce1;=h$wgpyxXG(syLitvlP$L*}1bhL3bvAV{7mRjvaCaw!Nsz z#otXvprc3WL8tiGB<1p<0sVbp&K6hjIbBg7;yw5-G#T+ct$55pJ2_95<3X3ZbJXXd z@ed^puNGfS8yHW#NN4f`!zi!rIeVh<%rU!~jpDnnNbt^JwPV-x?k*S#yN`O4T6x6o zun?t?!D`K(eivmuWMv(+iT^I-Qvac`Q(Ed>HxB;Nl+Piez!hFKm)X?opiivf<;r}` z+D4z9KUUU@?mBPm!sl8`$#QYXd;?TCUg+`_lltXSeQ z@Dk`@8{8^EaSTm#hA}E!JQel8%h>_0ZfM3kFweU&%0^}d>3u$>ar`mA(TeM+h3Ivl zNgpKSYmDkvTbUWI^K_8x3;utv!RPNhXbn1BS=d|r@tv0^N*Y~w0R~2j_bUkgMfQ{U z=fXPFQ2-Edqc-F0_-Y?C$C>X_u#v;m3awMSqKnH$5EdHPB%`_2lhW}wVD(kL^3Sp! zlk;DGOFIuO?PoY{w815j3UP}-1k`$|nq|||OU7twM0u3DwlR2uRNnx+G!bn!8+>76 z-BWH*bVsZRi5<_ecjG1%7{hd*9!raaWiZ7V19eT6Mk&`zIP${dTw3tDI%*7bV_&zmTBUY3 z`e1xmS`zwvcOn8sTX?dqEV+8OD65`OJW*G+4wT$u6-r8hog0nEZ7tVw^-)C=@l9yG zPKV4V_{I*>G>2VY4-O`p(iwuwEyGdKYnV@~)I z@P1)FuWQ}r!;it-4}kJF%eDo+2<0O6Pj~n}EIXo@j7`v+H{JLxh5&n)eQd)(pqCTU zO3~5f9wUf~m1@@+$-thYt}${dDHbjpM$x@dg`}nyep?PxT};QoCIU`wGf!7;6tWuz zO!-v=rHml&$O+U714BLa^>Yl z4>xz;*pDwG^YdfUGlcFoFHScmq=dIy7&;-}OXjT=AGhAzFDNy)rh8xS^=UaYv7EL( zUCaSmeRiQcgml^7-d;`!rwe=E4sHAXIOzgk*|4(fkfLnwXbe|s;%D&xvfDO0c>19= zndxAN#cgWT&~5X7vK*LZHw zt05l;!cMG`B#-)T2fLO;c4j%rEH`JNrp6(f@)3Yc*_H>Ju4es^&ZHYU2idt zglWeFIphFlvsn9#d(EP)T2@cK<)f)rXA3i%xtM{n#hu1J>(krE<{PJ;qO?T)yx&4a zGumEoWIBQc_A46kz40I#Fuf^oWs^5vBag0m*OT%P)a#C$ji`9cX~Y{YzQ%`c*bTLa ze_1h6*D;|3?CN-!)+sI|uw){J=-YJvq7vQtPGoDx($*t^e#y2ruH}>omUe-g%tYQY zVb(R)iV<2P_TmvgV2kv#)|IAq4G{y=%j-z>(n>HJ3(eJ_@9p(P8{B)w5R#7eqL`ud zN*+Zxb5ng@sVU2t^2HEEC#u;6einHP5&PYng;SfkuF>*(lu^KHnVsGpVro;&^(?-r z9S^G}>#~J`_qrGAv=Q349J*=roV^jR#>FD~hIvj{mfMt*-I~bC(t>3h z;)hR0hrh<7iZqQ_G^H?57UwiO>oUTn8pkf~G{?@Up<*ymYC4S=$yI?q5XtEgI7Qwy z$~1(WA$MK$y%tBe4yZ`m2nE#?m65%lo=t{3nUtV2iMio|r}@z!YQEX5vW>mqQ@#vt z(Te_8gK)h$inNLL)nGp1*-}kLL{Qj0z^YI+OPduX&Z}*efjs<>@U*yYo4A1jN4_E$mO7{E&=G$?GL4REZZ( zKkt^&e;2(s<`R?Px?!wskIbBEwx^Ry68d<>-dajit#XTqQe6E;taSokU`Yap(P#F) zr>!%Vq=^#0ztAs0sp5l>&kd~oSC0Y30BCnRcHX)edjjpU@9j`x#0wvGWb)aPO*~6! z(?2M7>1C$QGDkTr7liNQrfw8767X!W|2RsuyK#8fkNrk6wfysw{@Xw2!tDvoApdlO zcEc#YcfzIsfbGwdqnZk61B~he+5j8he!`6(eSujZ3a6W!S2WJCkWP&fZH#4So*HL8 z@0;O2>afRg>b!V+e{|HyKRvTuB)%d-PwnpaDdip7iMn}I2E>E2bP1NEtXle*sw3

fO6#K}|(sEHFYYP4L$-;x;Z6;diwM!kp4(q`6h@fS;cq_e}xUTOi$dLuG z=aC_tbbQSUp7D!}v)d~$$@RFzz9LLGk@z0Sp_qTwo2gNLIxNAskzyqb!H+c`HEJ;L z+C$~L>NyrNqt|sGJ(%NpJw53p|0W{^#Uqth(8D~ZMxKOnPafrh(DTRzmS>+o*E15o z58{Cxs1?_IvNg^22Hkeoy%tMCOK#v@LhyZiIH1FUr(cJi&NzTx)lTI|9>So9b7H zTrn!$7CL8?`qWP>alWPQ-VFJ)-U4TRh~;8^k>7v#l-h{Tt<-JA@__Wuqp6xtZYDVr z7#Nl{7#QgCb0s=^*jfBsf=dR6F$>aoPtjdZ#<>9~VI1KbP3{1<0S8ycPwJl|u!Eoq zfatGhI>G}tY8pco=`Up0l;f2BJ9a6f`4i9lnH)*W_{!X#PUL@Vre{jQ~WG9;A+jHl#(@@-<4$YE1kDO!^NdsauIhfcklW2z|Dk~FUOZ9?*0Q5 z#?yDHs)g&39bTKXMv@mR%*53&4AfUxN%;5i&AmC|f<-|zmq1Qaqnm&YpH10@INA5U z@;ZBh8J-7vBg0+CYVQl($Cj1}XR}#)fkavI%XR?8<#>l(Z1n{EaOII&J1I6P?~Pu+ zuXWaw7oXev2Niv8*KfsikCff0l@)NU4aknIs7_^(75o@HbWBudpBi)CGb>RW#ju@i z&E{0owhGjXX3YO&jAlwlf!!}NEFGB{mJ%x>U+kAiB)tfhFOVs#qP8MM6_ymf15J(wv?mgh1`G^VJ?0SJY!g)h zWjyAzSC*a_Aur0-qBw4J&(Z;eF`x6<0?-f(fmovT6&L>5Bs1n8)vD0s?FJ4o7?JtB zMwIiG>Kray60V?LN-vcZNl5t**BnY-{6HBjnQK|du?*yfA;V3g9#uP=AG zN~S=F9n(!Oc{Jbz5WcmCFBRkM5JaV@r^Y+eVy;uyu%G#O=&Gl&_hoYc;OF&aSu>Tb zKxK%a=*|5;Y0H#V4FRWyri}+Tc=`iX${cMe*P!$d*^a31<&=Xpo{7Hp4rM&QM@rM2 z(r2t{Gzl#!eW^?&&$Q4j`Ig@M+J|68ByRmRwngOvZp`{R_ZI=>6KAJQ0fu)O?uWhWAW{ifqj;W(E&R<5x2eaND@&l}9&fu&PF7gOFF7kjV&{gY8B|yn!U)E2GIX;Z6Kh@^|XT0lBUz)tanM^@b4@X_5 zl29Sg#l0cQb@=VBXJj#*zPFJbyOzL^ez_8qK}oua&Ww!FPGewZMsDmUaVf}}FECsN zaS9~n*Qg#rQ*g&|mxZ&ThYCwOXDLe0ho0 zzY*&bTTWV2e6FENT_R$oRx_S7w?nllG~1_wOQcc@>C(BAC+5KYWPw+Fv!*IB-jTs|TJ(WG-Xe6e=lfMlK z@~ne8?Sb_z;;82?$D;XbJ&Z(?;o@T8m!R$S*S&ZBPD(GBhpThn*2tnzoc03wUQHU^ zP{m|fTf6&moJ=3>2I1&wmVYvnAe0fi3_@UR!jUt>(6Q4+f>%*+ZJr~0V*fa}ImKT? zbk3+PB-V(qevg#15G~YVLfD=TUi*@w_Lem8NBA=Ot`V4b`>pL7U=rIevNI3NX0hmk zhG1`;G(LyT`EgpoVh5%ywSSaOpF42|75Bvnn}SE|_t9<+A3fbzbSmJ&kf!z3!Q5_w z8>&Eq+C+dEE<=w_p~4TeFt+&UJ&t{ zqP!Pj_Ugj}!d}RtTfPWEu}9+4Vk41~)|S$B#~Qw?a*(uSvTvbSW&0+@ILs?>WV5&D zOgWxf+^$Z}Z_A1AfxV+Ib4=V$#TQxbzi&(=Fb@-dYVtb%G(jtfhZ%fvF{z-w^^oDq z+xS$*92=!13b8W^yY6y#F;Z>R%KxL+Oao$gPp&0 z(2=nB85%8j>v>SJBo2n?dWLrDH4`WM>ijQ_7<9mN=#Ufv;rG0DMuXAbTB4B@mTgi)1^HSmNtSyteEk4lhq0_4V)^5Vd={A8LK2y|kM z1Ivg4)AN|4!KWMdtJS({Pq%FnFYM8?uYR6mQ0utg&1#$-SP`ojN+!;I7c*9FW0<2A zFUZiz@+@OAU^YFZdqt%Og?Qom&#hvEt#}&GCvZm6p(zEh&B?GWGrZs4T{rrj&P_iy6HHfy( zKK7D~fVkR)%o3v+y=qObrUAA7newDpBd8b4n953LU%+y$YDlYHwl}1Q!A=;vLgoT= zE5&5@73cZ34SLb9G7DBu%3q6=nqeiDUkYs&6C|w?B#pHgmNj)JF%~I^z?MSXAxle? zYn5bBGECoJ3(PcK%MZ(vw9D>!RKSuzbddTjm3b#c9oa8J0U*IaoA&6S$V`hbW;&<8 z5VCjWNp0~?qH4QN@@krHe=~OqJOXn=kzbWJGkgEv6k+{uAou+B}e*lZsBZ6 zQ{n6bvS9lG2{0nK997LX7} z7*;=2uxd4h+_o@R``>Yr5kiqCZ#jkw$&@JK^3)v4GSrLPJK4E-zs&rR7sz5ISWTLQ zsrX`xH+9tOG}O$<{Y5p6W|gK}x>sU(H9I7;ve@L!YeoJ-ebvu*PwP7jmsbLY{kVk$H>T~_)J|T3$MwfXNJHI%-M}ZHm`Y+*RcoEmvbE;I zrp=e^Bkr1_y#C8N69zQ=dO-W-lOy(0uG{{yPz__CEDXi$Nn|u}LO)3dia+jf-NAy$ z8$L?~`lI;@;&*ZrWI)wj|6TdTXnTdwlLhj0E@!KBapT>}GiUuo^>lbJm$JraUM>hc zXV_TT&i4_qm1Qo{q0I;1IPsv+b35NqC7hZVZ(7RP*YY0%)h4d`W%HLAj-C0wR5i4M z9&HX?v#S%ZXWcW6^YE+m3YbuWv~yN<3*WEHqz~e+guPtL86!8D$zS>!T{xDGE9g0i zGtL;zBhptR*90qEh(R9QEzlP#pZOtP(UcM``Vvx%9jVw?;~0OM5>+Z+5gXlGsxI&3 zT*&9$=LxRF*a$@8KuyGX{@KSjE)W!^H!l^4F!19Zmy#Ol%KJ85UFr-p_aw7RxLmI@ z6?PAf4y|o8%3PPB9phIJ=6Qxjo@c*3&hXx&{jDQw)e-@cMd0d;GK)NSEh;Bo?%GQM(k0DPkRIxe9Z-#XXQuZ-fm;Ia=b0$u47^lF z*+Tj060FB|)s*F1XbqH?W>82?T+@iF}<1rX}%z;toT zD*QKd_S($>4?t#Y0GSgXbOmLSevv&_`Tm`+_?LARY&uy`gRg^^MFv}vJ|(Hjez%h) zTbLH~i|tMdXM`KN=&37rBzr@eLjZsRKsR3xNiQso@PskTPr{UE(#xXmC{#2bV|sCv zyD5=|eW`m3ON=EiT~Q1G)B<>{hLd|Qw`i8L zgPy6@f1dFRPIaALgR(hDpz6zW`B_g4;NWcG;B2Js;b`Gx@SM>peLtWG!HOAjP2JL& zqsOl1XcA>&yk=2Ixehsb)y8p=lpb($l}=|2A>tpED#Lep+xqm-j41iiHiAlga(Sx6 z=u#V8@onx>i6u!w@>x38haj~McNk7R$f~iEI~x`qn6`i-qUjPDIswP%D)5&TXW)cG z^4>M%V=Tk&s6ZymHh^a{KU1^Zs%nZZ5*MLByE=nBeY)0#=LThfh^Bx8c5TVWaMY+I z@;J2?=RH4F2RJN^Eza2;KW_8D)9fJEEw{GXqjy>1x+1LDtj+LpTwl+Cgx;?dLyB58 zqGvBA3X@*pBgmntkJgsFO7y2Bqec==e=?UNSp(iMW!K)Bu0tf$C9|X8C+Td--}F1$ zi9=nclYf#vknceip|t~x=bTEvIw~NHY`%<}hW@ei3R_S_(YerX8_?yt>UOI`3VyyL{OaSKG?abl!e$#`OTLEC&vO`7`7B3;Xh?XF$#Y z0|z4o_2Fdy)la_!{P*(qbHw@8o?$d+#J}UuKb8I&fu4DODa9uFH_y)%^S_imFUeo+ zS=n>@8@%VA`u+s?JQM%YNAq{Kf5CnJG|`_hmfzgIpjY}YrT+%C{K@_&^x`)=JSeyM zoBb~!#{c@$&j^EG?I%zP>Swt5Ukv}Wk`U?N;?tiK{WFj~>-l9Ri@&q|M_Bt)&Y!9E z-*N~*_=o?NX#Z2fpDDrL5^_N}qGt(zB?$lj|N9QiPu71IhX477{8<|Qtq}zT#Q Date: Thu, 23 Jan 2025 13:12:31 +0800 Subject: [PATCH 4/7] =?UTF-8?q?feat:=E9=83=A8=E9=97=A8=E4=BA=A4=E6=98=93?= =?UTF-8?q?=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant/order/HardOrderStatusEnum.java | 6 + .../dto/order/HardOrderSumAndCountDto.java | 17 +++ .../hard/api/vo/order/HardDeptTotalVo.java | 33 ++++++ .../api/vo/order/HardOrderSumAndCountVo.java | 18 +++ .../order/HardOrderTotalController.java | 8 ++ .../hard/mapper/order/HardOrderMapper.java | 4 + .../hard/service/HardOrderTotalService.java | 3 + .../impl/order/HardOrderTotalServiceImpl.java | 81 ++++++++++++++ .../mapper/order/HardOrderMapper.xml | 28 +++++ .../admin/api/feign/RemoteDeptService.java | 5 + .../admin/controller/SysDeptController.java | 6 + .../dto/WalletTransactionSumAndCountDto.java | 27 +++++ .../feign/RemoteWalletTransactionService.java | 8 ++ .../vo/WalletTransactionSumAndCountVo.java | 18 +++ .../WalletTransactionController.java | 11 ++ .../mapper/WalletTransactionMapper.java | 4 + .../mapper/WalletTransactionMapper.xml | 105 ++++++++++++------ 17 files changed, 350 insertions(+), 32 deletions(-) create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderSumAndCountDto.java create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardDeptTotalVo.java create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderSumAndCountVo.java create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletTransactionSumAndCountDto.java create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletTransactionSumAndCountVo.java diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderStatusEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderStatusEnum.java index e439d91e4..fdf1d8a4c 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderStatusEnum.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderStatusEnum.java @@ -30,6 +30,12 @@ public enum HardOrderStatusEnum { ); } + public static List getPayErrorCodes() { + return List.of( + HardOrderStatusEnum.REFUND.type + ); + } + public static HardOrderStatusEnum valueOfByType(Integer type) { if (ObjectUtil.isEmpty(type)) return null; return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get(); diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderSumAndCountDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderSumAndCountDto.java new file mode 100644 index 000000000..225ea7a4a --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderSumAndCountDto.java @@ -0,0 +1,17 @@ +package com.bsd.pjcloud.hard.api.dto.order; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class HardOrderSumAndCountDto { + + private List deptIds; + + private List orderStatusCodes; + + private LocalDateTime[] createTimeList; + +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardDeptTotalVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardDeptTotalVo.java new file mode 100644 index 000000000..6503c1efa --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardDeptTotalVo.java @@ -0,0 +1,33 @@ +package com.bsd.pjcloud.hard.api.vo.order; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class HardDeptTotalVo { + + @Schema(description = "部门id") + private Long deptId; + + @Schema(description = "部门名") + private String deptName; + + @Schema(description = "充值金额") + private Long walletPrice = 0L; + + @Schema(description = "充值次数") + private Long walletCount = 0L; + + @Schema(description = "消费金额") + private Long orderPayPrice = 0L; + + @Schema(description = "消费次数") + private Long orderPayCount = 0L; + + @Schema(description = "退款金额") + private Long orderRefundPrice = 0L; + + @Schema(description = "退款次数") + private Long orderRefundCont = 0L; + +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderSumAndCountVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderSumAndCountVo.java new file mode 100644 index 000000000..1cb18ec48 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardOrderSumAndCountVo.java @@ -0,0 +1,18 @@ +package com.bsd.pjcloud.hard.api.vo.order; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class HardOrderSumAndCountVo { + + @Schema(description = "部门id") + private Long deptId; + + @Schema(description = "部门操作金额") + private Long sum; + + @Schema(description = "部门操作金额数量") + private Long count; + +} 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 7e3511f83..e56565163 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 @@ -13,6 +13,7 @@ import com.bsd.pjcloud.common.core.util.R; 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.HardDeptTotalVo; 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; @@ -56,6 +57,13 @@ public class HardOrderTotalController { return R.ok(HardOrderTotalService.pageListCs(page, dto)); } + @GetMapping("/page-list-dept") + @Operation(summary = "部门交易记录") + public R> pageListDept(@ParameterObject Page page, @ParameterObject HardOrderDto dto) { + dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes()); + return R.ok(HardOrderTotalService.pageListDept(page, dto)); + } + @Operation(summary = "设备交易记录导出", description = "退款导出") @GetMapping("/export-sb") @PreAuthorize("@pms.hasPermission('hard_hardTotal_export_sb')") diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java index 3f3d3cff9..1f3a99c1f 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/mapper/order/HardOrderMapper.java @@ -7,11 +7,13 @@ import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; +import com.bsd.pjcloud.hard.api.dto.order.HardOrderSumAndCountDto; import com.bsd.pjcloud.hard.api.entity.HardManagerEntity; import com.bsd.pjcloud.hard.api.entity.order.HardAfterSaleEntity; import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; import com.bsd.pjcloud.hard.api.vo.order.HardOrderCsVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderSbVo; +import com.bsd.pjcloud.hard.api.vo.order.HardOrderSumAndCountVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.ibatis.annotations.Mapper; @@ -85,4 +87,6 @@ public interface HardOrderMapper extends PjcloudBaseMapper { Page pageListCs(Page page, @Param("dto") HardOrderDto dto); List listCs(@Param("dto") HardOrderDto dto); + + List sumAndCount(@Param("dto") HardOrderSumAndCountDto dto); } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderTotalService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderTotalService.java index e4f2e72b7..cdd9f6d03 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderTotalService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderTotalService.java @@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; +import com.bsd.pjcloud.hard.api.vo.order.HardDeptTotalVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderCsVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderSbVo; @@ -16,4 +17,6 @@ public interface HardOrderTotalService { Page pageListCs(Page page, HardOrderDto dto); List listCs(HardOrderDto dto); + + Page pageListDept(Page page, HardOrderDto dto); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderTotalServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderTotalServiceImpl.java index 1e185a6b1..72a3a21f3 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderTotalServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderTotalServiceImpl.java @@ -3,25 +3,37 @@ package com.bsd.pjcloud.hard.service.impl.order; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.admin.api.entity.SysDept; +import com.bsd.pjcloud.admin.api.feign.RemoteDeptService; +import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.CollectionUtils; +import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum; import com.bsd.pjcloud.hard.api.dto.HardManagerDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; +import com.bsd.pjcloud.hard.api.dto.order.HardOrderSumAndCountDto; import com.bsd.pjcloud.hard.api.entity.HardManagerEntity; import com.bsd.pjcloud.hard.api.utils.HardUtil; +import com.bsd.pjcloud.hard.api.vo.order.HardDeptTotalVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderCsVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderSbVo; +import com.bsd.pjcloud.hard.api.vo.order.HardOrderSumAndCountVo; import com.bsd.pjcloud.hard.mapper.HardManagerMapper; import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper; import com.bsd.pjcloud.hard.service.HardOrderTotalService; +import com.bsd.pjcloud.wallet.api.dto.WalletTransactionSumAndCountDto; import com.bsd.pjcloud.wallet.api.feign.RemoteMchService; +import com.bsd.pjcloud.wallet.api.feign.RemoteWalletTransactionService; import com.bsd.pjcloud.wallet.api.utils.WalletDataUtil; import com.bsd.pjcloud.wallet.api.vo.MchManageVo; +import com.bsd.pjcloud.wallet.api.vo.WalletTransactionSumAndCountVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.ArrayList; import java.util.List; +import java.util.concurrent.CompletableFuture; @Validated @Slf4j @@ -33,6 +45,8 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { private final HardManagerMapper hardManagerMapper; private final RemoteMchService remoteMchService; + private final RemoteWalletTransactionService remoteWalletTransactionService; + private final RemoteDeptService remoteDeptService; @Override public Page pageListSb(Page page, HardOrderDto dto) { @@ -117,4 +131,71 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { } return list; } + + @Override + public Page pageListDept(Page page, HardOrderDto dto) { + // 查询部门 + CompletableFuture> deptFuture = CompletableFuture.supplyAsync(() -> + remoteDeptService.getInnerAllDept().getData() + ); + CompletableFuture> resultListFuture = deptFuture.thenApply(deptList -> { + if (ObjectUtil.isEmpty(deptList)) return null; + List deptIds = deptList.stream().map(SysDept::getDeptId).filter(ObjectUtil::isNotEmpty).distinct().toList(); + List resultList = deptList.stream().map(v -> { + HardDeptTotalVo item = new HardDeptTotalVo(); + item.setDeptId(v.getDeptId()); + item.setDeptName(v.getName()); + return item; + }).toList(); + // 查询钱包流水 + CompletableFuture> walletFuture = CompletableFuture.supplyAsync(() -> { + WalletTransactionSumAndCountDto walletDto = new WalletTransactionSumAndCountDto(); + walletDto.setDeptIds(deptIds); + return remoteWalletTransactionService.sumAndCount(walletDto).getData(); + }); + // 查询订单支付流水 + CompletableFuture> payFuture = CompletableFuture.supplyAsync(() -> { + HardOrderSumAndCountDto payDto = new HardOrderSumAndCountDto(); + payDto.setDeptIds(deptIds); + payDto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes()); + return hardOrderMapper.sumAndCount(payDto); + }); + // 查询订单退款流水 + CompletableFuture> refundFuture = CompletableFuture.supplyAsync(() -> { + HardOrderSumAndCountDto refundDto = new HardOrderSumAndCountDto(); + refundDto.setDeptIds(deptIds); + refundDto.setOrderStatusCodes(HardOrderStatusEnum.getPayErrorCodes()); + return hardOrderMapper.sumAndCount(refundDto); + }); + CompletableFuture allFutures = CompletableFuture.allOf(walletFuture, payFuture, refundFuture); + allFutures.join(); + List walletList = walletFuture.join(); + List payList = payFuture.join(); + List refundList = refundFuture.join(); + // 聚合一下数据 + for (HardDeptTotalVo v : resultList) { + if (ObjectUtil.isNotEmpty(walletList)) { + walletList.stream().filter(i -> ObjectUtil.equals(i.getDeptId(), v.getDeptId())).findFirst().ifPresent(i -> { + v.setWalletPrice(i.getSum()); + v.setWalletCount(i.getCount()); + }); + } + if (ObjectUtil.isNotEmpty(payList)) { + payList.stream().filter(i -> ObjectUtil.equals(i.getDeptId(), v.getDeptId())).findFirst().ifPresent(i -> { + v.setOrderPayPrice(i.getSum()); + v.setOrderPayCount(i.getCount()); + }); + } + if (ObjectUtil.isNotEmpty(refundList)) { + refundList.stream().filter(i -> ObjectUtil.equals(i.getDeptId(), v.getDeptId())).findFirst().ifPresent(i -> { + v.setOrderRefundPrice(i.getSum()); + v.setOrderRefundCont(i.getCount()); + }); + } + } + return resultList; + }); + List resultList = resultListFuture.join(); + return null; + } } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml index b98c75c7c..f583469ba 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml @@ -137,4 +137,32 @@ group by a.merchant_id + + + \ No newline at end of file diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteDeptService.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteDeptService.java index f3bfa861e..3c9ceb845 100644 --- a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteDeptService.java +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteDeptService.java @@ -47,6 +47,10 @@ public interface RemoteDeptService { @GetMapping("/dept/list") R> getAllDept(@RequestParam("parentDeptId") Long parentDeptId); + @NoToken + @GetMapping("/dept/inner-all-dept") + R> getInnerAllDept(); + /** * 通过部门ID获取负责人列表 * @@ -97,6 +101,7 @@ public interface RemoteDeptService { /** * 查询部门所属的分组部门 + * * @param deptId * @return */ diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysDeptController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysDeptController.java index 1df2e796c..5732c87a6 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysDeptController.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysDeptController.java @@ -216,4 +216,10 @@ public class SysDeptController { public R getParentDeptHardGroup(@RequestParam("deptId") Long deptId) { return R.ok(sysDeptService.getParentDeptHardGroup(deptId)); } + + @Inner + @GetMapping("/inner-all-dept") + public R> getInnerAllDept() { + return R.ok(sysDeptService.list()); + } } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletTransactionSumAndCountDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletTransactionSumAndCountDto.java new file mode 100644 index 000000000..7aef47cf0 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletTransactionSumAndCountDto.java @@ -0,0 +1,27 @@ +package com.bsd.pjcloud.wallet.api.dto; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +public class WalletTransactionSumAndCountDto { + /** + * 类型 - 收入 + */ + public static final Integer TYPE_INCOME = 1; + /** + * 类型 - 支出 + */ + public static final Integer TYPE_EXPENSE = 2; + + private Integer type; + + private List deptIds; + + private List bizTypes; + + private LocalDateTime[] createTimeList; + +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteWalletTransactionService.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteWalletTransactionService.java index 3edd1049b..cfc56d68f 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteWalletTransactionService.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteWalletTransactionService.java @@ -4,11 +4,15 @@ import com.bsd.pjcloud.common.core.constant.ServiceNameConstants; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.feign.annotation.NoToken; import com.bsd.pjcloud.wallet.api.dto.WalletBalanceTransactionDto; +import com.bsd.pjcloud.wallet.api.dto.WalletTransactionSumAndCountDto; import com.bsd.pjcloud.wallet.api.entity.WalletTransactionEntity; +import com.bsd.pjcloud.wallet.api.vo.WalletTransactionSumAndCountVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import java.util.List; + @FeignClient(contextId = "remoteWalletTransactionService", value = ServiceNameConstants.WALLET_SERVICE) public interface RemoteWalletTransactionService { @@ -20,4 +24,8 @@ public interface RemoteWalletTransactionService { @PostMapping("/wallet-transaction/reduce-balance") R reduceWalletBalance(@RequestBody WalletBalanceTransactionDto dto); + @NoToken + @PostMapping("/wallet-transaction/sum-and-count") + R> sumAndCount(@RequestBody WalletTransactionSumAndCountDto dto); + } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletTransactionSumAndCountVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletTransactionSumAndCountVo.java new file mode 100644 index 000000000..19e1a79ff --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletTransactionSumAndCountVo.java @@ -0,0 +1,18 @@ +package com.bsd.pjcloud.wallet.api.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class WalletTransactionSumAndCountVo { + + @Schema(description = "部门id") + private Long deptId; + + @Schema(description = "部门操作金额") + private Long sum; + + @Schema(description = "部门操作金额数量") + private Long count; + +} 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 108bd2c99..514f84548 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 @@ -13,8 +13,11 @@ import com.bsd.pjcloud.common.security.util.SecurityUtils; 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.dto.WalletTransactionSumAndCountDto; import com.bsd.pjcloud.wallet.api.entity.WalletTransactionEntity; +import com.bsd.pjcloud.wallet.api.vo.WalletTransactionSumAndCountVo; import com.bsd.pjcloud.wallet.api.vo.transaction.WalletTransactionVo; +import com.bsd.pjcloud.wallet.mapper.WalletTransactionMapper; import com.bsd.pjcloud.wallet.service.WalletTransactionService; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; @@ -44,6 +47,8 @@ public class WalletTransactionController { private final WalletTransactionService walletTransactionService; + private final WalletTransactionMapper walletTransactionMapper; + /* ************************************* start 远程调用 start ************************************* */ @Inner @PostMapping("/add-balance") @@ -60,6 +65,12 @@ public class WalletTransactionController { if (ObjectUtil.isEmpty(walletTransaction)) return R.failed("扣减钱包余额"); return R.ok(walletTransaction); } + + @Inner + @PostMapping("/sum-and-count") + public R> sumAndCount(@RequestBody WalletTransactionSumAndCountDto dto) { + return R.ok(walletTransactionMapper.sumAndCount(dto)); + } /* ************************************* end 远程调用 end ************************************* */ /* ************************************* start app start ************************************* */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletTransactionMapper.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletTransactionMapper.java index 6e9b26fb8..314f94fb3 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletTransactionMapper.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/WalletTransactionMapper.java @@ -7,9 +7,11 @@ import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; import com.bsd.pjcloud.wallet.api.dto.WalletTransactionDto; +import com.bsd.pjcloud.wallet.api.dto.WalletTransactionSumAndCountDto; import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity; import com.bsd.pjcloud.wallet.api.entity.WalletTransactionEntity; import com.bsd.pjcloud.wallet.api.entity.WalletTypeEntity; +import com.bsd.pjcloud.wallet.api.vo.WalletTransactionSumAndCountVo; import com.bsd.pjcloud.wallet.api.vo.recharge.WalletRechargeApplySelectCompareVo; import com.bsd.pjcloud.wallet.api.vo.transaction.WalletTransactionVo; import com.github.yulichang.wrapper.MPJLambdaWrapper; @@ -69,4 +71,6 @@ public interface WalletTransactionMapper extends PjcloudBaseMapper selectCompare(@Param("bizType") String bizType, @Param("dateTime") String monthTimeStr, @Param("userIdList") List userIdList); + + List sumAndCount(@Param("dto") WalletTransactionSumAndCountDto dto); } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletTransactionMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletTransactionMapper.xml index 32f9c016c..1c571c899 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletTransactionMapper.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletTransactionMapper.xml @@ -2,8 +2,7 @@ - - + @@ -11,36 +10,78 @@ - + - + + - + + + + + + + + + \ No newline at end of file From b5666485de7a64565b87ce92b990f80ac2b96361 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 23 Jan 2025 14:22:03 +0800 Subject: [PATCH 5/7] =?UTF-8?q?feat:=E9=83=A8=E9=97=A8=E4=BA=A4=E6=98=93?= =?UTF-8?q?=E9=87=91=E9=A2=9D=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hard/api/dto/order/HardDeptTotalDto.java | 17 ++++ .../dto/order/HardOrderSumAndCountDto.java | 2 + .../order/HardOrderTotalController.java | 73 ++++++++++++++++-- .../hard/service/HardOrderTotalService.java | 3 +- .../impl/order/HardOrderTotalServiceImpl.java | 24 +++++- .../main/resources/file/部门交易金额汇总.xlsx | Bin 0 -> 10062 bytes .../mapper/order/HardOrderMapper.xml | 2 + .../admin/api/feign/RemoteDeptService.java | 1 + .../admin/controller/SysDeptController.java | 4 + .../dto/WalletTransactionSumAndCountDto.java | 3 + .../mapper/WalletTransactionMapper.xml | 2 + 11 files changed, 122 insertions(+), 9 deletions(-) create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardDeptTotalDto.java 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/dto/order/HardDeptTotalDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardDeptTotalDto.java new file mode 100644 index 000000000..e414333d2 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardDeptTotalDto.java @@ -0,0 +1,17 @@ +package com.bsd.pjcloud.hard.api.dto.order; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class HardDeptTotalDto { + + @Schema(description = "饭卡类型id") + private Long walletTypeId; + + @Schema(description = "饭卡类型id") + private LocalDateTime[] createTimeList; + +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderSumAndCountDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderSumAndCountDto.java index 225ea7a4a..e29580abb 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderSumAndCountDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderSumAndCountDto.java @@ -14,4 +14,6 @@ public class HardOrderSumAndCountDto { private LocalDateTime[] createTimeList; + private Long walletTypeId; + } 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 e56565163..b3eac7a16 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 @@ -10,8 +10,10 @@ 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.R; +import com.bsd.pjcloud.common.log.annotation.SysLog; 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.HardDeptTotalDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.vo.order.HardDeptTotalVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderCsVo; @@ -59,13 +61,13 @@ public class HardOrderTotalController { @GetMapping("/page-list-dept") @Operation(summary = "部门交易记录") - public R> pageListDept(@ParameterObject Page page, @ParameterObject HardOrderDto dto) { - dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes()); - return R.ok(HardOrderTotalService.pageListDept(page, dto)); + public R> pageListDept(@ParameterObject HardDeptTotalDto dto) { + return R.ok(HardOrderTotalService.pageListDept(dto)); } - @Operation(summary = "设备交易记录导出", description = "退款导出") + @Operation(summary = "设备交易记录导出", description = "设备交易记录导出") @GetMapping("/export-sb") + @SysLog("设备交易记录导出") @PreAuthorize("@pms.hasPermission('hard_hardTotal_export_sb')") public void exportSb(HttpServletResponse response, HardOrderDto dto) throws IOException { dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes()); @@ -103,8 +105,9 @@ public class HardOrderTotalController { } - @Operation(summary = "商户交易记录导出", description = "退款导出") + @Operation(summary = "商户交易记录导出", description = "商户交易记录导出") @GetMapping("/export-cs") + @SysLog("商户交易记录导出") @PreAuthorize("@pms.hasPermission('hard_hardTotal_export_cs')") public void exportTk(HttpServletResponse response, HardOrderDto dto) throws IOException { dto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes()); @@ -140,4 +143,64 @@ public class HardOrderTotalController { excelWriter.fill(list, fillConfig, writeSheet); } } + + @Operation(summary = "部门交易记录导出", description = "部门交易记录导出") + @GetMapping("/export-dept") + @SysLog("部门交易记录导出") + @PreAuthorize("@pms.hasPermission('hard_hardTotal_export_dept')") + public void exportDept(HttpServletResponse response, HardDeptTotalDto dto) throws IOException { + List list = HardOrderTotalService.pageListDept(dto); + 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.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 walletPriceSum = BigDecimal.ZERO; + BigDecimal walletCountSum = BigDecimal.ZERO; + BigDecimal totalPayPriceSum = BigDecimal.ZERO; + BigDecimal totalPayCountSum = BigDecimal.ZERO; + BigDecimal orderRefundPriceSum = BigDecimal.ZERO; + BigDecimal orderRefundContSum = BigDecimal.ZERO; + for (HardDeptTotalVo v : list) { + if (ObjectUtil.isNotEmpty(v.getWalletPrice())) { + walletPriceSum = walletPriceSum.add(BigDecimal.valueOf(v.getWalletPrice())); + v.setWalletPrice(BigDecimal.valueOf(v.getWalletPrice()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).longValue()); + } + if (ObjectUtil.isNotEmpty(v.getWalletCount())) { + walletCountSum = walletCountSum.add(BigDecimal.valueOf(v.getWalletCount())); + v.setWalletCount(BigDecimal.valueOf(v.getWalletCount()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).longValue()); + } + if (ObjectUtil.isNotEmpty(v.getOrderPayPrice())) { + totalPayPriceSum = totalPayPriceSum.add(BigDecimal.valueOf(v.getOrderPayPrice())); + v.setOrderPayPrice(BigDecimal.valueOf(v.getOrderPayPrice()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).longValue()); + } + if (ObjectUtil.isNotEmpty(v.getOrderPayCount())) { + totalPayCountSum = totalPayCountSum.add(BigDecimal.valueOf(v.getOrderPayCount())); + v.setOrderPayCount(BigDecimal.valueOf(v.getOrderPayCount()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).longValue()); + } + if (ObjectUtil.isNotEmpty(v.getOrderRefundPrice())) { + orderRefundPriceSum = orderRefundPriceSum.add(BigDecimal.valueOf(v.getOrderRefundPrice())); + v.setOrderRefundPrice(BigDecimal.valueOf(v.getOrderRefundPrice()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).longValue()); + } + if (ObjectUtil.isNotEmpty(v.getOrderRefundCont())) { + orderRefundContSum = orderRefundContSum.add(BigDecimal.valueOf(v.getOrderRefundCont())); + v.setOrderRefundCont(BigDecimal.valueOf(v.getOrderRefundCont()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).longValue()); + } + map.put("walletPriceSum", walletPriceSum.divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toString()); + map.put("walletCountSum", walletCountSum.toString()); + map.put("totalPayPriceSum", totalPayPriceSum.divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toString()); + map.put("totalPayCountSum", totalPayCountSum.toString()); + map.put("orderRefundPriceSum", orderRefundPriceSum.divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toString()); + map.put("orderRefundContSum", orderRefundContSum.toString()); + } + } + excelWriter.fill(map, writeSheet); + excelWriter.fill(list, fillConfig, writeSheet); + } + } } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderTotalService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderTotalService.java index cdd9f6d03..6a605938c 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderTotalService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderTotalService.java @@ -1,6 +1,7 @@ package com.bsd.pjcloud.hard.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.hard.api.dto.order.HardDeptTotalDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.vo.order.HardDeptTotalVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderCsVo; @@ -18,5 +19,5 @@ public interface HardOrderTotalService { List listCs(HardOrderDto dto); - Page pageListDept(Page page, HardOrderDto dto); + List pageListDept(HardDeptTotalDto dto); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderTotalServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderTotalServiceImpl.java index 72a3a21f3..78adec755 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderTotalServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderTotalServiceImpl.java @@ -9,6 +9,7 @@ import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.core.util.CollectionUtils; import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum; import com.bsd.pjcloud.hard.api.dto.HardManagerDto; +import com.bsd.pjcloud.hard.api.dto.order.HardDeptTotalDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderSumAndCountDto; import com.bsd.pjcloud.hard.api.entity.HardManagerEntity; @@ -133,7 +134,7 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { } @Override - public Page pageListDept(Page page, HardOrderDto dto) { + public List pageListDept(HardDeptTotalDto dto) { // 查询部门 CompletableFuture> deptFuture = CompletableFuture.supplyAsync(() -> remoteDeptService.getInnerAllDept().getData() @@ -151,6 +152,12 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { CompletableFuture> walletFuture = CompletableFuture.supplyAsync(() -> { WalletTransactionSumAndCountDto walletDto = new WalletTransactionSumAndCountDto(); walletDto.setDeptIds(deptIds); + if (ObjectUtil.isNotEmpty(dto.getCreateTimeList())) { + walletDto.setCreateTimeList(dto.getCreateTimeList()); + } + if (ObjectUtil.isNotEmpty(dto.getWalletTypeId())) { + walletDto.setWalletTypeId(dto.getWalletTypeId()); + } return remoteWalletTransactionService.sumAndCount(walletDto).getData(); }); // 查询订单支付流水 @@ -158,6 +165,12 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { HardOrderSumAndCountDto payDto = new HardOrderSumAndCountDto(); payDto.setDeptIds(deptIds); payDto.setOrderStatusCodes(HardOrderStatusEnum.getPaySuccessCodes()); + if (ObjectUtil.isNotEmpty(dto.getCreateTimeList())) { + payDto.setCreateTimeList(dto.getCreateTimeList()); + } + if (ObjectUtil.isNotEmpty(dto.getWalletTypeId())) { + payDto.setWalletTypeId(dto.getWalletTypeId()); + } return hardOrderMapper.sumAndCount(payDto); }); // 查询订单退款流水 @@ -165,6 +178,12 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { HardOrderSumAndCountDto refundDto = new HardOrderSumAndCountDto(); refundDto.setDeptIds(deptIds); refundDto.setOrderStatusCodes(HardOrderStatusEnum.getPayErrorCodes()); + if (ObjectUtil.isNotEmpty(dto.getCreateTimeList())) { + refundDto.setCreateTimeList(dto.getCreateTimeList()); + } + if (ObjectUtil.isNotEmpty(dto.getWalletTypeId())) { + refundDto.setWalletTypeId(dto.getWalletTypeId()); + } return hardOrderMapper.sumAndCount(refundDto); }); CompletableFuture allFutures = CompletableFuture.allOf(walletFuture, payFuture, refundFuture); @@ -195,7 +214,6 @@ public class HardOrderTotalServiceImpl implements HardOrderTotalService { } return resultList; }); - List resultList = resultListFuture.join(); - return null; + return resultListFuture.join(); } } 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..f0d9426b8070641c31dd88d573eaf5452c1c7643 GIT binary patch literal 10062 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 literal 0 HcmV?d00001 diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml index f583469ba..33001b027 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/order/HardOrderMapper.xml @@ -146,6 +146,8 @@ from hard_order a a.del_flag = 0 and a.dept_id is not null + + and a.order_status in diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteDeptService.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteDeptService.java index 3c9ceb845..c1a44e43d 100644 --- a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteDeptService.java +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteDeptService.java @@ -19,6 +19,7 @@ package com.bsd.pjcloud.admin.api.feign; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.admin.api.entity.SysDept; import com.bsd.pjcloud.common.core.constant.ServiceNameConstants; import com.bsd.pjcloud.common.core.util.R; diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysDeptController.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysDeptController.java index 5732c87a6..bf123e0d9 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysDeptController.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/controller/SysDeptController.java @@ -19,6 +19,9 @@ package com.bsd.pjcloud.admin.controller; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.admin.api.entity.SysDept; import com.bsd.pjcloud.admin.api.vo.DeptExcelVO; import com.bsd.pjcloud.admin.service.SysDeptService; @@ -32,6 +35,7 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.AllArgsConstructor; +import org.springdoc.core.annotations.ParameterObject; import org.springframework.http.HttpHeaders; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletTransactionSumAndCountDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletTransactionSumAndCountDto.java index 7aef47cf0..e4b837ea3 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletTransactionSumAndCountDto.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletTransactionSumAndCountDto.java @@ -1,5 +1,6 @@ package com.bsd.pjcloud.wallet.api.dto; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.time.LocalDateTime; @@ -24,4 +25,6 @@ public class WalletTransactionSumAndCountDto { private LocalDateTime[] createTimeList; + private Long walletTypeId; + } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletTransactionMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletTransactionMapper.xml index 1c571c899..8e0718ab8 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletTransactionMapper.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/WalletTransactionMapper.xml @@ -58,6 +58,8 @@ from wallet_transaction a a.del_flag = 0 and a.dept_id is not null + + and a.price > 0 From c9d8c1d52b989fab4b01136968c84db4475a6044 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 23 Jan 2025 14:26:35 +0800 Subject: [PATCH 6/7] =?UTF-8?q?fix:=E4=BF=AE=E6=94=B9=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/HardOrderTotalController.java | 12 ++++++------ .../main/resources/file/部门交易金额汇总.xlsx | Bin 10062 -> 10059 bytes 2 files changed, 6 insertions(+), 6 deletions(-) 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 b3eac7a16..0b8618750 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 @@ -162,8 +162,8 @@ public class HardOrderTotalController { if (ObjectUtil.isNotEmpty(list)) { BigDecimal walletPriceSum = BigDecimal.ZERO; BigDecimal walletCountSum = BigDecimal.ZERO; - BigDecimal totalPayPriceSum = BigDecimal.ZERO; - BigDecimal totalPayCountSum = BigDecimal.ZERO; + BigDecimal orderPayPriceSum = BigDecimal.ZERO; + BigDecimal orderPayCountSum = BigDecimal.ZERO; BigDecimal orderRefundPriceSum = BigDecimal.ZERO; BigDecimal orderRefundContSum = BigDecimal.ZERO; for (HardDeptTotalVo v : list) { @@ -176,11 +176,11 @@ public class HardOrderTotalController { v.setWalletCount(BigDecimal.valueOf(v.getWalletCount()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).longValue()); } if (ObjectUtil.isNotEmpty(v.getOrderPayPrice())) { - totalPayPriceSum = totalPayPriceSum.add(BigDecimal.valueOf(v.getOrderPayPrice())); + orderPayPriceSum = orderPayPriceSum.add(BigDecimal.valueOf(v.getOrderPayPrice())); v.setOrderPayPrice(BigDecimal.valueOf(v.getOrderPayPrice()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).longValue()); } if (ObjectUtil.isNotEmpty(v.getOrderPayCount())) { - totalPayCountSum = totalPayCountSum.add(BigDecimal.valueOf(v.getOrderPayCount())); + orderPayCountSum = orderPayCountSum.add(BigDecimal.valueOf(v.getOrderPayCount())); v.setOrderPayCount(BigDecimal.valueOf(v.getOrderPayCount()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).longValue()); } if (ObjectUtil.isNotEmpty(v.getOrderRefundPrice())) { @@ -193,8 +193,8 @@ public class HardOrderTotalController { } map.put("walletPriceSum", walletPriceSum.divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toString()); map.put("walletCountSum", walletCountSum.toString()); - map.put("totalPayPriceSum", totalPayPriceSum.divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toString()); - map.put("totalPayCountSum", totalPayCountSum.toString()); + map.put("orderPayPriceSum", orderPayPriceSum.divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toString()); + map.put("orderPayCountSum", orderPayCountSum.toString()); map.put("orderRefundPriceSum", orderRefundPriceSum.divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toString()); map.put("orderRefundContSum", orderRefundContSum.toString()); } 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 f0d9426b8070641c31dd88d573eaf5452c1c7643..9b748b9782bbab681cbe45a1f101c6d615be3788 100644 GIT binary patch delta 1663 zcmV-_27vj_PRmZPjR6EM;QYc>Z#wPzjDiqk>~YV1+Xa7oz>odFJge-8^Vlv6`-1$4`nh}KBXT4Z^v z@*2Pyh8zS)qjBH`_{VEN3H|4Pg<9!2MP^o|?X-^DWpmbut$V4n*0@+KyhT*Uu=xXg zH99@7tGb!2cEtdtF=vD+pr%mifo(enXMA=N+$vD;ra9B z{{8JK#=mt-txGg$;Es(&ni3o3GCDe*3{e{TVc+!wH;g7>Kzb4J{p;!*`K|j^%w{0g zA^t}UdL-A?uaSPU2LrYN4l1j)%^d>(0OAM$02lz19w!=;dP1rT=GQuglB;*t=;7`m^S*%NGnhWSs50ur{WF*7tq|ErA)n>cCQ6d zRmUmI(k~0?ll)S}4ME{JplW%Nif1dVFj~xw0xu$1%wq;DYUw>elL$S3hO^xef!!c} zFwg zPM_(Srf?XcLDL37A~e>2$q7#(6a0D^)6W6&GW=%#OPl2$>LrH6OWN?_W*zz$2S|Ex z7~FR`1U8XrRjaX>3toCKsgP0EJ*d)Dod8b-)(==Xn*g6gqaOjTEucY!Bv{Xj-aI%1 zapZ!~asZ-ls?;t^*RXO8YuB)G4O`c+yDUstp;hrpHR6kRH)&Re?Pc5aPeANMQR9UwneMgl|2gFfj+W~P@f!*#7NWWIal4ZBB zT}>Gk2eYrGNBAk%lL)J(vexemvkP7Oa0Yzoya) zDQ_&T0f}))5HxLqRZzzad~t6|J7Q_f|xtFi?R0wmpb30FaG1xPM2c3oWfInWelXbRW7=<$@74GT9s9$iZg zBn=M}6d#3$z3{U4`F0yzorUew@a8&rYzNJEMdq3!eHl)X-^N_@g+I|0+TEzHUTMrSjR6GpFxZBZkpV3e=8)2M_`^VOIB=qP7LspUu}MRd(E%NQ87z6> z+=0@0DN+=8K5{_NlI3ESqKnDU-A9f#L@-j60#dXBjRx87PC{i&O9f+9N>C;T?O2k~ zF_kHr8zWpw4l)Jn(6bF-4R(>iXK&1fUG?xoIK<6^P!7Ev9;<`3}I z==8j<>gJ-_6$O+fjK)*}F{R25Y}+|F% z?{7~D{;gYTU7|q)b8M`*DX~#5qod==5M`ks?zw*8hS4Mp;$9T{{&n>m{MP*{W;5XH z5dR|vz1Tv7euuaLWOeTCuaSMT2LrYN339lSksJd60N|6x1Ur8Y42f01tnGyM?{{nx z2nMaXFA0o~=W@3akO`J0b$#@nJ-|Z0xvXDnCI|StCkImhLI8xCpq6yC+Anzc_ z!{YO&dBMf2JOU^OJ!CQ0^Gw~50JdS@^2rC|*Qpi;4L_k6n<}Z&dmsf9Z(TDs+f)-foHJ_UlSLI6O&mXq( zOIawmYX+!qmGd_nHu>+D}mwZjnnj z%r05n5af?NP|K54JY7*m$zpC4coE)W9x-H5OYaDX1M+|9&vrwCc7yoEppZAuj-vbT zkU*#)!d4-U;`uYgY6(dakS8?gp4fB#s&{@tOiu?hJ9G#dDt3kvy&hv*{V_rD5hHq4 z$lK>@_>JkJ7vV$@(^I0BJo(KcbqvUqTy5WYu>*EED$H%~QZaE1gI12SmZ z&`Cf{@Q{Be7zux!l<8AIoRq$q|Dud?kH;c36kfvmI_GLb|FQvtUN#KwyEb@bAXBQ= zVlfxIaIjA?qRx9zg{dk*nsTa-mp_{zo1sQOB3xTgfq+P~o)^8jcShpE3qp&5h`z~E zZ&})gm2FtthK+65+J@bY!NW?ba*&VzDF@-0EUJG~mE&9Gv=RL#V%bIvnut{!F>E5% zZNz;Ov1ublO~kg17&j5SHeymC8Z06qn#F$AO8;&Ogd>Z?8y2UPU(+^EZG><2&9Vbx zX|d{nSYoU@AeI`N4u~bkwgY16vFm`;f;7lPUd&_|yCdYOeWY+5*+Z)99<+peDj}o# zOqG8I{H^!YQX0xv9S}>EbsN&RRM~VuELFB05K9%D>~@3nYgJ0J$|+oqrWC}%Ol#?c z{FLcV#8FdO>l?$&Lfbx^Azyl~R|_~{b9#WUR2*0)odjf2=T7myyaAP6G{1#9guHi45!4j+Gg zlTS;-FdT;Og5RO!?mCBvNZTC-f)^QXet^(qTcJ&Ald7W(3Np5fsEB_q9wvf23{en8 z9ex_yt>40~Wm4DHOQCsw&zmzG$9P0gp# z7s+rr62k~TO!)y&O9KRxd?p&R0uWXc0hyCoBR~QIACsFSG65!& z&Lfiq^)T3mlVv2w0Zx-GB{l+eAd`+D94t^v0Rj{N6aWAK2mpsp;y`QdFE)Vz005u^ z000yK0000000031AOHXWG!Bzd4i=NcB`N{YlkO!t0RfXKCN=>mlVB!50q2vUCSD10 WxRQ|^0{{TvlL#k01~DT50000?Y6Kww From 9d2cf0f5d201f392199f7b6bbeb5439cfe6fd919 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 23 Jan 2025 16:02:54 +0800 Subject: [PATCH 7/7] =?UTF-8?q?feat:=E5=85=85=E5=80=BC/=E6=89=A3=E6=AC=BE?= =?UTF-8?q?=E7=94=B3=E8=AF=B7=E8=87=AA=E5=8A=A8=E5=88=9B=E5=BB=BA=E9=92=B1?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bsd/pjcloud/wallet/api/constant/WalletTypeEnum.java | 5 +++++ .../impl/recharge/WalletRechargeApplyServiceImpl.java | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletTypeEnum.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletTypeEnum.java index 0023549e0..65a7779b2 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletTypeEnum.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletTypeEnum.java @@ -21,6 +21,11 @@ public enum WalletTypeEnum { private final String desc; + public static WalletTypeEnum valueOfByCode(String code) { + if (ObjectUtil.isEmpty(code)) return null; + return Arrays.stream(values()).filter(v -> ObjectUtil.equals(code, v.getCode())).findFirst().get(); + } + public static WalletTypeEnum descOf(String description) { return Arrays.stream(WalletTypeEnum.values()) .filter(v -> ObjectUtil.equal(v.getDesc(), description)) diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/recharge/WalletRechargeApplyServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/recharge/WalletRechargeApplyServiceImpl.java index 70a16a1e7..1f5e9a8e8 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/recharge/WalletRechargeApplyServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/recharge/WalletRechargeApplyServiceImpl.java @@ -28,6 +28,7 @@ import com.bsd.pjcloud.flow.task.constant.TaskCheckStatusEnum; import com.bsd.pjcloud.flow.task.dto.ProcessNodeRecordAssignUserParamDto; import com.bsd.pjcloud.wallet.api.constant.WalletBizEnum; import com.bsd.pjcloud.wallet.api.constant.WalletBizRechargeEnum; +import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum; import com.bsd.pjcloud.wallet.api.dto.WalletTypeDto; import com.bsd.pjcloud.wallet.api.dto.recharge.WalletRechargeApplyDto; import com.bsd.pjcloud.wallet.api.dto.recharge.WalletRechargeImportDto; @@ -347,6 +348,11 @@ public class WalletRechargeApplyServiceImpl extends ServiceImpl importList = rechargeImportService.list(new LambdaQueryWrapper() .eq(WalletRechargeImportEntity::getApplyId, detail.getId()) @@ -356,7 +362,7 @@ public class WalletRechargeApplyServiceImpl extends ServiceImpl