From 1e6775a63c0d3011955fc607c4291de06ff8e0c2 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Fri, 25 Apr 2025 10:54:24 +0800
Subject: [PATCH] feat(mall): 添加活动报名列表导出功能
---
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java | 235 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 233 insertions(+), 2 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 6ef0daf..13ca39c 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
@@ -8,7 +8,9 @@
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.ApiVoteOptionRecordInPageDto;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.HappyActivityService;
@@ -17,8 +19,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;
@@ -57,6 +62,7 @@
private final IXcxPayService iXcxPayService;
private final IApiMallMemberWalletService iApiMallMemberWalletService;
private final HappyActivityCategoryMapper happyActivityCategoryMapper;
+ private final AgentProducer agentProducer;
@Override
public FebsResponse activityList(ApiActivityInfoDto dto) {
@@ -130,7 +136,6 @@
HappyActivity happyActivity = this.baseMapper.selectOne(
new LambdaQueryWrapper<HappyActivity>()
.eq(HappyActivity::getId, dto.getId())
- .eq(HappyActivity::getType, dto.getType())
.eq(HappyActivity::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
.ne(HappyActivity::getState, StateUpDownEnum.ACTIVITY_STATE_NOT_START.getCode())
);
@@ -145,6 +150,14 @@
// 创建分页对象,传入当前页和每页大小
Page<ApiActivityOptionListVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
Page<ApiActivityOptionListVo> voteRecordInPage = this.baseMapper.getVoteOptionInPage(page, dto);
+ return new FebsResponse().success().data(voteRecordInPage);
+ }
+
+ @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);
}
@@ -231,6 +244,12 @@
if(StateUpDownEnum.ACTIVITY_TYPE_VOTE.getCode() != happyActivity.getType()){
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("活动已结束");
+ }
HappyActivityOption happyActivityOption = happyActivityOptionMapper.selectById(sourceOptionId);
if (null == happyActivityOption) {
@@ -290,12 +309,54 @@
@Override
public FebsResponse operateRegister(ApiOperateRegisterActivityDto dto) {
Long memberId = LoginUserUtil.getLoginUser().getId();
- return null;
+
+ 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("您已经报名过了");
+ }
+
+ Integer optionCnt = happyActivityOptionMapper.selectCount(
+ new LambdaQueryWrapper<HappyActivityOption>()
+ .eq(HappyActivityOption::getActivityId, dto.getActivityId())
+ .eq(HappyActivityOption::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+ );
+
+ HappyActivityOption happyActivityOption = new HappyActivityOption();
+ BeanUtil.copyProperties(dto, happyActivityOption);
+ happyActivityOption.setOrderCnt(optionCnt + 1);
+ happyActivityOption.setMemberId(memberId);
+ happyActivityOption.setOptionName(dto.getRealName());
+ happyActivityOptionMapper.insert(happyActivityOption);
+ return new FebsResponse().success().message("报名成功");
}
@Override
public FebsResponse addConnect(ApiOperateRegisterUserDto dto) {
Long memberId = LoginUserUtil.getLoginUser().getId();
+
+ List<HappyActivityConnect> happyActivityConnects = happyActivityConnectMapper.selectList(
+ new LambdaQueryWrapper<HappyActivityConnect>()
+ .eq(HappyActivityConnect::getMemberId, memberId)
+ .eq(HappyActivityConnect::getName, dto.getName())
+ );
+ if(CollUtil.isNotEmpty(happyActivityConnects)){
+ throw new FebsException("已经添加过该联系人");
+ }
HappyActivityConnect happyActivityConnect = new HappyActivityConnect();
happyActivityConnect.setMemberId(memberId);
@@ -364,6 +425,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();
@@ -573,6 +640,7 @@
if(ObjectUtil.isNotEmpty(dto.getState())){
happyActivityOrderLambdaQueryWrapper.eq(HappyActivityOrder::getState, dto.getState());
}
+ happyActivityOrderLambdaQueryWrapper.eq(HappyActivityOrder::getDeleteFlag, StateUpDownEnum.DOWN.getCode());
happyActivityOrderLambdaQueryWrapper.orderByDesc(HappyActivityOrder::getCreatedTime);
Page<HappyActivityOrder> page = new Page<>(dto.getPageNum(), dto.getPageSize());
Page<HappyActivityOrder> voteActivityPage = happyActivityOrderMapper.selectPage(page, happyActivityOrderLambdaQueryWrapper);
@@ -655,6 +723,169 @@
return new FebsResponse().success().data(apiActivityOrderInfoVos);
}
+ @Override
+ public FebsResponse orderDelete(Long id) {
+ // 获取当前登录用户的ID
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+
+ List<HappyActivityOrder> happyActivityOrders = happyActivityOrderMapper.selectList(
+ new LambdaQueryWrapper<HappyActivityOrder>()
+ .eq(HappyActivityOrder::getId, id)
+ .eq(HappyActivityOrder::getMemberId, memberId)
+ );
+ if(CollUtil.isNotEmpty(happyActivityOrders)){
+ happyActivityOrders.forEach(happyActivityOrder -> {
+ happyActivityOrder.setDeleteFlag(StateUpDownEnum.UP.getCode());
+ happyActivityOrderMapper.updateById(happyActivityOrder);
+ });
+ }
+ return new FebsResponse().success();
+ }
+
+ @Override
+ public void activityEnd() {
+ Date date = new Date();
+ List<HappyActivity> happyActivities = this.baseMapper.selectList(
+ new LambdaQueryWrapper<HappyActivity>()
+ .eq(HappyActivity::getState, StateUpDownEnum.ACTIVITY_STATE_ENROLLING.getCode())
+ .le(HappyActivity::getEndTime, date)
+ );
+ if(CollUtil.isEmpty(happyActivities)){
+ return;
+ }
+ happyActivities.forEach(happyActivity -> {
+ happyActivity.setState(StateUpDownEnum.ACTIVITY_STATE_END.getCode());
+ this.baseMapper.updateById(happyActivity);
+ });
+ }
+
+ /**
+ * 当活动即将开始时自动更新活动状态
+ * 此方法旨在查询所有即将开始的活动,并将它们的状态更新为报名进行中
+ */
+ @Override
+ public void activityStart() {
+ // 获取当前日期和时间
+ DateTime date = DateUtil.date();
+
+ // 查询所有状态为未开始且当前时间在活动开始时间结束时间之间的活动
+ List<HappyActivity> happyActivities = this.baseMapper.selectList(
+ new LambdaQueryWrapper<HappyActivity>()
+ .eq(HappyActivity::getState, StateUpDownEnum.ACTIVITY_STATE_NOT_START.getCode())
+ .le(HappyActivity::getStartTime, date)
+ .ge(HappyActivity::getEndTime, date)
+ );
+
+ // 如果没有找到任何符合条件的活动,则直接返回
+ if(CollUtil.isEmpty(happyActivities)){
+ return;
+ }
+
+ // 遍历每个符合条件的活动,将其状态更新为报名进行中,并保存更新
+ happyActivities.forEach(happyActivity -> {
+ happyActivity.setState(StateUpDownEnum.ACTIVITY_STATE_ENROLLING.getCode());
+ this.baseMapper.updateById(happyActivity);
+ });
+ }
+
+ @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();
+
+ Integer optionCnt = happyActivityOptionMapper.selectCount(
+ new LambdaQueryWrapper<HappyActivityOption>()
+ .eq(HappyActivityOption::getActivityId, id)
+ .eq(HappyActivityOption::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+ .eq(HappyActivityOption::getState, StateUpDownEnum.VOTE_OPTION_STATE_AUDIT_SUCCESS.getCode())
+ );
+ apiVoteActivityHotVo.setOptionCnt(optionCnt);
+
+ Integer followVoteCnt = happyFollowMapper.selectCount(
+ new LambdaQueryWrapper<HappyFollow>()
+ .eq(HappyFollow::getSourceType, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode())
+ .eq(HappyFollow::getSourceId, id)
+ .eq(HappyFollow::getType, StateUpDownEnum.VOTE.getCode())
+ .eq(HappyFollow::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+ );
+ apiVoteActivityHotVo.setFollowVoteCnt(followVoteCnt);
+
+ return new FebsResponse().success().data(apiVoteActivityHotVo);
+ }
+
public static void main(String[] args) {
Date date = new Date();
--
Gitblit v1.9.1