|
@@ -16,6 +16,7 @@ import com.ylx.point.domain.PointActivity;
|
|
|
import com.ylx.point.domain.PointActivityTask;
|
|
import com.ylx.point.domain.PointActivityTask;
|
|
|
import com.ylx.point.domain.PointUserActivityTaskCompletion;
|
|
import com.ylx.point.domain.PointUserActivityTaskCompletion;
|
|
|
import com.ylx.point.domain.vo.PointActivityOverviewVO;
|
|
import com.ylx.point.domain.vo.PointActivityOverviewVO;
|
|
|
|
|
+import com.ylx.point.enums.ActivityNameEnum;
|
|
|
import com.ylx.point.enums.PointActivityStatusEnum;
|
|
import com.ylx.point.enums.PointActivityStatusEnum;
|
|
|
import com.ylx.point.enums.PointActivityTaskTypeEnum;
|
|
import com.ylx.point.enums.PointActivityTaskTypeEnum;
|
|
|
import com.ylx.point.enums.PointActivityTypeEnum;
|
|
import com.ylx.point.enums.PointActivityTypeEnum;
|
|
@@ -132,6 +133,8 @@ public class PointUserActivityTaskCompletionServiceImpl extends ServiceImpl<Poin
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void executeTask(Long taskId) {
|
|
public void executeTask(Long taskId) {
|
|
|
|
|
|
|
|
|
|
+ String activityName = null;
|
|
|
|
|
+
|
|
|
// 1. 获取当前登录用户
|
|
// 1. 获取当前登录用户
|
|
|
WxLoginUser loginUser = getCurrentWxLoginUser();
|
|
WxLoginUser loginUser = getCurrentWxLoginUser();
|
|
|
String openId = loginUser.getCOpenid();
|
|
String openId = loginUser.getCOpenid();
|
|
@@ -164,13 +167,44 @@ public class PointUserActivityTaskCompletionServiceImpl extends ServiceImpl<Poin
|
|
|
// --- 逻辑分支开始 ---
|
|
// --- 逻辑分支开始 ---
|
|
|
|
|
|
|
|
// 场景 A: 每日任务/签到 -> 只需要检查今天是否做过
|
|
// 场景 A: 每日任务/签到 -> 只需要检查今天是否做过
|
|
|
- if (pointActivityType == PointActivityTypeEnum.SIGN_TASK || pointActivityType == PointActivityTypeEnum.DAILY_ACTIVITY) {
|
|
|
|
|
|
|
+ if (pointActivityType == PointActivityTypeEnum.SIGN_TASK) {
|
|
|
|
|
+ activityName = ActivityNameEnum.USER_SIGN_IN.getInfo();
|
|
|
boolean completed = this.isTodayCompleted(openId, activityId, taskId, taskType.getCode());
|
|
boolean completed = this.isTodayCompleted(openId, activityId, taskId, taskType.getCode());
|
|
|
if (completed) {
|
|
if (completed) {
|
|
|
throw new ServiceException("今日任务已完成,请勿重复领取");
|
|
throw new ServiceException("今日任务已完成,请勿重复领取");
|
|
|
}
|
|
}
|
|
|
// 每日任务通常点一下就算完成,或者根据具体业务逻辑判断
|
|
// 每日任务通常点一下就算完成,或者根据具体业务逻辑判断
|
|
|
isVerified = true;
|
|
isVerified = true;
|
|
|
|
|
+ } else if (pointActivityType == PointActivityTypeEnum.DAILY_ACTIVITY) {
|
|
|
|
|
+ // 1. 检查今日是否已完成 (保留核心业务校验)
|
|
|
|
|
+ boolean completed = this.isTodayCompleted(openId, activityId, taskId, taskType.getCode());
|
|
|
|
|
+ if (completed) {
|
|
|
|
|
+ throw new ServiceException("今日任务已完成,请勿重复领取");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 仅根据任务类型获取名称 (移除所有业务计数逻辑)
|
|
|
|
|
+ switch (taskType) {
|
|
|
|
|
+ case COMPLETE_ORDER:
|
|
|
|
|
+ activityName = ActivityNameEnum.COMPLETE_ORDER.getInfo();
|
|
|
|
|
+ break;
|
|
|
|
|
+ case RECHARGE_TASK:
|
|
|
|
|
+ activityName = ActivityNameEnum.RECHARGE_TASK.getInfo();
|
|
|
|
|
+ break;
|
|
|
|
|
+ case SHARE_SERVICE:
|
|
|
|
|
+ activityName = ActivityNameEnum.SHARE_ACCOUNT.getInfo();
|
|
|
|
|
+ break;
|
|
|
|
|
+ case BROWLE_NEWS:
|
|
|
|
|
+ activityName = ActivityNameEnum.BROWSE_DYNAMIC.getInfo();
|
|
|
|
|
+ break;
|
|
|
|
|
+ case BROWLE_MERCHANT:
|
|
|
|
|
+ activityName = ActivityNameEnum.BROWSE_MERCHANT.getInfo();
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ throw new ServiceException("不支持的任务类型: " + taskType);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 标记为已验证,允许后续流程继续(如果需要)
|
|
|
|
|
+ isVerified = true;
|
|
|
}
|
|
}
|
|
|
// 场景 B: 新手任务 或 每月任务 -> 需要核实业务数据(订单/充值)
|
|
// 场景 B: 新手任务 或 每月任务 -> 需要核实业务数据(订单/充值)
|
|
|
else if (pointActivityType == PointActivityTypeEnum.NEW_USER_ACTIVITY || pointActivityType == PointActivityTypeEnum.MONTHLY_ACTIVITY) {
|
|
else if (pointActivityType == PointActivityTypeEnum.NEW_USER_ACTIVITY || pointActivityType == PointActivityTypeEnum.MONTHLY_ACTIVITY) {
|
|
@@ -182,25 +216,29 @@ public class PointUserActivityTaskCompletionServiceImpl extends ServiceImpl<Poin
|
|
|
case COMPLETE_ORDER: // 完成订单
|
|
case COMPLETE_ORDER: // 完成订单
|
|
|
int orderCount = orderService.countCompletedOrders(openId, queryTime);
|
|
int orderCount = orderService.countCompletedOrders(openId, queryTime);
|
|
|
isVerified = orderCount >= targetCount;
|
|
isVerified = orderCount >= targetCount;
|
|
|
|
|
+ activityName = ActivityNameEnum.COMPLETE_ORDER.getInfo();
|
|
|
break;
|
|
break;
|
|
|
-
|
|
|
|
|
case RECHARGE_TASK: // 充值任务
|
|
case RECHARGE_TASK: // 充值任务
|
|
|
int rechargeCount = rechargeService.countSuccessRecharges(openId, queryTime);
|
|
int rechargeCount = rechargeService.countSuccessRecharges(openId, queryTime);
|
|
|
isVerified = rechargeCount >= targetCount;
|
|
isVerified = rechargeCount >= targetCount;
|
|
|
|
|
+ activityName = ActivityNameEnum.RECHARGE_TASK.getInfo();
|
|
|
break;
|
|
break;
|
|
|
-
|
|
|
|
|
case SHARE_SERVICE: // 分享服务号
|
|
case SHARE_SERVICE: // 分享服务号
|
|
|
|
|
+ activityName = ActivityNameEnum.SHARE_ACCOUNT.getInfo();
|
|
|
|
|
+ isVerified = true;
|
|
|
|
|
+ break;
|
|
|
case BROWLE_NEWS: // 浏览动态
|
|
case BROWLE_NEWS: // 浏览动态
|
|
|
|
|
+ activityName = ActivityNameEnum.BROWSE_DYNAMIC.getInfo();
|
|
|
|
|
+ isVerified = true;
|
|
|
|
|
+ break;
|
|
|
case BROWLE_MERCHANT:// 浏览商户
|
|
case BROWLE_MERCHANT:// 浏览商户
|
|
|
- // 这类任务通常前端跳转后,用户回来点击就算完成,或者这里直接设为 true
|
|
|
|
|
|
|
+ activityName = ActivityNameEnum.BROWSE_MERCHANT.getInfo();
|
|
|
isVerified = true;
|
|
isVerified = true;
|
|
|
break;
|
|
break;
|
|
|
-
|
|
|
|
|
default:
|
|
default:
|
|
|
throw new ServiceException("不支持的任务类型: " + taskType);
|
|
throw new ServiceException("不支持的任务类型: " + taskType);
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- else {
|
|
|
|
|
|
|
+ } else {
|
|
|
throw new ServiceException("不支持的活动类型");
|
|
throw new ServiceException("不支持的活动类型");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -226,12 +264,12 @@ public class PointUserActivityTaskCompletionServiceImpl extends ServiceImpl<Poin
|
|
|
// 注意:这里我使用了你之前的 completeTask 逻辑,而不是直接 set 目标值
|
|
// 注意:这里我使用了你之前的 completeTask 逻辑,而不是直接 set 目标值
|
|
|
// 因为如果是“累计充值1000元”,用户充了500+500,直接set成1会丢失进度
|
|
// 因为如果是“累计充值1000元”,用户充了500+500,直接set成1会丢失进度
|
|
|
// 但如果是“完成1笔订单”,直接调用 completeTask 即可
|
|
// 但如果是“完成1笔订单”,直接调用 completeTask 即可
|
|
|
- this.completeTask(openId, activityId, taskId, activityType);
|
|
|
|
|
|
|
+ this.completeTask(openId, activityId, taskId, taskType.getCode());
|
|
|
|
|
|
|
|
// 4.3 发放积分
|
|
// 4.3 发放积分
|
|
|
// 注意:这里需要确保只发一次。如果 completeTask 只是增加次数,这里需要判断是否刚好达标才发分
|
|
// 注意:这里需要确保只发一次。如果 completeTask 只是增加次数,这里需要判断是否刚好达标才发分
|
|
|
// 为了简单,假设这里调用 addPoints 是安全的(或者你在 addPoints 内部做幂等)
|
|
// 为了简单,假设这里调用 addPoints 是安全的(或者你在 addPoints 内部做幂等)
|
|
|
- pointAccountService.addPoints(openId, task.getRewardPoints().intValue(), activity.getName(), null, activityId, taskId, taskType.getCode());
|
|
|
|
|
|
|
+ pointAccountService.addPoints(openId, task.getRewardPoints().intValue(), activityName, null, activityId, taskId, taskType.getCode());
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|