From d900bdc7b712666cdeafe36f01e485f4672e4651 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期一, 17 十一月 2025 15:14:33 +0800
Subject: [PATCH] 修改奖品bug
---
framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java | 517 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 492 insertions(+), 25 deletions(-)
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java
index 2da8595..2c80580 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java
@@ -5,25 +5,35 @@
import cn.lili.common.properties.RocketmqCustomProperties;
import cn.lili.common.security.AuthUser;
import cn.lili.common.security.context.UserContext;
+import cn.lili.common.utils.BeanUtil;
import cn.lili.common.utils.StringUtils;
import cn.lili.modules.lmk.domain.entity.*;
+import cn.lili.modules.lmk.domain.form.AddPrizeNumForm;
import cn.lili.modules.lmk.domain.query.PrizeRecordTimeQuery;
-import cn.lili.modules.lmk.domain.vo.PrizeProbabilityVO;
-import cn.lili.modules.lmk.domain.vo.PrizeRecordTimeVO;
+import cn.lili.modules.lmk.domain.vo.*;
import cn.lili.modules.lmk.enums.general.*;
import cn.lili.modules.lmk.service.*;
+import cn.lili.modules.member.entity.dos.Member;
+import cn.lili.modules.member.service.MemberService;
+import cn.lili.modules.order.order.entity.dos.Order;
+import cn.lili.modules.order.order.service.OrderService;
+import cn.lili.modules.promotion.entity.dos.Coupon;
+import cn.lili.modules.promotion.service.CouponService;
import cn.lili.mybatis.BaseEntity;
import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
-import cn.lili.rocketmq.tags.CommentTagsEnum;
+import cn.lili.utils.COSUtil;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
+import org.springframework.beans.BeanUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -37,10 +47,10 @@
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.*;
-import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
+@Slf4j
@Service
@RequiredArgsConstructor
public class PrizeServiceImpl implements PrizeService {
@@ -51,10 +61,22 @@
private final PrizeRecordService prizeRecordService;
private static final String PRIZE_PREFIX = "prize_draw:";
private static final String PRIZE_NUMBER = "prize_number:";
+ private static final String PRIZE_ADD_NUM = "prize_add_num:";
private final RedisTemplate<String, String> redisTemplate;
private final RedissonClient redissonClient;
private final RocketmqCustomProperties rocketmqCustomProperties;
private final RocketMQTemplate rocketMQTemplate;
+ private final COSUtil cosUtil;
+ private final CouponService couponService;
+ private final AddPrizeRuleService addPrizeRuleService;
+ private final ActionRecordService actionRecordService;
+ private final ShareActionService shareActionService;
+ private final AddNumCheekService addNumCheekService;
+ private final OrderService orderService;
+ private final MemberService memberService;
+ private final VideoService videoService;
+ private final VideoAuditRecordService videoAuditRecordService;
+
@Override
@Transactional(rollbackFor = Exception.class)
public Result prize(String prizeId) {
@@ -167,20 +189,20 @@
refPrizes = activityRefPrizeService.list(prizeRefQuery);
canPrizeMap = refPrizes.stream().filter(item -> {
return item.getRemainNum() > 0;
- }).collect(Collectors.toMap(ActivityRefPrize::getPrizeId, Function.identity()));
+ }).collect(Collectors.toMap(ActivityRefPrize::getId, Function.identity()));
prizeRecordTimeQuery = new PrizeRecordTimeQuery();
prizeRecordTimeQuery.setStartTime(beginTime);
prizeRecordTimeQuery.setEndTime(endTime);
prizeRecordTimeQuery.setRecordActivityId(prizeId);
prizeRecordListByTime = prizeRecordService.getPrizeRecordListByTime(prizeRecordTimeQuery);
- prizeRecordListByTime.stream().filter(item->{
- return item.getPrizeId() != null;
+ prizeRecordListByTime.stream().filter(item -> {
+ return item.getActivityPrizeRefId() != null;
}).forEach(item -> {
- ActivityRefPrize activityRefPrize = canPrizeMap.get(Long.parseLong(item.getPrizeId()));
+ ActivityRefPrize activityRefPrize = canPrizeMap.get(item.getActivityPrizeRefId());
if (activityRefPrize != null) {
//绉婚櫎褰撴棩涓婇檺鐨勫鍝佸苟涓旀坊鍔犲埌涓嶈兘鎶藉鍟嗗搧涓幓
if (activityRefPrize.getMaxPreDay() <= item.getTotal()) {
- canPrizeMap.remove(Long.parseLong(item.getPrizeId()));
+ canPrizeMap.remove(item.getActivityPrizeRefId());
}
}
});
@@ -204,7 +226,7 @@
BigDecimal probabilityBegin = BigDecimal.ZERO;
for (ActivityRefPrize item : refPrizeList) {
PrizeProbabilityVO prizeProbabilityVO = new PrizeProbabilityVO();
- prizeProbabilityVO.setPrizeId(item.getPrizeId());
+ prizeProbabilityVO.setActivityPrizeRefId(item.getId());
BigDecimal multiply = item.getPrizeProbability().multiply(BigDecimal.valueOf(100));
BigDecimal[][] position = {{probabilityBegin, multiply.add(probabilityBegin)}};
prizeProbabilityVO.setProbability(position);
@@ -213,13 +235,44 @@
}
BigDecimal max = currentProbability.multiply(BigDecimal.valueOf(100));
BigDecimal bigDecimal = generateRandom(BigDecimal.ONE, max);
+ try {
+ log.info("鎶藉鍙风爜涓�---------------------------->{}", bigDecimal);
+ log.info("鎶藉姒傜巼闆嗗悎涓�------------------------->{}", JSONObject.toJSONString(prizeProbabilityList));
+ } catch (Exception e) {
+ log.error("鎵撳嵃鎶藉淇℃伅鎶ラ敊----------------------->", e);
+ }
for (PrizeProbabilityVO prizeProbabilityVO : prizeProbabilityList) {
BigDecimal minP = prizeProbabilityVO.getProbability()[0][0];
BigDecimal maxP = prizeProbabilityVO.getProbability()[0][1];
if (bigDecimal.compareTo(minP) > 0 && bigDecimal.compareTo(maxP) <= 0) {
- prizeWon = prizeProbabilityVO.getPrizeId();
+ prizeWon = prizeProbabilityVO.getActivityPrizeRefId();
break;
}
+ }
+ Coupon coupon = null;
+ //鏍¢獙浼樻儬鍗锋槸鍚﹀厑璁哥敤鎴峰棰嗕笉鍏佽褰撴湭涓澶勭悊
+ if (prizeWon != null) {
+ ActivityRefPrize activityRefPrize = canPrizeMap.get(prizeWon);
+ String prizeDrawId = activityRefPrize.getPrizeId();
+ PrizeDraw prizeDraw = prizeDrawService.getById(prizeDrawId);
+ String couponId = prizeDraw.getCouponId();
+ coupon = couponService.getById(couponId);
+ if (coupon == null) {
+ prizeWon = null;
+ } else {
+ Integer couponLimitNum = coupon.getCouponLimitNum();
+ //鑾峰彇鐢ㄦ埛杩欎釜浼樻儬鍗风殑涓鎯呭喌
+ LambdaQueryWrapper<PrizeRecord> eq = Wrappers.<PrizeRecord>lambdaQuery()
+ .eq(PrizeRecord::getUserId, userId)
+ .eq(PrizeRecord::getPrizeActivityId, prizeId)
+ .eq(PrizeRecord::getPrizeId, prizeDrawId);
+ int size = prizeRecordService.list(eq).size();
+ if ( couponLimitNum>0 && size >= couponLimitNum) {
+ log.info("瑙﹀彂浼樻儬鍗烽鍙栭檺鍒�---------->{}",prizeWon);
+ prizeWon = null;
+ }
+ }
+
}
//鏈腑濂栫殑鎯呭喌
if (prizeWon == null) {
@@ -263,7 +316,7 @@
if (!update) {
throw new ServiceException("褰撳墠娲诲姩澶伀鐖嗕簡璇风◢鍚庡啀璇�");
}
- PrizeDraw prizeDraw = prizeDrawService.getById(prizeWon);
+ PrizeDraw prizeDraw = prizeDrawService.getById(activityRefPrize.getPrizeId());
//鍐欏叆鎶藉璁板綍
PrizeRecord prizeRecord = new PrizeRecord();
prizeRecord.setUserId(Long.parseLong(userId));
@@ -277,7 +330,7 @@
prizeRecord.setPrizeNumId(Long.parseLong(waitUserPrize.getId()));
prizeRecord.setActivityPrizeRefId(Long.parseLong(activityRefPrize.getId()));
prizeRecord.setDistributeStatus(PrizeDistributeStatusEnum.WAIT.name());
- prizeRecord.setPrizeId(prizeWon);
+ prizeRecord.setPrizeId(activityRefPrize.getPrizeId());
prizeRecord.setPrizeName(prizeDraw.getPrizeName());
prizeRecord.setPrizeActivityCover(prizeActivity.getActivityCover());
prizeRecord.setPrizeImg(prizeDraw.getPrizeImg());
@@ -287,6 +340,7 @@
// if (!lock.equals(nowLock)) {
// throw new RuntimeException("褰撳墠娲诲姩澶伀鐖嗕簡璇风◢鍚庡啀璇�");
// }
+ String couponId = coupon.getId();
// 璧癿q寮傛澶勭悊
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
@@ -295,7 +349,10 @@
rocketMQTemplate.asyncSend(destination, JSON.toJSONString(prizeRecord), RocketmqSendCallbackBuilder.commonCallback());
}
});
- return Result.ok().data(activityRefPrize);
+ PrizeResultVO prizeResultVO = new PrizeResultVO();
+ BeanUtils.copyProperties(activityRefPrize, prizeResultVO);
+ prizeResultVO.setCouponId(couponId);
+ return Result.ok().data(prizeResultVO);
}
public static BigDecimal generateRandom(BigDecimal min, BigDecimal max) {
@@ -329,6 +386,13 @@
if (activity == null) {
throw new RuntimeException("褰撳墠娲诲姩涓嶅瓨鍦�");
}
+ Date activityEndtime = activity.getEndTime();
+ if (new Date().after(activityEndtime)) {
+ throw new ServiceException("褰撳墠娲诲姩宸茬粡缁撴潫");
+ }
+ if (!PrizeActivityStatusEnum.ON.name().equals(activity.getEnableStatus())) {
+ throw new ServiceException("娲诲姩杩樻病鏈夊惎鐢�");
+ }
//鑾峰彇鐢ㄦ埛鎶藉娆℃暟
Integer prizeNum = activity.getPrizeNum();
//鍔犻攣鍒ゆ柇娣诲姞绯荤粺璧犻�佹鏁�
@@ -336,13 +400,26 @@
try {
lock.lock();
prizeNumberList = getPrizeNumberList(prizeId, userId);
+ //榛樿鐢熸垚
+ boolean needGenerate = true;
+ for (PrizeNumber prizeNumber : prizeNumberList) {
+ String userAction = prizeNumber.getUserAction();
+ if (PrizeUserActionEnum.SYSTEM.name().equals(userAction)) {
+ needGenerate = false;
+ break;
+ }
+ }
// 褰撳墠鐢ㄦ埛娌℃湁鍒濆鍖栨娊濂栨暟鎹渶瑕佸垵濮嬪寲褰撳ぉ鎶藉鏁版嵁
- if (prizeNumberList == null || prizeNumberList.isEmpty()) {
- //娌℃湁榛樿鎶藉娆℃暟鐩存帴杩斿洖0娆�
+ if (prizeNumberList.isEmpty() || needGenerate) {
+ //娌℃湁榛樿鎶藉娆℃暟涓嶇敓鎴愭娊濂栨鏁�
+ int size = prizeNumberList.size();
if (prizeNum == null || prizeNum <= 0) {
- return Result.ok().data(0);
+ return Result.ok().data(size);
}
prizeNumberList = new ArrayList<>();
+ if (size+prizeNum>activity.getMaxPrize()){
+ prizeNum = activity.getMaxPrize()-size;
+ }
//璁剧疆榛樿鎶藉娆℃暟骞惰繑鍥為粯璁ゆ娊濂栨鏁�
for (int i = 0; i < prizeNum; i++) {
PrizeNumber prizeNumber = new PrizeNumber();
@@ -354,13 +431,9 @@
}
//娣诲姞鎶藉娆℃暟骞惰繑鍥�
prizeNumberService.saveBatch(prizeNumberList);
- return Result.ok().data(prizeNumberList.size());
+ return Result.ok().data(prizeNumberList.size()+size);
}
- } finally {
- if (lock.isHeldByCurrentThread()) {
- lock.unlock();
- }
- }
+
Integer maxPrize = activity.getMaxPrize();
//鍏朵粬鎯呭喌
int useNum = 0;
@@ -376,7 +449,25 @@
if (useNum >= maxPrize) {
return Result.ok().data(0);
} else {
- return Result.ok().data(userPrizeNum>maxPrize?maxPrize-useNum:notUseNum);
+ return Result.ok().data(userPrizeNum > maxPrize ? maxPrize - useNum : notUseNum);
+ }
+ } finally {
+ TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
+ @Override
+ public void afterCommit() {
+ if (lock.isHeldByCurrentThread()) {
+ lock.unlock();
+ }
+ }
+
+ @Override
+ public void afterCompletion(int status) {
+ if (lock.isHeldByCurrentThread()) {
+ lock.unlock();
+ }
+ }
+ });
+
}
}
@@ -408,6 +499,382 @@
@Override
public Result prizeInfo(String prizeActivityId) {
- return null;
+ if (StringUtils.isBlank(prizeActivityId)) {
+ return Result.ok().data(0);
+ }
+ PrizeDetailVO data = prizeActivityService.prizeInfo(prizeActivityId);
+ String activityCover = data.getActivityCover();
+ if (StringUtils.isNotBlank(activityCover) && !activityCover.contains("http")) {
+ data.setActivityCover(cosUtil.getPreviewUrl(activityCover));
+ }
+ data.getPrizeInfoVOS().forEach(info -> {
+ String prizeImg = info.getPrizeImg();
+ String prizeCover = info.getPrizeCover();
+ if (StringUtils.isNotBlank(prizeImg) && !prizeImg.contains("http")) {
+ info.setPrizeImg(cosUtil.getPreviewUrl(prizeImg));
+ }
+ if (StringUtils.isNotBlank(prizeCover) && !prizeCover.contains("http")) {
+ info.setPrizeCover(cosUtil.getPreviewUrl(prizeCover));
+ }
+ });
+ return Result.ok().data(data);
+ }
+
+ @Override
+ public Result grantRecord(String prizeActivityId) {
+ return prizeDrawService.grantRecord(prizeActivityId);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Result addPrizeNum(AddPrizeNumForm addPrizeNumForm) {
+ //鎸囧畾娲诲姩缁欐寚瀹氭椿鍔ㄦ坊鍔犳病鎸囧畾娲诲姩缁欓粯璁ゆ椿鍔ㄦ坊鍔�
+ String prizeActivityId = addPrizeNumForm.getPrizeActivityId();
+ if (StringUtils.isBlank(prizeActivityId)) {
+ LambdaQueryWrapper<PrizeActivity> pop = Wrappers.<PrizeActivity>lambdaQuery()
+ .eq(PrizeActivity::getEnableStatus, PrizeActivityStatusEnum.ON.name())
+ .eq(PrizeActivity::getPopup, true);
+ PrizeActivity one = prizeActivityService.getOne(pop);
+ if (one == null) {
+ return Result.ok().data(0);
+ }
+ addPrizeNumForm.setPrizeActivityId(one.getId());
+ }
+
+ AuthUser currentUser = UserContext.getCurrentUser();
+ if (currentUser == null) {
+ return Result.ok().data(0);
+ }
+ //鎸囧畾鐢ㄦ埛缁欐寚瀹氱敤鎴锋坊鍔犳病鎸囧畾娲诲姩缁欏綋鍓嶇櫥褰曠敤鎴锋坊鍔�
+ if (StringUtils.isBlank(addPrizeNumForm.getUserId())) {
+ addPrizeNumForm.setUserId(currentUser.getId());
+
+ }
+ String extend = addPrizeNumForm.getExtend();
+ JSONObject jsonObject = JSONObject.parseObject(extend);
+ String shareId =null;
+ if (jsonObject != null) {
+ shareId = jsonObject.getString("shareId");
+ }
+ Date date = new Date();
+ ShareAction shareAction =null;
+ //鍒嗕韩杩涙潵鐨勯渶瑕佹坊鍔犲垎浜殑鐢ㄦ埛
+ if (StringUtils.isNotBlank(shareId)) {
+ shareAction = shareActionService.getById(shareId);
+ String userId = shareAction.getUserId();
+ addPrizeNumForm.setUserId(userId);
+ Date createTime = shareAction.getCreateTime();
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(createTime); // 灏咲ate璁剧疆鍒癈alendar涓�
+ calendar.add(Calendar.DAY_OF_MONTH, 1); // 鍔犱竴澶�
+ Date nextDay = calendar.getTime();
+ //鍒ゆ柇鏄惁鏄柊鐢ㄦ埛
+ if (nextDay.before(date)) {
+ //褰撳墠鍒嗕韩涓嶆槸浠婂ぉ鐨勫垎浜�
+ log.info("褰撳墠鍒嗕韩涓嶆槸浠婂ぉ鐨勫垎浜珄}",shareId);
+ return Result.ok().data(0);
+ }
+ // 闄や簡瑙嗛澶栭渶瑕佹牎楠岀敤鎴锋槸鍚﹁嚜宸辩偣鍑讳簡鑷繁鐨勫垎浜�
+ PrizeUserActionEnum actionEnum = PrizeUserActionEnum.select(addPrizeNumForm.getAddType());
+ if (actionEnum == null) {
+ log.info("褰撳墠绫诲瀷涓嶅瓨鍦�");
+ return Result.ok().data(0);
+ }
+ if (!PrizeUserActionEnum.SHARE_GOODS_VIDEO.name().equals(actionEnum.name())) {
+ if (currentUser.getId().equals(userId)) {
+ //鍒嗕韩鐨勭敤鎴疯嚜宸辩偣鍑讳簡
+ log.info("鐢ㄦ埛鑷繁鐐瑰嚮浜嗚嚜宸辩殑鍒嗕韩");
+ return Result.ok().data(0);
+ }
+ }
+
+ }
+
+ String userId = addPrizeNumForm.getUserId();
+ RLock lock = redissonClient.getLock(PRIZE_ADD_NUM + userId);
+ try {
+
+ lock.lock();
+ PrizeActivity activity = prizeActivityService.getById(addPrizeNumForm.getPrizeActivityId());
+ if (activity == null) {
+ throw new ServiceException("褰撳墠娲诲姩涓嶅瓨鍦�");
+ }
+ if (!PrizeActivityStatusEnum.ON.name().equals(activity.getEnableStatus())) {
+ throw new ServiceException("褰撳墠娲诲姩娌″紑鍚�");
+ }
+ //娲诲姩缁撴潫涓嶉渶瑕佹坊鍔�
+ if (date.after(activity.getEndTime())) {
+ throw new ServiceException("褰撳墠娲诲姩宸茬粨鏉�");
+ }
+ Integer maxPrize = activity.getMaxPrize();
+ List<PrizeNumber> prizeNumberList = getPrizeNumberList(activity.getId(), userId);
+ if (prizeNumberList.size() >= maxPrize) {
+ throw new ServiceException("鎶藉娆℃暟宸茶揪鍒颁笂闄愪簡");
+ }
+ PrizeUserActionEnum actionEnum = PrizeUserActionEnum.select(addPrizeNumForm.getAddType());
+ if (actionEnum == null) {
+ throw new ServiceException("褰撳墠绫诲瀷涓嶅瓨鍦�");
+ }
+ AddPrizeRule addPrizeRule = getAddPrizeRule(actionEnum.name());
+ if (addPrizeRule == null) {
+ return Result.ok().data(0);
+ }
+ List<PrizeNumber> needAdd = new ArrayList<>();
+ Integer addNum = addPrizeRule.getAddNum();
+ if (addNum == null) {
+ return Result.ok().data(0);
+ }
+ //鍒よ娣诲姞鍚庢槸鍚﹀ぇ浜庢渶澶ф鏁�
+ if (prizeNumberList.size() + addNum >= maxPrize) {
+ addNum = maxPrize - prizeNumberList.size();
+ }
+ boolean addFlag = false;
+ //鍒ゆ柇璇ョ被鍨嬪綋澶╂槸鍚︽坊鍔犺繃浜�
+ for (PrizeNumber prizeNumber : prizeNumberList) {
+ if (actionEnum.name().equals(prizeNumber.getUserAction())) {
+ addFlag = true;
+ break;
+ }
+ }
+ LambdaQueryWrapper<AddNumCheek> query = Wrappers.lambdaQuery();
+ AddNumCheek addNumCheek = null;
+ String orderSn = null;
+ Order order = null;
+ String ruleValue = null;
+ switch (actionEnum) {
+ case SHARE_GOODS_VIDEO:
+ if (shareAction == null) {
+ log.info("褰撳墠鐢ㄦ埛娌℃湁鍒嗕韩{}",userId);
+ return Result.ok().data(0);
+ }
+ if (addFlag) {
+ log.info("褰撳墠鐢ㄦ埛褰撳ぉ宸茬粡娣诲姞杩囦簡鍒嗕韩娣诲姞娆℃暟浜�-------->{}", userId);
+ return Result.ok().data(0);
+ }
+ break;
+ case SHARE_USER_REGISTRY:
+ if (shareAction == null) {
+ log.info("褰撳墠鐢ㄦ埛娌℃湁鍒嗕韩{}",userId);
+ return Result.ok().data(0);
+ }
+ Member member = memberService.getById(shareAction.getUserId());
+ Date createTime = member.getCreateTime();
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(createTime); // 灏咲ate璁剧疆鍒癈alendar涓�
+ calendar.add(Calendar.DAY_OF_MONTH, 1); // 鍔犱竴澶�
+ Date nextDay = calendar.getTime();
+ //鍒ゆ柇鏄惁鏄柊鐢ㄦ埛
+ if (nextDay.before(date)) {
+ //褰撳墠鐢ㄦ埛涓嶆槸鏂扮敤鎴�
+ log.info("褰撳墠鐢ㄦ埛涓嶆槸鏂扮敤鎴穥}",currentUser.getId());
+ return Result.ok().data(0);
+ }
+ query.eq(AddNumCheek::getType, PrizeUserActionEnum.SHARE_USER_REGISTRY.name())
+ .eq(AddNumCheek::getCheckNo, currentUser.getId());
+ if (addNumCheekService.getOne(query) != null) {
+ log.info("褰撳墠鐢ㄦ埛宸茬粡琚個璇疯繃浜�----------------->{}", currentUser.getId());
+ return Result.ok().data(0);
+ }
+ addNumCheek = new AddNumCheek();
+ addNumCheek.setType(PrizeUserActionEnum.SHARE_USER_REGISTRY.name());
+ addNumCheek.setUserId(userId);
+ addNumCheek.setCheckNo(currentUser.getId());
+ addNumCheekService.save(addNumCheek);
+ break;
+ case SHARE_USER_SHOPPING:
+ orderSn = jsonObject.getString("orderSn");
+ //鏍¢獙璁㈠崟鏄惁瀛樺湪
+ order = orderService.getBySn(orderSn);
+ if (order == null) {
+ log.info("鍒嗕韩鐢ㄦ埛璐墿璁㈠崟涓嶅瓨鍦▄}", orderSn);
+ return Result.ok().data(0);
+ }
+ query.eq(AddNumCheek::getType, PrizeUserActionEnum.SHARE_USER_SHOPPING.name())
+ .eq(AddNumCheek::getCheckNo, orderSn);
+ if (addNumCheekService.getOne(query) != null) {
+ log.info("褰撳墠閭�璇疯鍗曞凡缁忚棰嗗彇杩囦簡----------------->{}", orderSn);
+ return Result.ok().data(0);
+ }
+ addNumCheek = new AddNumCheek();
+ addNumCheek.setType(PrizeUserActionEnum.SHARE_USER_SHOPPING.name());
+ addNumCheek.setUserId(userId);
+ addNumCheek.setCheckNo(orderSn);
+ addNumCheekService.save(addNumCheek);
+ break;
+ case USER_STAY_TIME:
+ if (addFlag) {
+ log.info("褰撳墠鐢ㄦ埛褰撳ぉ宸茬粡娣诲姞杩囦簡鍋滅暀鏃堕棿娣诲姞娆℃暟浜�-------->{}", userId);
+ return Result.ok().data(0);
+ }
+ ruleValue = addPrizeRule.getRuleValue();
+ LocalDate now = LocalDate.now();
+ LocalDateTime begin = LocalDateTime.of(now, LocalTime.MIN);
+ LocalDateTime end = LocalDateTime.of(now, LocalTime.MAX);
+ BigDecimal toDayStayTime = actionRecordService.getToDayStayTime(currentUser.getId(), begin, end);
+ BigDecimal divide = toDayStayTime.divide(new BigDecimal(60), 2, RoundingMode.HALF_UP);
+ if (divide.compareTo(new BigDecimal(ruleValue)) < 0) {
+ log.info("褰撳墠鐢ㄦ埛鍋滅暀鏃堕棿涓嶈冻鏃犳硶澧炲姞娆℃暟");
+ return Result.ok().data(0);
+ }
+ break;
+ case USER_BUY_SUM_PRICE:
+ orderSn = jsonObject.getString("orderSn");
+ //鏍¢獙璁㈠崟鏄惁瀛樺湪
+ order = orderService.getBySn(orderSn);
+ if (order == null) {
+ log.info("鐢ㄦ埛璐墿璁㈠崟涓嶅瓨鍦▄}", orderSn);
+ return Result.ok().data(0);
+ }
+ ruleValue = addPrizeRule.getRuleValue();
+ double price = Double.parseDouble(ruleValue);
+ Double flowPrice = order.getFlowPrice();
+ if (flowPrice < price) {
+ log.info("褰撳墠璐墿璁㈠崟閲戦灏忎簬娣诲姞瑕佹眰----------------->{}", orderSn);
+ return Result.ok().data(0);
+ }
+ query.eq(AddNumCheek::getType, PrizeUserActionEnum.USER_BUY_SUM_PRICE.name())
+ .eq(AddNumCheek::getCheckNo, orderSn);
+ if (addNumCheekService.getOne(query) != null) {
+ log.info("褰撳墠璐墿璁㈠崟宸茬粡琚鍙栬繃浜�----------------->{}", orderSn);
+ return Result.ok().data(0);
+ }
+ addNumCheek = new AddNumCheek();
+ addNumCheek.setType(PrizeUserActionEnum.USER_BUY_SUM_PRICE.name());
+ addNumCheek.setUserId(userId);
+ addNumCheek.setCheckNo(orderSn);
+ addNumCheekService.save(addNumCheek);
+ break;
+ case USER_BUY_ORDER_NUM:
+ orderSn = jsonObject.getString("orderSn");
+ //鏍¢獙璁㈠崟鏄惁瀛樺湪
+ order = orderService.getBySn(orderSn);
+ if (order == null) {
+ log.info("鐢ㄦ埛璐墿鏁伴噺璁㈠崟涓嶅瓨鍦▄}", orderSn);
+ return Result.ok().data(0);
+ }
+ query.eq(AddNumCheek::getType, PrizeUserActionEnum.USER_BUY_ORDER_NUM.name())
+ .eq(AddNumCheek::getCheckNo, orderSn);
+ if (addNumCheekService.getOne(query) != null) {
+ log.info("褰撳墠璐墿璁㈠崟鏁伴噺宸茬粡琚鍙栬繃浜�----------------->{}", orderSn);
+ return Result.ok().data(0);
+ }
+ addNumCheek = new AddNumCheek();
+ addNumCheek.setType(PrizeUserActionEnum.USER_BUY_ORDER_NUM.name());
+ addNumCheek.setUserId(userId);
+ addNumCheek.setCheckNo(orderSn);
+ addNumCheekService.save(addNumCheek);
+ break;
+ case USER_SCAN_STORE:
+ break;
+ case USER_PUBLISH_EXAMINE:
+ String videoId = jsonObject.getString("videoId");
+ query.eq(AddNumCheek::getType, PrizeUserActionEnum.USER_PUBLISH_EXAMINE.name())
+ .eq(AddNumCheek::getCheckNo, videoId);
+ if (addNumCheekService.getOne(query) != null) {
+ log.info("褰撳墠瑙嗛瀹℃牳宸茬粡鍙戞斁杩囦簡----------------->{}", videoId);
+ return Result.ok().data(0);
+ }
+ Video video = videoService.getById(videoId);
+ if (video == null) {
+ log.info("褰撳墠瑙嗛涓嶅瓨鍦▄}",videoId);
+ return Result.ok().data(0);
+ }
+ String status = video.getStatus();
+ if (!"1".equals(status)) {
+ log.info("褰撳墠瑙嗛娌℃湁瀹℃牳閫氳繃{}",videoId);
+ return Result.ok().data(0);
+ }
+ LambdaQueryWrapper<VideoAuditRecord> eq = Wrappers.<VideoAuditRecord>lambdaQuery()
+ .eq(VideoAuditRecord::getVideoId, videoId)
+ .eq(VideoAuditRecord::getAuditSuccess, true);
+ List<VideoAuditRecord> list = videoAuditRecordService.list(eq);
+ if (list.isEmpty()) {
+ log.info("褰撳墠瑙嗛娌℃湁瀹℃牳閫氳繃{}",videoId);
+ return Result.ok().data(0);
+ }
+ addNumCheek = new AddNumCheek();
+ addNumCheek.setType(PrizeUserActionEnum.USER_PUBLISH_EXAMINE.name());
+ addNumCheek.setUserId(userId);
+ addNumCheek.setCheckNo(videoId);
+ addNumCheekService.save(addNumCheek);
+ break;
+ default:
+ return Result.ok().data(0);
+ }
+ //璁剧疆榛樿鎶藉娆℃暟骞惰繑鍥為粯璁ゆ娊濂栨鏁�
+ for (int i = 0; i < addNum; i++) {
+ PrizeNumber prizeNumber = new PrizeNumber();
+ prizeNumber.setActivityPrizeId(Long.parseLong(addPrizeNumForm.getPrizeActivityId()));
+ prizeNumber.setUserId(Long.parseLong(userId));
+ prizeNumber.setUserAction(actionEnum.name());
+ prizeNumber.setUseStatus(PrizeNumberUseEnum.WAIT.name());
+ needAdd.add(prizeNumber);
+ }
+ prizeNumberService.saveBatch(needAdd);
+ return Result.ok().data(0);
+ } finally {
+ TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
+ @Override
+ public void afterCommit() {
+ if (lock.isHeldByCurrentThread()) {
+ lock.unlock();
+ }
+ }
+
+ @Override
+ public void afterCompletion(int status) {
+ if (lock.isHeldByCurrentThread()) {
+ lock.unlock();
+ }
+ }
+ });
+ }
+ }
+
+ public AddPrizeRule getAddPrizeRule(String ruleCode) {
+ LambdaQueryWrapper<AddPrizeRule> one = Wrappers.<AddPrizeRule>lambdaQuery().eq(AddPrizeRule::getRuleCode, ruleCode);
+ return addPrizeRuleService.getOne(one);
+ }
+
+ @Override
+ public Result getPrizeRule() {
+ List<AddPrizeRule> list = addPrizeRuleService.list(Wrappers.<AddPrizeRule>lambdaQuery().orderByDesc(AddPrizeRule::getId));
+ AuthUser currentUser = UserContext.getCurrentUser();
+ if (Objects.nonNull(currentUser)) {
+ String id = currentUser.getId();
+ LambdaQueryWrapper<PrizeActivity> eq = Wrappers.<PrizeActivity>lambdaQuery()
+ .eq(PrizeActivity::getDeleteFlag, Boolean.FALSE)
+ .eq(PrizeActivity::getEnableStatus, PrizeActivityStatusEnum.ON.name())
+ .eq(PrizeActivity::getPopup, Boolean.TRUE);
+ List<PrizeActivity> activities = prizeActivityService.list(eq);
+ PrizeActivity activity = activities.get(0);
+ if (Objects.nonNull(activity)) {
+ try {
+ List<PrizeNumber> prizeNumberList = getPrizeNumberList(activity.getId(), id);
+ Set<String> completedActionSet = prizeNumberList.stream().map(PrizeNumber::getUserAction).collect(Collectors.toSet());
+ List<AddPrizeRule> finalRuleList = list.stream()
+ .map(rule -> {
+ if (Objects.isNull(rule.getRuleCode())) {
+ return rule;
+ }
+ boolean isCompleted = completedActionSet.contains(rule.getRuleCode());
+ if (!isCompleted) {
+ return rule;
+ }
+ AddPrizeRule completedRule = new AddPrizeRule();
+ BeanUtils.copyProperties(rule, completedRule);
+ String originalName = Optional.ofNullable(completedRule.getRuleName()).orElse("");
+ if (!originalName.contains("(宸插畬鎴�)")) {
+ completedRule.setRuleName(originalName + "(宸插畬鎴�)");
+ }
+ return completedRule;
+ }).collect(Collectors.toList());
+ return Result.ok().data(finalRuleList);
+ } catch (Exception e) {
+ return Result.ok().data(list);
+ }
+ }
+ }
+ return Result.ok().data(list);
}
}
--
Gitblit v1.8.0