diff --git a/sf_maintenance/models/__init__.py b/sf_maintenance/models/__init__.py index 4e925ec6..b177eb3c 100644 --- a/sf_maintenance/models/__init__.py +++ b/sf_maintenance/models/__init__.py @@ -4,4 +4,3 @@ from . import sf_maintenance_oee from . import sf_maintenance_logs from . import sf_equipment_maintenance_standards from . import sf_maintenance_requests -from . import maintenance_printer diff --git a/sf_maintenance/models/maintenance_printer.py b/sf_maintenance/models/maintenance_printer.py deleted file mode 100644 index b2c251aa..00000000 --- a/sf_maintenance/models/maintenance_printer.py +++ /dev/null @@ -1,92 +0,0 @@ -import qrcode -import base64 -from io import BytesIO -from odoo import models, fields, api - -class MaintenanceEquipment(models.Model): - _name = 'maintenance.equipment' - _inherit = ['maintenance.equipment', 'printing.utils'] - - qr_code_image = fields.Binary(string='二维码', compute='_generate_qr_code') - - @api.depends('name') - def _generate_qr_code(self): - for record in self: - # Generate QR code - qr = qrcode.QRCode( - version=1, - error_correction=qrcode.constants.ERROR_CORRECT_L, - box_size=10, - border=4, - ) - qr.add_data(record.name) - qr.make(fit=True) - qr_image = qr.make_image(fill_color="black", back_color="white") - - # Encode the image data in base64 - image_stream = BytesIO() - qr_image.save(image_stream, format="PNG") - encoded_image = base64.b64encode(image_stream.getvalue()) - - record.qr_code_image = encoded_image - - def print_single_method(self): - - print('self.name========== %s' % self.name) - self.ensure_one() - qr_code_data = self.qr_code_image - if not qr_code_data: - raise UserError("没有找到二维码数据。") - maintenance_equipment_name = self.name - # host = "192.168.50.110" # 可以根据实际情况修改 - # port = 9100 # 可以根据实际情况修改 - - # 获取默认打印机配置 - printer_config = self.env['printer.configuration'].sudo().search([('model', '=', self._name)], limit=1) - if not printer_config: - raise UserError('请先配置打印机') - host = printer_config.printer_id.ip_address - port = printer_config.printer_id.port - self.print_qr_code(maintenance_equipment_name, host, port) - - - def generate_zpl_code(self, code): - """生成ZPL代码用于打印二维码标签 - Args: - code: 需要编码的内容 - Returns: - str: ZPL指令字符串 - """ - zpl_code = "^XA\n" # 开始ZPL格式 - - # 设置打印参数 - zpl_code += "^LH0,0\n" # 设置标签起始位置 - zpl_code += "^CI28\n" # 设置中文编码 - zpl_code += "^PW400\n" # 设置打印宽度为400点 - zpl_code += "^LL300\n" # 设置标签长度为300点 - - # 打印标题 - zpl_code += "^FO10,20\n" # 设置标题位置 - zpl_code += "^A0N,30,30\n" # 设置字体大小 - zpl_code += "^FD机床二维码^FS\n" # 打印标题文本 - - # 打印二维码 - zpl_code += "^FO50,60\n" # 设置二维码位置 - zpl_code += f"^BQN,2,8\n" # 设置二维码参数:模式2,放大倍数8 - zpl_code += f"^FDLA,{code}^FS\n" # 二维码内容 - - # 打印编码文本 - zpl_code += "^FO50,220\n" # 设置编码文本位置 - zpl_code += "^A0N,25,25\n" # 设置字体大小 - zpl_code += f"^FD编码: {code}^FS\n" # 打印编码文本 - - # 打印日期 - zpl_code += "^FO50,260\n" - zpl_code += "^A0N,20,20\n" - zpl_code += f"^FD打印日期: {fields.Date.today()}^FS\n" - - zpl_code += "^PQ1\n" # 打印1份 - zpl_code += "^XZ\n" # 结束ZPL格式 - - return zpl_code - diff --git a/sf_maintenance/models/sf_maintenance.py b/sf_maintenance/models/sf_maintenance.py index b7c38916..10b86ef1 100644 --- a/sf_maintenance/models/sf_maintenance.py +++ b/sf_maintenance/models/sf_maintenance.py @@ -34,7 +34,8 @@ class SfMaintenanceEquipmentAGVLog(models.Model): class SfMaintenanceEquipment(models.Model): - _inherit = 'maintenance.equipment' + _name = 'maintenance.equipment' + _inherit = ['maintenance.equipment', 'printing.utils'] _description = '设备' crea_url = "/api/machine_tool/create" @@ -831,6 +832,89 @@ class SfMaintenanceEquipment(models.Model): ftp_username = fields.Char('FTP 用户名') ftp_password = fields.Char('FTP 密码') + qr_code_image = fields.Binary(string='二维码', compute='_generate_qr_code') + + @api.depends('name') + def _generate_qr_code(self): + for record in self: + # Generate QR code + qr = qrcode.QRCode( + version=1, + error_correction=qrcode.constants.ERROR_CORRECT_L, + box_size=10, + border=4, + ) + qr.add_data(record.name) + qr.make(fit=True) + qr_image = qr.make_image(fill_color="black", back_color="white") + + # Encode the image data in base64 + image_stream = BytesIO() + qr_image.save(image_stream, format="PNG") + encoded_image = base64.b64encode(image_stream.getvalue()) + + record.qr_code_image = encoded_image + + def print_single_method(self): + + print('self.name========== %s' % self.name) + self.ensure_one() + qr_code_data = self.qr_code_image + if not qr_code_data: + raise UserError("没有找到二维码数据。") + maintenance_equipment_name = self.name + # host = "192.168.50.110" # 可以根据实际情况修改 + # port = 9100 # 可以根据实际情况修改 + + # 获取默认打印机配置 + printer_config = self.env['printer.configuration'].sudo().search([('model', '=', self._name)], limit=1) + if not printer_config: + raise UserError('请先配置打印机') + host = printer_config.printer_id.ip_address + port = printer_config.printer_id.port + self.print_qr_code(maintenance_equipment_name, host, port) + + + def generate_zpl_code(self, code): + """生成ZPL代码用于打印二维码标签 + Args: + code: 需要编码的内容 + Returns: + str: ZPL指令字符串 + """ + zpl_code = "^XA\n" # 开始ZPL格式 + + # 设置打印参数 + zpl_code += "^LH0,0\n" # 设置标签起始位置 + zpl_code += "^CI28\n" # 设置中文编码 + zpl_code += "^PW400\n" # 设置打印宽度为400点 + zpl_code += "^LL300\n" # 设置标签长度为300点 + + # 打印标题 + zpl_code += "^FO10,20\n" # 设置标题位置 + zpl_code += "^A0N,30,30\n" # 设置字体大小 + zpl_code += "^FD机床二维码^FS\n" # 打印标题文本 + + # 打印二维码 + zpl_code += "^FO50,60\n" # 设置二维码位置 + zpl_code += f"^BQN,2,8\n" # 设置二维码参数:模式2,放大倍数8 + zpl_code += f"^FDLA,{code}^FS\n" # 二维码内容 + + # 打印编码文本 + zpl_code += "^FO50,220\n" # 设置编码文本位置 + zpl_code += "^A0N,25,25\n" # 设置字体大小 + zpl_code += f"^FD编码: {code}^FS\n" # 打印编码文本 + + # 打印日期 + zpl_code += "^FO50,260\n" + zpl_code += "^A0N,20,20\n" + zpl_code += f"^FD打印日期: {fields.Date.today()}^FS\n" + + zpl_code += "^PQ1\n" # 打印1份 + zpl_code += "^XZ\n" # 结束ZPL格式 + + return zpl_code + class SfRobotAxisNum(models.Model): _name = 'sf.robot.axis.num'