From bdae9d9f959de30add9791f59446f77a58901954 Mon Sep 17 00:00:00 2001 From: gqh Date: Sun, 29 Jan 2023 15:42:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=81=A2=E5=A4=8D=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_bf_connect/models/models.py | 3 +- sf_dlm/data/product_data.xml | 3 - sf_dlm/models/__init__.py | 2 + sf_dlm/models/product_supplierinfo.py | 11 ++ sf_dlm/models/product_template.py | 14 +- sf_dlm/views/product_template_view.xml | 47 +++--- sf_machine_connect/__manifest__.py | 7 +- sf_machine_connect/models/ftp_client.py | 141 ++---------------- sf_machine_connect/models/ftp_operate.py | 5 +- .../views/SfWorkOrderBarcodes.xml | 3 +- sf_machine_connect/views/compensation.xml | 18 +-- sf_machine_connect/views/ftp_button.xml | 11 +- sf_machine_connect/views/machine_monitor.xml | 28 +--- sf_manufacturing/models/mrp_workcenter.py | 18 +++ .../views/mrp_workcenter_views.xml | 32 ++-- sf_manufacturing/views/mrp_workorder_view.xml | 31 ++-- sf_mrs_connect/controllers/controllers.py | 3 +- sf_mrs_connect/models/sync_common.py | 48 +++--- 18 files changed, 144 insertions(+), 281 deletions(-) create mode 100644 sf_dlm/models/product_supplierinfo.py diff --git a/sf_bf_connect/models/models.py b/sf_bf_connect/models/models.py index 9c9d59a1..3eeac229 100644 --- a/sf_bf_connect/models/models.py +++ b/sf_bf_connect/models/models.py @@ -25,5 +25,4 @@ class ResPartner(models.Model): return ran_str sf_token = fields.Char(u'Token', default=get_token) - sf_secret_key = fields.Char(u'密钥', default=get_secret) - + sf_secret_key = fields.Char(u'密钥', default=get_secret) \ No newline at end of file diff --git a/sf_dlm/data/product_data.xml b/sf_dlm/data/product_data.xml index aad3714c..f4b9b717 100644 --- a/sf_dlm/data/product_data.xml +++ b/sf_dlm/data/product_data.xml @@ -45,7 +45,6 @@ true serial - @@ -61,7 +60,6 @@ serial - 胚料采购模板 @@ -76,7 +74,6 @@ serial - \ No newline at end of file diff --git a/sf_dlm/models/__init__.py b/sf_dlm/models/__init__.py index 86d505b8..7d40ff65 100644 --- a/sf_dlm/models/__init__.py +++ b/sf_dlm/models/__init__.py @@ -1,3 +1,5 @@ from. import product_template +from. import product_supplierinfo + diff --git a/sf_dlm/models/product_supplierinfo.py b/sf_dlm/models/product_supplierinfo.py new file mode 100644 index 00000000..ae850401 --- /dev/null +++ b/sf_dlm/models/product_supplierinfo.py @@ -0,0 +1,11 @@ +from odoo import models, fields, api + + +class ResSupplierInfo(models.Model): + _inherit = 'product.supplierinfo' + + def _compute_is_subcontractor(self): + for supplier in self: + boms = supplier.product_id.variant_bom_ids + boms |= supplier.product_tmpl_id.bom_ids.filtered(lambda b: not b.product_id or b.product_id in (supplier.product_id or supplier.product_tmpl_id.product_variant_ids)) + supplier.is_subcontractor = supplier.partner_id in boms.subcontractor_id \ No newline at end of file diff --git a/sf_dlm/models/product_template.py b/sf_dlm/models/product_template.py index 40fcac15..725cbeb6 100644 --- a/sf_dlm/models/product_template.py +++ b/sf_dlm/models/product_template.py @@ -82,7 +82,7 @@ class ResProductTemplate(models.Model): item['model_height'] + model_type.embryo_tolerance), 'model_type_id': model_type.id, 'model_processing_panel': 'R', - 'model_machining_precision': item['model_machining_precision'], + 'model_machining_precision': item['model_machining_precision'], 'model_code': item['barcode'], 'length': item['model_long'], 'width': item['model_width'], @@ -92,7 +92,7 @@ class ResProductTemplate(models.Model): 'model_name': attachment.name, 'upload_model_file': [(6, 0, [attachment.id])], # 'single_manufacturing': True, - 'tracking': 'serial', + # 'tracking': 'serial', 'list_price': item['price'], # 'categ_id': self.env.ref('sf_dlm.product_category_finished_sf').id, 'materials_id': self.env['sf.production.materials'].search( @@ -158,14 +158,13 @@ class ResProductTemplate(models.Model): 'active': True } # 外协和采购生成的胚料需要根据材料型号绑定供应商 - if route_type == 'subcontract': - no_bom_copy_product_id.purchase_ok = True - no_bom_copy_product_id.seller_ids = [ - (0, 0, {'partner_id': supplier.partner_id.id, 'delay': 1.0, 'is_subcontractor': True})] - elif route_type == 'purchase': + if route_type == 'subcontract' or route_type == 'purchase': no_bom_copy_product_id.purchase_ok = True no_bom_copy_product_id.seller_ids = [ (0, 0, {'partner_id': supplier.partner_id.id, 'delay': 1.0})] + if route_type == 'subcontract': + partner = self.env['res.partner'].search([('id', '=', supplier.partner_id.id)]) + partner.is_subcontractor = True no_bom_copy_product_id.write(vals) logging.info('no_bom_copy_product_id-vals:%s' % vals) # product_id.product_tmpl_id.active = False @@ -249,7 +248,6 @@ class ResMrpBom(models.Model): [('materials_model_id', '=', materials_type.id)], limit=1, order='sequence asc') - logging.info('get_supplier-vals:%s' % seller_id) return seller_id # 匹配bom diff --git a/sf_dlm/views/product_template_view.xml b/sf_dlm/views/product_template_view.xml index c563f728..ab89ec5b 100644 --- a/sf_dlm/views/product_template_view.xml +++ b/sf_dlm/views/product_template_view.xml @@ -6,13 +6,13 @@ product.template - - - - + + + + - + @@ -36,18 +36,31 @@ - - - - - - - - - - - + + + diff --git a/sf_machine_connect/__manifest__.py b/sf_machine_connect/__manifest__.py index 7f116a51..52fee05c 100644 --- a/sf_machine_connect/__manifest__.py +++ b/sf_machine_connect/__manifest__.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. { - 'name': '机企猫智能工厂 对接机床', - 'version': '2.0', - 'summary': 'sf_machine_connect', + 'name': 'sf_machine_connect', + 'version': '1.0', + 'summary': '智能工厂机床连接模块', 'sequence': 10, 'description': """ 这是一个模块 @@ -20,7 +20,6 @@ 'views/WorkCenterBarcodes.xml', 'views/Stock_picking_Barcodes.xml', 'views/machine_monitor.xml', - # 'views/machine_info_present.xml', ], 'assets': { diff --git a/sf_machine_connect/models/ftp_client.py b/sf_machine_connect/models/ftp_client.py index 1941f09a..6744ca1a 100644 --- a/sf_machine_connect/models/ftp_client.py +++ b/sf_machine_connect/models/ftp_client.py @@ -24,23 +24,6 @@ class FtpButton(models.Model): _inherit = 'sf.cnc.processing' button_state = fields.Boolean(string='是否已经下发') - user_permissions = fields.Boolean(string='权限', related='workorder_id.user_permissions') - state = fields.Selection(string='状态', related='workorder_id.state') - - @api.onchange('users_ids') - def get_user_permissions(self): - uid = self.env.uid - for workorder in self: - if workorder.users_ids: - list_user_id = [] - for item in workorder.users_ids: - list_user_id.append(item.id) - if uid in list_user_id: - workorder.user_permissions = True - else: - workorder.user_permissions = False - else: - workorder.user_permissions = False def pri(self): """ @@ -70,13 +53,7 @@ class FtpButton(models.Model): except Exception: raise UserError("补偿值写入执行超时,请检查机床状态或者写入状态") - # host="192.168.2.158", port=8080, username="MITSUBISHI", password="CNC" - host = self.workorder_id.workcenter_id.machine_tool_id.ftp_host - port = self.workorder_id.workcenter_id.machine_tool_id.ftp_port - username = self.workorder_id.workcenter_id.machine_tool_id.ftp_num - pwd = self.workorder_id.workcenter_id.machine_tool_id.ftp_pwd - - ftp = ftp_operate.FtpController(host, port, username, pwd) + ftp = ftp_operate.FtpController() # ftp.delAllfile('C://Users//马广威//Desktop//ftp') a = self.cnc_id _logger.info(a.public) @@ -85,14 +62,12 @@ class FtpButton(models.Model): # file_path = '{}\{}\{}'.format(a._filestore(), a.store_fname.split('/'[0]), a.display_name) file_path_local = '{}/{}'.format('/nc2machine', a.display_name) - file_path_remote = '{}\{}'.format('//M80(192,168,2,142)//DS', a.display_name) + file_path_remote = '{}\{}'.format('//(192,168,2,141)//DS', a.display_name) with open(file_path_local, mode='wb+') as file: file.write(datas) # 存在本地的文件下发到机床 - _logger.info("=====================11================") ftp.upload_file(remotepath=file_path_remote, localpath=file_path_local) - _logger.info("=====================22================") except Exception as e: _logger.info("=====================================", e) raise UserError('NC下发执行超时, 请检查下发状态') @@ -109,41 +84,6 @@ class FtpButton(models.Model): # 'type': 'ir.actions.act_window', # 'target': 'new' # } - # def up_all(self): - # """ - # 此函数用于将NC代码全部下发到机床 - # :return: - # """ - # # host="192.168.2.158", port=8080, username="MITSUBISHI", password="CNC" - # host = self.workorder_id.workcenter_id.machine_tool_id.ftp_host - # port = self.workorder_id.workcenter_id.machine_tool_id.ftp_port - # username = self.workorder_id.workcenter_id.machine_tool_id.ftp_num - # pwd = self.workorder_id.workcenter_id.machine_tool_id.ftp_pwd - # - # ftp = ftp_operate.FtpController(host, port, username, pwd) - # # ftp.delAllfile('C://Users//马广威//Desktop//ftp') - # for item in self.cnc_ids: - # 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 = '{}\{}\{}'.format(a._filestore(), a.store_fname.split('/'[0]), a.display_name) - # # # file_path_local = '{}/{}'.format('/nc2machine', a.display_name) - # # file_path_local = '{}/{}'.format('D:\\jikimo', a.display_name) - # # # file_path_remote = '{}\{}'.format('//M80(192,168,2,142)//DS', a.display_name) - # # - # # with open(file_path_local, mode='wb+') as file: - # # file.write(datas) - # # 存在本地的文件下发到机床 - # # _logger.info("=====================11================") - # # ftp.upload_file(remotepath=file_path_remote, localpath=file_path_local) - # # _logger.info("=====================22================") - # # except Exception as e: - # # _logger.info("=====================================", e) - # # raise UserError('NC下发执行超时, 请检查下发状态') - def check_compensation_before_up(self): """ @@ -153,9 +93,9 @@ class FtpButton(models.Model): try: temp_dict = {} temp_dict[ - 'ns=1;s=Project_Default.Group1.Mitsubishi_NC.hongbianliang550'] = self.workorder_id.compensation_value_x + 'ns=1;s=Project_Default.Group1.Mitsubishi_NC2.hongbianliang550'] = self.workorder_id.compensation_value_x temp_dict[ - 'ns=1;s=Project_Default.Group1.Mitsubishi_NC.hongbianliang551'] = self.workorder_id.compensation_value_y + 'ns=1;s=Project_Default.Group1.Mitsubishi_NC2.hongbianliang551'] = self.workorder_id.compensation_value_y temp = py2opcua.Py2opcua() # temp.connect() temp.write(temp_dict) @@ -171,21 +111,6 @@ class Machine_ftp(models.Model): """ _inherit = 'sf.machine_tool' - workorder_ids = fields.One2many('mrp.workorder', 'machine_tool_id', string='工单') - - # 机床配置项目 - # ftp相关 - ftp_num = fields.Char('ftp账号') - ftp_pwd = fields.Char('ftp密码') - ftp_host = fields.Char('ftp地址') - ftp_port = fields.Integer('ftp端口') - # 补偿值写入相关 - x_compensation_node = fields.Char('x补偿值节点') - y_compensation_node = fields.Char('y补偿值节点') - # 数采配置相关 - machine_ip = fields.Char('机床IP') - - # 机床采集项目 timestamp = fields.Datetime('时间戳', readonly=True) signed = fields.Integer('刷新间隔', readonly=True) status = fields.Boolean('在线状态', readonly=True) @@ -235,63 +160,25 @@ class WorkCenterBarcode(models.Model): compensation_value_x = fields.Float(string='X轴补偿值') compensation_value_y = fields.Float(string='Y轴补偿值') button_compensation_state = fields.Boolean(string='是否已经补偿') - machine_tool_id = fields.Many2one('sf.machine_tool', string='机床') def compensation(self): - - hongbianliang550 = self.workcenter_id.machine_tool_id.x_compensation_node - hongbianliang551 = self.workcenter_id.machine_tool_id.y_compensation_node - + """ + 将节点与其值放入字典,字典作为参数传入 + :return: + """ try: temp_dict = {} - temp_dict[hongbianliang550] = self.compensation_value_x - temp_dict[hongbianliang551] = self.compensation_value_y - print("=================================") - print(temp_dict) - # temp = py2opcua.Py2opcua() - # # temp.connect() - # temp.write(temp_dict) - # self.button_compensation_state = True + temp_dict['ns=1;s=Project_Default.Group1.Mitsubishi_NC2.hongbianliang550'] = self.compensation_value_x + temp_dict['ns=1;s=Project_Default.Group1.Mitsubishi_NC2.hongbianliang551'] = self.compensation_value_y + temp = py2opcua.Py2opcua() + # temp.connect() + temp.write(temp_dict) + self.button_compensation_state = True # temp.disconnect() except Exception as e: _logger.info("=====================================", e) raise UserError('补偿值获取失败,或机床未连接,请检查') - def up_all(self): - """ - 此函数用于将NC代码全部下发到机床 - :return: - """ - # host="192.168.2.158", port=8080, username="MITSUBISHI", password="CNC" - 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 - print(host, port, username, pwd) - # ftp = ftp_operate.FtpController(host, port, username, pwd) - # ftp.delAllfile('C://Users//马广威//Desktop//ftp') - for item in self.cnc_ids: - 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 = '{}\{}\{}'.format(a._filestore(), a.store_fname.split('/'[0]), a.display_name) - # file_path_local = '{}/{}'.format('/nc2machine', a.display_name) - file_path_local = '{}/{}'.format('D:\\jikimo', a.display_name) - # file_path_remote = '{}\{}'.format('//M80(192,168,2,142)//DS', a.display_name) - - with open(file_path_local, mode='wb+') as file: - file.write(datas) - # 存在本地的文件下发到机床 - # _logger.info("=====================11================") - # ftp.upload_file(remotepath=file_path_remote, localpath=file_path_local) - # _logger.info("=====================22================") - # except Exception as e: - # _logger.info("=====================================", e) - # raise UserError('NC下发执行超时, 请检查下发状态') - def get__state(self): pay_time = str(datetime.now()) json = { diff --git a/sf_machine_connect/models/ftp_operate.py b/sf_machine_connect/models/ftp_operate.py index e60d5807..18838684 100644 --- a/sf_machine_connect/models/ftp_operate.py +++ b/sf_machine_connect/models/ftp_operate.py @@ -45,9 +45,6 @@ class FtpController: self.port = port self.username = username self.password = password - # 测试 - print("==============================================") - print(self.username, self.port, self.host, self.password) ftp = FTP_P() # self.ftp.set_debuglevel(2) #打开调试级别2,显示详细信息 ftp.set_pasv(0) # 0主动模式 1 #被动模式 @@ -71,7 +68,7 @@ class FtpController: :param localpath: :return: """ - bufsize = 8192 + bufsize = 1024 # fp = open(localpath, 'rb') # self.ftp.storbinary('STOR ' + remotepath, fp, bufsize) # fp.close() diff --git a/sf_machine_connect/views/SfWorkOrderBarcodes.xml b/sf_machine_connect/views/SfWorkOrderBarcodes.xml index 11c155c5..858d96f0 100644 --- a/sf_machine_connect/views/SfWorkOrderBarcodes.xml +++ b/sf_machine_connect/views/SfWorkOrderBarcodes.xml @@ -1,4 +1,4 @@ - + sf.install.the.tray.workorder.form.scan.barcode @@ -8,6 +8,7 @@ + diff --git a/sf_machine_connect/views/compensation.xml b/sf_machine_connect/views/compensation.xml index 4a2e6e69..42c0b383 100644 --- a/sf_machine_connect/views/compensation.xml +++ b/sf_machine_connect/views/compensation.xml @@ -11,26 +11,12 @@
-
- -
- - + +
- - - - -
diff --git a/sf_machine_connect/views/ftp_button.xml b/sf_machine_connect/views/ftp_button.xml index c8bf8caa..4eb8da2a 100644 --- a/sf_machine_connect/views/ftp_button.xml +++ b/sf_machine_connect/views/ftp_button.xml @@ -10,17 +10,8 @@ - - - -