|
@@ -77,8 +77,6 @@ public class AppUserRewardServiceImpl implements IAppUserRewardService {
|
|
|
//执行奖品领取逻辑
|
|
//执行奖品领取逻辑
|
|
|
RewardStrategy strategy = strategyFactory.getStrategy(reward.getActivityType(), reward.getRewardType());
|
|
RewardStrategy strategy = strategyFactory.getStrategy(reward.getActivityType(), reward.getRewardType());
|
|
|
RewardResult result = strategy.process(reward);
|
|
RewardResult result = strategy.process(reward);
|
|
|
- //RewardResult result = new RewardResult();
|
|
|
|
|
- //result.setSuccess(true);
|
|
|
|
|
if (result.isSuccess()) {
|
|
if (result.isSuccess()) {
|
|
|
// 更新奖品状态
|
|
// 更新奖品状态
|
|
|
rewardsMapper.updateStatus(rewardsId, 1, result.getOrderCode(), DateUtils.getNowDate());
|
|
rewardsMapper.updateStatus(rewardsId, 1, result.getOrderCode(), DateUtils.getNowDate());
|
|
@@ -335,39 +333,93 @@ public class AppUserRewardServiceImpl implements IAppUserRewardService {
|
|
|
if (defaultConfig == null) {
|
|
if (defaultConfig == null) {
|
|
|
return noShowWindow;
|
|
return noShowWindow;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
String activityType = ActivityTypeEnum.WATCH_COURSE.getCode();
|
|
String activityType = ActivityTypeEnum.WATCH_COURSE.getCode();
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 有效期检查
|
|
|
|
|
+ if (isRewardPeriodExpired(fsUser, defaultConfig)) {
|
|
|
|
|
+ return noShowWindow;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 累计天数超标检查
|
|
|
|
|
+ if (isExceedMaxDays(fsUser, defaultConfig)) {
|
|
|
|
|
+ return noShowWindow;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 获取今日已领数据
|
|
|
List<FsUserRewards> todayRewards = rewardsMapper.selectTodayListDataByUserIdAndActivityType(fsUserId, activityType);
|
|
List<FsUserRewards> todayRewards = rewardsMapper.selectTodayListDataByUserIdAndActivityType(fsUserId, activityType);
|
|
|
- // 实物商品逻辑
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 实物商品逻辑
|
|
|
if (defaultConfig.getCourseRewardType() == 3) {
|
|
if (defaultConfig.getCourseRewardType() == 3) {
|
|
|
- Long courseNeedDay = defaultConfig.getCourseNeedDay();// 看课商品领取所需天数
|
|
|
|
|
- Integer courseDay = fsUser.getAppRewardsViewedDays();// 客户实际累计看课天数
|
|
|
|
|
|
|
+ Long courseNeedDay = defaultConfig.getCourseNeedDay();// 商品领取所需天数
|
|
|
|
|
+ Integer courseDay = fsUser.getAppRewardsViewedDays();// 用户累计看课天数
|
|
|
|
|
|
|
|
- // 不满足累计天数 → 不展示
|
|
|
|
|
if (courseNeedDay == null || courseNeedDay <= 0 || courseDay < courseNeedDay) {
|
|
if (courseNeedDay == null || courseNeedDay <= 0 || courseDay < courseNeedDay) {
|
|
|
return noShowWindow;
|
|
return noShowWindow;
|
|
|
}
|
|
}
|
|
|
- // 今天已领过 → 不展示
|
|
|
|
|
if (CollectionUtils.isNotEmpty(todayRewards)) {
|
|
if (CollectionUtils.isNotEmpty(todayRewards)) {
|
|
|
return noShowWindow;
|
|
return noShowWindow;
|
|
|
}
|
|
}
|
|
|
- // 满足条件 → 展示
|
|
|
|
|
return defaultConfig;
|
|
return defaultConfig;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 积分/红包逻辑
|
|
|
|
|
- // 今日没有完课 → 不展示
|
|
|
|
|
|
|
+ // 5. 积分/红包逻辑
|
|
|
Object cacheObject = redisCache.getCacheObject(watchCourseKey);
|
|
Object cacheObject = redisCache.getCacheObject(watchCourseKey);
|
|
|
if (cacheObject == null) {
|
|
if (cacheObject == null) {
|
|
|
return noShowWindow;
|
|
return noShowWindow;
|
|
|
}
|
|
}
|
|
|
- // 今天已领过 → 不展示
|
|
|
|
|
if (CollectionUtils.isNotEmpty(todayRewards)) {
|
|
if (CollectionUtils.isNotEmpty(todayRewards)) {
|
|
|
return noShowWindow;
|
|
return noShowWindow;
|
|
|
}
|
|
}
|
|
|
- // 满足条件 → 展示
|
|
|
|
|
return defaultConfig;
|
|
return defaultConfig;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 检查奖励是否过期(首次登录时间+有效期)
|
|
|
|
|
+ */
|
|
|
|
|
+ private boolean isRewardPeriodExpired(FsUser fsUser, FsAppRole config) {
|
|
|
|
|
+ Date firstLoginTime = fsUser.getFirstLoginTime();// 首次登录时间
|
|
|
|
|
+ Long validDays = config.getCourseDay();// 有效期
|
|
|
|
|
+
|
|
|
|
|
+ if (firstLoginTime == null || validDays == null || validDays <= 0) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 计算过期日期
|
|
|
|
|
+ Calendar expireCal = Calendar.getInstance();
|
|
|
|
|
+ expireCal.setTime(firstLoginTime);
|
|
|
|
|
+ expireCal.add(Calendar.DAY_OF_MONTH, validDays.intValue());
|
|
|
|
|
+
|
|
|
|
|
+ // 只比较年月日
|
|
|
|
|
+ Date expireDate = DateUtils.truncate(expireCal.getTime(), Calendar.DAY_OF_MONTH);
|
|
|
|
|
+ Date today = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);
|
|
|
|
|
+
|
|
|
|
|
+ boolean expired = today.after(expireDate);
|
|
|
|
|
+ if (expired) {
|
|
|
|
|
+ log.info("用户看课奖励已过期, userId: {}, expireDate: {}", fsUser.getUserId(), expireDate);
|
|
|
|
|
+ }
|
|
|
|
|
+ return expired;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 检查是否超过最大领取天数
|
|
|
|
|
+ */
|
|
|
|
|
+ private boolean isExceedMaxDays(FsUser fsUser, FsAppRole config) {
|
|
|
|
|
+ Integer viewedDays = fsUser.getAppRewardsViewedDays();// 用户累计看课天数
|
|
|
|
|
+ Long needDays = config.getCourseNeedDay();// 看课商品领取所需天数
|
|
|
|
|
+
|
|
|
|
|
+ if (viewedDays == null || needDays == null) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ boolean exceeded = viewedDays > needDays;
|
|
|
|
|
+ if (exceeded) {
|
|
|
|
|
+ log.info("用户累计看课天数已超过领取所需天数, userId: {}, viewedDays: {}, needDays: {}",
|
|
|
|
|
+ fsUser.getUserId(), viewedDays, needDays);
|
|
|
|
|
+ }
|
|
|
|
|
+ return exceeded;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public void recordUserWatchCourseDays(Long fsUserId) {
|
|
public void recordUserWatchCourseDays(Long fsUserId) {
|
|
|
String watchCourseKey = APP_WATCH_COURSE_DAY_KEY + fsUserId;
|
|
String watchCourseKey = APP_WATCH_COURSE_DAY_KEY + fsUserId;
|
|
@@ -408,7 +460,7 @@ public class AppUserRewardServiceImpl implements IAppUserRewardService {
|
|
|
|
|
|
|
|
//根据用户id、角色id获取配置的奖品信息(实物商品包含商品名称和图片)
|
|
//根据用户id、角色id获取配置的奖品信息(实物商品包含商品名称和图片)
|
|
|
private FsAppRole getAppRoleConfig(Long fsUserId){
|
|
private FsAppRole getAppRoleConfig(Long fsUserId){
|
|
|
- //获取当前用户最高权重角色, "false"表示查询等级数字最小的权重角色
|
|
|
|
|
|
|
+ //获取当前用户最高权重角色, "false"表示查询等级数字最大的权重角色
|
|
|
FsAppRole fsAppRole = appRoleMapper.selectHighestLevelAppRoleByUserId(fsUserId,"false");
|
|
FsAppRole fsAppRole = appRoleMapper.selectHighestLevelAppRoleByUserId(fsUserId,"false");
|
|
|
if (fsAppRole==null){
|
|
if (fsAppRole==null){
|
|
|
log.info("未找到用户:{}对应的角色配置", fsUserId);
|
|
log.info("未找到用户:{}对应的角色配置", fsUserId);
|
|
@@ -486,8 +538,7 @@ public class AppUserRewardServiceImpl implements IAppUserRewardService {
|
|
|
// 2. 获取用户的角色配置,以确定有效期
|
|
// 2. 获取用户的角色配置,以确定有效期
|
|
|
FsAppRole fsAppRole = appRoleMapper.selectHighestLevelAppRoleByUserId(reward.getFsUserId(), "false");
|
|
FsAppRole fsAppRole = appRoleMapper.selectHighestLevelAppRoleByUserId(reward.getFsUserId(), "false");
|
|
|
if (fsAppRole == null) {
|
|
if (fsAppRole == null) {
|
|
|
- // 如果找不到角色配置,可以视为永不过期,返回一个很大的数,或者返回null
|
|
|
|
|
- // 这里假设没有配置就不过期
|
|
|
|
|
|
|
+ // 如果找不到角色配置,可以视为永不过期,返回null
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
|
|
|