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("夹具型号基本参数认证未通过")