feat(mall): 为活动详情添加点赞数和转发数功能
- 在 ApiActivityVo 中添加 zanCnt 和 sendCnt 字段- 在 HappyActivityServiceImpl 中实现点赞数和转发数的查询逻辑
- 通过 Stream 流操作对不同类型的操作进行分类计数
2 files modified
49 ■■■■ changed files
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java 40 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiActivityVo.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java
@@ -137,6 +137,24 @@
        );
        if(happyActivity != null){
            BeanUtil.copyProperties(happyActivity,apiActivityVo);
            List<HappyFollow> happyFollows = happyFollowMapper.selectList(
                    new LambdaQueryWrapper<HappyFollow>()
                            .select(HappyFollow::getId, HappyFollow::getType)
                            .eq(HappyFollow::getSourceType, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode())
                            .eq(HappyFollow::getSourceId, happyActivity.getId())
                            .in(HappyFollow::getType, Arrays.asList(StateUpDownEnum.LIKE.getCode(), StateUpDownEnum.SHARE.getCode()))
                            .eq(HappyFollow::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
            );
            if(CollUtil.isNotEmpty(happyFollows)){
                //  使用Stream流操作happyFollows,按照type分类,返回每一个不同type的总数量,并返回一个Map
                Map<Integer, Long> typeCountMap = happyFollows.stream()
                        .collect(Collectors.groupingBy(HappyFollow::getType, Collectors.counting()));
                apiActivityVo.setZanCnt(Math.toIntExact(typeCountMap.get(StateUpDownEnum.LIKE.getCode())));
                apiActivityVo.setSendCnt(Math.toIntExact(typeCountMap.get(StateUpDownEnum.SHARE.getCode())));
            }
        }
        return new FebsResponse().success().data(apiActivityVo);
    }
@@ -221,16 +239,18 @@
                    throw new FebsException("活动不存在");
                }
                if (StateUpDownEnum.ACTIVITY_TYPE_VOTE.getCode() == happyActivity.getType()) {
                    Long sourceOptionId = dto.getSourceOptionId();
                    if (sourceOptionId == null) {
                        throw new FebsException("选项ID不能为空");
                    }
                    this.operateDoVote(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, sourceOptionId, type);
                    this.addLikeCnt(sourceOptionId);
                } else {
                    this.operateDo(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, type);
                }
                this.operateDo(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, type);
//                if (StateUpDownEnum.ACTIVITY_TYPE_VOTE.getCode() == happyActivity.getType()) {
//                    Long sourceOptionId = dto.getSourceOptionId();
//                    if (sourceOptionId == null) {
//                        throw new FebsException("选项ID不能为空");
//                    }
//                    this.operateDoVote(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, sourceOptionId, type);
//                    this.addLikeCnt(sourceOptionId);
//                } else {
//                    this.operateDo(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, type);
//                }
            } else if (StateUpDownEnum.SOURCE_TYPE_SOCIAL_CIRCLE.getCode() == sourceType) {
                // 朋友圈点赞或关注
                this.operateDo(memberId, StateUpDownEnum.SOURCE_TYPE_SOCIAL_CIRCLE.getCode(), sourceId, type);
src/main/java/cc/mrbird/febs/mall/vo/ApiActivityVo.java
@@ -14,6 +14,15 @@
    @ApiModelProperty(value = "ID")
    private Long id;
    @ApiModelProperty(value = "点赞数")
    private Integer zanCnt;
//    @ApiModelProperty(value = "关注数")
//    private Integer followCnt;
    @ApiModelProperty(value = "转发数")
    private Integer sendCnt;
    @ApiModelProperty(value = "编码")
    private String code;