MetaTaskToUserNewService.java 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package com.izouma.nineth.service;
  2. import com.izouma.nineth.config.Constants;
  3. import com.izouma.nineth.domain.MetaAtomTask;
  4. import com.izouma.nineth.domain.MetaProp;
  5. import com.izouma.nineth.domain.MetaTaskNew;
  6. import com.izouma.nineth.domain.MetaTaskToUserNew;
  7. import com.izouma.nineth.dto.MetaRestResult;
  8. import com.izouma.nineth.dto.PageQuery;
  9. import com.izouma.nineth.enums.MetaAwardTypeEnum;
  10. import com.izouma.nineth.enums.MetaTaskStatus;
  11. import com.izouma.nineth.enums.MetaTaskType;
  12. import com.izouma.nineth.exception.BusinessException;
  13. import com.izouma.nineth.repo.*;
  14. import com.izouma.nineth.utils.JpaUtils;
  15. import com.izouma.nineth.utils.SecurityUtils;
  16. import lombok.AllArgsConstructor;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.apache.commons.lang3.StringUtils;
  19. import org.springframework.data.domain.Page;
  20. import org.springframework.stereotype.Service;
  21. import javax.transaction.Transactional;
  22. import java.time.LocalDateTime;
  23. import java.util.List;
  24. import java.util.Objects;
  25. import java.util.concurrent.atomic.AtomicBoolean;
  26. @Service
  27. @AllArgsConstructor
  28. @Slf4j
  29. public class MetaTaskToUserNewService {
  30. private MetaTaskToUserNewRepo metaTaskToUserNewRepo;
  31. private MetaAtomTaskRepo metaAtomTaskRepo;
  32. private MetaTaskNewRepo metaTaskNewRepo;
  33. private MetaPropRepo metaPropRepo;
  34. private MetaTaskBindRepo metaTaskBindRepo;
  35. public Page<MetaTaskToUserNew> all(PageQuery pageQuery) {
  36. return metaTaskToUserNewRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaTaskToUserNew.class), JpaUtils.toPageRequest(pageQuery));
  37. }
  38. @Transactional
  39. public MetaRestResult<Void> autoReceiveTask() {
  40. Long userId = SecurityUtils.getAuthenticatedUser().getId();
  41. List<MetaTaskNew> metaTaskNews = metaTaskNewRepo.findAllByDel(false);
  42. AtomicBoolean exist = new AtomicBoolean(false);
  43. metaTaskNews.forEach(metaTaskNew -> {
  44. MetaTaskToUserNew metaTaskToUserNew = metaTaskToUserNewRepo.findByUserIdAndTaskIdAndDel(userId, metaTaskNew.getId(), false);
  45. if (Objects.isNull(metaTaskToUserNew)) {
  46. exist.set(true);
  47. metaTaskToUserNew = new MetaTaskToUserNew();
  48. metaTaskToUserNew.setUserId(userId);
  49. metaTaskToUserNew.setTaskId(metaTaskNew.getId());
  50. // 设置主动领取第一个索引的基础任务
  51. if (MetaTaskType.MAIN_LINE.equals(metaTaskNew.getType())) {
  52. Long atomTaskId = metaTaskBindRepo.findAtomTaskId(metaTaskNew.getId(), MetaTaskType.NODE);
  53. if (Objects.nonNull(atomTaskId)) {
  54. metaTaskToUserNew.setAtomTaskId(atomTaskId);
  55. }
  56. }
  57. if (MetaTaskType.BRANCH_LINE.equals(metaTaskNew.getType())) {
  58. Long atomTaskId = metaTaskBindRepo.findAtomTaskId(metaTaskNew.getId(), MetaTaskType.BRANCH_LINE);
  59. if (Objects.nonNull(atomTaskId)) {
  60. metaTaskToUserNew.setAtomTaskId(atomTaskId);
  61. }
  62. }
  63. if (MetaTaskType.DAILY.equals(metaTaskNew.getType())) {
  64. Long atomTaskId = metaTaskBindRepo.findAtomTaskId(metaTaskNew.getId(), MetaTaskType.DAILY);
  65. if (Objects.nonNull(atomTaskId)) {
  66. metaTaskToUserNew.setAtomTaskId(atomTaskId);
  67. }
  68. }
  69. MetaRestResult<MetaTaskToUserNew> result = receiveTask(metaTaskToUserNew);
  70. if (Constants.MetaRestCode.success != result.getCode()) {
  71. throw new BusinessException(result.getMessage());
  72. }
  73. }
  74. });
  75. if (exist.get()) {
  76. return MetaRestResult.returnSuccess("主动任务领取成功");
  77. }
  78. return MetaRestResult.returnSuccess("玩家主动领取任务已经全部领取");
  79. }
  80. @Transactional
  81. public MetaRestResult<MetaTaskToUserNew> receiveTask(MetaTaskToUserNew metaTaskToUserNew) {
  82. if (Objects.isNull(metaTaskToUserNew.getUserId())) {
  83. return MetaRestResult.returnError("Illegal parameter : userId can not be null");
  84. }
  85. if (Objects.isNull(metaTaskToUserNew.getTaskId())) {
  86. return MetaRestResult.returnError("Illegal parameter : taskId can not be null");
  87. }
  88. if (Objects.isNull(metaTaskToUserNew.getAtomTaskId())) {
  89. return MetaRestResult.returnError("Illegal parameter : atomTaskId can not be null");
  90. }
  91. MetaTaskNew metaTaskNew = metaTaskNewRepo.findByIdAndDel(metaTaskToUserNew.getTaskId(), false);
  92. if (Objects.isNull(metaTaskNew)) {
  93. return MetaRestResult.returnError("任务不存在");
  94. }
  95. if (!metaTaskNew.isPublish()) {
  96. return MetaRestResult.returnError("status error : task has not been published");
  97. }
  98. if (metaTaskNew.isFinish()) {
  99. return MetaRestResult.returnError("status error : task has been finished");
  100. }
  101. if (StringUtils.isBlank(metaTaskNew.getName())) {
  102. return MetaRestResult.returnError(String.format("任务[%S]缺少任务名称", metaTaskToUserNew.getTaskId()));
  103. }
  104. if (Objects.isNull(metaTaskNew.getDetail())) {
  105. return MetaRestResult.returnError(String.format("任务[%S]缺少任务详情", metaTaskToUserNew.getTaskId()));
  106. }
  107. if (Objects.isNull(metaTaskNew.getType())) {
  108. return MetaRestResult.returnError(String.format("任务[%S]缺少任务类型", metaTaskToUserNew.getTaskId()));
  109. }
  110. MetaAtomTask metaAtomTask = metaAtomTaskRepo.findByIdAndDel(metaTaskToUserNew.getAtomTaskId(), false);
  111. if (Objects.isNull(metaAtomTask)) {
  112. return MetaRestResult.returnError("基础任务不存在");
  113. }
  114. if (StringUtils.isBlank(metaAtomTask.getName())) {
  115. return MetaRestResult.returnError(String.format("基础任务[%S]缺少任务名称", metaTaskToUserNew.getAtomTaskId()));
  116. }
  117. if (Objects.isNull(metaAtomTask.getDetail())) {
  118. return MetaRestResult.returnError(String.format("基础任务[%S]缺少任务详情", metaTaskToUserNew.getAtomTaskId()));
  119. }
  120. if (Objects.isNull(metaAtomTask.getTargetType())) {
  121. return MetaRestResult.returnError(String.format("基础任务[%S]缺少目标", metaTaskToUserNew.getAtomTaskId()));
  122. }
  123. if (StringUtils.isBlank(metaAtomTask.getTargetConfig())) {
  124. return MetaRestResult.returnError(String.format("基础任务[%S]缺少目标配置", metaTaskToUserNew.getAtomTaskId()));
  125. }
  126. if (Objects.isNull(metaAtomTask.getAwardType())) {
  127. return MetaRestResult.returnError(String.format("基础任务[%S]缺少奖励类型", metaTaskToUserNew.getAtomTaskId()));
  128. }
  129. if (StringUtils.isBlank(metaAtomTask.getAwardConfig())) {
  130. return MetaRestResult.returnError(String.format("基础任务[%S]缺少奖励配置", metaTaskToUserNew.getAtomTaskId()));
  131. }
  132. // 判断当前玩家是否领取过任务
  133. MetaTaskToUserNew dbMetaTaskToUserNew = metaTaskToUserNewRepo.findByUserIdAndTaskIdAndAtomTaskIdAndDel(metaTaskToUserNew.getUserId(), metaTaskToUserNew.getTaskId(), metaTaskToUserNew.getAtomTaskId(), false);
  134. if (Objects.nonNull(dbMetaTaskToUserNew)) {
  135. return MetaRestResult.returnError(String.format("当前用户已在[%S]领取过该任务", dbMetaTaskToUserNew.getGetTime()));
  136. }
  137. metaTaskToUserNew.setGetTime(LocalDateTime.now());
  138. metaTaskToUserNew.setStatus(MetaTaskStatus.PROGRESS);
  139. metaTaskToUserNew.setChannelId(metaTaskNew.getChannelId());
  140. if (MetaAwardTypeEnum.META_PROP.equals(metaAtomTask.getAwardType())) {
  141. MetaProp metaProp = metaPropRepo.findByIdAndDel(Long.parseLong(metaAtomTask.getAwardConfig()), false);
  142. if (Objects.isNull(metaProp)) {
  143. return MetaRestResult.returnError(String.format("基础任务[%S]奖励配置的道具不存在", metaTaskToUserNew.getAtomTaskId()));
  144. }
  145. metaTaskToUserNew.setMetaProp(metaProp);
  146. }
  147. metaTaskToUserNew.setMetaTaskNew(metaTaskNew);
  148. metaTaskToUserNew.setMetaAtomTask(metaAtomTask);
  149. MetaTaskToUserNew save = metaTaskToUserNewRepo.save(metaTaskToUserNew);
  150. setProgress(save);
  151. return MetaRestResult.returnSuccess(save);
  152. }
  153. private void setProgress(MetaTaskToUserNew metaTaskToUserNew) {
  154. // TODO
  155. }
  156. }