entity.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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. parent_menu_id: Optional[int] = Field(None, alias='parentMenuId')
  47. # 分页参数
  48. page_num: Optional[int] = Field(None, alias='pageNum')
  49. page_size: Optional[int] = Field(None, alias='pageSize')
  50. @model_validator(mode='after')
  51. def process_options(self):
  52. # 解析options字段以设置tree相关属性和parent_menu_id
  53. if self.options and isinstance(self.options, str):
  54. try:
  55. options_dict = json.loads(self.options)
  56. self.tree_name = options_dict.get('treeName')
  57. self.tree_code = options_dict.get('treeCode')
  58. self.tree_parent_code = options_dict.get('treeParentCode')
  59. # 从options中解析parent_menu_id
  60. if 'parentMenuId' in options_dict:
  61. self.parent_menu_id = options_dict.get('parentMenuId')
  62. except Exception:
  63. pass
  64. return self
  65. def model_dump(self, **kwargs):
  66. # 确保使用别名导出
  67. kwargs.setdefault('by_alias', True)
  68. kwargs.setdefault('exclude_none', False) # 确保包含所有字段
  69. return super().model_dump(**kwargs)
  70. def model_dump_json(self, **kwargs):
  71. # 确保使用别名导出为JSON
  72. kwargs.setdefault('by_alias', True)
  73. kwargs.setdefault('exclude_none', False) # 确保包含所有字段
  74. return super().model_dump_json(**kwargs)
  75. class GenTableColumn(BaseEntity):
  76. """
  77. 代码生成业务列
  78. """
  79. model_config = ConfigDict(
  80. from_attributes=True,
  81. json_encoders = {
  82. datetime: lambda v: v.strftime(DateUtil.YYYY_MM_DD_HH_MM_SS) if v else None
  83. },
  84. extra = "allow" # 允许动态添加的属性(如list_index)
  85. )
  86. column_id: Optional[int] = Field(None, alias='columnId')
  87. table_id: Optional[int] = Field(None, alias='tableId')
  88. column_name: Optional[str] = Field(None, alias='columnName')
  89. column_comment: Optional[str] = Field(None, alias='columnComment')
  90. column_type: Optional[str] = Field(None, alias='columnType')
  91. java_type: Optional[str] = Field(None, alias='javaType')
  92. java_field: Optional[str] = Field(None, alias='javaField')
  93. is_pk: Optional[str] = Field("0", alias='isPk')
  94. is_increment: Optional[str] = Field("0", alias='isIncrement')
  95. is_required: Optional[str] = Field("0", alias='isRequired')
  96. is_insert: Optional[str] = Field("1", alias='isInsert')
  97. is_edit: Optional[str] = Field("1", alias='isEdit')
  98. is_list: Optional[str] = Field("1", alias='isList')
  99. is_query: Optional[str] = Field("1", alias='isQuery')
  100. query_type: Optional[str] = Field("EQ", alias='queryType')
  101. html_type: Optional[str] = Field(None, alias='htmlType')
  102. dict_type: Optional[str] = Field("", alias='dictType')
  103. sort: Optional[int] = None
  104. create_by: Optional[str] = Field("", alias='createBy')
  105. create_time: Optional[Annotated[datetime, BeforeValidator(to_datetime())]] = Field(None, alias='createTime')
  106. update_by: Optional[str] = Field("", alias='updateBy')
  107. update_time: Optional[Annotated[datetime, BeforeValidator(to_datetime())]] = Field(None, alias='updateTime')
  108. remark: Optional[str] = None
  109. # 分页参数
  110. page_num: Optional[int] = Field(None, alias='pageNum')
  111. page_size: Optional[int] = Field(None, alias='pageSize')
  112. # 动态添加的list_index属性,用于Vue模板
  113. list_index: Optional[int] = Field(None, alias='listIndex', exclude=True)
  114. def model_dump(self, **kwargs):
  115. # 确保使用别名导出
  116. kwargs.setdefault('by_alias', True)
  117. kwargs.setdefault('exclude_none', False) # 确保包含所有字段
  118. result = super().model_dump(**kwargs)
  119. # 确保包含动态添加的list_index属性(如果存在)
  120. if hasattr(self, 'list_index') and self.list_index is not None:
  121. result['listIndex'] = self.list_index
  122. return result
  123. def model_dump_json(self, **kwargs):
  124. # 确保使用别名导出为JSON
  125. kwargs.setdefault('by_alias', True)
  126. kwargs.setdefault('exclude_none', False) # 确保包含所有字段
  127. return super().model_dump_json(**kwargs)
  128. # 为了解决前向引用问题,需要在类定义后更新类型注释
  129. GenTable.model_rebuild()
  130. GenTableColumn.model_rebuild()