project_quota.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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: Optional[str] =None
  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. process_status: int = 0,
  25. process_time: Optional[datetime] = None
  26. process_error: Optional[str] = None
  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. @classmethod
  35. def from_model(cls, model: ProjectQuotaModel) -> 'ProjectQuotaDto':
  36. """从数据库模型创建DTO对象"""
  37. return cls(
  38. id=model.id,
  39. task_id=model.task_id,
  40. project_id=model.project_id,
  41. budget_id=model.budget_id,
  42. budget_code=model.budget_code,
  43. item_id=model.item_id,
  44. item_code=model.item_code,
  45. quota_code=model.quota_code,
  46. entry_name=model.entry_name,
  47. units = model.units,
  48. amount=model.amount,
  49. ex_file=model.ex_file,
  50. ex_cell=model.ex_cell,
  51. ex_row=model.ex_row,
  52. ex_unit=model.ex_unit,
  53. ex_amount=model.ex_amount,
  54. )
  55. def to_dict(self) -> dict:
  56. """转换为字典格式"""
  57. return self.model_dump()
  58. @classmethod
  59. def ai_prompt_struct(cls):
  60. return """```typescript
  61. export interface input_struct { //输入数据结构体
  62. i: // ID
  63. n: string; //工程或费用项目名称
  64. u:string; //单位
  65. q: float; //数量
  66. }
  67. export interface item { //需返回的结构体
  68. i: int; // ID 与提供的ID保持一致
  69. q: string; // 定额编号
  70. u:string; // 定额单位
  71. p: float; // 定额单价
  72. tp: float; // 总价
  73. }
  74. ```
  75. """
  76. @classmethod
  77. def from_ai_dict(cls,data: dict):
  78. return cls(
  79. project_id="",
  80. budget_id=0,
  81. item_id=0,
  82. item_code="",
  83. id=data.get("i",0),
  84. quota_code=data.get("q",""),
  85. units=data.get("u",""),
  86. )
  87. def to_ai_dict(self):
  88. return {
  89. "i": self.id,
  90. "n": self.entry_name,
  91. "u": self.unit,
  92. "q": self.project_quantity,
  93. }
  94. class Config:
  95. from_attributes = True