From 5d04194db9d1627a73da12f03350c8124bf9cc60 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 21 Feb 2025 11:06:16 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=E8=B4=A2=E5=8A=A1=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/api/feign/RemoteUserService.java | 4 +- .../bsd/pjcloud/admin/api/vo/UserExcelVO.java | 141 +++++++++--------- .../admin/controller/SysUserController.java | 4 +- .../wallet/api/dto/WalletManageDto.java | 10 ++ .../controller/WalletManageController.java | 10 +- .../WalletTransactionController.java | 15 +- .../wallet/mapper/WalletManageMapper.java | 22 +++ .../mapper/WalletTransactionMapper.java | 50 ++++--- .../wallet/service/WalletManageService.java | 3 +- .../service/WalletTransactionService.java | 2 +- .../service/impl/WalletManageServiceImpl.java | 90 ++++++----- .../impl/WalletTransactionServiceImpl.java | 132 +++++++--------- 12 files changed, 257 insertions(+), 226 deletions(-) diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteUserService.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteUserService.java index 1f5e4ec47..7bfb4d7d1 100644 --- a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteUserService.java +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/feign/RemoteUserService.java @@ -75,8 +75,8 @@ public interface RemoteUserService { * @param userIds ID * @return SysUser */ - @GetMapping("/user/list") - R> getUserById(@RequestParam("userIds") List userIds); + @PostMapping("/user/list") + R> getUserById(@RequestBody List userIds); @GetMapping("/user/user-dept") R> getUserDeptByIds(@RequestParam("userIds") List userIds); diff --git a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/vo/UserExcelVO.java b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/vo/UserExcelVO.java index e3989210b..157b7a794 100644 --- a/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/vo/UserExcelVO.java +++ b/pjcloud-upms/pjcloud-upms-api/src/main/java/com/bsd/pjcloud/admin/api/vo/UserExcelVO.java @@ -7,6 +7,7 @@ import com.bsd.pjcloud.common.excel.annotation.ExcelLine; import lombok.Data; import jakarta.validation.constraints.NotBlank; + import java.io.Serializable; import java.time.LocalDateTime; @@ -20,87 +21,87 @@ import java.time.LocalDateTime; @ColumnWidth(30) public class UserExcelVO implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - /** - * 导入时候回显行号 - */ - @ExcelLine - @ExcelIgnore - private Long lineNum; + /** + * 导入时候回显行号 + */ + @ExcelLine + @ExcelIgnore + private Long lineNum; - /** - * 主键ID - */ - @ExcelProperty("用户编号") - private Long userId; + /** + * 主键ID + */ + @ExcelProperty("用户编号") + private Long userId; - /** - * 用户名 - */ - @NotBlank(message = "用户名不能为空") - @ExcelProperty("用户名") - private String username; + /** + * 用户名 + */ + @NotBlank(message = "用户名不能为空") + @ExcelProperty("用户名") + private String username; - /** - * 手机号 - */ - @NotBlank(message = "手机号不能为空") - @ExcelProperty("手机号") - private String phone; + /** + * 手机号 + */ + @NotBlank(message = "手机号不能为空") + @ExcelProperty("手机号") + private String phone; - /** - * 手机号 - */ - @NotBlank(message = "昵称不能为空") - @ExcelProperty("昵称") - private String nickname; + /** + * 手机号 + */ + @NotBlank(message = "昵称不能为空") + @ExcelProperty("昵称") + private String nickname; - /** - * 手机号 - */ - @NotBlank(message = "姓名不能为空") - @ExcelProperty("姓名") - private String name; + /** + * 手机号 + */ + @NotBlank(message = "姓名不能为空") + @ExcelProperty("姓名") + private String name; - /** - * 手机号 - */ - @NotBlank(message = "邮箱不能为空") - @ExcelProperty("邮箱") - private String email; + /** + * 手机号 + */ + @NotBlank(message = "邮箱不能为空") + @ExcelProperty("邮箱") + private String email; - /** - * 部门名称 - */ - @NotBlank(message = "部门名称不能为空") - @ExcelProperty("部门名称") - private String deptName; + /** + * 部门名称 + */ + @NotBlank(message = "部门名称不能为空") + @ExcelProperty("部门名称") + private String deptName; - /** - * 角色列表 - */ - @NotBlank(message = "角色不能为空") - @ExcelProperty("角色") - private String roleNameList; + /** + * 角色列表 + */ + @NotBlank(message = "角色不能为空") + @ExcelProperty("角色") + private String roleNameList; - /** - * 角色列表 - */ - @NotBlank(message = "岗位不能为空") - @ExcelProperty("岗位名称") - private String postNameList; + /** + * 角色列表 + */ + @NotBlank(message = "岗位不能为空") + @ExcelProperty("岗位名称") + private String postNameList; - /** - * 锁定标记 - */ - @ExcelProperty("锁定标记,0:正常,9:已锁定") - private String lockFlag; + /** + * 锁定标记 + */ + @ExcelProperty("锁定标记,0:正常,9:已锁定") + private String lockFlag; - /** - * 创建时间 - */ - @ExcelProperty(value = "创建时间") - private LocalDateTime createTime; + /** + * 创建时间 + */ + @ExcelProperty(value = "创建时间") + private LocalDateTime createTime; } 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 416ec8391..3945fd824 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 @@ -343,8 +343,8 @@ public class SysUserController { * @param userIds ID列表 * @return 用户列表 */ - @GetMapping("/list") - public R> getUserListByIds(@RequestParam("userIds") List userIds) { + @PostMapping("/list") + public R> getUserListByIds(@RequestBody List userIds) { return R.ok(userService.list(Wrappers.lambdaQuery().in(SysUser::getUserId, userIds))); } 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 d9470b02e..4f8aa8e00 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 @@ -16,4 +16,14 @@ public class WalletManageDto extends WalletManageEntity { private LocalDateTime[] createTimeList; + /** + * 是否深度搜索deptId + */ + private Boolean isDeepDept; + + /** + * 部门ids + */ + private List deptIds; + } \ 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 57015aced..d8f568536 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 @@ -144,9 +144,9 @@ public class WalletManageController { } @Operation(summary = "分页查询", description = "分页查询") - @GetMapping("/page-join") + @PostMapping("/page-join") @PreAuthorize("@pms.hasPermission('wallet_walletManage_view')") - public R getWalletManagePageJoin(@ParameterObject Page page, @ParameterObject WalletManageDto dto) { + public R getWalletManagePageJoin(@ParameterObject Page page, @RequestBody WalletManageDto dto) { return R.ok(walletManageService.scopePageList(page, dto, DataScope.of())); } @@ -180,10 +180,10 @@ public class WalletManageController { public R removeById(@RequestBody Long[] ids) { return R.ok(walletManageService.removeBatchByIds(CollUtil.toList(ids))); } - - @GetMapping("/export") + + @PostMapping("/export") @PreAuthorize("@pms.hasPermission('wallet_walletManage_export')") - public void export(HttpServletResponse response, @ParameterObject Page page, @ParameterObject WalletManageDto dto) { + public void export(HttpServletResponse response, @ParameterObject Page page, @RequestBody 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 6eee9c65b..82c818389 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 @@ -161,28 +161,29 @@ public class WalletTransactionController { @Operation(summary = "充值导出", description = "充值导出") @PostMapping("/export-cz") @PreAuthorize("@pms.hasPermission('wallet_walletTransaction_export')") - public void exportCz(HttpServletResponse response, @ParameterObject Page page, @RequestBody WalletTransactionDto dto) { - dto.setBizTypes(List.of(WalletBizEnum.RECHARGE.getCode())); - List list = walletTransactionService.scopePageList(page, dto, DataScope.of()).getRecords(); + public void exportCz(HttpServletResponse response, @RequestBody WalletTransactionDto dto) { + dto.setBizTypes(WalletBizEnum.getTopUpCodes()); + dto.setType(WalletTransactionDto.TYPE_INCOME); + List list = walletTransactionService.scopeList(dto, DataScope.of()); walletTransactionService.exportByTemplate(response, dto, "file/个人充值明细.xlsx", list); } @Operation(summary = "消费导出", description = "消费导出") @PostMapping("/export-xf") @PreAuthorize("@pms.hasPermission('wallet_walletTransaction_export')") - public void exportXf(HttpServletResponse response, @ParameterObject Page page, @RequestBody WalletTransactionDto dto) { + public void exportXf(HttpServletResponse response, @RequestBody WalletTransactionDto dto) { dto.setBizTypes(List.of(WalletBizEnum.PAYMENT.getCode())); - List list = walletTransactionService.scopePageList(page, dto, DataScope.of()).getRecords(); + List list = walletTransactionService.scopeList(dto, DataScope.of()); walletTransactionService.exportByTemplate(response, dto, "file/个人消费明细.xlsx", list); } @Operation(summary = "退款导出", description = "退款导出") @PostMapping("/export-tk") @PreAuthorize("@pms.hasPermission('wallet_walletTransaction_export')") - public void exportTk(HttpServletResponse response, @ParameterObject Page page, @RequestBody WalletTransactionDto dto) { + public void exportTk(HttpServletResponse response, @RequestBody WalletTransactionDto dto) { dto.setBizTypes(List.of(WalletBizEnum.REFUND.getCode())); dto.setIsFindOrder(true); - List list = walletTransactionService.scopePageList(page, dto, DataScope.of()).getRecords(); + List list = walletTransactionService.scopeList(dto, DataScope.of()); 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 55a815371..afe5b1307 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 @@ -105,10 +105,12 @@ public interface WalletManageMapper extends PjcloudBaseMapper scopePageList(Page page, WalletManageDto dto, DataScope dataScope) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper() .eq(ObjectUtil.isNotEmpty(dto.getUserId()), WalletManageEntity::getUserId, dto.getUserId()) + .eq(ObjectUtil.isNotEmpty(dto.getDeptId()), WalletManageEntity::getDeptId, dto.getDeptId()) .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()) + .in(ObjectUtil.isNotEmpty(dto.getDeptIds()), WalletManageEntity::getDeptId, dto.getDeptIds()) .between( ObjectUtil.isNotEmpty(dto.getCreateTimeList()), WalletManageEntity::getCreateTime, @@ -121,4 +123,24 @@ public interface WalletManageMapper extends PjcloudBaseMapper scopeList(WalletManageDto dto, DataScope dataScope) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(dto.getUserId()), WalletManageEntity::getUserId, dto.getUserId()) + .eq(ObjectUtil.isNotEmpty(dto.getDeptId()), WalletManageEntity::getDeptId, dto.getDeptId()) + .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()) + .in(ObjectUtil.isNotEmpty(dto.getDeptIds()), WalletManageEntity::getDeptId, dto.getDeptIds()) + .between( + ObjectUtil.isNotEmpty(dto.getCreateTimeList()), + WalletManageEntity::getCreateTime, + ObjectUtil.isNotEmpty(dto.getCreateTimeList()) ? dto.getCreateTimeList()[0] : null, + ObjectUtil.isNotEmpty(dto.getCreateTimeList()) ? dto.getCreateTimeList()[1] : null + ) + .orderByDesc(WalletManageEntity::getCreateTime); + List list = selectListByScope(wrapper, dataScope); + return BeanUtils.toBean(list, WalletManageVo.class); + } + } \ 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 bad6fd667..873e39393 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 @@ -24,33 +24,11 @@ import java.util.Objects; @Mapper public interface WalletTransactionMapper extends PjcloudBaseMapper { - default List pageList(WalletTransactionDto dto) { - MPJLambdaWrapper wrapper = new MPJLambdaWrapper() - .selectAll(WalletTransactionEntity.class) - .selectAs(WalletManageEntity::getUserId, WalletTransactionVo::getUserId) - .selectAs(WalletManageEntity::getDeptId, WalletTransactionVo::getDeptId) - .selectAs(WalletTypeEntity::getName, WalletTransactionVo::getWalletTypeName) - .selectAs(WalletTypeEntity::getUniqueCode, WalletTransactionVo::getWalletTypeUniqueCode) - .leftJoin(WalletManageEntity.class, WalletManageEntity::getId, WalletTransactionEntity::getWalletId) - .leftJoin(WalletTypeEntity.class, WalletTypeEntity::getId, WalletManageEntity::getWalletTypeId) - .eqIfExists(WalletTransactionEntity::getWalletId, dto.getWalletId()) - .eqIfExists(WalletTransactionEntity::getBizType, dto.getBizType()) - .eqIfExists(WalletManageEntity::getWalletTypeId, dto.getWalletTypeId()) - .in(ObjectUtil.isNotEmpty(dto.getBizTypes()), WalletTransactionEntity::getBizType, dto.getBizTypes()) - .in(ObjectUtil.isNotEmpty(dto.getUserIds()), WalletManageEntity::getUserId, dto.getUserIds()) - .orderByDesc(WalletTransactionEntity::getCreateTime); - if (ObjectUtil.equals(dto.getType(), WalletTransactionDto.TYPE_INCOME)) { - wrapper.gt(WalletTransactionEntity::getPrice, 0); - } else if (Objects.equals(dto.getType(), WalletTransactionDto.TYPE_EXPENSE)) { - wrapper.lt(WalletTransactionEntity::getPrice, 0); - } - return selectJoinList(WalletTransactionVo.class, wrapper); - } - default Page scopePageList(Page page, WalletTransactionDto dto, DataScope dataScope) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper() .eq(ObjectUtil.isNotEmpty(dto.getWalletId()), WalletTransactionEntity::getWalletId, dto.getWalletId()) .eq(ObjectUtil.isNotEmpty(dto.getBizType()), WalletTransactionEntity::getBizType, dto.getBizType()) + .eq(ObjectUtil.isNotEmpty(dto.getUserId()), WalletTransactionEntity::getUserId, dto.getUserId()) .eq(ObjectUtil.isNotEmpty(dto.getDeptId()), WalletTransactionEntity::getDeptId, dto.getDeptId()) .in(ObjectUtil.isNotEmpty(dto.getUserIds()), WalletTransactionEntity::getUserId, dto.getUserIds()) .in(ObjectUtil.isNotEmpty(dto.getDeptIds()), WalletTransactionEntity::getDeptId, dto.getDeptIds()) @@ -72,6 +50,32 @@ public interface WalletTransactionMapper extends PjcloudBaseMapper scopeList(WalletTransactionDto dto, DataScope dataScope) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(dto.getWalletId()), WalletTransactionEntity::getWalletId, dto.getWalletId()) + .eq(ObjectUtil.isNotEmpty(dto.getBizType()), WalletTransactionEntity::getBizType, dto.getBizType()) + .eq(ObjectUtil.isNotEmpty(dto.getUserId()), WalletTransactionEntity::getUserId, dto.getUserId()) + .eq(ObjectUtil.isNotEmpty(dto.getDeptId()), WalletTransactionEntity::getDeptId, dto.getDeptId()) + .in(ObjectUtil.isNotEmpty(dto.getUserIds()), WalletTransactionEntity::getUserId, dto.getUserIds()) + .in(ObjectUtil.isNotEmpty(dto.getDeptIds()), WalletTransactionEntity::getDeptId, dto.getDeptIds()) + .in(ObjectUtil.isNotEmpty(dto.getBizTypes()), WalletTransactionEntity::getBizType, dto.getBizTypes()) + .between( + ObjectUtil.isNotEmpty(dto.getCreateTimeList()), + WalletTransactionEntity::getCreateTime, + ObjectUtil.isNotEmpty(dto.getCreateTimeList()) ? dto.getCreateTimeList()[0] : null, + ObjectUtil.isNotEmpty(dto.getCreateTimeList()) ? dto.getCreateTimeList()[1] : null + ) + .orderByDesc(WalletTransactionEntity::getCreateTime); + if (ObjectUtil.equals(dto.getType(), WalletTransactionDto.TYPE_INCOME)) { + wrapper.gt(WalletTransactionEntity::getPrice, 0); + } else if (Objects.equals(dto.getType(), WalletTransactionDto.TYPE_EXPENSE)) { + wrapper.lt(WalletTransactionEntity::getPrice, 0); + } + List list = selectListByScope(wrapper, dataScope); + return BeanUtils.toBean(list, WalletTransactionVo.class); + } + + Integer getTransactionPriceCount(@Param("month") String importTimeStr, @Param("walletId") Long walletId, @Param("bizType") String bizType); List selectCompare(@Param("bizType") String bizType, @Param("dateTime") String monthTimeStr, @Param("userIdList") List userIdList); 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 53feeb7b6..2c7054888 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 @@ -2,7 +2,6 @@ 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; @@ -83,7 +82,7 @@ public interface WalletManageService extends IService { Page scopePageList(Page page, WalletManageDto dto, DataScope dataScope); - List joinList(WalletManageDto dto); + List scopeList(WalletManageDto dto, DataScope dataScope); WalletManageVo join(Long user, Long walletId); 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 696c93014..03b90d82b 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 @@ -16,7 +16,7 @@ public interface WalletTransactionService extends IService scopePageList(Page page, WalletTransactionDto dto, DataScope dataScope); - List pageList(WalletTransactionDto dto); + List scopeList(WalletTransactionDto dto, DataScope dataScope); /** * 扣减钱包余额 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 aaad3d1ea..3cd4ef8ef 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 @@ -39,7 +39,6 @@ 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; @@ -49,7 +48,6 @@ import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.cache.annotation.Cacheable; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -61,6 +59,7 @@ import java.math.RoundingMode; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*; +import java.util.stream.Collectors; /** * 钱包管理 @@ -219,51 +218,38 @@ public class WalletManageServiceImpl extends ServiceImpl joinList(WalletManageDto dto) { - List list = baseMapper.joinList(dto); - if (ObjectUtil.isNotEmpty(list)) { - // 用户 - List userIds = list.stream().map(WalletManageVo::getUserId).distinct().toList(); - R> userList = userService.getUserById(new ArrayList<>(userIds)); - if (ObjectUtil.isNotEmpty(userList.getData())) { - DataUtil.convertUserList(list, CollectionUtils.convertMap(userList.getData(), SysUser::getUserId)); - } - // 部门 - List deptIds = list.stream().map(WalletManageVo::getDeptId).distinct().toList(); - R> deptList = deptService.getDeptByDeptIds(deptIds); - if (ObjectUtil.isNotEmpty(deptList.getData())) { - DataUtil.convertDeptList(list, deptList.getData()); + public List scopeList(WalletManageDto dto, DataScope dataScope) { + // 查询部门 + if (ObjectUtil.isNotEmpty(dto.getIsDeepDept()) && dto.getIsDeepDept() && ObjectUtil.isNotEmpty(dto.getDeptId())) { + List deptList = deptService.getDescendantList(dto.getDeptId()).getData(); + dto.setDeptId(null); + if (ObjectUtil.isNotEmpty(deptList)) { + dto.setDeptIds(deptList.stream().map(SysDept::getDeptId).collect(Collectors.toList())); } } + if (ObjectUtil.isNotEmpty(dto.getDeptIds())) { + dto.setDeptId(null); + } + List list = baseMapper.scopeList(dto, dataScope); + disposeList(list, dto); return list; } @Override 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(); - R> userList = userService.getUserById(new ArrayList<>(userIds)); - if (ObjectUtil.isNotEmpty(userList.getData())) { - DataUtil.convertUserList(list.getRecords(), CollectionUtils.convertMap(userList.getData(), SysUser::getUserId)); - } - // 部门 - List deptIds = list.getRecords().stream().map(WalletManageVo::getDeptId).distinct().toList(); - R> deptList = deptService.getDeptByDeptIds(deptIds); - if (ObjectUtil.isNotEmpty(deptList.getData())) { - DataUtil.convertDeptList(list.getRecords(), deptList.getData()); - } - // 饭卡类型 - List walletTypeId = list.getRecords().stream().map(WalletManageVo::getWalletTypeId).distinct().toList(); - if (ObjectUtil.isNotEmpty(walletTypeId)) { - WalletTypeDto walletTypeDto = new WalletTypeDto(); - List walletTypeList = walletTypeMapper.list(walletTypeDto); - if (ObjectUtil.isNotEmpty(walletTypeList)) { - WalletDataUtil.convertWalletTypeList(list.getRecords(), CollectionUtils.convertMap(walletTypeList, WalletTypeEntity::getId)); - } + // 查询部门 + if (ObjectUtil.isNotEmpty(dto.getIsDeepDept()) && dto.getIsDeepDept() && ObjectUtil.isNotEmpty(dto.getDeptId())) { + List deptList = deptService.getDescendantList(dto.getDeptId()).getData(); + dto.setDeptId(null); + if (ObjectUtil.isNotEmpty(deptList)) { + dto.setDeptIds(deptList.stream().map(SysDept::getDeptId).collect(Collectors.toList())); } } + if (ObjectUtil.isNotEmpty(dto.getDeptIds())) { + dto.setDeptId(null); + } + Page list = baseMapper.scopePageList(page, dto, dataScope); + disposeList(list.getRecords(), dto); return list; } @@ -283,7 +269,7 @@ public class WalletManageServiceImpl extends ServiceImpl list = scopePageList(page, dto, DataScope.of()).getRecords(); + List list = scopeList(dto, DataScope.of()); 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(); @@ -323,6 +309,32 @@ public class WalletManageServiceImpl extends ServiceImpl list, WalletManageDto dto) { + if (ObjectUtil.isNotEmpty(list)) { + // 用户 + List userIds = list.stream().map(WalletManageVo::getUserId).distinct().toList(); + R> userList = userService.getUserById(new ArrayList<>(userIds)); + if (ObjectUtil.isNotEmpty(userList.getData())) { + DataUtil.convertUserList(list, CollectionUtils.convertMap(userList.getData(), SysUser::getUserId)); + } + // 部门 + List deptIds = list.stream().map(WalletManageVo::getDeptId).distinct().toList(); + R> deptList = deptService.getDeptByDeptIds(deptIds); + if (ObjectUtil.isNotEmpty(deptList.getData())) { + DataUtil.convertDeptList(list, deptList.getData()); + } + // 饭卡类型 + List walletTypeId = list.stream().map(WalletManageVo::getWalletTypeId).distinct().toList(); + if (ObjectUtil.isNotEmpty(walletTypeId)) { + WalletTypeDto walletTypeDto = new WalletTypeDto(); + List walletTypeList = walletTypeMapper.list(walletTypeDto); + if (ObjectUtil.isNotEmpty(walletTypeList)) { + WalletDataUtil.convertWalletTypeList(list, CollectionUtils.convertMap(walletTypeList, WalletTypeEntity::getId)); + } + } + } + } + private WalletManageServiceImpl getSelf() { return SpringUtil.getBean(getClass()); } 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 579149818..3db6a8e27 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,7 +17,6 @@ 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.constant.CacheConstants; import com.bsd.pjcloud.common.core.util.CollectionUtils; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; @@ -38,7 +37,6 @@ 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; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -179,54 +177,59 @@ public class WalletTransactionServiceImpl extends ServiceImpl list = baseMapper.scopePageList(page, dto, dataScope); - if (ObjectUtil.isNotEmpty(list.getRecords())) { - // 用户 - List userIds = list.getRecords().stream().map(WalletTransactionVo::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)); - } - // 部门 - List deptIds = list.getRecords().stream().map(WalletTransactionVo::getDeptId).distinct().toList(); - R> deptList = deptService.getDeptByDeptIds(deptIds); - if (ObjectUtil.isNotEmpty(deptList.getData())) { - DataUtil.convertDeptList(list.getRecords(), deptList.getData()); - } - // 饭卡 - List walletIds = list.getRecords().stream().map(WalletTransactionVo::getWalletId).distinct().toList(); - if (ObjectUtil.isNotEmpty(walletIds)) { - WalletManageDto walletManageDto = new WalletManageDto(); - walletManageDto.setWalletIds(walletIds); - List walletList = walletManageMapper.list(walletManageDto); - if (ObjectUtil.isNotEmpty(walletList)) { - WalletDataUtil.convertWalletList(list.getRecords(), CollectionUtils.convertMap(walletList, WalletManageEntity::getId)); - } - } - // 饭卡类型 - List walletTypeIds = list.getRecords().stream().map(WalletTransactionVo::getWalletTypeId).distinct().toList(); - if (ObjectUtil.isNotEmpty(walletTypeIds)) { - WalletTypeDto walletTypeDto = new WalletTypeDto(); - walletTypeDto.setWalletTypeIds(walletTypeIds); - List walletTypeList = walletTypeMapper.list(walletTypeDto); - if (ObjectUtil.isNotEmpty(walletTypeList)) { - WalletDataUtil.convertWalletTypeList(list.getRecords(), CollectionUtils.convertMap(walletTypeList, WalletTypeEntity::getId)); - } - } - // 订单 - if (dto.getIsFindOrder()) { - list.getRecords().forEach(v -> { - if (ObjectUtil.isNotEmpty(v.getBizId())) { - v.setOrderId(Long.valueOf(v.getBizId())); - } - }); - } - } + disposeList(list.getRecords(), dto); return list; } @Override - public List pageList(WalletTransactionDto dto) { - List list = baseMapper.pageList(dto); + public List scopeList(WalletTransactionDto dto, DataScope dataScope) { + // 查询部门 + if (ObjectUtil.isNotEmpty(dto.getIsDeepDept()) && dto.getIsDeepDept() && ObjectUtil.isNotEmpty(dto.getDeptId())) { + List deptList = deptService.getDescendantList(dto.getDeptId()).getData(); + dto.setDeptId(null); + if (ObjectUtil.isNotEmpty(deptList)) { + dto.setDeptIds(deptList.stream().map(SysDept::getDeptId).collect(Collectors.toList())); + } + } + if (ObjectUtil.isNotEmpty(dto.getDeptIds())) { + dto.setDeptId(null); + } + List list = baseMapper.scopeList(dto, dataScope); + disposeList(list, dto); + return list; + } + + @Override + public void exportByTemplate(HttpServletResponse response, WalletTransactionDto dto, String fileName, List 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()); + } + } + + + private void disposeList(List list, WalletTransactionDto dto) { if (ObjectUtil.isNotEmpty(list)) { // 用户 List userIds = list.stream().map(WalletTransactionVo::getUserId).distinct().toList(); @@ -260,36 +263,15 @@ public class WalletTransactionServiceImpl extends ServiceImpl { + if (ObjectUtil.isNotEmpty(v.getBizId())) { + v.setOrderId(Long.valueOf(v.getBizId())); + } + }); + } } - return list; } - @Override - public void exportByTemplate(HttpServletResponse response, WalletTransactionDto dto, String fileName, List 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 From 3df60e707c38c261f5c25d1aaf2e4db6ee9c580b Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 21 Feb 2025 15:44:25 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E9=92=B1=E5=8C=85?= =?UTF-8?q?=E6=B5=81=E6=B0=B4=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wallet/api/constant/WalletBizEnum.java | 6 ++ .../api/constant/WalletBizRechargeEnum.java | 6 ++ .../dto/recharge/WalletRechargeImportDto.java | 10 +++ .../vo/recharge/WalletRechargeImportVo.java | 4 + .../WalletTransactionController.java | 4 +- .../WalletRechargeImportController.java | 60 ++++++++++++-- .../recharge/WalletRechargeImportMapper.java | 2 + .../service/WalletRechargeImportService.java | 2 + .../impl/WalletTransactionServiceImpl.java | 4 + .../WalletRechargeImportServiceImpl.java | 74 +++++++++++++----- .../src/main/resources/file/个人充值明细.xlsx | Bin 10021 -> 10083 bytes .../src/main/resources/file/个人消费明细.xlsx | Bin 9952 -> 9994 bytes .../src/main/resources/file/个人退款明细.xlsx | Bin 10021 -> 10080 bytes .../resources/file/批量充值扣款流水明细.xlsx | Bin 0 -> 10064 bytes .../recharge/WalletRechargeImportMapper.xml | 16 +++- 15 files changed, 159 insertions(+), 29 deletions(-) create mode 100644 pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/file/批量充值扣款流水明细.xlsx diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletBizEnum.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletBizEnum.java index 6d582e8bf..490cfaf0a 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletBizEnum.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletBizEnum.java @@ -28,6 +28,12 @@ public enum WalletBizEnum { ); } + public static WalletBizEnum valueOfByType(String code) { + return Arrays.stream(WalletBizEnum.values()) + .filter(v -> ObjectUtil.equal(v.getCode(), code)) + .findFirst().get(); + } + public static WalletBizEnum descOf(String description) { return Arrays.stream(WalletBizEnum.values()) .filter(v -> ObjectUtil.equal(v.getDesc(), description)) diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletBizRechargeEnum.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletBizRechargeEnum.java index 17a2e8f36..839d4bec0 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletBizRechargeEnum.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletBizRechargeEnum.java @@ -16,6 +16,12 @@ public enum WalletBizRechargeEnum { private final String desc; + public static WalletBizRechargeEnum valueOfByType(String code) { + return Arrays.stream(WalletBizRechargeEnum.values()) + .filter(v -> ObjectUtil.equal(v.getCode(), code)) + .findFirst().get(); + } + public static WalletBizRechargeEnum descOf(String description) { return Arrays.stream(WalletBizRechargeEnum.values()) .filter(v -> ObjectUtil.equal(v.getDesc(), description)) diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/recharge/WalletRechargeImportDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/recharge/WalletRechargeImportDto.java index e414029ba..379b1fd73 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/recharge/WalletRechargeImportDto.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/recharge/WalletRechargeImportDto.java @@ -19,10 +19,20 @@ public class WalletRechargeImportDto extends WalletRechargeImportEntity { private Long userDeptId; + /** + * 是否深度搜索deptId + */ + private Boolean isDeepDept; + + /** + * 部门ids + */ private List userDeptIds; private LocalDateTime[] createTimeList; private LocalDateTime[] processTimeList; + private String bizType; + } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/recharge/WalletRechargeImportVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/recharge/WalletRechargeImportVo.java index 233f47f58..48cece896 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/recharge/WalletRechargeImportVo.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/recharge/WalletRechargeImportVo.java @@ -52,4 +52,8 @@ public class WalletRechargeImportVo extends WalletRechargeImportEntity implement private String walletTypeUniqueCode; private String walletTypeIcon; + + private String priceStr; + + private String importTimeStr; } 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 82c818389..bcf949ec3 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 @@ -96,7 +96,7 @@ public class WalletTransactionController { @PostMapping("/page-cz") public R pageCz(@ParameterObject Page page, @RequestBody WalletTransactionDto dto) { dto.setBizTypes(WalletBizEnum.getTopUpCodes()); - dto.setType(WalletTransactionDto.TYPE_INCOME); + // dto.setType(WalletTransactionDto.TYPE_INCOME); DataScope dataScope = new DataScope(); return R.ok(walletTransactionService.scopePageList(page, dto, dataScope)); } @@ -163,7 +163,7 @@ public class WalletTransactionController { @PreAuthorize("@pms.hasPermission('wallet_walletTransaction_export')") public void exportCz(HttpServletResponse response, @RequestBody WalletTransactionDto dto) { dto.setBizTypes(WalletBizEnum.getTopUpCodes()); - dto.setType(WalletTransactionDto.TYPE_INCOME); + // dto.setType(WalletTransactionDto.TYPE_INCOME); List list = walletTransactionService.scopeList(dto, DataScope.of()); walletTransactionService.exportByTemplate(response, dto, "file/个人充值明细.xlsx", list); } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/recharge/WalletRechargeImportController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/recharge/WalletRechargeImportController.java index 6696271ff..4a9cdded8 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/recharge/WalletRechargeImportController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/recharge/WalletRechargeImportController.java @@ -1,7 +1,15 @@ package com.bsd.pjcloud.wallet.controller.recharge; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -9,9 +17,15 @@ import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.idempotent.annotation.Idempotent; import com.bsd.pjcloud.common.log.annotation.SysLog; +import com.bsd.pjcloud.hard.api.constant.HardTypeEnum; +import com.bsd.pjcloud.wallet.api.constant.WalletBizRechargeEnum; +import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum; import com.bsd.pjcloud.wallet.api.dto.recharge.WalletRechargeImportDto; import com.bsd.pjcloud.wallet.api.entity.recharge.WalletRechargeImportEntity; +import com.bsd.pjcloud.wallet.api.vo.recharge.WalletRechargeImportVo; +import com.bsd.pjcloud.wallet.api.vo.transaction.WalletTransactionVo; import com.bsd.pjcloud.wallet.service.WalletRechargeImportService; +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; @@ -22,7 +36,12 @@ import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +import java.io.IOException; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; /** @@ -57,9 +76,9 @@ public class WalletRechargeImportController { } @Operation(summary = "分页复杂查询", description = "分页复杂查询") - @GetMapping("/page-join") + @PostMapping("/page-join") @PreAuthorize("@pms.hasPermission('wallet_walletRechargeImport_view')") - public R scopePageList(@ParameterObject Page page, @ParameterObject WalletRechargeImportDto dto) { + public R scopePageList(@ParameterObject Page page, @RequestBody WalletRechargeImportDto dto) { return R.ok(walletRechargeImportService.scopePageList(page, dto, DataScope.of())); } @@ -95,9 +114,40 @@ public class WalletRechargeImportController { } @ResponseExcel - @GetMapping("/export") + @PostMapping("/export") @PreAuthorize("@pms.hasPermission('wallet_walletRechargeImport_export')") - public List export(WalletRechargeImportEntity walletRechargeImport, Long[] ids) { - return walletRechargeImportService.list(Wrappers.lambdaQuery(walletRechargeImport).in(ArrayUtil.isNotEmpty(ids), WalletRechargeImportEntity::getId, ids)); + public void export(HttpServletResponse response, @RequestBody WalletRechargeImportDto dto) throws IOException { + List list = walletRechargeImportService.scopeList(dto, DataScope.of()); + 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 priceStrSum = BigDecimal.ZERO; + for (WalletRechargeImportVo v : list) { + if (ObjectUtil.isNotEmpty(v.getPrice())) { + priceStrSum = priceStrSum.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.getImportTime())) { + v.setImportTimeStr(LocalDateTimeUtil.format(v.getImportTime(), DatePattern.NORM_MONTH_PATTERN)); + } + if (ObjectUtil.isNotEmpty(v.getBizType())) { + v.setBizType(WalletBizRechargeEnum.valueOfByType(v.getBizType()).getDesc()); + } + if (ObjectUtil.isNotEmpty(v.getWalletTypeUniqueCode())) { + v.setWalletTypeUniqueCode(WalletTypeEnum.valueOfByCode(v.getWalletTypeUniqueCode()).getDesc()); + } + } + map.put("priceStrSum", priceStrSum.divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).toString()); + } + excelWriter.fill(map, writeSheet); + excelWriter.fill(list, fillConfig, writeSheet); + } } } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/recharge/WalletRechargeImportMapper.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/recharge/WalletRechargeImportMapper.java index a1fbbcbaa..86a510182 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/recharge/WalletRechargeImportMapper.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/recharge/WalletRechargeImportMapper.java @@ -17,6 +17,8 @@ public interface WalletRechargeImportMapper extends PjcloudBaseMapper scopePageList(Page page, @Param("dto") WalletRechargeImportDto dto, DataScope dataScope); + List scopeList(@Param("dto") WalletRechargeImportDto dto, DataScope dataScope); + default Page pageJoin(Page page, WalletRechargeImportDto dto) { MPJLambdaWrapper wrapper = new MPJLambdaWrapper() .eqIfExists(WalletRechargeImportEntity::getId, dto.getId()) diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletRechargeImportService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletRechargeImportService.java index 49fb414bd..b1e0dbfbb 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletRechargeImportService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/WalletRechargeImportService.java @@ -18,5 +18,7 @@ public interface WalletRechargeImportService extends IService scopePageList(Page page, WalletRechargeImportDto dto, DataScope dataScope); + List scopeList(WalletRechargeImportDto dto, DataScope dataScope); + Boolean recover(Long id); } \ 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 3db6a8e27..3b17e75e7 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,6 +21,7 @@ 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.wallet.api.constant.WalletBizEnum; +import com.bsd.pjcloud.wallet.api.constant.WalletBizRechargeEnum; import com.bsd.pjcloud.wallet.api.dto.WalletManageDto; import com.bsd.pjcloud.wallet.api.dto.WalletTransactionDto; import com.bsd.pjcloud.wallet.api.dto.WalletTypeDto; @@ -217,6 +218,9 @@ public class WalletTransactionServiceImpl extends ServiceImpl scopePageList(Page page, WalletRechargeImportDto dto, DataScope dataScope) { - Page list = baseMapper.scopePageList(page, dto, dataScope); - if (ObjectUtil.isNotEmpty(list.getRecords())) { - // 用户 - List userIds = list.getRecords().stream().map(WalletRechargeImportVo::getUserId).distinct().toList(); - if (ObjectUtil.isNotEmpty(userIds)) { - R> userList = userService.getUserDeptByIds(new ArrayList<>(userIds)); - if (ObjectUtil.isNotEmpty(userList.getData())) { - DataUtil.convertUserDeptList(list.getRecords(), CollectionUtils.convertMap(userList.getData(), UserVO::getUserId)); - } - } - // 饭卡类型 - List walletTypeId = list.getRecords().stream().map(WalletRechargeImportVo::getWalletTypeId).distinct().toList(); - if (ObjectUtil.isNotEmpty(walletTypeId)) { - WalletTypeDto walletTypeDto = new WalletTypeDto(); - List walletTypeList = walletTypeMapper.list(walletTypeDto); - if (ObjectUtil.isNotEmpty(walletTypeList)) { - WalletDataUtil.convertWalletTypeList(list.getRecords(), CollectionUtils.convertMap(walletTypeList, WalletTypeEntity::getId)); - } + // 查询部门 + if (ObjectUtil.isNotEmpty(dto.getIsDeepDept()) && dto.getIsDeepDept() && ObjectUtil.isNotEmpty(dto.getUserDeptId())) { + List deptList = deptService.getDescendantList(dto.getUserDeptId()).getData(); + dto.setUserDeptId(null); + if (ObjectUtil.isNotEmpty(deptList)) { + dto.setUserDeptIds(deptList.stream().map(SysDept::getDeptId).collect(Collectors.toList())); } } + if (ObjectUtil.isNotEmpty(dto.getUserDeptIds())) { + dto.setUserDeptId(null); + } + Page list = baseMapper.scopePageList(page, dto, dataScope); + disposeList(list.getRecords(), dto); + return list; + } + + @Override + public List scopeList(WalletRechargeImportDto dto, DataScope dataScope) { + // 查询部门 + if (ObjectUtil.isNotEmpty(dto.getIsDeepDept()) && dto.getIsDeepDept() && ObjectUtil.isNotEmpty(dto.getUserDeptId())) { + List deptList = deptService.getDescendantList(dto.getUserDeptId()).getData(); + dto.setUserDeptId(null); + if (ObjectUtil.isNotEmpty(deptList)) { + dto.setUserDeptIds(deptList.stream().map(SysDept::getDeptId).collect(Collectors.toList())); + } + } + if (ObjectUtil.isNotEmpty(dto.getUserDeptIds())) { + dto.setUserDeptId(null); + } + List list = baseMapper.scopeList(dto, dataScope); + disposeList(list, dto); return list; } @@ -138,4 +148,26 @@ public class WalletRechargeImportServiceImpl extends ServiceImpl list, WalletRechargeImportDto dto) { + if (ObjectUtil.isNotEmpty(list)) { + // 用户 + List userIds = list.stream().map(WalletRechargeImportVo::getUserId).distinct().toList(); + if (ObjectUtil.isNotEmpty(userIds)) { + R> userList = userService.getUserDeptByIds(new ArrayList<>(userIds)); + if (ObjectUtil.isNotEmpty(userList.getData())) { + DataUtil.convertUserDeptList(list, CollectionUtils.convertMap(userList.getData(), UserVO::getUserId)); + } + } + // 饭卡类型 + List walletTypeId = list.stream().map(WalletRechargeImportVo::getWalletTypeId).distinct().toList(); + if (ObjectUtil.isNotEmpty(walletTypeId)) { + WalletTypeDto walletTypeDto = new WalletTypeDto(); + List walletTypeList = walletTypeMapper.list(walletTypeDto); + if (ObjectUtil.isNotEmpty(walletTypeList)) { + WalletDataUtil.convertWalletTypeList(list, CollectionUtils.convertMap(walletTypeList, WalletTypeEntity::getId)); + } + } + } + } } \ 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 index 7891f08cfc83c97e8ec6c354acfb57ff65b081d8..e29b87028bf276714634c9b3e55a2cbc36303898 100644 GIT binary patch delta 5430 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 diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/file/个人消费明细.xlsx b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/file/个人消费明细.xlsx index a517bcaa5db945c427bd0747695baad6602c960f..fe60ad04baa94e1a2033750596ad16b3955e98b5 100644 GIT binary patch delta 1903 zcmV-#2ax#SO^QyijRAixMbb=O0RRAJ0ssIJ0001FZ(~q$Z*X%jV{dY0E_iKhg_2uJ z#4s3z-v#$j^4_MmQ3-7aFAN9{3RV=~Lh{c{u}w=7?aU6m;11k`Z!Sp1Wtg@zV+REv z^PiJ1=lmoZ&Wqf-1F5o7#K?18WPxBM&%`uF7wO2}LzdE1aGHOY0%EiPg@(!YR>Ug8 zN(pDOtU&4vlx0Xl5mv=$rgcRyR%`|ZRgQ58BTh9g;wb~i%c&n(`gyE&*rQX*Y3H> z*2cQ7ojPb^nEZbpz8asLw^i*-G`nJel87_HBv4(-WZ$%%fpvCz9O2%$Sz%6<9-D1X zGT;Y`VEh;+%Lt-spYCB=~?>n{w z2@qA=7X;%oGiT0>hvma-o_Qybii;v5p+6uV6ig(%*hl2&kL}$(@sy@TLNif7MBYG= zhtbpX&FMkrK74qBIsAW-Z8IaR(Wp}><=$bXz_{FM7Zl@e%To$@Rg4hGX8 zr@SC8!a}|$hDcM+AQtSHL!n&|2^rPMUmbX<>S(XYyW%C1R#-iQ<+I|< z;!2=!7JqaUmPlR_3ml9`wkf} z4GE44@yrP9gm^K)&uAK$*cMJ#w&K_i)|k8>)HI)CE@e1Q{Wco>mU+lE0RGBL@S$S@N= zy_}n|CtglpT}>{_1o<+n**R@^c5@EHv%?HUa1Nu%Er-A*vZWgFS4$}>4+j%78s4KO zO;ZW#R8n)F!o?KzWCs0+aAP4J`Y5!XR)b}5LgCmM@#GLg%hI^4yN0-H*mMosD?@-h z8-KD`?f;NPIFd!}8?s@CY#%XfBi4PysEvsGh;bXS=_4j>#I}!^Hi(u2Sd39%*fjay z?Ls&zFuqb?*2J|9ed;6b+lX}^F>fQ{J|gT)#pVX2(~Ip5$fX%A5wIS6*Jl3o=8)n! zR*e!}`rc{UlY>kzQ`$Ae&M<2b8)v}hC1`4=(YUfq;(O!c2)o_lE?f?BZ?};0m^c=u zi+F(=>t*rT8{V~#7s$xOZ4Pj6lynbYsoe8Ic^RY_a^T}8kZu>*cP&b5MKyLp+#XIpDDIh$YX>MxVvA0e~Z2OtK2B})3)U;zLCVFCaE6aWAK zcx*3oXkl_?WK(oMn8E_iKhZIVGt!!Q_z?}GoK(D8)!lzY9ohHY=AlzpkOX9=|V_Nd8sf!O-gSELSfagi$soj zm@0C_xQnFP@+uS_$H*2njHTunN-@u)Q$e#iZr>G(o_htkyH+`I5cuidC~omS(kc6=X3 zx1VW{GzUpm-0{IC+8H&?R@;@&9f4bv>h`2ur_)a|m- zKC2KX3)o+0`Xo`OHG6+btAWK_&sP>EkyAwV z;=K16zs68~5%UL7O9KQH000080EbTEK!7F)<&$_1Dgi>1qYt-#V%NB$h1YU78KLJc?T$Bn$D+*jvW7>(8x4>ZI1f z@og)PuNIbb4l delta 1868 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

$0`CDBm<9HbHj~b zf;-WxhMHytk{n3{EcMLOU2L|mXU@1dV5sOYX5Cn8qshvIzTP~%KgF}3Gx+H>O5clx zHKKcJWo0+$vW;9AR?X?MCCc1OHKT*8Cv+9dNW3fx9g4X5524VHG-(0@?#lC|MWX6L zKb`#)mPdfB@KBsl*F3<5Hzhf;*R&8L0KXhE$_S~W&{j?sP{`58;Fj7Baf}q7AashF z>$RzbE~>F5r&50~4u@5y8V|yfQJk(qBH$?9>6~#6=FasVM=yV6P!9QF21z= z0QzHFd-UYbzCuPtHtSp4u>Ct9z{%jtmr%EV&{zpj30*VBFFqWvO?5T7B``4aJucgv z_ifgVPd%`Rp*2v$j`+>_aYs|&8R0cC_WG81_G`=UhwoC3YclMNyX0roMZX&3Uk}VI z$x>$4he&H9>0G>q|Hc)o_+Aphhu+dIOio>ew2sbj%QKh>5n0TFR#Qn=0}`bE$~r~< zd=>2n+``V z`&B?>kO?SxDw$A`=BRS}dLE12gjo$^g=;+LrMT}ctXIj~(a`mE*sgtq5^u;KZ&R@j zi9Z9AY8!v6)E-gGTK{O{yB~b1HZk&%VKV0)m}3Q%fYJRhUvTX2GUSFP+-zVl6^fD{ z%1zG7IoK++FlYli%AwSeYzL&{Y)~!Y>4Y9fw%DBO=;_=2YWY8{)v0D?wG=hdFMzwtpX>hJl6>8GxaJPBn>9#QApH*5 z>$*8P8JGB#sU|Nc77-`D2F*XX?ei~Txa%p&8-qp2+TSCG7((4IR^xpgJa{362%NK? ze#IaNWz#U3*n-Bl=kYjEezIb6j?yi@vQpKoPBr>TQ!ezRD83xrZlU|7fk0NP^)PHD_rt>aMrBP}4(U;gJQf8rP4kp@KVq36m^(PJx?5RKh+#w z5d~u%2XAVl_8UWFj+QBkO0RR%@!zztPok9j$%d~PKJ*+w{A7(^H<%{X1zZkVal!o8sbU=y4gQD|WxHb@<$!jzM zHd2=*?=nb;o+c^_8|SN#Wj=mH6l)R*{ZNXC(^#y*YTWQ3c{I(BZ>jiI+q~NnXPgRH zx(?Ih@wbFJ#nvR%oIm%n-NbT?2m$sQk-#XFqTGy9#?GOo#u7T?n7471wCFxHd)SjD z5>xVfP%_u>_;Pb-T+=6Do_BK`_mXy1+?|B(k(=p3#h%J)QKg{r*XNwv*hO^;F7)DI zmuaVkL-t+!Og%oB>$L6;j=gO+xdL-**|tW<$+S`B$thiHUFTj6D=@tZI?o!E4)9#3 z`Xh!_WNnf^WhXrv(QL=h<-Qgo_*mWyiVXhim3+M7F7f6o_V5e3Kf3B!aR$h!4#CQj z?HP}VENwq?k;g4oMzc(v{sXh&MB_*tE^*zQxQe7vEwsFe=Zm~Ua*UxwXqpabnxuRS zO+*K^DdHblLM8J(mTIi|UV2o1fdggZUL_{Zjw{Xv2XmRbN2(>dy4TH4E6!DG&K}LP zPiei$KWoc);m_{|lU$HLB~W6|u^y?sk4>vjJ+$TcvC>Gp$UDFKxWF#{w{-geJu6$f zS0u&P6d5MX(n%zI7&D6f03t{BRewWBV7B(R-p^_a6?8X`Lu;n#YY!*98VTUsh#o_j`mp?r)PnNF0E(>iI#|HM@NQX zN=3FeC~GG`=>w6|Xhl~;X}PZUl__+|Tw4pK!sXMDxQ%7{EXWl91d%%Rfpf>#1zt$x zC=+|Dq|MUvC#U(I_@6YyOT?mRxS*H7M5{pZgC)_)8IYb}K6GIQWEnW=zb2yuWC+b1 zi47G*dyjkx<);0=I{!hlfzUvV4@ip)hqBWCUqSc(>ctP=6A`p;NDLN1bYdK&C<~PK mpCIjeFbxJDTs7i<%!l>gW}QfX7SsRVaoc7Qdn5z?NBAEyo*wuB delta 5325 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 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..dfe85f6ade8d50ca771b0168277e8ba6f92c79f8 GIT binary patch literal 10064 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 a.del_flag = 0 + + and a.user_id = #{dto.userId} + and a.user_id in @@ -60,7 +63,7 @@ - + + + + \ No newline at end of file From a7fe7c5c324fecc7dbf47d6b914579610a1b45ba Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 21 Feb 2025 15:58:41 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:=E4=BA=BA=E5=91=98=E5=AF=BC=E5=87=BAbu?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/SysUserController.java | 15 +++++++-------- .../admin/service/impl/SysUserServiceImpl.java | 17 ++++++++++++++++- .../src/main/resources/mapper/SysUserMapper.xml | 10 ++++++++-- 3 files changed, 31 insertions(+), 11 deletions(-) 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 71c52e66f..d6c91eec1 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,7 +20,6 @@ package com.bsd.pjcloud.admin.controller; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -247,10 +246,10 @@ public class SysUserController { * @return */ @ResponseExcel - @GetMapping("/export") + @PostMapping("/export") @HasPermission("sys_user_export") - public List export(UserDTO userDTO, Long[] ids) { - return userService.listUser(userDTO, ids); + public List export(@RequestBody UserDTO userDTO) { + return userService.listUser(userDTO, null); } /** @@ -380,11 +379,11 @@ public class SysUserController { @GetMapping("/getSimpleUserAll") @Schema(description = "简要用户信息") - public R> getSimpleUserAllList(@RequestParam(value = "mobile",required = false) String mobile, - @RequestParam(value = "name",required = false) String name){ + public R> getSimpleUserAllList(@RequestParam(value = "mobile", required = false) String mobile, + @RequestParam(value = "name", required = false) String name) { LambdaQueryWrapper sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); - sysUserLambdaQueryWrapper.like(StringUtils.isNotBlank(mobile),SysUser::getPhone,mobile); - sysUserLambdaQueryWrapper.like(StringUtils.isNotBlank(name),SysUser::getName,name); + sysUserLambdaQueryWrapper.like(StringUtils.isNotBlank(mobile), SysUser::getPhone, mobile); + sysUserLambdaQueryWrapper.like(StringUtils.isNotBlank(name), SysUser::getName, name); List list = userService.listScope(sysUserLambdaQueryWrapper); return R.ok(list); diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java index df9fe7bca..fd637c1a1 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserServiceImpl.java @@ -220,6 +220,7 @@ public class SysUserServiceImpl extends ServiceImpl impl */ @Override public IPage getUsersWithRolePage(Page page, UserDTO userDTO) { + // 部门 if (ObjectUtil.isNotEmpty(userDTO.getIsDeepDept()) && userDTO.getIsDeepDept() && ObjectUtil.isNotEmpty(userDTO.getDeptId())) { List deptList = sysDeptService.listDescendant(userDTO.getDeptId()); userDTO.setDeptId(null); @@ -227,6 +228,9 @@ public class SysUserServiceImpl extends ServiceImpl impl userDTO.setDeptIds(deptList.stream().map(SysDept::getDeptId).collect(Collectors.toList())); } } + if (ObjectUtil.isNotEmpty(userDTO.getDeptIds())) { + userDTO.setDeptId(null); + } IPage list = baseMapper.getUserVosPage(page, userDTO, DataScope.of()); if (ObjectUtil.isNotEmpty(list.getRecords())) { List userIds = list.getRecords().stream().map(UserVO::getUserId).distinct().toList(); @@ -363,6 +367,17 @@ public class SysUserServiceImpl extends ServiceImpl impl */ @Override public List listUser(UserDTO userDTO, Long[] ids) { + // 部门 + if (ObjectUtil.isNotEmpty(userDTO.getIsDeepDept()) && userDTO.getIsDeepDept() && ObjectUtil.isNotEmpty(userDTO.getDeptId())) { + List deptList = sysDeptService.listDescendant(userDTO.getDeptId()); + userDTO.setDeptId(null); + if (ObjectUtil.isNotEmpty(deptList)) { + userDTO.setDeptIds(deptList.stream().map(SysDept::getDeptId).collect(Collectors.toList())); + } + } + if (ObjectUtil.isNotEmpty(userDTO.getDeptIds())) { + userDTO.setDeptId(null); + } // 根据数据权限查询全部的用户信息 List voList = baseMapper.selectVoListByScope(userDTO, ids, DataScope.of()); // 转换成execl 对象输出 @@ -768,7 +783,7 @@ public class SysUserServiceImpl extends ServiceImpl impl @Override public List listScope(LambdaQueryWrapper sysUserLambdaQueryWrapper) { - List sysUsers = baseMapper.selectListByScope(sysUserLambdaQueryWrapper,DataScope.of()); + List sysUsers = baseMapper.selectListByScope(sysUserLambdaQueryWrapper, DataScope.of()); List collect = sysUsers.stream().map(sysUser -> { SimpleUserAllListVO vo = new SimpleUserAllListVO(); vo.setId(sysUser.getUserId()); diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserMapper.xml b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserMapper.xml index f49b9b596..0f850493a 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserMapper.xml +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserMapper.xml @@ -247,9 +247,15 @@ AND u.dept_id = #{query.deptId} - + + AND u.dept_id in + + #{id} + + + AND u.user_id in - + #{id}