from odoo import models, fields, api, _ import logging, json import requests from odoo.addons.sf_base.commons.common import Common _logger = logging.getLogger(__name__) class SFMessageWork(models.Model): _name = 'mrp.workorder' _inherit = ['mrp.workorder', 'jikimo.message.dispatch'] @api.depends('production_availability', 'blocked_by_workorder_ids.state') def _compute_state(self): super(SFMessageWork, self)._compute_state() for workorder in self: if workorder.state == 'ready' and workorder.routing_type == '装夹预调': workorder.add_queue('工单已下发通知') def _get_message(self, message_queue_ids): contents = [] product_id = [] for message_queue_id in message_queue_ids: if message_queue_id.message_template_id.name == '工单已下发通知': content = message_queue_id.message_template_id.content mrp_workorder_line = self.env['mrp.workorder'].search([('id', '=', int(message_queue_id.res_id))]) mrp_workorder_list = self.env['mrp.workorder'].search( [('product_id', '=', mrp_workorder_line.product_id.id), ('state', '=', 'ready'), ('routing_type', '=', '装夹预调')]) if len(mrp_workorder_list) > 0 and mrp_workorder_line.product_id.id not in product_id: url = message_queue_id.message_template_id.get_url(int(message_queue_id.res_id)) + "&active_id=1" content = content.replace('{{product_id}}', mrp_workorder_line.product_id.name).replace( '{{number}}', str(len(mrp_workorder_list))).replace( '{{part_number}}', mrp_workorder_line.part_number if mrp_workorder_line.part_number else "").replace( '{{request_url}}', url) product_id.append(mrp_workorder_line.product_id.id) contents.append(content) return contents @api.depends('cnc_ids.tool_state') def _compute_tool_state(self): # 将self的id与tool_state进行保存 tool_state_dict = {record.id: record.tool_state for record in self} res = super(SFMessageWork, self)._compute_tool_state() data = {'name': []} for record in self: if tool_state_dict[record.id] != '2' and record.tool_state == '2': data['name'].append(record.production_id.programming_no) if data['name']: # 请求cloud接口,发送微信消息推送 configsettings = self.env['res.config.settings'].get_values() config_header = Common.get_headers(self, configsettings['token'], configsettings['sf_secret_key']) url = '/api/message/invalid_tool_state' config_url = configsettings['sf_url'] + url data['token'] = configsettings['token'] ret = requests.post(config_url, json=data, headers=config_header) ret = ret.json() _logger.info('无效用刀异常消息推送接口:%s' % ret) return res