import json import requests import logging from odoo import http from odoo.http import request from odoo.addons.sf_mrs_connect.controllers.controllers import Sf_Mrs_Connect from odoo.addons.sf_bf_connect.controllers.controllers import Sf_Bf_Connect from odoo.addons.sf_base.commons.common import Common _logger = logging.getLogger(__name__) class MessageSfMrsConnect(Sf_Mrs_Connect): @http.route('/api/cnc_processing/create', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False, cors="*") def get_cnc_processing_create(self, **kw): res = super(MessageSfMrsConnect, self).get_cnc_processing_create(**kw) res = json.loads(res) _logger.info('已进入消息推送:%s' % res) if res.get('production_ids'): try: _logger.info('已编程的制造订单:%s' % res.get('production_ids')) productions = request.env['mrp.production'].sudo().search([('id', 'in', res.get('production_ids'))]) # 过滤programming_state为已编程,tool_state为2的制造订单 tool_state_valid_productions = productions.filtered(lambda x: x.tool_state == '2') if tool_state_valid_productions: data = { 'name': tool_state_valid_productions[0].programming_no } # 请求cloud接口,发送微信消息推送 configsettings = request.env['res.config.settings'].sudo().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) except Exception as e: _logger.info('无效用刀异常消息推送接口:%s' % e) try: productions = request.env['mrp.production'].sudo().search([('id', '=', res.get('production_ids')[0])]) productions.add_queue('工单已下发通知') except Exception as e: _logger.info('工单已下发通知异常:%s' % e) return json.JSONEncoder().encode(res) @http.route('/api/maintenance_logs/notify', type='json', auth='public', methods=['GET', 'POST'], csrf=False, cors="*") def maintenance_logs_notify(self, **kw): res = {'code': 200, 'message': '设备故障日志信息推送成功'} datas = request.httprequest.data ret = json.loads(datas) log_id = ret.get('log_id') if not log_id: res = {'code': 400, 'message': '设备故障日志id不能为空'} return json.JSONEncoder().encode(res) try: if not isinstance(log_id, list): log_id = [log_id] maintenance_logs = request.env['sf.maintenance.logs'].sudo().search( [('id', 'in', [int(id) for id in log_id])]) if maintenance_logs: maintenance_logs.add_queue('设备故障') except Exception as e: res = {'code': 400, 'message': '设备故障信息推送失败', 'error': str(e)} return json.JSONEncoder().encode(res) class MessageSfBfConnect(Sf_Bf_Connect): @http.route('/api/bfm_process_order/list', type='http', auth='sf_token', methods=['GET', 'POST'], csrf=False, cors="*") def get_bfm_process_order_list(self, **kw): res = super(MessageSfBfConnect, self).get_bfm_process_order_list(**kw) response_data = json.loads(res.data.decode('utf-8')) if response_data['status'] == 1: try: _logger.info('已进入待接单消息推送:%s' % response_data) sale_order = request.env['sale.order'].sudo().search([('name', '=', response_data['factory_order_no'])]) sale_order.add_queue('待接单') except Exception as e: logging.info('add_queue error:%s' % e) return res