feat:不活跃用户列表

This commit is contained in:
dzc committed 2025-04-25 12:00:35 +08:00
1 parent a3c441a083
commit 0228b99844
6 files changed
+118 -6

No files matched your search

@@ -0,0 +1,31 @@
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 WalletTopupActionDto implements BaseIsIncludeTreeInterface {
/**
* 用户id
*/
private Long userId;
/**
* 不活跃天数
*/
private Long unactiveMonthsNumber;
/**
* 部门ids
*/
private List<Long> deptIds;
/**
* 是否包含部门ids
*/
private Boolean isInclude;
}
@@ -15,6 +15,7 @@ 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.dto.WalletTopupActionDto;
import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity;
import com.bsd.pjcloud.wallet.api.vo.WalletManageVo;
import com.bsd.pjcloud.wallet.mapper.WalletManageMapper;
@@ -195,11 +196,18 @@ public class WalletManageController {
@Operation(summary = "钱包记录分页", description = "钱包记录分页")
@PostMapping("/page-join-qb")
public R pageJoinQb(@ParameterObject Page page, @RequestBody WalletManageBalanceDto dto) {
public R<Page<WalletManageVo>> pageJoinQb(@ParameterObject Page page, @RequestBody WalletManageBalanceDto dto) {
DataScope dataScope = new DataScope();
return R.ok(walletManageService.scopeQbPage(page, dto, dataScope));
}
@Operation(summary = "不活跃用户钱包", description = "不活跃用户钱包")
@PostMapping("/page-join-active")
public R<Page<WalletManageVo>> pageJoinActive(@ParameterObject Page page, @RequestBody WalletTopupActionDto dto) {
DataScope dataScope = new DataScope();
return R.ok(walletManageService.pageJoinActive(page, dto, dataScope));
}
@Operation(summary = "通过id查询", description = "通过id查询")
@GetMapping("/{id}")
@PreAuthorize("@pms.hasPermission('wallet_walletManage_view')")
@@ -10,6 +10,7 @@ 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.dto.WalletTopupActionDto;
import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity;
import com.bsd.pjcloud.wallet.api.entity.WalletTypeEntity;
import com.bsd.pjcloud.wallet.api.vo.WalletManageBalanceVo;
@@ -159,4 +160,6 @@ public interface WalletManageMapper extends PjcloudBaseMapper<WalletManageEntity
List<Long> scopeUserList(@Param("dto") WalletManageDto dto, @Param("dataScope") DataScope dataScope);
List<WalletManageBalanceVo> selectBalance(@Param("dto") WalletManageBalanceDto walletDto);
Page<WalletManageVo> activeBalancePage(Page page, @Param("dto") WalletTopupActionDto dto, @Param("unactiveDayNumberStr") String unactiveDayNumberStr);
}
@@ -6,6 +6,7 @@ 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.dto.WalletTopupActionDto;
import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity;
import com.bsd.pjcloud.wallet.api.vo.WalletManageVo;
import jakarta.servlet.http.HttpServletResponse;
@@ -62,6 +63,11 @@ public interface WalletManageService extends IService<WalletManageEntity> {
Page<WalletManageVo> scopeQbPage(Page page, WalletManageBalanceDto dto, DataScope dataScope);
/**
* 不活跃用户钱包
*/
Page<WalletManageVo> pageJoinActive(Page page, WalletTopupActionDto dto, DataScope dataScope);
List<WalletManageVo> scopeQbList(WalletManageBalanceDto dto, DataScope dataScope);
WalletManageVo join(Long walletId);
@@ -30,6 +30,7 @@ import com.bsd.pjcloud.common.data.resolver.ParamResolver;
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.WalletTopupActionDto;
import com.bsd.pjcloud.wallet.api.dto.WalletTypeDto;
import com.bsd.pjcloud.wallet.api.entity.*;
import com.bsd.pjcloud.wallet.api.utils.WalletDataUtil;
@@ -53,6 +54,7 @@ import org.springframework.validation.annotation.Validated;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.*;
/**
@@ -201,14 +203,14 @@ public class WalletManageServiceImpl extends ServiceImpl<WalletManageMapper, Wal
@Override
public List<WalletManageVo> scopeList(WalletManageDto dto, DataScope dataScope) {
List<WalletManageVo> list = baseMapper.scopeList(dto, dataScope);
disposeList(list, dto);
disposeList(list);
return list;
}
@Override
public Page<WalletManageVo> scopePageList(Page page, WalletManageDto dto, DataScope dataScope) {
Page<WalletManageVo> list = baseMapper.scopePage(page, dto, dataScope);
disposeList(list.getRecords(), dto);
disposeList(list.getRecords());
return list;
}
@@ -278,10 +280,24 @@ public class WalletManageServiceImpl extends ServiceImpl<WalletManageMapper, Wal
});
}
}
disposeList(walletPage.getRecords(), walletDto);
disposeList(walletPage.getRecords());
return walletPage;
}
/**
* 不活跃用户钱包
*/
@Override
public Page<WalletManageVo> pageJoinActive(Page page, WalletTopupActionDto dto, DataScope dataScope) {
if (ObjectUtil.isNotEmpty(dto.getUnactiveMonthsNumber())) {
dto.setUnactiveMonthsNumber(3L);
}
String unactiveDayNumberStr = LocalDateTimeUtil.format(LocalDateTimeUtil.now().minusMonths(dto.getUnactiveMonthsNumber()), DatePattern.NORM_DATE_PATTERN);
Page<WalletManageVo> pageList = baseMapper.activeBalancePage(page, dto, unactiveDayNumberStr);
disposeList(pageList.getRecords());
return pageList;
}
@Override
public List<WalletManageVo> scopeQbList(WalletManageBalanceDto dto, DataScope dataScope) {
WalletManageDto walletDto = BeanUtils.toBean(dto, WalletManageDto.class);
@@ -314,7 +330,7 @@ public class WalletManageServiceImpl extends ServiceImpl<WalletManageMapper, Wal
});
}
}
disposeList(walletList, walletDto);
disposeList(walletList);
return walletList;
}
@@ -470,7 +486,7 @@ public class WalletManageServiceImpl extends ServiceImpl<WalletManageMapper, Wal
return "消费钱包余额不足100元";
}
private void disposeList(List<WalletManageVo> list, WalletManageDto dto) {
private void disposeList(List<WalletManageVo> list) {
if (ObjectUtil.isNotEmpty(list)) {
// 用户
List<Long> userIds = list.stream().map(WalletManageVo::getUserId).distinct().toList();
@@ -125,4 +125,52 @@
<delete id="scopeUserList">
<include refid="scopeUser" />
</delete>
<select id="activeBalancePage" resultType="com.bsd.pjcloud.wallet.api.vo.WalletManageVo">
<include refid="selectA"/>
where a.del_flag = 0
and a.id not in (SELECT DISTINCT (sub.wallet_id)
FROM wallet_transaction sub
LEFT JOIN wallet_manage wallet on wallet.id = sub.wallet_id
WHERE sub.user_id = a.user_id
<if test="dto.userId != null">
AND sub.user_id = #{dto.userId}
</if>
<if test="dto.deptIds != null and dto.deptIds.size() != 0">
<choose>
<when test="dto.isInclude != null and dto.isInclude == true">
and sub.dept_id IN
</when>
<when test="dto.isInclude != null and dto.isInclude == false">
and sub.dept_id NOT IN
</when>
<otherwise>
and sub.dept_id IN
</otherwise>
</choose>
<foreach collection="dto.deptIds" item="v" open="(" close=")" separator=",">
#{v}
</foreach>
</if>
AND DATE_FORMAT(sub.create_time, '%Y-%m-%d') &lt;= #{unactiveDayNumberStr})
<if test="dto.userId != null">
AND a.user_id = #{dto.userId}
</if>
<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>
</select>
</mapper>