project_quota.py 2.8 KB

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