From 9e2091597bed6da0d65cdfb89a82205218b08e67 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Sat, 18 May 2024 11:54:23 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=B3=A8=E9=87=8Aaction=5Fapply=5Fin?= =?UTF-8?q?ventory()=E6=96=B9=E6=B3=95=EF=BC=9B2=E3=80=81=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=88=80=E5=85=B7=E5=AE=89=E5=85=A8=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0one2many=E7=B1=BB=E5=9E=8B=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=88=80=E5=85=B7=E5=BA=9F=E5=BC=83many2many=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E7=9A=84=E5=85=B3=E8=81=94=E5=AD=97=E6=AE=B5=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=EF=BC=8C=E5=B9=B6=E5=9C=A8?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E6=A8=A1=E5=9E=8B=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=8A=9F=E8=83=BD=E6=8C=89=E9=92=AE=E7=94=A8=E6=9D=A5?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E5=92=8C?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E7=9A=84=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E5=BA=93=E5=AD=98=EF=BC=9B3=E3=80=81?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A0=B9=E6=8D=AE=E5=BA=93=E5=AD=98=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E5=8A=9F=E8=83=BD=E5=88=80=E5=85=B7=E7=BB=84=E8=A3=85?= =?UTF-8?q?=E5=8D=95=E7=9A=84=E6=96=B9=E6=B3=95=E6=96=AD=E5=AE=9A=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=EF=BC=9B4=E3=80=81=E4=BC=98=E5=8C=96=E5=88=80?= =?UTF-8?q?=E5=85=B7=E6=B3=A8=E5=86=8C=E6=8E=A5=E5=8F=A3=E7=9A=84=E6=8A=A5?= =?UTF-8?q?=E9=94=99=E5=A4=84=E7=90=86=EF=BC=9B5=E3=80=81=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=BB=84=E8=A3=85=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/stock.py | 24 +- sf_tool_management/models/functional_tool.py | 62 +-- .../models/functional_tool_enroll.py | 400 +++++++++--------- .../views/functional_tool_views.xml | 13 +- sf_tool_management/wizard/wizard.py | 19 +- 5 files changed, 275 insertions(+), 243 deletions(-) diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index 39c0f4bf..39750c4f 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -715,15 +715,15 @@ class ReStockMove(models.Model): class ReStockQuant(models.Model): _inherit = 'stock.quant' - def action_apply_inventory(self): - inventory_diff_quantity = self.inventory_diff_quantity - super(ReStockQuant, self).action_apply_inventory() - if inventory_diff_quantity >= 1: - stock = self.env['stock.move'].search([('product_id', '=', self.product_id.id), ('is_inventory', '=', True), - ('reference', '=', '更新的产品数量'), ('state', '=', 'done')], - limit=1, order='id desc') - if self.product_id.categ_type == '夹具': - stock._register_fixture() - elif self.product_id.categ_type == '刀具': - stock._register_cutting_tool() - return True + # def action_apply_inventory(self): + # inventory_diff_quantity = self.inventory_diff_quantity + # super(ReStockQuant, self).action_apply_inventory() + # if inventory_diff_quantity >= 1: + # stock = self.env['stock.move'].search([('product_id', '=', self.product_id.id), ('is_inventory', '=', True), + # ('reference', '=', '更新的产品数量'), ('state', '=', 'done')], + # limit=1, order='id desc') + # if self.product_id.categ_type == '夹具': + # stock._register_fixture() + # elif self.product_id.categ_type == '刀具': + # stock._register_cutting_tool() + # return True diff --git a/sf_tool_management/models/functional_tool.py b/sf_tool_management/models/functional_tool.py index 88e8ea03..52565174 100644 --- a/sf_tool_management/models/functional_tool.py +++ b/sf_tool_management/models/functional_tool.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- +import logging + import re from datetime import timedelta from odoo import SUPERUSER_ID @@ -46,6 +48,16 @@ class FunctionalCuttingToolEntity(models.Model): active = fields.Boolean(string='已归档', default=True) + safe_inventory_id = fields.Many2one('sf.real.time.distribution.of.functional.tools', + string='功能刀具安全库存', readonly=True) + + def button_safe_inventory_id(self): + """更新功能刀具关联的安全库存记录""" + tool_is = self.search([]) + for item in tool_is: + item.safe_inventory_id = self.env['sf.real.time.distribution.of.functional.tools'].search( + [('functional_name_id', '=', item.tool_name_id.id)])[0] + @api.depends('barcode_id.quant_ids', 'functional_tool_status') def _compute_current_location_id(self): for record in self: @@ -136,13 +148,11 @@ class FunctionalCuttingToolEntity(models.Model): def _compute_maintenance_equipment_image(self): for record in self: if record.cutting_tool_integral_model_id: - print(record.cutting_tool_integral_model_id) record.sudo().suitable_machining_method_ids = record.cutting_tool_integral_model_id.suitable_machining_method_ids.ids record.sudo().blade_tip_characteristics_id = record.cutting_tool_integral_model_id.blade_tip_characteristics_id.id record.sudo().handle_type_id = record.cutting_tool_integral_model_id.handle_type_id.id record.sudo().cutting_direction_ids = record.cutting_tool_integral_model_id.cutting_direction_ids.ids record.sudo().suitable_coolant_ids = record.cutting_tool_integral_model_id.suitable_coolant_ids.ids - print(record.cutting_tool_integral_model_id.blade_tip_characteristics_id.ids) elif record.cutting_tool_blade_model_id: record.sudo().suitable_machining_method_ids = record.cutting_tool_blade_model_id.suitable_machining_method_ids.ids record.sudo().blade_tip_characteristics_id = record.cutting_tool_blade_model_id.blade_tip_characteristics_id.id @@ -340,28 +350,31 @@ class RealTimeDistributionOfFunctionalTools(models.Model): suitable_machining_method_ids = fields.Many2many( 'maintenance.equipment.image', 'rel_machining_product_template_distribution', '适合加工方式', domain=[('type', '=', '加工能力')], - related='sf_functional_cutting_tool_entity_ids.suitable_machining_method_ids') + related='sf_functional_tool_entity_ids.suitable_machining_method_ids') blade_tip_characteristics_id = fields.Many2one( 'maintenance.equipment.image', '刀尖特征', domain=[('type', '=', '刀尖特征')], - related='sf_functional_cutting_tool_entity_ids.blade_tip_characteristics_id') + related='sf_functional_tool_entity_ids.blade_tip_characteristics_id') handle_type_id = fields.Many2one( 'maintenance.equipment.image', '柄部类型', - domain=[('type', '=', '柄部类型')], related='sf_functional_cutting_tool_entity_ids.handle_type_id') + domain=[('type', '=', '柄部类型')], related='sf_functional_tool_entity_ids.handle_type_id') cutting_direction_ids = fields.Many2many( 'maintenance.equipment.image', 'rel_cutting_product_template_distribution', '走刀方向', - domain=[('type', '=', '走刀方向')], related='sf_functional_cutting_tool_entity_ids.cutting_direction_ids') + domain=[('type', '=', '走刀方向')], related='sf_functional_tool_entity_ids.cutting_direction_ids') suitable_coolant_ids = fields.Many2many( 'maintenance.equipment.image', 'rel_coolants_product_template_distribution', '适合冷却方式', - domain=[('type', '=', '冷却方式')], related='sf_functional_cutting_tool_entity_ids.suitable_coolant_ids') + domain=[('type', '=', '冷却方式')], related='sf_functional_tool_entity_ids.suitable_coolant_ids') sf_functional_cutting_tool_entity_ids = fields.Many2many('sf.functional.cutting.tool.entity', 'sf_functional_cutting_tool_entity_ref', - string='功能刀具列表信息', readonly=True) + string='功能刀具列表信息') sf_functional_tool_assembly_ids = fields.Many2many('sf.functional.tool.assembly', 'sf_functional_tool_assembly_ref', '功能刀具组装单', readonly=True) + sf_functional_tool_entity_ids = fields.One2many('sf.functional.cutting.tool.entity', 'safe_inventory_id', + string='功能刀具信息') + active = fields.Boolean(string='已归档', default=True) @api.onchange('functional_name_id') @@ -392,12 +405,11 @@ class RealTimeDistributionOfFunctionalTools(models.Model): mrs_cutting_tool_type_ids = categories._search([], order=order, access_rights_uid=SUPERUSER_ID) return categories.browse(mrs_cutting_tool_type_ids) - @api.depends('sf_functional_cutting_tool_entity_ids', 'min_stock_num', 'max_stock_num') + @api.depends('sf_functional_tool_entity_ids', 'min_stock_num', 'max_stock_num') def _compute_batch_replenishment_num(self): for tool in self: if tool: - # 判断功能刀具组装单是否已经完成 - tool.sudo().estimate_functional_tool_assembly_ids(tool) + # 计算刀具房数量、线边刀库数量、机内刀库数量 tool.sudo().get_stock_num(tool) # 计算当前库存量 tool.sudo().tool_stock_total = tool.tool_stock_num + tool.side_shelf_num + tool.on_tool_stock_num @@ -409,9 +421,10 @@ class RealTimeDistributionOfFunctionalTools(models.Model): 计算批次补货量 """ if tool.tool_stock_total < tool.min_stock_num: - tool.sudo().batch_replenishment_num = tool.max_stock_num - tool.tool_stock_total # 根据判断创建功能刀具组装单 - if not tool.sf_functional_tool_assembly_ids and re.match(r'^\d+$', str(tool.id)): + if not tool.sf_functional_tool_assembly_ids.filtered(lambda item: item.assemble_status == '0') and re.match( + r'^\d+$', str(tool.id)): + tool.sudo().batch_replenishment_num = tool.max_stock_num - tool.tool_stock_total for i in range(tool.batch_replenishment_num): tool.sudo().create_functional_tool_assembly(tool) print(i, ": ", tool.sf_functional_tool_assembly_ids) @@ -438,15 +451,6 @@ class RealTimeDistributionOfFunctionalTools(models.Model): }) tool.sudo().sf_functional_tool_assembly_ids = [(4, functional_tool_assembly.id)] - def estimate_functional_tool_assembly_ids(self, tool): - """ - 判断功能刀具组装单是否完成,如果全部完成清空sf_functional_tool_assembly_ids的数据 - """ - for sf_functional_tool_assembly_id in tool.sf_functional_tool_assembly_ids: - if sf_functional_tool_assembly_id.assemble_status == '0': - return False - tool.sudo().sf_functional_tool_assembly_ids = [] - def get_stock_num(self, tool): """ 计算刀具房数量、线边刀库数量、机内刀库数量 @@ -455,16 +459,20 @@ class RealTimeDistributionOfFunctionalTools(models.Model): tool.tool_stock_num = 0 tool.side_shelf_num = 0 tool.on_tool_stock_num = 0 - if tool.sf_functional_cutting_tool_entity_ids: - for cutting_tool in tool.sf_functional_cutting_tool_entity_ids: + if tool.sf_functional_tool_entity_ids: + for cutting_tool in tool.sf_functional_tool_entity_ids: if cutting_tool.tool_room_num > 0: tool.tool_stock_num += 1 elif cutting_tool.line_edge_knife_library_num > 0: tool.side_shelf_num += 1 elif cutting_tool.machine_knife_library_num > 0: tool.on_tool_stock_num += 1 + else: + tool.tool_stock_num = 0 + tool.side_shelf_num = 0 + tool.on_tool_stock_num = 0 - def create_or_edit_safety_stock(self, vals, sf_functional_cutting_tool_entity_ids): + def create_or_edit_safety_stock(self, vals, sf_functional_tool_entity_ids): """ 根据传入的信息新增或者更新功能刀具安全库存的信息 """ @@ -473,9 +481,9 @@ class RealTimeDistributionOfFunctionalTools(models.Model): [('functional_name_id', '=', vals['functional_name_id'])]) if len(record) > 0: for obj in record: - obj.write({'sf_functional_cutting_tool_entity_ids': [(4, sf_functional_cutting_tool_entity_ids.id)]}) + obj.write({'sf_functional_tool_entity_ids': [(4, sf_functional_tool_entity_ids.id)]}) else: - vals['sf_functional_cutting_tool_entity_ids'] = sf_functional_cutting_tool_entity_ids.ids + vals['sf_functional_tool_entity_ids'] = sf_functional_tool_entity_ids.ids self.env['sf.real.time.distribution.of.functional.tools'].create(vals) status_create = fields.Boolean('是否是新增状态', default=True) diff --git a/sf_tool_management/models/functional_tool_enroll.py b/sf_tool_management/models/functional_tool_enroll.py index 8a2a7965..0d076ddf 100644 --- a/sf_tool_management/models/functional_tool_enroll.py +++ b/sf_tool_management/models/functional_tool_enroll.py @@ -81,22 +81,25 @@ class StockLot(models.Model): def _get_sync_stock_lot(self, objs_all, str_url, token, headers): tool_material_stock_list = [] - if objs_all: - for item in objs_all: - val = { - 'name': item.name, - 'tool_material_status': item.tool_material_status, - 'location': [] if not item.quant_ids else item.quant_ids[-1].location_id.name, - 'tool_material_search_id': item.tool_material_search_id.id, - } - tool_material_stock_list.append(val) - kw = json.dumps(tool_material_stock_list, ensure_ascii=False) - r = requests.post(str_url, json={}, data={'kw': kw, 'token': token}, headers=headers) - ret = r.json() - if ret.get('code') == 200: - return '刀具物料序列号注册成功' - else: - logging.info("没有注册刀具物料序列号信息") + try: + if objs_all: + for item in objs_all: + val = { + 'name': item.name, + 'tool_material_status': item.tool_material_status, + 'location': [] if not item.quant_ids else item.quant_ids[-1].location_id.name, + 'tool_material_search_id': item.tool_material_search_id.id, + } + tool_material_stock_list.append(val) + kw = json.dumps(tool_material_stock_list, ensure_ascii=False) + r = requests.post(str_url, json={}, data={'kw': kw, 'token': token}, headers=headers) + ret = r.json() + if ret.get('code') == 200: + return '刀具物料序列号注册成功' + else: + logging.info("没有注册刀具物料序列号信息") + except Exception as e: + logging.info("捕获错误信息:%s" % e) class ToolMaterial(models.Model): @@ -127,28 +130,31 @@ class ToolMaterial(models.Model): def _get_sync_tool_material_search(self, objs_all, str_url, token, headers): tool_material_list = [] - if objs_all: - for item in objs_all: - val = { - 'name': item.name, - 'id': item.id, - 'cutting_tool_material_code': item.cutting_tool_material_id.code, - 'cutting_tool_standard_library_code': item.cutting_tool_standard_library_id.code, - 'specification_name': item.specification_id.name, - 'image': '' if not item.image else base64.b64encode(item.image).decode('utf-8'), - 'number': item.number, - 'usable_num': item.usable_num, - 'have_been_used_num': item.have_been_used_num, - 'scrap_num': item.scrap_num - } - tool_material_list.append(val) - kw = json.dumps(tool_material_list, ensure_ascii=False) - r = requests.post(str_url, json={}, data={'kw': kw, 'token': token}, headers=headers) - ret = r.json() - if ret.get('code') == 200: - return '刀具物料注册成功' - else: - logging.info('没有注册刀具物料信息') + try: + if objs_all: + for item in objs_all: + val = { + 'name': item.name, + 'id': item.id, + 'cutting_tool_material_code': item.cutting_tool_material_id.code, + 'cutting_tool_standard_library_code': item.cutting_tool_standard_library_id.code, + 'specification_name': item.specification_id.name, + 'image': '' if not item.image else base64.b64encode(item.image).decode('utf-8'), + 'number': item.number, + 'usable_num': item.usable_num, + 'have_been_used_num': item.have_been_used_num, + 'scrap_num': item.scrap_num + } + tool_material_list.append(val) + kw = json.dumps(tool_material_list, ensure_ascii=False) + r = requests.post(str_url, json={}, data={'kw': kw, 'token': token}, headers=headers) + ret = r.json() + if ret.get('code') == 200: + return '刀具物料注册成功' + else: + logging.info('没有注册刀具物料信息') + except Exception as e: + logging.info("捕获错误信息:%s" % e) @api.model_create_multi def create(self, vals_list): @@ -188,56 +194,59 @@ class FunctionalCuttingToolEntity(models.Model): def _get_sync_functional_cutting_tool_entity(self, objs_all, str_url, token, headers): functional_tool_list = [] - if objs_all: - for item in objs_all: - val = { - 'id': item.id, - 'code': item.code, - 'name': item.name, - 'rfid': item.rfid, - 'tool_groups_name': item.tool_groups_id.name, - 'barcode': item.barcode_id.name, - 'cutting_tool_type_code': item.sf_cutting_tool_type_id.code, - 'functional_tool_diameter': item.functional_tool_diameter, - 'knife_tip_r_angle': item.knife_tip_r_angle, - 'coarse_middle_thin': item.coarse_middle_thin, - 'new_former': item.new_former, - 'tool_loading_length': item.tool_loading_length, - 'functional_tool_length': item.functional_tool_length, - 'effective_length': item.effective_length, - 'max_lifetime_value': item.max_lifetime_value, - 'alarm_value': item.alarm_value, - 'used_value': item.used_value, - 'functional_tool_status': item.functional_tool_status, - 'current_location': item.current_location, - 'image': '' if not item.image else base64.b64encode(item.image).decode('utf-8'), - 'whether_standard_knife': item.whether_standard_knife, - 'L_D_number': item.L_D_number, - 'hiding_length': item.hiding_length, - 'cut_time': item.cut_time, - 'cut_length': item.cut_length, - 'cut_number': item.cut_number, - 'cutting_tool_integral_model_id': item.cutting_tool_integral_model_id.tool_material_id, - 'cutting_tool_blade_model_id': item.cutting_tool_blade_model_id.tool_material_id, - 'cutting_tool_cutterbar_model_id': item.cutting_tool_cutterbar_model_id.tool_material_id, - 'cutting_tool_cutterpad_model_id': item.cutting_tool_cutterpad_model_id.tool_material_id, - 'cutting_tool_cutterhandle_model_id': item.cutting_tool_cutterhandle_model_id.tool_material_id, - 'cutting_tool_cutterhead_model_id': item.cutting_tool_cutterhead_model_id.tool_material_id, - 'suitable_machining_method_names': get_suitable_machining_method_names(item), - 'blade_tip_characteristics_name': item.blade_tip_characteristics_id.name, - 'handle_type_name': item.handle_type_id.name, - 'cutting_direction_names': get_cutting_direction_names(item), - 'suitable_coolant_names': get_suitable_coolant_names(item), - 'active': item.active, - } - functional_tool_list.append(val) - kw = json.dumps(functional_tool_list, ensure_ascii=False) - r = requests.post(str_url, json={}, data={'kw': kw, 'token': token}, headers=headers) - ret = r.json() - if ret.get('code') == 200: - return "功能刀具注册成功" - else: - logging.info('没有注册功能刀具信息') + try: + if objs_all: + for item in objs_all: + val = { + 'id': item.id, + 'code': item.code, + 'name': item.name, + 'rfid': item.rfid, + 'tool_groups_name': item.tool_groups_id.name, + 'barcode': item.barcode_id.name, + 'cutting_tool_type_code': item.sf_cutting_tool_type_id.code, + 'functional_tool_diameter': item.functional_tool_diameter, + 'knife_tip_r_angle': item.knife_tip_r_angle, + 'coarse_middle_thin': item.coarse_middle_thin, + 'new_former': item.new_former, + 'tool_loading_length': item.tool_loading_length, + 'functional_tool_length': item.functional_tool_length, + 'effective_length': item.effective_length, + 'max_lifetime_value': item.max_lifetime_value, + 'alarm_value': item.alarm_value, + 'used_value': item.used_value, + 'functional_tool_status': item.functional_tool_status, + 'current_location': item.current_location, + 'image': '' if not item.image else base64.b64encode(item.image).decode('utf-8'), + 'whether_standard_knife': item.whether_standard_knife, + 'L_D_number': item.L_D_number, + 'hiding_length': item.hiding_length, + 'cut_time': item.cut_time, + 'cut_length': item.cut_length, + 'cut_number': item.cut_number, + 'cutting_tool_integral_model_id': item.cutting_tool_integral_model_id.tool_material_id, + 'cutting_tool_blade_model_id': item.cutting_tool_blade_model_id.tool_material_id, + 'cutting_tool_cutterbar_model_id': item.cutting_tool_cutterbar_model_id.tool_material_id, + 'cutting_tool_cutterpad_model_id': item.cutting_tool_cutterpad_model_id.tool_material_id, + 'cutting_tool_cutterhandle_model_id': item.cutting_tool_cutterhandle_model_id.tool_material_id, + 'cutting_tool_cutterhead_model_id': item.cutting_tool_cutterhead_model_id.tool_material_id, + 'suitable_machining_method_names': get_suitable_machining_method_names(item), + 'blade_tip_characteristics_name': item.blade_tip_characteristics_id.name, + 'handle_type_name': item.handle_type_id.name, + 'cutting_direction_names': get_cutting_direction_names(item), + 'suitable_coolant_names': get_suitable_coolant_names(item), + 'active': item.active, + } + functional_tool_list.append(val) + kw = json.dumps(functional_tool_list, ensure_ascii=False) + r = requests.post(str_url, json={}, data={'kw': kw, 'token': token}, headers=headers) + ret = r.json() + if ret.get('code') == 200: + return "功能刀具注册成功" + else: + logging.info('没有注册功能刀具信息') + except Exception as e: + logging.info("捕获错误信息:%s" % e) @api.model_create_multi def create(self, vals_list): @@ -283,42 +292,45 @@ class FunctionalToolWarning(models.Model): def get_sync_functional_tool_warning(self, objs_all, str_url, token, headers): tool_warning_list = [] - if objs_all: - for item in objs_all: - val = { - 'id': item.id, - 'name': item.name, - 'code': item.code, - 'rfid': item.rfid, - 'tool_groups_name': item.tool_groups_id.name, - 'production_line': item.production_line_id.name, - 'machine_tool_id': item.maintenance_equipment_id.code, - 'machine_tool_code': item.machine_tool_code, - 'cutter_spacing_code': item.cutter_spacing_code_id.code, - 'functional_tool_name': item.name, - 'barcode': item.barcode_id.name, - 'mrs_cutting_tool_type_code': item.mrs_cutting_tool_type_id.code, - 'diameter': item.diameter, - 'knife_tip_r_angle': item.knife_tip_r_angle, - 'install_tool_time': item.install_tool_time.strftime('%Y-%m-%d %H:%M:%S'), - 'on_board_time': item.on_board_time.strftime('%Y-%m-%d %H:%M:%S'), - 'max_lifetime_value': item.max_lifetime_value, - 'alarm_value': item.alarm_value, - 'used_value': item.used_value, - 'functional_tool_status': item.functional_tool_status, - 'alarm_time': item.alarm_time.strftime('%Y-%m-%d %H:%M:%S'), - 'dispose_user': item.dispose_user, - 'dispose_time': item.dispose_time, - 'dispose_func': item.dispose_func, - } - tool_warning_list.append(val) - kw = json.dumps(tool_warning_list, ensure_ascii=False) - r = requests.post(str_url, json={}, data={'kw': kw, 'token': token}, headers=headers) - ret = r.json() - if ret.get('code') == 200: - return "功能刀具预警注册成功" - else: - logging.info('没有注册功能刀具预警信息') + try: + if objs_all: + for item in objs_all: + val = { + 'id': item.id, + 'name': item.name, + 'code': item.code, + 'rfid': item.rfid, + 'tool_groups_name': item.tool_groups_id.name, + 'production_line': item.production_line_id.name, + 'machine_tool_id': item.maintenance_equipment_id.code, + 'machine_tool_code': item.machine_tool_code, + 'cutter_spacing_code': item.cutter_spacing_code_id.code, + 'functional_tool_name': item.name, + 'barcode': item.barcode_id.name, + 'mrs_cutting_tool_type_code': item.mrs_cutting_tool_type_id.code, + 'diameter': item.diameter, + 'knife_tip_r_angle': item.knife_tip_r_angle, + 'install_tool_time': item.install_tool_time.strftime('%Y-%m-%d %H:%M:%S'), + 'on_board_time': item.on_board_time.strftime('%Y-%m-%d %H:%M:%S'), + 'max_lifetime_value': item.max_lifetime_value, + 'alarm_value': item.alarm_value, + 'used_value': item.used_value, + 'functional_tool_status': item.functional_tool_status, + 'alarm_time': item.alarm_time.strftime('%Y-%m-%d %H:%M:%S'), + 'dispose_user': item.dispose_user, + 'dispose_time': item.dispose_time, + 'dispose_func': item.dispose_func, + } + tool_warning_list.append(val) + kw = json.dumps(tool_warning_list, ensure_ascii=False) + r = requests.post(str_url, json={}, data={'kw': kw, 'token': token}, headers=headers) + ret = r.json() + if ret.get('code') == 200: + return "功能刀具预警注册成功" + else: + logging.info('没有注册功能刀具预警信息') + except Exception as e: + logging.info("捕获错误信息:%s" % e) @api.model_create_multi def create(self, vals_list): @@ -358,33 +370,36 @@ class StockMoveLine(models.Model): def get_sync_stock_move_line(self, objs_all, str_url, token, headers): tool_stock_list = [] - if objs_all: - for item in objs_all: - val = { - 'id': item.id, - 'name': item.functional_tool_name, - 'code': item.code, - 'rfid': item.rfid, - 'tool_groups_name': item.tool_groups_id.name, - 'reference': item.reference, - 'barcode': item.lot_id.name, - 'functional_tool_type_code': item.functional_tool_type_id.code, - 'diameter': item.diameter, - 'knife_tip_r_angle': item.knife_tip_r_angle, - 'install_tool_time': item.install_tool_time.strftime('%Y-%m-%d %H:%M:%S'), - 'location_id': item.location_id.name, - 'location_dest_name': item.location_dest_id.name, - 'date': item.date.strftime('%Y-%m-%d %H:%M:%S'), - 'qty_done': item.qty_done, - } - tool_stock_list.append(val) - kw = json.dumps(tool_stock_list, ensure_ascii=False) - r = requests.post(str_url, json={}, data={'kw': kw, 'token': token}, headers=headers) - ret = r.json() - if ret.get('code') == 200: - return "功能刀具出入库记录注册成功" - else: - logging.info('没有注册功能刀具出入库记录信息') + try: + if objs_all: + for item in objs_all: + val = { + 'id': item.id, + 'name': item.functional_tool_name, + 'code': item.code, + 'rfid': item.rfid, + 'tool_groups_name': item.tool_groups_id.name, + 'reference': item.reference, + 'barcode': item.lot_id.name, + 'functional_tool_type_code': item.functional_tool_type_id.code, + 'diameter': item.diameter, + 'knife_tip_r_angle': item.knife_tip_r_angle, + 'install_tool_time': item.install_tool_time.strftime('%Y-%m-%d %H:%M:%S'), + 'location_id': item.location_id.name, + 'location_dest_name': item.location_dest_id.name, + 'date': item.date.strftime('%Y-%m-%d %H:%M:%S'), + 'qty_done': item.qty_done, + } + tool_stock_list.append(val) + kw = json.dumps(tool_stock_list, ensure_ascii=False) + r = requests.post(str_url, json={}, data={'kw': kw, 'token': token}, headers=headers) + ret = r.json() + if ret.get('code') == 200: + return "功能刀具出入库记录注册成功" + else: + logging.info('没有注册功能刀具出入库记录信息') + except Exception as e: + logging.info("捕获错误信息:%s" % e) @api.model_create_multi def create(self, vals_list): @@ -424,45 +439,48 @@ class RealTimeDistributionFunctionalTools(models.Model): def get_sync_real_time_distribution_functional_tools(self, objs_all, str_url, token, headers): tool_distribution_list = [] - if objs_all: - for item in objs_all: - functional_tool_codes = [] - for obj in item.sf_functional_cutting_tool_entity_ids: - functional_tool_codes.append(obj.code) - val = { - 'id': item.id, - 'name': item.name, - 'tool_groups_name': item.tool_groups_id.name, - 'cutting_tool_type_code': item.sf_cutting_tool_type_id.code, - 'diameter': item.diameter, - 'knife_tip_r_angle': item.knife_tip_r_angle, - 'tool_stock_num': item.tool_stock_num, - 'side_shelf_num': item.side_shelf_num, - 'on_tool_stock_num': item.on_tool_stock_num, - 'tool_stock_total': item.tool_stock_total, - 'min_stock_num': item.min_stock_num, - 'max_stock_num': item.max_stock_num, - 'batch_replenishment_num': item.batch_replenishment_num, - 'unit': item.unit, - 'image': '' if not item.image else base64.b64encode(item.image).decode('utf-8'), - 'functional_tool_codes': str(functional_tool_codes), - 'coarse_middle_thin': item.coarse_middle_thin, - 'whether_standard_knife': item.whether_standard_knife, - 'suitable_machining_method_names': get_suitable_machining_method_names(item), - 'blade_tip_characteristics_name': item.blade_tip_characteristics_id.name, - 'handle_type_name': item.handle_type_id.name, - 'cutting_direction_names': get_cutting_direction_names(item), - 'suitable_coolant_names': get_suitable_coolant_names(item), - 'active': item.active - } - tool_distribution_list.append(val) - kw = json.dumps(tool_distribution_list, ensure_ascii=False) - r = requests.post(str_url, json={}, data={'kw': kw, 'token': token}, headers=headers) - ret = r.json() - if ret.get('code') == 200: - return "功能刀具出入库记录注册成功" - else: - logging.info('没有注册功能刀具出入库记录信息') + try: + if objs_all: + for item in objs_all: + functional_tool_codes = [] + for obj in item.sf_functional_tool_entity_ids: + functional_tool_codes.append(obj.code) + val = { + 'id': item.id, + 'name': item.name, + 'tool_groups_name': item.tool_groups_id.name, + 'cutting_tool_type_code': item.sf_cutting_tool_type_id.code, + 'diameter': item.diameter, + 'knife_tip_r_angle': item.knife_tip_r_angle, + 'tool_stock_num': item.tool_stock_num, + 'side_shelf_num': item.side_shelf_num, + 'on_tool_stock_num': item.on_tool_stock_num, + 'tool_stock_total': item.tool_stock_total, + 'min_stock_num': item.min_stock_num, + 'max_stock_num': item.max_stock_num, + 'batch_replenishment_num': item.batch_replenishment_num, + 'unit': item.unit, + 'image': '' if not item.image else base64.b64encode(item.image).decode('utf-8'), + 'functional_tool_codes': str(functional_tool_codes), + 'coarse_middle_thin': item.coarse_middle_thin, + 'whether_standard_knife': item.whether_standard_knife, + 'suitable_machining_method_names': get_suitable_machining_method_names(item), + 'blade_tip_characteristics_name': item.blade_tip_characteristics_id.name, + 'handle_type_name': item.handle_type_id.name, + 'cutting_direction_names': get_cutting_direction_names(item), + 'suitable_coolant_names': get_suitable_coolant_names(item), + 'active': item.active + } + tool_distribution_list.append(val) + kw = json.dumps(tool_distribution_list, ensure_ascii=False) + r = requests.post(str_url, json={}, data={'kw': kw, 'token': token}, headers=headers) + ret = r.json() + if ret.get('code') == 200: + return "功能刀具出入库记录注册成功" + else: + logging.info('没有注册功能刀具出入库记录信息') + except Exception as e: + logging.info("捕获错误信息:%s" % e) @api.model_create_multi def create(self, vals_list): @@ -474,6 +492,6 @@ class RealTimeDistributionFunctionalTools(models.Model): def write(self, vals): res = super().write(vals) - if vals.get('sf_functional_cutting_tool_entity_ids') or vals.get('min_stock_num') or vals.get('max_stock_num'): + if vals.get('sf_functional_tool_entity_ids') or vals.get('min_stock_num') or vals.get('max_stock_num'): self.enroll_functional_tool_real_time_distribution() return res diff --git a/sf_tool_management/views/functional_tool_views.xml b/sf_tool_management/views/functional_tool_views.xml index 093ada1f..a982dca6 100644 --- a/sf_tool_management/views/functional_tool_views.xml +++ b/sf_tool_management/views/functional_tool_views.xml @@ -46,6 +46,8 @@
+