111 lines
4.1 KiB
Python
111 lines
4.1 KiB
Python
# -*- coding: utf-8 -*-
|
||
import logging
|
||
import json
|
||
import base64
|
||
import functools
|
||
import logging
|
||
from datetime import datetime
|
||
from odoo import http
|
||
from odoo.http import request
|
||
|
||
_logger = logging.getLogger(__name__)
|
||
|
||
class Manufacturing_Connect(http.Controller):
|
||
|
||
@http.route('/AutoDeviceApi/MachineToolGroup', type='json', auth='sf_token', methods=['GET', 'POST'], csrf=False,
|
||
cors="*")
|
||
def get_maintenance_tool_groups_Info(self, **kw):
|
||
"""
|
||
机床刀具组接口
|
||
:param kw:
|
||
:return:
|
||
"""
|
||
logging.info('get_maintenance_tool_groups_Info:%s' % kw)
|
||
try:
|
||
datas = request.httprequest.data
|
||
ret = json.loads(datas)
|
||
# ret = json.loads(ret['result'])
|
||
logging.info('DeviceId:%s' % ret)
|
||
tool_groups = request.env['sf.tool.groups'].sudo().search([])
|
||
|
||
res = {'Succeed': True, 'Datas': []}
|
||
if tool_groups:
|
||
for item in tool_groups:
|
||
device_id = ''
|
||
for equipment_id in item.equipment_ids:
|
||
device_id = '%s,%s' % (device_id, equipment_id.name)
|
||
res['Datas'].append({
|
||
'GroupName': item.name,
|
||
'DeviceId': device_id
|
||
})
|
||
except Exception as e:
|
||
res = {'Succeed': False, 'ErrorCode': 202, 'Error': e}
|
||
logging.info('get_maintenance_tool_groups_Info error:%s' % e)
|
||
return json.JSONEncoder().encode(res)
|
||
|
||
|
||
class MultiInheritController():
|
||
_sub_classes = []
|
||
|
||
def __init_subclass__(cls):
|
||
"""
|
||
多继承,解决多个字类时方法调用super的问题
|
||
"""
|
||
super().__init_subclass__()
|
||
if len(cls._sub_classes) > 0 and cls not in cls._sub_classes:
|
||
cls.__bases__ = (cls._sub_classes[-1],)
|
||
if cls not in cls._sub_classes:
|
||
cls._sub_classes.append(cls)
|
||
|
||
|
||
def api_log(name=None, requester=None):
|
||
"""记录API请求日志的装饰器"""
|
||
def decorator(func):
|
||
@functools.wraps(func)
|
||
def wrapper(*args, **kwargs):
|
||
start_time = datetime.now()
|
||
|
||
# 获取请求信息
|
||
try:
|
||
# 获取请求数据
|
||
request_data = json.loads(request.httprequest.data) if request.httprequest.data else {}
|
||
# 获取请求路径
|
||
path = request.httprequest.path
|
||
# 获取请求方法
|
||
method = request.httprequest.method
|
||
# 获取客户端IP
|
||
remote_addr = request.httprequest.remote_addr
|
||
|
||
# 执行原始函数
|
||
result = func(*args, **kwargs)
|
||
|
||
# 计算响应时间
|
||
end_time = datetime.now()
|
||
response_time = (end_time - start_time).total_seconds()
|
||
|
||
# 创建日志记录
|
||
log_vals = {
|
||
'name': name or func.__name__,
|
||
'path': path,
|
||
'method': method,
|
||
'request_headers': json.dumps(request.httprequest.headers, ensure_ascii=False),
|
||
'request_data': json.dumps(request_data, ensure_ascii=False),
|
||
'response_data': json.dumps(result, ensure_ascii=False),
|
||
'remote_addr': remote_addr,
|
||
'response_time': response_time,
|
||
'status': result.get('code', 500),
|
||
'requester': requester,
|
||
'responser': '智能工厂'
|
||
}
|
||
|
||
# 异步创建日志记录
|
||
request.env['api.request.log'].sudo().with_context(tracking_disable=True).create(log_vals)
|
||
|
||
return result
|
||
|
||
except Exception as e:
|
||
_logger.error(f"API日志记录失败: {str(e)}")
|
||
# 即使日志记录失败,也要返回原始结果
|
||
return func(*args, **kwargs)
|
||
return wrapper
|
||
return decorator |