任务列表接口修复
This commit is contained in:
parent
d3b93b9702
commit
da7b0a4d48
@ -246,66 +246,142 @@ public class TaskServiceImpl implements TaskService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<TaskDTO> getTaskListV2(AppExtCommand cmd) {
|
public List<TaskDTO> getTaskListV2(AppExtCommand cmd) {
|
||||||
List<TaskDTO> resultList = new ArrayList<>();
|
List<TaskDTO> resultList = new ArrayList<>();
|
||||||
//获取当前天 yyyy-mm-dd 格式
|
String date = DateUtil.format(new Date(), "yyyy-MM-dd");
|
||||||
String date = DateUtil.format(new Date(), "yyyy-MM-dd");
|
Long userId = cmd.getReqUserId();
|
||||||
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));
|
|
||||||
|
|
||||||
//判断是否初始化成长任务
|
// 1. 查询所有任务配置
|
||||||
List<UserTaskProgress> userTaskList = createTasksIfNotExists(userId, taskConfigs);
|
List<TaskConfig> taskConfigs = taskConfigDao.selectList(
|
||||||
List<UserTaskProgress> allTask = new ArrayList<>(userTaskList);
|
new LambdaQueryWrapper<TaskConfig>()
|
||||||
|
.orderByAsc(TaskConfig::getSortOrder));
|
||||||
|
|
||||||
// 每天有用户请求的时候创建对应的任务数据
|
if (CollectionUtils.isEmpty(taskConfigs)) {
|
||||||
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);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
//拼接任务
|
|
||||||
return resultList;
|
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. 构建已有进度的Map,key为 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) {
|
private String getConditionType(List<ActivityRewardProps> activityRewardProps) {
|
||||||
@ -361,22 +437,10 @@ public class TaskServiceImpl implements TaskService {
|
|||||||
userTaskProgressList.add(userTaskProgress);
|
userTaskProgressList.add(userTaskProgress);
|
||||||
}
|
}
|
||||||
userTaskProgressDao.insertBatchSomeColumn(userTaskProgressList);
|
userTaskProgressDao.insertBatchSomeColumn(userTaskProgressList);
|
||||||
|
} else {
|
||||||
|
return userTaskList;
|
||||||
}
|
}
|
||||||
return userTaskProgressList;
|
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) {
|
private List<UserTaskProgress> createTasksIfNotExists(Long userId, List<TaskConfig> taskConfigs) {
|
||||||
@ -400,38 +464,6 @@ public class TaskServiceImpl implements TaskService {
|
|||||||
userTaskProgress.setTaskType(taskConfig.getTaskType());
|
userTaskProgress.setTaskType(taskConfig.getTaskType());
|
||||||
userTaskProgress.setTaskStatus(0);
|
userTaskProgress.setTaskStatus(0);
|
||||||
userTaskProgress.setCreateTimestamp(TimestampUtils.now());
|
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);
|
userTaskProgressList.add(userTaskProgress);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -34,6 +34,6 @@ public class LotteryRankQryCmd extends AppExtCommand {
|
|||||||
/**
|
/**
|
||||||
* 查询数量(默认100).
|
* 查询数量(默认100).
|
||||||
*/
|
*/
|
||||||
private Integer limit = 100;
|
private Integer limit = 500;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,6 +24,11 @@ public class TaskDTO {
|
|||||||
*/
|
*/
|
||||||
private String conditionValue;
|
private String conditionValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务数量
|
||||||
|
*/
|
||||||
|
private Integer targetValue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 完成值
|
* 完成值
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -45,6 +45,11 @@ public class TaskConfig {
|
|||||||
* 奖励数量(预留)
|
* 奖励数量(预留)
|
||||||
*/
|
*/
|
||||||
private Integer rewardAmount;
|
private Integer rewardAmount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 目标数量
|
||||||
|
*/
|
||||||
|
private Integer targetValue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 条件类型(如:MIC_DURATION)(预留)
|
* 条件类型(如:MIC_DURATION)(预留)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user