diff --git a/sf_quality/models/quality.py b/sf_quality/models/quality.py index 748d8bca..ee289415 100644 --- a/sf_quality/models/quality.py +++ b/sf_quality/models/quality.py @@ -1,34 +1,36 @@ import json import requests +import logging from odoo import fields, models, api from odoo.exceptions import ValidationError +from datetime import datetime from odoo.addons.sf_base.commons.common import Common class QualityCheck(models.Model): _inherit = "quality.check" - _description = '零件特采' # ==========零件特采接口========== - def _register_tool_groups(self): - create_url = '/AutoDeviceApi/PartSpecProc' - sf_sync_config = self.env['res.config.settings'].get_values() - token = sf_sync_config['token'] - sf_secret_key = sf_sync_config['sf_secret_key'] - headers = Common.get_headers(self, token, sf_secret_key) - strurl = sf_sync_config['sf_url'] + create_url - val = { - 'RfidCode': None, - } - kw = json.dumps(val, ensure_ascii=False) - r = requests.post(strurl, json={}, data={'kw': kw, 'token': token}, headers=headers) + def _register_quality_check(self): + # create_url = '/AutoDeviceApi/PartSpecProc' + # sf_sync_config = self.env['res.config.settings'].get_values() + # token = sf_sync_config['token'] + # sf_secret_key = sf_sync_config['sf_secret_key'] + # headers = Common.get_headers(self, token, sf_secret_key) + headers = {'Authorization': 'Ba F2CF5DCC-1A00-4234-9E95-65603F70CC8A'} + crea_url = "https://x24467i973.zicp.fun/AutoDeviceApi/PartSpecProc" + val = ['0037835872'] + r = requests.post(crea_url, json=val, headers=headers) ret = r.json() - if r == 200: + logging.info('_register_quality_check:%s' % ret) + if ret['Succeed']: return "零件特采发送成功" else: raise ValidationError("零件特采发送失败") - # @api.onchange('quality_state') - # def _onchange_quality_state(self): - # if self.quality_state in ['pass', 'fail']: - # self._register_tool_groups() + def do_fail(self): + self.write({ + 'quality_state': 'fail', + 'user_id': self.env.user.id, + 'control_date': datetime.now()}) + self._register_quality_check() diff --git a/sf_tool_management/controllers/controllers.py b/sf_tool_management/controllers/controllers.py index 84ef7664..0b003dc6 100644 --- a/sf_tool_management/controllers/controllers.py +++ b/sf_tool_management/controllers/controllers.py @@ -8,54 +8,6 @@ from odoo.http import request class Manufacturing_Connect(http.Controller): - # @http.route('/AutoDeviceApi/GetToolInfo', type='json', auth='none', methods=['GET', 'POST'], csrf=False, - # cors="*") - # def get_equipment_tool_Info(self, **kw): - # """ - # 机床刀库实时信息 - # :param kw: - # :return: - # """ - # logging.info('get_equipment_tool_Info:%s' % kw) - # try: - # datas = request.httprequest.data - # ret = json.loads(datas) - # ret = json.loads(ret.get('result')) - # logging.info('DeviceId:%s' % ret) - # equipment = request.env['maintenance.equipment'].sudo().search([('name', '=', ret['DeviceId'])]) - # - # res = {'Succeed': True, 'Datas': []} - # if equipment: - # for item in equipment: - # data = [] - # for equipment_tool_id in item.product_template_ids: - # functional_tool_id = self.env['sf.functional.cutting.tool.entity'].sudo().search( - # [('code', '=', equipment_tool_id.tool_code)]) - # - # alarm_time = None - # if functional_tool_id.functional_tool_status == '报警': - # alarm_time = self.env['sf.functional.tool.warning'].sudo().search( - # [('code', '=', equipment_tool_id.tool_code)]).alarm_time - # equipment_tool = { - # 'RfidCode': None, - # 'ToolId': equipment_tool_id.code, - # 'ToolName': equipment_tool_id.functional_tool_name_id.name, - # 'MaxLife': equipment_tool_id.life_value_max, - # 'UseLife': equipment_tool_id.used_value, - # 'AddDatetime': equipment_tool_id.tool_install_time, - # 'State': functional_tool_id.functional_tool_status, - # 'WarnDate': alarm_time if alarm_time else False - # } - # data.append(equipment_tool) - # res['Datas'].append({ - # 'DeviceId': item.name, - # 'Data': data - # }) - # except Exception as e: - # res = {'Succeed': False, 'ErrorCode': 202, 'Error': e} - # logging.info('get_equipment_tool_Info error:%s' % e) - # return json.JSONEncoder().encode(res) - @http.route('/AutoDeviceApi/ToolGroup', type='json', auth='none', methods=['GET', 'POST'], csrf=False, cors="*") def get_functional_tool_groups_Info(self, **kw): diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index a4e374c6..8fad0b08 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -692,6 +692,15 @@ class CAMWorkOrderProgramKnifePlan(models.Model): names = categories._search([], order=order, access_rights_uid=SUPERUSER_ID) return categories.browse(names) + @api.onchange('plan_execute_status') + def _onchange_plan_execute_status(self): + for record in self: + if record.plan_execute_status == '已完成': + self.env['sf.cnc.processing'].register_cnc_processing(record) + + def knife_plan_cnc_processing(self): + self.env['sf.cnc.processing'].register_cnc_processing(self) + def apply_for_tooling(self): """ 申请装刀 @@ -757,13 +766,12 @@ class CAMWorkOrderProgramKnifePlan(models.Model): if functional_tools: for functional_tool in functional_tools: if functional_tool.on_tool_stock_num == 0: - # self.env['sf.cnc.processing'].register_cnc_processing(cnc_processing) if functional_tool.tool_stock_num == 0 and functional_tool.side_shelf_num == 0: status = True else: status = True if status: - self.env['sf.cam.work.order.program.knife.plan'].sudo().create({ + knife_plan = self.env['sf.cam.work.order.program.knife.plan'].sudo().create({ 'name': cnc_processing.workorder_id.production_id.name, 'cam_procedure_code': cnc_processing.program_name, 'filename': cnc_processing.cnc_id.name, @@ -778,6 +786,8 @@ class CAMWorkOrderProgramKnifePlan(models.Model): 'shank_model': cnc_processing.cutting_tool_handle_type, 'estimated_processing_time': cnc_processing.estimated_processing_time, }) + # 创建装刀请求 + knife_plan.apply_for_tooling() class FunctionalToolAssembly(models.Model): diff --git a/sf_tool_management/models/maintenance_equipment.py b/sf_tool_management/models/maintenance_equipment.py index 3c1eec9e..9f3cefba 100644 --- a/sf_tool_management/models/maintenance_equipment.py +++ b/sf_tool_management/models/maintenance_equipment.py @@ -1,5 +1,6 @@ import json import requests +import logging from odoo import models, api, fields from odoo.exceptions import ValidationError from odoo.addons.sf_base.commons.common import Common @@ -21,6 +22,10 @@ class SfMaintenanceEquipmentTool(models.Model): used_value = fields.Integer('已使用值(min)', related='functional_tool_name_id.used_value') tool_install_time = fields.Datetime('机内装刀时间') + # def write_tool(self, datas): + # if datas: + # print(datas) + @api.model_create_multi def create(self, vals_list): tools = super().create(vals_list) @@ -38,23 +43,52 @@ class SfMaintenanceEquipment(models.Model): # ==========机床当前刀库实时信息接口========== def register_equipment_tool(self): - sf_sync_config = self.env['res.config.settings'].get_values() - token = sf_sync_config['token'] - sf_secret_key = sf_sync_config['sf_secret_key'] - headers = Common.get_headers(self, token, sf_secret_key) - strurl = "https://x24467i973.zicp.fun/AutoDeviceApi/GetToolInfos" - val = { - "DeviceId": self.name - } - kw = json.dumps(val, ensure_ascii=False) - r = requests.get(strurl, json={}, data={'kw': kw, 'token': token}, headers=headers) + # sf_sync_config = self.env['res.config.settings'].get_values() + # token = sf_sync_config['token'] + # sf_secret_key = sf_sync_config['sf_secret_key'] + # headers = Common.get_headers(self, token, sf_secret_key) + headers = {'Authorization': 'Ba F2CF5DCC-1A00-4234-9E95-65603F70CC8A'} + crea_url = "https://x24467i973.zicp.fun/AutoDeviceApi/GetToolInfos" + params = {"DeviceId": self.name} + r = requests.get(crea_url, params=params, headers=headers) ret = r.json() - print(ret) - if r == 200: + logging.info('register_equipment_tool:%s' % ret) + datas = ret['Datas'] + self.write_maintenance_equipment_tool(datas) + if ret['Succeed']: return "机床当前刀库实时信息指令发送成功" else: raise ValidationError("机床当前刀库实时信息指令发送失败") + def write_maintenance_equipment_tool(self, datas): + if datas: + for data in datas: + maintenance_equipment_id = self.search([('name', '=', data['DeviceId'])]) + if maintenance_equipment_id: + equipment_tool_id = self.env['maintenance.equipment.tool'].sudo().search( + [('equipment_id', '=', maintenance_equipment_id.id), ('code', '=', data['ToolId'])]) + functional_tool_id = self.env['sf.functional.cutting.tool.entity'].sudo().search( + [('rfid', '=', data['RfidCode'])]) + time = None + if data['AddDatetime']: + datatime = str(data['AddDatetime']) + time = fields.Datetime.from_string(datatime[0:10] + ' ' + datatime[11:19]) + if equipment_tool_id and functional_tool_id: + tool_install_time = {'Nomal': '正常', 'Warning': '报警'} + equipment_tool_id.write({ + 'functional_tool_name_id': functional_tool_id.id, + 'tool_install_time': time + }) + functional_tool_id.write({ + 'max_lifetime_value': data['MaxLife'], + 'used_value': data['UseLife'], + 'functional_tool_status': tool_install_time.get(data['State']) + }) + else: + raise ValidationError('获取的【%s】设备不存在!!!' % data['DeviceId']) + else: + raise ValidationError('没有获取到刀具库信息!!!') + class StockLot(models.Model): _inherit = 'stock.lot' diff --git a/sf_tool_management/models/mrp_workorder.py b/sf_tool_management/models/mrp_workorder.py index 9bb638e7..df9a341e 100644 --- a/sf_tool_management/models/mrp_workorder.py +++ b/sf_tool_management/models/mrp_workorder.py @@ -1,5 +1,6 @@ import json import requests +import logging from odoo import fields, models, api from odoo.exceptions import ValidationError from odoo.addons.sf_base.commons.common import Common @@ -10,21 +11,22 @@ class CNCprocessing(models.Model): _description = 'CNC加工用刀检测' # ==========MES装刀指令接口========== - def register_cnc_processing(self, cnc_processing): - sf_sync_config = self.env['res.config.settings'].get_values() - token = sf_sync_config['token'] - sf_secret_key = sf_sync_config['sf_secret_key'] - headers = Common.get_headers(self, token, sf_secret_key) + def register_cnc_processing(self, knife_plan): + # sf_sync_config = self.env['res.config.settings'].get_values() + # token = sf_sync_config['token'] + # sf_secret_key = sf_sync_config['sf_secret_key'] + # headers = Common.get_headers(self, token, sf_secret_key) + headers = {'Authorization': 'Ba F2CF5DCC-1A00-4234-9E95-65603F70CC8A'} strurl = "https://x24467i973.zicp.fun/AutoDeviceApi/ToolLoadInstruct" val = { - 'DeviceId': cnc_processing.workorder_id.machine_tool_name, - 'RfidCode': None, - 'ToolId': cnc_processing.cutting_tool_no + 'DeviceId': knife_plan.machine_table_name, + 'RfidCode': knife_plan.sf_functional_tool_assembly_id.rfid, + 'ToolId': int(knife_plan.cutter_spacing_code_id.code[1:]) } - kw = json.dumps(val, ensure_ascii=False) - r = requests.post(strurl, json={}, data={'kw': kw, 'token': token}, headers=headers) + r = requests.post(strurl, json=val, headers=headers) ret = r.json() - if r == 200: + logging.info('register_cnc_processing:%s' % ret) + if ret['Succeed']: return "MES装刀指令发送成功" else: raise ValidationError("MES装刀指令发送失败") diff --git a/sf_tool_management/views/sf_maintenance_equipment.xml b/sf_tool_management/views/sf_maintenance_equipment.xml index dbdafe1e..39a7d2c8 100644 --- a/sf_tool_management/views/sf_maintenance_equipment.xml +++ b/sf_tool_management/views/sf_maintenance_equipment.xml @@ -12,7 +12,7 @@