|
|
@@ -1,6 +1,7 @@
|
|
|
package com.izouma.nineth.service;
|
|
|
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
+import com.alibaba.druid.support.json.JSONUtils;
|
|
|
import com.alibaba.excel.util.CollectionUtils;
|
|
|
import com.izouma.nineth.config.Constants;
|
|
|
import com.izouma.nineth.domain.*;
|
|
|
@@ -18,10 +19,12 @@ import lombok.AllArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.data.domain.Page;
|
|
|
+import org.springframework.scheduling.annotation.Scheduled;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.transaction.Transactional;
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Objects;
|
|
|
|
|
|
@@ -38,7 +41,8 @@ public class MetaTaskToUserNewService {
|
|
|
private MetaUserTaskProgressNewRepo metaUserTaskProgressNewRepo;
|
|
|
|
|
|
public Page<MetaTaskToUserNew> all(PageQuery pageQuery) {
|
|
|
- return metaTaskToUserNewRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaTaskToUserNew.class), JpaUtils.toPageRequest(pageQuery));
|
|
|
+ return metaTaskToUserNewRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaTaskToUserNew.class), JpaUtils
|
|
|
+ .toPageRequest(pageQuery));
|
|
|
}
|
|
|
|
|
|
@Transactional
|
|
|
@@ -52,19 +56,22 @@ public class MetaTaskToUserNewService {
|
|
|
metaTaskToUserNew.setTaskId(metaTaskNew.getId());
|
|
|
// 设置主动领取第一个索引的基础任务
|
|
|
if (MetaTaskType.MAIN_LINE.equals(metaTaskNew.getType())) {
|
|
|
- Long atomTaskId = metaTaskBindRepo.findAtomTaskId(metaTaskNew.getId(), MetaTaskType.NODE.toString());
|
|
|
+ Long atomTaskId = metaTaskBindRepo
|
|
|
+ .findAtomTaskId(metaTaskNew.getId(), MetaTaskType.NODE.toString());
|
|
|
if (Objects.nonNull(atomTaskId)) {
|
|
|
metaTaskToUserNew.setAtomTaskId(atomTaskId);
|
|
|
}
|
|
|
}
|
|
|
if (MetaTaskType.BRANCH_LINE.equals(metaTaskNew.getType())) {
|
|
|
- Long atomTaskId = metaTaskBindRepo.findAtomTaskId(metaTaskNew.getId(), MetaTaskType.BRANCH_LINE.toString());
|
|
|
+ Long atomTaskId = metaTaskBindRepo
|
|
|
+ .findAtomTaskId(metaTaskNew.getId(), MetaTaskType.BRANCH_LINE.toString());
|
|
|
if (Objects.nonNull(atomTaskId)) {
|
|
|
metaTaskToUserNew.setAtomTaskId(atomTaskId);
|
|
|
}
|
|
|
}
|
|
|
if (MetaTaskType.DAILY.equals(metaTaskNew.getType())) {
|
|
|
- Long atomTaskId = metaTaskBindRepo.findAtomTaskId(metaTaskNew.getId(), MetaTaskType.DAILY.toString());
|
|
|
+ Long atomTaskId = metaTaskBindRepo
|
|
|
+ .findAtomTaskId(metaTaskNew.getId(), MetaTaskType.DAILY.toString());
|
|
|
if (Objects.nonNull(atomTaskId)) {
|
|
|
metaTaskToUserNew.setAtomTaskId(atomTaskId);
|
|
|
}
|
|
|
@@ -91,13 +98,13 @@ public class MetaTaskToUserNewService {
|
|
|
return MetaRestResult.returnError("Illegal parameter : atomTaskId can not be null");
|
|
|
}
|
|
|
MetaTaskNew metaTaskNew = metaTaskNewRepo.findByIdAndDel(metaTaskToUserNew.getTaskId(), false);
|
|
|
- MetaServiceResult checkMetaTaskNewResult = checkMetaTaskNew(metaTaskNew);
|
|
|
+ MetaServiceResult checkMetaTaskNewResult = MetaTaskNew.checkMetaTaskNew(metaTaskNew);
|
|
|
if (!checkMetaTaskNewResult.isSuccess()) {
|
|
|
return MetaRestResult.returnError(checkMetaTaskNewResult.getMessage());
|
|
|
}
|
|
|
metaTaskToUserNew.setMetaTaskNew(metaTaskNew);
|
|
|
MetaAtomTask metaAtomTask = metaAtomTaskRepo.findByIdAndDel(metaTaskToUserNew.getAtomTaskId(), false);
|
|
|
- MetaServiceResult checkMetaAtomTaskResult = checkMetaAtomTask(metaAtomTask);
|
|
|
+ MetaServiceResult checkMetaAtomTaskResult = MetaAtomTask.checkMetaAtomTask(metaAtomTask);
|
|
|
if (!checkMetaAtomTaskResult.isSuccess()) {
|
|
|
return MetaRestResult.returnError(checkMetaAtomTaskResult.getMessage());
|
|
|
}
|
|
|
@@ -107,7 +114,9 @@ public class MetaTaskToUserNewService {
|
|
|
return MetaRestResult.returnError(buildMetaPropResult.getMessage());
|
|
|
}
|
|
|
// 判断当前玩家是否领取过基础任务
|
|
|
- MetaTaskToUserNew dbMetaTaskToUserNew = metaTaskToUserNewRepo.findByUserIdAndTaskIdAndAtomTaskIdAndDel(metaTaskToUserNew.getUserId(), metaTaskToUserNew.getTaskId(), metaTaskToUserNew.getAtomTaskId(), false);
|
|
|
+ MetaTaskToUserNew dbMetaTaskToUserNew = metaTaskToUserNewRepo
|
|
|
+ .findByUserIdAndTaskIdAndAtomTaskIdAndChannelIdAndDel(metaTaskToUserNew.getUserId(), metaTaskToUserNew
|
|
|
+ .getTaskId(), metaTaskToUserNew.getAtomTaskId(), metaTaskNew.getChannelId(), false);
|
|
|
if (Objects.nonNull(dbMetaTaskToUserNew)) {
|
|
|
return MetaRestResult.returnError(String.format("当前用户已在[%S]领取过该任务", dbMetaTaskToUserNew.getGetTime()));
|
|
|
}
|
|
|
@@ -117,7 +126,8 @@ public class MetaTaskToUserNewService {
|
|
|
if (MetaAwardTypeEnum.META_PROP.equals(metaAtomTask.getAwardType())) {
|
|
|
MetaProp metaProp = metaPropRepo.findByIdAndDel(Long.parseLong(metaAtomTask.getAwardConfig()), false);
|
|
|
if (Objects.isNull(metaProp)) {
|
|
|
- return MetaRestResult.returnError(String.format("基础任务[%S]奖励配置的道具不存在", metaTaskToUserNew.getAtomTaskId()));
|
|
|
+ return MetaRestResult
|
|
|
+ .returnError(String.format("基础任务[%S]奖励配置的道具不存在", metaTaskToUserNew.getAtomTaskId()));
|
|
|
}
|
|
|
metaTaskToUserNew.setMetaProp(metaProp);
|
|
|
}
|
|
|
@@ -134,20 +144,32 @@ public class MetaTaskToUserNewService {
|
|
|
}
|
|
|
|
|
|
public MetaRestResult<List<MetaTaskToUserNew>> findByStatus(Long userId, Long channelId, MetaTaskStatus status) {
|
|
|
- List<MetaTaskToUserNew> metaTaskToUsers = metaTaskToUserNewRepo.findAllByUserIdAndChannelIdAndStatusAndDel(userId, channelId, status, false);
|
|
|
- metaTaskToUsers.forEach(this::setSingleProgress);
|
|
|
+ List<Long> metaTaskNewIds = metaTaskNewRepo.findIdByPublishAndDel();
|
|
|
+ List<MetaTaskToUserNew> metaTaskToUsers = CollectionUtils.isEmpty(metaTaskNewIds) ? new ArrayList<>() :
|
|
|
+ metaTaskToUserNewRepo
|
|
|
+ .findAllByUserIdAndChannelIdAndStatusAndDelAndTaskIdIn(userId, channelId, status, false, metaTaskNewIds);
|
|
|
+ try {
|
|
|
+ metaTaskToUsers.forEach(metaTaskToUserNew -> {
|
|
|
+ MetaRestResult<MetaTaskToUserNew> result = setSingleProgress(metaTaskToUserNew);
|
|
|
+ if (result.getCode() != Constants.MetaRestCode.success) {
|
|
|
+ throw new BusinessException(result.getMessage());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } catch (Exception e) {
|
|
|
+ return MetaRestResult.returnError(e.getMessage());
|
|
|
+ }
|
|
|
return MetaRestResult.returnSuccess(metaTaskToUsers);
|
|
|
}
|
|
|
|
|
|
public MetaRestResult<MetaTaskToUserNew> setSingleProgress(MetaTaskToUserNew metaTaskToUserNew) {
|
|
|
MetaAtomTask metaAtomTask = metaAtomTaskRepo.findByIdAndDel(metaTaskToUserNew.getAtomTaskId(), false);
|
|
|
- MetaServiceResult checkMetaAtomTaskResult = checkMetaAtomTask(metaAtomTask);
|
|
|
+ MetaServiceResult checkMetaAtomTaskResult = MetaAtomTask.checkMetaAtomTask(metaAtomTask);
|
|
|
if (!checkMetaAtomTaskResult.isSuccess()) {
|
|
|
return MetaRestResult.returnError(checkMetaAtomTaskResult.getMessage());
|
|
|
}
|
|
|
metaTaskToUserNew.setMetaAtomTask(metaAtomTask);
|
|
|
MetaTaskNew metaTaskNew = metaTaskNewRepo.findByIdAndDel(metaTaskToUserNew.getTaskId(), false);
|
|
|
- MetaServiceResult checkMetaTaskNewResult = checkMetaTaskNew(metaTaskNew);
|
|
|
+ MetaServiceResult checkMetaTaskNewResult = MetaTaskNew.checkMetaTaskNew(metaTaskNew);
|
|
|
if (!checkMetaTaskNewResult.isSuccess()) {
|
|
|
return MetaRestResult.returnError(checkMetaTaskNewResult.getMessage());
|
|
|
}
|
|
|
@@ -168,8 +190,11 @@ public class MetaTaskToUserNewService {
|
|
|
private void setProgress(MetaTaskToUserNew metaTaskToUserNew) {
|
|
|
MetaAtomTask metaAtomTask = metaTaskToUserNew.getMetaAtomTask();
|
|
|
List<Long> atomTaskIds = metaTaskBindRepo.findAtomTaskIds(metaTaskToUserNew.getTaskId());
|
|
|
- List<MetaTaskToUserNew> completed = metaTaskToUserNewRepo.findAllByUserIdAndStatusAndDelAndAtomTaskIdIn(metaTaskToUserNew.getUserId(), MetaTaskStatus.COMPLETION, false, atomTaskIds);
|
|
|
- metaTaskToUserNew.setProcess(String.valueOf(completed.size()).concat("/").concat(String.valueOf(atomTaskIds.size())));
|
|
|
+ List<MetaTaskToUserNew> completed = metaTaskToUserNewRepo
|
|
|
+ .findAllByUserIdAndStatusAndDelAndAtomTaskIdIn(metaTaskToUserNew
|
|
|
+ .getUserId(), MetaTaskStatus.COMPLETION, false, atomTaskIds);
|
|
|
+ metaTaskToUserNew
|
|
|
+ .setProcess(String.valueOf(completed.size()).concat("/").concat(String.valueOf(atomTaskIds.size())));
|
|
|
String value = metaAtomTask.getTargetConfig();
|
|
|
String PREFIX = "0/";
|
|
|
switch (metaAtomTask.getTargetType()) {
|
|
|
@@ -181,12 +206,14 @@ public class MetaTaskToUserNewService {
|
|
|
break;
|
|
|
}
|
|
|
String[] split = value.split(" ");
|
|
|
- List<MetaUserTaskProgressNew> collectCollection = metaUserTaskProgressNewRepo.findAllByMetaTaskToUserNewIdAndDel(metaTaskToUserNew.getId(), false);
|
|
|
+ List<MetaUserTaskProgressNew> collectCollection = metaUserTaskProgressNewRepo
|
|
|
+ .findAllByMetaTaskToUserNewIdAndDel(metaTaskToUserNew.getId(), false);
|
|
|
if (CollectionUtils.isEmpty(collectCollection)) {
|
|
|
metaTaskToUserNew.setAtomTaskProcess(PREFIX.concat(String.valueOf(split.length)));
|
|
|
break;
|
|
|
}
|
|
|
- metaTaskToUserNew.setAtomTaskProcess(String.valueOf(collectCollection.size()).concat("/").concat(String.valueOf(split.length)));
|
|
|
+ metaTaskToUserNew.setAtomTaskProcess(String.valueOf(collectCollection.size()).concat("/")
|
|
|
+ .concat(String.valueOf(split.length)));
|
|
|
break;
|
|
|
case ON_LINE_TIME_DAILY:
|
|
|
if (StringUtils.isBlank(value)) {
|
|
|
@@ -195,11 +222,17 @@ public class MetaTaskToUserNewService {
|
|
|
metaTaskToUserNew.setAtomTaskProcess(errMsg);
|
|
|
break;
|
|
|
}
|
|
|
- MetaUserTaskProgressNew onLineTimeDaily = metaUserTaskProgressNewRepo.findByMetaTaskToUserNewIdAndDelAndCreatedAtAfter(metaTaskToUserNew.getId(), false, LocalDateTime.now().withHour(0).withMinute(0).withSecond(0));
|
|
|
+ MetaUserTaskProgressNew onLineTimeDaily = metaUserTaskProgressNewRepo
|
|
|
+ .findByMetaTaskToUserNewIdAndDelAndCreatedAtAfter(metaTaskToUserNew
|
|
|
+ .getId(), false, LocalDateTime.now().withHour(0).withMinute(0).withSecond(0));
|
|
|
if (Objects.isNull(onLineTimeDaily)) {
|
|
|
metaTaskToUserNew.setAtomTaskProcess(PREFIX.concat(value));
|
|
|
break;
|
|
|
}
|
|
|
+ if (Integer.parseInt(onLineTimeDaily.getRemark()) >= Integer.parseInt(value)) {
|
|
|
+ metaTaskToUserNew.setAtomTaskProcess(value.concat("/").concat(value));
|
|
|
+ break;
|
|
|
+ }
|
|
|
metaTaskToUserNew.setAtomTaskProcess(onLineTimeDaily.getRemark().concat("/").concat(value));
|
|
|
break;
|
|
|
case ACCUMULATE:
|
|
|
@@ -209,7 +242,8 @@ public class MetaTaskToUserNewService {
|
|
|
metaTaskToUserNew.setAtomTaskProcess(errMsg);
|
|
|
break;
|
|
|
}
|
|
|
- List<MetaUserTaskProgressNew> accumulate = metaUserTaskProgressNewRepo.findAllByMetaTaskToUserNewIdAndDel(metaTaskToUserNew.getId(), false);
|
|
|
+ List<MetaUserTaskProgressNew> accumulate = metaUserTaskProgressNewRepo
|
|
|
+ .findAllByMetaTaskToUserNewIdAndDel(metaTaskToUserNew.getId(), false);
|
|
|
if (CollectionUtils.isEmpty(accumulate)) {
|
|
|
metaTaskToUserNew.setAtomTaskProcess(PREFIX.concat(value));
|
|
|
break;
|
|
|
@@ -224,62 +258,6 @@ public class MetaTaskToUserNewService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 校验基础任务
|
|
|
- *
|
|
|
- * @param metaAtomTask 基础任务
|
|
|
- * @return result
|
|
|
- */
|
|
|
- private MetaServiceResult checkMetaAtomTask(MetaAtomTask metaAtomTask) {
|
|
|
- if (Objects.isNull(metaAtomTask)) {
|
|
|
- return MetaServiceResult.returnError("基础任务不存在");
|
|
|
- }
|
|
|
- if (StringUtils.isBlank(metaAtomTask.getName())) {
|
|
|
- return MetaServiceResult.returnError(String.format("基础任务[%S]缺少任务名称", metaAtomTask.getId()));
|
|
|
- }
|
|
|
- if (Objects.isNull(metaAtomTask.getDetail())) {
|
|
|
- return MetaServiceResult.returnError(String.format("基础任务[%S]缺少任务详情", metaAtomTask.getId()));
|
|
|
- }
|
|
|
- if (Objects.isNull(metaAtomTask.getTargetType())) {
|
|
|
- return MetaServiceResult.returnError(String.format("基础任务[%S]缺少目标", metaAtomTask.getId()));
|
|
|
- }
|
|
|
- if (StringUtils.isBlank(metaAtomTask.getTargetConfig())) {
|
|
|
- return MetaServiceResult.returnError(String.format("基础任务[%S]缺少目标配置", metaAtomTask.getId()));
|
|
|
- }
|
|
|
- if (Objects.isNull(metaAtomTask.getAwardType())) {
|
|
|
- return MetaServiceResult.returnError(String.format("基础任务[%S]缺少奖励类型", metaAtomTask.getId()));
|
|
|
- }
|
|
|
- if (StringUtils.isBlank(metaAtomTask.getAwardConfig())) {
|
|
|
- return MetaServiceResult.returnError(String.format("基础任务[%S]缺少奖励配置", metaAtomTask.getId()));
|
|
|
- }
|
|
|
- return MetaServiceResult.returnSuccess();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 校验任务
|
|
|
- *
|
|
|
- * @param metaTaskNew 任务信息
|
|
|
- * @return result
|
|
|
- */
|
|
|
- private MetaServiceResult checkMetaTaskNew(MetaTaskNew metaTaskNew) {
|
|
|
- if (Objects.isNull(metaTaskNew)) {
|
|
|
- return MetaServiceResult.returnError("任务不存在");
|
|
|
- }
|
|
|
- if (!metaTaskNew.isPublish()) {
|
|
|
- return MetaServiceResult.returnError("status error : task has not been published");
|
|
|
- }
|
|
|
- if (StringUtils.isBlank(metaTaskNew.getName())) {
|
|
|
- return MetaServiceResult.returnError(String.format("任务[%S]缺少任务名称", metaTaskNew.getId()));
|
|
|
- }
|
|
|
- if (Objects.isNull(metaTaskNew.getDetail())) {
|
|
|
- return MetaServiceResult.returnError(String.format("任务[%S]缺少任务详情", metaTaskNew.getId()));
|
|
|
- }
|
|
|
- if (Objects.isNull(metaTaskNew.getType())) {
|
|
|
- return MetaServiceResult.returnError(String.format("任务[%S]缺少任务类型", metaTaskNew.getId()));
|
|
|
- }
|
|
|
- return MetaServiceResult.returnSuccess();
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 道具奖励 构建道具信息
|
|
|
*
|
|
|
@@ -290,11 +268,30 @@ public class MetaTaskToUserNewService {
|
|
|
if (!MetaAwardTypeEnum.META_PROP.equals(metaTaskToUserNew.getMetaAtomTask().getAwardType())) {
|
|
|
return MetaServiceResult.returnSuccess();
|
|
|
}
|
|
|
- MetaProp metaProp = metaPropRepo.findByIdAndDel(Long.parseLong(metaTaskToUserNew.getMetaAtomTask().getAwardConfig()), false);
|
|
|
+ MetaProp metaProp = metaPropRepo
|
|
|
+ .findByIdAndDel(Long.parseLong(metaTaskToUserNew.getMetaAtomTask().getAwardConfig()), false);
|
|
|
if (Objects.isNull(metaProp)) {
|
|
|
- return MetaServiceResult.returnError(String.format("基础任务[%S]道具奖励 道具信息为空", metaTaskToUserNew.getMetaAtomTask().getId()));
|
|
|
+ return MetaServiceResult
|
|
|
+ .returnError(String.format("基础任务[%S]道具奖励 道具信息为空", metaTaskToUserNew.getMetaAtomTask().getId()));
|
|
|
}
|
|
|
metaTaskToUserNew.setMetaProp(metaProp);
|
|
|
return MetaServiceResult.returnSuccess();
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 每天凌晨刷新日常任务状态为执行中
|
|
|
+ */
|
|
|
+ @Scheduled(cron = "0 0 0 * * *")
|
|
|
+ @Transactional
|
|
|
+ public void handleDailyTask() {
|
|
|
+ // 查询所有已经发布的日常任务
|
|
|
+ List<Long> ids = metaTaskNewRepo.findDailyTaskIds(MetaTaskType.DAILY);
|
|
|
+ if (CollectionUtil.isEmpty(ids)) {
|
|
|
+ log.info(String.format("当前[%S]没有日常任务需要调整状态", LocalDateTime.now()));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ log.info(String.format("[%S]更新日常任务[%S]状态", LocalDateTime.now(), JSONUtils.toJSONString(ids)));
|
|
|
+ // 每日流程将所有日常任务状态全部调整为进行中
|
|
|
+ metaTaskToUserNewRepo.updateStatus(MetaTaskStatus.PROGRESS, ids);
|
|
|
+ }
|
|
|
}
|