controller.py.vm 8.4 KB

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