controller.py.vm 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. {%- set is_tree = table.tpl_category == 'tree' %}
  2. from typing import List
  3. from flask_login import login_required
  4. from pydantic import BeforeValidator
  5. from typing_extensions import Annotated
  6. from werkzeug.datastructures import FileStorage
  7. from ruoyi_common.base.model import AjaxResponse, TableResponse
  8. from ruoyi_common.constant import HttpStatus
  9. from ruoyi_common.descriptor.serializer import BaseSerializer, JsonSerializer
  10. from ruoyi_common.descriptor.validator import QueryValidator, BodyValidator, PathValidator, FileDownloadValidator, FileUploadValidator
  11. from ruoyi_common.domain.enum import BusinessType
  12. from ruoyi_common.utils.base import ExcelUtil
  13. from ruoyi_framework.descriptor.log import Log
  14. from ruoyi_framework.descriptor.permission import HasPerm, PreAuthorize
  15. from {{ get_import_path(table.package_name, table.module_name, 'controller') }} import {{ underscore(table.class_name) }} as {{ underscore(table.class_name) }}_bp
  16. from {{ get_import_path(table.package_name, table.module_name, 'domain') }} import {{ table.class_name }}
  17. from {{ get_import_path(table.package_name, table.module_name, 'service') }}.{{ underscore(table.class_name) }}_service import {{ underscore(table.class_name) }}_service as {{ underscore(table.class_name) }}_service_class
  18. # 使用 controller/__init__.py 中定义的蓝图
  19. gen = {{ underscore(table.class_name) }}_bp
  20. {{ underscore(table.class_name) }}_service = {{ underscore(table.class_name) }}_service_class()
  21. @gen.route('/list', methods=["GET"])
  22. {%- if is_tree %}
  23. @QueryValidator()
  24. {%- else %}
  25. @QueryValidator(is_page=True)
  26. {%- endif %}
  27. @PreAuthorize(HasPerm('{{ table.module_name }}:{{ table.business_name }}:list'))
  28. @JsonSerializer()
  29. def {{ underscore(table.business_name) }}_list(dto: {{ table.class_name }}):
  30. """查询{{ table.function_name }}列表"""
  31. {{ underscore(table.class_name) }}_entity = {{ table.class_name }}()
  32. # 转换PO到Entity对象
  33. for attr in dto.model_fields.keys():
  34. if hasattr({{ underscore(table.class_name) }}_entity, attr):
  35. setattr({{ underscore(table.class_name) }}_entity, attr, getattr(dto, attr))
  36. {%- if is_tree %}
  37. {{ underscore(table.class_name) }}_entity.page_num = None
  38. {{ underscore(table.class_name) }}_entity.page_size = None
  39. {%- endif %}
  40. {{ underscore(table.business_name) }}s, total = {{ underscore(table.class_name) }}_service.select_{{ underscore(table.class_name) }}_list({{ underscore(table.class_name) }}_entity)
  41. return TableResponse(code=HttpStatus.SUCCESS, msg='查询成功', rows={{ underscore(table.business_name) }}s, total=total)
  42. {% if table.pk_column %}
  43. @gen.route('/<int:{{ underscore(table.pk_column.java_field) }}>', methods=['GET'])
  44. @PathValidator()
  45. @PreAuthorize(HasPerm('{{ table.module_name }}:{{ table.business_name }}:query'))
  46. @JsonSerializer()
  47. def get_{{ underscore(table.business_name) }}({{ underscore(table.pk_column.java_field) }}: int):
  48. """获取{{ table.function_name }}详细信息"""
  49. {{ underscore(table.class_name) }}_entity = {{ underscore(table.class_name) }}_service.select_{{ underscore(table.class_name) }}_by_id({{ underscore(table.pk_column.java_field) }})
  50. return AjaxResponse.from_success(data={{ underscore(table.class_name) }}_entity)
  51. {% endif %}
  52. @gen.route('', methods=['POST'])
  53. @BodyValidator()
  54. @PreAuthorize(HasPerm('{{ table.module_name }}:{{ table.business_name }}:add'))
  55. @Log(title='{{ table.function_name }}管理', business_type=BusinessType.INSERT)
  56. @JsonSerializer()
  57. def add_{{ underscore(table.business_name) }}(dto: {{ table.class_name }}):
  58. """新增{{ table.function_name }}"""
  59. {{ underscore(table.class_name) }}_entity = {{ table.class_name }}()
  60. # 转换PO到Entity对象
  61. for attr in dto.model_fields.keys():
  62. if hasattr({{ underscore(table.class_name) }}_entity, attr):
  63. setattr({{ underscore(table.class_name) }}_entity, attr, getattr(dto, attr))
  64. result = {{ underscore(table.class_name) }}_service.insert_{{ underscore(table.class_name) }}({{ underscore(table.class_name) }}_entity)
  65. if result > 0:
  66. return AjaxResponse.from_success(msg='新增成功')
  67. return AjaxResponse.from_error(code=HttpStatus.ERROR, msg='新增失败')
  68. {% if table.pk_column %}
  69. @gen.route('', methods=['PUT'])
  70. @BodyValidator()
  71. @PreAuthorize(HasPerm('{{ table.module_name }}:{{ table.business_name }}:edit'))
  72. @Log(title='{{ table.function_name }}管理', business_type=BusinessType.UPDATE)
  73. @JsonSerializer()
  74. def update_{{ underscore(table.business_name) }}(dto: {{ table.class_name }}):
  75. """修改{{ table.function_name }}"""
  76. {{ underscore(table.class_name) }}_entity = {{ table.class_name }}()
  77. # 转换PO到Entity对象
  78. for attr in dto.model_fields.keys():
  79. if hasattr({{ underscore(table.class_name) }}_entity, attr):
  80. setattr({{ underscore(table.class_name) }}_entity, attr, getattr(dto, attr))
  81. result = {{ underscore(table.class_name) }}_service.update_{{ underscore(table.class_name) }}({{ underscore(table.class_name) }}_entity)
  82. if result > 0:
  83. return AjaxResponse.from_success(msg='修改成功')
  84. return AjaxResponse.from_error(code=HttpStatus.ERROR, msg='修改失败')
  85. {% endif %}
  86. {% if table.pk_column %}
  87. @gen.route('/<ids>', methods=['DELETE'])
  88. @PathValidator()
  89. @PreAuthorize(HasPerm('{{ table.module_name }}:{{ table.business_name }}:remove'))
  90. @Log(title='{{ table.function_name }}管理', business_type=BusinessType.DELETE)
  91. @JsonSerializer()
  92. def delete_{{ underscore(table.business_name) }}(ids: str):
  93. """删除{{ table.function_name }}"""
  94. try:
  95. id_list = [int(id) for id in ids.split(',')]
  96. result = {{ underscore(table.class_name) }}_service.delete_{{ underscore(table.class_name) }}_by_ids(id_list)
  97. if result > 0:
  98. return AjaxResponse.from_success(msg='删除成功')
  99. return AjaxResponse.from_error(code=HttpStatus.ERROR, msg='删除失败')
  100. except Exception as e:
  101. return AjaxResponse.from_error(msg=f'删除失败: {str(e)}')
  102. {% endif %}
  103. @gen.route('/export', methods=['POST'])
  104. @FileDownloadValidator()
  105. @PreAuthorize(HasPerm('{{ table.module_name }}:{{ table.business_name }}:export'))
  106. @Log(title='{{ table.function_name }}管理', business_type=BusinessType.EXPORT)
  107. @BaseSerializer()
  108. def export_{{ underscore(table.business_name) }}(dto: {{ table.class_name }}):
  109. """导出{{ table.function_name }}列表"""
  110. {{ underscore(table.class_name) }}_entity = {{ table.class_name }}()
  111. # 转换PO到Entity对象
  112. for attr in dto.model_fields.keys():
  113. if hasattr({{ underscore(table.class_name) }}_entity, attr):
  114. setattr({{ underscore(table.class_name) }}_entity, attr, getattr(dto, attr))
  115. {{ underscore(table.business_name) }}s, total = {{ underscore(table.class_name) }}_service.select_{{ underscore(table.class_name) }}_list({{ underscore(table.class_name) }}_entity)
  116. # 使用ExcelUtil导出Excel文件
  117. excel_util = ExcelUtil({{ table.class_name }})
  118. return excel_util.export_response({{ underscore(table.business_name) }}s, "{{ table.function_name }}数据")
  119. @gen.route('/importTemplate', methods=['POST'])
  120. @login_required
  121. @BaseSerializer()
  122. def import_template():
  123. """下载{{ table.function_name }}导入模板"""
  124. excel_util = ExcelUtil({{ table.class_name }})
  125. return excel_util.import_template_response(sheetname="{{ table.function_name }}数据")
  126. @gen.route('/importData', methods=['POST'])
  127. @FileUploadValidator()
  128. @PreAuthorize(HasPerm('{{ table.module_name }}:{{ table.business_name }}:import'))
  129. @Log(title='{{ table.function_name }}管理', business_type=BusinessType.IMPORT)
  130. @JsonSerializer()
  131. def import_data(
  132. file: List[FileStorage],
  133. update_support: Annotated[bool, BeforeValidator(lambda x: x != "0")]
  134. ):
  135. """导入{{ table.function_name }}数据"""
  136. file = file[0]
  137. excel_util = ExcelUtil({{ table.class_name }})
  138. {{ underscore(table.business_name) }}_list = excel_util.import_file(file, sheetname="{{ table.function_name }}数据")
  139. msg = {{ underscore(table.class_name) }}_service.import_{{ underscore(table.class_name) }}({{ underscore(table.business_name) }}_list, update_support)
  140. return AjaxResponse.from_success(msg=msg)