From 9622cac009d51be1a9179718da1be3ace18a1022 Mon Sep 17 00:00:00 2001 From: tianfeng <769204422@qq.com> Date: Thu, 23 Oct 2025 18:08:05 +0800 Subject: [PATCH] =?UTF-8?q?task=20=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/event/task/TaskApprovalEvent.java | 10 +++ .../other/app/listener/task/TaskListener.java | 66 ++++++++-------- .../app/service/task/TaskServiceImpl.java | 75 ++++++++++++++++++- .../other/app/service/task/TaskService.java | 11 +++ .../rds/entity/task/UserTaskProgress.java | 10 +++ 5 files changed, 139 insertions(+), 33 deletions(-) diff --git a/rc-common-business/common-business-mq/business-mq-model/src/main/java/com/red/circle/mq/business/model/event/task/TaskApprovalEvent.java b/rc-common-business/common-business-mq/business-mq-model/src/main/java/com/red/circle/mq/business/model/event/task/TaskApprovalEvent.java index b8a91d26..7914d12c 100644 --- a/rc-common-business/common-business-mq/business-mq-model/src/main/java/com/red/circle/mq/business/model/event/task/TaskApprovalEvent.java +++ b/rc-common-business/common-business-mq/business-mq-model/src/main/java/com/red/circle/mq/business/model/event/task/TaskApprovalEvent.java @@ -74,4 +74,14 @@ public class TaskApprovalEvent implements Serializable { */ private Long gameId; + /** + * 目标值 + */ + private Integer targetValue; + + /** + * 完成数量 + */ + private Integer completeValue; + } diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/task/TaskListener.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/task/TaskListener.java index 4229da5a..f077cda7 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/task/TaskListener.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/task/TaskListener.java @@ -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); } } } diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/service/task/TaskServiceImpl.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/service/task/TaskServiceImpl.java index 2a0a101b..cf13340f 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/service/task/TaskServiceImpl.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/service/task/TaskServiceImpl.java @@ -159,11 +159,13 @@ public class TaskServiceImpl implements TaskService { List 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 updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(UserTaskProgress::getUserId, userId) + .eq(UserTaskProgress::getTaskId, taskId); + + // 如果传入了日期,说明是每日任务,需要加上日期条件 + if (date != null && !date.isEmpty()) { + updateWrapper.eq(UserTaskProgress::getDayString, date); + } + + List 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 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; diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/service/task/TaskService.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/service/task/TaskService.java index 38e0bf5f..cd4f7235 100644 --- a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/service/task/TaskService.java +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/service/task/TaskService.java @@ -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 diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/entity/task/UserTaskProgress.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/entity/task/UserTaskProgress.java index 7e06041f..55faafbe 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/entity/task/UserTaskProgress.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/entity/task/UserTaskProgress.java @@ -37,6 +37,16 @@ public class UserTaskProgress { * 任务状态(0:进行中 1:已完成) */ private Integer taskStatus; + + /** + * 目标值 + */ + private Integer targetValue; + + /** + * 完成数量 + */ + private Integer completeValue; /** * 奖励是否已领取(0:未领取 1:已领取)