diff --git a/requirements.txt b/requirements.txt index 5aabe0ef..8226420a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,4 +4,4 @@ wechatpy==1.8.18 pycryptodome==3.22.0 openupgradelib==3.10.0 opcua==0.98.13 -openpyxl \ No newline at end of file +openpyxl diff --git a/sf_base/models/basic_parameters_fixture.py b/sf_base/models/basic_parameters_fixture.py index 868114e8..86432f7a 100644 --- a/sf_base/models/basic_parameters_fixture.py +++ b/sf_base/models/basic_parameters_fixture.py @@ -67,6 +67,52 @@ class BasicParametersFixture(models.Model): mounting_hole_depth = fields.Float('安装孔深度(mm)', digits=(16, 2)) centering_diameter = fields.Float('定心直径(mm)', digits=(16, 2)) + # ‘磁吸托盘’ 字段 + magnet_tray_length = fields.Float('磁吸托盘长度(mm)', digits=(16, 2)) + magnet_tray_width = fields.Float('磁吸托盘宽度(mm)', digits=(16, 2)) + magnet_tray_height = fields.Float('磁吸托盘厚度(mm)', digits=(16, 2)) + magnet_tray_diameter = fields.Float('磁吸托盘直径(mm)', digits=(16, 2)) + magnet_tray_weight = fields.Float('磁吸托盘重量(kg)', digits=(16, 2)) + + magnet_max_adsorp_length = fields.Float('磁吸托盘最大吸附长度(mm)', digits=(16, 2)) + magnet_max_adsorp_width = fields.Float('磁吸托盘最大吸附宽度(mm)', digits=(16, 2)) + magnet_max_adsorp_height = fields.Float('磁吸托盘最大吸附厚度(mm)', digits=(16, 2)) + magnet_max_adsorp_diameter = fields.Float('磁吸托盘最大吸附直径(mm)', digits=(16, 2)) + magnet_max_adsorp_force = fields.Float('磁吸托盘最大吸附力(N)', digits=(16, 2)) + + magnet_unlocking_method = fields.Selection( + [('手动', '手动'), ('气动', '气动'), ('液压', '液压'), ('电动', '电动'), ('其他', '其他')], + string='磁吸托盘锁紧方式' + ) + magnet_flatness = fields.Char('磁吸托盘平面精度(mm)', size=20) + magnet_max_load = fields.Float('磁吸托盘最大负载(kg)', digits=(16, 2)) + + # ‘气吸托盘’ 字段 + air_tray_length = fields.Float('气吸托盘长度(mm)', digits=(16, 2)) + air_tray_width = fields.Float('气吸托盘宽度(mm)', digits=(16, 2)) + air_tray_height = fields.Float('气吸托盘高度(mm)', digits=(16, 2)) + air_tray_diameter = fields.Float('气吸托盘直径(mm)', digits=(16, 2)) + air_tray_weight = fields.Float('气吸托盘重量(kg)', digits=(16, 2)) + + air_max_adsorp_length = fields.Float('气吸托盘最大吸附长度(mm)', digits=(16, 2)) + air_max_adsorp_width = fields.Float('气吸托盘最大吸附宽度(mm)', digits=(16, 2)) + air_max_adsorp_height = fields.Float('气吸托盘最大吸附厚度(mm)', digits=(16, 2)) + air_max_adsorp_diameter = fields.Float('气吸托盘最大吸附直径(mm)', digits=(16, 2)) + air_max_adsorp_force = fields.Float('气吸托盘最大吸附力(N)', digits=(16, 2)) + + air_unlocking_method = fields.Selection( + [('手动', '手动'), ('气动', '气动'), ('液压', '液压'), ('电动', '电动'), ('其他', '其他')], + string='气吸托盘锁紧方式' + ) + air_flatness = fields.Char('气吸托盘平面精度(mm)', size=20) + air_max_load = fields.Float('气吸托盘最大负载(kg)', digits=(16, 2)) + air_boolean_chip_blowing_function = fields.Boolean('气吸托盘是否有吹屑功能') + air_way_to_install = fields.Selection( + [('接口式', '接口式'), ('螺栓固定', '螺栓固定'), ('磁吸式', '磁吸式'), ('其他', '其他')], + string='气吸托盘安装方式' + ) + + code = fields.Char('编码') active = fields.Boolean('有效', default=True) @@ -85,6 +131,10 @@ class BasicParametersFixture(models.Model): return self._json_adapter_board_fixture_param(fixture_materials_data) elif fixture_materials_name == '三爪卡盘': return self._json_scroll_chuck_param(fixture_materials_data) + elif fixture_materials_name == '磁吸托盘': + return self._json_magnet_tray_param(fixture_materials_data) + elif fixture_materials_name == '气吸托盘': + return self._json_air_tray_param(fixture_materials_data) return {} def _json_zero_chuck_param(self, obj): @@ -284,3 +334,57 @@ class BasicParametersFixture(models.Model): 'centering_diameter': obj['centering_diameter'], 'type_of_drive': obj['type_of_drive'], 'active': obj['active']} + + def _json_magnet_tray_param(self, obj): + """磁吸托盘:将data数据转换成list数据""" + return { + 'code': obj['code'], + 'fixture_model_id': self.env['sf.fixture.model'].sudo().search( + [('code', '=', obj.get('fixture_model_code'))]).id, + 'name': obj['name'], + 'length': obj['length'], + 'width': obj['width'], + 'height': obj['height'], + 'diameter': obj['diameter'], + 'weight': obj['weight'], + 'max_adsorp_length': obj['max_adsorp_length'], + 'max_adsorp_width': obj['max_adsorp_width'], + 'max_adsorp_height': obj['max_adsorp_height'], + 'max_adsorp_diameter': obj.get('max_adsorp_diameter'), + 'max_adsorp_force': obj['max_adsorp_force'], + 'flatness': obj.get('flatness'), + 'max_load': obj.get('max_load'), + 'unlocking_method': obj.get('unlocking_method'), + 'materials_model_id': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)] + ).id if obj.get('materials_model_id') else False, + 'active': obj.get('active', True), + } + + def _json_air_tray_param(self, obj): + """气吸托盘:将data数据转换成list数据""" + return { + 'code': obj['code'], + 'fixture_model_id': self.env['sf.fixture.model'].sudo().search( + [('code', '=', obj.get('fixture_model_code'))]).id, + 'name': obj['name'], + 'length': obj['length'], + 'width': obj['width'], + 'height': obj['height'], + 'diameter': obj['diameter'], + 'weight': obj['weight'], + 'max_adsorp_length': obj['max_adsorp_length'], + 'max_adsorp_width': obj['max_adsorp_width'], + 'max_adsorp_height': obj['max_adsorp_height'], + 'max_adsorp_diameter': obj.get('max_adsorp_diameter'), + 'max_adsorp_force': obj['max_adsorp_force'], + 'flatness': obj.get('flatness'), + 'max_load': obj.get('max_load'), + 'unlocking_method': obj.get('unlocking_method'), + 'boolean_chip_blowing_function': obj.get('blowing_function', False), + 'way_to_install': obj.get('way_to_install'), + 'materials_model_id': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)] + ).id if obj.get('materials_model_id') else False, + 'active': obj.get('active', True), + } diff --git a/sf_base/models/fixture.py b/sf_base/models/fixture.py index 264878e9..777cf5cc 100644 --- a/sf_base/models/fixture.py +++ b/sf_base/models/fixture.py @@ -35,6 +35,7 @@ class FixtureModel(models.Model): glb_url = fields.Char(string="图片") status = fields.Boolean('状态') active = fields.Boolean('有效', default=False) + code = fields.Char(string='编码', readonly=True) zero_chuck_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='零点卡盘基本参数') @@ -46,11 +47,14 @@ class FixtureModel(models.Model): string='虎钳夹具基本参数') magnet_fixture_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='磁吸夹具基本参数') + magnet_tray_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', + string='磁吸托盘基本参数') adapter_board_fixture_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='转接板(锁板)夹具基本参数') scroll_chuck_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='三爪卡盘基本参数') - code = fields.Char(string='编码', readonly=True) + air_tray_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', + string='气吸托盘基本参数') # def _get_code(self, fixture_model_type_code): # fixture_model = self.env['sf.fixture.model'].sudo().search( diff --git a/sf_base/views/fixture_view.xml b/sf_base/views/fixture_view.xml index 1149875d..b7202eb3 100644 --- a/sf_base/views/fixture_view.xml +++ b/sf_base/views/fixture_view.xml @@ -328,6 +328,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sf_dlm_management/views/product_template_management_view.xml b/sf_dlm_management/views/product_template_management_view.xml index 75262611..4940b410 100644 --- a/sf_dlm_management/views/product_template_management_view.xml +++ b/sf_dlm_management/views/product_template_management_view.xml @@ -513,112 +513,168 @@ - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index 584399dc..8c0b95ac 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -1215,6 +1215,51 @@ class ResProductFixture(models.Model): mounting_hole_depth = fields.Float('安装孔深度(mm)', digits=(16, 2)) centering_diameter = fields.Float('定心直径(mm)', digits=(16, 2)) + # ‘磁吸托盘’ 字段 + magnet_tray_length = fields.Float('磁吸托盘长度(mm)', digits=(16, 2)) + magnet_tray_width = fields.Float('磁吸托盘宽度(mm)', digits=(16, 2)) + magnet_tray_height = fields.Float('磁吸托盘厚度(mm)', digits=(16, 2)) + magnet_tray_diameter = fields.Float('磁吸托盘直径(mm)', digits=(16, 2)) + magnet_tray_weight = fields.Float('磁吸托盘重量(kg)', digits=(16, 2)) + + magnet_max_adsorp_length = fields.Float('磁吸托盘最大吸附长度(mm)', digits=(16, 2)) + magnet_max_adsorp_width = fields.Float('磁吸托盘最大吸附宽度(mm)', digits=(16, 2)) + magnet_max_adsorp_height = fields.Float('磁吸托盘最大吸附厚度(mm)', digits=(16, 2)) + magnet_max_adsorp_diameter = fields.Float('磁吸托盘最大吸附直径(mm)', digits=(16, 2)) + magnet_max_adsorp_force = fields.Float('磁吸托盘最大吸附力(N)', digits=(16, 2)) + + magnet_unlocking_method = fields.Selection( + [('手动', '手动'), ('气动', '气动'), ('液压', '液压'), ('电动', '电动'), ('其他', '其他')], + string='磁吸托盘锁紧方式' + ) + magnet_flatness = fields.Char('磁吸托盘平面精度(mm)', size=20) + magnet_max_load = fields.Float('磁吸托盘最大负载(kg)', digits=(16, 2)) + + # ‘气吸托盘’ 字段 + air_tray_length = fields.Float('气吸托盘长度(mm)', digits=(16, 2)) + air_tray_width = fields.Float('气吸托盘宽度(mm)', digits=(16, 2)) + air_tray_height = fields.Float('气吸托盘高度(mm)', digits=(16, 2)) + air_tray_diameter = fields.Float('气吸托盘直径(mm)', digits=(16, 2)) + air_tray_weight = fields.Float('气吸托盘重量(kg)', digits=(16, 2)) + + air_max_adsorp_length = fields.Float('气吸托盘最大吸附长度(mm)', digits=(16, 2)) + air_max_adsorp_width = fields.Float('气吸托盘最大吸附宽度(mm)', digits=(16, 2)) + air_max_adsorp_height = fields.Float('气吸托盘最大吸附厚度(mm)', digits=(16, 2)) + air_max_adsorp_diameter = fields.Float('气吸托盘最大吸附直径(mm)', digits=(16, 2)) + air_max_adsorp_force = fields.Float('气吸托盘最大吸附力(N)', digits=(16, 2)) + + air_unlocking_method = fields.Selection( + [('手动', '手动'), ('气动', '气动'), ('液压', '液压'), ('电动', '电动'), ('其他', '其他')], + string='气吸托盘锁紧方式' + ) + air_flatness = fields.Char('气吸托盘平面精度(mm)', size=20) + air_max_load = fields.Float('气吸托盘最大负载(kg)', digits=(16, 2)) + air_boolean_chip_blowing_function = fields.Boolean('气吸托盘是否有吹屑功能') + air_way_to_install = fields.Selection( + [('接口式', '接口式'), ('螺栓固定', '螺栓固定'), ('磁吸式', '磁吸式'), ('其他', '其他')], + string='气吸托盘安装方式' + ) + @api.onchange('specification_fixture_id') def _onchange_specification_fixture_id(self): if self.specification_fixture_id: diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py index 1aac07e3..2dd8cfff 100644 --- a/sf_mrs_connect/models/sync_common.py +++ b/sf_mrs_connect/models/sync_common.py @@ -9,6 +9,7 @@ from odoo import models from odoo.exceptions import ValidationError from odoo.addons.sf_base.commons.common import Common + _logger = logging.getLogger(__name__) @@ -1610,6 +1611,10 @@ class SyncfixtureMaterialsBasicParameters(models.Model): self._write_or_create(all_list.get('adapter_board_yesterday_list'), '转接板(锁板)夹具') if all_list.get('scroll_chuck_all_list'): self._write_or_create(all_list.get('scroll_chuck_yesterday_list'), '三爪卡盘') + if all_list.get('air_blow_tray_all_list'): + self._write_or_create(all_list.get('air_tray_yesterday_list'), '气吸托盘') + if all_list.get('magnet_tray_all_list'): + self._write_or_create(all_list.get('magnet_tray_yesterday_list'), '磁吸托盘') else: raise ValidationError("夹具型号基本参数认证未通过") @@ -1638,6 +1643,10 @@ class SyncfixtureMaterialsBasicParameters(models.Model): self._write_or_create(all_list.get('adapter_board_all_list'), '转接板(锁板)夹具') if all_list.get('scroll_chuck_all_list'): self._write_or_create(all_list.get('scroll_chuck_all_list'), '三爪卡盘') + if all_list.get('air_blow_tray_all_list'): + self._write_or_create(all_list.get('air_tray_all_list'), '气吸托盘') + if all_list.get('magnet_tray_all_list'): + self._write_or_create(all_list.get('magnet_tray_all_list'), '磁吸托盘') else: raise ValidationError("夹具型号基本参数认证未通过") @@ -3230,4 +3239,4 @@ class EmbryoRedundancySync(models.Model): "height": item['height'], "active": item['active'], "remark": item['remark'], - }) \ No newline at end of file + })