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 75badcc8..4af8315b 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/views/mrp_production_addional_change.xml b/sf_manufacturing/views/mrp_production_addional_change.xml index 817d5e39..e0cddf21 100644 --- a/sf_manufacturing/views/mrp_production_addional_change.xml +++ b/sf_manufacturing/views/mrp_production_addional_change.xml @@ -68,7 +68,6 @@ draft,confirmed,progress,completed,done - @@ -79,8 +78,8 @@ - + @@ -255,7 +254,9 @@ - {'invisible': [('schedule_state', '=', '未排')]} + {'invisible': ['|',('schedule_state', '=', '未排'),('workorder_ids', '=', + [])]} + diff --git a/sf_mrs_connect/controllers/controllers.py b/sf_mrs_connect/controllers/controllers.py index 5102efdb..ee2ef3e5 100644 --- a/sf_mrs_connect/controllers/controllers.py +++ b/sf_mrs_connect/controllers/controllers.py @@ -31,18 +31,19 @@ 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) - 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) - return json.JSONEncoder().encode(res) + 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拉取失败' % (ret['programming_no']) + return json.JSONEncoder().encode(res) for production in productions: if not production.workorder_ids: production.product_id.model_processing_panel = ret['processing_panel'] diff --git a/sf_mrs_connect/models/ftp_operate.py b/sf_mrs_connect/models/ftp_operate.py index 4cd5e3ba..6d7d172c 100644 --- a/sf_mrs_connect/models/ftp_operate.py +++ b/sf_mrs_connect/models/ftp_operate.py @@ -21,6 +21,27 @@ 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) + # 切换到上级目录 + current_dir = '/' + for directory in directories: + if directory: + # 检查目录是否存在 + if (directory in ['NC']) or (directory not in ['home', 'ftp', 'ftp_root', 'NC']): + self.ftp.cwd(directory) + if directory not in ['home', 'ftp', 'ftp_root', 'NC']: + # 切换到新的目录 + 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 +53,22 @@ 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目录 ") + 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) + return True + except: + return False # # 检测字符串的编码 # def detect_encoding(self, s):