From ba6b781b146b2e941489149fb23594067cb2fa43 Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期二, 30 九月 2025 13:35:03 +0800
Subject: [PATCH] 添加抽奖次数调整
---
manager-api/src/main/java/cn/lili/controller/lmk/PrizeActivityController.java | 15 +++++
framework/src/main/java/cn/lili/modules/lmk/service/ActionRecordService.java | 5 +
framework/src/main/java/cn/lili/modules/lmk/mapper/ActionRecordMapper.java | 5 +
framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java | 109 ++++++++++++++++++++++++++++++++----
framework/src/main/resources/mapper/lmk/ActionRecordMapper.xml | 21 +++++++
framework/src/main/java/cn/lili/modules/lmk/service/impl/ActionRecordServiceImpl.java | 6 ++
6 files changed, 148 insertions(+), 13 deletions(-)
diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/ActionRecordMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/ActionRecordMapper.java
index c73915c..90b15b1 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/mapper/ActionRecordMapper.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/ActionRecordMapper.java
@@ -6,6 +6,9 @@
import cn.lili.modules.lmk.domain.vo.ActionRecordVO;
import cn.lili.modules.lmk.domain.form.ActionRecordForm;
import cn.lili.modules.lmk.domain.query.ActionRecordQuery;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -31,4 +34,6 @@
*/
IPage getPage(IPage page, @Param("query") ActionRecordQuery query);
+ BigDecimal getToDayStayTime(@Param("userId") String userId,@Param("begin") LocalDateTime begin ,@Param("end") LocalDateTime end);
+
}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/ActionRecordService.java b/framework/src/main/java/cn/lili/modules/lmk/service/ActionRecordService.java
index 671ffb5..5012630 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/ActionRecordService.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/ActionRecordService.java
@@ -5,6 +5,9 @@
import cn.lili.base.Result;
import cn.lili.modules.lmk.domain.form.ActionRecordForm;
import cn.lili.modules.lmk.domain.query.ActionRecordQuery;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
import java.util.List;
/**
@@ -64,4 +67,6 @@
Result all();
Result grantSessionId();
+
+ BigDecimal getToDayStayTime(String userId , LocalDateTime begin , LocalDateTime end);
}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/ActionRecordServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ActionRecordServiceImpl.java
index e5c2a71..36ea39d 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/ActionRecordServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ActionRecordServiceImpl.java
@@ -19,6 +19,7 @@
import org.springframework.beans.BeanUtils;
import org.springframework.util.Assert;
+import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
@@ -140,4 +141,9 @@
}
return Result.ok().data(IdWorker.getIdStr());
}
+
+ @Override
+ public BigDecimal getToDayStayTime(String userId, LocalDateTime begin , LocalDateTime end) {
+ return baseMapper.getToDayStayTime(userId,begin,end);
+ }
}
\ No newline at end of file
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 b550cc6..5a03622 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
@@ -16,6 +16,8 @@
import cn.lili.modules.lmk.domain.vo.PrizeResultVO;
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;
@@ -74,6 +76,9 @@
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)
@@ -548,6 +553,37 @@
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);
+ }
+ 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 {
@@ -560,7 +596,6 @@
if (!PrizeActivityStatusEnum.ON.name().equals(activity.getEnableStatus())) {
throw new ServiceException("褰撳墠娲诲姩娌″紑鍚�");
}
- Date date = new Date();
//娲诲姩缁撴潫涓嶉渶瑕佹坊鍔�
if (date.after(activity.getEndTime())) {
throw new ServiceException("褰撳墠娲诲姩宸茬粨鏉�");
@@ -595,8 +630,6 @@
break;
}
}
- String extend = addPrizeNumForm.getExtend();
- JSONObject jsonObject = JSONObject.parseObject(extend);
LambdaQueryWrapper<AddNumCheek> query = Wrappers.lambdaQuery();
AddNumCheek addNumCheek = null;
String orderSn = null;
@@ -604,9 +637,8 @@
String ruleValue = null;
switch (actionEnum) {
case SHARE_GOODS_VIDEO:
- String shareId = jsonObject.getString("shareId");
- ShareAction shareAction = shareActionService.getById(shareId);
if (shareAction == null) {
+ log.info("褰撳墠鐢ㄦ埛娌℃湁鍒嗕韩{}",userId);
return Result.ok().data(0);
}
if (addFlag) {
@@ -615,17 +647,32 @@
}
break;
case SHARE_USER_REGISTRY:
- String memberId = jsonObject.getString("memberId");
+ 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, memberId);
+ .eq(AddNumCheek::getCheckNo, currentUser.getId());
if (addNumCheekService.getOne(query) != null) {
- log.info("褰撳墠鐢ㄦ埛宸茬粡琚個璇疯繃浜�----------------->{}", memberId);
+ log.info("褰撳墠鐢ㄦ埛宸茬粡琚個璇疯繃浜�----------------->{}", currentUser.getId());
return Result.ok().data(0);
}
addNumCheek = new AddNumCheek();
addNumCheek.setType(PrizeUserActionEnum.SHARE_USER_REGISTRY.name());
addNumCheek.setUserId(userId);
- addNumCheek.setCheckNo(memberId);
+ addNumCheek.setCheckNo(currentUser.getId());
addNumCheekService.save(addNumCheek);
break;
case SHARE_USER_SHOPPING:
@@ -649,11 +696,18 @@
addNumCheekService.save(addNumCheek);
break;
case USER_STAY_TIME:
- //todo 閫氳繃鐢ㄦ埛琛屼负鍒嗘瀽鑾峰彇鏁版嵁杩涜鍒ゆ柇
- ruleValue = addPrizeRule.getRuleValue();
-
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;
@@ -707,7 +761,36 @@
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);
diff --git a/framework/src/main/resources/mapper/lmk/ActionRecordMapper.xml b/framework/src/main/resources/mapper/lmk/ActionRecordMapper.xml
index 19b542e..12fd549 100644
--- a/framework/src/main/resources/mapper/lmk/ActionRecordMapper.xml
+++ b/framework/src/main/resources/mapper/lmk/ActionRecordMapper.xml
@@ -65,4 +65,25 @@
LAR.delete_flag = 0
</select>
+ <select id="getToDayStayTime" resultType="decimal">
+ SELECT SUM(t.stay_seconds)
+ FROM (SELECT user_id,
+ page_code,
+ session_id,
+ MIN(CASE WHEN page_status = 'JOIN' THEN start_time END) AS enter_time,
+ MIN(CASE WHEN page_status = 'LEAVE' THEN start_time END) AS leave_time,
+ TIMESTAMPDIFF(SECOND, MIN(CASE WHEN page_status = 'JOIN' THEN start_time END),
+ MIN(CASE WHEN page_status = 'LEAVE' THEN start_time END)
+ ) AS stay_seconds
+ FROM lmk_action_record
+ WHERE action_type = 'PAGE'
+ AND page_status IN ('JOIN', 'LEAVE')
+ AND user_id = #{userId}
+ AND create_time BETWEEN #{begin} AND #{end}
+ GROUP BY user_id, page_code, session_id
+ HAVING enter_time IS NOT NULL
+ AND leave_time IS NOT NULL
+ ORDER BY user_id, session_id, enter_time) t
+ </select>
+
</mapper>
diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/PrizeActivityController.java b/manager-api/src/main/java/cn/lili/controller/lmk/PrizeActivityController.java
index 4448ec2..d65c86d 100644
--- a/manager-api/src/main/java/cn/lili/controller/lmk/PrizeActivityController.java
+++ b/manager-api/src/main/java/cn/lili/controller/lmk/PrizeActivityController.java
@@ -5,10 +5,12 @@
import cn.lili.cache.Cache;
import cn.lili.common.security.context.UserContext;
import cn.lili.modules.lmk.domain.form.ActivityRefPrizeForm;
+import cn.lili.modules.lmk.domain.form.AddPrizeNumForm;
import cn.lili.modules.lmk.domain.form.PrizeActivityForm;
import cn.lili.modules.lmk.domain.query.PrizeActivityQuery;
import cn.lili.modules.lmk.service.ActivityRefPrizeService;
import cn.lili.modules.lmk.service.PrizeActivityService;
+import cn.lili.modules.lmk.service.PrizeService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
@@ -35,6 +37,8 @@
private final PrizeActivityService prizeActivityService;
private final ActivityRefPrizeService activityRefPrizeService;
+
+ private final PrizeService prizeService;
@@ -78,4 +82,15 @@
public Result publishPrizeActivity(@PathVariable("id") String id){
return prizeActivityService.publishPrizeActivity(id);
}
+
+ /**
+ * 澧炲姞鎶藉娆℃暟
+ *
+ * @param addPrizeNumForm
+ * @return
+ */
+ @PostMapping("/addPrizeNum")
+ public Result addPrizeNum( @RequestBody AddPrizeNumForm addPrizeNumForm) {
+ return prizeService.addPrizeNum(addPrizeNumForm);
+ }
}
--
Gitblit v1.8.0