jm_homework.py 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import time
  2. from typing import List
  3. from app import models, schemas
  4. from sqlalchemy.orm import Session
  5. from app.crud.constant import find_and_update
  6. from app.crud.jm_homework_datasource_relation import create_jm_hd_relation, delete_jm_relations, get_jm_relations
  7. def create_jm_homework(db: Session, item: schemas.JmHomeworkCreate):
  8. jm_homework_create = item.dict()
  9. db_item = db.query(models.JmHomework).filter(models.JmHomework.name == jm_homework_create['name'])\
  10. .filter(models.JmHomework.status != 0).first()
  11. if db_item:
  12. raise Exception('作业名称已存在')
  13. relation_list = []
  14. if 'relation_list' in jm_homework_create.keys():
  15. relation_list = jm_homework_create.pop('relation_list')
  16. tag = jm_homework_create['tag']
  17. find_and_update(db, '作业标签', tag)
  18. create_time: int = int(time.time())
  19. db_item = models.JmHomework(**jm_homework_create,**{
  20. 'create_time': create_time,
  21. 'update_time': create_time,
  22. 'status': 1
  23. })
  24. db.add(db_item)
  25. db.commit()
  26. db.refresh(db_item)
  27. if jm_homework_create['type'] == 'Dag' and relation_list is not None:
  28. for relation in relation_list:
  29. create_jm_hd_relation(db, db_item.id, schemas.JmHomeworkDatasourceRelationCreate(**relation))
  30. return db_item.to_dict()
  31. def get_jm_homeworks(db: Session, project_id: str):
  32. res: List[models.JmHomework] = db.query(models.JmHomework)\
  33. .filter(models.JmHomework.project_id == project_id)\
  34. .filter(models.JmHomework.status == 1)\
  35. .order_by(models.JmHomework.create_time.desc()).all()
  36. return res
  37. def get_jm_homework_info(db: Session, homework_id: int):
  38. item = db.query(models.JmHomework)\
  39. .filter(models.JmHomework.id == homework_id).first()
  40. if item.type == 'Dag':
  41. relations = get_jm_relations(db,homework_id)
  42. item.__dict__.update({"hd_relation":relations})
  43. return item
  44. def update_jm_homework(db: Session, id: int, update_item: schemas.JmHomeworkUpdate):
  45. jm_homework_update =update_item.dict(exclude_unset=True)
  46. db_item = db.query(models.JmHomework).filter(models.JmHomework.id == id).first()
  47. if not db_item:
  48. raise Exception('未找到该作业')
  49. db_name_item = db.query(models.JmHomework)\
  50. .filter(models.JmHomework.name == jm_homework_update['name'])\
  51. .filter(models.JmHomework.status != 0)\
  52. .filter(models.JmHomework.id != id).first()
  53. if db_name_item:
  54. raise Exception('作业名称已存在')
  55. relation_list = []
  56. if 'relation_list' in jm_homework_update.keys():
  57. relation_list = jm_homework_update.pop('relation_list')
  58. tag = jm_homework_update['tag']
  59. find_and_update(db, '作业标签', tag)
  60. for k, v in jm_homework_update.items():
  61. setattr(db_item, k, v)
  62. db_item.update_time = int(time.time())
  63. db.commit()
  64. db.flush()
  65. db.refresh(db_item)
  66. delete_jm_relations(db,db_item.id)
  67. if jm_homework_update['type'] == 'Dag' and relation_list is not None:
  68. for relation in relation_list:
  69. create_jm_hd_relation(db, db_item.id, schemas.JmHomeworkDatasourceRelationCreate(**relation))
  70. return db_item.to_dict()
  71. def delete_jm_homework(db: Session, id: int):
  72. db_item = db.query(models.JmHomework).filter(models.JmHomework.id == id).first()
  73. if not db_item:
  74. raise Exception('未找到该作业')
  75. db_item.status = 0
  76. db.commit()
  77. db.flush()
  78. db.refresh(db_item)
  79. return db_item
  80. def get_jm_homeworks_by_ids(db: Session, ids: List[int]):
  81. res: List[models.JmHomework] = db.query(models.JmHomework)\
  82. .filter(models.JmHomework.id.in_(ids)).all()
  83. return res