Browse Source

同步任务cron表达式

liweiquan 2 years ago
parent
commit
71b28acdf8
3 changed files with 44 additions and 5 deletions
  1. 18 1
      app/crud/job_info.py
  2. 2 0
      app/models/job_info.py
  3. 24 4
      app/schemas/job_info.py

+ 18 - 1
app/crud/job_info.py

@@ -3,10 +3,20 @@ from typing import List
 from app import models, schemas
 from sqlalchemy.orm import Session
 
+from app.utils.cron_utils import *
+
 
 def create_job_info(db: Session, item: schemas.JobInfoCreate):
     create_time: int = int(time.time())
-    db_item = models.JobInfo(**item.dict(), **{
+    item_dict = item.dict()
+    cron_expression_dict = item_dict.pop('cron_expression')
+    cron_expression = joint_cron_expression(schemas.CronExpression(**cron_expression_dict))
+    cron_select_type = cron_expression_dict["cron_select_type"]
+    item_dict.update({
+        'cron_select_type': cron_select_type,
+        'job_cron': cron_expression,
+    })
+    db_item = models.JobInfo(**item_dict, **{
         'trigger_status': 0,
         'create_time': create_time,
         'update_time': create_time,
@@ -32,6 +42,13 @@ def update_job_info(db: Session, id: int, update_item: schemas.JobInfoUpdate):
     if not db_item:
         raise Exception('未找到该任务')
     update_dict = update_item.dict(exclude_unset=True)
+    cron_expression_dict = update_dict.pop('cron_expression')
+    cron_expression = joint_cron_expression(schemas.CronExpression(**cron_expression_dict))
+    cron_select_type = cron_expression_dict["cron_select_type"]
+    update_dict.update({
+        'cron_select_type': cron_select_type,
+        'job_cron': cron_expression,
+    })
     for k, v in update_dict.items():
         setattr(db_item, k, v)
     db_item.update_time = int(time.time())

+ 2 - 0
app/models/job_info.py

@@ -7,6 +7,8 @@ class JobInfo(BaseModel):
     __tablename__ = "job_info"
 
     id = Column(Integer, primary_key=True, index=True)
+    # 选择周期类型(0:时,1:日,2:周,3:月,4:cron)
+    cron_select_type = Column(Integer)
     # 任务执行CRON
     job_cron = Column(String, nullable=False, index=True)
     # 任务描述

+ 24 - 4
app/schemas/job_info.py

@@ -2,9 +2,11 @@ from typing import List, Optional
 
 from pydantic import BaseModel
 
+from app.schemas.cron_expression import CronExpression
+
 class JobInfoBase(BaseModel):
-    # 任务执行CRON
-    job_cron: str
+    # 周期表达式
+    cron_expression: CronExpression
     # 任务描述
     job_desc: str
     # 执行器路由策略
@@ -36,7 +38,15 @@ class JobInfoCreate(JobInfoBase):
     class Config:
         schema_extra = {
             "example": {
-                "job_cron": "0 0/2 * * * ?",
+                "cron_expression": {
+                    "cron_select_type": 3,
+                    "cron_expression": "",
+                    "minute": 0,
+                    "hour": 0,
+                    "day": 1,
+                    "week": 3,
+                    "month": 2,
+                },
                 "job_desc": "mysql-mysql同步",
                 "executor_route_strategy": "FIRST",
                 "executor_handler": "",
@@ -58,7 +68,15 @@ class JobInfoUpdate(JobInfoBase):
     class Config:
         schema_extra = {
             "example": {
-                "job_cron": "0 0/2 * * * ?",
+                "cron_expression": {
+                    "cron_select_type": 3,
+                    "cron_expression": "",
+                    "minute": 0,
+                    "hour": 0,
+                    "day": 1,
+                    "week": 3,
+                    "month": 2,
+                },
                 "job_desc": "mysql-mysql同步",
                 "executor_route_strategy": "FIRST",
                 "executor_handler": "",
@@ -95,6 +113,8 @@ class JobInfo(JobInfoBase):
     job_json: str
     # 最近一次执行状态
     last_handle_code: int
+    # 运行周期
+    job_cron: str
 
     class Config:
         orm_mode = True