102 lines
4.8 KiB
Python
102 lines
4.8 KiB
Python
import json
|
||
import requests
|
||
import logging
|
||
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, knife_plan):
|
||
# config = self.env['res.config.settings'].get_values()
|
||
# # token = sf_sync_config['token'Ba F2CF5DCC-1A00-4234-9E95-65603F70CC8A]
|
||
# headers = {'Authorization': config['center_control_Authorization']}
|
||
# crea_url = config['center_control_url'] + "/AutoDeviceApi/ToolLoadInstruct"
|
||
# val = {
|
||
# 'DeviceId': knife_plan.machine_table_name,
|
||
# 'RfidCode': knife_plan.sf_functional_tool_assembly_id.rfid.zfill(10),
|
||
# 'ToolId': int(knife_plan.cam_cutter_spacing_code[1:])
|
||
# }
|
||
# r = requests.post(crea_url, json=val, headers=headers)
|
||
# ret = r.json()
|
||
# logging.info('register_cnc_processing:%s' % ret)
|
||
# if ret['Succeed']:
|
||
# return "MES装刀指令发送成功"
|
||
# else:
|
||
# raise ValidationError("MES装刀指令发送失败")
|
||
|
||
def cnc_tool_checkout(self, cnc_processing_ids):
|
||
"""
|
||
根据传入的工单信息,查询是否有需要的功能刀具,如果没有则生成CAM工单程序用刀计划
|
||
"""
|
||
cam_id = self.env['sf.cam.work.order.program.knife.plan']
|
||
production_ids = [] # 制造订单集
|
||
datas = {} # 缺刀/无效刀集
|
||
for cnc_processing in cnc_processing_ids:
|
||
production_name = cnc_processing.production_id.name # 制造订单
|
||
processing_panel = cnc_processing.workorder_id.processing_panel # 加工面
|
||
if not datas.get(production_name):
|
||
datas.update({production_name: {}})
|
||
production_ids.append(cnc_processing.production_id)
|
||
if not datas.get(production_name).get(processing_panel):
|
||
datas.get(production_name).update({processing_panel: {'缺刀': [], '无效刀': []}})
|
||
if cnc_processing.cutting_tool_name:
|
||
tool_name = cnc_processing.cutting_tool_name
|
||
# 检验CNC用刀是否是功能刀具清单中的刀具
|
||
tool_inventory_id = self.env['sf.tool.inventory'].sudo().search([('name', '=', tool_name)])
|
||
if not tool_inventory_id:
|
||
datas[production_name][processing_panel]['无效刀'].append(cnc_processing.cutting_tool_name)
|
||
cnc_processing.tool_state = '2'
|
||
# todo 无效刀处理逻辑
|
||
|
||
# 跳过本次循环
|
||
continue
|
||
# 校验CNC用刀在系统是否存在
|
||
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 ('线边刀库', '机内刀库')):
|
||
datas[production_name][processing_panel]['缺刀'].append(cnc_processing.cutting_tool_name)
|
||
cnc_processing.tool_state = '1'
|
||
# 判断是否有满足条件的刀
|
||
if not functional_tools:
|
||
# 创建CAM申请装刀记录
|
||
cam_id.create_cam_work_plan(cnc_processing)
|
||
logging.info('成功调用CAM工单程序用刀计划创建方法!!!')
|
||
for production_id in production_ids:
|
||
if production_id:
|
||
data = datas.get(production_id.name)
|
||
tool_state_remark = ''
|
||
# todo 对无效刀信息进行处理
|
||
|
||
# 对缺刀信息进行处理
|
||
for key in data:
|
||
if tool_state_remark != '':
|
||
tool_state_remark = f'{tool_state_remark}\n{key}缺刀:{data.get(key).get("缺刀")}'
|
||
else:
|
||
tool_state_remark = f'{key}缺刀:{data.get(key).get("缺刀")}'
|
||
if production_id.tool_state == '1':
|
||
production_id.write({
|
||
'tool_state_remark': tool_state_remark
|
||
})
|
||
|
||
@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'
|
||
|
||
def action_tool_order(self):
|
||
action = self.env.ref('sf_tool_management.sf_functional_tool_assembly_view_act')
|
||
result = action.read()[0]
|
||
return result
|