project.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from pydantic import BaseModel
  2. from typing import Optional
  3. from datetime import datetime
  4. from ..models import ProjectModel
  5. class ProjectDto(BaseModel):
  6. """项目信息DTO"""
  7. project_id: Optional[str] = None
  8. project_name: str
  9. project_manager: Optional[str] = None
  10. design_stage: Optional[str] = None
  11. project_desc: Optional[str] = None
  12. short_name: Optional[str] = None
  13. project_type: Optional[str] = None
  14. project_version: Optional[str] = None
  15. unit: Optional[str] = None
  16. create_time: Optional[datetime] = None
  17. # compilation_method: Optional[str] = None
  18. # compilation_scope: Optional[str] = None
  19. # total_engineering: Optional[float] = None
  20. # total_budget: Optional[float] = None
  21. # budget_index: Optional[float] = None
  22. # standard_quota: Optional[str] = None
  23. # train_transport_standard: Optional[str] = None
  24. # material_library: Optional[str] = None
  25. # work_shift_library: Optional[str] = None
  26. # equipment_library: Optional[str] = None
  27. # review_status: Optional[int] = None
  28. # years_to_construction: Optional[int] = None
  29. # project_password: Optional[str] = None
  30. # railway_grade: Optional[str] = None
  31. # main_line_count: Optional[int] = None
  32. # traction_type: Optional[str] = None
  33. # blocking_mode: Optional[str] = None
  34. # station_count: Optional[str] = None
  35. # target_speed: Optional[int] = None
  36. # print_compilation_review: Optional[bool] = None
  37. # unit_conversion: Optional[bool] = None
  38. # completion_status: Optional[str] = None
  39. @classmethod
  40. def from_model(cls, model: ProjectModel) -> 'ProjectDto':
  41. """从数据库模型创建DTO对象"""
  42. return cls(
  43. project_id=model.project_id,
  44. project_name=model.project_name,
  45. project_manager=model.project_manager,
  46. design_stage=model.design_stage,
  47. project_desc=model.project_description,
  48. short_name=model.short_name,
  49. project_type=model.project_type,
  50. project_version=model.project_version,
  51. unit=model.unit,
  52. create_time=model.create_time,
  53. # compilation_method=model.compilation_method,
  54. # compilation_scope=model.compilation_scope,
  55. # total_engineering=model.total_engineering,
  56. # total_budget=model.total_budget,
  57. # budget_index=model.budget_index,
  58. # standard_quota=model.standard_quota,
  59. # train_transport_standard=model.train_transport_standard,
  60. # material_library=model.material_library,
  61. # work_shift_library=model.work_shift_library,
  62. # equipment_library=model.equipment_library,
  63. # review_status=model.review_status,
  64. # years_to_construction=model.years_to_construction,
  65. # project_password=model.project_password,
  66. # railway_grade=model.railway_grade,
  67. # main_line_count=model.main_line_count,
  68. # traction_type=model.traction_type,
  69. # blocking_mode=model.blocking_mode,
  70. # station_count=model.station_count,
  71. # target_speed=model.target_speed,
  72. # print_compilation_review=model.print_compilation_review,
  73. # unit_conversion=model.unit_conversion,
  74. # completion_status=model.completion_status
  75. )
  76. def to_dict(self) -> dict:
  77. """转换为字典格式"""
  78. data = self.model_dump()
  79. if self.create_time:
  80. data['create_time'] = self.create_time.strftime('%Y-%m-%d %H:%M:%S')
  81. return data
  82. class Config:
  83. from_attributes = True