任务列表接口修复

This commit is contained in:
tianfeng 2025-10-22 19:36:58 +08:00
parent d3b93b9702
commit da7b0a4d48
4 changed files with 146 additions and 104 deletions

View File

@ -246,66 +246,142 @@ public class TaskServiceImpl implements TaskService {
@Override
public List<TaskDTO> getTaskListV2(AppExtCommand cmd) {
List<TaskDTO> resultList = new ArrayList<>();
//获取当前天 yyyy-mm-dd 格式
String date = DateUtil.format(new Date(), "yyyy-MM-dd");
Long userId = cmd.getReqUserId();
// 查询任务配置信息
//获取所有任务
List<TaskConfig> taskConfigs = taskConfigDao.selectList(
new LambdaQueryWrapper<TaskConfig>()
.orderByAsc(TaskConfig::getSortOrder));
Map<Long, TaskConfig> taskMapByIds = taskConfigs.stream().collect(Collectors.toMap(TaskConfig::getTaskId, taskConfig -> taskConfig));
List<TaskDTO> resultList = new ArrayList<>();
String date = DateUtil.format(new Date(), "yyyy-MM-dd");
Long userId = cmd.getReqUserId();
//判断是否初始化成长任务
List<UserTaskProgress> userTaskList = createTasksIfNotExists(userId, taskConfigs);
List<UserTaskProgress> allTask = new ArrayList<>(userTaskList);
// 1. 查询所有任务配置
List<TaskConfig> taskConfigs = taskConfigDao.selectList(
new LambdaQueryWrapper<TaskConfig>()
.orderByAsc(TaskConfig::getSortOrder));
// 每天有用户请求的时候创建对应的任务数据
List<UserTaskProgress> dailyUserTaskList = createDailyTasksIfNotExists(userId, taskConfigs, date);
if (CollectionUtils.isEmpty(dailyUserTaskList)) {
//新增list为空就是 已经创建过了 直接拼接
LambdaQueryWrapper<UserTaskProgress> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(UserTaskProgress::getUserId, userId);
queryWrapper.eq(UserTaskProgress::getDayString, date);
dailyUserTaskList = userTaskProgressDao.selectList(queryWrapper);
}
allTask.addAll(dailyUserTaskList);
Set<Long> rewardIds = taskConfigs.stream().map(TaskConfig::getRewardId).collect(Collectors.toSet());
//获取对应详情
Map<Long, ActivityPropsGroup> 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<UserTaskProgress> existingProgressList = userTaskProgressDao.selectList(
new LambdaQueryWrapper<UserTaskProgress>()
.eq(UserTaskProgress::getUserId, userId)
.and(wrapper -> wrapper
.eq(UserTaskProgress::getTaskType, 2) // 成长任务
.or()
.eq(UserTaskProgress::getDayString, date) // 今日每日任务
));
// 3. 构建已有进度的Mapkey为 taskId_dayString(每日任务) taskId(成长任务)
Map<String, UserTaskProgress> 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<UserTaskProgress> 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<Long> rewardIds = taskConfigs.stream()
.map(TaskConfig::getRewardId)
.collect(Collectors.toSet());
Map<Long, ActivityPropsGroup> 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> 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<UserTaskProgress> createTasksIfNotExists(Long userId, List<TaskConfig> 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);
});

View File

@ -34,6 +34,6 @@ public class LotteryRankQryCmd extends AppExtCommand {
/**
* 查询数量默认100.
*/
private Integer limit = 100;
private Integer limit = 500;
}

View File

@ -24,6 +24,11 @@ public class TaskDTO {
*/
private String conditionValue;
/**
* 任务数量
*/
private Integer targetValue;
/**
* 完成值
*/

View File

@ -45,6 +45,11 @@ public class TaskConfig {
* 奖励数量预留
*/
private Integer rewardAmount;
/**
* 目标数量
*/
private Integer targetValue;
/**
* 条件类型(:MIC_DURATION)预留