controller.py.vm 7.6 KB

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