master-sf1.0
This commit is contained in:
1
sf_machine_connect/wizard/__init__.py
Normal file
1
sf_machine_connect/wizard/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import action_up
|
||||
113
sf_machine_connect/wizard/action_up.py
Normal file
113
sf_machine_connect/wizard/action_up.py
Normal file
@@ -0,0 +1,113 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import base64
|
||||
import logging
|
||||
import os
|
||||
import json
|
||||
import hashlib
|
||||
import time
|
||||
import requests
|
||||
from datetime import datetime
|
||||
|
||||
from odoo import fields, models, api, _
|
||||
from odoo.exceptions import ValidationError
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.addons.sf_machine_connect.models import py2opcua, ftp_operate
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class UpSelectWizard(models.TransientModel):
|
||||
_name = 'up.select.wizard'
|
||||
_description = 'Up Select Wizard'
|
||||
|
||||
workorder_id = fields.Many2one('mrp.workorder', string='工单', readonly=True)
|
||||
workcenter_id = fields.Many2one('mrp.workcenter', string='工作中心', related='workorder_id.workcenter_id',
|
||||
readonly=True)
|
||||
program_ids = fields.Many2many('sf.cnc.processing', string='程序列表')
|
||||
|
||||
|
||||
def confirm_up(self):
|
||||
# 合并下发前删除机床上的全部程序
|
||||
try:
|
||||
filepath = '/nc2machine'
|
||||
del_list = os.listdir(filepath)
|
||||
_logger.info("=====================================%s" % del_list)
|
||||
for f in del_list:
|
||||
file_path = os.path.join(filepath, f)
|
||||
if os.path.isfile(file_path):
|
||||
os.remove(file_path)
|
||||
except Exception as e:
|
||||
_logger.info("=====================================", e)
|
||||
raise UserError('程序删除失败,请重试')
|
||||
host = self.workcenter_id.machine_tool_id.ftp_host
|
||||
port = self.workcenter_id.machine_tool_id.ftp_port
|
||||
username = self.workcenter_id.machine_tool_id.ftp_num
|
||||
pwd = self.workcenter_id.machine_tool_id.ftp_pwd
|
||||
remote_path = self.workcenter_id.machine_tool_id.ftp_remote_path
|
||||
print(host, port, username, pwd, remote_path)
|
||||
ftp = ftp_operate.FtpController(host, port, username, pwd)
|
||||
sequence_collect = []
|
||||
file_path_local = ''
|
||||
file_path_remote = ''
|
||||
try:
|
||||
# 给文件名
|
||||
begin_name1 = self.program_ids[0].cnc_id.display_name.split('-')
|
||||
temp_name1 = begin_name1[-1].split('.')
|
||||
final_name = '%s-MERGE.%s' % (begin_name1[0], temp_name1[-1])
|
||||
print(final_name)
|
||||
|
||||
for item in self.program_ids:
|
||||
# print(item.program_name)
|
||||
# print(item.cnc_id)
|
||||
sequence_collect.append(item.sequence_number)
|
||||
a = item.cnc_id
|
||||
print(a.display_name)
|
||||
_logger.info(a.public)
|
||||
_logger.info(a.display_name)
|
||||
datas = base64.standard_b64decode(a.datas)
|
||||
file_path_local = '{}/{}'.format('/nc2machine', final_name)
|
||||
|
||||
# 本地测试合并下发
|
||||
# file_path_local = '{}/{}'.format('D:\\jikimo', a.display_name)
|
||||
# file_path_remote = '{}\{}'.format('//M80(192,168,2,142)//DS', a.display_name)
|
||||
file_path_remote = '{}\{}'.format(remote_path, final_name)
|
||||
# 合并文件
|
||||
with open(file_path_local, mode='ab+') as file:
|
||||
file.write(datas)
|
||||
# 下发成功标识
|
||||
item.button_state = True
|
||||
_logger.info('========初次合并成功===============')
|
||||
_logger.info(file_path_local)
|
||||
# 去除合并文件中间部分的头尾
|
||||
with open(file_path_local, mode='rb+') as f:
|
||||
# _logger.info(f.read())
|
||||
# content = f.read()
|
||||
# _logger.info(content)
|
||||
new_content = f.read().replace(b'\r\nM30\r\n%\r\n%\r\n', b'\r\n')
|
||||
# _logger.info(new_content)
|
||||
f.seek(0)
|
||||
_logger.info(111111111111111111111111111111111111111)
|
||||
f.truncate()
|
||||
_logger.info(2222222222222222222222222)
|
||||
f.write(new_content)
|
||||
_logger.info(3333333333333333333333333)
|
||||
_logger.info('========二次合并成功===============')
|
||||
# 存在本地的文件下发到机床
|
||||
_logger.info("==========存在服务器成功,准备下发===========")
|
||||
ftp.upload_file(remotepath=file_path_remote, localpath=file_path_local)
|
||||
ftp.close_ftp()
|
||||
|
||||
up_time = str(datetime.now())
|
||||
sequence_str = ','.join(sequence_collect)
|
||||
self.workorder_id.delivery_records.create({
|
||||
'delivery_type': '合并下发',
|
||||
'delivery_time': up_time,
|
||||
'influence_record': sequence_str,
|
||||
})
|
||||
_logger.info("==============合并下发成功==============")
|
||||
except Exception as e:
|
||||
for item in self.program_ids:
|
||||
item.button_state = False
|
||||
_logger.info("=====================================", e)
|
||||
raise UserError('NC下发执行超时, 请检查下发状态')
|
||||
|
||||
34
sf_machine_connect/wizard/up_select.xml
Normal file
34
sf_machine_connect/wizard/up_select.xml
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<record id="action_up_select_form" model="ir.ui.view">
|
||||
<field name="name">CNC工单</field>
|
||||
<field name="model">up.select.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<group>
|
||||
<field name="workcenter_id"/>
|
||||
<field name="workorder_id"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="program_ids" widget='many2many_tags' domain="[('workorder_id', '=', workorder_id)]"/>
|
||||
<!-- <field name="program_ids" domain="[('workorder_id', '=', workorder_id)]"/>-->
|
||||
</group>
|
||||
<footer>
|
||||
<button string="合并下发" name="confirm_up" type="object" class="btn-primary" confirm="是否确认合并下发"/>
|
||||
<button string="取消" class="btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_up_select" model="ir.actions.act_window">
|
||||
<field name="name">选择要下发的NC程序</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<!-- <field name="res_model">up.select.wizard</field>-->
|
||||
<field name="res_model">up.select.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="action_up_select_form"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user