From 8e18dda8c80ef13ac1bb7b25b9b588f30ceddca7 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 17 Dec 2025 14:32:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/1003pjcloudx_view.sql | 43 ++++++ .../wallet/api/dto/WalletTransactionDto.java | 7 + .../api/dto/mch/WalletMchDeptViewDto.java | 13 ++ .../mch/view/WalletMchDeptViewEntity.java | 48 ++++++ .../wallet/api/vo/WalletCzTotalVo.java | 55 +++++++ .../wallet/api/vo/WalletTypeCountVo.java | 10 ++ .../api/vo/mch/WalletMchDeptViewVo.java | 8 + .../WalletTransactionController.java | 38 ++++- .../mapper/WalletTransactionMapper.java | 2 + .../mapper/mch/view/MchDeptViewMapper.java | 17 +++ .../service/WalletTransactionService.java | 16 ++ .../impl/WalletTransactionServiceImpl.java | 141 ++++++++++++++++++ .../src/main/resources/file/钱包充值统计.xlsx | Bin 0 -> 9961 bytes .../mapper/WalletTransactionMapper.xml | 27 +++- .../resources/mapper/mch/MchManageMapper.xml | 3 + .../mapper/mch/view/MchDeptViewMapper.xml | 55 +++++++ 16 files changed, 481 insertions(+), 2 deletions(-) create mode 100644 db/1003pjcloudx_view.sql create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/mch/WalletMchDeptViewDto.java create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/mch/view/WalletMchDeptViewEntity.java create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletCzTotalVo.java create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/mch/WalletMchDeptViewVo.java create mode 100644 pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/mch/view/MchDeptViewMapper.java create mode 100644 pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/file/钱包充值统计.xlsx create mode 100644 pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/view/MchDeptViewMapper.xml diff --git a/db/1003pjcloudx_view.sql b/db/1003pjcloudx_view.sql new file mode 100644 index 000000000..c9448c588 --- /dev/null +++ b/db/1003pjcloudx_view.sql @@ -0,0 +1,43 @@ +CREATE OR REPLACE VIEW pjcloudx_wallet.v_mch_dept_tree AS +WITH RECURSIVE + root AS (SELECT m.dept_id AS root_dept_id, + m.id AS mch_id, + m.name AS mch_name + FROM pjcloudx_wallet.mch_manage AS m + JOIN pjcloudx.sys_dept AS d + ON d.dept_id = m.dept_id + AND d.del_flag = '0' + WHERE m.del_flag = '0' + AND m.types = '1'), + r (dept_id, parent_id, dept_name, root_dept_id, mch_id, mch_name, level) AS (SELECT d.dept_id, + d.parent_id, + d.name, + root.root_dept_id, + root.mch_id, + root.mch_name, + 0 + FROM pjcloudx.sys_dept AS d + JOIN root + ON root.root_dept_id = d.dept_id + WHERE d.del_flag = '0' + UNION ALL + SELECT c.dept_id, + c.parent_id, + c.name, + r.root_dept_id, + r.mch_id, + r.mch_name, + r.level + 1 + FROM pjcloudx.sys_dept AS c + JOIN r + ON c.parent_id = r.dept_id + WHERE c.del_flag = '0') +SELECT root_dept_id AS mchDeptId, + mch_id AS mchId, + mch_name AS mchName, + dept_id AS deptId, + parent_id AS parentId, + dept_name AS deptName, + level AS level +FROM r +ORDER BY mchDeptId, level, deptId; \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletTransactionDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletTransactionDto.java index 76c8a076d..f6398a928 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletTransactionDto.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/WalletTransactionDto.java @@ -23,6 +23,11 @@ public class WalletTransactionDto extends WalletTransactionEntity implements Bas private Integer type; + /** + * 商户相关 + */ + private Long mchId; + /** * 用户id */ @@ -41,6 +46,8 @@ public class WalletTransactionDto extends WalletTransactionEntity implements Bas */ private Boolean isFindOrder = false; + private List totalDpetIds; + /** * 部门ids */ diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/mch/WalletMchDeptViewDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/mch/WalletMchDeptViewDto.java new file mode 100644 index 000000000..1f79560db --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/mch/WalletMchDeptViewDto.java @@ -0,0 +1,13 @@ +package com.bsd.pjcloud.wallet.api.dto.mch; + +import com.bsd.pjcloud.wallet.api.entity.mch.view.WalletMchDeptViewEntity; +import lombok.Data; + +import java.util.List; + +@Data +public class WalletMchDeptViewDto extends WalletMchDeptViewEntity { + + private List mchIdList; + +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/mch/view/WalletMchDeptViewEntity.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/mch/view/WalletMchDeptViewEntity.java new file mode 100644 index 000000000..3bc3ba566 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/mch/view/WalletMchDeptViewEntity.java @@ -0,0 +1,48 @@ +package com.bsd.pjcloud.wallet.api.entity.mch.view; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 商户部门视图 + */ +@Data +@Schema(description = "商户部门视图") +public class WalletMchDeptViewEntity { + + /** + * 商户部门id + */ + private Long mchDeptId; + + /** + * 商户id + */ + private Long mchId; + + /** + * 商户名 + */ + private String mchName; + + /** + * 上级部门id + */ + private Long parentId; + + /** + * 部门id + */ + private Long deptId; + + /** + * 部门名 + */ + private String deptName; + + /** + * 层级 + */ + private Long level; + +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletCzTotalVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletCzTotalVo.java new file mode 100644 index 000000000..319a64956 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/WalletCzTotalVo.java @@ -0,0 +1,55 @@ +package com.bsd.pjcloud.wallet.api.vo; + +import lombok.Data; + +@Data +public class WalletCzTotalVo { + + /** + * 商户id + */ + private Long mchId; + + /** + * 商户名 + */ + private String mchName; + + /** + * 部门id + */ + private Long deptId; + + /** + * 部门名 + */ + private String deptName; + + /** + * 充值金额 + */ + private Long price = 0L; + + private String priceStr; + + /** + * 充值人数 + */ + private Long personCount = 0L; + + private String personCountStr; + + /** + * 充值次数 + */ + private Long timeCount = 0L; + + private String timeCountStr; + + /** + * 导出相关 + */ + private Long lineNumber; + + +} 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 index c1cba5230..5bbb52ebd 100644 --- 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 @@ -5,6 +5,11 @@ import lombok.Data; @Data public class WalletTypeCountVo { + /** + * 部门id + */ + private Long deptId; + /** * 充值次数 */ @@ -15,4 +20,9 @@ public class WalletTypeCountVo { */ private Long priceTotal; + /** + * 充值人数 + */ + private Long personTotal; + } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/mch/WalletMchDeptViewVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/mch/WalletMchDeptViewVo.java new file mode 100644 index 000000000..3660267ae --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/mch/WalletMchDeptViewVo.java @@ -0,0 +1,8 @@ +package com.bsd.pjcloud.wallet.api.vo.mch; + +import com.bsd.pjcloud.wallet.api.entity.mch.view.WalletMchDeptViewEntity; +import lombok.Data; + +@Data +public class WalletMchDeptViewVo extends WalletMchDeptViewEntity { +} 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 21d6c8edc..0b7e97d2c 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 @@ -5,7 +5,6 @@ import cn.hutool.core.util.ObjectUtil; 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; @@ -15,6 +14,7 @@ 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.WalletCzTotalVo; 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; @@ -101,6 +101,42 @@ public class WalletTransactionController { return R.ok(walletTransactionService.scopePageList(page, dto, dataScope)); } + @Operation(summary = "后台充值统计", description = "后台充值统计") + @PostMapping("/page-cz-total") + public R> listCzTotal(@RequestBody WalletTransactionDto dto) { + dto.setBizTypes(WalletBizEnum.getTopUpCodes()); + dto.setType(WalletTransactionDto.TYPE_INCOME); + if (ObjectUtil.isNotEmpty(dto.getPrice())) { + dto.setPrice(dto.getPrice() * 100); + } + + DataScope dataScope = new DataScope(); + return R.ok(walletTransactionService.pageCzTotalList(dto, dataScope)); + } + + @Operation(summary = "后台充值统计(导出)", description = "后台充值统计(导出)") + @PostMapping("/export-cz-total") + public void exportCzTotal(HttpServletResponse response, @RequestBody WalletTransactionDto dto) { + dto.setBizTypes(WalletBizEnum.getTopUpCodes()); + dto.setType(WalletTransactionDto.TYPE_INCOME); + if (ObjectUtil.isNotEmpty(dto.getPrice())) { + dto.setPrice(dto.getPrice() * 100); + } + walletTransactionService.exportCzTotal(response, dto, null); + } + + @Operation(summary = "后台充值统计", description = "后台充值统计") + @PostMapping("/page-cz-dept-total") + public R> listDeptCzTotal(@RequestBody WalletTransactionDto dto) { + dto.setBizTypes(WalletBizEnum.getTopUpCodes()); + dto.setType(WalletTransactionDto.TYPE_INCOME); + if (ObjectUtil.isNotEmpty(dto.getPrice())) { + dto.setPrice(dto.getPrice() * 100); + } + DataScope dataScope = new DataScope(); + return R.ok(walletTransactionService.listDeptCzTotal(dto, dataScope)); + } + @Operation(summary = "后台记账扣款记录分页", description = "后台记账扣款记录分页") @PostMapping("/page-jz") public R pageJz(@ParameterObject Page page, @RequestBody WalletTransactionDto dto) { 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 d5e25f9eb..81453e7b8 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 @@ -71,6 +71,8 @@ public interface WalletTransactionMapper extends PjcloudBaseMapper walletTypetotalByDept(@Param("dto") WalletTransactionDto dto, @Param("dataScope") DataScope dataScope); + default List 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/mapper/mch/view/MchDeptViewMapper.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/mch/view/MchDeptViewMapper.java new file mode 100644 index 000000000..4184bd696 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/mch/view/MchDeptViewMapper.java @@ -0,0 +1,17 @@ +package com.bsd.pjcloud.wallet.mapper.mch.view; + +import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; +import com.bsd.pjcloud.wallet.api.dto.mch.WalletMchDeptViewDto; +import com.bsd.pjcloud.wallet.api.entity.mch.view.WalletMchDeptViewEntity; +import com.bsd.pjcloud.wallet.api.vo.mch.WalletMchDeptViewVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface MchDeptViewMapper { + + List selectList(@Param("dto") WalletMchDeptViewDto dto); + +} 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 bfc27c7d1..939bc09b8 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,6 +6,7 @@ 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.WalletCzTotalVo; import com.bsd.pjcloud.wallet.api.vo.WalletTypeTotalVo; import com.bsd.pjcloud.wallet.api.vo.transaction.WalletTransactionVo; import jakarta.servlet.http.HttpServletResponse; @@ -16,6 +17,16 @@ public interface WalletTransactionService extends IService scopePageList(Page page, WalletTransactionDto dto, DataScope dataScope); + /** + * 后台充值统计 + */ + List pageCzTotalList(WalletTransactionDto dto, DataScope dataScope); + + /** + * 后台充值统计(按照部门) + */ + List listDeptCzTotal(WalletTransactionDto dto, DataScope dataScope); + /** * 记账列表 */ @@ -57,4 +68,9 @@ public interface WalletTransactionService extends IService list); + + /** + * 后台充值统计(导出) + */ + void exportCzTotal(HttpServletResponse response, WalletTransactionDto dto, DataScope dataScope); } \ 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 8cace247f..dc6c7014b 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 @@ -21,21 +21,30 @@ 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.hard.api.constant.HardTypeEnum; import com.bsd.pjcloud.wallet.api.constant.WalletBizEnum; import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum; +import com.bsd.pjcloud.wallet.api.constant.mch.WalletMchSupType; +import com.bsd.pjcloud.wallet.api.dto.MchManageDto; import com.bsd.pjcloud.wallet.api.dto.WalletManageDto; import com.bsd.pjcloud.wallet.api.dto.WalletTransactionDto; import com.bsd.pjcloud.wallet.api.dto.WalletTypeDto; +import com.bsd.pjcloud.wallet.api.dto.mch.WalletMchDeptViewDto; 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.MchManageVo; +import com.bsd.pjcloud.wallet.api.vo.WalletCzTotalVo; import com.bsd.pjcloud.wallet.api.vo.WalletTypeCountVo; import com.bsd.pjcloud.wallet.api.vo.WalletTypeTotalVo; +import com.bsd.pjcloud.wallet.api.vo.mch.WalletMchDeptViewVo; import com.bsd.pjcloud.wallet.api.vo.transaction.WalletTransactionVo; import com.bsd.pjcloud.wallet.mapper.WalletManageMapper; import com.bsd.pjcloud.wallet.mapper.WalletTransactionMapper; import com.bsd.pjcloud.wallet.mapper.WalletTypeMapper; +import com.bsd.pjcloud.wallet.mapper.mch.view.MchDeptViewMapper; +import com.bsd.pjcloud.wallet.service.MchManageService; import com.bsd.pjcloud.wallet.service.WalletManageService; import com.bsd.pjcloud.wallet.service.WalletThirdZyService; import com.bsd.pjcloud.wallet.service.WalletTransactionService; @@ -74,6 +83,9 @@ public class WalletTransactionServiceImpl extends ServiceImpl pageCzTotalList(WalletTransactionDto dto, DataScope dataScope) { + List resultList = new ArrayList<>(); + // 查询食堂 + MchManageDto mchQueryDto = MchManageDto.builder().typesList(List.of(HardTypeEnum.SUPERMARKET.getType())).build(); + if (ObjectUtil.isNotEmpty(dto.getMchId())) { + mchQueryDto.setId(dto.getMchId()); + } + List list = mchManageService.list(mchQueryDto); + if (ObjectUtil.isEmpty(list)) return List.of(); + resultList = list.stream().map(item -> { + WalletCzTotalVo entity = new WalletCzTotalVo(); + entity.setMchId(item.getId()); + entity.setMchName(item.getName()); + entity.setDeptId(item.getDeptId()); + entity.setDeptName(item.getDeptName()); + return entity; + }).toList(); + // 查询食堂的充值情况 + WalletMchDeptViewDto query = new WalletMchDeptViewDto(); + query.setMchIdList(list.stream().map(MchManageVo::getId).toList()); + List mchDeptList = mchDeptViewMapper.selectList(query); + if (ObjectUtil.isEmpty(list)) return List.of(); + for (WalletCzTotalVo item : resultList) { + Long mchId = item.getMchId(); + List mchAllDeptIdList = mchDeptList.stream().filter(v -> ObjectUtil.equals(v.getMchId(), mchId)).map(WalletMchDeptViewVo::getDeptId).toList(); + if (ObjectUtil.isEmpty(mchAllDeptIdList)) continue; + + WalletTransactionDto totalQuery = BeanUtils.toBean(dto, WalletTransactionDto.class); + totalQuery.setTotalDpetIds(mchAllDeptIdList); + WalletTypeCountVo totalVo = baseMapper.walletTypetotal(totalQuery, null); + if (ObjectUtil.isEmpty(totalVo)) continue; + item.setPrice(totalVo.getPriceTotal()); + item.setPersonCount(totalVo.getPersonTotal()); + item.setTimeCount(totalVo.getTimeTotal()); + } + return resultList; + } + + /** + * 后台充值统计(按照部门) + */ + @Override + public List listDeptCzTotal(WalletTransactionDto dto, DataScope dataScope) { + List resultList = new ArrayList<>(); + // 查询食堂的充值情况 + WalletMchDeptViewDto query = new WalletMchDeptViewDto(); + query.setMchId(dto.getMchId()); + List mchDeptList = mchDeptViewMapper.selectList(query); + if (ObjectUtil.isEmpty(mchDeptList)) return List.of(); + resultList = mchDeptList.stream().map(item -> { + WalletCzTotalVo entity = new WalletCzTotalVo(); + entity.setMchId(item.getMchId()); + entity.setMchName(item.getMchName()); + entity.setDeptId(item.getDeptId()); + entity.setDeptName(item.getDeptName()); + return entity; + }).toList(); + // 查询部门的充值情况 + WalletTransactionDto totalQuery = BeanUtils.toBean(dto, WalletTransactionDto.class); + totalQuery.setTotalDpetIds(resultList.stream().map(WalletCzTotalVo::getDeptId).toList()); + List deptTotalList = baseMapper.walletTypetotalByDept(totalQuery, null); + + for (WalletCzTotalVo item : resultList) { + Long deptId = item.getDeptId(); + WalletTypeCountVo targetTotal = deptTotalList.stream().filter(v -> ObjectUtil.equals(v.getDeptId(), deptId)).findFirst().orElse(null); + if (ObjectUtil.isEmpty(targetTotal)) { + continue; + } + item.setPrice(targetTotal.getPriceTotal()); + item.setPersonCount(targetTotal.getPersonTotal()); + item.setTimeCount(targetTotal.getTimeTotal()); + } + return resultList; + } + /** * 记账列表 */ @@ -261,6 +352,56 @@ public class WalletTransactionServiceImpl extends ServiceImpl list = pageCzTotalList(dto, dataScope); + + 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()[1], DatePattern.NORM_DATETIME_PATTERN)); + } + if (ObjectUtil.isNotEmpty(list)) { + BigDecimal priceTotal = BigDecimal.ZERO; + BigDecimal personCountTotal = BigDecimal.ZERO; + BigDecimal timeCountTotal = BigDecimal.ZERO; + Long lineNumber = 1L; + for (WalletCzTotalVo v : list) { + v.setLineNumber(lineNumber); + lineNumber++; + 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()); + } + if (ObjectUtil.isNotEmpty(v.getPersonCount())) { + v.setPersonCountStr(v.getPersonCount().toString()); + personCountTotal = personCountTotal.add(BigDecimal.valueOf(v.getPersonCount())); + } + if (ObjectUtil.isNotEmpty(v.getTimeCount())) { + v.setTimeCountStr(v.getTimeCount().toString()); + timeCountTotal = timeCountTotal.add(BigDecimal.valueOf(v.getTimeCount())); + } + } + map.put("priceTotal", priceTotal.divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toString()); + map.put("personCountTotal", personCountTotal.toString()); + map.put("timeCountTotal", timeCountTotal.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 void disposeList(List list, WalletTransactionDto dto) { if (ObjectUtil.isNotEmpty(list)) { 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..0f6a7eaf2403c8ca70059dfea19c4043bae0032c GIT binary patch literal 9961 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 literal 0 HcmV?d00001 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 dd6ab9665..a5844eccc 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 @@ -47,6 +47,9 @@ and a.dept_id = #{dto.deptId} + + and a.price = #{dto.price} + and a.price > 0 @@ -68,6 +71,12 @@ and a.create_time between #{dto.createTimeList[0]} and #{dto.createTimeList[1]} + + and a.dept_id IN + + #{v} + + @@ -224,7 +233,7 @@ + + \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/MchManageMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/MchManageMapper.xml index a536907d5..d8304eb83 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/MchManageMapper.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/MchManageMapper.xml @@ -59,6 +59,9 @@ a.del_flag = 0 + + and a.id = #{dto.id} + and a.types = #{dto.types} diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/view/MchDeptViewMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/view/MchDeptViewMapper.xml new file mode 100644 index 000000000..709f63c6e --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/mch/view/MchDeptViewMapper.xml @@ -0,0 +1,55 @@ + + + + + + + select a.mchDeptId, + a.mchId, + a.mchName, + a.deptId, + a.parentId, + a.deptName, + a.level + + + + + and a.mchDeptId = #{dto.mchDeptId} + + + and a.mchId = #{dto.mchId} + + + and a.mchId IN + + #{v} + + + + and a.mchName like concat('%',#{dto.mchName},'%') + + + and a.deptId = #{dto.deptId} + + + and a.parentId = #{dto.parentId} + + + and a.deptName like concat('%',#{dto.deptName},'%') + + + and a.level = #{dto.level} + + + + + + \ No newline at end of file