task 修复

This commit is contained in:
tianfeng 2025-10-23 18:08:05 +08:00
parent 8230d69120
commit 9622cac009
5 changed files with 139 additions and 33 deletions

View File

@ -74,4 +74,14 @@ public class TaskApprovalEvent implements Serializable {
*/ */
private Long gameId; private Long gameId;
/**
* 目标值
*/
private Integer targetValue;
/**
* 完成数量
*/
private Integer completeValue;
} }

View File

@ -138,15 +138,12 @@ public class TaskListener implements MessageListener {
redisService.increment(redisKey, 1, expireSeconds, TimeUnit.SECONDS); redisService.increment(redisKey, 1, expireSeconds, TimeUnit.SECONDS);
} else { } else {
int result = Integer.parseInt(inc) + 1; int result = Integer.parseInt(inc) + 1;
//大于10次发一个消息 eventBody.setTargetValue(10);
if (result >= 10) { eventBody.setCompleteValue(result);
// 更新任务状态的逻辑 直接更新 boolean updated = updateTaskStatus(eventBody);
boolean updated = updateTaskStatus(eventBody); if (updated) {
if (updated) { redisService.increment(redisKey, 1);
redisService.increment(redisKey, 1);
}
} }
redisService.increment(redisKey, 1);
} }
// 处理 Spins 上麦任务进度 // 处理 Spins 上麦任务进度
@ -220,10 +217,12 @@ public class TaskListener implements MessageListener {
private void handleTask6(TaskApprovalEvent eventBody) { private void handleTask6(TaskApprovalEvent eventBody) {
log.warn("处理任务-6 添加10个好友: {}", eventBody); log.warn("处理任务-6 添加10个好友: {}", eventBody);
// 更新任务状态的逻辑 Long friendsCount = relationshipFriendService.selectMyFriendsCount(eventBody.getUserId());
if (relationshipFriendService.selectMyFriendsCount(eventBody.getUserId()) >= 10) {
updateTaskStatus(eventBody); eventBody.setTargetValue(10);
} eventBody.setCompleteValue(friendsCount.intValue());
updateTaskStatus(eventBody);
} }
@ -241,7 +240,20 @@ public class TaskListener implements MessageListener {
// 日常任务 更新任务状态的方法示例 // 日常任务 更新任务状态的方法示例
private boolean updateTaskStatus(TaskApprovalEvent event) { private boolean updateTaskStatus(TaskApprovalEvent event) {
if (taskService.checkTaskStatus(event.getUserId(), Long.valueOf(event.getTaskId()), event.getDay())) { if (taskService.checkTaskStatus(event.getUserId(), Long.valueOf(event.getTaskId()), event.getDay())) {
taskService.updateTaskStatus(1, event.getUserId(), Long.valueOf(event.getTaskId()), event.getDay()); // 如果有目标值和完成值使用带进度的方法
if (event.getTargetValue() != null && event.getCompleteValue() != null) {
taskService.updateTaskStatus(
0, // status传 0具体状态由方法内部根据 targetValue completeValue 判断
event.getUserId(),
Long.valueOf(event.getTaskId()),
event.getDay(),
event.getTargetValue(),
event.getCompleteValue()
);
} else {
// 没有进度值直接设置为已完成
taskService.updateTaskStatus(1, event.getUserId(), Long.valueOf(event.getTaskId()), event.getDay());
}
return true; return true;
} }
log.warn("任务已完成 {}", event); log.warn("任务已完成 {}", event);
@ -265,15 +277,11 @@ public class TaskListener implements MessageListener {
redisService.increment(redisKey, num); redisService.increment(redisKey, num);
} else { } else {
int result = Integer.parseInt(countStr) + num; int result = Integer.parseInt(countStr) + num;
// 大于等于10次完成任务 eventBody.setTargetValue(10);
if (result >= 10) { eventBody.setCompleteValue(result);
// 更新任务状态的逻辑 直接更新 boolean updated = updateTaskStatus(eventBody);
boolean updated = updateTaskStatus(eventBody); if (updated) {
if (updated) { redisService.increment(redisKey, 1);
redisService.increment(redisKey, num);
}
} else {
redisService.increment(redisKey, num);
} }
} }
} }
@ -343,15 +351,11 @@ public class TaskListener implements MessageListener {
redisService.increment(redisKey, 1); redisService.increment(redisKey, 1);
} else { } else {
int result = Integer.parseInt(inc) + 1; int result = Integer.parseInt(inc) + 1;
//大于3次完成 eventBody.setTargetValue(3);
if (result >= 3) { eventBody.setCompleteValue(result);
// 更新任务状态的逻辑 直接更新 boolean updated = updateTaskStatus(eventBody);
boolean updated = updateTaskStatus(eventBody); if (updated) {
if (updated) { redisService.increment(redisKey, 1);
redisService.increment(redisKey, 1);
}
} else {
redisService.increment(redisKey, 1);
} }
} }
} }

View File

