1、重构cnc用刀校验方法,优化下发编程单后校验cnc用刀的逻辑;2、优化CAM创建方法;3、优化获取mrs编程单接口、优化编程单更新接口;

This commit is contained in:
yuxianghui
2024-10-09 17:52:20 +08:00
parent 62a2aed7d9
commit f18c0e3eaf
4 changed files with 111 additions and 33 deletions

View File

@@ -29,7 +29,7 @@ class CNCprocessing(models.Model):
# else:
# raise ValidationError("MES装刀指令发送失败")
def cnc_tool_checkout(self, cnc_processing_ids):
def cnc_tool_checkout_1(self, cnc_processing_ids):
"""
根据传入的工单信息查询是否有需要的功能刀具如果没有则生成CAM工单程序用刀计划
"""
@@ -128,13 +128,6 @@ class CNCprocessing(models.Model):
})
logging.info('工单cnc程序用刀校验已完成')
@api.model_create_multi
def create(self, vals):
obj = super(CNCprocessing, self).create(vals)
# 调用CAM工单程序用刀计划创建方法
self.cnc_tool_checkout(obj)
return obj
class MrpWorkCenter(models.Model):
_inherit = 'mrp.workcenter'
@@ -143,3 +136,77 @@ class MrpWorkCenter(models.Model):
action = self.env.ref('sf_tool_management.sf_functional_tool_assembly_view_act')
result = action.read()[0]
return result
class MrpProduction(models.Model):
_inherit = 'mrp.production'
def production_cnc_tool_checkout(self):
logging.info('开始进行工单cnc程序用刀校验')
invalid_tool = [] # 无效刀
invalid_tool_processing_panel = [] # 无效刀加工面
missing_tool_1 = [] # 缺刀(机内、线边)
missing_tool_2 = [] # 缺刀(库存)
for item in self:
workorder_ids = item.workorder_ids.filtered(lambda a: a.state not in ['rework', 'cancel'])
for workorder_id in workorder_ids:
if workorder_id.cnc_ids:
for cnc_id in workorder_id.cnc_ids:
tool_name = cnc_id.cutting_tool_name
# 查询功能刀具在清单中是否存在
tool_inventory_id = self.env['sf.tool.inventory'].sudo().search([('name', '=', tool_name)])
if not tool_inventory_id:
invalid_tool.append(tool_name)
invalid_tool_processing_panel.append(workorder_id.processing_panel)
continue
# 查询功能刀具是否存在库存
functional_tools = self.env['sf.functional.cutting.tool.entity'].sudo().search(
[('tool_name_id', '=', tool_inventory_id.id), ('functional_tool_status', '=', '正常')])
if not functional_tools.filtered(lambda p: p.current_location in ('线边刀库', '机内刀库')):
missing_tool_1.append(tool_name) # 判断为 ('线边刀库', '机内刀库') 缺刀
if not functional_tools:
missing_tool_2.append(tool_name) # 判断为 库存缺刀
break
# 修改cnc程序的刀具状态
workorder_ids = self.env['mrp.workorder'].sudo().search([('production_id', 'in', self.ids)])
if invalid_tool:
# 修改cnc程序的刀具状态为 ‘无效刀’
cnc_ids = self.env['sf.cnc.processing'].sudo().search(
[('workorder_id', 'in', workorder_ids.ids), ('cutting_tool_name', 'in', invalid_tool)])
if cnc_ids:
cnc_ids.write({'tool_state': '2'})
# 创建制造订单无效刀检测结果记录
for production_id in self:
for processing_panel in list(set(invalid_tool_processing_panel)):
if not production_id.detection_result_ids.filtered(
lambda a: (a.processing_panel == processing_panel and a.detailed_reason == '无效功能刀具'
and a.handle_result == '待处理' and a.routing_type == 'CNC加工'
and a.rework_reason == 'programming' and a.test_results == '返工')):
production_id.detection_result_ids.create({
'production_id': production_id.id,
'processing_panel': processing_panel,
'routing_type': 'CNC加工',
'rework_reason': 'programming', # 原因:编程(programming)
'detailed_reason': '无效功能刀具',
'test_results': '返工',
'handle_result': '待处理'
})
# 自动调用重新获取编程的方法
self[0].update_programming_state()
# 修改制造订单 编程状态变为“编程中”
self.write({'programming_state': '编程中', 'work_state': '编程中'})
if missing_tool_1:
# 修改 修改cnc程序的刀具状态 为 ‘缺刀’
cnc_ids = self.env['sf.cnc.processing'].sudo().search(
[('workorder_id', 'in', workorder_ids.ids), ('cutting_tool_name', 'in', missing_tool_1)])
if cnc_ids:
cnc_ids.write({'tool_state': '1'})
if missing_tool_2 and not invalid_tool:
# 调用CAM工单程序用刀计划创建方法
logging.info('调用CAM工单程序用刀计划创建方法')
cnc_ids = self.env['sf.cnc.processing'].sudo().search(
[('workorder_id', 'in', workorder_ids.ids), ('cutting_tool_name', 'in', missing_tool_2)])
if cnc_ids:
self.env['sf.cam.work.order.program.knife.plan'].sudo().create_cam_work_plan(cnc_ids[0], list(
set(missing_tool_2)))
logging.info('工单cnc程序用刀校验完成')