project_task.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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_desc: Optional[str] = None
  10. project_id: str
  11. budget_id: Optional[int] = 0
  12. item_id: int
  13. item_code: Optional[str] = None
  14. file_path: Optional[str] = None
  15. collect_status: Optional[int] = 0
  16. collect_time: Optional[datetime] = None
  17. collect_error: Optional[str] = None
  18. process_status: Optional[int] = 0
  19. process_time: Optional[datetime] = None
  20. process_error: Optional[str] = None
  21. send_status: Optional[int] = 0
  22. send_time: Optional[datetime] = None
  23. send_error: Optional[str] = None
  24. is_del: Optional[int] = 0
  25. deleted_by: Optional[str] = None
  26. deleted_at: Optional[datetime] = None
  27. created_by: Optional[str] = None
  28. created_at: Optional[datetime] = None
  29. updated_by: Optional[str] = None
  30. updated_at: Optional[datetime] = None
  31. @classmethod
  32. def from_model(cls, model: ProjectTaskModel) -> 'ProjectTaskDto':
  33. """从数据库模型创建DTO对象"""
  34. return cls(
  35. id=model.id,
  36. task_name=model.task_name,
  37. task_desc=model.task_desc,
  38. project_id=model.project_id,
  39. budget_id=model.budget_id,
  40. item_id=model.item_id,
  41. item_code=model.item_code,
  42. file_path=model.file_path,
  43. collect_status=model.collect_status,
  44. collect_time=model.collect_time,
  45. collect_error=model.collect_error,
  46. process_status=model.process_status,
  47. process_time=model.process_time,
  48. process_error=model.process_error,
  49. send_status=model.send_status,
  50. send_time=model.send_time,
  51. send_error=model.send_error,
  52. is_del=model.is_del,
  53. deleted_by=model.deleted_by,
  54. deleted_at=model.deleted_at,
  55. created_by=model.created_by,
  56. created_at=model.created_at,
  57. updated_by=model.updated_by,
  58. updated_at=model.updated_at
  59. )
  60. @classmethod
  61. def from_dict(cls, data: dict) -> 'ProjectTaskDto':
  62. """从字典创建DTO对象"""
  63. if 'budget_id' in data and 'budget_id' not in data:
  64. data['budget_id'] = data.pop('budget_id')
  65. return cls(**data)
  66. def to_dict(self) -> dict:
  67. """转换为字典格式"""
  68. return self.model_dump()
  69. def get_path(self):
  70. return f"{self.project_id}_{self.budget_id}_{self.item_id}_{self.id}"
  71. class Config:
  72. from_attributes = True