|
@@ -1,3 +1,5 @@
|
|
|
+import datetime
|
|
|
+import croniter
|
|
|
import re
|
|
|
from typing import Optional, List
|
|
|
from fastapi import APIRouter
|
|
@@ -27,67 +29,36 @@ router = APIRouter(
|
|
|
def create_jm_job_info(item: schemas.JmJobInfoCreate, db: Session = Depends(get_db)):
|
|
|
jm_job_info,nodes,edges = crud.create_jm_job_info(db, item)
|
|
|
job_id = jm_job_info.id
|
|
|
- if edges is not None and len(edges) > 0:
|
|
|
- nodes_dict = {node['id']:node for node in nodes}
|
|
|
- for node_id in nodes_dict:
|
|
|
- node = nodes_dict[node_id]
|
|
|
- if node['start_point'] == 0:
|
|
|
- next_nodes = format_nodes(nodes_dict,edges,node_id)
|
|
|
- node['child_nodes'] = next_nodes
|
|
|
- node_tree = node
|
|
|
- break
|
|
|
- node = models.JmJobNode(**{
|
|
|
- 'job_id': job_id,
|
|
|
- 'homework_id': node_tree['homework_id'],
|
|
|
- 'homework_name': node_tree['homework_name'],
|
|
|
- 'start_point': node['start_point'],
|
|
|
- })
|
|
|
- node = crud.create_jm_job_node(db,node)
|
|
|
- if edges is not None and len(edges) > 0:
|
|
|
- create_jm_job_node(db,node_tree['child_nodes'], job_id, node.id)
|
|
|
- else:
|
|
|
- node = models.JmJobNode(**{
|
|
|
- 'job_id': job_id,
|
|
|
- 'homework_id': nodes[0]['homework_id'],
|
|
|
- 'homework_name': nodes[0]['homework_name'],
|
|
|
- 'start_point': nodes[0]['start_point'],
|
|
|
- })
|
|
|
- node = crud.create_jm_job_node(db,node)
|
|
|
+ create_jm_job_node(db, nodes, edges, job_id)
|
|
|
return jm_job_info.to_dict()
|
|
|
|
|
|
|
|
|
-def create_jm_job_node(db: Session, nodes, job_id, last_node_id):
|
|
|
+def create_jm_job_node(db: Session, nodes, edges, job_id):
|
|
|
+ uuid_node_id = {}
|
|
|
if nodes is None or len(nodes) == 0:
|
|
|
return
|
|
|
for node in nodes:
|
|
|
- next_node = models.JmJobNode(**{
|
|
|
+ uuid = node['id']
|
|
|
+ node_item = models.JmJobNode(**{
|
|
|
'job_id': job_id,
|
|
|
'homework_id': node['homework_id'],
|
|
|
'homework_name': node['homework_name'],
|
|
|
- 'start_point': node['start_point'],
|
|
|
+ 'start_point': 1,
|
|
|
})
|
|
|
- next_node = crud.create_jm_job_node(db,next_node)
|
|
|
- out_node_id = next_node.id
|
|
|
- edge = models.JmJobEdge(**{
|
|
|
- 'in_node_id': last_node_id,
|
|
|
- 'out_node_id': out_node_id,
|
|
|
+ node_item = crud.create_jm_job_node(db,node_item)
|
|
|
+ node_id = node_item.id
|
|
|
+ uuid_node_id.update({uuid:node_id})
|
|
|
+ if nodes is None or len(nodes) == 0:
|
|
|
+ return
|
|
|
+ for edge in edges:
|
|
|
+ edge_item = models.JmJobEdge(**{
|
|
|
'job_id': job_id,
|
|
|
+ 'in_node_id': uuid_node_id[edge['source']],
|
|
|
+ 'out_node_id': uuid_node_id[edge['target']]
|
|
|
})
|
|
|
- edge = crud.create_jm_job_edge(db,edge)
|
|
|
- create_jm_job_node(db, node['child_nodes'], job_id, out_node_id)
|
|
|
+ edge = crud.create_jm_job_edge(db,edge_item)
|
|
|
return
|
|
|
|
|
|
-
|
|
|
-def format_nodes(nodes_dict,edges: List[schemas.JmJobEdge],last_node: int):
|
|
|
- nodes = []
|
|
|
- for edge in edges:
|
|
|
- if edge['source'] == last_node:
|
|
|
- node = nodes_dict[edge['target']]
|
|
|
- next_nodes = format_nodes(nodes_dict,edges,edge['target'])
|
|
|
- node['child_nodes'] = next_nodes
|
|
|
- nodes.append(node)
|
|
|
- return nodes
|
|
|
-
|
|
|
@router.get("/")
|
|
|
@web_try()
|
|
|
@sxtimeit
|
|
@@ -108,16 +79,6 @@ def get_jm_job_info(jm_job_id: int, db: Session = Depends(get_db)):
|
|
|
jm_job = crud.get_jm_job_info(db,jm_job_id)
|
|
|
jm_job_dict = jm_job.to_dict()
|
|
|
nodes = crud.get_one_job_nodes(db,jm_job_id)
|
|
|
- edges = crud.get_one_job_edges(db,jm_job_id)
|
|
|
- edges_list = [
|
|
|
- {
|
|
|
- 'id': edge.id,
|
|
|
- 'job_id': edge.job_id,
|
|
|
- 'source': edge.in_node_id,
|
|
|
- 'target': edge.out_node_id,
|
|
|
- }
|
|
|
- for edge in edges
|
|
|
- ]
|
|
|
cron_type, cron_select_type, cron_expression = jm_job_dict['cron_type'], jm_job_dict['cron_select_type'], jm_job_dict['cron_expression']
|
|
|
cron_expression_dict = {}
|
|
|
if cron_type == 2:
|
|
@@ -129,7 +90,6 @@ def get_jm_job_info(jm_job_id: int, db: Session = Depends(get_db)):
|
|
|
|
|
|
jm_job_dict.update({
|
|
|
'nodes': nodes,
|
|
|
- 'edges': edges_list,
|
|
|
'cron_expression_dict': cron_expression_dict
|
|
|
})
|
|
|
return jm_job_dict
|
|
@@ -141,32 +101,8 @@ def update_jm_job_info(item: schemas.JmJobInfoUpdate, db: Session = Depends(get_
|
|
|
jm_job_info,nodes,edges = crud.update_jm_job_info(db, item)
|
|
|
job_id = jm_job_info.id
|
|
|
crud.delete_job_node(db, job_id)
|
|
|
- if edges is not None and len(edges) > 0:
|
|
|
- nodes_dict = {node['id']:node for node in nodes}
|
|
|
- for node_id in nodes_dict:
|
|
|
- node = nodes_dict[node_id]
|
|
|
- if node['start_point'] == 0:
|
|
|
- next_nodes = format_nodes(nodes_dict,edges,node_id)
|
|
|
- node['child_nodes'] = next_nodes
|
|
|
- node_tree = node
|
|
|
- break
|
|
|
- node = models.JmJobNode(**{
|
|
|
- 'job_id': job_id,
|
|
|
- 'homework_id': node_tree['homework_id'],
|
|
|
- 'homework_name': node_tree['homework_name'],
|
|
|
- 'start_point': node['start_point'],
|
|
|
- })
|
|
|
- node = crud.create_jm_job_node(db,node)
|
|
|
- if edges is not None and len(edges) > 0:
|
|
|
- create_jm_job_node(db,node_tree['child_nodes'], job_id, node.id)
|
|
|
- else:
|
|
|
- node = models.JmJobNode(**{
|
|
|
- 'job_id': job_id,
|
|
|
- 'homework_id': nodes[0]['homework_id'],
|
|
|
- 'homework_name': nodes[0]['homework_name'],
|
|
|
- 'start_point': nodes[0]['start_point'],
|
|
|
- })
|
|
|
- node = crud.create_jm_job_node(db,node)
|
|
|
+ job_id = jm_job_info.id
|
|
|
+ create_jm_job_node(db, nodes, edges, job_id)
|
|
|
return jm_job_info.to_dict()
|
|
|
|
|
|
@router.delete("/")
|
|
@@ -189,4 +125,31 @@ def execute_jm_job(jm_job_id: int, db: Session = Depends(get_db)):
|
|
|
if jm_job.status == 0:
|
|
|
raise Exception('任务已被停用')
|
|
|
# 进行api调用
|
|
|
- return jm_job
|
|
|
+ return jm_job
|
|
|
+
|
|
|
+
|
|
|
+@router.post("/cron_expression")
|
|
|
+@web_try()
|
|
|
+@sxtimeit
|
|
|
+def get_cron_expression(cron_expression: schemas.CronExpression):
|
|
|
+ print(cron_expression)
|
|
|
+ cron = joint_cron_expression(cron_expression)
|
|
|
+ return cron
|
|
|
+
|
|
|
+@router.get("/cron_next_execute")
|
|
|
+@web_try()
|
|
|
+@sxtimeit
|
|
|
+def get_cron_next_execute(cron_expression: str):
|
|
|
+ execute_list = run_get_next_time(cron_expression)
|
|
|
+ return execute_list
|
|
|
+
|
|
|
+
|
|
|
+def run_get_next_time(cron_expression):
|
|
|
+ now = datetime.datetime.now()
|
|
|
+ cron_str = cron_expression.replace('?','*')
|
|
|
+ cron = croniter.croniter(cron_str, now)
|
|
|
+ execute_list = []
|
|
|
+ for i in range(0, 5):
|
|
|
+ next_time = cron.get_next(datetime.datetime).strftime("%Y-%m-%d %H:%M")
|
|
|
+ execute_list.append(next_time)
|
|
|
+ return execute_list
|