from odoo import models, fields class BasicParametersFixture(models.Model): _name = 'sf.fixture.materials.basic.parameters' _description = '夹具物料基本参数' fixture_model_id = fields.Many2one('sf.fixture.model', '夹具型号') name = fields.Char('物料号', size=20) length = fields.Float('长度(mm)', digits=(16, 2)) width = fields.Float('宽度(mm)', digits=(16, 2)) height = fields.Float('高度(mm)', digits=(16, 2)) diameter = fields.Float('直径(mm)', digits=(16, 2)) # '零点卡盘' 字段 weight = fields.Float('重量(kg)', digits=(16, 2)) orientation_dish_diameter = fields.Float('定位盘直径(mm)', digits=(16, 2)) clamping_diameter = fields.Float('装夹直径(mm)', digits=(16, 2)) clamping_num = fields.Selection([('1', '1'), ('2', '2'), ('4', '4'), ('6', '6'), ('8', '8')], string='装夹单元数') chucking_power_max = fields.Float('最大夹持力(KN)', digits=(16, 2)) repeated_positioning_accuracy = fields.Char('重复定位精度(mm)', size=20) boolean_transposing_hole = fields.Boolean('是否有转位孔') unlocking_method = fields.Selection( [('手动', '手动'), ('气动', '气动'), ('液压', '液压'), ('电动', '电动'), ('其他', '其他')], string='解锁方式') boolean_chip_blowing_function = fields.Boolean('是否有吹屑功能') carrying_capacity_max = fields.Float('最大承载重量(kg)', digits=(16, 2)) rigidity = fields.Integer('硬度HRC') materials_model_id = fields.Many2one('sf.materials.model', '夹具材质') machine_tool_type_id = fields.Many2one('sf.machine_tool.type', '适用机床型号') # ’零点托盘‘ 字段 connector_diameter = fields.Selection([('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), ('6', '6'), ('8', '8')], string='连接头直径(mm)') way_to_install = fields.Selection( [('接口式', '接口式'), ('螺栓固定', '螺栓固定'), ('磁吸式', '磁吸式'), ('其他', '其他')], string='安装方式') type_of_drive = fields.Selection( [('气动式', '气动式'), ('液压式', '液压式'), ('机械式', '机械式'), ('电动式', '电动式'), ('其他', '其他')], string='驱动方式') # ’气动夹具‘ 字段 gripper_length_min = fields.Float('夹持工件最小长度(mm)', digits=(16, 2)) gripper_width_min = fields.Float('夹持工件最小宽度(mm)', digits=(16, 2)) gripper_height_min = fields.Float('夹持工件最小高度(mm)', digits=(16, 2)) gripper_diameter_min = fields.Float('夹持工件最小直径(mm)', digits=(16, 2)) gripper_length_max = fields.Float('夹持工件最大长度(mm)', digits=(16, 2)) gripper_width_max = fields.Float('夹持工件最大宽度(mm)', digits=(16, 2)) gripper_height_max = fields.Float('夹持工件最大高度(mm)', digits=(16, 2)) gripper_diameter_max = fields.Float('夹持工件最大直径(mm)', digits=(16, 2)) rated_air_pressure = fields.Float('额定气压(Mpa)', digits=(16, 2)) interface_materials_model_id = fields.Many2one('sf.materials.model', '接口类型') # ‘虎钳夹具' 字段 transverse_groove = fields.Float('横向配合槽n(mm)', digits=(16, 2)) longitudinal_fitting_groove = fields.Float('纵向配合槽l(mm)', digits=(16, 2)) # '磁吸夹具' 字段 height_tolerance_value = fields.Char('高度公差(mm)') rated_adsorption_force = fields.Float('额定吸附力(N/cm²)', digits=(16, 2)) magnetic_field_height = fields.Float('磁场高度(mm)', digits=(16, 2)) magnetic_pole_plate_grinding_allowance = fields.Float('磁极板磨削余量(mm)', digits=(16, 2)) # '转接板(锁板)夹具' 字段 screw_size = fields.Float('螺牙大小(mm)', digits=(16, 2)) via_hole_diameter = fields.Float('过孔直径(mm)', digits=(16, 2)) # '三爪卡盘' 字段 mounting_hole_depth = fields.Float('安装孔深度(mm)', digits=(16, 2)) centering_diameter = fields.Float('定心直径(mm)', digits=(16, 2)) code = fields.Char('编码') active = fields.Boolean('有效', default=True) def _get_basic_parameters_list(self, fixture_materials_data, fixture_materials_name): if fixture_materials_name == '零点卡盘': return self._json_zero_chuck_param(fixture_materials_data) elif fixture_materials_name == '零点托盘': return self._json_zero_tray_param(fixture_materials_data) elif fixture_materials_name == '气动夹具': return self._json_pneumatic_fixture_param(fixture_materials_data) elif fixture_materials_name == '虎钳夹具': return self._json_jaw_vice_fixture_param(fixture_materials_data) elif fixture_materials_name == '磁吸夹具': return self._json_magnet_fixture_param(fixture_materials_data) elif fixture_materials_name == '转接板(锁板)夹具': return self._json_adapter_board_fixture_param(fixture_materials_data) elif fixture_materials_name == '三爪卡盘': return self._json_scroll_chuck_param(fixture_materials_data) return {} def _json_zero_chuck_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'], 'orientation_dish_diameter': obj['orientation_dish_diameter'], 'clamping_diameter': obj['clamping_diameter'], 'clamping_num': obj['clamping_num'], 'chucking_power_max': obj['chucking_power_max'], 'repeated_positioning_accuracy': obj['repeated_positioning_accuracy'], 'boolean_transposing_hole': obj['boolean_transposing_hole'], 'unlocking_method': obj['unlocking_method'], 'boolean_chip_blowing_function': obj['boolean_chip_blowing_function'], 'carrying_capacity_max': obj['carrying_capacity_max'], 'rigidity': obj['rigidity'], 'materials_model_id': self.env['sf.materials.model'].sudo().search( [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'machine_tool_type_id': self.env['sf.machine_tool.type'].sudo().search( [('code', '=', obj['machine_tool_type_id']), ('active', '=', True)]).id, 'active': obj['active']} def _json_zero_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'], 'clamping_diameter': obj['clamping_diameter'], 'connector_diameter': obj['connector_diameter'], 'chucking_power_max': obj['chucking_power_max'], 'repeated_positioning_accuracy': obj['repeated_positioning_accuracy'], 'boolean_chip_blowing_function': obj['boolean_chip_blowing_function'], 'way_to_install': obj['way_to_install'], 'type_of_drive': obj['type_of_drive'], 'carrying_capacity_max': obj['carrying_capacity_max'], 'materials_model_id': self.env['sf.materials.model'].sudo().search( [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'rigidity': obj['rigidity'], 'active': obj['active']} def _json_pneumatic_fixture_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'], 'weight': obj['weight'], 'gripper_length_min': obj['gripper_length_min'], 'gripper_width_min': obj['gripper_width_min'], 'gripper_height_min': obj['gripper_height_min'], 'gripper_diameter_min': obj['gripper_diameter_min'], 'gripper_length_max': obj['gripper_length_max'], 'gripper_width_max': obj['gripper_width_max'], 'gripper_height_max': obj['gripper_height_max'], 'gripper_diameter_max': obj['gripper_diameter_max'], 'chucking_power_max': obj['chucking_power_max'], 'carrying_capacity_max': obj['carrying_capacity_max'], 'rated_air_pressure': obj['rated_air_pressure'], 'materials_model_id': self.env['sf.materials.model'].sudo().search( [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'rigidity': obj['rigidity'], 'interface_materials_model_id': self.env['sf.materials.model'].sudo().search( [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'type_of_drive': obj['type_of_drive'], 'active': obj['active']} def _json_jaw_vice_fixture_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'], 'weight': obj['weight'], 'gripper_length_min': obj['gripper_length_min'], 'gripper_width_min': obj['gripper_width_min'], 'gripper_height_min': obj['gripper_height_min'], 'gripper_diameter_min': obj['gripper_diameter_min'], 'gripper_length_max': obj['gripper_length_max'], 'gripper_width_max': obj['gripper_width_max'], 'gripper_height_max': obj['gripper_height_max'], 'gripper_diameter_max': obj['gripper_diameter_max'], 'chucking_power_max': obj['chucking_power_max'], 'carrying_capacity_max': obj['carrying_capacity_max'], 'transverse_groove': obj['transverse_groove'], 'longitudinal_fitting_groove': obj['longitudinal_fitting_groove'], 'materials_model_id': self.env['sf.materials.model'].sudo().search( [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'rigidity': obj['rigidity'], 'interface_materials_model_id': self.env['sf.materials.model'].sudo().search( [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'type_of_drive': obj['type_of_drive'], 'active': obj['active']} def _json_magnet_fixture_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'], 'height_tolerance_value': obj['height_tolerance_value'], 'weight': obj['weight'], 'gripper_length_min': obj['gripper_length_min'], 'gripper_width_min': obj['gripper_width_min'], 'gripper_height_min': obj['gripper_height_min'], 'gripper_diameter_min': obj['gripper_diameter_min'], 'gripper_length_max': obj['gripper_length_max'], 'gripper_width_max': obj['gripper_width_max'], 'gripper_height_max': obj['gripper_height_max'], 'gripper_diameter_max': obj['gripper_diameter_max'], 'rated_adsorption_force': obj['rated_adsorption_force'], 'magnetic_field_height': obj['magnetic_field_height'], 'magnetic_pole_plate_grinding_allowance': obj['magnetic_pole_plate_grinding_allowance'], 'carrying_capacity_max': obj['carrying_capacity_max'], 'materials_model_id': self.env['sf.materials.model'].sudo().search( [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'rigidity': obj['rigidity'], 'interface_materials_model_id': self.env['sf.materials.model'].sudo().search( [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'type_of_drive': obj['type_of_drive'], 'active': obj['active']} def _json_adapter_board_fixture_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'], 'weight': obj['weight'], 'gripper_length_min': obj['gripper_length_min'], 'gripper_width_min': obj['gripper_width_min'], 'gripper_height_min': obj['gripper_height_min'], 'gripper_diameter_min': obj['gripper_diameter_min'], 'gripper_length_max': obj['gripper_length_max'], 'gripper_width_max': obj['gripper_width_max'], 'gripper_height_max': obj['gripper_height_max'], 'gripper_diameter_max': obj['gripper_diameter_max'], 'chucking_power_max': obj['chucking_power_max'], 'carrying_capacity_max': obj['carrying_capacity_max'], 'materials_model_id': self.env['sf.materials.model'].sudo().search( [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'rigidity': obj['rigidity'], 'screw_size': obj['screw_size'], 'via_hole_diameter': obj['via_hole_diameter'], 'type_of_drive': obj['type_of_drive'], 'active': obj['active']} def _json_scroll_chuck_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'], 'gripper_length_min': obj['gripper_length_min'], 'gripper_width_min': obj['gripper_width_min'], 'gripper_height_min': obj['gripper_height_min'], 'gripper_diameter_min': obj['gripper_diameter_min'], 'gripper_length_max': obj['gripper_length_max'], 'gripper_width_max': obj['gripper_width_max'], 'gripper_height_max': obj['gripper_height_max'], 'gripper_diameter_max': obj['gripper_diameter_max'], 'chucking_power_max': obj['chucking_power_max'], 'carrying_capacity_max': obj['carrying_capacity_max'], 'materials_model_id': self.env['sf.materials.model'].sudo().search( [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, 'rigidity': obj['rigidity'], 'mounting_hole_depth': obj['mounting_hole_depth'], 'centering_diameter': obj['centering_diameter'], 'type_of_drive': obj['type_of_drive'], 'active': obj['active']}