controller.py.vm 7.3 KB

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