@ -159,11 +159,13 @@ public class TaskServiceImpl implements TaskService {
List<UserTaskProgress> userTaskProgresses = userTaskProgressDao.selectList(updateWrapper); List<UserTaskProgress> userTaskProgresses = userTaskProgressDao.selectList(updateWrapper);
if (CollectionUtils.isEmpty(userTaskProgresses)) { if (CollectionUtils.isEmpty(userTaskProgresses)) {
TaskConfig taskConfig = taskConfigDao.selectById(taskId);
UserTaskProgress progress = new UserTaskProgress(); UserTaskProgress progress = new UserTaskProgress();
progress.setId(IdWorkerUtils.getId()); progress.setId(IdWorkerUtils.getId());
progress.setUserId(userId); progress.setUserId(userId);
progress.setTaskId(taskId); progress.setTaskId(taskId);
progress.setRewardId(taskConfig.getRewardId());
progress.setIsRewardCollected(0); progress.setIsRewardCollected(0);
progress.setTaskStatus(status); progress.setTaskStatus(status);
progress.setCreateTimestamp(TimestampUtils.now()); progress.setCreateTimestamp(TimestampUtils.now());
@ -189,6 +191,71 @@ public class TaskServiceImpl implements TaskService {
* @param date 日期可选每日任务需要传入成长任务传null * @param date 日期可选每日任务需要传入成长任务传null
* @return true=未完成false=已完成 * @return true=未完成false=已完成
*/ */
/**
* 更新任务状态带进度值
*
* @param status 任务状态
* @param userId 用户ID
* @param taskId 任务ID
* @param date 日期可选每日任务需要传入成长任务传null
* @param targetValue 目标值
* @param completeValue 完成数量
*/
@Override
public void updateTaskStatus(Integer status, Long userId, Long taskId, String date, Integer targetValue, Integer completeValue) {
// 判断是否达到目标值如果达到则设置状态为已完成(1)否则设置为进行中(0)
Integer finalStatus = completeValue >= targetValue ? 1 : 0;
UserTaskProgress userTaskProgress = new UserTaskProgress();
userTaskProgress.setTaskStatus(finalStatus);
userTaskProgress.setTargetValue(targetValue);
userTaskProgress.setCompleteValue(completeValue);
if (finalStatus == 1) {
userTaskProgress.setCompletedTime(TimestampUtils.now());
}
LambdaUpdateWrapper<UserTaskProgress> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(UserTaskProgress::getUserId, userId)
.eq(UserTaskProgress::getTaskId, taskId);
// 如果传入了日期说明是每日任务需要加上日期条件
if (date != null && !date.isEmpty()) {
updateWrapper.eq(UserTaskProgress::getDayString, date);
}
List<UserTaskProgress> userTaskProgresses = userTaskProgressDao.selectList(updateWrapper);
if (CollectionUtils.isEmpty(userTaskProgresses)) {
TaskConfig taskConfig = taskConfigDao.selectById(taskId);
UserTaskProgress progress = new UserTaskProgress();
progress.setId(IdWorkerUtils.getId());
progress.setUserId(userId);
progress.setTaskId(taskId);
progress.setRewardId(taskConfig.getRewardId());
progress.setIsRewardCollected(0);
progress.setTaskStatus(finalStatus);
progress.setTargetValue(targetValue);
progress.setCompleteValue(completeValue);
progress.setCreateTimestamp(TimestampUtils.now());
if (finalStatus == 1) {
progress.setCompletedTime(TimestampUtils.now());
}
if (StringUtils.isNotBlank(date)) {
progress.setDayString(date);
progress.setTaskType(1);
} else {
progress.setTaskType(2);
}
userTaskProgressDao.insert(progress);
} else {
userTaskProgressDao.update(userTaskProgress, updateWrapper);
}
}
@Override @Override
public Boolean checkTaskStatus(Long userId, Long taskId, String date) { public Boolean checkTaskStatus(Long userId, Long taskId, String date) {
LambdaQueryWrapper<UserTaskProgress> query = new LambdaQueryWrapper<>(); LambdaQueryWrapper<UserTaskProgress> query = new LambdaQueryWrapper<>();
@ -432,9 +499,13 @@ public class TaskServiceImpl implements TaskService {
if (progress.getTaskId() == 1) { if (progress.getTaskId() == 1) {
String redisKey = "mic:heartbeat:" + userId; String redisKey = "mic:heartbeat:" + userId;
String inc = redisService.getString(redisKey); String inc = redisService.getString(redisKey);
taskDTO.setCompletedValue(inc == null ? "0" : String.valueOf(Math.min(Integer.parseInt(inc), 10))); int micValue = Math.min(Integer.parseInt(inc == null ? "0": inc), 10);
taskDTO.setCompletedValue(String.valueOf(micValue));
if (micValue == 10) {
taskDTO.setTaskStatus(1);
}
} else { } else {
taskDTO.setCompletedValue(progress.getTaskStatus().toString()); taskDTO.setCompletedValue(progress.getCompleteValue() == null ? "0" : progress.getCompleteValue().toString());
} }
return taskDTO; return taskDTO;

View File

@ -33,6 +33,17 @@ public interface TaskService {
*/ */
void updateTaskStatus(Integer status, Long userId, Long taskId, String date); void updateTaskStatus(Integer status, Long userId, Long taskId, String date);
/**
* 更新任务状态带进度值
* @param status 任务状态
* @param userId 用户ID
* @param taskId 任务ID
* @param date 日期可选每日任务需要传入
* @param targetValue 目标值
* @param completeValue 完成数量
*/
void updateTaskStatus(Integer status, Long userId, Long taskId, String date, Integer targetValue, Integer completeValue);
/** /**
* 检查任务状态 * 检查任务状态
* @param userId 用户ID * @param userId 用户ID

View File

@ -38,6 +38,16 @@ public class UserTaskProgress {
*/ */
private Integer taskStatus; private Integer taskStatus;
/**
* 目标值
*/
private Integer targetValue;
/**
* 完成数量
*/
private Integer completeValue;
/** /**
* 奖励是否已领取0:未领取 1:已领取 * 奖励是否已领取0:未领取 1:已领取
*/ */