From 88ef9c106ddf9a28dbefb434fdf17a9e4d348f4a Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Tue, 25 Jun 2024 17:54:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BC=96=E7=A8=8B=E5=8D=95?= =?UTF-8?q?=E4=B8=8B=E5=8F=91ftp=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_bf_connect/models/http.py | 1 + sf_manufacturing/controllers/controllers.py | 1 + sf_manufacturing/models/mrp_workorder.py | 4 +- sf_manufacturing/models/product_template.py | 4 +- sf_mrs_connect/controllers/controllers.py | 13 +++--- sf_mrs_connect/models/ftp_operate.py | 45 ++++++++++++++++++++- sf_sale/models/quick_easy_order.py | 4 +- sf_sale/models/quick_easy_order_old.py | 4 +- 8 files changed, 61 insertions(+), 15 deletions(-) diff --git a/sf_bf_connect/models/http.py b/sf_bf_connect/models/http.py index aac8ba38..8b10aa21 100644 --- a/sf_bf_connect/models/http.py +++ b/sf_bf_connect/models/http.py @@ -21,6 +21,7 @@ class Http(models.AbstractModel): def _auth_method_sf_token(cls): # 从headers.environ中获取对方传过来的token,timestamp,加密的校验字符串 datas = request.httprequest.headers.environ + _logger.info('datas:%s' % datas) if 'HTTP_TOKEN' in datas: _logger.info('token:%s' % datas['HTTP_TOKEN']) # 查询密钥 diff --git a/sf_manufacturing/controllers/controllers.py b/sf_manufacturing/controllers/controllers.py index 61bc83ea..8284f392 100644 --- a/sf_manufacturing/controllers/controllers.py +++ b/sf_manufacturing/controllers/controllers.py @@ -203,6 +203,7 @@ class Manufacturing_Connect(http.Controller): res = {'Succeed': True, 'Datas': ['工单已结束']} datas = request.httprequest.data ret = json.loads(datas) + logging.info('button_Work_End:%s' % ret) request.env['center_control.interface.log'].sudo().create( {'content': ret, 'name': 'AutoDeviceApi/FeedBackEnd'}) production_id = ret['BillId'] diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 8cc7b1f9..b4c7170f 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -1215,11 +1215,13 @@ class CNCprocessing(models.Model): # 将FTP的多面的程序单文件下载到临时目录 def download_file_tmp(self, production_no, processing_panel): - remotepath = os.path.join('/NC', production_no, 'return', processing_panel) + remotepath = os.path.join('/home/ftp/ftp_root/NC', production_no, 'return', processing_panel) serverdir = os.path.join('/tmp', production_no, 'return', processing_panel) ftp_resconfig = self.env['res.config.settings'].get_values() ftp = FtpController(str(ftp_resconfig['ftp_host']), int(ftp_resconfig['ftp_port']), ftp_resconfig['ftp_user'], ftp_resconfig['ftp_password']) + if not ftp.file_exists_1(remotepath): + logging.info('目录不存在:%s' % remotepath) download_state = ftp.download_program_file(remotepath, serverdir) logging.info('download_state:%s' % download_state) return download_state diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index cea53c64..71522528 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -7,8 +7,8 @@ import os from odoo import models, fields, api, _ from odoo.exceptions import ValidationError from odoo.modules import get_resource_path -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file class ResProductMo(models.Model): diff --git a/sf_mrs_connect/controllers/controllers.py b/sf_mrs_connect/controllers/controllers.py index 5102efdb..5b4250d8 100644 --- a/sf_mrs_connect/controllers/controllers.py +++ b/sf_mrs_connect/controllers/controllers.py @@ -31,17 +31,18 @@ class Sf_Mrs_Connect(http.Controller): # 拉取所有加工面的程序文件 for r in ret['processing_panel'].split(','): program_path_tmp_r = os.path.join('/tmp', ret['folder_name'], 'return', r) - files_r = os.listdir(program_path_tmp_r) - if files_r: - for file_name in files_r: - file_path = os.path.join(program_path_tmp_r, file_name) - os.remove(file_path) + if os.path.exists(program_path_tmp_r): + files_r = os.listdir(program_path_tmp_r) + if files_r: + for file_name in files_r: + file_path = os.path.join(program_path_tmp_r, file_name) + os.remove(file_path) download_state = request.env['sf.cnc.processing'].with_user( request.env.ref("base.user_admin")).download_file_tmp( ret['folder_name'], r) if download_state == 0: res['status'] = -2 - res['message'] = '制造订单号为%s的CNC程序文件从FTP拉取失败' % (cnc_production.name) + res['message'] = '编程单号为%s的CNC程序文件从FTP拉取失败' % (ret['programming_no']) return json.JSONEncoder().encode(res) for production in productions: if not production.workorder_ids: diff --git a/sf_mrs_connect/models/ftp_operate.py b/sf_mrs_connect/models/ftp_operate.py index 4cd5e3ba..c92117e7 100644 --- a/sf_mrs_connect/models/ftp_operate.py +++ b/sf_mrs_connect/models/ftp_operate.py @@ -21,6 +21,32 @@ class FtpController(): except Exception: logging.info("ftp连接失败") + def file_exists_1(self, path): + # 检查文件是否存在于FTP服务器上 + try: + logging.info("path:%s" % path) + logging.info("dirname:%s" % os.path.dirname(path)) + directories = os.path.normpath(path).split(os.path.sep) + # 切换到上级目录 + logging.info("当前目录: %s" % self.ftp.pwd()) + current_dir = '/' + for directory in directories: + if directory: + # 检查目录是否存在 + if directory in ['ZM', 'FM', 'YC', 'HC', 'QC', 'ZC']: + self.ftp.cwd(directory) + if directory in ['NC']: + self.ftp.cwd(directory) + if directory not in ['home', 'ftp', 'ftp_root', 'NC']: + # 切换到新的目录 + current_dir = os.path.join(current_dir, directory) + logging.info("current_dir:%s" % current_dir) + self.ftp.cwd(directory) + return os.path.basename(path) + except Exception as e: + logging.error(f"Error checking file: {e}") + return False + def file_exists(self, path): # 检查文件是否存在于FTP服务器上 try: @@ -32,8 +58,23 @@ class FtpController(): logging.error(f"Error checking file: {e}") return False - - + # 下载目录下的pdf文件(程序单) + def download_program_file(self, target_dir, serverdir): + if not os.path.exists(serverdir): + os.makedirs(serverdir) + try: + logging.info('FTP目录:%s' % target_dir) + logging.info("进入FTP目录 ") + # self.ftp.cwd(target_dir) # 切换工作路径 + # logging.info('FTP目录:%s' % target_dir) + remotenames = self.ftp.nlst() + logging.info('FTP目录文件:%s' % remotenames) + for file in remotenames: + server = os.path.join(serverdir, file) + if file.find(".pdf") != -1: + self.download_file(server, file) + except: + return False # # 检测字符串的编码 # def detect_encoding(self, s): diff --git a/sf_sale/models/quick_easy_order.py b/sf_sale/models/quick_easy_order.py index e3bf3002..11acc06f 100644 --- a/sf_sale/models/quick_easy_order.py +++ b/sf_sale/models/quick_easy_order.py @@ -8,8 +8,8 @@ from datetime import datetime import requests from odoo import http from odoo.http import request -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file from odoo import models, fields, api from odoo.modules import get_resource_path from odoo.exceptions import ValidationError, UserError diff --git a/sf_sale/models/quick_easy_order_old.py b/sf_sale/models/quick_easy_order_old.py index 3ae65db3..92f6cda2 100644 --- a/sf_sale/models/quick_easy_order_old.py +++ b/sf_sale/models/quick_easy_order_old.py @@ -6,8 +6,8 @@ import os from datetime import datetime from stl import mesh # from OCC.Core.GProp import GProp_GProps -from OCC.Extend.DataExchange import read_step_file -from OCC.Extend.DataExchange import write_stl_file +# from OCC.Extend.DataExchange import read_step_file +# from OCC.Extend.DataExchange import write_stl_file from odoo.addons.sf_base.commons.common import Common from odoo import models, fields, api from odoo.modules import get_resource_path