413 lines
18 KiB
Python
413 lines
18 KiB
Python
# -*- coding: utf-8 -*-
|
|
import logging
|
|
import json
|
|
import requests
|
|
from odoo import fields, models, api
|
|
from odoo.exceptions import ValidationError
|
|
from odoo.addons.sf_base.commons.common import Common
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
class SpindleTaperType(models.Model):
|
|
_name = 'spindle.taper.type'
|
|
_description = '主轴锥孔型号'
|
|
|
|
name = fields.Char('名称')
|
|
active = fields.Boolean('有效', default=True)
|
|
|
|
|
|
class MachineBrandTags(models.Model):
|
|
_name = 'sf.machine.brand.tags'
|
|
_description = '标签'
|
|
name = fields.Char('名称', size=50)
|
|
color = fields.Integer('颜色', default=0)
|
|
|
|
|
|
class MachineControlSystem(models.Model):
|
|
_name = 'sf.machine.control_system'
|
|
_description = '控制系统'
|
|
|
|
code = fields.Char('编码', size=10)
|
|
name = fields.Char('名称')
|
|
remark = fields.Char('备注')
|
|
brand_id = fields.Many2one('sf.machine.brand', '品牌')
|
|
active = fields.Boolean('有效', default=True)
|
|
|
|
|
|
# 品牌标签
|
|
class MachineBrand(models.Model):
|
|
_name = 'sf.machine.brand'
|
|
_description = '品牌'
|
|
|
|
code = fields.Char('编码')
|
|
name = fields.Char('名称')
|
|
tag_ids = fields.Many2many('sf.machine.brand.tags', 'rel_machine_brand_tags', string='类别')
|
|
image_brand = fields.Image("图片")
|
|
remark = fields.Text('备注')
|
|
active = fields.Boolean('有效', default=True)
|
|
|
|
|
|
# 机床
|
|
class MachineTool(models.Model):
|
|
_name = 'sf.machine_tool'
|
|
_description = '机床'
|
|
|
|
def get_no(self):
|
|
partner = self.env['sf.machine_tool'].sudo().search(
|
|
[('MTcode', '!=', '')],
|
|
limit=1,
|
|
order="id desc")
|
|
if not partner:
|
|
num = "%04d" % 1
|
|
|
|
else:
|
|
m = int(partner.MTcode) + 1
|
|
num = "%04d" % m
|
|
return num
|
|
|
|
MTcode = fields.Char("编码", default=get_no)
|
|
code = fields.Char('行业编码')
|
|
name = fields.Char('名称')
|
|
knife_type = fields.Selection(
|
|
[("BT40", "BT40"), ("BT30", "BT30")],
|
|
default="", string="刀把类型")
|
|
number_of_knife_library = fields.Integer('刀库数量(把)')
|
|
rotate_speed = fields.Integer('转速')
|
|
number_of_axles = fields.Selection(
|
|
[("三轴", "三轴"), ("四轴", "四轴"), ("五轴", "五轴")],
|
|
default="", string="轴数")
|
|
# 加工进程
|
|
x_axis = fields.Integer('X轴')
|
|
y_axis = fields.Integer('Y轴')
|
|
z_axis = fields.Integer('Z轴')
|
|
b_axis = fields.Integer('B轴')
|
|
c_axis = fields.Integer('C轴')
|
|
remark = fields.Char('备注')
|
|
is_binding = fields.Boolean('是否绑定机床', default=False)
|
|
precision = fields.Float('加工精度')
|
|
control_system_id = fields.Many2one('sf.machine.control_system',
|
|
string="控制系统")
|
|
# 多个机床型号对应一个机床
|
|
type_id = fields.Many2one('sf.machine_tool.type', '型号')
|
|
brand_id = fields.Many2one('sf.machine.brand', string='品牌')
|
|
state = fields.Selection(
|
|
[("正常", "正常"), ("故障停机", "故障停机"), ("计划维保", "计划维保"), ("空闲", "空闲"),
|
|
("封存(报废)", "封存(报废)")],
|
|
default='正常', string="机床状态")
|
|
# 0606新增字段
|
|
machine_tool_picture = fields.Binary('图片')
|
|
heightened_way = fields.Selection([
|
|
('sifudianji', '伺服电机驱动'),
|
|
('youyagang', '油压缸驱动'),
|
|
('chilunjia', '齿轮架驱动')
|
|
], string="主轴加高方式", default='sifudianji')
|
|
workpiece_load = fields.Char('工件负载')
|
|
lead_screw = fields.Char('丝杆')
|
|
workbench_L = fields.Char('工作台长度(mm)')
|
|
workbench_W = fields.Char('工作台宽度(mm)')
|
|
workbench_H = fields.Char('工作台高度(mm)')
|
|
guide_rail = fields.Char('导轨')
|
|
machine_tool_L = fields.Char('机床长度(mm)')
|
|
machine_tool_W = fields.Char('机床宽度(mm)')
|
|
machine_tool_H = fields.Char('机床高度(mm)')
|
|
feed_speed = fields.Char('进给速度(mm/min)')
|
|
tool_speed = fields.Char('刀具速度')
|
|
distance = fields.Char('主轴端面至工作台面距离(mm)')
|
|
taper = fields.Char('主轴锥度(°)')
|
|
torque = fields.Char('主轴点击扭矩(n/m)')
|
|
motor_power = fields.Char('主轴电机功率(kw)')
|
|
tool_quality_max = fields.Char('刀具最大质量')
|
|
tool_long_max = fields.Char('刀具最大长度')
|
|
tool_diameter_max = fields.Char('刀具最大刀径')
|
|
machine_tool_category = fields.Many2one('sf.machine_tool.category', string='机床类型')
|
|
# 一个机床对应一個加工工厂,一个加工工厂对应多个机床
|
|
factory_id = fields.Many2one('res.partner', string='所属工厂',
|
|
domain="[('is_factory', '=', True)]")
|
|
# 一个机床对应一个供应商,一个供应商对应多个机床
|
|
supplier_id = fields.Many2one('res.partner', string='制造商',
|
|
domain="[('is_vendor', '=', True)]")
|
|
registration_date = fields.Date('注册日期')
|
|
state_zc = fields.Selection([("已注册", "已注册"), ("未注册", "未注册")], string="注册状态", default='未注册')
|
|
active = fields.Boolean('有效', default=True)
|
|
|
|
@api.constrains('rotate_speed')
|
|
def _check_rotate_speed(self):
|
|
if self.rotate_speed <= 0:
|
|
raise ValidationError("转速不能为0")
|
|
|
|
@api.constrains('precision')
|
|
def _check_precision(self):
|
|
if self.precision <= 0.00:
|
|
raise ValidationError("加工精度不能为0")
|
|
|
|
@api.constrains('number_of_knife_library')
|
|
def _check_number_of_knife_library(self):
|
|
if self.number_of_knife_library <= 0:
|
|
raise ValidationError("刀库数量不能为0")
|
|
|
|
@api.constrains('x_axis')
|
|
def _check_x_axis(self):
|
|
if self.x_axis <= 0:
|
|
raise ValidationError("加工行程里x轴不能为0")
|
|
|
|
@api.constrains('y_axis')
|
|
def _check_y_axis(self):
|
|
if self.y_axis <= 0:
|
|
raise ValidationError("加工行程里y轴不能为0")
|
|
|
|
@api.constrains('z_axis')
|
|
def _check_z_axis(self):
|
|
if self.z_axis <= 0:
|
|
raise ValidationError("加工行程里z轴不能为0")
|
|
|
|
@api.constrains('b_axis')
|
|
def _check_b_axis(self):
|
|
if self.number_of_axles == '四轴':
|
|
print(self.number_of_axles)
|
|
if self.b_axis <= 0:
|
|
raise ValidationError("加工行程里b轴不能为0")
|
|
|
|
@api.constrains('c_axis')
|
|
def _check_c_axis(self):
|
|
if self.number_of_axles == '五轴':
|
|
if self.c_axis <= 0:
|
|
raise ValidationError("加工行程里c轴不能为0")
|
|
|
|
@api.onchange('type_id')
|
|
def get_type_info(self):
|
|
for item in self:
|
|
item.knife_type = item.type_id.knife_type
|
|
item.number_of_knife_library = item.type_id.number_of_knife_library
|
|
item.number_of_axles = item.type_id.number_of_axles
|
|
item.rotate_speed = item.type_id.rotate_speed
|
|
item.precision = item.type_id.precision
|
|
item.control_system_id = item.type_id.control_system_id
|
|
item.x_axis = item.type_id.x_axis
|
|
item.y_axis = item.type_id.y_axis
|
|
item.z_axis = item.type_id.z_axis
|
|
item.b_axis = item.type_id.b_axis
|
|
item.c_axis = item.type_id.c_axis
|
|
item.machine_tool_picture = item.type_id.machine_tool_picture
|
|
item.heightened_way = item.type_id.heightened_way
|
|
item.workpiece_load = item.type_id.workpiece_load
|
|
item.lead_screw = item.type_id.lead_screw
|
|
item.workbench_L = item.type_id.workbench_L
|
|
item.workbench_W = item.type_id.workbench_W
|
|
item.workbench_H = item.type_id.workbench_H
|
|
item.guide_rail = item.type_id.guide_rail
|
|
item.machine_tool_L = item.type_id.machine_tool_L
|
|
item.machine_tool_W = item.type_id.machine_tool_W
|
|
item.machine_tool_H = item.type_id.machine_tool_H
|
|
item.feed_speed = item.type_id.feed_speed
|
|
item.tool_speed = item.type_id.tool_speed
|
|
item.distance = item.type_id.distance
|
|
item.taper = item.type_id.taper
|
|
item.torque = item.type_id.torque
|
|
item.motor_power = item.type_id.motor_power
|
|
item.tool_quality_max = item.type_id.tool_quality_max
|
|
item.tool_long_max = item.type_id.tool_long_max
|
|
item.tool_diameter_max = item.type_id.tool_diameter_max
|
|
item.machine_tool_category = item.type_id.machine_tool_category.id
|
|
|
|
# 注册同步机床
|
|
def enroll_machine_tool(self):
|
|
sf_sync_config = self.env['res.config.settings'].get_values()
|
|
token = sf_sync_config['token']
|
|
sf_secret_key = sf_sync_config['sf_secret_key']
|
|
headers = Common.get_headers(self, token, sf_secret_key)
|
|
strurl = sf_sync_config['sf_url'] + self.crea_url
|
|
objs_all = self.env['sf.machine_tool'].search([('MTcode', '=', self.MTcode)])
|
|
machine_tool_list = []
|
|
if objs_all:
|
|
for item in objs_all:
|
|
val = {
|
|
'MTcode': item.MTcode,
|
|
'factory_token': token,
|
|
'id': item.id,
|
|
'name': item.name,
|
|
'code': item.code,
|
|
'precision': item.precision,
|
|
'knife_type': item.knife_type,
|
|
'number_of_knife_library': item.number_of_knife_library,
|
|
'rotate_speed': item.rotate_speed,
|
|
'number_of_axles': item.number_of_axles,
|
|
'control_system_id': self.env['sf.machine.control_system'].search(
|
|
[('id', '=', item.control_system_id.id)]).code,
|
|
'type_id': self.env['sf.machine_tool.type'].search([('id', '=', item.type_id.id)]).code,
|
|
'brand_id': self.env['sf.machine.brand'].search([('id', '=', item.brand_id.id)]).code,
|
|
'supplier_id': item.supplier_id.id,
|
|
'x_axis': item.x_axis,
|
|
'y_axis': item.y_axis,
|
|
'z_axis': item.z_axis,
|
|
'b_axis': item.b_axis,
|
|
'c_axis': item.c_axis,
|
|
'state': item.state,
|
|
'active': item.active,
|
|
|
|
}
|
|
machine_tool_list.append(val)
|
|
# kw = machine_tool_list
|
|
kw = json.dumps(machine_tool_list, ensure_ascii=False)
|
|
r = requests.post(strurl, json={}, data={'kw': kw, 'token': token}, headers=headers)
|
|
ret = r.json()
|
|
self.code = ret['message']
|
|
self.state_zc = "已注册"
|
|
if r == 200:
|
|
return "机床注册成功"
|
|
else:
|
|
raise ValidationError("没有注册机床信息")
|
|
|
|
|
|
class MachineToolType(models.Model):
|
|
_name = 'sf.machine_tool.type'
|
|
_description = '机床型号'
|
|
# _order = 'priority desc, code, name, id'
|
|
|
|
name = fields.Char('名称')
|
|
brand_id = fields.Many2one('sf.machine.brand', string='品牌')
|
|
knife_type = fields.Selection(
|
|
[("BT40", "BT40"), ("BT30", "BT30"), ("BT50", "BT50")],
|
|
default="", string="刀把类型")
|
|
number_of_knife_library = fields.Integer('刀库数量')
|
|
rotate_speed = fields.Integer('转速')
|
|
# 0606新增字段
|
|
created_user = fields.Many2one('res.users', string='创建人', default=lambda self: self.env.user)
|
|
machine_tool_picture = fields.Binary('图片')
|
|
heightened_way = fields.Selection([
|
|
('sifudianji', '伺服电机驱动'),
|
|
('youyagang', '油压缸驱动'),
|
|
('chilunjia', '齿轮架驱动')
|
|
], string="主轴加高方式", default='sifudianji')
|
|
workpiece_load = fields.Char('工件最大负载(kg)')
|
|
workbench_L = fields.Char('工作台长度(mm)')
|
|
workbench_W = fields.Char('工作台宽度(mm)')
|
|
workbench_H = fields.Char('工作台高度(mm)')
|
|
machine_tool_L = fields.Char('机床长度(mm)')
|
|
machine_tool_W = fields.Char('机床宽度(mm)')
|
|
machine_tool_H = fields.Char('机床高度(mm)')
|
|
distance_min = fields.Char('主轴端面至工作台面距离MIN(mm)')
|
|
distance_max = fields.Char('主轴端面至工作台面距离MAX(mm)')
|
|
tool_quality_max = fields.Char('刀具最大质量(kg)')
|
|
tool_long_max = fields.Char('刀具最大长度(mm)')
|
|
machine_tool_category = fields.Many2one('sf.machine_tool.category', string='机床类型')
|
|
|
|
# 多个型号对应一个机床
|
|
machine_tool_id = fields.Many2one('sf.machine_tool', '机床')
|
|
# 加工进程
|
|
x_axis = fields.Integer('X轴')
|
|
y_axis = fields.Integer('Y轴')
|
|
z_axis = fields.Integer('Z轴')
|
|
a_axis = fields.Char('a轴')
|
|
b_axis = fields.Char('B轴')
|
|
c_axis = fields.Char('C轴')
|
|
remark = fields.Char('备注')
|
|
control_system_id = fields.Many2one('sf.machine.control_system',
|
|
string="控制系统")
|
|
active = fields.Boolean('有效', default=True)
|
|
code = fields.Char('编码')
|
|
|
|
# 1212修改后的字段
|
|
number_of_axles = fields.Selection(
|
|
[("三轴", "三轴"), ("四轴", "四轴"), ("五轴", "五轴"), ("六轴", "六轴")],
|
|
default="", string="轴数")
|
|
|
|
# 1212新增字段
|
|
|
|
function_type = fields.Selection(
|
|
[("ZXJGZX", "钻铣加工中心"), ("CXJGZX", "车削加工中心"), ("FHJGZX", "复合加工中心")],
|
|
default="", string="功能类型")
|
|
T_trough_num = fields.Integer('槽数')
|
|
T_trough_wide = fields.Float('槽宽(mm)')
|
|
T_trough_distance = fields.Float('槽距(mm)')
|
|
|
|
taper_type_id = fields.Many2one('spindle.taper.type', string='主轴锥孔型号')
|
|
spindle_center_distance = fields.Float('主轴中心至立柱滑轨面距离(mm)')
|
|
spindle_continuous_power = fields.Float('主轴持续功率(kw)')
|
|
spindle_peak_power = fields.Float('主轴峰值功率(kw)')
|
|
spindle_sustained_torque = fields.Float('主轴持续扭矩(n/m)')
|
|
spindle_peak_torque = fields.Float('主轴峰值扭矩(n/m)')
|
|
linear_axis_guides_type = fields.Char('直线轴导轨类型')
|
|
axis_driven_type = fields.Char('坐标轴驱动类型')
|
|
|
|
X_axis_rapid_traverse_speed = fields.Char('X轴快速进给速度(mm/min)')
|
|
Y_axis_rapid_traverse_speed = fields.Char('Y轴快速进给速度(mm/min)')
|
|
Z_axis_rapid_traverse_speed = fields.Char('Z轴快速进给速度(mm/min)')
|
|
a_axis_rapid_traverse_speed = fields.Char('a轴快速进给速度(mm/min)')
|
|
b_axis_rapid_traverse_speed = fields.Char('b轴快速进给速度(mm/min)')
|
|
c_axis_rapid_traverse_speed = fields.Char('c轴快速进给速度(mm/min)')
|
|
straight_cutting_feed_rate = fields.Char('直线切削进给速度(mm/min)')
|
|
rotary_cutting_feed_rate = fields.Char('回转切削进给速度(mm/min)')
|
|
|
|
X_precision = fields.Char('X轴定位精度(mm)')
|
|
X_precision_repeat = fields.Char('X轴重复定位精度(mm)')
|
|
Y_precision = fields.Char('Y轴定位精度(mm)')
|
|
Y_precision_repeat = fields.Char('Y轴重复定位精度(mm)')
|
|
Z_precision = fields.Char('Z轴定位精度(mm)')
|
|
Z_precision_repeat = fields.Char('Z轴重复定位精度(mm)')
|
|
a_precision = fields.Char('a轴定位精度(mm)')
|
|
a_precision_repeat = fields.Char('a轴重复定位精度(mm)')
|
|
b_precision = fields.Char('b轴定位精度(mm)')
|
|
b_precision_repeat = fields.Char('b轴重复定位精度(mm)')
|
|
c_precision = fields.Char('c轴定位精度(mm)')
|
|
c_precision_repeat = fields.Char('c轴重复定位精度(mm)')
|
|
|
|
tool_full_diameter_max = fields.Float('刀具满刀最大直径(mm)')
|
|
tool_perimeter_diameter_max = fields.Float('刀具邻空刀最大直径(mm)')
|
|
T_tool_time = fields.Float('T-T换刀时间(s)', digits=(12, 1))
|
|
C_tool_time = fields.Float('C-C换刀时间(s)', digits=(12, 1))
|
|
|
|
jg_image_id = fields.Many2many('maintenance.equipment.image', 'jg_equipment_id', string='加工能力',
|
|
domain="[('type', '=', '加工能力')]")
|
|
lq_image_id = fields.Many2many('maintenance.equipment.image', 'lq_equipment_id', string='冷却方式',
|
|
domain="[('type', '=', '冷却方式')]")
|
|
|
|
# 待删除字段
|
|
precision_min = fields.Float('X轴定位精度min(mm)', digits=(12, 3))
|
|
precision_max = fields.Float('X轴定位精度max(mm)', digits=(12, 3))
|
|
lead_screw = fields.Char('丝杆')
|
|
guide_rail = fields.Char('导轨')
|
|
feed_speed = fields.Char('进给速度(mm/min)')
|
|
tool_speed = fields.Char('刀具速度(m/min)')
|
|
torque = fields.Char('主轴点击扭矩(n/m)')
|
|
motor_power = fields.Char('主轴电机功率(kw)')
|
|
taper = fields.Char('主轴锥度(°)')
|
|
tool_diameter_max = fields.Char('刀具刀径max(mm)')
|
|
tool_diameter_min = fields.Char('刀具刀径min(mm)')
|
|
|
|
def _get_ids(self, machine_tool_type_code):
|
|
machine_tool_type_ids = []
|
|
for item in machine_tool_type_code:
|
|
machine_tool_type = self.search([('code', '=', item)])
|
|
if machine_tool_type:
|
|
machine_tool_type_ids.append(machine_tool_type.id)
|
|
return [(6, 0, machine_tool_type_ids)]
|
|
|
|
|
|
class MachineToolCategory(models.Model):
|
|
_name = 'sf.machine_tool.category'
|
|
_description = '机床类型'
|
|
|
|
code = fields.Char('编码')
|
|
name = fields.Char('名称')
|
|
remark = fields.Text('备注')
|
|
active = fields.Boolean('有效', default=True)
|
|
category = fields.Selection([('shukong', u'数控'), ('putong', u'普通')], string=u'机床类别',
|
|
default='shukong')
|
|
|
|
|
|
class MachiningAccuracy(models.Model):
|
|
_name = 'sf.machining.accuracy'
|
|
_description = '加工精度'
|
|
name = fields.Char('一般公差', index=True)
|
|
standard_tolerance = fields.Char(string="标准公差")
|
|
sync_id = fields.Char('同步ID')
|
|
|
|
|
|
class ReSaleOrder(models.Model):
|
|
_inherit = 'sale.order'
|
|
|
|
person_of_delivery = fields.Char('收货人')
|
|
telephone_of_delivery = fields.Char('电话号码')
|
|
address_of_delivery = fields.Char('联系地址')
|