project_quota.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. from pydantic import BaseModel
  2. from typing import Optional
  3. from datetime import datetime
  4. from core.models import ProjectQuotaModel
  5. class ProjectQuotaDto(BaseModel):
  6. """项目定额DTO"""
  7. id: Optional[int] = None
  8. task_id: Optional[int] = None
  9. project_id: str
  10. budget_id: int
  11. budget_code: Optional[str] = None
  12. item_id: int
  13. item_code: str
  14. quota_id: Optional[int] = 0
  15. quota_code: Optional[str] = None
  16. quota_adjustment: Optional[str] = None
  17. entry_name: Optional[str] = None
  18. units: Optional[str] = None
  19. amount: Optional[float] = None
  20. ex_file: Optional[str] = None
  21. ex_cell: Optional[str] = None
  22. ex_row: Optional[str] = None
  23. ex_unit: Optional[str] = None
  24. ex_amount: Optional[float] = None
  25. note: Optional[str] = None
  26. is_change: int = 1
  27. send_status: int = 0
  28. send_time: Optional[datetime] = None
  29. send_error: Optional[str] = None
  30. created_at: Optional[datetime] = None
  31. created_by: Optional[str] = None
  32. updated_at: Optional[datetime] = None
  33. updated_by: Optional[str] = None
  34. sequence_number: Optional[int] = None
  35. @classmethod
  36. def from_model(cls, model: ProjectQuotaModel) -> "ProjectQuotaDto":
  37. """从数据库模型创建DTO对象"""
  38. return cls(
  39. id=model.id,
  40. task_id=model.task_id,
  41. project_id=model.project_id,
  42. budget_id=model.budget_id,
  43. budget_code=model.budget_code,
  44. item_id=model.item_id,
  45. item_code=model.item_code,
  46. quota_id=model.quota_id,
  47. quota_code=model.quota_code,
  48. quota_adjustment=model.quota_adjustment,
  49. entry_name=model.entry_name,
  50. units=model.units,
  51. amount=model.amount,
  52. ex_file=model.ex_file,
  53. ex_cell=model.ex_cell,
  54. ex_row=model.ex_row,
  55. ex_unit=model.ex_unit,
  56. ex_amount=model.ex_amount,
  57. note=model.note,
  58. is_change=model.is_change,
  59. send_status=model.send_status,
  60. send_time=model.send_time,
  61. send_error=model.send_error,
  62. created_at=model.created_at,
  63. created_by=model.created_by,
  64. updated_at=model.updated_at,
  65. updated_by=model.updated_by,
  66. )
  67. def to_dict(self) -> dict:
  68. """转换为字典格式"""
  69. return self.model_dump()
  70. @classmethod
  71. def ai_prompt_struct(cls):
  72. return """```typescript
  73. export interface input_struct { //输入数据结构体
  74. i: // ID
  75. n: string; //工程或费用项目名称
  76. u:string; //单位
  77. q: float; //数量
  78. }
  79. export interface item { //需返回的结构体
  80. i: int; // ID 与提供的ID保持一致
  81. q: string; // 定额编号
  82. u:string; // 定额单位
  83. p: float; // 定额单价
  84. tp: float; // 总价
  85. }
  86. ```
  87. """
  88. @classmethod
  89. def from_ai_dict(cls, data: dict):
  90. return cls(
  91. project_id="",
  92. budget_id=0,
  93. item_id=0,
  94. item_code="",
  95. id=data.get("i", 0),
  96. quota_code=data.get("q", ""),
  97. units=data.get("u", ""),
  98. )
  99. def to_ai_dict(self):
  100. return {
  101. "i": self.id,
  102. "n": self.entry_name,
  103. "u": self.unit,
  104. "q": self.project_quantity,
  105. }
  106. class Config:
  107. from_attributes = True