From dbee49727e03a630fccfc0e9233252caecb9d223 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 21 Oct 2025 10:01:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=AF=BC=E5=87=BA=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wallet/api/vo/WalletTypeCountVo.java | 18 ++++++++ .../wallet/api/vo/WalletTypeTotalVo.java | 38 +++++++++++++++ .../WalletTransactionController.java | 41 +++++++++++++++++ .../mapper/WalletTransactionMapper.java | 4 ++ .../service/WalletTransactionService.java | 4 +- .../impl/WalletTransactionServiceImpl.java | 30 ++++++++++++ .../mapper/WalletTransactionMapper.xml | 46 +++++++++++++++++++ 7 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletTypeCountVo.java create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletTypeTotalVo.java diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletTypeCountVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletTypeCountVo.java new file mode 100644 index 000000000..c1cba5230 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletTypeCountVo.java @@ -0,0 +1,18 @@ +package com.bsd.pjcloud.wallet.api.vo; + +import lombok.Data; + +@Data +public class WalletTypeCountVo { + + /** + * 充值次数 + */ + private Long timeTotal; + + /** + * 充值次数 + */ + private Long priceTotal; + +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletTypeTotalVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletTypeTotalVo.java new file mode 100644 index 000000000..6e7d3cd68 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletTypeTotalVo.java @@ -0,0 +1,38 @@ +package com.bsd.pjcloud.wallet.api.vo; + +import lombok.Data; + +@Data +public class WalletTypeTotalVo { + + /** + * 总金额 + */ + private Long totalPrice; + + /** + * 总次数 + */ + private Long totalTime; + + /** + * 消费钱包总金额 + */ + private Long xfTotalPrice; + + /** + * 消费钱包总次数 + */ + private Long xfTotalTime; + + /** + * 饭卡钱包总金额 + */ + private Long eatTotalPrice; + + /** + * 饭卡钱包总次数 + */ + private Long eatTotalTime; + +} 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 7aea54866..6f634d272 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 @@ -15,6 +15,7 @@ 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.WalletTypeTotalVo; import com.bsd.pjcloud.wallet.api.vo.transaction.WalletTransactionVo; import com.bsd.pjcloud.wallet.mapper.WalletTransactionMapper; import com.bsd.pjcloud.wallet.service.WalletTransactionService; @@ -198,6 +199,14 @@ public class WalletTransactionController { walletTransactionService.exportByTemplate(response, dto, "file/个人充值明细.xlsx", list); } + @Operation(summary = "充值统计", description = "充值统计") + @PostMapping("/cz-total") + public R czTotal(@RequestBody WalletTransactionDto dto) { + dto.setBizTypes(WalletBizEnum.getTopUpCodes()); + dto.setType(WalletTransactionDto.TYPE_INCOME); + return R.ok(walletTransactionService.walletTypetotal(dto, DataScope.of())); + } + @Operation(summary = "记账扣款导出", description = "记账扣款导出") @PostMapping("/export-jz") @PreAuthorize("@pms.hasPermission('wallet_walletTransaction_export')") @@ -213,6 +222,14 @@ public class WalletTransactionController { walletTransactionService.exportByTemplate(response, dto, "file/个人记账扣款明细.xlsx", list); } + @Operation(summary = "记账扣款统计", description = "记账扣款统计") + @PostMapping("/jz-total") + public R jzTotal(@RequestBody WalletTransactionDto dto) { + dto.setBizTypes(WalletBizEnum.getTopUpCodes()); + dto.setType(WalletTransactionDto.TYPE_EXPENSE); + return R.ok(walletTransactionService.walletTypetotal(dto, DataScope.of())); + } + @Operation(summary = "消费导出", description = "消费导出") @PostMapping("/export-xf") @@ -228,6 +245,13 @@ public class WalletTransactionController { walletTransactionService.exportByTemplate(response, dto, "file/个人消费明细.xlsx", list); } + @Operation(summary = "消费统计", description = "消费统计") + @PostMapping("/xf-total") + public R xfTotal(@RequestBody WalletTransactionDto dto) { + dto.setBizTypes(List.of(WalletBizEnum.PAYMENT.getCode())); + return R.ok(walletTransactionService.walletTypetotal(dto, DataScope.of())); + } + @Operation(summary = "退款导出", description = "退款导出") @PostMapping("/export-tk") @PreAuthorize("@pms.hasPermission('wallet_walletTransaction_export')") @@ -243,6 +267,14 @@ public class WalletTransactionController { walletTransactionService.exportByTemplate(response, dto, "file/个人退款明细.xlsx", list); } + @Operation(summary = "退款统计", description = "退款统计") + @PostMapping("/tk-total") + public R tkTotal(@RequestBody WalletTransactionDto dto) { + dto.setBizTypes(List.of(WalletBizEnum.REFUND.getCode())); + dto.setIsFindOrder(true); + return R.ok(walletTransactionService.walletTypetotal(dto, DataScope.of())); + } + @Operation(summary = "后台退还各自食堂记录导出", description = "后台退还各自食堂记录导出") @PostMapping("/export-th") @PreAuthorize("@pms.hasPermission('wallet_walletTransaction_export')") @@ -257,4 +289,13 @@ public class WalletTransactionController { List list = walletTransactionService.scopeList(dto, dataScope); walletTransactionService.exportByTemplate(response, dto, "file/退还各自食堂明细.xlsx", list); } + + @Operation(summary = "退还各自食堂统计", description = "退还各自食堂统计") + @PostMapping("/th-total") + public R thTotal(@RequestBody WalletTransactionDto dto) { + dto.setBizTypes(List.of(WalletBizEnum.RETURN_CANTEEN.getCode())); + dto.setIsFindOrder(false); + return R.ok(walletTransactionService.walletTypetotal(dto, DataScope.of())); + } + } \ No newline at end of file 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 053c1b5ff..d5e25f9eb 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 @@ -13,6 +13,8 @@ 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.WalletTypeCountVo; +import com.bsd.pjcloud.wallet.api.vo.WalletTypeTotalVo; import com.bsd.pjcloud.wallet.api.vo.recharge.WalletRechargeApplySelectCompareVo; import com.bsd.pjcloud.wallet.api.vo.transaction.WalletTransactionVo; import com.github.yulichang.wrapper.MPJLambdaWrapper; @@ -67,6 +69,8 @@ public interface WalletTransactionMapper extends PjcloudBaseMapper scopeList(WalletTransactionDto dto, DataScope dataScope) { List list = selectListByScope(commonWrapperQuery(dto), dataScope); return BeanUtils.toBean(list, WalletTransactionVo.class); 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 62ceb1eb8..bfc27c7d1 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 @@ -6,10 +6,10 @@ import com.bsd.pjcloud.common.data.datascope.DataScope; 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.WalletTypeTotalVo; 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 { @@ -23,6 +23,8 @@ public interface WalletTransactionService extends IService scopeList(WalletTransactionDto dto, DataScope dataScope); + WalletTypeTotalVo walletTypetotal(WalletTransactionDto dto, DataScope dataScope); + /** * 扣减钱包余额 * 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 82e9a1e8a..8cace247f 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 @@ -17,6 +17,7 @@ import com.bsd.pjcloud.admin.api.entity.SysUser; import com.bsd.pjcloud.admin.api.feign.RemoteDeptService; import com.bsd.pjcloud.admin.api.feign.RemoteUserService; import com.bsd.pjcloud.admin.api.utils.DataUtil; +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; @@ -29,6 +30,8 @@ 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.utils.WalletDataUtil; +import com.bsd.pjcloud.wallet.api.vo.WalletTypeCountVo; +import com.bsd.pjcloud.wallet.api.vo.WalletTypeTotalVo; import com.bsd.pjcloud.wallet.api.vo.transaction.WalletTransactionVo; import com.bsd.pjcloud.wallet.mapper.WalletManageMapper; import com.bsd.pjcloud.wallet.mapper.WalletTransactionMapper; @@ -196,6 +199,33 @@ public class WalletTransactionServiceImpl extends ServiceImpl walletTypeList = walletTypeMapper.list(new WalletTypeDto()); + if (ObjectUtil.isEmpty(walletTypeList)) return null; + for (WalletTypeEntity v : walletTypeList) { + WalletTransactionDto queryDto = BeanUtils.toBean(dto, WalletTransactionDto.class); + queryDto.setWalletTypeId(v.getId()); + WalletTypeCountVo total = baseMapper.walletTypetotal(queryDto, dataScope); + if (ObjectUtil.isEmpty(total)) continue; + if (ObjectUtil.equals(v.getUniqueCode(), WalletTypeEnum.EAT.getCode())) { + result.setEatTotalPrice(total.getPriceTotal()); + result.setEatTotalTime(total.getTimeTotal()); + continue; + } + if (ObjectUtil.equals(v.getUniqueCode(), WalletTypeEnum.PAY.getCode())) { + result.setXfTotalPrice(total.getPriceTotal()); + result.setXfTotalTime(total.getTimeTotal()); + continue; + } + } + result.setTotalPrice(result.getEatTotalPrice() + result.getXfTotalPrice()); + result.setTotalTime(result.getEatTotalTime() + result.getXfTotalTime()); + return result; + } + @Override public void exportByTemplate(HttpServletResponse response, WalletTransactionDto dto, String fileName, List list) { try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(ResourceUtil.getStream(fileName)).build()) { 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 e2e3700e6..0317eebb6 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 @@ -44,12 +44,46 @@ and a.biz_type = #{dto.bizType} + + and a.dept_id = #{dto.deptId} + and a.price > 0 and a.price < 0 + + and a.user_id in + + #{v} + + + + and a.biz_type in + + #{v} + + + + and a.create_time between #{dto.createTimeList[0]} and #{dto.createTimeList[1]} + + + + + and a.dept_id IN + + + and a.dept_id NOT IN + + + and a.dept_id IN + + + + #{v} + + + + \ No newline at end of file