From 5b61384b8db46b9412425cb10f1247ddfc3da706 Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Sun, 27 Apr 2025 09:52:21 +0800 Subject: [PATCH] fix(mapper): 更新 HappyActivityOptionMapper 映射逻辑 --- src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java | 123 +++++++++++++++++++++++++++++++++++++--- 1 files changed, 113 insertions(+), 10 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java index e244e5d..531879d 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java @@ -7,9 +7,7 @@ import cc.mrbird.febs.common.utils.MallUtils; import cc.mrbird.febs.common.utils.ShareCodeUtil; import cc.mrbird.febs.mall.dto.*; -import cc.mrbird.febs.mall.dto.activity.ApiActivityOrderListDto; -import cc.mrbird.febs.mall.dto.activity.ApiCheckOrderDto; -import cc.mrbird.febs.mall.dto.activity.ApiVoteOptionInPageDto; +import cc.mrbird.febs.mall.dto.activity.*; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.HappyActivityService; @@ -22,6 +20,7 @@ import cc.mrbird.febs.mall.vo.activity.ApiVoteActivityHotVo; import cc.mrbird.febs.pay.model.BrandWCPayRequestData; import cc.mrbird.febs.pay.service.IXcxPayService; +import cc.mrbird.febs.rabbit.producter.AgentProducer; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateTime; @@ -60,6 +59,7 @@ private final IXcxPayService iXcxPayService; private final IApiMallMemberWalletService iApiMallMemberWalletService; private final HappyActivityCategoryMapper happyActivityCategoryMapper; + private final AgentProducer agentProducer; @Override public FebsResponse activityList(ApiActivityInfoDto dto) { @@ -77,7 +77,6 @@ // 查询关注点赞转发记录,筛选出关注活动类型且未删除的关注记录,并按ID升序排序,限制结果数量为3 List<HappyFollow> happyFollows = happyFollowMapper.selectList( new LambdaQueryWrapper<HappyFollow>() - .select(HappyFollow::getMemberId) .eq(HappyFollow::getSourceType, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode()) .in(HappyFollow::getSourceId, ids) .eq(HappyFollow::getDeleteFlag, StateUpDownEnum.DOWN.getCode()) @@ -151,6 +150,14 @@ } @Override + public FebsResponse voteOptionRecordInPage(ApiVoteOptionRecordInPageDto dto) { + // 创建分页对象,传入当前页和每页大小 + Page<ApiActivityOptionListVo> page = new Page<>(dto.getPageNow(), dto.getPageSize()); + Page<ApiActivityOptionListVo> voteRecordInPage = this.baseMapper.getVoteOptionRecordInPage(page, dto); + return new FebsResponse().success().data(voteRecordInPage); + } + + @Override public FebsResponse voteOption(Long id) { ApiActivityOptionVo apiActivityOptionVo = new ApiActivityOptionVo(); @@ -158,6 +165,44 @@ if(happyActivityOption != null){ BeanUtil.copyProperties(happyActivityOption, apiActivityOptionVo); } + + //投票人数 + List<HappyFollow> happyFollows = happyFollowMapper.selectList( + new LambdaQueryWrapper<HappyFollow>() + .select(HappyFollow::getId) + .eq(HappyFollow::getSourceOptionId, id) + .eq(HappyFollow::getType, StateUpDownEnum.VOTE.getCode()) + .eq(HappyFollow::getDeleteFlag, StateUpDownEnum.DOWN.getCode()) + .groupBy(HappyFollow::getMemberId) + ); + apiActivityOptionVo.setVoteCnt(CollUtil.isNotEmpty(happyFollows) ? happyFollows.size() : 0); + + List<HappyActivityOption> happyActivityOptions = happyActivityOptionMapper.selectList( + new LambdaQueryWrapper<HappyActivityOption>() + .select(HappyActivityOption::getId,HappyActivityOption::getLikesCnt) + .eq(HappyActivityOption::getActivityId, happyActivityOption.getActivityId()) + .eq(HappyActivityOption::getDeleteFlag, StateUpDownEnum.DOWN.getCode()) + .eq(HappyActivityOption::getState, StateUpDownEnum.VOTE_OPTION_STATE_AUDIT_SUCCESS.getCode()) + .orderByDesc(HappyActivityOption::getLikesCnt) + ); + //获取上一个名次的数据 + int firstCnt = 1; + int distanceCnt = 0; + for (HappyActivityOption option : happyActivityOptions){ + if(option.getId().equals(id)){ + apiActivityOptionVo.setFirstCnt(firstCnt); + if( firstCnt == 1 ){ + apiActivityOptionVo.setDistanceCnt(distanceCnt); + }else{ + apiActivityOptionVo.setDistanceCnt(distanceCnt- option.getLikesCnt()); + } + break; + }else{ + firstCnt = firstCnt + 1; + distanceCnt = option.getLikesCnt(); + } + } + return new FebsResponse().success().data(apiActivityOptionVo); } @@ -252,7 +297,6 @@ new LambdaQueryWrapper<HappyFollow>() .eq(HappyFollow::getMemberId, memberId) .eq(HappyFollow::getSourceId, sourceId) - .eq(HappyFollow::getSourceOptionId, sourceOptionId) .eq(HappyFollow::getType, type) .gt(HappyFollow::getCreatedTime, DateUtil.beginOfDay(new Date())) ); @@ -274,7 +318,7 @@ if(CollUtil.isNotEmpty(records)){ //stream流操作records,获取全部的memberId(全部投票人) Set<Long> memberIds = records.stream().map(ApiVoteRecordInPageVo::getMemberId).collect(Collectors.toSet()); - if(CollUtil.isEmpty(memberIds)){ + if(CollUtil.isNotEmpty(memberIds)){ List<MallMember> mallMembers = mallMemberMapper.selectList( new LambdaQueryWrapper<MallMember>() .select(MallMember::getId, MallMember::getName, MallMember::getAvatar) @@ -293,6 +337,31 @@ return new FebsResponse().success().data(voteRecordInPage); + } + + @Override + public FebsResponse operateValidRegister(ApiOperateValidRegisterActivityDto dto) { + Long memberId = LoginUserUtil.getLoginUser().getId(); + HappyActivity happyActivity = this.baseMapper.selectById(dto.getActivityId()); + + if (StateUpDownEnum.ACTIVITY_STATE_END.getCode() == happyActivity.getState()) { + throw new FebsException("活动已结束"); + } + if (StateUpDownEnum.DOWN.getCode() == happyActivity.getAddState()) { + throw new FebsException("活动尚未开启报名"); + } + //判断用户是否重复报名 + Integer registerCnt = happyActivityOptionMapper.selectCount( + new LambdaQueryWrapper<HappyActivityOption>() + .eq(HappyActivityOption::getMemberId, memberId) + .eq(HappyActivityOption::getActivityId, dto.getActivityId()) + .ne(HappyActivityOption::getState, StateUpDownEnum.VOTE_OPTION_STATE_AUDIT_REFUSE.getCode()) + .eq(HappyActivityOption::getDeleteFlag, StateUpDownEnum.DOWN.getCode()) + ); + if (registerCnt > 0) { + throw new FebsException("您已经报名过了"); + } + return new FebsResponse().success(); } @Override @@ -414,6 +483,12 @@ HappyActivity happyActivity = this.baseMapper.selectById(activityId); if (ObjectUtil.isEmpty(happyActivity)) { throw new FebsException("活动不存在"); + } + if (StateUpDownEnum.ACTIVITY_STATE_NOT_START.getCode() == happyActivity.getState()) { + throw new FebsException("活动尚未开始"); + } + if (StateUpDownEnum.ACTIVITY_STATE_END.getCode() == happyActivity.getState()) { + throw new FebsException("活动已结束"); } Integer joinCnt = happyActivity.getJoinCnt(); @@ -795,8 +870,9 @@ happyActivityOrderItem.setTransferItemId(memberId); happyActivityOrderItemMapper.updateById(happyActivityOrderItem); - HappyActivity happyActivity = this.baseMapper.selectById(happyActivityOrderItem.getActivityId()); + agentProducer.sendCheckActivityItem(happyActivityOrderItem.getOrderId()); + HappyActivity happyActivity = this.baseMapper.selectById(happyActivityOrderItem.getActivityId()); ApiCheckOrderVo apiCheckOrderVo = new ApiCheckOrderVo(); apiCheckOrderVo.setActivityName(happyActivity.getName()); apiCheckOrderVo.setActivityStartTime(happyActivity.getStartTime()); @@ -813,13 +889,40 @@ return new FebsResponse().fail().message("核销失败!"); } + /** + * 检查活动订单项的状态 + * 当指定订单的所有活动订单项都不处于"未使用"状态时,将订单状态更新为"已使用" + * + * @param orderId 订单ID,用于查询活动订单项和订单信息 + */ + @Override + public void checkActivityItem(Long orderId) { + // 查询指定订单ID的活动订单项数量,且状态为"未使用" + Integer integer = happyActivityOrderItemMapper.selectCount( + new LambdaQueryWrapper<HappyActivityOrderItem>() + .eq(HappyActivityOrderItem::getOrderId, orderId) + .eq(HappyActivityOrderItem::getState, StateUpDownEnum.DOWN.getCode()) + ); + // 如果没有找到任何未使用的活动订单项 + if(0 == integer){ + // 根据订单ID查询订单信息 + HappyActivityOrder happyActivityOrder = happyActivityOrderMapper.selectById(orderId); + if(happyActivityOrder == null){ + return; + } + // 更新订单状态为"已使用" + happyActivityOrder.setState(StateUpDownEnum.ORDER_STATE_USED.getCode()); + // 保存更新后的订单信息 + happyActivityOrderMapper.updateById(happyActivityOrder); + } + // 结束方法执行 + return; + } + @Override public FebsResponse voteActivityHot(Long id) { ApiVoteActivityHotVo apiVoteActivityHotVo = new ApiVoteActivityHotVo(); - HappyActivity happyActivity = this.baseMapper.selectById(id); - apiVoteActivityHotVo.setStartTime(happyActivity.getStartTime()); - apiVoteActivityHotVo.setEndTime(happyActivity.getEndTime()); Integer optionCnt = happyActivityOptionMapper.selectCount( new LambdaQueryWrapper<HappyActivityOption>() -- Gitblit v1.9.1