KKSU
2025-01-13 20201b7c7b28d5342be4a0e0b1e8641b2490c78b
fix(mall): 修复获取积分日榜和月榜时的潜在空指针异常

- 在获取用户积分数据之前,先查询所有用户 ID
- 如果用户列表为空,直接返回空的图表数据列表
- 优化查询条件,仅获取在用户列表中的用户积分数据
1 files modified
17 ■■■■ changed files
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java 17 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -1724,6 +1724,8 @@
         * 1:日榜 2:月榜
         * 获取当前日期
         */
        List<ApiChartVo> apiChartVos = new ArrayList<>();
        LambdaQueryWrapper<MallMoneyFlow> mallMoneyFlowLambdaQueryWrapper = new LambdaQueryWrapper<>();
        if(apiRecordDto.getType() == 1){
            DateTime dateTime = DateUtil.beginOfDay(DateUtil.date());
@@ -1732,15 +1734,26 @@
            DateTime dateTime = DateUtil.beginOfMonth(DateUtil.date());
            mallMoneyFlowLambdaQueryWrapper.ge(MallMoneyFlow :: getCreatedTime , dateTime);
        }
        List<MallMember> mallMembers = this.baseMapper.selectList(
                new LambdaQueryWrapper<MallMember>()
                        .select(MallMember::getId)
        );
        if(CollUtil.isEmpty(mallMembers)){
            return apiChartVos;
        }
        //获取mallMembers的全部id
        List<Long> ids = mallMembers.stream().map(MallMember::getId).collect(Collectors.toList());
        mallMoneyFlowLambdaQueryWrapper.eq(MallMoneyFlow :: getFlowType, FlowTypeEnum.SCORE.getValue());
        mallMoneyFlowLambdaQueryWrapper.in(
                MallMoneyFlow :: getType,
                RunVipMoneyFlowTypeEnum.GET_SCORE.getValue(),
                RunVipMoneyFlowTypeEnum.SYS_SCORE.getValue()
        );
        mallMoneyFlowLambdaQueryWrapper.in(
                MallMoneyFlow :: getMemberId,
                ids
        );
        List<MallMoneyFlow> mallMoneyFlows = mallMoneyFlowMapper.selectList(mallMoneyFlowLambdaQueryWrapper);
        List<ApiChartVo> apiChartVos = new ArrayList<>();
        if(CollUtil.isEmpty(mallMoneyFlows)){
            return apiChartVos;
        }