mapper.py.vm 8.2 KB

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