tasks.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. from fastapi import APIRouter, Depends, HTTPException, UploadFile
  2. from sqlalchemy.orm import Session
  3. from sqlalchemy.sql import select, or_, and_, func,distinct
  4. from db.schemas import KgTask,KgProj,KgProjCreate,KgTaskCreate,KgTaskUpdate
  5. from db.models import DbKgProj,DbKgTask
  6. from db.database import get_db
  7. from models.response import ResponseModel
  8. from utils.response import resp_200
  9. from typing import List
  10. from datetime import datetime
  11. from math import ceil
  12. from config.site import FILE_STORAGE_PATH
  13. import os
  14. import json
  15. router = APIRouter()
  16. def create_task( proj_id, task_category, content: str,db:Session):
  17. data = DbKgTask()
  18. data.proj_id = proj_id
  19. data.task_category = task_category
  20. data.task_log = ""
  21. data.task_content = content
  22. data.status = 0
  23. data.created = datetime.now()
  24. data.updated = datetime.now()
  25. db.add(data)
  26. db.commit()
  27. db.refresh(data)
  28. return data
  29. #获取所有标注项目
  30. @router.get("/api/proj-all")
  31. def get_all_projects(db: Session = Depends(get_db)):
  32. result = db.query(DbKgProj).filter(DbKgProj.status>=0, DbKgProj.proj_category=='LABELING').all()
  33. data = [KgProj.model_validate(item) for item in result]
  34. projs = [d.model_dump() for d in data]
  35. for proj in projs:
  36. proj.pop("proj_conf")
  37. return resp_200(data={'records': projs})
  38. #搜索标注项目
  39. @router.get("/api/proj-search/{proj_category}/{query}")
  40. def search_projects(proj_category:str, query:str, db: Session = Depends(get_db)):
  41. result = db.query(DbKgProj).filter(DbKgProj.status>=0,
  42. DbKgProj.proj_category==proj_category,
  43. DbKgProj.proj_name.ilike('%'+query+'%')).all()
  44. data = [KgProj.model_validate(item) for item in result]
  45. projs = [d.model_dump() for d in data]
  46. for proj in projs:
  47. proj.pop("proj_conf")
  48. return resp_200(data={'records': projs})
  49. @router.get("/api/proj-task/{proj_id}/{page}/{page_size}")
  50. def search_projects(proj_id: int, page:int, page_size:int, db: Session = Depends(get_db)):
  51. count = db.query(DbKgTask).filter(DbKgTask.proj_id==proj_id).count()
  52. total_page = ceil(count / page_size)
  53. start = 1
  54. if page <= total_page:
  55. start = (page-1) * page_size
  56. results = db.query(DbKgTask).filter(DbKgTask.proj_id==proj_id).order_by(DbKgTask.created).limit(page_size).offset(start).all()
  57. codes = [KgTask.model_validate(node) for node in results]
  58. return resp_200(data= {"total":count,"total_page":total_page, "pages": page, "size":page_size, "records":[item.model_dump() for item in codes]})
  59. @router.get("/api/tasks/{category}/{page}/{page_size}")
  60. def get_all_tasks(category:str, page:int, page_size:int, db: Session = Depends(get_db)):
  61. count = db.query(DbKgTask).filter(DbKgTask.task_category==category).count()
  62. total_page = ceil(count / page_size)
  63. start = 1
  64. if page <= total_page:
  65. start = (page-1) * page_size
  66. results = db.query(DbKgTask).filter(DbKgTask.task_category==category).order_by(DbKgTask.created).limit(page_size).offset(start).all()
  67. codes = [KgTask.model_validate(node) for node in results]
  68. return resp_200(data= {"total":count, "pages": page, "size":page_size, "records":[item.model_dump() for item in codes]})
  69. @router.get("/api/task-get/{task_id}")
  70. def get_all_tasks(task_id:int, db: Session = Depends(get_db)):
  71. data = db.query(DbKgTask).filter(DbKgTask.id == task_id).first()
  72. tasks = []
  73. if data:
  74. tasks.append(KgTask.model_validate(data) )
  75. return resp_200(data= {"records":[item.model_dump() for item in tasks]})
  76. @router.post("/api/task-update")
  77. def update_task(data: KgTaskUpdate, db: Session = Depends(get_db)):
  78. db.query(DbKgTask).filter(DbKgTask.id == data.id).update({"task_log":data.task_log})
  79. db.commit()
  80. return resp_200(data={"error_code":0, "error_message":""})
  81. @router.post("/api/task-create")
  82. def proj_create_task(task:KgTaskCreate,db: Session = Depends(get_db)):
  83. data = DbKgTask()
  84. data.proj_id = task.proj_id
  85. data.task_category = task.task_category
  86. data.task_name = task.task_name
  87. data.task_log = ""
  88. data.task_content = task.task_content
  89. data.status = 0
  90. data.created = datetime.now()
  91. data.updated = datetime.now()
  92. db.add(data)
  93. db.commit()
  94. db.refresh(data)
  95. return resp_200(data={'id': data.id, "error_code":0, "error_message":""})
  96. #创建标注项目
  97. @router.post("/api/proj-create")
  98. def create_proj(proj:KgProjCreate,db: Session = Depends(get_db)):
  99. data = DbKgProj()
  100. data.proj_category = proj.proj_category
  101. data.proj_type = proj.proj_type
  102. data.proj_name = proj.proj_name
  103. data.proj_conf = proj.proj_conf
  104. data.status = 0
  105. data.created = datetime.now()
  106. data.updated = datetime.now()
  107. db.add(data)
  108. db.commit()
  109. db.refresh(data)
  110. return resp_200(data={'id': data.id, "error_code":0, "error_message":""})
  111. @router.get("/api/proj/{proj_id}")
  112. def get_proj(proj_id: int, db: Session=Depends(get_db)):
  113. data = db.query(DbKgProj).filter(DbKgProj.id == proj_id).first()
  114. projs = []
  115. projs.append(KgProj.model_validate(data) )
  116. return resp_200(data= {"records":[item.model_dump() for item in projs]})
  117. @router.post("/api/proj-update")
  118. def update_proj_conf(proj:KgProj, db: Session=Depends(get_db)):
  119. db.query(DbKgProj).filter(DbKgProj.id == proj.id).update({"proj_conf":proj.proj_conf, "proj_name":proj.proj_name})
  120. db.commit()
  121. return resp_200(data= {"records":[proj.model_dump()]})
  122. task_router = router