|
|
@@ -0,0 +1,74 @@
|
|
|
+package com.izouma.nineth.service;
|
|
|
+
|
|
|
+import com.izouma.nineth.domain.MetaAtomTask;
|
|
|
+import com.izouma.nineth.domain.MetaTaskToUserNew;
|
|
|
+import com.izouma.nineth.domain.MetaUserTaskAwardReceivedRecordNew;
|
|
|
+import com.izouma.nineth.dto.MetaAwardReceiveDTO;
|
|
|
+import com.izouma.nineth.dto.MetaRestResult;
|
|
|
+import com.izouma.nineth.dto.MetaServiceResult;
|
|
|
+import com.izouma.nineth.dto.PageQuery;
|
|
|
+import com.izouma.nineth.enums.MetaTaskStatus;
|
|
|
+import com.izouma.nineth.enums.MetaTaskTarget;
|
|
|
+import com.izouma.nineth.repo.MetaAtomTaskRepo;
|
|
|
+import com.izouma.nineth.repo.MetaTaskToUserNewRepo;
|
|
|
+import com.izouma.nineth.repo.MetaUserTaskAwardReceivedRecordNewRepo;
|
|
|
+import com.izouma.nineth.utils.JpaUtils;
|
|
|
+import com.izouma.nineth.utils.SecurityUtils;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import org.springframework.data.domain.Page;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.transaction.Transactional;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.Objects;
|
|
|
+
|
|
|
+@Service
|
|
|
+@AllArgsConstructor
|
|
|
+public class MetaUserTaskAwardReceivedRecordNewService {
|
|
|
+
|
|
|
+ private MetaUserTaskAwardReceivedRecordNewRepo metaUserTaskAwardReceivedRecordNewRepo;
|
|
|
+
|
|
|
+ private MetaTaskToUserNewRepo metaTaskToUserNewRepo;
|
|
|
+
|
|
|
+ private MetaAtomTaskRepo metaAtomTaskRepo;
|
|
|
+
|
|
|
+ private MetaAwardReceiveService metaAwardReceiveService;
|
|
|
+
|
|
|
+ public Page<MetaUserTaskAwardReceivedRecordNew> all(PageQuery pageQuery) {
|
|
|
+ return metaUserTaskAwardReceivedRecordNewRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaUserTaskAwardReceivedRecordNew.class), JpaUtils.toPageRequest(pageQuery));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ public MetaRestResult<Void> receiveAward(Long taskId, Long atomTaskId) {
|
|
|
+ Long userId = SecurityUtils.getAuthenticatedUser().getId();
|
|
|
+ MetaAtomTask metaAtomTask = metaAtomTaskRepo.findByIdAndDel(atomTaskId, false);
|
|
|
+ if (Objects.isNull(metaAtomTask)) {
|
|
|
+ return MetaRestResult.returnError("奖励领取失败:基础任务不存在!");
|
|
|
+ }
|
|
|
+ MetaTaskToUserNew metaTaskToUserNew = metaTaskToUserNewRepo.findByUserIdAndTaskIdAndAtomTaskIdAndDel(userId, taskId, atomTaskId, false);
|
|
|
+ if (Objects.isNull(metaTaskToUserNew)) {
|
|
|
+ return MetaRestResult.returnError("奖励领取失败:用户未领取过该任务!");
|
|
|
+ }
|
|
|
+ if (MetaTaskStatus.PROGRESS.equals(metaTaskToUserNew.getStatus()) || MetaTaskStatus.FINISH.equals(metaTaskToUserNew.getStatus())) {
|
|
|
+ return MetaRestResult.returnError(String.format("奖励领取失败:当前任务状态为[%S]", metaTaskToUserNew.getStatus().getDescription()));
|
|
|
+ }
|
|
|
+ if (MetaTaskTarget.ON_LINE_TIME_DAILY.equals(metaAtomTask.getTargetType())) {
|
|
|
+ MetaUserTaskAwardReceivedRecordNew metaUserTaskAwardReceivedRecordNew = metaUserTaskAwardReceivedRecordNewRepo.findByUserIdAndTaskIdAndAtomTaskIdAndDelAndReceivedTimeAfter(userId, taskId, atomTaskId, false, LocalDateTime.now().withHour(0).withMinute(0).withSecond(0));
|
|
|
+ if (Objects.nonNull(metaUserTaskAwardReceivedRecordNew)) {
|
|
|
+ return MetaRestResult.returnError("奖励领取失败:用户今天已经领取过该任务奖励,不可重复领取!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!MetaTaskTarget.ON_LINE_TIME_DAILY.equals(metaAtomTask.getTargetType())) {
|
|
|
+ MetaUserTaskAwardReceivedRecordNew metaUserTaskAwardReceivedRecordNew = metaUserTaskAwardReceivedRecordNewRepo.findByUserIdAndTaskIdAndAtomTaskIdAndDel(userId, taskId, atomTaskId, false);
|
|
|
+ if (Objects.nonNull(metaUserTaskAwardReceivedRecordNew)) {
|
|
|
+ return MetaRestResult.returnError("奖励领取失败:用户已经领取过该任务奖励,不可重复领取!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ MetaServiceResult receive = metaAwardReceiveService.receive(new MetaAwardReceiveDTO(metaAtomTask.getAwardType(), metaAtomTask.getAwardConfig(), userId, "基础任务" + atomTaskId));
|
|
|
+ if (!receive.isSuccess()) {
|
|
|
+ return MetaRestResult.returnError(receive.getMessage());
|
|
|
+ }
|
|
|
+ metaUserTaskAwardReceivedRecordNewRepo.save(new MetaUserTaskAwardReceivedRecordNew(userId, taskId, atomTaskId, LocalDateTime.now()));
|
|
|
+ return MetaRestResult.returnSuccess(receive.getMessage());
|
|
|
+ }
|
|
|
+}
|