Преглед изворни кода

优化代码生成分页问题

SpringSunYY пре 5 месеци
родитељ
комит
85ce55f03a

+ 13 - 3
ruoyi_generator/vm/py/controller.py.vm

@@ -1,6 +1,7 @@
 {%- set is_tree = table.tpl_category == 'tree' %}
 {%- set is_tree = table.tpl_category == 'tree' %}
 from typing import List
 from typing import List
 
 
+from flask import g
 from flask_login import login_required
 from flask_login import login_required
 from pydantic import BeforeValidator
 from pydantic import BeforeValidator
 from typing_extensions import Annotated
 from typing_extensions import Annotated
@@ -23,6 +24,11 @@ gen = {{ underscore(table.class_name) }}_bp
 
 
 {{ underscore(table.class_name) }}_service = {{ underscore(table.class_name) }}_service_class()
 {{ underscore(table.class_name) }}_service = {{ underscore(table.class_name) }}_service_class()
 
 
+
+def _clear_page_context():
+    if hasattr(g, "criterian_meta"):
+        g.criterian_meta.page = None
+
 @gen.route('/list', methods=["GET"])
 @gen.route('/list', methods=["GET"])
 {%- if is_tree %}
 {%- if is_tree %}
 @QueryValidator()
 @QueryValidator()
@@ -41,9 +47,10 @@ def {{ underscore(table.business_name) }}_list(dto: {{ table.class_name }}):
 {%- if is_tree %}
 {%- if is_tree %}
     {{ underscore(table.class_name) }}_entity.page_num = None
     {{ underscore(table.class_name) }}_entity.page_num = None
     {{ underscore(table.class_name) }}_entity.page_size = None
     {{ underscore(table.class_name) }}_entity.page_size = None
+    _clear_page_context()
 {%- endif %}
 {%- endif %}
-    {{ underscore(table.business_name) }}s, total = {{ underscore(table.class_name) }}_service.select_{{ underscore(table.class_name) }}_list({{ underscore(table.class_name) }}_entity)
-    return TableResponse(code=HttpStatus.SUCCESS, msg='查询成功', rows={{ underscore(table.business_name) }}s, total=total)
+    {{ underscore(table.business_name) }}s = {{ underscore(table.class_name) }}_service.select_{{ underscore(table.class_name) }}_list({{ underscore(table.class_name) }}_entity)
+    return TableResponse(code=HttpStatus.SUCCESS, msg='查询成功', rows={{ underscore(table.business_name) }}s)
 
 
 {% if table.pk_column %}
 {% if table.pk_column %}
 @gen.route('/<int:{{ underscore(table.pk_column.java_field) }}>', methods=['GET'])
 @gen.route('/<int:{{ underscore(table.pk_column.java_field) }}>', methods=['GET'])
@@ -122,7 +129,10 @@ def export_{{ underscore(table.business_name) }}(dto: {{ table.class_name }}):
     for attr in dto.model_fields.keys():
     for attr in dto.model_fields.keys():
         if hasattr({{ underscore(table.class_name) }}_entity, attr):
         if hasattr({{ underscore(table.class_name) }}_entity, attr):
             setattr({{ underscore(table.class_name) }}_entity, attr, getattr(dto, attr))
             setattr({{ underscore(table.class_name) }}_entity, attr, getattr(dto, attr))
-    {{ underscore(table.business_name) }}s, total = {{ underscore(table.class_name) }}_service.select_{{ underscore(table.class_name) }}_list({{ underscore(table.class_name) }}_entity)
+    _clear_page_context()
+    {{ underscore(table.class_name) }}_entity.page_num = None
+    {{ underscore(table.class_name) }}_entity.page_size = None
+    {{ underscore(table.business_name) }}s = {{ underscore(table.class_name) }}_service.select_{{ underscore(table.class_name) }}_list({{ underscore(table.class_name) }}_entity)
     # 使用ExcelUtil导出Excel文件
     # 使用ExcelUtil导出Excel文件
     excel_util = ExcelUtil({{ table.class_name }})
     excel_util = ExcelUtil({{ table.class_name }})
     return excel_util.export_response({{ underscore(table.business_name) }}s, "{{ table.function_name }}数据")
     return excel_util.export_response({{ underscore(table.business_name) }}s, "{{ table.function_name }}数据")

+ 4 - 32
ruoyi_generator/vm/py/mapper.py.vm

@@ -6,7 +6,8 @@
 from typing import List
 from typing import List
 from datetime import datetime
 from datetime import datetime
 
 
-from sqlalchemy import select, update, delete, func
+from flask import g
+from sqlalchemy import select, update, delete
 
 
 from ruoyi_admin.ext import db
 from ruoyi_admin.ext import db
 from {{ get_import_path(table.package_name, table.module_name, 'domain') }} import {{ table.class_name }}
 from {{ get_import_path(table.package_name, table.module_name, 'domain') }} import {{ table.class_name }}
@@ -38,10 +39,8 @@ class {{ underscore(table.class_name) }}_mapper:
                 stmt = stmt.where({{ underscore(table.class_name) }}_po.{{ underscore(column.java_field) }}.like("%" + str({{ underscore(table.business_name) }}.{{ underscore(column.java_field) }}) + "%"))
                 stmt = stmt.where({{ underscore(table.class_name) }}_po.{{ underscore(column.java_field) }}.like("%" + str({{ underscore(table.business_name) }}.{{ underscore(column.java_field) }}) + "%"))
 {% endif %}
 {% endif %}
 {% endfor %}
 {% endfor %}
