Merge branch 'feature/从ftp获取cnc程序文件' into develop

# Conflicts:
#	sf_manufacturing/models/mrp_workorder.py
This commit is contained in:
jinling.yang
2022-11-30 17:27:47 +08:00
5 changed files with 89 additions and 12 deletions

View File

@@ -27,7 +27,7 @@ class Http(models.AbstractModel):
raise AuthenticationError('无效的token')
timestamp_str = int(time.time())
# 设置API接口请求时间,不能超过5秒
deltime = datetime.timedelta(seconds=60)
deltime = datetime.timedelta(seconds=5)
if abs(int(datas['HTTP_TIMESTAMP'])-timestamp_str) > deltime.seconds:
raise AuthenticationError('请求已过期')
# 获得sha1_str加密字符串

View File

@@ -1,18 +1,17 @@
import os
import json
import math
import requests
import logging
import base64
from datetime import datetime
from dateutil.relativedelta import relativedelta
from odoo import api, fields, models, SUPERUSER_ID, _
<<<<<<< HEAD
from odoo.exceptions import ValidationError
from odoo.addons.sf_base.commons.common import Common
=======
from odoo.addons.sf_base.commons.common import Common
from odoo.exceptions import UserError
>>>>>>> b2d1e9ce8c5d8965ed09c3fbd6de543708223487
from odoo.addons.sf_mrs_connect.models.ftp_operate import FtpController
class ResMrpWorkOrder(models.Model):
@@ -347,7 +346,7 @@ class CNCprocessing(models.Model):
workorder = self.env['mrp.workorder'].search([('production_id.name', '=', obj['manufacturing_order_no']),
('processing_panel', '=', obj['processing_panel']),
('routing_type', '=', 'CNC加工')])
self.env['sf.cnc.processing'].create({
vals = {
'workorder_id': workorder.id,
'sequence_number': obj['sequence_number'],
'program_name': obj['program_name'],
@@ -359,9 +358,37 @@ class CNCprocessing(models.Model):
'depth_of_processing_z': obj['depth_of_processing_z'],
'cutting_tool_extension_length': obj['cutting_tool_extension_length'],
'cutting_tool_handle_type': obj['cutting_tool_handle_type'],
'estimated_processing_time': obj['estimated_processing_time'],
'remark': obj['remark']
# 'FJGDate': obj['']
}
return self.env['sf.cnc.processing'].create(vals)
def attachment_create(self, name, data):
attachment = self.env['ir.attachment'].create({
'datas': base64.b64encode(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)
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
class SfWorkOrderBarcodes(models.Model):
"""
@@ -371,9 +398,8 @@ class SfWorkOrderBarcodes(models.Model):
_inherit = ["mrp.workorder", "barcodes.barcode_events_mixin"]
def on_barcode_scanned(self, barcode):
tray_code = self.env['sf.tray'].search([('code', '=', barcode)])
self.tray_code = tray_code.code
workorder = self.env['mrp.workorder'].browse(self.ids)
workorder.gettray_auto(barcode)

View File

@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import json
import logging
import os
from datetime import date, timedelta
from odoo import http
from odoo.http import request
@@ -22,6 +23,12 @@ class Sf_Mrs_Connect(http.Controller):
ret = json.loads(datas)
ret = json.loads(ret['result'])
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
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:
logging.info('get_cnc_processing_create error:%s' % e)

View File

@@ -1,3 +1,4 @@
from . import ftp_operate
from . import res_config_setting
from . import sync_common

View File

@@ -0,0 +1,43 @@
# -*- 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)
except:
logging.info("连接失败: ")
# 下载目录下的文件
def download_file_tree(self, remotepath, serverdir):
if not os.path.exists(serverdir):
os.makedirs(serverdir)
self.ftp.cwd(remotepath)
remotenames = self.ftp.nlst()
for file in remotenames:
server = os.path.join(serverdir, file)
if file.find(".") != -1:
self.download_file(server, file)
else:
return False
# 下载指定目录下的指定文件
def download_file(self, serverfile, remotefile):
file_handler = open(serverfile, 'wb')
self.ftp.retrbinary('RETR ' + remotefile, file_handler.write)
file_handler.close()