From 9244eda73db2445b4fd298339652deb16e2e72ef Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Wed, 23 Apr 2025 17:19:42 +0800 Subject: [PATCH] feat(mall): 新增活动管理功能 --- src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java | 312 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 308 insertions(+), 4 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java index 4f260d4..1070b62 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java @@ -1,12 +1,18 @@ package cc.mrbird.febs.mall.service.impl; +import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; +import cc.mrbird.febs.common.enumerates.StateUpDownEnum; +import cc.mrbird.febs.common.utils.MallUtils; import cc.mrbird.febs.mall.dto.AdminHappyActivityCategoryDto; -import cc.mrbird.febs.mall.entity.HappyActivity; -import cc.mrbird.febs.mall.entity.HappyActivityCategory; -import cc.mrbird.febs.mall.mapper.HappyActivityCategoryMapper; -import cc.mrbird.febs.mall.mapper.HappyActivityMapper; +import cc.mrbird.febs.mall.dto.activity.AdminActivityOptionAddDto; +import cc.mrbird.febs.mall.dto.activity.AdminCategoryAddDto; +import cc.mrbird.febs.mall.dto.activity.AdminCategoryUpdateDto; +import cc.mrbird.febs.mall.entity.*; +import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.IAdminHappyActivityService; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -18,6 +24,12 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + @Slf4j @Service @RequiredArgsConstructor @@ -25,6 +37,10 @@ public class AdminHappyActivityServiceImpl extends ServiceImpl<HappyActivityMapper, HappyActivity> implements IAdminHappyActivityService { private final HappyActivityCategoryMapper happyActivityCategoryMapper; + private final HappyActivityOptionMapper happyActivityOptionMapper; + private final HappyFollowMapper happyFollowMapper; + private final MallMemberMapper mallMemberMapper; + @Override public IPage<HappyActivityCategory> getGroupList(AdminHappyActivityCategoryDto dto, QueryRequest request) { Page<HappyActivityCategory> page = new Page<>(request.getPageNum(), request.getPageSize()); @@ -35,8 +51,296 @@ if(ObjectUtil.isNotEmpty(dto.getStatus())){ voteOptionLambdaQueryWrapper.eq(HappyActivityCategory::getState,dto.getStatus()); } + if(ObjectUtil.isNotEmpty(dto.getHotState())){ + voteOptionLambdaQueryWrapper.eq(HappyActivityCategory::getHotState,dto.getHotState()); + } + voteOptionLambdaQueryWrapper.eq(HappyActivityCategory::getDeleteFlag, StateUpDownEnum.DOWN.getCode()); voteOptionLambdaQueryWrapper.orderByDesc(HappyActivityCategory::getCreatedTime); Page<HappyActivityCategory> adminOptionVoIPage = happyActivityCategoryMapper.selectPage(page, voteOptionLambdaQueryWrapper); return adminOptionVoIPage; } + + @Override + public FebsResponse addGroup(AdminCategoryAddDto dto) { + + HappyActivityCategory happyActivityCategory = new HappyActivityCategory(); + happyActivityCategory.setName(dto.getName()); + happyActivityCategory.setOrderCnt(dto.getOrderCnt()); + happyActivityCategoryMapper.insert(happyActivityCategory); + return new FebsResponse().success().message("操作成功"); + } + + @Override + public FebsResponse groupDelete(Long id) { + HappyActivityCategory happyActivityCategory = happyActivityCategoryMapper.selectById(id); + happyActivityCategory.setDeleteFlag(StateUpDownEnum.UP.getCode()); + happyActivityCategoryMapper.updateById(happyActivityCategory); + return new FebsResponse().success().message("操作成功"); + } + + @Override + public FebsResponse groupUpdate(AdminCategoryUpdateDto dto) { + + HappyActivityCategory happyActivityCategory = happyActivityCategoryMapper.selectById(dto.getId()); + happyActivityCategory.setName(dto.getName()); + happyActivityCategory.setOrderCnt(dto.getOrderCnt()); + happyActivityCategoryMapper.updateById(happyActivityCategory); + return new FebsResponse().success().message("操作成功"); + } + + @Override + public FebsResponse groupState(Long id, Integer type) { + + HappyActivityCategory happyActivityCategory = happyActivityCategoryMapper.selectById(id); + if(StateUpDownEnum.UP.getCode() == happyActivityCategory.getDeleteFlag()){ + throw new RuntimeException("该分组已删除,无法操作"); + } + + if(type == 1){ + happyActivityCategory.setHotState(happyActivityCategory.getHotState() == StateUpDownEnum.UP.getCode() ? StateUpDownEnum.DOWN.getCode() : StateUpDownEnum.UP.getCode()); + } + + if(type == 2){ + happyActivityCategory.setState(happyActivityCategory.getState() == StateUpDownEnum.UP.getCode() ? StateUpDownEnum.DOWN.getCode() : StateUpDownEnum.UP.getCode()); + } + happyActivityCategoryMapper.updateById(happyActivityCategory); + return new FebsResponse().success().message("操作成功"); + } + + @Override + public List<HappyActivityCategory> allGroup() { + List<HappyActivityCategory> happyActivityCategories = + happyActivityCategoryMapper.selectList( + new LambdaQueryWrapper<HappyActivityCategory>() + .eq(HappyActivityCategory::getState, StateUpDownEnum.UP.getCode()) + .eq(HappyActivityCategory::getDeleteFlag, StateUpDownEnum.DOWN.getCode()) + .orderByDesc(HappyActivityCategory::getOrderCnt) + ); + if(CollUtil.isNotEmpty(happyActivityCategories)){ + return happyActivityCategories; + } + return Collections.emptyList(); + } + + @Override + public IPage<HappyActivity> getAdminActivityListInPage(HappyActivity dto, QueryRequest request) { + Page<HappyActivity> page = new Page<>(request.getPageNum(), request.getPageSize()); + LambdaQueryWrapper<HappyActivity> voteActivityLambdaQueryWrapper = new LambdaQueryWrapper<>(); + if(StrUtil.isNotEmpty(dto.getName())){ + voteActivityLambdaQueryWrapper.like(HappyActivity::getName,dto.getName()); + } + if(ObjectUtil.isNotEmpty(dto.getState())){ + voteActivityLambdaQueryWrapper.eq(HappyActivity::getState,dto.getState()); + } + + if(ObjectUtil.isNotEmpty(dto.getCategoryId())){ + voteActivityLambdaQueryWrapper.eq(HappyActivity::getCategoryId,dto.getCategoryId()); + } + voteActivityLambdaQueryWrapper.eq(HappyActivity::getDeleteFlag, StateUpDownEnum.DOWN.getCode()); + voteActivityLambdaQueryWrapper.orderByDesc(HappyActivity::getCreatedTime); + Page<HappyActivity> voteActivityPage = this.baseMapper.selectPage(page, voteActivityLambdaQueryWrapper); + + List<HappyActivity> records = voteActivityPage.getRecords(); + if(CollUtil.isNotEmpty(records)){ + //stream流获取records的全部categoryId + Set<Long> categoryIds = records.stream().map(HappyActivity::getCategoryId).collect(Collectors.toSet()); + if(CollUtil.isNotEmpty(categoryIds)){ + //stream流操作categoryIds得到一个Map<categoryId,HappyActivityCategory>的map对象 + List<HappyActivityCategory> happyActivityCategories = happyActivityCategoryMapper.selectList( + new LambdaQueryWrapper<HappyActivityCategory>() + .select(HappyActivityCategory::getId, HappyActivityCategory::getName) + .in(HappyActivityCategory::getId,categoryIds) + ); + Map<Long, HappyActivityCategory> categoryMap = happyActivityCategories.stream().collect(Collectors.toMap(HappyActivityCategory::getId, happyActivityCategory -> happyActivityCategory)); + + for (HappyActivity happyActivity : records){ + happyActivity.setCategoryName(categoryMap.get(happyActivity.getCategoryId()).getName()); + } + } + } + return voteActivityPage; + } + + @Override + public FebsResponse addActivity(HappyActivity dto) { + + String code = MallUtils.getOrderNum("AC"); + + HappyActivity happyActivity = new HappyActivity(); + BeanUtil.copyProperties(dto, happyActivity); + happyActivity.setCode(code); + this.baseMapper.insert(happyActivity); + + return new FebsResponse().success().message("操作成功"); + } + + @Override + public FebsResponse delActivity(Long id) { + HappyActivity happyActivity = this.baseMapper.selectById(id); + + happyActivity.setDeleteFlag(StateUpDownEnum.UP.getCode()); + this.baseMapper.updateById(happyActivity); + + return new FebsResponse().success().message("操作成功"); + } + + @Override + public FebsResponse changeState(Long id, Integer state) { + HappyActivity happyActivity = this.baseMapper.selectById(id); + + happyActivity.setState(state); + this.baseMapper.updateById(happyActivity); + + return new FebsResponse().success().message("操作成功"); + } + + @Override + public FebsResponse activityUpdate(HappyActivity dto) { + + HappyActivity happyActivity = this.baseMapper.selectById(dto.getId()); + happyActivity.setCategoryId(dto.getCategoryId()); + happyActivity.setName(dto.getName()); + happyActivity.setType(dto.getType()); + happyActivity.setJoinCnt(dto.getJoinCnt()); + happyActivity.setStartTime(dto.getStartTime()); + happyActivity.setEndTime(dto.getEndTime()); + happyActivity.setPhone(dto.getPhone()); + happyActivity.setAddress(dto.getAddress()); + happyActivity.setPayState(dto.getPayState()); + happyActivity.setPayAmount(dto.getPayAmount()); + happyActivity.setTextRemark(dto.getTextRemark()); + happyActivity.setIndexImg(dto.getIndexImg()); + happyActivity.setOrderCnt(dto.getOrderCnt()); + happyActivity.setHotState(dto.getHotState()); + happyActivity.setBackImg(dto.getBackImg()); + happyActivity.setVoteCnt(dto.getVoteCnt()); + happyActivity.setAddState(dto.getAddState()); + this.baseMapper.updateById(happyActivity); + + return new FebsResponse().success().message("操作成功"); + } + + @Override + public IPage<HappyActivityOption> getOptionListInPage(HappyActivityOption dto, QueryRequest request) { + List<HappyActivity> happyActivities = this.baseMapper.selectList( + new LambdaQueryWrapper<HappyActivity>() + .select(HappyActivity::getId) + .eq(HappyActivity::getType, StateUpDownEnum.ACTIVITY_TYPE_VOTE.getCode()) + ); + if(CollUtil.isEmpty(happyActivities)){ + return new Page<>(); + } + + //stream流操作happyActivities得到一个set<id>集合 + Set<Long> activityIds = happyActivities.stream().map(HappyActivity::getId).collect(Collectors.toSet()); + + Page<HappyActivityOption> page = new Page<>(request.getPageNum(), request.getPageSize()); + LambdaQueryWrapper<HappyActivityOption> voteOptionLambdaQueryWrapper = new LambdaQueryWrapper<>(); + if(ObjectUtil.isNotEmpty(dto.getActivityId())){ + voteOptionLambdaQueryWrapper.eq(HappyActivityOption::getActivityId,dto.getActivityId()); + } + if(ObjectUtil.isNotEmpty(dto.getState())){ + voteOptionLambdaQueryWrapper.eq(HappyActivityOption::getState,dto.getState()); + } + if(ObjectUtil.isNotEmpty(dto.getOptionName())){ + voteOptionLambdaQueryWrapper.eq(HappyActivityOption::getOptionName,dto.getOptionName()); + } + voteOptionLambdaQueryWrapper.in(HappyActivityOption::getActivityId,activityIds); + voteOptionLambdaQueryWrapper.eq(HappyActivityOption::getDeleteFlag, StateUpDownEnum.DOWN.getCode()); + voteOptionLambdaQueryWrapper.orderByDesc(HappyActivityOption::getCreatedTime); + Page<HappyActivityOption> adminOptionVoIPage = happyActivityOptionMapper.selectPage(page, voteOptionLambdaQueryWrapper); + return adminOptionVoIPage; + } + + @Override + public List<HappyActivity> allActivities() { + List<HappyActivity> happyActivities = this.baseMapper.selectList( + new LambdaQueryWrapper<HappyActivity>() + .select(HappyActivity::getId, HappyActivity::getName) + .eq(HappyActivity::getType, StateUpDownEnum.ACTIVITY_TYPE_VOTE.getCode()) + .eq(HappyActivity::getDeleteFlag, StateUpDownEnum.DOWN.getCode()) + ); + return happyActivities; + } + + @Override + public FebsResponse addOption(AdminActivityOptionAddDto dto) { + + + if(ObjectUtil.isEmpty(dto.getActivityId())){ + return new FebsResponse().fail().message("请选择投票活动"); + } + + List<HappyActivityOption> happyActivityOptions = happyActivityOptionMapper.selectList( + new LambdaQueryWrapper<HappyActivityOption>() + .eq(HappyActivityOption::getActivityId, dto.getActivityId()) + .eq(HappyActivityOption::getDeleteFlag, StateUpDownEnum.DOWN.getCode()) + ); + + HappyActivityOption happyActivityOption = new HappyActivityOption(); + BeanUtil.copyProperties(dto, happyActivityOption); + + happyActivityOption.setOrderCnt(CollUtil.isEmpty(happyActivityOptions) ? 1 : happyActivityOptions.size() + 1); + happyActivityOptionMapper.insert(happyActivityOption); + return new FebsResponse().success().message("操作成功"); + } + + @Override + public FebsResponse optionUpdate(HappyActivityOption dto) { + + HappyActivityOption happyActivityOption = happyActivityOptionMapper.selectById(dto.getId()); + BeanUtil.copyProperties(dto, happyActivityOption); + happyActivityOptionMapper.updateById(happyActivityOption); + return new FebsResponse().success().message("操作成功"); + } + + @Override + public FebsResponse optionDelete(Long id) { + + HappyActivityOption happyActivityOption = happyActivityOptionMapper.selectById(id); + + happyActivityOption.setDeleteFlag(StateUpDownEnum.UP.getCode()); + happyActivityOptionMapper.updateById(happyActivityOption); + return new FebsResponse().success().message("操作成功"); + } + + @Override + public IPage<HappyFollow> getFollowVoteInPage(HappyActivityOption voteRecord, QueryRequest request) { + Long id = voteRecord.getId(); + HappyActivityOption happyActivityOption = happyActivityOptionMapper.selectById(id); + if(ObjectUtil.isEmpty(happyActivityOption)){ + return null; + } + HappyActivity happyActivity = this.baseMapper.selectById(happyActivityOption.getActivityId()); + if(ObjectUtil.isEmpty(happyActivity)){ + return null; + } + //获取活动名称 + String activityName = happyActivity.getName(); + + //获取选项名称 + String optionName = happyActivityOption.getOptionName(); + + Page<HappyFollow> page = new Page<>(request.getPageNum(), request.getPageSize()); + LambdaQueryWrapper<HappyFollow> voteRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); + voteRecordLambdaQueryWrapper.eq(HappyFollow::getSourceId, happyActivity.getId()); + voteRecordLambdaQueryWrapper.eq(HappyFollow::getSourceOptionId, happyActivityOption.getId()); + voteRecordLambdaQueryWrapper.eq(HappyFollow::getType,StateUpDownEnum.VOTE.getCode()); + voteRecordLambdaQueryWrapper.orderByDesc(HappyFollow::getCreatedTime); + Page<HappyFollow> adminIPage = happyFollowMapper.selectPage(page, voteRecordLambdaQueryWrapper); + if(CollUtil.isNotEmpty(adminIPage.getRecords())){ + List<HappyFollow> records = adminIPage.getRecords(); + //stream流获取records的memberId的set集合 + Set<Long> memberIds = records.stream().map(HappyFollow::getMemberId).collect(Collectors.toSet()); + List<MallMember> mallMembers = mallMemberMapper.selectList(new LambdaQueryWrapper<MallMember>().in(MallMember::getId, memberIds)); + Map<Long, MallMember> mallMemberMap = mallMembers.stream().collect(Collectors.toMap(MallMember::getId, mallMember -> mallMember)); + for(HappyFollow record : records){ + record.setActivityName(activityName); + record.setOptionName(optionName); + String memberName = mallMemberMap.get(record.getMemberId()).getName(); + record.setMemberName(StrUtil.isEmpty(memberName) ? "未知用户" : memberName); + } + } + return adminIPage; + } } -- Gitblit v1.9.1