from odoo import http, fields from odoo.http import request import json import logging from odoo.addons.sf_mrs_connect.controllers.controllers import Sf_Mrs_Connect from odoo.addons.sf_manufacturing.controllers.controllers import Manufacturing_Connect _logger = logging.getLogger(__name__) class WorkorderExceptionConroller(http.Controller): @http.route('/AutoDeviceApi/BillError', type='json', auth='public', methods=['GET', 'POST'], csrf=False, cors="*") def workder_exception(self, **kw): """ 记录工单异常 :param kw: :return: """ _logger.info('workder_exception:%s' % kw) try: res = {'Succeed': True, 'ErrorCode': 0, 'Error': ''} datas = request.httprequest.data ret = json.loads(datas) if not ret.get('RfidCode') or not ret.get('coding'): res = {'Succeed': False, 'ErrorCode': 400, 'Error': '参数错误'} return json.JSONEncoder().encode(res) # 通过RfidCode获取就绪的CNC工单 workorder = request.env['mrp.workorder'].sudo().search([ ('rfid_code', '=', ret['RfidCode']), ('routing_type', '=', 'CNC加工'), ]) if not workorder: res = {'Succeed': False, 'ErrorCode': 401, 'Error': '无效的工单'} return json.JSONEncoder().encode(res) # 创建工单异常记录,关联工单 request.env['jikimo.workorder.exception'].sudo().create({ 'workorder_id': workorder.id, 'exception_code': ret.get('coding'), 'exception_content': ret.get('Error', '') }) except Exception as e: res = {'Succeed': False, 'ErrorCode': 202, 'Error': e} _logger.info('workder_exception error:%s' % e) return json.JSONEncoder().encode(res) class SfMrsConnectController(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): """ 更新工单异常记录【'YC001', 'YC004'】 """ res = super(SfMrsConnectController, self).get_cnc_processing_create(**kw) # 如果有未完成的YC0001、YC0004异常记录,则标记为完成 res = json.loads(res) _logger.info('已进入工单异常:%s' % res) if res.get('production_ids'): try: productions = request.env['mrp.production'].sudo().search([('id', 'in', res.get('production_ids'))]) if productions.workorder_ids: productions.workorder_ids.handle_exception(['YC0001', 'YC0004']) except Exception as e: _logger.info('更新工单异常记录失败:%s' % e) return json.JSONEncoder().encode(res) class ManufactruingController(Manufacturing_Connect): @http.route('/AutoDeviceApi/FeedBackStart', type='json', auth='none', methods=['GET', 'POST'], csrf=False, cors="*") def button_Work_START(self, **kw): """ 更新工单异常记录【'YC0002', 'YC0003'】 """ res = super(ManufactruingController, self).button_Work_START(**kw) res = json.loads(res) _logger.info('已进入工单异常:%s' % res) if res.get('workorder_id'): try: workorder = request.env['mrp.workorder'].sudo().browse(int(res.get('workorder_id'))) workorder.handle_exception(['YC0002', 'YC0003']) except Exception as e: _logger.info('更新工单异常记录失败:%s' % e) return json.JSONEncoder().encode(res)