文件写入cnc关联的attach里面

This commit is contained in:
jinling.yang
2022-11-30 17:19:46 +08:00
parent 8fce929022
commit 1bf8e8a268
3 changed files with 31 additions and 21 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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