|
@@ -1,24 +1,29 @@
|
|
|
package com.qs.mp.web.controller.api.user;
|
|
|
|
|
|
+import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
import com.qs.mp.admin.domain.Marketing;
|
|
|
import com.qs.mp.admin.domain.MarketingAwards;
|
|
|
import com.qs.mp.admin.domain.MarketingAwardsPrize;
|
|
|
+import com.qs.mp.admin.domain.MarketingMsg;
|
|
|
import com.qs.mp.admin.domain.vo.MarketingAwardsVO;
|
|
|
import com.qs.mp.admin.service.IMarketingAwardsPrizeService;
|
|
|
import com.qs.mp.admin.service.IMarketingAwardsService;
|
|
|
+import com.qs.mp.admin.service.IMarketingMsgService;
|
|
|
import com.qs.mp.admin.service.IMarketingService;
|
|
|
import com.qs.mp.common.core.domain.AjaxResult;
|
|
|
import com.qs.mp.common.core.page.TableDataInfo;
|
|
|
import com.qs.mp.common.core.redis.DistributedLocker;
|
|
|
+import com.qs.mp.common.core.redis.RedisCache;
|
|
|
import com.qs.mp.common.enums.MarketingCodeTypeEnum;
|
|
|
import com.qs.mp.common.enums.MarketingStatusEnum;
|
|
|
import com.qs.mp.common.enums.UserTypeEnum;
|
|
|
import com.qs.mp.common.exception.ServiceException;
|
|
|
import com.qs.mp.common.utils.DateUtils;
|
|
|
import com.qs.mp.common.utils.StringUtils;
|
|
|
+import com.qs.mp.framework.redis.RedisKey;
|
|
|
import com.qs.mp.framework.redis.RedisLockKey;
|
|
|
import com.qs.mp.framework.security.handle.HostHolder;
|
|
|
import com.qs.mp.framework.service.IWxSubscribeMessage;
|
|
@@ -39,6 +44,7 @@ import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import io.swagger.annotations.ApiResponse;
|
|
|
import io.swagger.annotations.ApiResponses;
|
|
|
+import java.time.LocalDateTime;
|
|
|
import org.aspectj.weaver.loadtime.Aj;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -90,6 +96,12 @@ public class MarketingController extends BaseApiController {
|
|
|
@Autowired
|
|
|
private IWxSubscribeMessage wxSubscribeMessage;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private RedisCache redisCache;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IMarketingMsgService marketingMsgService;
|
|
|
+
|
|
|
@PostMapping("/generateCode/{marketingId}")
|
|
|
@ApiOperation("立即获取抽奖码")
|
|
|
public AjaxResult generateCode(@PathVariable("marketingId") Long marketingId) {
|
|
@@ -228,9 +240,14 @@ public class MarketingController extends BaseApiController {
|
|
|
}finally {
|
|
|
distributedLocker.unlock(lockKey);
|
|
|
}
|
|
|
- // 异步给被助力人发送成功消息
|
|
|
- wxSubscribeMessage.sendMarketingHelp(helpedUserId, marketing);
|
|
|
|
|
|
+ // 保存助力成功消息记录
|
|
|
+ MarketingMsg marketingMsg = new MarketingMsg();
|
|
|
+ marketingMsg.setMarketingId(marketing.getId());
|
|
|
+ marketingMsg.setContext(marketing.getTitle());
|
|
|
+ marketingMsg.setUserId(helpedUserId);
|
|
|
+ marketingMsg.setType(3);
|
|
|
+ marketingMsgService.save(marketingMsg);
|
|
|
|
|
|
return AjaxResult.success("助力成功");
|
|
|
}
|
|
@@ -246,7 +263,6 @@ public class MarketingController extends BaseApiController {
|
|
|
return AjaxResult.success("邀请码生成成功",MarketingUtils.generateInviteCode(userId));
|
|
|
}
|
|
|
|
|
|
-
|
|
|
@PostMapping("/list")
|
|
|
@ApiOperation("获取营销活动列表")
|
|
|
@ApiResponses(
|
|
@@ -273,6 +289,10 @@ public class MarketingController extends BaseApiController {
|
|
|
queryWrapper.gt(Marketing::getEndTime, now);
|
|
|
queryWrapper.orderByAsc(Marketing::getEndTime, Marketing::getStartTime);
|
|
|
}else if(userMarketingQueryParam.getTriggerStatus() == 1) {
|
|
|
+ // 过滤30天之前的
|
|
|
+ LocalDateTime localDateTime = LocalDateTimeUtil.now().minusDays(30);
|
|
|
+ queryWrapper.ge(Marketing::getEndTime, localDateTime);
|
|
|
+
|
|
|
// 开奖的排序
|
|
|
queryWrapper.orderByDesc(Marketing::getEndTime);
|
|
|
}
|
|
@@ -288,12 +308,22 @@ public class MarketingController extends BaseApiController {
|
|
|
.eq(MarketingHitPrize::getMarketingId, marketing.getId())
|
|
|
.eq(MarketingHitPrize::getUserId, finalUserId));
|
|
|
userMarketingListVO.setIsHit(count);
|
|
|
+ } else {
|
|
|
+ String fakeNumKey = RedisKey.build(RedisKey.MARKETING_FAKE_NUM, marketing.getId());
|
|
|
+ Integer fakeNum = redisCache.getCacheObject(fakeNumKey);
|
|
|
+ if (fakeNum == null) {
|
|
|
+ int realNum = marketingUserCodeService.countRealUserNumByMarketingId(marketing.getId());
|
|
|
+ fakeNum = realNum * 2;
|
|
|
+ redisCache.setCacheObject(fakeNumKey, fakeNum, 30, TimeUnit.HOURS);
|
|
|
+ }
|
|
|
+ userMarketingListVO.setFakeNum(fakeNum);
|
|
|
}
|
|
|
return userMarketingListVO;
|
|
|
}).collect(Collectors.toList());
|
|
|
}
|
|
|
-
|
|
|
- return getDataTable(userMarketingListVOList);
|
|
|
+ TableDataInfo dataTable = getDataTable(list);
|
|
|
+ dataTable.setRows(userMarketingListVOList);
|
|
|
+ return dataTable;
|
|
|
}
|
|
|
|
|
|
@PostMapping("/detail/{id}")
|
|
@@ -317,6 +347,16 @@ public class MarketingController extends BaseApiController {
|
|
|
UserMarketingDetailVO userMarketingDetailVO = new UserMarketingDetailVO();
|
|
|
BeanUtils.copyProperties(marketing, userMarketingDetailVO);
|
|
|
|
|
|
+ String fakeNumKey = RedisKey.build(RedisKey.MARKETING_FAKE_NUM, id);
|
|
|
+ Integer fakeNum = redisCache.getCacheObject(fakeNumKey);
|
|
|
+ if (fakeNum == null) {
|
|
|
+ int realNum = marketingUserCodeService.countRealUserNumByMarketingId(id);
|
|
|
+ fakeNum = realNum * 2;
|
|
|
+ redisCache.setCacheObject(fakeNumKey, fakeNum, 30, TimeUnit.HOURS);
|
|
|
+ }
|
|
|
+
|
|
|
+ userMarketingDetailVO.setFakeNum(fakeNum);
|
|
|
+
|
|
|
List<MarketingAwards> awardsList = marketingAwardsService.list(new LambdaQueryWrapper<MarketingAwards>().eq(MarketingAwards::getMarketingId, id));
|
|
|
if (CollectionUtils.isNotEmpty(awardsList)) {
|
|
|
List<MarketingAwardsVO> list = awardsList.stream().map(marketingAwards -> {
|