|
@@ -12,11 +12,14 @@ import com.qs.mp.admin.mapper.MarketingMapper;
|
|
import com.qs.mp.admin.service.*;
|
|
import com.qs.mp.admin.service.*;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.qs.mp.common.core.domain.AjaxResult;
|
|
import com.qs.mp.common.core.domain.AjaxResult;
|
|
|
|
+import com.qs.mp.common.core.redis.DistributedLocker;
|
|
import com.qs.mp.common.core.redis.RedisCache;
|
|
import com.qs.mp.common.core.redis.RedisCache;
|
|
import com.qs.mp.common.enums.*;
|
|
import com.qs.mp.common.enums.*;
|
|
import com.qs.mp.common.exception.ServiceException;
|
|
import com.qs.mp.common.exception.ServiceException;
|
|
import com.qs.mp.common.utils.DateUtils;
|
|
import com.qs.mp.common.utils.DateUtils;
|
|
|
|
+import com.qs.mp.common.utils.LogUtil;
|
|
import com.qs.mp.common.utils.bean.BeanUtils;
|
|
import com.qs.mp.common.utils.bean.BeanUtils;
|
|
|
|
+import com.qs.mp.framework.service.IWxSubscribeMessage;
|
|
import com.qs.mp.system.domain.SysUser;
|
|
import com.qs.mp.system.domain.SysUser;
|
|
import com.qs.mp.system.service.ISysUserService;
|
|
import com.qs.mp.system.service.ISysUserService;
|
|
import com.qs.mp.system.service.id.BizIdGenerator;
|
|
import com.qs.mp.system.service.id.BizIdGenerator;
|
|
@@ -29,6 +32,8 @@ import com.qs.mp.user.service.IUserCoinService;
|
|
import com.qs.mp.user.service.IUserPrizeStorageService;
|
|
import com.qs.mp.user.service.IUserPrizeStorageService;
|
|
import com.qs.mp.utils.MarketingUtils;
|
|
import com.qs.mp.utils.MarketingUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -36,6 +41,7 @@ import org.springframework.util.Assert;
|
|
|
|
|
|
import java.net.URLDecoder;
|
|
import java.net.URLDecoder;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -50,11 +56,12 @@ import java.util.stream.Collectors;
|
|
public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing> implements IMarketingService {
|
|
public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing> implements IMarketingService {
|
|
|
|
|
|
// 内部奖池
|
|
// 内部奖池
|
|
- public static final String MARKETING_LOTTERY_INSIDE_POOL = "MARKETING_LOTTERY_INSIDE_POOL";
|
|
|
|
|
|
+ public static final String MARKETING_LOTTERY_INSIDE_POOL = "MARKETING_LOTTERY_INSIDE_POOL:%s";
|
|
|
|
|
|
// 普通奖池
|
|
// 普通奖池
|
|
- public static final String MARKETING_LOTTERY_ORDINARY_POOL = "MARKETING_LOTTERY_ORDINARY_POOL";
|
|
|
|
|
|
+ public static final String MARKETING_LOTTERY_ORDINARY_POOL = "MARKETING_LOTTERY_ORDINARY_POOL:%s";
|
|
|
|
|
|
|
|
+ protected final Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName());
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
private IGoodsService goodsService;
|
|
private IGoodsService goodsService;
|
|
@@ -93,10 +100,22 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
|
|
private BizIdGenerator bizIdGenerator;
|
|
private BizIdGenerator bizIdGenerator;
|
|
|
|
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private IWxSubscribeMessage wxSubscribeMessage;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private DistributedLocker distributedLocker;
|
|
|
|
+
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public void lottery(Marketing marketing) {
|
|
public void lottery(Marketing marketing) {
|
|
|
|
|
|
|
|
+ // 用户抽奖池
|
|
|
|
+ String userLotteryPool = String.format(MARKETING_LOTTERY_ORDINARY_POOL, marketing.getId());
|
|
|
|
+ // 内部抽奖池
|
|
|
|
+ String insideLotteryPool = String.format(MARKETING_LOTTERY_INSIDE_POOL, marketing.getId());
|
|
|
|
+
|
|
// 获取奖级信息
|
|
// 获取奖级信息
|
|
List<MarketingAwards> marketingAwardsList = marketingAwardsService.list(new LambdaQueryWrapper<MarketingAwards>()
|
|
List<MarketingAwards> marketingAwardsList = marketingAwardsService.list(new LambdaQueryWrapper<MarketingAwards>()
|
|
.eq(MarketingAwards::getMarketingId, marketing.getId()));
|
|
.eq(MarketingAwards::getMarketingId, marketing.getId()));
|
|
@@ -105,10 +124,7 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
|
|
int prizeQuantity = marketingAwardsList.stream().mapToInt(MarketingAwards::getQuantity).sum();
|
|
int prizeQuantity = marketingAwardsList.stream().mapToInt(MarketingAwards::getQuantity).sum();
|
|
|
|
|
|
// 校准并获取真实参与人数
|
|
// 校准并获取真实参与人数
|
|
- int realNum = marketingUserCodeService.count(new LambdaQueryWrapper<MarketingUserCode>()
|
|
|
|
- .eq(MarketingUserCode::getMarketingId, marketing.getId())
|
|
|
|
- .eq(MarketingUserCode::getUserType, UserTypeEnum.ORDINARY.getValue())
|
|
|
|
- .groupBy(MarketingUserCode::getMarketingId));
|
|
|
|
|
|
+ int realNum = marketingUserCodeService.countRealUserNumByMarketingId(marketing.getId());
|
|
|
|
|
|
// 设置需要的内定人数
|
|
// 设置需要的内定人数
|
|
int insideNum = 0;
|
|
int insideNum = 0;
|
|
@@ -126,7 +142,8 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
|
|
// 获取一定数量的内定人员设置抽奖码加入抽奖关系表和抽奖池
|
|
// 获取一定数量的内定人员设置抽奖码加入抽奖关系表和抽奖池
|
|
List<SysUser> insideUserList = sysUserService.selectUserListByRand(UserTypeEnum.INSIDE.getValue(), insideNum);
|
|
List<SysUser> insideUserList = sysUserService.selectUserListByRand(UserTypeEnum.INSIDE.getValue(), insideNum);
|
|
|
|
|
|
- Set<String> codeList = new HashSet<>();
|
|
|
|
|
|
+ Set<String> insideCodes = new HashSet<>();
|
|
|
|
+ Set<String> userCodes = new HashSet<>();
|
|
for (SysUser sysUser : insideUserList) {
|
|
for (SysUser sysUser : insideUserList) {
|
|
// 生成抽奖码
|
|
// 生成抽奖码
|
|
String code = MarketingUtils.generatePrizeCode();
|
|
String code = MarketingUtils.generatePrizeCode();
|
|
@@ -141,7 +158,7 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- codeList.add(code);
|
|
|
|
|
|
+ insideCodes.add(code);
|
|
MarketingUserCode marketingUserCode = new MarketingUserCode();
|
|
MarketingUserCode marketingUserCode = new MarketingUserCode();
|
|
marketingUserCode.setMarketingId(marketing.getId());
|
|
marketingUserCode.setMarketingId(marketing.getId());
|
|
marketingUserCode.setUserId(sysUser.getUserId());
|
|
marketingUserCode.setUserId(sysUser.getUserId());
|
|
@@ -153,19 +170,18 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
|
|
marketingUserCodeService.save(marketingUserCode);
|
|
marketingUserCodeService.save(marketingUserCode);
|
|
}
|
|
}
|
|
// 将抽奖码放入内部抽奖池
|
|
// 将抽奖码放入内部抽奖池
|
|
- redisCache.setCacheSet(MARKETING_LOTTERY_INSIDE_POOL, codeList);
|
|
|
|
|
|
+ redisCache.setCacheSet(insideLotteryPool, insideCodes);
|
|
|
|
|
|
|
|
|
|
// 获取普通用户所有的抽奖码
|
|
// 获取普通用户所有的抽奖码
|
|
List<MarketingUserCode> userCodeList = marketingUserCodeService.list(new LambdaQueryWrapper<MarketingUserCode>()
|
|
List<MarketingUserCode> userCodeList = marketingUserCodeService.list(new LambdaQueryWrapper<MarketingUserCode>()
|
|
.eq(MarketingUserCode::getMarketingId, marketing.getId())
|
|
.eq(MarketingUserCode::getMarketingId, marketing.getId())
|
|
.eq(MarketingUserCode::getUserType, UserTypeEnum.ORDINARY.getValue()));
|
|
.eq(MarketingUserCode::getUserType, UserTypeEnum.ORDINARY.getValue()));
|
|
- codeList.clear();
|
|
|
|
if (CollectionUtils.isNotEmpty(userCodeList)) {
|
|
if (CollectionUtils.isNotEmpty(userCodeList)) {
|
|
- codeList = userCodeList.stream().map(MarketingUserCode::getCode).collect(Collectors.toSet());
|
|
|
|
|
|
+ userCodes = userCodeList.stream().map(MarketingUserCode::getCode).collect(Collectors.toSet());
|
|
}
|
|
}
|
|
// 将抽奖码放入普通抽奖池
|
|
// 将抽奖码放入普通抽奖池
|
|
- redisCache.setCacheSet(MARKETING_LOTTERY_ORDINARY_POOL, codeList);
|
|
|
|
|
|
+ redisCache.setCacheSet(userLotteryPool, userCodes);
|
|
|
|
|
|
// 所有中奖名单
|
|
// 所有中奖名单
|
|
List<MarketingHitPrize> allHitPrizeList = new ArrayList<>();
|
|
List<MarketingHitPrize> allHitPrizeList = new ArrayList<>();
|
|
@@ -191,26 +207,14 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
|
|
|
|
|
|
if (insideNum != 0) {
|
|
if (insideNum != 0) {
|
|
// 设置内部用户抽奖信息
|
|
// 设置内部用户抽奖信息
|
|
- List<String> insideCodeList = redisCache.popCacheSet(MARKETING_LOTTERY_INSIDE_POOL, insideNum);
|
|
|
|
|
|
+ List<String> insideCodeList = redisCache.popCacheSet(insideLotteryPool, insideNum);
|
|
for (String code : insideCodeList) {
|
|
for (String code : insideCodeList) {
|
|
MarketingUserCode marketingUserCode = marketingUserCodeService.getOne(new LambdaQueryWrapper<MarketingUserCode>()
|
|
MarketingUserCode marketingUserCode = marketingUserCodeService.getOne(new LambdaQueryWrapper<MarketingUserCode>()
|
|
.eq(MarketingUserCode::getMarketingId, marketing.getId())
|
|
.eq(MarketingUserCode::getMarketingId, marketing.getId())
|
|
.eq(MarketingUserCode::getCode, code));
|
|
.eq(MarketingUserCode::getCode, code));
|
|
|
|
|
|
// 设置中奖信息
|
|
// 设置中奖信息
|
|
- MarketingHitPrize marketingHitPrize = new MarketingHitPrize();
|
|
|
|
- marketingHitPrize.setId(bizIdGenerator.newId());
|
|
|
|
- marketingHitPrize.setMarketingId(marketing.getId());
|
|
|
|
- marketingHitPrize.setAwardsId(marketingAwards.getId());
|
|
|
|
- marketingHitPrize.setMarketingUserCodeId(marketingUserCode.getId());
|
|
|
|
- marketingHitPrize.setUserId(marketingUserCode.getUserId());
|
|
|
|
- marketingHitPrize.setUserType(marketingUserCode.getUserType());
|
|
|
|
-
|
|
|
|
- // 随机抽取奖品,[0, list.size) 左闭右开
|
|
|
|
- int randomIndex = RandomUtil.randomInt(0, marketingAwardsPrizeList.size());
|
|
|
|
- marketingHitPrize.setPrizeId(marketingAwardsPrizeList.get(randomIndex).getId());
|
|
|
|
-
|
|
|
|
- allHitPrizeList.add(marketingHitPrize);
|
|
|
|
|
|
+ exchangeMarketingHitPrize(marketing, allHitPrizeList, marketingAwards, marketingAwardsPrizeList, marketingUserCode);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -219,7 +223,7 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
|
|
if (userNum > 0) {
|
|
if (userNum > 0) {
|
|
// 设置普通用户抽奖信息
|
|
// 设置普通用户抽奖信息
|
|
for (int i = 0; i < userNum; i++) {
|
|
for (int i = 0; i < userNum; i++) {
|
|
- List<String> insideCodeList = redisCache.popCacheSet(MARKETING_LOTTERY_INSIDE_POOL, 1);
|
|
|
|
|
|
+ List<String> insideCodeList = redisCache.popCacheSet(userLotteryPool, 1);
|
|
MarketingUserCode marketingUserCode = marketingUserCodeService.getOne(new LambdaQueryWrapper<MarketingUserCode>()
|
|
MarketingUserCode marketingUserCode = marketingUserCodeService.getOne(new LambdaQueryWrapper<MarketingUserCode>()
|
|
.eq(MarketingUserCode::getMarketingId, marketing.getId())
|
|
.eq(MarketingUserCode::getMarketingId, marketing.getId())
|
|
.eq(MarketingUserCode::getCode, insideCodeList.get(0)));
|
|
.eq(MarketingUserCode::getCode, insideCodeList.get(0)));
|
|
@@ -229,23 +233,9 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
|
|
.eq(MarketingUserCode::getMarketingId, marketing.getId())
|
|
.eq(MarketingUserCode::getMarketingId, marketing.getId())
|
|
.eq(MarketingUserCode::getUserId, marketingUserCode.getUserId()));
|
|
.eq(MarketingUserCode::getUserId, marketingUserCode.getUserId()));
|
|
List<Object> delUserCodeList = list.stream().map(MarketingUserCode::getCode).collect(Collectors.toList());
|
|
List<Object> delUserCodeList = list.stream().map(MarketingUserCode::getCode).collect(Collectors.toList());
|
|
- redisCache.removeSetValueByKey(MARKETING_LOTTERY_ORDINARY_POOL, delUserCodeList);
|
|
|
|
|
|
+ redisCache.removeSetValueByKey(userLotteryPool, delUserCodeList);
|
|
|
|
+ MarketingHitPrize marketingHitPrize = exchangeMarketingHitPrize(marketing, allHitPrizeList, marketingAwards, marketingAwardsPrizeList, marketingUserCode);
|
|
|
|
|
|
-
|
|
|
|
- // 设置中奖信息
|
|
|
|
- MarketingHitPrize marketingHitPrize = new MarketingHitPrize();
|
|
|
|
- marketingHitPrize.setId(bizIdGenerator.newId());
|
|
|
|
- marketingHitPrize.setMarketingId(marketing.getId());
|
|
|
|
- marketingHitPrize.setAwardsId(marketingAwards.getId());
|
|
|
|
- marketingHitPrize.setMarketingUserCodeId(marketingUserCode.getId());
|
|
|
|
- marketingHitPrize.setUserId(marketingUserCode.getUserId());
|
|
|
|
- marketingHitPrize.setUserType(marketingUserCode.getUserType());
|
|
|
|
-
|
|
|
|
- // 随机抽取奖品,[0, list.size) 左闭右开
|
|
|
|
- int randomIndex = RandomUtil.randomInt(0, marketingAwardsPrizeList.size());
|
|
|
|
- marketingHitPrize.setPrizeId(marketingAwardsPrizeList.get(randomIndex).getId());
|
|
|
|
-
|
|
|
|
- allHitPrizeList.add(marketingHitPrize);
|
|
|
|
userHitPrizeList.add(marketingHitPrize);
|
|
userHitPrizeList.add(marketingHitPrize);
|
|
|
|
|
|
// 更新用户中奖状态
|
|
// 更新用户中奖状态
|
|
@@ -255,11 +245,12 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// 保存中奖信息
|
|
// 保存中奖信息
|
|
- marketingHitPrizeService.saveBatch(allHitPrizeList);
|
|
|
|
|
|
+ Assert.isTrue(marketingHitPrizeService.saveBatch(allHitPrizeList), "保存中奖信息失败。marketingId:" + marketing.getId());
|
|
|
|
|
|
// 更新抽奖码中奖状态
|
|
// 更新抽奖码中奖状态
|
|
if (CollectionUtils.isNotEmpty(userCodeUpdateList)) {
|
|
if (CollectionUtils.isNotEmpty(userCodeUpdateList)) {
|
|
- marketingUserCodeService.updateBatchById(userCodeUpdateList);
|
|
|
|
|
|
+ boolean rtn = marketingUserCodeService.updateBatchById(userCodeUpdateList);
|
|
|
|
+ Assert.isTrue(rtn, "更新抽奖码中奖状态失败。marketingId:" + marketing.getId());
|
|
}
|
|
}
|
|
|
|
|
|
// 发奖品
|
|
// 发奖品
|
|
@@ -287,46 +278,46 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
|
|
.eq(Marketing::getTriggerStatus, 0));
|
|
.eq(Marketing::getTriggerStatus, 0));
|
|
Assert.isTrue(rtn, "更新活动开奖状态失败。marketingId:" + marketing.getId());
|
|
Assert.isTrue(rtn, "更新活动开奖状态失败。marketingId:" + marketing.getId());
|
|
|
|
|
|
|
|
+ // 删除抽奖池
|
|
|
|
+ redisCache.deleteObject(userLotteryPool);
|
|
|
|
+ redisCache.deleteObject(insideLotteryPool);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private MarketingHitPrize exchangeMarketingHitPrize(Marketing marketing, List<MarketingHitPrize> allHitPrizeList, MarketingAwards marketingAwards, List<MarketingAwardsPrize> marketingAwardsPrizeList, MarketingUserCode marketingUserCode) {
|
|
|
|
+ // 设置中奖信息
|
|
|
|
+ MarketingHitPrize marketingHitPrize = new MarketingHitPrize();
|
|
|
|
+ marketingHitPrize.setId(bizIdGenerator.newId());
|
|
|
|
+ marketingHitPrize.setMarketingId(marketing.getId());
|
|
|
|
+ marketingHitPrize.setAwardsId(marketingAwards.getId());
|
|
|
|
+ marketingHitPrize.setMarketingUserCodeId(marketingUserCode.getId());
|
|
|
|
+ marketingHitPrize.setUserId(marketingUserCode.getUserId());
|
|
|
|
+ marketingHitPrize.setUserType(marketingUserCode.getUserType());
|
|
|
|
+
|
|
|
|
+ // 随机抽取奖品,[0, list.size) 左闭右开
|
|
|
|
+ int randomIndex = RandomUtil.randomInt(0, marketingAwardsPrizeList.size());
|
|
|
|
+ marketingHitPrize.setPrizeId(marketingAwardsPrizeList.get(randomIndex).getId());
|
|
|
|
+
|
|
|
|
+ allHitPrizeList.add(marketingHitPrize);
|
|
|
|
+ return marketingHitPrize;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public void help(MarketingHelpParam marketingHelpParam, Long userId) {
|
|
public void help(MarketingHelpParam marketingHelpParam, Long userId) {
|
|
String inviteCode = marketingHelpParam.getInviteCode();
|
|
String inviteCode = marketingHelpParam.getInviteCode();
|
|
- if (com.qs.mp.common.utils.StringUtils.isBlank(inviteCode)) {
|
|
|
|
- throw new ServiceException("邀请码不能为空");
|
|
|
|
- }
|
|
|
|
|
|
+ // 邀请码解码,被助力人id
|
|
|
|
+ Long helpedUserId = MarketingUtils.decodeInviteCode(inviteCode);
|
|
|
|
|
|
Marketing marketing = this.getById(marketingHelpParam.getMarketingId());
|
|
Marketing marketing = this.getById(marketingHelpParam.getMarketingId());
|
|
- if (Objects.isNull(marketing)) {
|
|
|
|
- throw new ServiceException("活动不存在");
|
|
|
|
- }
|
|
|
|
- // 未开启的活动不能助力
|
|
|
|
- if (MarketingStatusEnum.ON.getValue().equals(marketing.getIsOn())) {
|
|
|
|
- throw new ServiceException("活动未开启~");
|
|
|
|
- }
|
|
|
|
- Date now = DateUtils.getNowDate();
|
|
|
|
- // 结束的活动不支持助力
|
|
|
|
- if (marketing.getTriggerStatus() == 1 || marketing.getEndTime().before(now)) {
|
|
|
|
- throw new ServiceException("活动已过期~");
|
|
|
|
- }
|
|
|
|
- // 未开始的活动不能助力
|
|
|
|
- if (marketing.getStartTime().after(now)) {
|
|
|
|
- throw new ServiceException("活动未开始~");
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
+ // 处理助力信息
|
|
// 判断是否已经助力过
|
|
// 判断是否已经助力过
|
|
int count = marketingUserCodeService.count(new LambdaQueryWrapper<MarketingUserCode>()
|
|
int count = marketingUserCodeService.count(new LambdaQueryWrapper<MarketingUserCode>()
|
|
- .eq(MarketingUserCode::getUserId, userId)
|
|
|
|
- .eq(MarketingUserCode::getMarketingId, marketingHelpParam.getMarketingId()));
|
|
|
|
|
|
+ .eq(MarketingUserCode::getHelpUserId, userId));
|
|
if (count > 0) {
|
|
if (count > 0) {
|
|
throw new ServiceException("您已经助力过了");
|
|
throw new ServiceException("您已经助力过了");
|
|
}
|
|
}
|
|
-
|
|
|
|
- // 邀请码解码,被助力人id
|
|
|
|
- Long helpedUserId = MarketingUtils.decodeInviteCode(inviteCode);
|
|
|
|
-
|
|
|
|
// 生成抽奖码
|
|
// 生成抽奖码
|
|
String code = "";
|
|
String code = "";
|
|
while (true) {
|
|
while (true) {
|
|
@@ -342,7 +333,9 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
|
|
}
|
|
}
|
|
|
|
|
|
MarketingUserCode marketingUserCode = new MarketingUserCode();
|
|
MarketingUserCode marketingUserCode = new MarketingUserCode();
|
|
|
|
+ // 设置活动id
|
|
marketingUserCode.setMarketingId(marketingHelpParam.getMarketingId());
|
|
marketingUserCode.setMarketingId(marketingHelpParam.getMarketingId());
|
|
|
|
+ // 设置抽奖码
|
|
marketingUserCode.setCode(code);
|
|
marketingUserCode.setCode(code);
|
|
// 设置被助力人
|
|
// 设置被助力人
|
|
marketingUserCode.setUserId(helpedUserId);
|
|
marketingUserCode.setUserId(helpedUserId);
|
|
@@ -350,27 +343,26 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
|
|
marketingUserCode.setHelpUserId(userId);
|
|
marketingUserCode.setHelpUserId(userId);
|
|
marketingUserCode.setUserType(UserTypeEnum.ORDINARY.getValue());
|
|
marketingUserCode.setUserType(UserTypeEnum.ORDINARY.getValue());
|
|
|
|
|
|
-
|
|
|
|
// 保存助力信息
|
|
// 保存助力信息
|
|
marketingUserCodeService.save(marketingUserCode);
|
|
marketingUserCodeService.save(marketingUserCode);
|
|
|
|
|
|
- // 增加活动参与人数
|
|
|
|
- int userCount = marketingUserCodeService.count(new LambdaQueryWrapper<MarketingUserCode>()
|
|
|
|
- .eq(MarketingUserCode::getMarketingId, marketing.getId())
|
|
|
|
- .eq(MarketingUserCode::getUserType, UserTypeEnum.ORDINARY.getValue())
|
|
|
|
- .groupBy(MarketingUserCode::getMarketingId));
|
|
|
|
|
|
|
|
- Marketing marketingParam = new Marketing();
|
|
|
|
- marketingParam.setId(marketing.getId());
|
|
|
|
- marketingParam.setRealNum(userCount);
|
|
|
|
- int randomNum = (int) 1 + (int) (Math.random() * 10);
|
|
|
|
- marketingParam.setFakeNum(marketing.getFakeNum() + randomNum);
|
|
|
|
|
|
+ // 真实用户
|
|
|
|
+ int realNum = marketingUserCodeService.countRealUserNumByMarketingId(marketing.getId());
|
|
|
|
|
|
|
|
+
|
|
|
|
+ // 获取最新活动信息
|
|
|
|
+ marketing.setRealNum(realNum);
|
|
|
|
+ int randomNum = (int) 1 + (int) (Math.random() * 10);
|
|
|
|
+ marketing.setFakeNum(marketing.getFakeNum() + randomNum);
|
|
// 更新活动参与人数
|
|
// 更新活动参与人数
|
|
- this.updateById(marketingParam);
|
|
|
|
|
|
+ boolean rtn = this.updateById(marketing);
|
|
|
|
+ Assert.isTrue(rtn, "更新活动参与人数异常。marketingId:" + marketing.getId());
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ // 给被助力人发送成功消息
|
|
|
|
+ wxSubscribeMessage.sendMarketingHelp(helpedUserId, marketing);
|
|
|
|
|
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|