diff --git a/sf_base/models/basic_parameters_fixture.py b/sf_base/models/basic_parameters_fixture.py index 86432f7a..70d45990 100644 --- a/sf_base/models/basic_parameters_fixture.py +++ b/sf_base/models/basic_parameters_fixture.py @@ -87,6 +87,31 @@ class BasicParametersFixture(models.Model): magnet_flatness = fields.Char('磁吸托盘平面精度(mm)', size=20) magnet_max_load = fields.Float('磁吸托盘最大负载(kg)', digits=(16, 2)) + # --- 定位隔板字段 --- + partition_length_outer = fields.Float('外框长度(mm)', digits=(16, 2)) + partition_width_outer = fields.Float('外框宽度(mm)', digits=(16, 2)) + partition_length_inner = fields.Float('内框长度(mm)', digits=(16, 2)) + partition_width_inner = fields.Float('内框宽度(mm)', digits=(16, 2)) + partition_left_margin = fields.Float('左边距(mm)', digits=(16, 2)) + partition_bottom_margin = fields.Float('下边距(mm)', digits=(16, 2)) + partition_unit_length = fields.Float('定位单元长度(mm)', digits=(16, 2)) + partition_unit_width = fields.Float('定位单元宽度(mm)', digits=(16, 2)) + partition_unit_row_spacing = fields.Float('单元行间距(mm)', digits=(16, 2)) + partition_unit_col_spacing = fields.Float('单元列间距(mm)', digits=(16, 2)) + partition_unit_rows = fields.Integer('单元行数') + partition_unit_cols = fields.Integer('单元列数') + partition_base_unit_row_spacing = fields.Float('基准单元行间距(mm)', digits=(16, 2)) + partition_base_unit_col_spacing = fields.Float('基准单元列间距(mm)', digits=(16, 2)) + partition_offset_x = fields.Float('X方向偏移(mm)', digits=(16, 2)) + partition_offset_y = fields.Float('Y方向偏移(mm)', digits=(16, 2)) + partition_materials_model_id = fields.Many2one('sf.materials.model', '定位隔板材质') + partition_joint_type = fields.Selection([ + ('bolt', '螺栓连接'), + ('magnet', '磁吸连接'), + ('snap', '卡扣连接'), + ], string='连接方式') + partition_partner_id = fields.Many2one('res.partner', string='供应商/客户') + # ‘气吸托盘’ 字段 air_tray_length = fields.Float('气吸托盘长度(mm)', digits=(16, 2)) air_tray_width = fields.Float('气吸托盘宽度(mm)', digits=(16, 2)) @@ -133,6 +158,8 @@ class BasicParametersFixture(models.Model): 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_positioning_partition_param(fixture_materials_data) elif fixture_materials_name == '气吸托盘': return self._json_air_tray_param(fixture_materials_data) return {} @@ -360,6 +387,39 @@ class BasicParametersFixture(models.Model): ).id if obj.get('materials_model_id') else False, 'active': obj.get('active', True), } + + def _json_positioning_partition_param(self, obj): + """定位隔板:将data数据转换成字段字典""" + return { + 'code': obj.get('code'), + 'fixture_model_id': self.env['sf.fixture.model'].sudo().search( + [('code', '=', obj.get('fixture_model_code'))], limit=1).id, + 'name': obj.get('name'), + 'partition_length_outer': obj.get('length_outer'), + 'partition_width_outer': obj.get('width_outer'), + 'partition_length_inner': obj.get('length_inner'), + 'partition_width_inner': obj.get('width_inner'), + 'partition_left_margin': obj.get('left_margin'), + 'partition_bottom_margin': obj.get('bottom_margin'), + 'partition_unit_length': obj.get('unit_length'), + 'partition_unit_width': obj.get('unit_width'), + 'partition_unit_row_spacing': obj.get('unit_row_spacing'), + 'partition_unit_col_spacing': obj.get('unit_col_spacing'), + 'partition_unit_rows': obj.get('unit_rows'), + 'partition_unit_cols': obj.get('unit_cols'), + 'partition_base_unit_row_spacing': obj.get('base_unit_row_spacing'), + 'partition_base_unit_col_spacing': obj.get('base_unit_col_spacing'), + 'partition_offset_x': obj.get('offset_x'), + 'partition_offset_y': obj.get('offset_y'), + 'partition_materials_model_id': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj.get('materials_model_id')), ('active', '=', True)], limit=1).id + if obj.get('materials_model_id') else False, + 'partition_partner_id': self.env['res.partner'].sudo().search( + [('name', '=', obj.get('partner_name'))], limit=1).id + if obj.get('partner_name') else False, + 'partition_joint_type': obj.get('joint_type'), + 'active': obj.get('active', True), + } def _json_air_tray_param(self, obj): """气吸托盘:将data数据转换成list数据""" diff --git a/sf_base/models/fixture.py b/sf_base/models/fixture.py index 777cf5cc..624457bf 100644 --- a/sf_base/models/fixture.py +++ b/sf_base/models/fixture.py @@ -49,6 +49,8 @@ class FixtureModel(models.Model): string='磁吸夹具基本参数') magnet_tray_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='磁吸托盘基本参数') + positioning_partition_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', diff --git a/sf_base/views/fixture_view.xml b/sf_base/views/fixture_view.xml index b7202eb3..3d4a6429 100644 --- a/sf_base/views/fixture_view.xml +++ b/sf_base/views/fixture_view.xml @@ -374,6 +374,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sf_dlm_management/views/product_template_management_view.xml b/sf_dlm_management/views/product_template_management_view.xml index 4940b410..6dda95f6 100644 --- a/sf_dlm_management/views/product_template_management_view.xml +++ b/sf_dlm_management/views/product_template_management_view.xml @@ -658,6 +658,29 @@ attrs="{'invisible': [('fixture_material_type', 'not in', ['气吸托盘'])]}"/> + + + + + + + + + + + + diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index 8c0b95ac..b33fe190 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -1235,6 +1235,21 @@ class ResProductFixture(models.Model): magnet_flatness = fields.Char('磁吸托盘平面精度(mm)', size=20) magnet_max_load = fields.Float('磁吸托盘最大负载(kg)', digits=(16, 2)) + # 定位隔板字段 + length_outer = fields.Float('外框长(mm)', digits=(16, 2)) + width_outer = fields.Float('外框宽(mm)', digits=(16, 2)) + length_inner = fields.Float('内框长(mm)', digits=(16, 2)) + width_inner = fields.Float('内框宽(mm)', digits=(16, 2)) + thickness = fields.Float('厚度(mm)', digits=(16, 2)) + + unit_location = fields.Char('定位单元位置') + offset_x = fields.Float('X方向偏移(mm)', digits=(16, 2)) + offset_y = fields.Float('Y方向偏移(mm)', digits=(16, 2)) + + materials_model_id_positioning = fields.Many2one( + 'sf.materials.model', string='材质', ondelete='set null', index=True) + station_count = fields.Integer('定位单元数', readonly=True) + # ‘气吸托盘’ 字段 air_tray_length = fields.Float('气吸托盘长度(mm)', digits=(16, 2)) air_tray_width = fields.Float('气吸托盘宽度(mm)', digits=(16, 2)) @@ -1262,7 +1277,7 @@ class ResProductFixture(models.Model): @api.onchange('specification_fixture_id') def _onchange_specification_fixture_id(self): - if self.specification_fixture_id: + if self.specification_fixture_id: self.length = self.specification_fixture_id.length self.width = self.specification_fixture_id.width self.height = self.specification_fixture_id.height @@ -1303,7 +1318,46 @@ class ResProductFixture(models.Model): self.via_hole_diameter = self.specification_fixture_id.via_hole_diameter self.mounting_hole_depth = self.specification_fixture_id.mounting_hole_depth self.centering_diameter = self.specification_fixture_id.centering_diameter - + self.magnet_tray_length = self.specification_fixture_id.magnet_tray_length + self.magnet_tray_width = self.specification_fixture_id.magnet_tray_width + self.magnet_tray_height = self.specification_fixture_id.magnet_tray_height + self.magnet_tray_diameter = self.specification_fixture_id.magnet_tray_diameter + self.magnet_tray_weight = self.specification_fixture_id.magnet_tray_weight + self.magnet_max_adsorp_length = self.specification_fixture_id.magnet_max_adsorp_length + self.magnet_max_adsorp_width = self.specification_fixture_id.magnet_max_adsorp_width + self.magnet_max_adsorp_height = self.specification_fixture_id.magnet_max_adsorp_height + self.magnet_max_adsorp_diameter = self.specification_fixture_id.magnet_max_adsorp_diameter + self.magnet_max_adsorp_force = self.specification_fixture_id.magnet_max_adsorp_force + self.magnet_unlocking_method = self.specification_fixture_id.magnet_unlocking_method + self.magnet_flatness = self.specification_fixture_id.magnet_flatness + self.magnet_max_load = self.specification_fixture_id.magnet_max_load + # 定位隔板字段 + self.length_outer = self.specification_fixture_id.length_outer + self.width_outer = self.specification_fixture_id.width_outer + self.length_inner = self.specification_fixture_id.length_inner + self.width_inner = self.specification_fixture_id.width_inner + self.thickness = self.specification_fixture_id.thickness + self.unit_location = self.specification_fixture_id.unit_location + self.offset_x = self.specification_fixture_id.offset_x + self.offset_y = self.specification_fixture_id.offset_y + self.materials_model_id_positioning = self.specification_fixture_id.materials_model_id_positioning + self.station_count = self.specification_fixture_id.station_count + # 气吸托盘字段 + self.air_tray_length = self.specification_fixture_id.air_tray_length + self.air_tray_width = self.specification_fixture_id.air_tray_width + self.air_tray_height = self.specification_fixture_id.air_tray_height + self.air_tray_diameter = self.specification_fixture_id.air_tray_diameter + self.air_tray_weight = self.specification_fixture_id.air_tray_weight + self.air_max_adsorp_length = self.specification_fixture_id.air_max_adsorp_length + self.air_max_adsorp_width = self.specification_fixture_id.air_max_adsorp_width + self.air_max_adsorp_height = self.specification_fixture_id.air_max_adsorp_height + self.air_max_adsorp_diameter = self.specification_fixture_id.air_max_adsorp_diameter + self.air_max_adsorp_force = self.specification_fixture_id.air_max_adsorp_force + self.air_unlocking_method = self.specification_fixture_id.air_unlocking_method + self.air_flatness = self.specification_fixture_id.air_flatness + self.air_max_load = self.specification_fixture_id.air_max_load + self.air_boolean_chip_blowing_function = self.specification_fixture_id.air_boolean_chip_blowing_function + self.air_way_to_install = self.specification_fixture_id.air_way_to_install class SfMaintenanceEquipmentAndProductTemplate(models.Model): _inherit = 'maintenance.equipment' diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py index 2dd8cfff..1142fc09 100644 --- a/sf_mrs_connect/models/sync_common.py +++ b/sf_mrs_connect/models/sync_common.py @@ -1615,6 +1615,8 @@ class SyncfixtureMaterialsBasicParameters(models.Model): 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'), '磁吸托盘') + if all_list.get('positioning_partition_all_list'): + self._write_or_create(all_list.get('positioning_partition_all_list'), '定位隔板') else: raise ValidationError("夹具型号基本参数认证未通过") @@ -1647,6 +1649,8 @@ class SyncfixtureMaterialsBasicParameters(models.Model): 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'), '磁吸托盘') + if all_list.get('positioning_partition_all_list'): + self._write_or_create(all_list.get('positioning_partition_all_list'), '定位隔板') else: raise ValidationError("夹具型号基本参数认证未通过")