import json from odoo import http from odoo.http import request from odoo.addons.sf_machine_connect.models.ftp_operate import transfer_files from odoo.addons.sf_base.decorators.api_log import api_log class MainController(http.Controller): @http.route('/api/manual_download_program', type='json', methods=['POST'], auth='wechat_token', cors='*') @api_log('人工线下加工编程文件传输', requester='报工系统') def manual_download_program(self): """ 人工线下加工传输编程文件 """ data = json.loads(request.httprequest.data) maintenance_equipment_id = data.get('maintenance_equipment_id') model_id = data.get('model_id') if not maintenance_equipment_id or not model_id: return {'code': 400, 'message': '参数错误'} try: model_id = int(model_id) except Exception as e: return {'code': 400, 'message': '参数类型错误'} maintenance_equipment = request.env['maintenance.equipment'].sudo().search( [('MTcode', '=', maintenance_equipment_id), ('category_id.equipment_type', '=', '机床')], limit=1 ) if not maintenance_equipment: return {'code': 400, 'message': '机台不存在,请扫描正确的机台二维码'} product = request.env['product.template'].sudo().search([('model_id', '=', model_id)], limit=1) if not product: return {'code': 400, 'message': '请扫描正确的图纸'} # 获取刀具组 tool_groups_id = request.env['sf.tool.groups'].sudo().search([('equipment_ids', 'in', maintenance_equipment.id)], limit=1) if not tool_groups_id: return {'code': 400, 'message': '刀具组不存在'} ftp_resconfig = request.env['res.config.settings'].sudo().get_values() if not ftp_resconfig['ftp_host'] or not ftp_resconfig['ftp_port'] or not ftp_resconfig['ftp_user'] or not ftp_resconfig['ftp_password']: return {'code': 400, 'message': '编程文件FTP配置错误'} source_ftp_info = { 'host': ftp_resconfig['ftp_host'], 'port': int(ftp_resconfig['ftp_port']), 'username': ftp_resconfig['ftp_user'], 'password': ftp_resconfig['ftp_password'] } if not maintenance_equipment.ftp_host or not maintenance_equipment.ftp_port or not maintenance_equipment.ftp_username or not maintenance_equipment.ftp_password: return {'code': 400, 'message': '机台FTP配置错误'} target_ftp_info = { 'host': maintenance_equipment.ftp_host, 'port': int(maintenance_equipment.ftp_port), 'username': maintenance_equipment.ftp_username, 'password': maintenance_equipment.ftp_password } # 传输nc文件 try: result = transfer_files( source_ftp_info, target_ftp_info, '/' + str(model_id), '/', match_str=r'^\d*_\d*-' + tool_groups_id.name + r'-\w{2}-all\.nc$' ) if len(result) > 0: return {'code': 200, 'message': '传输成功', 'file_list': result} else: return {'code': 404, 'message': '未找到编程文件'} except Exception as e: return {'code': 500, 'message': str(e)}