project_task.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from pydantic import BaseModel
  2. from typing import Optional
  3. from datetime import datetime
  4. from ..models import ProjectTaskModel
  5. class ProjectTaskDto(BaseModel):
  6. """项目任务DTO"""
  7. id: Optional[int] = None
  8. task_name: str
  9. task_sort: int = 0
  10. task_desc: Optional[str] = None
  11. is_cover: Optional[int] = 0
  12. project_id: str
  13. budget_id: Optional[int] = 0
  14. item_id: int
  15. item_code: Optional[str] = None
  16. file_path: Optional[str] = None
  17. process_status: Optional[int] = 0
  18. process_time: Optional[datetime] = None
  19. process_error: Optional[str] = None
  20. send_status: Optional[int] = 0
  21. send_time: Optional[datetime] = None
  22. send_error: Optional[str] = None
  23. is_del: Optional[int] = 0
  24. deleted_by: Optional[str] = None
  25. deleted_at: Optional[datetime] = None
  26. created_by: Optional[str] = None
  27. created_at: Optional[datetime] = None
  28. updated_by: Optional[str] = None
  29. updated_at: Optional[datetime] = None
  30. @classmethod
  31. def from_model(cls, model: ProjectTaskModel) -> 'ProjectTaskDto':
  32. """从数据库模型创建DTO对象"""
  33. return cls(
  34. id=model.id,
  35. task_name=model.task_name,
  36. task_sort=model.task_sort,
  37. task_desc=model.task_desc,
  38. is_cover=model.is_cover,
  39. project_id=model.project_id,
  40. budget_id=model.budget_id,
  41. item_id=model.item_id,
  42. item_code=model.item_code,
  43. file_path=model.file_path,
  44. process_status=model.process_status,
  45. process_time=model.process_time,
  46. process_error=model.process_error,
  47. send_status=model.send_status,
  48. send_time=model.send_time,
  49. send_error=model.send_error,
  50. is_del=model.is_del,
  51. deleted_by=model.deleted_by,
  52. deleted_at=model.deleted_at,
  53. created_by=model.created_by,
  54. created_at=model.created_at,
  55. updated_by=model.updated_by,
  56. updated_at=model.updated_at
  57. )
  58. @classmethod
  59. def from_dict(cls, data: dict) -> 'ProjectTaskDto':
  60. """从字典创建DTO对象"""
  61. # if 'budget_id' in data and 'budget_id' not in data:
  62. # data['budget_id'] = data.pop('budget_id')
  63. return cls(**data)
  64. def to_dict(self) -> dict:
  65. """转换为字典格式"""
  66. return self.model_dump()
  67. def get_path(self):
  68. return f"{self.project_id}_{self.item_id}({self.item_code})_{self.id}/{datetime.now().strftime('%Y%m%d%H%M%S')}"
  69. class Config:
  70. from_attributes = True