Files
test/sf_base/models/basic_parameters_fixture.py

342 lines
20 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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('重量(mm)', 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('编码')
def create_fixture_materials(self, fixture_materials_datas, fixture_model):
fixture_materials_name = fixture_model.fixture_material_id.name
if fixture_materials_name == '零点卡盘':
for fixture_materials_data in fixture_materials_datas:
self.create(self._json_zero_chuck_param(fixture_materials_data, fixture_model))
elif fixture_materials_name == '零点托盘':
for fixture_materials_data in fixture_materials_datas:
self.create(self._json_zero_tray_param(fixture_materials_data, fixture_model))
elif fixture_materials_name == '气动夹具':
for fixture_materials_data in fixture_materials_datas:
self.create(self._json_pneumatic_fixture_param(fixture_materials_data, fixture_model))
elif fixture_materials_name == '虎钳夹具':
for fixture_materials_data in fixture_materials_datas:
self.create(self._json_jaw_vice_fixture_param(fixture_materials_data, fixture_model))
elif fixture_materials_name == '磁吸夹具':
for fixture_materials_data in fixture_materials_datas:
self.create(self._json_magnet_fixture_param(fixture_materials_data, fixture_model))
elif fixture_materials_name == '转接板(锁板)夹具':
for fixture_materials_data in fixture_materials_datas:
self.create(self._json_adapter_board_fixture_param(fixture_materials_data, fixture_model))
elif fixture_materials_name == '三爪卡盘':
for fixture_materials_data in fixture_materials_datas:
self.create(self._json_scroll_chuck_param(fixture_materials_data, fixture_model))
def write_fixture_materials(self, fixture_materials_datas, fixture_model):
fixture_materials_name = fixture_model.fixture_material_id.name
# cloud夹具物料的code
mrs_fixture_materials_codes = []
for fixture_materials_data in fixture_materials_datas:
mrs_fixture_materials_codes.append(fixture_materials_data.get('code'))
# sf夹具物料的code 判断sf夹具型号关联的夹具物料在同步过来的mrs夹具物料中是否存在不存在则删除
sf_materials_model_codes = self._get_sf_materials_model_codes(fixture_model)
for sf_materials_model_code in sf_materials_model_codes:
if sf_materials_model_code not in mrs_fixture_materials_codes:
self.search([('code', '=', sf_materials_model_code)]).sudo().unlink()
for fixture_materials_data in fixture_materials_datas:
fixture_materials_list = self._get_fixture_materials_list(fixture_materials_data, fixture_materials_name,
fixture_model)
fixture_materials_code = fixture_materials_list.get('code')
# 判断同步过来的mrs刀具物料在sf夹具型号关联的夹具物料中是否存在如果存在则修改如果不存在则创建
if fixture_materials_code in sf_materials_model_codes:
self.search([('code', '=', fixture_materials_code)]).sudo().write(fixture_materials_list)
else:
self.sudo().create(fixture_materials_list)
def _get_sf_materials_model_codes(self, fixture_model):
fixture_materials_name = fixture_model.fixture_material_id.name
if fixture_materials_name == '零点卡盘':
return self._get_sf_materials_model_code(fixture_model.zero_chuck_ids)
elif fixture_materials_name == '零点托盘':
return self._get_sf_materials_model_code(fixture_model.zero_tray_ids)
elif fixture_materials_name == '气动夹具':
return self._get_sf_materials_model_code(fixture_model.pneumatic_fixture_ids)
elif fixture_materials_name == '虎钳夹具':
return self._get_sf_materials_model_code(fixture_model.pneumatic_fixture_ids)
elif fixture_materials_name == '磁吸夹具':
return self._get_sf_materials_model_code(fixture_model.magnet_fixture_ids)
elif fixture_materials_name == '转接板(锁板)夹具':
return self._get_sf_materials_model_code(fixture_model.adapter_board_fixture_ids)
elif fixture_materials_name == '三爪卡盘':
return self._get_sf_materials_model_code(fixture_model.scroll_chuck_ids)
return False
def _get_sf_materials_model_code(self, fixture_materials_ids):
sf_materials_model_codes = []
for fixture_materials_id in fixture_materials_ids:
sf_materials_model_codes.append(fixture_materials_id.code)
return sf_materials_model_codes
def _get_fixture_materials_list(self, fixture_materials_data, fixture_materials_name, fixture_model):
if fixture_materials_name == '零点卡盘':
return self._json_zero_chuck_param(fixture_materials_data, fixture_model)
elif fixture_materials_name == '零点托盘':
return self._json_zero_tray_param(fixture_materials_data, fixture_model)
elif fixture_materials_name == '气动夹具':
return self._json_pneumatic_fixture_param(fixture_materials_data, fixture_model)
elif fixture_materials_name == '虎钳夹具':
return self._json_jaw_vice_fixture_param(fixture_materials_data, fixture_model)
elif fixture_materials_name == '磁吸夹具':
return self._json_magnet_fixture_param(fixture_materials_data, fixture_model)
elif fixture_materials_name == '转接板(锁板)夹具':
return self._json_adapter_board_fixture_param(fixture_materials_data, fixture_model)
elif fixture_materials_name == '三爪卡盘':
return self._json_scroll_chuck_param(fixture_materials_data, fixture_model)
return False
def _json_zero_chuck_param(self, obj, fixture_model):
"""零点卡盘将data数据转换成list数据"""
return {'code': obj['code'],
'fixture_model_id': fixture_model.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}
def _json_zero_tray_param(self, obj, fixture_model):
"""零点托盘将data数据转换成list数据"""
return {'code': obj['code'],
'fixture_model_id': fixture_model.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']}
def _json_pneumatic_fixture_param(self, obj, fixture_model):
"""气动夹具将data数据转换成list数据"""
return {'code': obj['code'],
'fixture_model_id': fixture_model.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']}
def _json_jaw_vice_fixture_param(self, obj, fixture_model):
"""虎钳夹具将data数据转换成list数据"""
return {'code': obj['code'],
'fixture_model_id': fixture_model.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']}
def _json_magnet_fixture_param(self, obj, fixture_model):
"""磁吸夹具将data数据转换成list数据"""
return {'code': obj['code'],
'fixture_model_id': fixture_model.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']}
def _json_adapter_board_fixture_param(self, obj, fixture_model):
"""转接板(锁板)夹具将data数据转换成list数据"""
return {'code': obj['code'],
'fixture_model_id': fixture_model.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']}
def _json_scroll_chuck_param(self, obj, fixture_model):
"""转接板(锁板)夹具将data数据转换成list数据"""
return {'code': obj['code'],
'fixture_model_id': fixture_model.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']}