Ver Fonte

任务相关协议调整

sunkean há 3 anos atrás
pai
commit
23da25517d

+ 4 - 0
src/main/java/com/izouma/nineth/repo/MetaTaskNewRepo.java

@@ -1,6 +1,7 @@
 package com.izouma.nineth.repo;
 
 import com.izouma.nineth.domain.MetaTaskNew;
+import com.izouma.nineth.enums.MetaTaskType;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
@@ -27,4 +28,7 @@ public interface MetaTaskNewRepo extends JpaRepository<MetaTaskNew, Long>, JpaSp
 
     @Query(value = "select * from meta_task_new where del = false and publish = true and channel_id = ?2 and id not in (select task_id from meta_task_to_user where user_id = ?1)", nativeQuery = true)
     List<MetaTaskNew> canGet(Long userId, Long channelId);
+
+    @Query("select m.id from MetaTaskNew m where m.type = ?1 and m.del = false and m.publish = true")
+    List<Long> findDailyTaskIds(MetaTaskType type);
 }

+ 7 - 0
src/main/java/com/izouma/nineth/repo/MetaTaskToUserNewRepo.java

@@ -5,7 +5,10 @@ import com.izouma.nineth.domain.MetaTaskToUserNew;
 import com.izouma.nineth.enums.MetaTaskStatus;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
 
+import javax.transaction.Transactional;
 import java.util.List;
 
 public interface MetaTaskToUserNewRepo extends JpaRepository<MetaTaskToUserNew, Long>, JpaSpecificationExecutor<MetaTaskToUserNew> {
@@ -18,4 +21,8 @@ public interface MetaTaskToUserNewRepo extends JpaRepository<MetaTaskToUserNew,
 
     List<MetaTaskToUserNew> findAllByUserIdAndChannelIdAndStatusAndDelAndTaskIdIn(Long userId, Long channelId, MetaTaskStatus status, boolean del, List<Long> taskIds);
 
+    @Query("update MetaTaskToUserNew m set m.status = ?1 where m.taskId in ?2")
+    @Modifying
+    @Transactional
+    void updateStatus(MetaTaskStatus status, List<Long> taskIds) ;
 }

+ 16 - 0
src/main/java/com/izouma/nineth/service/MetaTaskToUserNewService.java

@@ -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,6 +19,7 @@ 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;
@@ -331,4 +333,18 @@ public class MetaTaskToUserNewService {
         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);
+    }
 }

+ 4 - 5
src/main/java/com/izouma/nineth/service/MetaUserTaskAwardReceivedRecordNewService.java

@@ -46,16 +46,15 @@ public class MetaUserTaskAwardReceivedRecordNewService {
         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())) {
-            if (MetaTaskStatus.PROGRESS.equals(metaTaskToUserNew.getStatus()) || MetaTaskStatus.FINISH.equals(metaTaskToUserNew.getStatus())) {
-                return MetaRestResult.returnError(String.format("奖励领取失败:当前任务状态为[%S]", metaTaskToUserNew.getStatus().getDescription()));
-            }
+        } else {
             MetaUserTaskAwardReceivedRecordNew metaUserTaskAwardReceivedRecordNew = metaUserTaskAwardReceivedRecordNewRepo.findByUserIdAndTaskIdAndAtomTaskIdAndDel(userId, taskId, atomTaskId, false);
             if (Objects.nonNull(metaUserTaskAwardReceivedRecordNew)) {
                 return MetaRestResult.returnError("奖励领取失败:用户已经领取过该任务奖励,不可重复领取!");

+ 16 - 10
src/main/java/com/izouma/nineth/service/MetaUserTaskProgressNewService.java

@@ -98,17 +98,16 @@ public class MetaUserTaskProgressNewService {
             MetaUserTaskProgressNew dbMetaUserTaskProgressNew = metaUserTaskProgressNewRepo.findByMetaTaskToUserNewIdAndDelAndCreatedAtAfter(metaUserTaskProgressNew.getMetaTaskToUserNewId(), false, LocalDateTime.now().withHour(0).withMinute(0).withSecond(0));
             if (Objects.isNull(dbMetaUserTaskProgressNew)) {
                 metaUserTaskProgressNewRepo.save(metaUserTaskProgressNew);
-                // 该类型任务不存在完成
-                return MetaRestResult.returnSuccess(Integer.parseInt(metaUserTaskProgressNew.getRemark()) >= Integer.parseInt(value));
+            } else {
+                int remark = Integer.parseInt(metaUserTaskProgressNew.getRemark()) + Integer.parseInt(dbMetaUserTaskProgressNew.getRemark());
+                dbMetaUserTaskProgressNew.setRemark(String.valueOf(remark));
+                dbMetaUserTaskProgressNew.setProgressTime(LocalDateTime.now());
+                metaUserTaskProgressNewRepo.save(dbMetaUserTaskProgressNew);
             }
-            int remark = Integer.parseInt(metaUserTaskProgressNew.getRemark()) + Integer.parseInt(dbMetaUserTaskProgressNew.getRemark());
-            dbMetaUserTaskProgressNew.setRemark(String.valueOf(remark));
-            dbMetaUserTaskProgressNew.setProgressTime(LocalDateTime.now());
-            metaUserTaskProgressNewRepo.save(dbMetaUserTaskProgressNew);
-            return MetaRestResult.returnSuccess(Integer.parseInt(metaUserTaskProgressNew.getRemark()) >= Integer.parseInt(value));
-        }
-        // 保存进度
-        metaUserTaskProgressNewRepo.save(metaUserTaskProgressNew);
+        } else {
+            // 保存进度
+            metaUserTaskProgressNewRepo.save(metaUserTaskProgressNew);
+        }
         List<MetaUserTaskProgressNew> metaUserTaskProgressNews = metaUserTaskProgressNewRepo.findAllByMetaTaskToUserNewIdAndDel(metaUserTaskProgressNew.getMetaTaskToUserNewId(), false);
         // 是否完成任务
         switch (metaAtomTask.getTargetType()) {
@@ -127,6 +126,13 @@ public class MetaUserTaskProgressNewService {
                     return MetaRestResult.returnSuccess(true);
                 }
                 return MetaRestResult.returnSuccess(false);
+            case ON_LINE_TIME_DAILY:
+                MetaUserTaskProgressNew dbMetaUserTaskProgressNew = metaUserTaskProgressNewRepo.findByMetaTaskToUserNewIdAndDelAndCreatedAtAfter(metaUserTaskProgressNew.getMetaTaskToUserNewId(), false, LocalDateTime.now().withHour(0).withMinute(0).withSecond(0));
+                if (Integer.parseInt(dbMetaUserTaskProgressNew.getRemark()) >= Integer.parseInt(value)) {
+                    completeTask(metaTaskToUserNew);
+                    return MetaRestResult.returnSuccess(true);
+                }
+                return MetaRestResult.returnSuccess(false);
             default:
                 throw new BusinessException(String.format("不存在的任务类型[%S]", metaAtomTask.getTargetType()));
         }