mapper.py.vm 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. # -*- coding: utf-8 -*-
  2. # @Author : {{ table.function_author }}
  3. # @FileName: {{ underscore(table.class_name) }}_mapper.py
  4. # @Time : {{ datetime }}
  5. from typing import List
  6. from datetime import datetime
  7. from flask import g
  8. from sqlalchemy import select, update, delete
  9. from ruoyi_admin.ext import db
  10. from {{ get_import_path(table.package_name, table.module_name, 'domain') }} import {{ table.class_name }}
  11. from {{ get_import_path(table.package_name, table.module_name, 'domain', table.class_name) }} import {{ underscore(table.class_name) }}_po
  12. class {{ underscore(table.class_name) }}_mapper:
  13. """{{ table.function_name }}Mapper"""
  14. @staticmethod
  15. def select_{{ underscore(table.class_name) }}_list({{ underscore(table.business_name) }}: {{ table.class_name }}) -> List[{{ table.class_name }}]:
  16. """
  17. 查询{{ table.function_name }}列表
  18. Args:
  19. {{ underscore(table.business_name) }} ({{ table.class_name }}): {{ table.function_name }}对象
  20. Returns:
  21. List[{{ table.class_name }}]: {{ table.function_name }}列表
  22. """
  23. try:
  24. # 构建查询条件
  25. stmt = select({{ underscore(table.class_name) }}_po)
  26. {% for column in table.columns %}
  27. {% if column.is_query and column.query_type == 'EQ' %}
  28. if {{ underscore(table.business_name) }}.{{ underscore(column.java_field) }} is not None:
  29. stmt = stmt.where({{ underscore(table.class_name) }}_po.{{ underscore(column.java_field) }} == {{ underscore(table.business_name) }}.{{ underscore(column.java_field) }})
  30. {% elif column.is_query and column.query_type == 'LIKE' %}
  31. if {{ underscore(table.business_name) }}.{{ underscore(column.java_field) }}:
  32. stmt = stmt.where({{ underscore(table.class_name) }}_po.{{ underscore(column.java_field) }}.like("%" + str({{ underscore(table.business_name) }}.{{ underscore(column.java_field) }}) + "%"))
  33. {% endif %}
  34. {% endfor %}
  35. if "criterian_meta" in g and g.criterian_meta.page:
  36. g.criterian_meta.page.stmt = stmt
  37. result = db.session.execute(stmt).scalars().all()
  38. return [{{ table.class_name }}.model_validate(item) for item in result] if result else []
  39. except Exception as e:
  40. print(f"查询{{ table.function_name }}列表出错: {e}")
  41. return []
  42. {% if table.pk_column %}
  43. @staticmethod
  44. def select_{{ underscore(table.class_name) }}_by_id({{ underscore(table.pk_column.java_field) }}: int) -> {{ table.class_name }}:
  45. """
  46. 根据ID查询{{ table.function_name }}
  47. Args:
  48. {{ underscore(table.pk_column.java_field) }} (int): {{ table.pk_column.column_comment }}
  49. Returns:
  50. {{ table.class_name }}: {{ table.function_name }}对象
  51. """
  52. try:
  53. result = db.session.get({{ underscore(table.class_name) }}_po, {{ underscore(table.pk_column.java_field) }})
  54. return {{ table.class_name }}.model_validate(result) if result else None
  55. except Exception as e:
  56. print(f"根据ID查询{{ table.function_name }}出错: {e}")
  57. return None
  58. {% endif %}
  59. @staticmethod
  60. def insert_{{ underscore(table.class_name) }}({{ underscore(table.business_name) }}: {{ table.class_name }}) -> int:
  61. """
  62. 新增{{ table.function_name }}
  63. Args:
  64. {{ underscore(table.business_name) }} ({{ table.class_name }}): {{ table.function_name }}对象
  65. Returns:
  66. int: 插入的记录数
  67. """
  68. try:
  69. now = datetime.now()
  70. new_po = {{ underscore(table.class_name) }}_po()
  71. {%- for column in table.columns %}
  72. {%- set attr = underscore(column.java_field) %}
  73. {%- if column.column_name in ['create_time', 'update_time'] %}
  74. new_po.{{ attr }} = {{ underscore(table.business_name) }}.{{ attr }} or now
  75. {%- else %}
  76. new_po.{{ attr }} = {{ underscore(table.business_name) }}.{{ attr }}
  77. {%- endif %}
  78. {%- endfor %}
  79. db.session.add(new_po)
  80. db.session.commit()
  81. {%- if table.pk_column %}
  82. {{ underscore(table.business_name) }}.{{ underscore(table.pk_column.java_field) }} = new_po.{{ underscore(table.pk_column.java_field) }}
  83. {%- endif %}
  84. return 1
  85. except Exception as e:
  86. db.session.rollback()
  87. print(f"新增{{ table.function_name }}出错: {e}")
  88. return 0
  89. {% if table.pk_column %}
  90. @staticmethod
  91. def update_{{ underscore(table.class_name) }}({{ underscore(table.business_name) }}: {{ table.class_name }}) -> int:
  92. """
  93. 修改{{ table.function_name }}
  94. Args:
  95. {{ underscore(table.business_name) }} ({{ table.class_name }}): {{ table.function_name }}对象
  96. Returns:
  97. int: 更新的记录数
  98. """
  99. try:
  100. {% if table.pk_column %}
  101. existing = db.session.get({{ underscore(table.class_name) }}_po, {{ underscore(table.business_name) }}.{{ underscore(table.pk_column.java_field) }})
  102. if not existing:
  103. return 0
  104. now = datetime.now()
  105. {%- for column in table.columns %}
  106. {%- set attr = underscore(column.java_field) %}
  107. {%- if column.is_pk == '1' %}
  108. # 主键不参与更新
  109. {%- elif column.column_name == 'update_time' %}
  110. existing.{{ attr }} = {{ underscore(table.business_name) }}.{{ attr }} or now
  111. {%- else %}
  112. existing.{{ attr }} = {{ underscore(table.business_name) }}.{{ attr }}
  113. {%- endif %}
  114. {%- endfor %}
  115. db.session.commit()
  116. return 1
  117. {% else %}
  118. db.session.merge({{ underscore(table.business_name) }})
  119. db.session.commit()
  120. return 1
  121. {% endif %}
  122. except Exception as e:
  123. db.session.rollback()
  124. print(f"修改{{ table.function_name }}出错: {e}")
  125. return 0
  126. @staticmethod
  127. def delete_{{ underscore(table.class_name) }}_by_ids(ids: List[int]) -> int:
  128. """
  129. 批量删除{{ table.function_name }}
  130. Args:
  131. ids (List[int]): ID列表
  132. Returns:
  133. int: 删除的记录数
  134. """
  135. try:
  136. stmt = delete({{ underscore(table.class_name) }}_po).where({{ underscore(table.class_name) }}_po.{{ underscore(table.pk_column.java_field) }}.in_(ids))
  137. result = db.session.execute(stmt)
  138. db.session.commit()
  139. return result.rowcount
  140. except Exception as e:
  141. db.session.rollback()
  142. print(f"批量删除{{ table.function_name }}出错: {e}")
  143. return 0
  144. {% endif %}