task 修复
This commit is contained in:
parent
8230d69120
commit
9622cac009
@ -74,4 +74,14 @@ public class TaskApprovalEvent implements Serializable {
|
||||
*/
|
||||
private Long gameId;
|
||||
|
||||
/**
|
||||
* 目标值
|
||||
*/
|
||||
private Integer targetValue;
|
||||
|
||||
/**
|
||||
* 完成数量
|
||||
*/
|
||||
private Integer completeValue;
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
@ -37,6 +37,16 @@ public class UserTaskProgress {
|
||||
* 任务状态(0:进行中 1:已完成)
|
||||
*/
|
||||
private Integer taskStatus;
|
||||
|
||||
/**
|
||||
* 目标值
|
||||
*/
|
||||
private Integer targetValue;
|
||||
|
||||
/**
|
||||
* 完成数量
|
||||
*/
|
||||
private Integer completeValue;
|
||||
|
||||
/**
|
||||
* 奖励是否已领取(0:未领取 1:已领取)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user