From da7b0a4d48d15537edfacac08cb0ab57fe2b2253 Mon Sep 17 00:00:00 2001 From: tianfeng <769204422@qq.com> Date: Wed, 22 Oct 2025 19:36:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=88=97=E8=A1=A8=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/task/TaskServiceImpl.java | 238 ++++++++++-------- .../dto/cmd/activity/LotteryRankQryCmd.java | 2 +- .../circle/other/app/dto/task/TaskDTO.java | 5 + .../database/rds/entity/task/TaskConfig.java | 5 + 4 files changed, 146 insertions(+), 104 deletions(-) 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 f3165550..2767cc69 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 @@ -246,66 +246,142 @@ public class TaskServiceImpl implements TaskService { @Override public List getTaskListV2(AppExtCommand cmd) { - List resultList = new ArrayList<>(); - //获取当前天 yyyy-mm-dd 格式 - String date = DateUtil.format(new Date(), "yyyy-MM-dd"); - Long userId = cmd.getReqUserId(); - // 查询任务配置信息 - //获取所有任务 - List taskConfigs = taskConfigDao.selectList( - new LambdaQueryWrapper() - .orderByAsc(TaskConfig::getSortOrder)); - Map taskMapByIds = taskConfigs.stream().collect(Collectors.toMap(TaskConfig::getTaskId, taskConfig -> taskConfig)); + List resultList = new ArrayList<>(); + String date = DateUtil.format(new Date(), "yyyy-MM-dd"); + Long userId = cmd.getReqUserId(); - //判断是否初始化成长任务 - List userTaskList = createTasksIfNotExists(userId, taskConfigs); - List allTask = new ArrayList<>(userTaskList); + // 1. 查询所有任务配置 + List taskConfigs = taskConfigDao.selectList( + new LambdaQueryWrapper() + .orderByAsc(TaskConfig::getSortOrder)); - // 每天有用户请求的时候创建对应的任务数据 - List dailyUserTaskList = createDailyTasksIfNotExists(userId, taskConfigs, date); - if (CollectionUtils.isEmpty(dailyUserTaskList)) { - //新增list为空就是 已经创建过了 直接拼接 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(UserTaskProgress::getUserId, userId); - queryWrapper.eq(UserTaskProgress::getDayString, date); - dailyUserTaskList = userTaskProgressDao.selectList(queryWrapper); - } - allTask.addAll(dailyUserTaskList); - Set rewardIds = taskConfigs.stream().map(TaskConfig::getRewardId).collect(Collectors.toSet()); - //获取对应详情 - Map activityMap = propsActivityCnfClient.mapActivityPropsGroup(cmd.getReqSysOrigin().getOrigin(), rewardIds).getBody(); - allTask.forEach(item -> { - - ActivityPropsGroup activity = activityMap.get(item.getRewardId()); - - if (activity != null && !activity.getActivityRewardProps().isEmpty()) { - TaskDTO build = TaskDTO.builder() - .taskType(item.getTaskType()) - .taskId(item.getTaskId()) - .taskDesc(taskMapByIds.get(item.getTaskId()).getTaskDesc()) - .jumpPage(taskMapByIds.get(item.getTaskId()).getJumpPage()) - .taskStatus(item.getTaskStatus()) - .isRewardCollected(item.getIsRewardCollected()) - .taskIcon(taskMapByIds.get(item.getTaskId()).getTaskIcon()) - .taskStatus(item.getTaskStatus()) - .conditionType(getConditionType(activity.getActivityRewardProps())) - .conditionValue(getConditionValue(activity.getActivityRewardProps())) - .quantity(activity.getActivityRewardProps().get(0).getQuantity()) - .build(); - - if (item.getTaskId() == 1) { - String redisKey = "mic:heartbeat:" + userId; - String inc = redisService.getString(redisKey); - build.setCompletedValue(inc); - } else { - build.setCompletedValue(item.getTaskStatus().toString()); - } - - resultList.add(build); - } - }); - //拼接任务 + if (CollectionUtils.isEmpty(taskConfigs)) { return resultList; + } + + // 2. 查询用户已有的任务进度 + List existingProgressList = userTaskProgressDao.selectList( + new LambdaQueryWrapper() + .eq(UserTaskProgress::getUserId, userId) + .and(wrapper -> wrapper + .eq(UserTaskProgress::getTaskType, 2) // 成长任务 + .or() + .eq(UserTaskProgress::getDayString, date) // 今日每日任务 + )); + + // 3. 构建已有进度的Map,key为 taskId_dayString(每日任务) 或 taskId(成长任务) + Map existingProgressMap = new HashMap<>(); + for (UserTaskProgress progress : existingProgressList) { + String key = progress.getTaskType() == 1 + ? progress.getTaskId() + "_" + progress.getDayString() + : String.valueOf(progress.getTaskId()); + existingProgressMap.put(key, progress); + } + + // 4. 检查并创建缺失的任务进度 + List newProgressList = new ArrayList<>(); + for (TaskConfig taskConfig : taskConfigs) { + String key; + UserTaskProgress progress; + + if (taskConfig.getTaskType() == 1) { + // 每日任务:需要判断当天是否有记录 + key = taskConfig.getTaskId() + "_" + date; + progress = existingProgressMap.get(key); + + if (progress == null) { + // 创建今日的每日任务进度 + progress = new UserTaskProgress(); + progress.setId(IdWorkerUtils.getId()); + progress.setUserId(userId); + progress.setTaskId(taskConfig.getTaskId()); + progress.setIsRewardCollected(0); + progress.setRewardId(taskConfig.getRewardId()); + progress.setTaskType(taskConfig.getTaskType()); + progress.setTaskStatus(0); + progress.setDayString(date); + progress.setCreateTimestamp(TimestampUtils.now()); + + newProgressList.add(progress); + existingProgressMap.put(key, progress); + } + } else if (taskConfig.getTaskType() == 2) { + // 成长任务:只需判断是否有记录 + key = String.valueOf(taskConfig.getTaskId()); + progress = existingProgressMap.get(key); + + if (progress == null) { + // 创建成长任务进度 + progress = new UserTaskProgress(); + progress.setId(IdWorkerUtils.getId()); + progress.setUserId(userId); + progress.setTaskId(taskConfig.getTaskId()); + progress.setIsRewardCollected(0); + progress.setRewardId(taskConfig.getRewardId()); + progress.setTaskType(taskConfig.getTaskType()); + progress.setTaskStatus(0); + progress.setCreateTimestamp(TimestampUtils.now()); + + newProgressList.add(progress); + existingProgressMap.put(key, progress); + } + } + } + + // 5. 批量插入新创建的任务进度 + if (!newProgressList.isEmpty()) { + userTaskProgressDao.insertBatchSomeColumn(newProgressList); + } + + // 6. 查询奖励详情 + Set rewardIds = taskConfigs.stream() + .map(TaskConfig::getRewardId) + .collect(Collectors.toSet()); + Map activityMap = propsActivityCnfClient + .mapActivityPropsGroup(cmd.getReqSysOrigin().getOrigin(), rewardIds) + .getBody(); + + // 7. 组装返回结果 + for (TaskConfig taskConfig : taskConfigs) { + String key = taskConfig.getTaskType() == 1 + ? taskConfig.getTaskId() + "_" + date + : String.valueOf(taskConfig.getTaskId()); + + UserTaskProgress progress = existingProgressMap.get(key); + if (progress == null) { + continue; // 理论上不会发生 + } + + ActivityPropsGroup activity = activityMap.get(progress.getRewardId()); + if (activity != null && !activity.getActivityRewardProps().isEmpty()) { + TaskDTO build = TaskDTO.builder() + .taskType(progress.getTaskType()) + .taskId(progress.getTaskId()) + .taskDesc(taskConfig.getTaskDesc()) + .jumpPage(taskConfig.getJumpPage()) + .taskStatus(progress.getTaskStatus()) + .isRewardCollected(progress.getIsRewardCollected()) + .taskIcon(taskConfig.getTaskIcon()) + .conditionType(getConditionType(activity.getActivityRewardProps())) + .conditionValue(getConditionValue(activity.getActivityRewardProps())) + .targetValue(taskConfig.getTargetValue()) + .quantity(activity.getActivityRewardProps().get(0).getQuantity()) + .build(); + + // 特殊处理任务ID为1的情况 + if (progress.getTaskId() == 1) { + String redisKey = "mic:heartbeat:" + userId; + String inc = redisService.getString(redisKey); + build.setCompletedValue(inc == null ? "0" : inc); + } else { + build.setCompletedValue(progress.getTaskStatus().toString()); + } + + resultList.add(build); + } + } + + return resultList; } private String getConditionType(List activityRewardProps) { @@ -361,22 +437,10 @@ public class TaskServiceImpl implements TaskService { userTaskProgressList.add(userTaskProgress); } userTaskProgressDao.insertBatchSomeColumn(userTaskProgressList); + } else { + return userTaskList; } return userTaskProgressList; - /* for (TaskConfig taskConfig : dailyTasks) { - UserTaskProgress userTaskProgress = userTaskProgressDao.selectByUserIdAndTaskId(userId, taskConfig.getTaskId()); - if (userTaskProgress == null) { - userTaskProgress = new UserTaskProgress(); - userTaskProgress.setUserId(userId); - userTaskProgress.setTaskId(taskConfig.getTaskId()); - userTaskProgress.setRewardId(taskConfig.getRewardId()); - userTaskProgress.setTaskType(taskConfig.getTaskType()); - userTaskProgress.setTaskStatus(0); - userTaskProgress.setIsRewardCollected(0); - userTaskProgressDao.insert(userTaskProgress); - } - }*/ - } private List createTasksIfNotExists(Long userId, List taskConfigs) { @@ -400,38 +464,6 @@ public class TaskServiceImpl implements TaskService { userTaskProgress.setTaskType(taskConfig.getTaskType()); userTaskProgress.setTaskStatus(0); userTaskProgress.setCreateTimestamp(TimestampUtils.now()); - - UserConsumptionLevel userLevel = userProfileGateway.getUserConsumptionLevel( - SysOriginPlatformEnum.valueOf("LIKEI"), - userId); - //taskid =6 加入家族 7 组成cp 13 财富等级10 14 魅力等级10 初始化时就要判断是否完成 - switch (taskConfig.getTaskId().intValue()) { - case 6: - FamilyMemberInfo familyMemberInfo = familyMemberInfoService.getFamilyMemberByUserId(userId); - if (!Objects.isNull(familyMemberInfo)) { - userTaskProgress.setTaskStatus(1); - } - break; - case 7: - CpRelationship cp = cpRelationshipService.getByUserId(userId); - if (!Objects.isNull(cp)) { - userTaskProgress.setTaskStatus(1); - } - break; - case 13: - if (userLevel.getWealthLevel() >= 10) { - userTaskProgress.setTaskStatus(1); - } - //财富等级逻辑 - break; - case 14: - //魅力等级逻辑 - if (userLevel.getCharmLevel() >= 10) { - userTaskProgress.setTaskStatus(1); - } - break; - default: - } userTaskProgressList.add(userTaskProgress); }); diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/cmd/activity/LotteryRankQryCmd.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/cmd/activity/LotteryRankQryCmd.java index 9a227047..dad71719 100644 --- a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/cmd/activity/LotteryRankQryCmd.java +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/cmd/activity/LotteryRankQryCmd.java @@ -34,6 +34,6 @@ public class LotteryRankQryCmd extends AppExtCommand { /** * 查询数量(默认100). */ - private Integer limit = 100; + private Integer limit = 500; } diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/task/TaskDTO.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/task/TaskDTO.java index 6e8a5568..f9d29c46 100644 --- a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/task/TaskDTO.java +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/task/TaskDTO.java @@ -24,6 +24,11 @@ public class TaskDTO { */ private String conditionValue; + /** + * 任务数量 + */ + private Integer targetValue; + /** * 完成值 */ diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/entity/task/TaskConfig.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/entity/task/TaskConfig.java index 3c6f2a0d..68ac7158 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/entity/task/TaskConfig.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/entity/task/TaskConfig.java @@ -45,6 +45,11 @@ public class TaskConfig { * 奖励数量(预留) */ private Integer rewardAmount; + + /** + * 目标数量 + */ + private Integer targetValue; /** * 条件类型(如:MIC_DURATION)(预留)