package com.xiaopeng.operation.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.xiaopeng.api.dto.operation.XpActivityDto; import com.xiaopeng.api.model.operation.XpActicityStrategy; import com.xiaopeng.api.model.operation.XpActicityUser; import com.xiaopeng.api.model.operation.XpActivity; import com.xiaopeng.api.model.operation.XpActivityNotice; import com.xiaopeng.api.query.operation.XpActivityPageListQuery; import com.xiaopeng.common.core.utils.bean.BeanUtils; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.operation.mapper.XpActicityMapper; import com.xiaopeng.operation.service.IXpActicityService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xiaopeng.operation.service.IXpActicityStrategyService; import com.xiaopeng.operation.service.IXpActicityUserService; import com.xiaopeng.operation.service.IXpActivityNoticeService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; import java.util.Map; import java.util.Random; import java.util.function.Function; import java.util.stream.Collectors; /** *

* 活动管理 服务实现类 *

* * @author mitao * @since 2026-02-03 */ @Service public class XpActicityServiceImpl extends ServiceImpl implements IXpActicityService { @Resource private IXpActicityStrategyService strategyService; @Resource private IXpActicityUserService userService; @Resource private IXpActivityNoticeService activityNotice; @Override public PageInfo pageList(XpActivityPageListQuery query) { PageInfo pageInfo = new PageInfo<>(query.getPageNum(),query.getPageSize()); List list = this.baseMapper.pageList(pageInfo,query); pageInfo.setRecords(list); return pageInfo; } @Override public List findListToIds(String acticityName){ LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.select(XpActivity::getId); query.eq(XpActivity::getDeleted, 0); query.like(XpActivity::getActicityName, acticityName); return listObjs(query, Object::toString); } @Override public XpActivity activiting() { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); LocalDateTime now = LocalDateTime.now(); query.le(XpActivity::getStartTime, now) .ge(XpActivity::getEndTime, now); List list = list(query); if(!list.isEmpty()){ return list.get(new Random().nextInt(list.size())); } return null; } @Override @Transactional public void save(XpActivityDto dto) { XpActivity activity = new XpActivity(); BeanUtils.copyBeanProp(activity, dto); save(activity); List strategy = dto.getStrategy(); List activityUser = dto.getActivityUser(); XpActivityNotice notice = dto.getNotice(); strategy.forEach(e -> e.setActitcityId(activity.getId().intValue())); strategyService.saveBatch(strategy); Map strategyMap = strategy.stream().collect(Collectors.toMap( XpActicityStrategy::getName, Function.identity() )); activityUser.forEach(item -> { item.setActitcityId(activity.getId().intValue()); item.setActitcityStrategeId(strategyMap.get(item.getStrategyName()).getId()); }); notice.setActivityId(activity.getId()); userService.saveBatch(activityUser); activityNotice.save(notice); } @Override public XpActivityDto detail(Long id) { XpActivity byId = getById(id); XpActivityDto ret = new XpActivityDto(); BeanUtils.copyBeanProp(ret, byId); ret.setStrategy(strategyService.listByActicityId(id)); ret.setActivityUser(userService.listByActicityId(id)); return ret; } }