253 lines
12 KiB
Python
253 lines
12 KiB
Python
# -*- coding: utf-8 -*-
|
||
from odoo import fields, models, api
|
||
|
||
|
||
class CuttingToolMaterial(models.Model):
|
||
_name = 'sf.cutting.tool.material'
|
||
_description = '刀具物料'
|
||
|
||
code = fields.Char('编码')
|
||
name = fields.Char('名称')
|
||
remark = fields.Char('备注')
|
||
active = fields.Boolean('有效', default=True)
|
||
|
||
|
||
# 功能刀具
|
||
class FunctionalCuttingTool(models.Model):
|
||
_name = 'sf.functional.cutting.tool'
|
||
_description = '功能刀具'
|
||
|
||
code = fields.Char('编码')
|
||
name = fields.Char('名称')
|
||
active = fields.Boolean('有效', default=True)
|
||
mrs_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型')
|
||
mrs_cutting_tool_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀具型号')
|
||
|
||
|
||
# 功能刀具类型
|
||
class FunctionalCuttingToolModel(models.Model):
|
||
_name = 'sf.functional.cutting.tool.model'
|
||
_description = '功能刀具类型'
|
||
|
||
name = fields.Char('名称', required=True)
|
||
code = fields.Char('编码', required=True)
|
||
remark = fields.Char('备注')
|
||
active = fields.Boolean('有效', default=True)
|
||
|
||
|
||
# 刀具类型
|
||
class CuttingToolType(models.Model):
|
||
_name = 'sf.cutting.tool.type'
|
||
_description = '刀具类型'
|
||
|
||
code = fields.Char('编码')
|
||
name = fields.Char('名称')
|
||
# 关联刀具物料
|
||
cutting_tool_material_id = fields.Many2one('sf.cutting.tool.material', '刀具物料')
|
||
remark = fields.Char('备注')
|
||
active = fields.Boolean('有效', default=True)
|
||
|
||
|
||
# 刀具标准库
|
||
class CuttingToolModel(models.Model):
|
||
_name = 'sf.cutting_tool.standard.library'
|
||
_description = '刀具标准库'
|
||
|
||
code = fields.Char(string='编码')
|
||
name = fields.Char('名称')
|
||
# 关联刀具物料
|
||
cutting_tool_material_id = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True)
|
||
# 刀具物料类型
|
||
cutting_tool_type = fields.Char(related='cutting_tool_material_id.name', string='刀具物料类型',
|
||
store=True)
|
||
# 关联刀具类型
|
||
cutting_tool_type_id = fields.Many2one('sf.cutting.tool.type', '类型',
|
||
domain="[('cutting_tool_material_id.name', '=', cutting_tool_type)]")
|
||
brand_id = fields.Many2one('sf.machine.brand', '品牌')
|
||
status = fields.Boolean(string='状态', default=False)
|
||
image = fields.Binary('图片')
|
||
|
||
# 整体式刀具参数
|
||
material_model_id = fields.Many2one('mrs.materials.model', '刀具材质')
|
||
tool_hardness = fields.Integer('刀具硬度(hrc)')
|
||
coating_material = fields.Char('涂层材质')
|
||
blade_type = fields.Char('刃部类型')
|
||
integral_coarse_medium_fine = fields.Selection([('粗', '粗'), ('中', '中'), ('精', '精')], '粗/中/精')
|
||
integral_run_out_accuracy_max = fields.Char('整体式刀具端跳精度max')
|
||
integral_run_out_accuracy_min = fields.Char('整体式刀具端跳精度min')
|
||
ramping_angle_ids = fields.One2many('sf.ramping.angle', 'standard_library_id', '坡铣角度',
|
||
domain=lambda self: [('standard_library_id', '=', self.id)])
|
||
|
||
fit_blade_shape_id = fields.Many2one('maintenance.equipment.image',
|
||
'适配刀片形状', domain=[('type', '=', '刀片形状')])
|
||
suitable_machining_method_ids = fields.Many2many('maintenance.equipment.image',
|
||
'suitable_machining_method_library_rel',
|
||
'适合加工方式', domain=[('type', '=', '加工能力')])
|
||
blade_tip_characteristics_id = fields.Many2one('maintenance.equipment.image',
|
||
'刀尖特征', domain=[('type', '=', '刀尖特征')])
|
||
handle_type_id = fields.Many2one('maintenance.equipment.image',
|
||
'柄部类型', domain=[('type', '=', '柄部类型')])
|
||
cutting_direction_ids = fields.Many2many('maintenance.equipment.image', 'cutting_direction_library_rel',
|
||
'走刀方向', domain=[('type', '=', '走刀方向')])
|
||
suitable_coolant_ids = fields.Many2many('maintenance.equipment.image', 'suitable_coolants_library_rel',
|
||
'适合冷却方式', domain=[('type', '=', '冷却方式')])
|
||
compaction_way_id = fields.Many2one('maintenance.equipment.image',
|
||
'压紧方式', domain=[('type', '=', '压紧方式')])
|
||
integral_tool_basic_parameters_ids = fields.One2many('sf.tool.materials.basic.parameters',
|
||
'standard_library_id', string='整体式刀具基本参数')
|
||
blade_basic_parameters_ids = fields.One2many('sf.tool.materials.basic.parameters',
|
||
'standard_library_id', string='刀片基本参数')
|
||
cutter_bar_basic_parameters_ids = fields.One2many('sf.tool.materials.basic.parameters',
|
||
'standard_library_id', string='刀杆基本参数')
|
||
cutter_head_basic_parameters_ids = fields.One2many('sf.tool.materials.basic.parameters',
|
||
'standard_library_id', string='刀盘基本参数')
|
||
knife_handle_basic_parameters_ids = fields.One2many('sf.tool.materials.basic.parameters',
|
||
'standard_library_id', string='刀柄基本参数')
|
||
chuck_basic_parameters_ids = fields.One2many('sf.tool.materials.basic.parameters',
|
||
'standard_library_id', string='夹头基本参数')
|
||
cutting_speed_ids = fields.One2many('sf.cutting.speed', 'standard_library_id', string='切削速度Vc')
|
||
feed_per_tooth_ids = fields.One2many('sf.feed.per.tooth', 'standard_library_id', '每齿走刀量fz')
|
||
feed_per_tooth_ids_3 = fields.One2many('sf.feed.per.tooth', 'standard_library_id', '每齿走刀量fz')
|
||
|
||
material_model_id = fields.Many2one('sf.materials.model', '材料型号')
|
||
# 适用夹头型号可以多选
|
||
# chuck_ids = fields.Many2many(
|
||
# 'sf.cutting_tool.standard.library',
|
||
# relation='cutting_tool_type_library_handle_chuck_rel',
|
||
# column1='model_id_1',
|
||
# column2='model_id_2',
|
||
# domain="[('cutting_tool_material_id.name', '=', '夹头')]",
|
||
# string='适用夹头型号')
|
||
|
||
chuck_id = fields.Many2one(
|
||
'sf.cutting_tool.standard.library',
|
||
domain="[('cutting_tool_material_id.name', '=', '夹头')]",
|
||
string='适用夹头型号')
|
||
cutter_bar_ids = fields.Many2many(
|
||
'sf.cutting_tool.standard.library',
|
||
relation='cutting_tool_type_library_cutter_bar_rel',
|
||
column1='model_id_1',
|
||
column2='model_id_2',
|
||
domain="[('cutting_tool_material_id.name', '=', '刀杆')]",
|
||
string='适用刀杆型号'
|
||
)
|
||
cutter_pad_ids = fields.Many2many(
|
||
'sf.cutting_tool.standard.library',
|
||
relation='cutting_tool_type_library_cutter_pad_rel',
|
||
column1='model_id_1',
|
||
column2='model_id_2',
|
||
domain="[('cutting_tool_material_id.name', '=', '刀盘')]",
|
||
string='适用刀盘型号' # 使用空列表作为默认值
|
||
)
|
||
# 刀杆/参数
|
||
# blade_ids = fields.Many2many(
|
||
# 'sf.cutting_tool.standard.library',
|
||
# relation='cutting_tool_type_library_pad_blade_rel',
|
||
# column1='model_id_1',
|
||
# column2='model_id_2',
|
||
# domain="[('cutting_tool_material_id.name', '=', '刀片')]",
|
||
# string='适用刀片型号' # 使用空列表作为默认值
|
||
# )
|
||
|
||
handle_id = fields.Many2one(
|
||
'sf.cutting_tool.standard.library',
|
||
domain="[('cutting_tool_material_id.name', '=', '刀柄')]",
|
||
string='适用刀柄型号'
|
||
)
|
||
# handle_ids = fields.Many2many(
|
||
# 'sf.cutting_tool.standard.library',
|
||
# relation='cutting_tool_type_library_chuck_handle_rel',
|
||
# column1='model_id_1',
|
||
# column2='model_id_2',
|
||
# domain="[('cutting_tool_material_id.name', '=', '刀柄')]",
|
||
# string='适用刀柄型号'
|
||
# )
|
||
active = fields.Boolean('有效', default=True)
|
||
is_cloud = fields.Boolean('云端数据', default=False)
|
||
|
||
def _get_ids(self, cutting_tool_type_code, factory_short_name):
|
||
cutting_tool_type_ids = []
|
||
for item in cutting_tool_type_code:
|
||
cutting_tool_type = self.search([('code', '=', item.replace("JKM", factory_short_name))])
|
||
if cutting_tool_type:
|
||
cutting_tool_type_ids.append(cutting_tool_type.id)
|
||
return [(6, 0, cutting_tool_type_ids)]
|
||
|
||
|
||
class MaintenanceStandardImage(models.Model):
|
||
_name = 'maintenance.equipment.image'
|
||
_description = '能力特征库'
|
||
|
||
active = fields.Boolean('有效', default=True)
|
||
name = fields.Char('名称')
|
||
image = fields.Binary(string='图文')
|
||
type = fields.Selection(
|
||
[('加工能力', '加工能力'), ('刀尖特征', '刀尖特征'), ('柄部类型', '柄部类型'), ('走刀方向', '走刀方向'),
|
||
('压紧方式', '压紧方式'), ('刀片形状', '刀片形状'), ('冷却方式', '冷却方式')],
|
||
string='特征')
|
||
equipment_id = fields.Many2many('maintenance.equipment', 'image_id', string='设备')
|
||
equipment_lq_id = fields.Many2many('maintenance.equipment', 'image_lq_id', string='设备')
|
||
jg_equipment_id = fields.Many2many('sf.machine_tool.type', 'jg_image_id', string='机床型号')
|
||
lq_equipment_id = fields.Many2many('sf.machine_tool.type', 'lq_image_id', string='机床型号')
|
||
|
||
def _get_ids(self, name_arr):
|
||
ability_feature_ids = []
|
||
for item in name_arr:
|
||
ability_feature = self.search([('name', '=', item)])
|
||
if ability_feature:
|
||
ability_feature_ids.append(ability_feature.id)
|
||
return [(6, 0, ability_feature_ids)]
|
||
|
||
@api.model
|
||
def name_search(self, name='', args=None, operator='ilike', limit=100):
|
||
# 调用父类的name_search方法,获取原始的结果列表
|
||
res = super().name_search(name, args, operator, limit)
|
||
# 定义一个空字典用来存储id和name的映射关系
|
||
name_dict = {}
|
||
# 遍历结果列表,将id和name存入字典中
|
||
for item in res:
|
||
id = item[0]
|
||
name = item[1]
|
||
name_dict[id] = name
|
||
# 根据id列表搜索符合条件的记录
|
||
records = self.browse(name_dict.keys())
|
||
# 定义一个新的结果列表用来存储修改后的结果
|
||
new_res = []
|
||
# 遍历每条记录
|
||
for record in records:
|
||
# 获取记录的id,name和image属性
|
||
id = record.id
|
||
name = name_dict[id]
|
||
image = record.image
|
||
# 如果image不为空,将其转换为data URI scheme
|
||
if image:
|
||
data_uri = f"data:image/png;base64,{image.decode('utf-8')}"
|
||
else:
|
||
data_uri = ""
|
||
# 将这三个属性组成一个数组,并添加到结果列表中 result.append([id, name, data_uri]) # 返回结果列表 return result
|
||
new_res.append([id, name, data_uri])
|
||
# 返回新的结果列表
|
||
return new_res
|
||
|
||
@api.model
|
||
def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None):
|
||
# 调用原生的search_read方法获取记录
|
||
records = super(MaintenanceStandardImage, self).search_read(domain, fields, offset, limit, order)
|
||
# 遍历每条记录,添加image数据
|
||
for record in records:
|
||
image_field = self.browse(record['id']).image
|
||
if image_field:
|
||
record['image'] = f"data:image/png;base64,{image_field.decode('utf-8')}"
|
||
else:
|
||
record['image'] = ""
|
||
return records
|
||
|
||
|
||
class ToolGroups(models.Model):
|
||
_name = 'sf.tool.groups'
|
||
_description = '刀具组'
|
||
|
||
name = fields.Char('名称')
|
||
equipment_ids = fields.Many2many('maintenance.equipment', 'ref_maintenance_equipment', string='机台号')
|
||
remark = fields.Char('备注', size=50)
|