feat:每月钱包余额报表

This commit is contained in:
dzc committed 2025-02-28 14:34:04 +08:00
1 parent dd1991fead
commit de1448e9d2
15 files changed
+324 -108

No files matched your search

@@ -11,11 +11,6 @@ import java.util.List;
@Data
public class HardOrderDto extends HardOrderEntity implements BaseIsIncludeTreeInterface {
/**
* 订单部门id极其子部门id
*/
private Long deptIdIdDeepen;
private List<Long> deptIds;
private Boolean isInclude = false;
@@ -163,7 +163,7 @@ public class HardOrderTotalController {
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));
map.put("endTime", LocalDateTimeUtil.format(dto.getCreateTimeList()[1], DatePattern.NORM_DATETIME_PATTERN));
}
if (ObjectUtil.isNotEmpty(list)) {
// 批量充值
@@ -24,12 +24,14 @@ import java.util.List;
@Mapper
public interface HardOrderMapper extends PjcloudBaseMapper<HardOrderEntity> {
default Page<HardOrderVo> scopePageList(Page page, HardOrderDto dto) {
private LambdaQueryWrapper<HardOrderEntity> commonWrapper(HardOrderDto dto) {
LambdaQueryWrapper<HardOrderEntity> wrapper = new LambdaQueryWrapper<HardOrderEntity>()
.eq(ObjectUtil.isNotEmpty(dto.getOrderType()), HardOrderEntity::getOrderType, dto.getOrderType())
.eq(ObjectUtil.isNotEmpty(dto.getPayType()), HardOrderEntity::getPayType, dto.getPayType())
.eq(ObjectUtil.isNotEmpty(dto.getOrderStatus()), HardOrderEntity::getOrderStatus, dto.getOrderStatus())
.eq(ObjectUtil.isNotEmpty(dto.getHourType()), HardOrderEntity::getHourType, dto.getHourType())
.eq(ObjectUtil.isNotEmpty(dto.getDeptId()), HardOrderEntity::getDeptId, dto.getDeptId())
.eq(ObjectUtil.isNotEmpty(dto.getUserId()), HardOrderEntity::getUserId, dto.getUserId())
.in(ObjectUtil.isNotEmpty(dto.getOrderIds()), HardOrderEntity::getId, dto.getOrderIds())
.in(ObjectUtil.isNotEmpty(dto.getUserIds()), HardOrderEntity::getUserId, dto.getUserIds())
.in(ObjectUtil.isNotEmpty(dto.getHardIds()), HardOrderEntity::getHardId, dto.getHardIds())
@@ -48,7 +50,11 @@ public interface HardOrderMapper extends PjcloudBaseMapper<HardOrderEntity> {
ObjectUtil.isNotEmpty(dto.getPayTimeList()) ? dto.getPayTimeList()[1] : null
)
.orderByDesc(HardOrderEntity::getCreateTime);
Page list = selectPageByScope(page, wrapper, DataScope.of());
return wrapper;
}
default Page<HardOrderVo> scopePageList(Page page, HardOrderDto dto) {
Page list = selectPageByScope(page, commonWrapper(dto), DataScope.of());
list.setRecords(BeanUtils.toBean(list.getRecords(), HardOrderVo.class));
return list;
}
@@ -60,6 +66,7 @@ public interface HardOrderMapper extends PjcloudBaseMapper<HardOrderEntity> {
.selectAs(HardManagerEntity::getType, HardOrderVo::getHardType)
.leftJoin(HardManagerEntity.class, HardManagerEntity::getId, HardOrderEntity::getHardId)
.eqIfExists(HardOrderEntity::getUserId, dto.getUserId())
.eqIfExists(HardOrderEntity::getDeptId, dto.getDeptId())
.eqIfExists(HardOrderEntity::getOrderType, dto.getOrderType())
.eqIfExists(HardOrderEntity::getPayType, dto.getPayType())
.eqIfExists(HardOrderEntity::getOrderStatus, dto.getOrderStatus())
@@ -79,30 +86,7 @@ public interface HardOrderMapper extends PjcloudBaseMapper<HardOrderEntity> {
}
default List<HardOrderEntity> list(HardOrderDto dto) {
LambdaQueryWrapper<HardOrderEntity> wrapper = new LambdaQueryWrapper<HardOrderEntity>()
.eq(ObjectUtil.isNotEmpty(dto.getOrderType()), HardOrderEntity::getOrderType, dto.getOrderType())
.eq(ObjectUtil.isNotEmpty(dto.getPayType()), HardOrderEntity::getPayType, dto.getPayType())
.eq(ObjectUtil.isNotEmpty(dto.getOrderStatus()), HardOrderEntity::getOrderStatus, dto.getOrderStatus())
.eq(ObjectUtil.isNotEmpty(dto.getHourType()), HardOrderEntity::getHourType, dto.getHourType())
.in(ObjectUtil.isNotEmpty(dto.getOrderIds()), HardOrderEntity::getId, dto.getOrderIds())
.in(ObjectUtil.isNotEmpty(dto.getUserIds()), HardOrderEntity::getUserId, dto.getUserIds())
.in(ObjectUtil.isNotEmpty(dto.getHardIds()), HardOrderEntity::getHardId, dto.getHardIds())
.in(ObjectUtil.isNotEmpty(dto.getMchIds()), HardOrderEntity::getMerchantId, dto.getMchIds())
.in(ObjectUtil.isNotEmpty(dto.getUserDeptIds()), HardOrderEntity::getDeptId, dto.getUserDeptIds())
.between(
ObjectUtil.isNotEmpty(dto.getCreateTimeList()),
HardOrderEntity::getCreateTime,
ObjectUtil.isNotEmpty(dto.getCreateTimeList()) ? dto.getCreateTimeList()[0] : null,
ObjectUtil.isNotEmpty(dto.getCreateTimeList()) ? dto.getCreateTimeList()[1] : null
)
.between(
ObjectUtil.isNotEmpty(dto.getPayTimeList()),
HardOrderEntity::getPayTime,
ObjectUtil.isNotEmpty(dto.getPayTimeList()) ? dto.getPayTimeList()[0] : null,
ObjectUtil.isNotEmpty(dto.getPayTimeList()) ? dto.getPayTimeList()[1] : null
)
.orderByDesc(HardOrderEntity::getCreateTime);
return selectListByScope(wrapper, DataScope.of());
return selectListByScope(commonWrapper(dto), DataScope.of());
}
Page<HardOrderSbVo> pageListSb(Page page, @Param("dto") HardOrderDto dto);
@@ -116,14 +116,6 @@ public class HardOrderServiceImpl extends ServiceImpl<HardOrderMapper, HardOrder
@Override
public Page<HardOrderVo> scopePageList(Page page, HardOrderDto dto) {
if (ObjectUtil.isNotEmpty(dto.getDeptIdIdDeepen())) {
List<SysDept> deptList = deptService.getDescendantList(dto.getDeptIdIdDeepen()).getData();
if (ObjectUtil.isNotEmpty(deptList)) {
dto.setUserDeptIds(deptList.stream().map(SysDept::getDeptId).toList());
} else {
dto.setUserDeptIds(List.of(-1L));
}
}
Page<HardOrderVo> list = baseMapper.scopePageList(page, dto);
if (ObjectUtil.isNotEmpty(list.getRecords())) {
// 用户
@@ -0,0 +1,23 @@
package com.bsd.pjcloud.wallet.api.dto;
import com.bsd.pjcloud.admin.api.vo.base.BaseIsIncludeTreeInterface;
import lombok.Data;
import java.util.List;
@Data
public class WalletManageBalanceDto implements BaseIsIncludeTreeInterface {
private String walletRecordMonth;
private Long userId;
private List<Long> userIds;
private Long walletTypeId;
private Boolean isInclude;
private List<Long> deptIds;
}
@@ -0,0 +1,22 @@
package com.bsd.pjcloud.wallet.api.vo;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class WalletManageBalanceVo {
private Long userId;
private Long walletId;
private Long walletTypeId;
private String walletTypeName;
private Integer balance;
private LocalDateTime createTime;
}
@@ -6,6 +6,9 @@ import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity;
import com.bsd.pjcloud.wallet.api.vo.base.BaseWalletTypeInterface;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class WalletManageVo extends WalletManageEntity implements BaseUserInterface, BaseDeptInterface, BaseWalletTypeInterface {
@@ -39,4 +42,9 @@ public class WalletManageVo extends WalletManageEntity implements BaseUserInterf
* 导出相关
*/
private Long lineNumber;
/**
* 最后充值时间
*/
private LocalDateTime lastTopUpTime;
}
@@ -13,6 +13,7 @@ import com.bsd.pjcloud.common.security.annotation.Inner;
import com.bsd.pjcloud.common.security.service.PjcloudUser;
import com.bsd.pjcloud.common.security.util.SecurityUtils;
import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum;
import com.bsd.pjcloud.wallet.api.dto.WalletManageBalanceDto;
import com.bsd.pjcloud.wallet.api.dto.WalletManageDto;
import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity;
import com.bsd.pjcloud.wallet.api.vo.WalletManageVo;
@@ -148,6 +149,13 @@ public class WalletManageController {
return R.ok(walletManageService.scopePageList(page, dto, DataScope.of()));
}
@Operation(summary = "钱包记录分页", description = "钱包记录分页")
@PostMapping("/page-join-qb")
public R pageJoinQb(@ParameterObject Page page, @RequestBody WalletManageBalanceDto dto) {
DataScope dataScope = new DataScope();
return R.ok(walletManageService.scopeQbPage(page, dto, dataScope));
}
@Operation(summary = "通过id查询", description = "通过id查询")
@GetMapping("/{id}")
@PreAuthorize("@pms.hasPermission('wallet_walletManage_view')")
@@ -179,16 +187,15 @@ public class WalletManageController {
return R.ok(walletManageService.removeBatchByIds(CollUtil.toList(ids)));
}
@Operation(summary = "钱包记录分页", description = "钱包记录分页")
@PostMapping("/page-qb")
public R pageQb(@ParameterObject Page page, @RequestBody WalletManageDto dto) {
DataScope dataScope = new DataScope();
return R.ok(walletManageService.scopeQbPageList(page, dto, dataScope));
}
@PostMapping("/export")
@PreAuthorize("@pms.hasPermission('wallet_walletManage_export')")
public void export(HttpServletResponse response, @ParameterObject Page page, @RequestBody WalletManageDto dto) {
walletManageService.export(response, page, dto);
}
@PostMapping("/export-qb")
// @PreAuthorize("@pms.hasPermission('wallet_walletManage_export')")
public void exportQb(HttpServletResponse response, @ParameterObject Page page, @RequestBody WalletManageBalanceDto dto) {
walletManageService.exportQb(response, page, dto);
}
}
@@ -125,7 +125,7 @@ public class WalletRechargeImportController {
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));
map.put("endTime", LocalDateTimeUtil.format(dto.getCreateTimeList()[1], DatePattern.NORM_DATETIME_PATTERN));
}
if (ObjectUtil.isNotEmpty(list)) {
BigDecimal priceStrSum = BigDecimal.ZERO;
@@ -7,17 +7,48 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.core.util.BeanUtils;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
import com.bsd.pjcloud.wallet.api.dto.WalletManageBalanceDto;
import com.bsd.pjcloud.wallet.api.dto.WalletManageDto;
import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity;
import com.bsd.pjcloud.wallet.api.entity.WalletTypeEntity;
import com.bsd.pjcloud.wallet.api.vo.WalletManageBalanceVo;
import com.bsd.pjcloud.wallet.api.vo.WalletManageVo;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface WalletManageMapper extends PjcloudBaseMapper<WalletManageEntity> {
private LambdaQueryWrapper<WalletManageEntity> commonQuery(WalletManageDto dto) {
LambdaQueryWrapper<WalletManageEntity> wrapper = new LambdaQueryWrapper<WalletManageEntity>()
.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())
.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);
if (ObjectUtil.isNotEmpty(dto.getIsInclude())) {
if (dto.getIsInclude()) {
wrapper.in(ObjectUtil.isNotEmpty(dto.getDeptIds()), WalletManageEntity::getDeptId, dto.getDeptIds());
} else {
wrapper.notIn(ObjectUtil.isNotEmpty(dto.getDeptIds()), WalletManageEntity::getDeptId, dto.getDeptIds());
}
} else {
wrapper.in(ObjectUtil.isNotEmpty(dto.getDeptIds()), WalletManageEntity::getDeptId, dto.getDeptIds());
}
return wrapper;
}
/**
* 当消费时候, 更新钱包
*
@@ -102,61 +133,20 @@ public interface WalletManageMapper extends PjcloudBaseMapper<WalletManageEntity
return selectJoinOne(WalletManageVo.class, wrapper);
}
default Page<WalletManageVo> scopePageList(Page page, WalletManageDto dto, DataScope dataScope) {
LambdaQueryWrapper<WalletManageEntity> wrapper = new LambdaQueryWrapper<WalletManageEntity>()
.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())
.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);
if (ObjectUtil.isNotEmpty(dto.getIsInclude())) {
if (dto.getIsInclude()) {
wrapper.in(ObjectUtil.isNotEmpty(dto.getDeptIds()), WalletManageEntity::getDeptId, dto.getDeptIds());
} else {
wrapper.notIn(ObjectUtil.isNotEmpty(dto.getDeptIds()), WalletManageEntity::getDeptId, dto.getDeptIds());
}
} else {
wrapper.in(ObjectUtil.isNotEmpty(dto.getDeptIds()), WalletManageEntity::getDeptId, dto.getDeptIds());
}
Page list = selectPageByScope(page, wrapper, dataScope);
default Page<WalletManageVo> scopePage(Page page, WalletManageDto dto, DataScope dataScope) {
Page list = selectPageByScope(page, commonQuery(dto), dataScope);
list.setRecords(BeanUtils.toBean(list.getRecords(), WalletManageVo.class));
return list;
}
default List<WalletManageVo> scopeList(WalletManageDto dto, DataScope dataScope) {
LambdaQueryWrapper<WalletManageEntity> wrapper = new LambdaQueryWrapper<WalletManageEntity>()
.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())
.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);
if (ObjectUtil.isNotEmpty(dto.getIsInclude())) {
if (dto.getIsInclude()) {
wrapper.in(ObjectUtil.isNotEmpty(dto.getDeptIds()), WalletManageEntity::getDeptId, dto.getDeptIds());
} else {
wrapper.notIn(ObjectUtil.isNotEmpty(dto.getDeptIds()), WalletManageEntity::getDeptId, dto.getDeptIds());
}
} else {
wrapper.in(ObjectUtil.isNotEmpty(dto.getDeptIds()), WalletManageEntity::getDeptId, dto.getDeptIds());
}
List<WalletManageEntity> list = selectListByScope(wrapper, dataScope);
List<WalletManageEntity> list = selectListByScope(commonQuery(dto), dataScope);
return BeanUtils.toBean(list, WalletManageVo.class);
}
Page<Long> scopeUserPage(Page page, @Param("dto") WalletManageDto dto, @Param("dataScope") DataScope dataScope);
List<Long> scopeUserList(@Param("dto") WalletManageDto dto, @Param("dataScope") DataScope dataScope);
List<WalletManageBalanceVo> selectBalance(@Param("dto") WalletManageBalanceDto walletDto);
}
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum;
import com.bsd.pjcloud.wallet.api.dto.WalletManageBalanceDto;
import com.bsd.pjcloud.wallet.api.dto.WalletManageDto;
import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity;
import com.bsd.pjcloud.wallet.api.vo.WalletManageVo;
@@ -82,10 +83,12 @@ public interface WalletManageService extends IService<WalletManageEntity> {
Page<WalletManageVo> scopePageList(Page page, WalletManageDto dto, DataScope dataScope);
Page<WalletManageVo> scopeQbPageList(Page page, WalletManageDto dto, DataScope dataScope);
List<WalletManageVo> scopeList(WalletManageDto dto, DataScope dataScope);
Page<WalletManageVo> scopeQbPage(Page page, WalletManageBalanceDto dto, DataScope dataScope);
List<WalletManageVo> scopeQbList(WalletManageBalanceDto dto, DataScope dataScope);
WalletManageVo join(Long user, Long walletId);
/**
@@ -102,4 +105,13 @@ public interface WalletManageService extends IService<WalletManageEntity> {
* @param dto
*/
void export(HttpServletResponse response, Page page, WalletManageDto dto);
/**
* 钱包记录导出
*
* @param response
* @param page
* @param dto
*/
void exportQb(HttpServletResponse response, Page page, WalletManageBalanceDto dto);
}
@@ -32,11 +32,13 @@ import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum;
import com.bsd.pjcloud.hard.api.dto.code.QRCodeDto;
import com.bsd.pjcloud.hard.api.dto.code.QRCodeExtraDto;
import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum;
import com.bsd.pjcloud.wallet.api.dto.WalletManageBalanceDto;
import com.bsd.pjcloud.wallet.api.dto.WalletManageDto;
import com.bsd.pjcloud.wallet.api.dto.WalletTypeDto;
import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity;
import com.bsd.pjcloud.wallet.api.entity.WalletTypeEntity;
import com.bsd.pjcloud.wallet.api.utils.WalletDataUtil;
import com.bsd.pjcloud.wallet.api.vo.WalletManageBalanceVo;
import com.bsd.pjcloud.wallet.api.vo.WalletManageVo;
import com.bsd.pjcloud.wallet.api.vo.WalletSettingVo;
import com.bsd.pjcloud.wallet.mapper.WalletManageMapper;
@@ -59,7 +61,6 @@ import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
/**
* 钱包管理
@@ -226,7 +227,7 @@ public class WalletManageServiceImpl extends ServiceImpl<WalletManageMapper, Wal
@Override
public Page<WalletManageVo> scopePageList(Page page, WalletManageDto dto, DataScope dataScope) {
Page<WalletManageVo> list = baseMapper.scopePageList(page, dto, dataScope);
Page<WalletManageVo> list = baseMapper.scopePage(page, dto, dataScope);
disposeList(list.getRecords(), dto);
return list;
}
@@ -245,8 +246,75 @@ public class WalletManageServiceImpl extends ServiceImpl<WalletManageMapper, Wal
}
@Override
public Page<WalletManageVo> scopeQbPageList(Page page, WalletManageDto dto, DataScope dataScope) {
return null;
public Page<WalletManageVo> scopeQbPage(Page page, WalletManageBalanceDto dto, DataScope dataScope) {
WalletManageDto walletDto = BeanUtils.toBean(dto, WalletManageDto.class);
Page<WalletManageVo> walletPage = baseMapper.scopePage(page, walletDto, dataScope);
if (walletPage.getTotal() == 0) return walletPage;
walletPage.getRecords().forEach(v -> {
v.setBalance(0);
v.setTotalRecharge(0);
v.setTotalExpense(0);
});
List<Long> userIds = walletPage.getRecords().stream().map(WalletManageVo::getUserId).distinct().toList();
// 查询钱包类表
List<WalletTypeEntity> walletTypeList = walletTypeService.list();
if (ObjectUtil.isEmpty(walletTypeList)) return walletPage;
// 查询所有钱包类型的流水记录
for (WalletTypeEntity i : walletTypeList) {
dto.setWalletTypeId(i.getId());
if (ObjectUtil.isEmpty(dto.getUserId())) {
dto.setUserIds(userIds);
}
List<WalletManageBalanceVo> itemList = baseMapper.selectBalance(dto);
if (ObjectUtil.isEmpty(itemList)) continue;
for (WalletManageBalanceVo j : itemList) {
j.setWalletTypeName(i.getName());
walletPage.getRecords().stream().filter(v -> ObjectUtil.equals(v.getUserId(), j.getUserId())).findFirst().ifPresent(v -> {
if (ObjectUtil.isNotEmpty(j.getBalance())) {
v.setBalance(j.getBalance());
v.setLastTopUpTime(j.getCreateTime());
}
});
}
}
disposeList(walletPage.getRecords(), walletDto);
return walletPage;
}
@Override
public List<WalletManageVo> scopeQbList(WalletManageBalanceDto dto, DataScope dataScope) {
WalletManageDto walletDto = BeanUtils.toBean(dto, WalletManageDto.class);
List<WalletManageVo> walletList = baseMapper.scopeList(walletDto, dataScope);
if (ObjectUtil.isEmpty(walletList)) return walletList;
walletList.forEach(v -> {
v.setBalance(0);
v.setTotalRecharge(0);
v.setTotalExpense(0);
});
List<Long> userIds = walletList.stream().map(WalletManageVo::getUserId).distinct().toList();
// 查询钱包类表
List<WalletTypeEntity> walletTypeList = walletTypeService.list();
if (ObjectUtil.isEmpty(walletTypeList)) return walletList;
// 查询所有钱包类型的流水记录
for (WalletTypeEntity i : walletTypeList) {
dto.setWalletTypeId(i.getId());
if (ObjectUtil.isEmpty(dto.getUserId())) {
dto.setUserIds(userIds);
}
List<WalletManageBalanceVo> itemList = baseMapper.selectBalance(dto);
if (ObjectUtil.isEmpty(itemList)) continue;
for (WalletManageBalanceVo j : itemList) {
j.setWalletTypeName(i.getName());
walletList.stream().filter(v -> ObjectUtil.equals(v.getUserId(), j.getUserId())).findFirst().ifPresent(v -> {
if (ObjectUtil.isNotEmpty(j.getBalance())) {
v.setBalance(j.getBalance());
v.setLastTopUpTime(j.getCreateTime());
}
});
}
}
disposeList(walletList, walletDto);
return walletList;
}
@Override
@@ -260,7 +328,7 @@ public class WalletManageServiceImpl extends ServiceImpl<WalletManageMapper, Wal
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));
map.put("endTime", LocalDateTimeUtil.format(dto.getCreateTimeList()[1], DatePattern.NORM_DATETIME_PATTERN));
}
if (ObjectUtil.isNotEmpty(list)) {
BigDecimal balanceSum = BigDecimal.ZERO;
@@ -295,6 +363,36 @@ public class WalletManageServiceImpl extends ServiceImpl<WalletManageMapper, Wal
}
}
@Override
public void exportQb(HttpServletResponse response, Page page, WalletManageBalanceDto dto) {
String fileName = "file/个人钱包记录明细.xlsx";
List<WalletManageVo> list = scopeQbList(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();
Map<String, Object> map = new HashMap<String, Object>();
map.put("walletRecordMonth", dto.getWalletRecordMonth());
if (ObjectUtil.isNotEmpty(list)) {
Long lineNumber = 1L;
BigDecimal balanceSum = BigDecimal.ZERO;
for (WalletManageVo v : list) {
v.setLineNumber(lineNumber);
lineNumber++;
if (ObjectUtil.isNotEmpty(v.getBalance())) {
balanceSum = balanceSum.add(BigDecimal.valueOf(v.getBalance()));
v.setBalance(BigDecimal.valueOf(v.getBalance()).divide(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP).intValue());
}
}
map.put("balanceSum", balanceSum.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<WalletManageVo> list, WalletManageDto dto) {
if (ObjectUtil.isNotEmpty(list)) {
// 用户
@@ -186,7 +186,7 @@ public class WalletTransactionServiceImpl extends ServiceImpl<WalletTransactionM
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));
map.put("endTime", LocalDateTimeUtil.format(dto.getCreateTimeList()[1], DatePattern.NORM_DATETIME_PATTERN));
}
if (ObjectUtil.isNotEmpty(list)) {
BigDecimal priceTotal = BigDecimal.ZERO;
@@ -2,8 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bsd.pjcloud.wallet.mapper.WalletManageMapper">
<resultMap id="walletManageMap" type="com.bsd.pjcloud.wallet.api.entity.WalletManageEntity">
<resultMap id="walletManageMap" type="com.bsd.pjcloud.wallet.api.entity.WalletManageEntity">
<id property="id" column="id"/>
<result property="userId" column="user_id"/>
<result property="walletTypeId" column="wallet_type_id"/>
@@ -21,6 +20,92 @@
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
<result property="tenantId" column="tenant_id"/>
</resultMap>
</resultMap>
<sql id="selectA">
select a.id,
a.user_id,
a.wallet_type_id,
a.dept_id,
a.card_number,
a.balance,
a.total_expense,
a.total_recharge,
a.freeze_price,
a.is_freeze,
a.active_bind_time,
a.active_bind_status,
a.create_by,
a.create_time,
a.update_by,
a.update_time,
a.del_flag,
a.tenant_id,
</sql>
<sql id="whereA">
</sql>
<select id="selectBalance" resultType="com.bsd.pjcloud.wallet.api.vo.WalletManageBalanceVo">
SELECT a.user_id,
a.balance,
a.wallet_id,
m.wallet_type_id,
a.create_time
FROM wallet_transaction a
LEFT JOIN wallet_manage m on a.wallet_id = m.id
<where>
a.del_flag = 0
<if test="dto.walletRecordMonth != null">
AND a.create_time = (SELECT MAX(sub.create_time) FROM wallet_transaction sub WHERE sub.user_id = a.user_id AND
DATE_FORMAT(sub.create_time, '%Y-%m') = #{dto.walletRecordMonth})
</if>
<if test="dto.userId != null">
AND a.user_id = #{dto.userId}
</if>
<if test="dto.walletTypeId != null">
AND m.wallet_type_id = #{dto.walletTypeId}
</if>
<if test="dto.userIds != null and dto.userIds.size() != 0">
and a.user_id in
<foreach collection="dto.userIds" item="v" open="(" close=")" separator=",">
#{v}
</foreach>
</if>
</where>
ORDER BY a.user_id;
</select>
<sql id="scopeUser">
select a.user_id from wallet_manage a
<where>
a.del_flag = 0
<if test="dto.deptIds != null and dto.deptIds.size() != 0">
<choose>
<when test="dto.isInclude != null and dto.isInclude == true">
and a.dept_id IN
</when>
<when test="dto.isInclude != null and dto.isInclude == false">
and a.dept_id NOT IN
</when>
<otherwise>
and a.dept_id IN
</otherwise>
</choose>
<foreach collection="dto.deptIds" item="v" open="(" close=")" separator=",">
#{v}
</foreach>
</if>
</where>
group by a.user_id;
</sql>
<select id="scopeUserPage" resultType="java.lang.Long">
<include refid="scopeUser" />
</select>
<delete id="scopeUserList">
<include refid="scopeUser" />
</delete>
</mapper>