# -*- coding: utf-8 -*- import json import datetime import requests from odoo import api, fields, models, _ from odoo.exceptions import UserError class SfMaintenanceEquipmentOEE(models.Model): _name = 'maintenance.equipment.oee' _description = '设备OEE' name = fields.Char('设备oee') equipment_id = fields.Many2one('maintenance.equipment', '机台号', domain="[('category_id.equipment_type', '=', '机床'),('state_zc', '=', '已注册')]") equipment_code = fields.Char('设备编码', related='equipment_id.code', store=True) type_id = fields.Many2one('sf.machine_tool.type', '型号', related='equipment_id.type_id') machine_tool_picture = fields.Binary('设备图片', related='equipment_id.machine_tool_picture') state = fields.Selection( [("正常", "正常"), ("故障停机", "故障停机"), ("计划维保", "计划维保"), ("空闲", "空闲"), ("封存(报废)", "封存(报废)")], default='正常', string="机床状态", related='equipment_id.state') run_time = fields.Float('加工时长(h)') equipment_time = fields.Float('开机时长(h)') done_nums = fields.Integer('加工件数') utilization_rate = fields.Char('可用率') fault_time = fields.Float('故障时长') fault_nums = fields.Integer('故障次数') # 故障率 fault_rate = fields.Char('故障率') # 设备故障日志 sf_maintenance_logs_ids = fields.One2many('sf.maintenance.logs', 'maintenance_equipment_oee_id', '设备故障日志', related='equipment_id.sf_maintenance_logs_ids') oee_logs = fields.One2many('maintenance.equipment.oee.logs', 'equipment_oee_id', string='运行日志') day_logs_detail = fields.Html('日运行日志详情') history_logs_detail = fields.Html('历史运行日志详情') begin_time = fields.Date('开始时间') end_time = fields.Date('结束时间') # 获取日志详情 def get_day_logs(self): config = self.env['ir.config_parameter'].sudo() url = 'http://172.16.10.112:8069/api/logs/list' machine_list = [self.equipment_code] begin_time = datetime.datetime.now().strftime('%Y-%m-%d') + ' 00:00:00' end_time = datetime.datetime.now().strftime('%Y-%m-%d') + ' 23:59:59' # 请求的数据 data = { "machine_list": str(machine_list), "begin_time": begin_time, "end_time": end_time } print(data) # 发送POST请求 response = requests.post(url, json={}, data=data) print(response.json()) # 输出服务器返回的响应 if response.status_code == 200: result = response.json() print('============', result) if result['status'] == 1: logs_list = result['data'][self.equipment_code] logs_detail = '' log_state = '' for log in logs_list: if log['state'] != log_state: print('loooooooooooooooooooogs', log) production_name = log['production_name'] if log['production_name'] else ' ' logs_detail += '' + log['time'] + '' + log[ 'state'] + '' + production_name + '' log_state = log['state'] # self.day_logs_detail = '' + logs_detail + '
时间事件/状态加工工单
' self.day_logs_detail = ''' {logs_detail}
时间 事件/状态 加工工单
'''.format(logs_detail=logs_detail) else: self.day_logs_detail = '获取日志失败' else: self.day_logs_detail = '获取日志失败' # 获取历史日志详情 def get_history_logs(self): config = self.env['ir.config_parameter'].sudo() url = 'http://172.16.10.112:8069/api/logs/list' machine_list = [self.equipment_code] if not self.begin_time: raise UserError('请选择开始时间') if not self.end_time: raise UserError('请选择结束时间') begin_time = self.begin_time.strftime('%Y-%m-%d') + ' 00:00:00' end_time = self.end_time.strftime('%Y-%m-%d') + ' 23:59:59' # 请求的数据 data = { "machine_list": str(machine_list), "begin_time": begin_time, "end_time": end_time } print(data) # 发送POST请求 response = requests.post(url, json={}, data=data) print(response.json()) # 输出服务器返回的响应 if response.status_code == 200: result = response.json() print('============', result) if result['status'] == 1: logs_list = result['data'][self.equipment_code] logs_detail = '' log_state = '' for log in logs_list: if log['state'] != log_state: production_name = log['production_name'] if log['production_name'] else ' ' logs_detail += '' + log['time'] + '' + log[ 'state'] + '' + production_name + '' log_state = log['state'] # self.day_logs_detail = '' + logs_detail + '
时间事件/状态加工工单
' self.history_logs_detail = ''' {logs_detail}
时间 事件/状态 加工工单
'''.format(logs_detail=logs_detail) else: self.history_logs_detail = '获取日志失败' else: self.history_logs_detail = '获取日志失败' # 下载历史日志 def download_history_logs(self): config = self.env['ir.config_parameter'].sudo() url = 'http://172.16.10.112:8069/api/logs/list' machine_list = [self.equipment_code] if not self.begin_time: raise UserError('请选择开始时间') if not self.end_time: raise UserError('请选择结束时间') begin_time = self.begin_time.strftime('%Y-%m-%d') + ' 00:00:00' end_time = self.end_time.strftime('%Y-%m-%d') + ' 23:59:59' # 请求的数据 data = { "machine_list": str(machine_list), "begin_time": begin_time, "end_time": end_time } print(data) # 发送POST请求 response = requests.post(url, json={}, data=data) print(response.json()) # 输出服务器返回的响应 if response.status_code == 200: result = response.json() print('============', result) if result['status'] == 1: logs_list = result['data'][self.equipment_code] logs_detail = '' for log in logs_list: production_name = log['production_name'] if log['production_name'] else ' ' # todo 下载日志 else: self.history_logs_detail = '下载日志失败' else: self.history_logs_detail = '下载日志失败' def name_get(self): result = [] for parameter in self: if parameter.equipment_id: name = parameter.equipment_id.name result.append((parameter.id, name)) return result class SfMaintenanceEquipmentOEELog(models.Model): _name = 'maintenance.equipment.oee.logs' _description = '设备运行日志' equipment_id = fields.Many2one('maintenance.equipment', '机台号', readonly='True') equipment_code = fields.Char('设备编码', readonly='True') name = fields.Char('设备名称', readonly='True') function_type = fields.Selection( [("ZXJGZX", "钻铣加工中心"), ("CXJGZX", "车削加工中心"), ("FHJGZX", "复合加工中心")], default="", string="功能类型") machine_tool_picture = fields.Binary('设备图片') type_id = fields.Many2one('sf.machine_tool.type', '品牌型号', reaonly='True') state = fields.Selection([("加工", "加工"), ("关机", "关机"), ("待机", "待机"), ("故障", "故障"), ("检修", "检修"), ("保养", "保养")], default="", string="实时状态") online_time = fields.Char('开机时长', reaonly='True') offline_time = fields.Char('关机时长', reaonly='True') offline_nums = fields.Integer('关机次数', reaonly='True') # 待机时长 idle_time = fields.Char('待机时长', reaonly='True') # 待机率 idle_rate = fields.Char('待机率', reaonly='True') work_time = fields.Char('加工时长', reaonly='True') work_rate = fields.Char('可用率', reaonly='True') fault_time = fields.Char('故障时长', reaonly='True') fault_rate = fields.Char('故障率', reaonly='True') fault_nums = fields.Integer('故障次数', reaonly='True') detail_ids = fields.One2many('maintenance.equipment.oee.log.detail', 'log_id', string='日志详情') # maintenance_time = fields.Char('维保时长') # work_nums = fields.Integer('加工件数') equipment_oee_id = fields.Many2one('maintenance.equipment.oee', '设备OEE') @api.onchange('equipment_id') def get_name(self): self.name = self.equipment_id.name self.equipment_code = self.equipment_id.code # 设备运行日志详情 class SfMaintenanceEquipmentOEELogDetail(models.Model): _name = 'maintenance.equipment.oee.log.detail' _description = '设备运行日志详情' _order = 'time desc' # sequence = fields.Integer('序号', related='id') time = fields.Datetime('时间') state = fields.Selection([("加工", "加工"), ("关机", "关机"), ("待机", "待机"), ("故障", "故障"), ("检修", "检修"), ("保养", "保养")], default="", string="事件/状态") production_name = fields.Char('加工工单') log_id = fields.Many2one('maintenance.equipment.oee.logs', '日志') # equipment_code = fields.Char('设备编码', related='log_id.equipment_code') equipment_code = fields.Char('设备编码', readonly='True')