Files
test/sf_tool_management/models/mrp_workorder.py

102 lines
4.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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