diff --git a/internal/db/models/node_task_dao.go b/internal/db/models/node_task_dao.go index a07bdde6..52c039b1 100644 --- a/internal/db/models/node_task_dao.go +++ b/internal/db/models/node_task_dao.go @@ -311,20 +311,30 @@ func (this *NodeTaskDAO) FindAllDoingNodeIds(tx *dbs.Tx, role string) ([]int64, } // ExistsDoingNodeTasks 检查是否有正在执行的任务 -func (this *NodeTaskDAO) ExistsDoingNodeTasks(tx *dbs.Tx, role string) (bool, error) { - return this.Query(tx). +func (this *NodeTaskDAO) ExistsDoingNodeTasks(tx *dbs.Tx, role string, excludeTypes []NodeTaskType) (bool, error) { + var query = this.Query(tx). Attr("role", role). Where("(isDone=0 OR (isDone=1 AND isOk=0))"). - Gt("nodeId", 0). - Exist() + Gt("nodeId", 0) + if len(excludeTypes) > 0 { + for _, excludeType := range excludeTypes { + query.Neq("type", excludeType) + } + } + return query.Exist() } // ExistsErrorNodeTasks 是否有错误的任务 -func (this *NodeTaskDAO) ExistsErrorNodeTasks(tx *dbs.Tx, role string) (bool, error) { - return this.Query(tx). +func (this *NodeTaskDAO) ExistsErrorNodeTasks(tx *dbs.Tx, role string, excludeTypes []NodeTaskType) (bool, error) { + var query = this.Query(tx). Attr("role", role). - Where("(isDone=1 AND isOk=0)"). - Exist() + Where("(isDone=1 AND isOk=0)") + if len(excludeTypes) > 0 { + for _, excludeType := range excludeTypes { + query.Neq("type", excludeType) + } + } + return query.Exist() } // DeleteNodeTask 删除任务 diff --git a/internal/rpc/services/service_node_task.go b/internal/rpc/services/service_node_task.go index dd92a965..557a6c3c 100644 --- a/internal/rpc/services/service_node_task.go +++ b/internal/rpc/services/service_node_task.go @@ -163,13 +163,13 @@ func (this *NodeTaskService) ExistsNodeTasks(ctx context.Context, req *pb.Exists var tx = this.NullTx() // 是否有任务 - existTask, err := models.SharedNodeTaskDAO.ExistsDoingNodeTasks(tx, nodeconfigs.NodeRoleNode) + existTask, err := models.SharedNodeTaskDAO.ExistsDoingNodeTasks(tx, nodeconfigs.NodeRoleNode, req.ExcludeTypes) if err != nil { return nil, err } // 是否有错误 - existError, err := models.SharedNodeTaskDAO.ExistsErrorNodeTasks(tx, nodeconfigs.NodeRoleNode) + existError, err := models.SharedNodeTaskDAO.ExistsErrorNodeTasks(tx, nodeconfigs.NodeRoleNode, req.ExcludeTypes) if err != nil { return nil, err }