From 0f537a315843adf82c86df4ad99b5bab5c1236c6 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Fri, 14 Mar 2025 14:54:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=96=87=E4=BB=B6=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- quality_control/__init__.py | 1 + quality_control/controllers/__init__.py | 1 + quality_control/controllers/main.py | 82 +++++++++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 quality_control/controllers/__init__.py create mode 100644 quality_control/controllers/main.py diff --git a/quality_control/__init__.py b/quality_control/__init__.py index 7f2c5850..44659a6d 100644 --- a/quality_control/__init__.py +++ b/quality_control/__init__.py @@ -4,3 +4,4 @@ from . import models from . import wizard from . import report +from . import controllers diff --git a/quality_control/controllers/__init__.py b/quality_control/controllers/__init__.py new file mode 100644 index 00000000..12a7e529 --- /dev/null +++ b/quality_control/controllers/__init__.py @@ -0,0 +1 @@ +from . import main diff --git a/quality_control/controllers/main.py b/quality_control/controllers/main.py new file mode 100644 index 00000000..1d72dd4f --- /dev/null +++ b/quality_control/controllers/main.py @@ -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/', 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', '*')] + ) \ No newline at end of file