-            # 添加分页条件
-            if {{ underscore(table.business_name) }}.page_num and {{ underscore(table.business_name) }}.page_size:
-                offset = ({{ underscore(table.business_name) }}.page_num - 1) * {{ underscore(table.business_name) }}.page_size
-                stmt = stmt.offset(offset).limit({{ underscore(table.business_name) }}.page_size)
+            if "criterian_meta" in g and g.criterian_meta.page:
+                g.criterian_meta.page.stmt = stmt
 
 
             result = db.session.execute(stmt).scalars().all()
             result = db.session.execute(stmt).scalars().all()
             return [{{ table.class_name }}.model_validate(item) for item in result] if result else []
             return [{{ table.class_name }}.model_validate(item) for item in result] if result else []
@@ -49,33 +48,6 @@ class {{ underscore(table.class_name) }}_mapper:
             print(f"查询{{ table.function_name }}列表出错: {e}")
             print(f"查询{{ table.function_name }}列表出错: {e}")
             return []
             return []
 
 
-    @staticmethod
-    def select_{{ underscore(table.class_name) }}_count({{ underscore(table.business_name) }}: {{ table.class_name }}) -> int:
-        """
-        查询{{ table.function_name }}总数
-
-        Args:
-            {{ underscore(table.business_name) }} ({{ table.class_name }}): {{ table.function_name }}对象
-
-        Returns:
-            int: {{ table.function_name }}总数
-        """
-        try:
-            stmt = select(func.count()).select_from({{ underscore(table.class_name) }}_po)
-{% for column in table.columns %}
-{% if column.is_query and column.query_type == 'EQ' %}
-            if {{ underscore(table.business_name) }}.{{ underscore(column.java_field) }} is not None:
-                stmt = stmt.where({{ underscore(table.class_name) }}_po.{{ underscore(column.java_field) }} == {{ underscore(table.business_name) }}.{{ underscore(column.java_field) }})
-{% elif column.is_query and column.query_type == 'LIKE' %}
-            if {{ underscore(table.business_name) }}.{{ underscore(column.java_field) }}:
-                stmt = stmt.where({{ underscore(table.class_name) }}_po.{{ underscore(column.java_field) }}.like("%" + str({{ underscore(table.business_name) }}.{{ underscore(column.java_field) }}) + "%"))
-{% endif %}
-{% endfor %}
-            result = db.session.execute(stmt).scalar()
-            return result if result else 0
-        except Exception as e:
-            print(f"查询{{ table.function_name }}总数出错: {e}")
-            return 0
     {% if table.pk_column %}
     {% if table.pk_column %}
     @staticmethod
     @staticmethod
     def select_{{ underscore(table.class_name) }}_by_id({{ underscore(table.pk_column.java_field) }}: int) -> {{ table.class_name }}:
     def select_{{ underscore(table.class_name) }}_by_id({{ underscore(table.pk_column.java_field) }}: int) -> {{ table.class_name }}:

+ 4 - 6
ruoyi_generator/vm/py/service.py.vm

@@ -3,7 +3,7 @@
 # @FileName: {{ underscore(table.class_name) }}_service.py
 # @FileName: {{ underscore(table.class_name) }}_service.py
 # @Time    : {{ datetime }}
 # @Time    : {{ datetime }}
 
 
-from typing import List, Tuple
+from typing import List
 
 
 from ruoyi_common.exception import ServiceException
 from ruoyi_common.exception import ServiceException
 from ruoyi_common.utils.base import LogUtil
 from ruoyi_common.utils.base import LogUtil
@@ -13,7 +13,7 @@ from {{ get_import_path(table.package_name, table.module_name, 'mapper') }}.{{ u
 class {{ underscore(table.class_name) }}_service:
 class {{ underscore(table.class_name) }}_service:
     """{{ table.function_name }}服务类"""
     """{{ table.function_name }}服务类"""
 
 
-    def select_{{ underscore(table.class_name) }}_list(self, {{ underscore(table.business_name) }}: {{ table.class_name }}) -> Tuple[List[{{ table.class_name }}], int]:
+    def select_{{ underscore(table.class_name) }}_list(self, {{ underscore(table.business_name) }}: {{ table.class_name }}) -> List[{{ table.class_name }}]:
         """
         """
         查询{{ table.function_name }}列表
         查询{{ table.function_name }}列表
 
 
@@ -21,11 +21,9 @@ class {{ underscore(table.class_name) }}_service:
             {{ underscore(table.business_name) }} ({{ table.class_name }}): {{ table.function_name }}对象
             {{ underscore(table.business_name) }} ({{ table.class_name }}): {{ table.function_name }}对象
 
 
         Returns:
         Returns:
-            Tuple[List[{{ table.class_name }}], int]: {{ table.function_name }}列表和总数
+            List[{{ table.class_name }}]: {{ table.function_name }}列表
         """
         """
-        list_result = {{ underscore(table.class_name) }}_mapper.select_{{ underscore(table.class_name) }}_list({{ underscore(table.business_name) }})
-        count_result = {{ underscore(table.class_name) }}_mapper.select_{{ underscore(table.class_name) }}_count({{ underscore(table.business_name) }})
-        return list_result, count_result
+        return {{ underscore(table.class_name) }}_mapper.select_{{ underscore(table.class_name) }}_list({{ underscore(table.business_name) }})
 
 
     {% if table.pk_column %}
     {% if table.pk_column %}
     def select_{{ underscore(table.class_name) }}_by_id(self, {{ underscore(table.pk_column.java_field) }}: int) -> {{ table.class_name }}:
     def select_{{ underscore(table.class_name) }}_by_id(self, {{ underscore(table.pk_column.java_field) }}: int) -> {{ table.class_name }}: