增加文件下载功能
This commit is contained in:
@@ -4,3 +4,4 @@
|
|||||||
from . import models
|
from . import models
|
||||||
from . import wizard
|
from . import wizard
|
||||||
from . import report
|
from . import report
|
||||||
|
from . import controllers
|
||||||
|
|||||||
1
quality_control/controllers/__init__.py
Normal file
1
quality_control/controllers/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import main
|
||||||
82
quality_control/controllers/main.py
Normal file
82
quality_control/controllers/main.py
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from odoo import http
|
||||||
|
from odoo.http import request, Response
|
||||||
|
import base64
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
class QualityController(http.Controller):
|
||||||
|
|
||||||
|
@http.route('/api/quality/report/download/<string:retrospect_ref>', type='http', auth='public', csrf=False)
|
||||||
|
def get_quality_report(self, retrospect_ref, **kwargs):
|
||||||
|
"""获取质检报告的下载接口
|
||||||
|
|
||||||
|
Args:
|
||||||
|
retrospect_ref: 追溯码
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
直接返回文件下载响应
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# 参数验证
|
||||||
|
if not retrospect_ref:
|
||||||
|
return self._json_response({
|
||||||
|
'status': 'error',
|
||||||
|
'message': '追溯码不能为空'
|
||||||
|
})
|
||||||
|
|
||||||
|
# 查找对应的质检单
|
||||||
|
quality_check = request.env['quality.check'].sudo().search([
|
||||||
|
('picking_id.retrospect_ref', '=', retrospect_ref),
|
||||||
|
('publish_status', '=', 'published') # 只返回已发布的报告
|
||||||
|
], limit=1)
|
||||||
|
|
||||||
|
if not quality_check:
|
||||||
|
return self._json_response({
|
||||||
|
'status': 'error',
|
||||||
|
'message': '未找到对应的质检报告或报告未发布'
|
||||||
|
})
|
||||||
|
|
||||||
|
if not quality_check.report_number_id:
|
||||||
|
return self._json_response({
|
||||||
|
'status': 'error',
|
||||||
|
'message': '质检报告文件不存在'
|
||||||
|
})
|
||||||
|
|
||||||
|
# 获取文件内容
|
||||||
|
document = quality_check.report_number_id
|
||||||
|
if not document.raw: # 检查文件内容是否存在
|
||||||
|
return self._json_response({
|
||||||
|
'status': 'error',
|
||||||
|
'message': '文件内容不存在'
|
||||||
|
})
|
||||||
|
|
||||||
|
# 构建文件名(确保有.pdf后缀)
|
||||||
|
filename = document.name
|
||||||
|
if not filename.lower().endswith('.pdf'):
|
||||||
|
filename = f"{filename}.pdf"
|
||||||
|
|
||||||
|
# 返回文件下载响应
|
||||||
|
return Response(
|
||||||
|
document.raw,
|
||||||
|
headers=[
|
||||||
|
('Content-Type', 'application/pdf'),
|
||||||
|
('Content-Disposition', f'attachment; filename="{filename}"'),
|
||||||
|
('Access-Control-Allow-Origin', '*')
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
return self._json_response({
|
||||||
|
'status': 'error',
|
||||||
|
'message': f'系统错误: {str(e)}'
|
||||||
|
})
|
||||||
|
|
||||||
|
def _json_response(self, data):
|
||||||
|
"""返回JSON格式的响应"""
|
||||||
|
return Response(
|
||||||
|
json.dumps(data, ensure_ascii=False),
|
||||||
|
mimetype='application/json;charset=utf-8',
|
||||||
|
headers=[('Access-Control-Allow-Origin', '*')]
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user