peng
昨天 ba6b781b146b2e941489149fb23594067cb2fa43
添加抽奖次数调整
6个文件已修改
161 ■■■■■ 已修改文件
framework/src/main/java/cn/lili/modules/lmk/mapper/ActionRecordMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/ActionRecordService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/impl/ActionRecordServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java 109 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/resources/mapper/lmk/ActionRecordMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager-api/src/main/java/cn/lili/controller/lmk/PrizeActivityController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
}
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);
}
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);
    }
}
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); // 将Date设置到Calendar中
            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); // 将Date设置到Calendar中
                    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);
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>
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);
    }
}