entity.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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_code: Optional[str] = Field(None, alias='treeCode')
  43. tree_parent_code: Optional[str] = Field(None, alias='treeParentCode')
  44. tree_name: Optional[str] = Field(None, alias='treeName')
  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 = "allow" # 允许动态添加的属性(如list_index)
  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. # 动态添加的list_index属性,用于Vue模板
  108. list_index: Optional[int] = Field(None, alias='listIndex', exclude=True)
  109. def model_dump(self, **kwargs):
  110. # 确保使用别名导出
  111. kwargs.setdefault('by_alias', True)
  112. kwargs.setdefault('exclude_none', False) # 确保包含所有字段
  113. result = super().model_dump(**kwargs)
  114. # 确保包含动态添加的list_index属性(如果存在)
  115. if hasattr(self, 'list_index') and self.list_index is not None:
  116. result['listIndex'] = self.list_index
  117. return result
  118. def model_dump_json(self, **kwargs):
  119. # 确保使用别名导出为JSON
  120. kwargs.setdefault('by_alias', True)
  121. kwargs.setdefault('exclude_none', False) # 确保包含所有字段
  122. return super().model_dump_json(**kwargs)
  123. # 为了解决前向引用问题,需要在类定义后更新类型注释
  124. GenTable.model_rebuild()
  125. GenTableColumn.model_rebuild()