sunkean hace 2 años
padre
commit
4ed9066001

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

@@ -22,6 +22,9 @@ public interface MetaTaskNewRepo extends JpaRepository<MetaTaskNew, Long>, JpaSp
 
     List<MetaTaskNew> findAllByPublishAndDel(boolean publish, boolean del);
 
+    @Query("select m.id from MetaTaskNew m where m.publish = true and m.del = false")
+    List<Long> findIdByPublishAndDel();
+
     @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);
 }

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

@@ -16,6 +16,6 @@ public interface MetaTaskToUserNewRepo extends JpaRepository<MetaTaskToUserNew,
 
     MetaTaskToUserNew findByIdAndDel(Long id, boolean del);
 
-    List<MetaTaskToUserNew> findAllByUserIdAndChannelIdAndStatusAndDel(Long userId, Long channelId, MetaTaskStatus status, boolean del);
+    List<MetaTaskToUserNew> findAllByUserIdAndChannelIdAndStatusAndDelAndTaskIdIn(Long userId, Long channelId, MetaTaskStatus status, boolean del, List<Long> taskIds);
 
 }

+ 6 - 3
src/main/java/com/izouma/nineth/service/MetaTaskToUserNewService.java

@@ -22,6 +22,7 @@ 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;
 
@@ -141,8 +142,10 @@ public class MetaTaskToUserNewService {
     }
 
     public MetaRestResult<List<MetaTaskToUserNew>> findByStatus(Long userId, Long channelId, MetaTaskStatus status) {
-        List<MetaTaskToUserNew> metaTaskToUsers = metaTaskToUserNewRepo
-                .findAllByUserIdAndChannelIdAndStatusAndDel(userId, channelId, status, false);
+        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);
@@ -286,7 +289,7 @@ public class MetaTaskToUserNewService {
      * @param metaTaskNew 任务信息
      * @return result
      */
-    private MetaServiceResult checkMetaTaskNew(MetaTaskNew metaTaskNew) {
+    public MetaServiceResult checkMetaTaskNew(MetaTaskNew metaTaskNew) {
         if (Objects.isNull(metaTaskNew)) {
             return MetaServiceResult.returnError("任务不存在");
         }

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

@@ -33,6 +33,7 @@ public class MetaUserTaskProgressNewService {
     private MetaAtomTaskRepo            metaAtomTaskRepo;
     private MetaTaskToUserNewService    metaTaskToUserNewService;
     private MetaTaskBindRepo            metaTaskBindRepo;
+    private MetaTaskNewRepo             metaTaskNewRepo;
 
     public Page<MetaUserTaskProgressNew> all(PageQuery pageQuery) {
         return metaUserTaskProgressNewRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaUserTaskProgressNew.class), JpaUtils.toPageRequest(pageQuery));
@@ -40,12 +41,12 @@ public class MetaUserTaskProgressNewService {
 
     @Transactional
     public MetaRestResult<Boolean> metaSave(MetaUserTaskProgressNew metaUserTaskProgressNew) {
-        // 校验参数
+        // 校验进度模型参数
         MetaServiceResult result = checkParams(metaUserTaskProgressNew);
         if (!result.isSuccess()) {
             return MetaRestResult.returnError(result.getMessage());
         }
-        // 任务领取记录
+        // 校验任务领取记录
         MetaTaskToUserNew metaTaskToUserNew = metaTaskToUserNewRepo.findByIdAndDel(metaUserTaskProgressNew.getMetaTaskToUserNewId(), false);
         if (Objects.isNull(metaTaskToUserNew)) {
             return MetaRestResult.returnError("无用户领取任务记录");
@@ -53,7 +54,13 @@ public class MetaUserTaskProgressNewService {
         if (!metaTaskToUserNew.getStatus().equals(MetaTaskStatus.PROGRESS)) {
             return MetaRestResult.returnError(String.format("状态错误:当前任务状态为[%S]", metaTaskToUserNew.getStatus().getDescription()));
         }
-        // 基础任务
+        // 校验任务
+        MetaTaskNew metaTaskNew = metaTaskNewRepo.findByIdAndDel(metaTaskToUserNew.getTaskId(), false);
+        MetaServiceResult checkMetaTaskNewResult = metaTaskToUserNewService.checkMetaTaskNew(metaTaskNew);
+        if (!checkMetaTaskNewResult.isSuccess()) {
+            return MetaRestResult.returnError(checkMetaTaskNewResult.getMessage());
+        }
+        // 校验基础任务
         MetaAtomTask metaAtomTask = metaAtomTaskRepo.findByIdAndDel(metaTaskToUserNew.getAtomTaskId(), false);
         if (Objects.isNull(metaAtomTask)) {
             return MetaRestResult.returnError("基础任务信息为空");