文件写入cnc关联的attach里面
This commit is contained in:
@@ -2,6 +2,7 @@ import os
|
|||||||
import json
|
import json
|
||||||
import requests
|
import requests
|
||||||
import logging
|
import logging
|
||||||
|
import base64
|
||||||
from datetime import datetime
|
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, _
|
||||||
@@ -321,6 +322,8 @@ 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加工')])
|
||||||
|
logging.info('workorder:%s' % workorder)
|
||||||
|
logging.info('production_id.name:%s' % workorder.production_id.name)
|
||||||
vals = {
|
vals = {
|
||||||
'workorder_id': workorder.id,
|
'workorder_id': workorder.id,
|
||||||
'sequence_number': obj['sequence_number'],
|
'sequence_number': obj['sequence_number'],
|
||||||
@@ -340,7 +343,7 @@ class CNCprocessing(models.Model):
|
|||||||
|
|
||||||
def attachment_create(self, name, data):
|
def attachment_create(self, name, data):
|
||||||
attachment = self.env['ir.attachment'].create({
|
attachment = self.env['ir.attachment'].create({
|
||||||
'datas': data,
|
'datas': base64.b64encode(data),
|
||||||
'type': 'binary',
|
'type': 'binary',
|
||||||
'description': '程序文件',
|
'description': '程序文件',
|
||||||
'name': name
|
'name': name
|
||||||
@@ -352,3 +355,14 @@ class CNCprocessing(models.Model):
|
|||||||
serverdir = os.path.join('/tmp', model_code, 'return', processing_panel)
|
serverdir = os.path.join('/tmp', model_code, 'return', processing_panel)
|
||||||
ftp = FtpController()
|
ftp = FtpController()
|
||||||
ftp.download_file_tree(remotepath, serverdir)
|
ftp.download_file_tree(remotepath, serverdir)
|
||||||
|
return serverdir
|
||||||
|
|
||||||
|
def write_file(self, nc_file_path, cnc):
|
||||||
|
if os.path.exists(nc_file_path):
|
||||||
|
with open(nc_file_path, 'rb') as file:
|
||||||
|
data_bytes = file.read()
|
||||||
|
attachment = self.attachment_create(cnc.program_name + '.NC', data_bytes)
|
||||||
|
cnc.write({'cnc_id': attachment.id})
|
||||||
|
file.close()
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
from datetime import date, timedelta
|
from datetime import date, timedelta
|
||||||
from odoo import http
|
from odoo import http
|
||||||
from odoo.http import request
|
from odoo.http import request
|
||||||
@@ -23,9 +24,12 @@ class Sf_Mrs_Connect(http.Controller):
|
|||||||
ret = json.loads(ret['result'])
|
ret = json.loads(ret['result'])
|
||||||
for obj in ret:
|
for obj in ret:
|
||||||
cnc = 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)
|
||||||
|
logging.info('cnc:%s' % cnc)
|
||||||
# 从ftp拉取对应的文件
|
# 从ftp拉取对应的文件
|
||||||
model_code = cnc.workorder_id.product_id.barcode
|
model_code = cnc.workorder_id.product_id.barcode
|
||||||
processing_panel = cnc.workorder_id.processing_panel
|
processing_panel = cnc.workorder_id.processing_panel
|
||||||
cnc.with_user(request.env.ref("base.user_admin")).download_file_tmp(model_code, processing_panel)
|
server_dir = cnc.with_user(request.env.ref("base.user_admin")).download_file_tmp(model_code, processing_panel)
|
||||||
|
cnc_file_path = os.path.join(server_dir, cnc.program_name + '.NC')
|
||||||
|
cnc.with_user(request.env.ref("base.user_admin")).write_file(cnc_file_path, cnc)
|
||||||
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)
|
||||||
|
|||||||
@@ -27,27 +27,19 @@ class FtpController():
|
|||||||
def download_file_tree(self, remotepath, serverdir):
|
def download_file_tree(self, remotepath, serverdir):
|
||||||
if not os.path.exists(serverdir):
|
if not os.path.exists(serverdir):
|
||||||
os.makedirs(serverdir)
|
os.makedirs(serverdir)
|
||||||
logging.info("remotepath: %s" % remotepath)
|
|
||||||
self.ftp.cwd(remotepath)
|
self.ftp.cwd(remotepath)
|
||||||
logging.info("serverdir: %s" % serverdir)
|
|
||||||
remotenames = self.ftp.nlst()
|
remotenames = self.ftp.nlst()
|
||||||
logging.info("remotenames: %s" % remotenames)
|
|
||||||
for file in remotenames:
|
for file in remotenames:
|
||||||
server = os.path.join(serverdir, file)
|
server = os.path.join(serverdir, file)
|
||||||
if file.find(".") == -1:
|
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.download_file(server, file)
|
||||||
self.ftp.cwd("..")
|
else:
|
||||||
return True
|
return False
|
||||||
|
|
||||||
|
|
||||||
def download_file(self, serverfile, remotefile): # 下载指定目录下的指定文件
|
# 下载指定目录下的指定文件
|
||||||
|
def download_file(self, serverfile, remotefile):
|
||||||
file_handler = open(serverfile, 'wb')
|
file_handler = open(serverfile, 'wb')
|
||||||
logging.info("file_handler: %s" % file_handler)
|
|
||||||
self.ftp.retrbinary('RETR ' + remotefile, file_handler.write)
|
self.ftp.retrbinary('RETR ' + remotefile, file_handler.write)
|
||||||
file_handler.close()
|
file_handler.close()
|
||||||
return True
|
|
||||||
|
|||||||
Reference in New Issue
Block a user