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