package com.estate.expert.admin.domain.exam.task.check; import com.estate.expert.admin.domain.common.EntityBaseRepository; import com.estate.expert.admin.domain.plan.PlanState; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.util.List; public interface CheckTaskRepository extends EntityBaseRepository { @Query("select t from CheckTask t where t.plan.id = :planId and ( t.state >= 3 ) " + "and t.deleted = false order by t.id desc") List listClosedTasks(Integer planId); @Query("select t from CheckTask t where (coalesce(:planIds, null) is null or t.plan.id in :planIds) " + "and ( t.state >= 3 ) " + "and t.deleted = false order by t.id desc") List listClosedTasks(List planIds); /** * 查询我的任务 * 其中包括,plan.creatorId = userId * groupLeaders 中包含 userId * groupMembers 中包含 userId * drivers 中包含 userId * creatorId = userId */ @Query("select t from CheckTask t where t.deleted = false " + "and ( :planId is null or t.plan.id = :planId ) " + "and ( t.creator.id = :userId " + "or :userId in (select g.id from t.groupLeaders g) " + "or :userId in (select g.id from t.groupMembers g) " + "or :userId in (select g.id from t.drivers g) " + "or :userId = t.plan.creator.id) " + "order by t.id desc") List listMyTasks(Integer userId, Integer planId); @Query("select t from CheckTask t where t.deleted = false " + "and t.state != 3 and t.state != 7 " + "and t.plan.deleted = false " + "and (t.creator.id = :userId " + "or :userId in (select g.id from t.groupLeaders g) " + "or :userId in (select g.id from t.groupMembers g) " + "or :userId in (select g.id from t.drivers g) " + "or :userId = t.plan.creator.id)" + "order by t.id desc") List listMyToDoTasks(Integer userId); @Query("select t.plan.id from CheckTask t where t.deleted = false and (t.creator.id = :userId " + "or :userId in (select g.id from t.groupLeaders g) " + "or :userId in (select g.id from t.groupMembers g) " + "or :userId in (select g.id from t.drivers g)) " + "or :userId = t.plan.creator.id " + "order by t.id desc") List listMyTaskPlans(Integer userId); List findAllByPlanIdAndDeleted(Integer planId, boolean deleted); CheckTask getFirstByPlanIdAndProjectIdAndDeleted(Integer planId, Integer projectId, boolean deleted); @Query("select t.id from CheckTask t " + "where t.deleted = false " + "and t.project.id = :projectId " + "and t.plan.deleted = false " + "and t.plan.state = :planState") List listTaskIdsByProjectAndPlanState(@Param("projectId") Integer projectId, @Param("planState") PlanState planState); @Query("select t.id from CheckTask t " + "where t.deleted = false " + "and t.project.id = :projectId " + "and t.project.client.id = :clientId " + "and t.plan.deleted = false " + "and t.plan.state = :planState") List listTaskIdsByProjectAndClientAndPlanState(@Param("projectId") Integer projectId, @Param("clientId") Integer clientId, @Param("planState") PlanState planState); @Query("select t.id from CheckTask t " + "where t.deleted = false " + "and t.project.id = :projectId " + "and t.project.client.id = :clientId " + "and t.plan.deleted = false") List listTaskIdsByProjectAndClient(@Param("projectId") Integer projectId, @Param("clientId") Integer clientId); @Query("select t from CheckTask t " + "where t.deleted = false " + "and t.project.id = :projectId " + "and t.project.client.id = :clientId " + "and t.plan.deleted = false " + "and t.plan.state = :planState") List listByProjectAndClientAndPlanState(@Param("projectId") Integer projectId, @Param("clientId") Integer clientId, @Param("planState") PlanState planState); @Query("select t from CheckTask t " + "where t.deleted = false " + "and t.project.id = :projectId " + "and t.project.client.id = :clientId " + "and t.plan.deleted = false " + "and t.state >= 3") List listClosedByProjectAndClient(@Param("projectId") Integer projectId, @Param("clientId") Integer clientId); }