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 | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 155 insertions(+), 8 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 5188d8b..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,8 +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.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; @@ -17,9 +16,11 @@ import cc.mrbird.febs.mall.dto.ApiOperateDoDto; import cc.mrbird.febs.mall.vo.activity.ApiActivityOrderInfoVo; import cc.mrbird.febs.mall.vo.activity.ApiActivityOrderListVo; +import cc.mrbird.febs.mall.vo.activity.ApiCheckOrderVo; 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; @@ -58,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) { @@ -75,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()) @@ -149,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(); @@ -156,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); } @@ -250,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())) ); @@ -272,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) @@ -291,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 @@ -412,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(); @@ -770,12 +847,82 @@ } @Override + public FebsResponse checkOrder(ApiCheckOrderDto dto) { + // 获取当前登录用户的ID + Long memberId = LoginUserUtil.getLoginUser().getId(); + + MallMember mallMember = mallMemberMapper.selectById(memberId); + + if(StateUpDownEnum.UP.getCode() != mallMember.getCheckOrder()){ + throw new FebsException("您不是核销员!"); + } + + String orderItemCode = dto.getOrderItemCode(); + + HappyActivityOrderItem happyActivityOrderItem = happyActivityOrderItemMapper.selectOne( + new LambdaQueryWrapper<HappyActivityOrderItem>() + .eq(HappyActivityOrderItem::getCode, orderItemCode) + .eq(HappyActivityOrderItem::getState, StateUpDownEnum.DOWN.getCode()) + .last("limit 1") + ); + if(happyActivityOrderItem != null){ + happyActivityOrderItem.setState(StateUpDownEnum.UP.getCode()); + happyActivityOrderItem.setTransferItemId(memberId); + happyActivityOrderItemMapper.updateById(happyActivityOrderItem); + + agentProducer.sendCheckActivityItem(happyActivityOrderItem.getOrderId()); + + HappyActivity happyActivity = this.baseMapper.selectById(happyActivityOrderItem.getActivityId()); + ApiCheckOrderVo apiCheckOrderVo = new ApiCheckOrderVo(); + apiCheckOrderVo.setActivityName(happyActivity.getName()); + apiCheckOrderVo.setActivityStartTime(happyActivity.getStartTime()); + apiCheckOrderVo.setActivityEndTime(happyActivity.getEndTime()); + apiCheckOrderVo.setActivityAddress(happyActivity.getAddress()); + apiCheckOrderVo.setCode(happyActivityOrderItem.getCode()); + apiCheckOrderVo.setName(happyActivityOrderItem.getName()); + apiCheckOrderVo.setPhone(happyActivityOrderItem.getPhone()); + apiCheckOrderVo.setPrice(happyActivityOrderItem.getPrice()); + + return new FebsResponse().success().data(apiCheckOrderVo); + } + + 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