1、工单的cnc加工模型添加功能刀具类型字段;2、添加根据刀具类型和刀具名称检索现有功能刀具是否满足需求,如果不满足则创建CAM工单程序用刀计划记录的功能记录;3、添加MES装刀指令接口,根据cnc加工所需的刀具类型和刀具名称检索现有机床内功能刀具是否满足需求,如果不满足则发送MES装刀指令;4、添加刀具组接口,新增功能刀具时传送功能刀具名称、编码、刀具组。
This commit is contained in:
@@ -10,6 +10,7 @@
|
|||||||
<field name="sequence_number"/>
|
<field name="sequence_number"/>
|
||||||
<field name="program_name"/>
|
<field name="program_name"/>
|
||||||
<field name="cnc_id" string="文件"/>
|
<field name="cnc_id" string="文件"/>
|
||||||
|
<field name="functional_tool_type_id"/>
|
||||||
<field name="cutting_tool_name"/>
|
<field name="cutting_tool_name"/>
|
||||||
<field name="cutting_tool_no"/>
|
<field name="cutting_tool_no"/>
|
||||||
<field name="processing_type"/>
|
<field name="processing_type"/>
|
||||||
|
|||||||
@@ -597,6 +597,7 @@ class CNCprocessing(models.Model):
|
|||||||
cnc_id = fields.Many2one('ir.attachment')
|
cnc_id = fields.Many2one('ir.attachment')
|
||||||
sequence_number = fields.Char('序号')
|
sequence_number = fields.Char('序号')
|
||||||
program_name = fields.Char('程序名')
|
program_name = fields.Char('程序名')
|
||||||
|
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型')
|
||||||
cutting_tool_name = fields.Char('刀具名称')
|
cutting_tool_name = fields.Char('刀具名称')
|
||||||
cutting_tool_no = fields.Char('刀号')
|
cutting_tool_no = fields.Char('刀号')
|
||||||
processing_type = fields.Char('加工类型')
|
processing_type = fields.Char('加工类型')
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import re
|
import re
|
||||||
|
import json
|
||||||
|
import requests
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from odoo import fields, models, api
|
|
||||||
from odoo import SUPERUSER_ID
|
from odoo import SUPERUSER_ID
|
||||||
|
from odoo import fields, models, api
|
||||||
from odoo.exceptions import ValidationError
|
from odoo.exceptions import ValidationError
|
||||||
|
from odoo.addons.sf_base.commons.common import Common
|
||||||
|
|
||||||
|
|
||||||
class FunctionalCuttingToolEntity(models.Model):
|
class FunctionalCuttingToolEntity(models.Model):
|
||||||
@@ -174,6 +177,34 @@ class FunctionalCuttingToolEntity(models.Model):
|
|||||||
('coarse_middle_thin', '=', self.coarse_middle_thin)]
|
('coarse_middle_thin', '=', self.coarse_middle_thin)]
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
# ==========刀具组接口==========
|
||||||
|
def _register_functional_tool_groups(self, obj):
|
||||||
|
create_url = '/AutoDeviceApi/FeedBackOut'
|
||||||
|
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(obj, token, sf_secret_key)
|
||||||
|
strurl = sf_sync_config['sf_url'] + create_url
|
||||||
|
val = {
|
||||||
|
'ToolName': obj.name,
|
||||||
|
'GroupName': obj.tool_groups_id.name,
|
||||||
|
'ToolId': obj.code
|
||||||
|
}
|
||||||
|
kw = json.dumps(val, ensure_ascii=False)
|
||||||
|
r = requests.post(strurl, json={}, data={'kw': kw, 'token': token}, headers=headers)
|
||||||
|
ret = r.json()
|
||||||
|
if r == 200:
|
||||||
|
return "刀具组发送成功"
|
||||||
|
else:
|
||||||
|
raise ValidationError("刀具组发送失败")
|
||||||
|
|
||||||
|
@api.model_create_multi
|
||||||
|
def create(self, vals):
|
||||||
|
obj = super(FunctionalCuttingToolEntity, self).create(vals)
|
||||||
|
# 调用刀具组接口
|
||||||
|
self._register_functional_tool_groups(obj)
|
||||||
|
return obj
|
||||||
|
|
||||||
|
|
||||||
class FunctionalToolWarning(models.Model):
|
class FunctionalToolWarning(models.Model):
|
||||||
_name = 'sf.functional.tool.warning'
|
_name = 'sf.functional.tool.warning'
|
||||||
@@ -240,7 +271,7 @@ class FunctionalToolWarning(models.Model):
|
|||||||
class StockMoveLine(models.Model):
|
class StockMoveLine(models.Model):
|
||||||
_inherit = 'stock.move.line'
|
_inherit = 'stock.move.line'
|
||||||
_description = '功能刀具出入库记录'
|
_description = '功能刀具出入库记录'
|
||||||
_order = 'install_tool_time desc'
|
_order = 'date desc'
|
||||||
|
|
||||||
functional_tool_name_id = fields.Many2one('sf.functional.tool.assembly', string='功能刀具名称')
|
functional_tool_name_id = fields.Many2one('sf.functional.tool.assembly', string='功能刀具名称')
|
||||||
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', store=True,
|
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', store=True,
|
||||||
@@ -710,8 +741,39 @@ class CAMWorkOrderProgramKnifePlan(models.Model):
|
|||||||
'applicant': None,
|
'applicant': None,
|
||||||
'sf_functional_tool_assembly_id': None})
|
'sf_functional_tool_assembly_id': None})
|
||||||
|
|
||||||
def create_cam_work_plan(self, **kw):
|
def create_cam_work_plan(self, cnc_processing):
|
||||||
pass
|
"""
|
||||||
|
根据传入的工单信息,查询是否有需要的功能刀具,如果没有则生成CAM工单程序用刀计划
|
||||||
|
"""
|
||||||
|
status = False
|
||||||
|
if cnc_processing.functional_tool_type_id and cnc_processing.cutting_tool_name:
|
||||||
|
functional_tools = self.env['sf.real.time.distribution.of.functional.tools'].sudo().search(
|
||||||
|
[('sf_cutting_tool_type_id', '=', cnc_processing.functional_tool_type_id.id),
|
||||||
|
('name', '=', cnc_processing.cutting_tool_name)])
|
||||||
|
if functional_tools:
|
||||||
|
for functional_tool in functional_tools:
|
||||||
|
if functional_tool.on_tool_stock_num == 0:
|
||||||
|
self.env['sf.cnc.processing'].register_cnc_processing(cnc_processing)
|
||||||
|
if functional_tool.tool_stock_num == 0 and functional_tool.side_shelf_num == 0:
|
||||||
|
status = True
|
||||||
|
else:
|
||||||
|
status = True
|
||||||
|
if status:
|
||||||
|
self.env['sf.cam.work.order.program.knife.plan'].sudo().create({
|
||||||
|
'name': cnc_processing.workorder_id.production_id.name,
|
||||||
|
'cam_procedure_code': cnc_processing.program_name,
|
||||||
|
'filename': cnc_processing.cnc_id.name,
|
||||||
|
'functional_tool_type_id': cnc_processing.functional_tool_type_id.id,
|
||||||
|
'functional_tool_name': cnc_processing.cutting_tool_name,
|
||||||
|
'cam_cutter_spacing_code': cnc_processing.cutting_tool_no,
|
||||||
|
'process_type': cnc_processing.processing_type,
|
||||||
|
'margin_x_y': float(cnc_processing.margin_x_y),
|
||||||
|
'margin_z': float(cnc_processing.margin_z),
|
||||||
|
'finish_depth': float(cnc_processing.depth_of_processing_z),
|
||||||
|
'extension_length': float(cnc_processing.cutting_tool_extension_length),
|
||||||
|
'shank_model': cnc_processing.cutting_tool_handle_type,
|
||||||
|
'estimated_processing_time': cnc_processing.estimated_processing_time,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
class FunctionalToolAssembly(models.Model):
|
class FunctionalToolAssembly(models.Model):
|
||||||
|
|||||||
38
sf_tool_management/models/mrp_workorder.py
Normal file
38
sf_tool_management/models/mrp_workorder.py
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
import json
|
||||||
|
import requests
|
||||||
|
from odoo import fields, models, api
|
||||||
|
from odoo.exceptions import ValidationError
|
||||||
|
from odoo.addons.sf_base.commons.common import Common
|
||||||
|
|
||||||
|
|
||||||
|
class CNCprocessing(models.Model):
|
||||||
|
_inherit = 'sf.cnc.processing'
|
||||||
|
_description = 'CNC加工用刀检测'
|
||||||
|
|
||||||
|
# ==========MES装刀指令接口==========
|
||||||
|
def register_cnc_processing(self, cnc_processing):
|
||||||
|
create_url = '/AutoDeviceApi/FeedBackOut'
|
||||||
|
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'] + create_url
|
||||||
|
val = {
|
||||||
|
'DeviceId': cnc_processing.workorder_id.machine_tool_name,
|
||||||
|
'RfidCode': None,
|
||||||
|
'ToolId': cnc_processing.cutting_tool_no
|
||||||
|
}
|
||||||
|
kw = json.dumps(val, ensure_ascii=False)
|
||||||
|
r = requests.post(strurl, json={}, data={'kw': kw, 'token': token}, headers=headers)
|
||||||
|
ret = r.json()
|
||||||
|
if r == 200:
|
||||||
|
return "MES装刀指令发送成功"
|
||||||
|
else:
|
||||||
|
raise ValidationError("MES装刀指令发送失败")
|
||||||
|
|
||||||
|
@api.model_create_multi
|
||||||
|
def create(self, vals):
|
||||||
|
obj = super(CNCprocessing, self).create(vals)
|
||||||
|
# 调用CAM工单程序用刀计划创建方法
|
||||||
|
self.env['sf.cam.work.order.program.knife.plan'].create_cam_work_plan(obj)
|
||||||
|
return obj
|
||||||
Reference in New Issue
Block a user