从ftp获取cnc程序文件
This commit is contained in:
@@ -27,7 +27,7 @@ class Http(models.AbstractModel):
|
|||||||
raise AuthenticationError('无效的token')
|
raise AuthenticationError('无效的token')
|
||||||
timestamp_str = int(time.time())
|
timestamp_str = int(time.time())
|
||||||
# 设置API接口请求时间,不能超过5秒
|
# 设置API接口请求时间,不能超过5秒
|
||||||
deltime = datetime.timedelta(seconds=60)
|
deltime = datetime.timedelta(seconds=5)
|
||||||
if abs(int(datas['HTTP_TIMESTAMP'])-timestamp_str) > deltime.seconds:
|
if abs(int(datas['HTTP_TIMESTAMP'])-timestamp_str) > deltime.seconds:
|
||||||
raise AuthenticationError('请求已过期')
|
raise AuthenticationError('请求已过期')
|
||||||
# 获得sha1_str加密字符串
|
# 获得sha1_str加密字符串
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import os
|
||||||
import json
|
import json
|
||||||
import requests
|
import requests
|
||||||
import logging
|
import logging
|
||||||
@@ -5,6 +6,7 @@ from datetime import datetime
|
|||||||
from dateutil.relativedelta import relativedelta
|
from dateutil.relativedelta import relativedelta
|
||||||
from odoo import api, fields, models, SUPERUSER_ID, _
|
from odoo import api, fields, models, SUPERUSER_ID, _
|
||||||
from odoo.addons.sf_base.commons.common import Common
|
from odoo.addons.sf_base.commons.common import Common
|
||||||
|
from odoo.addons.sf_mrs_connect.models.ftp_operate import FtpController
|
||||||
|
|
||||||
|
|
||||||
class ResMrpWorkOrder(models.Model):
|
class ResMrpWorkOrder(models.Model):
|
||||||
@@ -319,7 +321,7 @@ class CNCprocessing(models.Model):
|
|||||||
workorder = self.env['mrp.workorder'].search([('production_id.name', '=', obj['manufacturing_order_no']),
|
workorder = self.env['mrp.workorder'].search([('production_id.name', '=', obj['manufacturing_order_no']),
|
||||||
('processing_panel', '=', obj['processing_panel']),
|
('processing_panel', '=', obj['processing_panel']),
|
||||||
('routing_type', '=', 'CNC加工')])
|
('routing_type', '=', 'CNC加工')])
|
||||||
self.env['sf.cnc.processing'].create({
|
vals = {
|
||||||
'workorder_id': workorder.id,
|
'workorder_id': workorder.id,
|
||||||
'sequence_number': obj['sequence_number'],
|
'sequence_number': obj['sequence_number'],
|
||||||
'program_name': obj['program_name'],
|
'program_name': obj['program_name'],
|
||||||
@@ -333,4 +335,20 @@ class CNCprocessing(models.Model):
|
|||||||
'cutting_tool_handle_type': obj['cutting_tool_handle_type'],
|
'cutting_tool_handle_type': obj['cutting_tool_handle_type'],
|
||||||
'remark': obj['remark']
|
'remark': obj['remark']
|
||||||
# 'FJGDate': obj['']
|
# 'FJGDate': obj['']
|
||||||
|
}
|
||||||
|
return self.env['sf.cnc.processing'].create(vals)
|
||||||
|
|
||||||
|
def attachment_create(self, name, data):
|
||||||
|
attachment = self.env['ir.attachment'].create({
|
||||||
|
'datas': data,
|
||||||
|
'type': 'binary',
|
||||||
|
'description': '程序文件',
|
||||||
|
'name': name
|
||||||
})
|
})
|
||||||
|
return attachment
|
||||||
|
|
||||||
|
def download_file_tmp(self, model_code, processing_panel):
|
||||||
|
remotepath = os.path.join('/', model_code, 'return', processing_panel)
|
||||||
|
serverdir = os.path.join('/tmp', model_code, 'return', processing_panel)
|
||||||
|
ftp = FtpController()
|
||||||
|
ftp.download_file_tree(remotepath, serverdir)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from odoo.http import request
|
|||||||
|
|
||||||
class Sf_Mrs_Connect(http.Controller):
|
class Sf_Mrs_Connect(http.Controller):
|
||||||
|
|
||||||
@http.route('/api/cnc_processing/create', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False,
|
@http.route('/api/cnc_processing/create', type='json', auth='none', methods=['GET', 'POST'], csrf=False,
|
||||||
cors="*")
|
cors="*")
|
||||||
def get_cnc_processing_create(self, **kw):
|
def get_cnc_processing_create(self, **kw):
|
||||||
"""
|
"""
|
||||||
@@ -22,6 +22,10 @@ class Sf_Mrs_Connect(http.Controller):
|
|||||||
ret = json.loads(datas)
|
ret = json.loads(datas)
|
||||||
ret = json.loads(ret['result'])
|
ret = json.loads(ret['result'])
|
||||||
for obj in ret:
|
for obj in ret:
|
||||||
request.env['sf.cnc.processing'].with_user(request.env.ref("base.user_admin")).CNCprocessing_create(obj)
|
cnc = request.env['sf.cnc.processing'].with_user(request.env.ref("base.user_admin")).CNCprocessing_create(obj)
|
||||||
|
# 从ftp拉取对应的文件
|
||||||
|
model_code = cnc.workorder_id.product_id.barcode
|
||||||
|
processing_panel = cnc.workorder_id.processing_panel
|
||||||
|
cnc.with_user(request.env.ref("base.user_admin")).download_file_tmp(model_code, processing_panel)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.info('get_cnc_processing_create error:%s' % e)
|
logging.info('get_cnc_processing_create error:%s' % e)
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from . import ftp_operate
|
||||||
from . import res_config_setting
|
from . import res_config_setting
|
||||||
from . import sync_common
|
from . import sync_common
|
||||||
|
|
||||||
|
|||||||
53
sf_mrs_connect/models/ftp_operate.py
Normal file
53
sf_mrs_connect/models/ftp_operate.py
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import os
|
||||||
|
import posixpath
|
||||||
|
from odoo.modules import get_resource_path
|
||||||
|
from ftplib import FTP
|
||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
# FTP接口类
|
||||||
|
class FtpController():
|
||||||
|
'''
|
||||||
|
这是ftp接口类,在类初始化的时候就连接了ftp服务器,能否成功连接有反馈。
|
||||||
|
类中定义了两个接口:上传接口和删除接口
|
||||||
|
'''
|
||||||
|
|
||||||
|
ftp = FTP()
|
||||||
|
|
||||||
|
def __init__(self, host="192.168.50.202", port=21, username="ftpuser", password="123456"):
|
||||||
|
try:
|
||||||
|
self.ftp.connect(host, port)
|
||||||
|
self.ftp.login(username, password)
|
||||||
|
logging.info("连接: %s" % 111111)
|
||||||
|
except:
|
||||||
|
logging.info("连接失败: ")
|
||||||
|
|
||||||
|
# 下载目录下的文件
|
||||||
|
def download_file_tree(self, remotepath, serverdir):
|
||||||
|
if not os.path.exists(serverdir):
|
||||||
|
os.makedirs(serverdir)
|
||||||
|
logging.info("remotepath: %s" % remotepath)
|
||||||
|
self.ftp.cwd(remotepath)
|
||||||
|
logging.info("serverdir: %s" % serverdir)
|
||||||
|
remotenames = self.ftp.nlst()
|
||||||
|
logging.info("remotenames: %s" % remotenames)
|
||||||
|
for file in remotenames:
|
||||||
|
server = os.path.join(serverdir, file)
|
||||||
|
if file.find(".") == -1:
|
||||||
|
if not os.path.exists(serverdir):
|
||||||
|
os.makedirs(serverdir)
|
||||||
|
self.download_file_tree(server, file)
|
||||||
|
else:
|
||||||
|
logging.info("server: %s" % server)
|
||||||
|
self.download_file(server, file)
|
||||||
|
self.ftp.cwd("..")
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def download_file(self, serverfile, remotefile): # 下载指定目录下的指定文件
|
||||||
|
file_handler = open(serverfile, 'wb')
|
||||||
|
logging.info("file_handler: %s" % file_handler)
|
||||||
|
self.ftp.retrbinary('RETR ' + remotefile, file_handler.write)
|
||||||
|
file_handler.close()
|
||||||
|
return True
|
||||||
Reference in New Issue
Block a user