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 Integer targetValue;
/**
* 完成数量
*/
private Integer completeValue;
}

View File

@ -138,15 +138,12 @@ public class TaskListener implements MessageListener {
redisService.increment(redisKey, 1, expireSeconds, TimeUnit.SECONDS);
} else {
int result = Integer.parseInt(inc) + 1;
//大于10次发一个消息
if (result >= 10) {
// 更新任务状态的逻辑 直接更新
boolean updated = updateTaskStatus(eventBody);
if (updated) {
redisService.increment(redisKey, 1);
}
eventBody.setTargetValue(10);
eventBody.setCompleteValue(result);
boolean updated = updateTaskStatus(eventBody);
if (updated) {
redisService.increment(redisKey, 1);
}
redisService.increment(redisKey, 1);
}
// 处理 Spins 上麦任务进度
@ -220,10 +217,12 @@ public class TaskListener implements MessageListener {
private void handleTask6(TaskApprovalEvent eventBody) {
log.warn("处理任务-6 添加10个好友: {}", eventBody);
// 更新任务状态的逻辑
if (relationshipFriendService.selectMyFriendsCount(eventBody.getUserId()) >= 10) {
updateTaskStatus(eventBody);
}
Long friendsCount = relationshipFriendService.selectMyFriendsCount(eventBody.getUserId());
eventBody.setTargetValue(10);
eventBody.setCompleteValue(friendsCount.intValue());
updateTaskStatus(eventBody);
}
@ -241,7 +240,20 @@ public class TaskListener implements MessageListener {
// 日常任务 更新任务状态的方法示例
private boolean updateTaskStatus(TaskApprovalEvent event) {
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;
}
log.warn("任务已完成 {}", event);
@ -265,15 +277,11 @@ public class TaskListener implements MessageListener {
redisService.increment(redisKey, num);
} else {
int result = Integer.parseInt(countStr) + num;
// 大于等于10次完成任务
if (result >= 10) {
// 更新任务状态的逻辑 直接更新
boolean updated = updateTaskStatus(eventBody);
if (updated) {
redisService.increment(redisKey, num);
}
} else {
redisService.increment(redisKey, num);
eventBody.setTargetValue(10);
eventBody.setCompleteValue(result);
boolean updated = updateTaskStatus(eventBody);
if (updated) {
redisService.increment(redisKey, 1);
}
}
}
@ -343,15 +351,11 @@ public class TaskListener implements MessageListener {
redisService.increment(redisKey, 1);
} else {
int result = Integer.parseInt(inc) + 1;
//大于3次完成
if (result >= 3) {
// 更新任务状态的逻辑 直接更新
boolean updated = updateTaskStatus(eventBody);
if (updated) {
redisService.increment(redisKey, 1);
}
} else {
redisService.increment(redisKey, 1);
eventBody.setTargetValue(3);
eventBody.setCompleteValue(result);
boolean updated = updateTaskStatus(eventBody);
if (updated) {
redisService.increment(redisKey, 1);
}
}
}

View File

@ -159,11 +159,13 @@ public class TaskServiceImpl implements TaskService {
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(status);
progress.setCreateTimestamp(TimestampUtils.now());
@ -189,6 +191,71 @@ public class TaskServiceImpl implements TaskService {
* @param date 日期可选每日任务需要传入成长任务传null
* @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
public Boolean checkTaskStatus(Long userId, Long taskId, String date) {
LambdaQueryWrapper<UserTaskProgress> query = new LambdaQueryWrapper<>();
@ -432,9 +499,13 @@ public class TaskServiceImpl implements TaskService {
if (progress.getTaskId() == 1) {
String redisKey = "mic:heartbeat:" + userId;
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 {
taskDTO.setCompletedValue(progress.getTaskStatus().toString());
taskDTO.setCompletedValue(progress.getCompleteValue() == null ? "0" : progress.getCompleteValue().toString());
}
return taskDTO;

View File

@ -33,6 +33,17 @@ public interface TaskService {
*/
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

View File

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