entity.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. from typing import Optional, List, Annotated
  2. from datetime import datetime
  3. from ruoyi_common.base.model import BaseEntity
  4. from pydantic import ConfigDict, field_validator, model_validator, Field, BeforeValidator
  5. from ruoyi_common.utils.base import DateUtil
  6. from pydantic import BaseModel
  7. from ruoyi_common.base.transformer import to_datetime
  8. import json
  9. class GenTable(BaseEntity):
  10. """
  11. 代码生成业务表
  12. """
  13. model_config = ConfigDict(
  14. from_attributes=True,
  15. json_encoders = {
  16. datetime: lambda v: v.strftime(DateUtil.YYYY_MM_DD_HH_MM_SS) if v else None
  17. }
  18. )
  19. table_id: Optional[int] = Field(None, alias='tableId')
  20. table_name: Optional[str] = Field(None, alias='tableName')
  21. table_comment: Optional[str] = Field(None, alias='tableComment')
  22. sub_table_name: Optional[str] = Field(None, alias='subTableName')
  23. sub_table_fk_name: Optional[str] = Field(None, alias='subTableFkName')
  24. class_name: Optional[str] = Field(None, alias='className')
  25. tpl_category: Optional[str] = Field("crud", alias='tplCategory')
  26. package_name: Optional[str] = Field(None, alias='packageName')
  27. module_name: Optional[str] = Field(None, alias='moduleName')
  28. business_name: Optional[str] = Field(None, alias='businessName')
  29. function_name: Optional[str] = Field(None, alias='functionName')
  30. function_author: Optional[str] = Field(None, alias='functionAuthor')
  31. gen_type: Optional[str] = Field("0", alias='genType')
  32. gen_path: Optional[str] = Field("/", alias='genPath')
  33. options: Optional[str] = Field("{}", alias='options')
  34. create_by: Optional[str] = Field("", alias='createBy')
  35. create_time: Optional[datetime] = Field(None, alias='createTime')
  36. update_by: Optional[str] = Field("", alias='updateBy')
  37. update_time: Optional[datetime] = Field(None, alias='updateTime')
  38. remark: Optional[str] = None
  39. columns: Optional[List['GenTableColumn']] = None
  40. pk_column: Optional['GenTableColumn'] = Field(None, alias='pkColumn')
  41. # 添加tree相关字段
  42. tree_name: Optional[str] = Field(None, alias='treeName')
  43. tree_code: Optional[str] = Field(None, alias='treeCode')
  44. tree_parent_code: Optional[str] = Field(None, alias='treeParentCode')
  45. # 分页参数
  46. page_num: Optional[int] = Field(None, alias='pageNum')
  47. page_size: Optional[int] = Field(None, alias='pageSize')
  48. @model_validator(mode='after')
  49. def process_options(self):
  50. # 解析options字段以设置tree相关属性
  51. if self.options and isinstance(self.options, str):
  52. try:
  53. options_dict = json.loads(self.options)
  54. self.tree_name = options_dict.get('treeName')
  55. self.tree_code = options_dict.get('treeCode')
  56. self.tree_parent_code = options_dict.get('treeParentCode')
  57. except Exception:
  58. pass
  59. return self
  60. def model_dump(self, **kwargs):
  61. # 确保使用别名导出
  62. kwargs.setdefault('by_alias', True)
  63. kwargs.setdefault('exclude_none', False) # 确保包含所有字段
  64. return super().model_dump(**kwargs)
  65. def model_dump_json(self, **kwargs):
  66. # 确保使用别名导出为JSON
  67. kwargs.setdefault('by_alias', True)
  68. kwargs.setdefault('exclude_none', False) # 确保包含所有字段
  69. return super().model_dump_json(**kwargs)
  70. class GenTableColumn(BaseEntity):
  71. """
  72. 代码生成业务列
  73. """
  74. model_config = ConfigDict(
  75. from_attributes=True,
  76. json_encoders = {
  77. datetime: lambda v: v.strftime(DateUtil.YYYY_MM_DD_HH_MM_SS) if v else None
  78. },
  79. extra = "forbid"
  80. )
  81. column_id: Optional[int] = Field(None, alias='columnId')
  82. table_id: Optional[int] = Field(None, alias='tableId')
  83. column_name: Optional[str] = Field(None, alias='columnName')
  84. column_comment: Optional[str] = Field(None, alias='columnComment')
  85. column_type: Optional[str] = Field(None, alias='columnType')
  86. java_type: Optional[str] = Field(None, alias='javaType')
  87. java_field: Optional[str] = Field(None, alias='javaField')
  88. is_pk: Optional[str] = Field("0", alias='isPk')
  89. is_increment: Optional[str] = Field("0", alias='isIncrement')
  90. is_required: Optional[str] = Field("0", alias='isRequired')
  91. is_insert: Optional[str] = Field("1", alias='isInsert')
  92. is_edit: Optional[str] = Field("1", alias='isEdit')
  93. is_list: Optional[str] = Field("1", alias='isList')
  94. is_query: Optional[str] = Field("1", alias='isQuery')
  95. query_type: Optional[str] = Field("EQ", alias='queryType')
  96. html_type: Optional[str] = Field(None, alias='htmlType')
  97. dict_type: Optional[str] = Field("", alias='dictType')
  98. sort: Optional[int] = None
  99. create_by: Optional[str] = Field("", alias='createBy')
  100. create_time: Optional[Annotated[datetime, BeforeValidator(to_datetime())]] = Field(None, alias='createTime')
  101. update_by: Optional[str] = Field("", alias='updateBy')
  102. update_time: Optional[Annotated[datetime, BeforeValidator(to_datetime())]] = Field(None, alias='updateTime')
  103. remark: Optional[str] = None
  104. # 分页参数
  105. page_num: Optional[int] = Field(None, alias='pageNum')
  106. page_size: Optional[int] = Field(None, alias='pageSize')
  107. def model_dump(self, **kwargs):
  108. # 确保使用别名导出
  109. kwargs.setdefault('by_alias', True)
  110. kwargs.setdefault('exclude_none', False) # 确保包含所有字段
  111. return super().model_dump(**kwargs)
  112. def model_dump_json(self, **kwargs):
  113. # 确保使用别名导出为JSON
  114. kwargs.setdefault('by_alias', True)
  115. kwargs.setdefault('exclude_none', False) # 确保包含所有字段
  116. return super().model_dump_json(**kwargs)
  117. # 为了解决前向引用问题,需要在类定义后更新类型注释
  118. GenTable.model_rebuild()
  119. GenTableColumn.model_rebuild()