Browse Source

feat: 集成 mes-print 打印模块
- 添加 mes-print.jar 依赖库
- 主界面设置菜单新增"打印机设置"入口
- 创建 PrintHelper 工具类封装打印调用
- 支持 HP 打印机和 TSC 标签机

wangxichen 1 tuần trước cách đây
mục cha
commit
fc522d056c
4 tập tin đã thay đổi với 164 bổ sung0 xóa
  1. 1 0
      .classpath
  2. BIN
      lib/mes-print.jar
  3. 143 0
      src/com/mes/print/PrintHelper.java
  4. 20 0
      src/com/mes/ui/MesClient.java

+ 1 - 0
.classpath

@@ -28,4 +28,5 @@
 	<classpathentry kind="lib" path="lib/pdfbox-2.0.30.jar"/>
 	<classpathentry kind="lib" path="lib/fontbox-2.0.30.jar"/>
 	<classpathentry kind="lib" path="lib/commons-logging-1.2.jar"/>
+	<classpathentry kind="lib" path="lib/mes-print.jar"/>
 </classpath>

BIN
lib/mes-print.jar


+ 143 - 0
src/com/mes/print/PrintHelper.java

@@ -0,0 +1,143 @@
+package com.mes.print;
+
+import com.mes.print.Printer;
+import com.mes.print.PrinterException;
+import com.mes.print.model.FlowCardData;
+import com.mes.print.model.LabelData;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 打印辅助类:封装 mes-print 模块调用
+ *
+ * 根据 print.properties 配置的打印机类型自动选择打印方式:
+ * - hp: 打印流转卡
+ * - tsc: 打印标签
+ * - none: 不打印
+ */
+public class PrintHelper {
+
+    /**
+     * 打印流转卡(用于 HP 激光打印机)
+     *
+     * @param sn 产品序列号
+     * @param opNo 工位号(如 OP040A)
+     * @param batch 批次号
+     * @param operator 操作员
+     * @param remark 备注
+     * @return 是否打印成功
+     */
+    public static boolean printFlowCard(String sn, String opNo, String batch, String operator, String remark) {
+        try {
+            String type = Printer.getCurrentType();
+            if ("none".equals(type)) {
+                System.out.println("[打印] 当前配置为不打印,跳过流转卡打印");
+                return true;
+            }
+
+            if (!"hp".equals(type)) {
+                System.out.println("[打印] 当前打印机类型为 " + type + ",不支持流转卡打印");
+                return false;
+            }
+
+            FlowCardData data = new FlowCardData();
+            data.setSn(sn);
+            data.setProduct("+KB24"); // 产品型号,根据实际业务调整
+            data.setOpNo(opNo);
+            data.setBatch(batch != null ? batch : "");
+            data.setDate(new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()));
+            data.setOperator(operator != null ? operator : "");
+            data.setRemark(remark != null ? remark : "");
+
+            Printer.printFlowCard(data);
+            System.out.println("[打印] 流转卡打印成功: " + sn);
+            return true;
+
+        } catch (PrinterException e) {
+            System.err.println("[打印] 流转卡打印失败: " + e.getMessage());
+            e.printStackTrace();
+            return false;
+        } catch (Exception e) {
+            System.err.println("[打印] 流转卡打印异常: " + e.getMessage());
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 打印标签(用于 TSC 热敏标签机)
+     *
+     * @param sn 产品序列号
+     * @param barcode 条码内容
+     * @param qrcode 二维码内容
+     * @param title 标题
+     * @param copies 打印份数
+     * @return 是否打印成功
+     */
+    public static boolean printLabel(String sn, String barcode, String qrcode, String title, int copies) {
+        try {
+            String type = Printer.getCurrentType();
+            if ("none".equals(type)) {
+                System.out.println("[打印] 当前配置为不打印,跳过标签打印");
+                return true;
+            }
+
+            if (!"tsc".equals(type)) {
+                System.out.println("[打印] 当前打印机类型为 " + type + ",不支持标签打印");
+                return false;
+            }
+
+            LabelData data = new LabelData();
+            data.setSn(sn);
+            data.setBarcode(barcode != null ? barcode : sn);
+            data.setQrcode(qrcode != null ? qrcode : sn);
+            data.setTitle(title != null ? title : "产品标签");
+            data.setCopies(copies > 0 ? copies : 1);
+
+            Printer.printLabel(data);
+            System.out.println("[打印] 标签打印成功: " + sn);
+            return true;
+
+        } catch (PrinterException e) {
+            System.err.println("[打印] 标签打印失败: " + e.getMessage());
+            e.printStackTrace();
+            return false;
+        } catch (Exception e) {
+            System.err.println("[打印] 标签打印异常: " + e.getMessage());
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 根据当前配置的打印机类型自动打印
+     *
+     * @param sn 产品序列号
+     * @param opNo 工位号
+     * @param operator 操作员
+     * @return 是否打印成功
+     */
+    public static boolean autoPrint(String sn, String opNo, String operator) {
+        try {
+            String type = Printer.getCurrentType();
+
+            if ("none".equals(type)) {
+                System.out.println("[打印] 当前配置为不打印,跳过");
+                return true;
+            } else if ("hp".equals(type)) {
+                return printFlowCard(sn, opNo, "", operator, "");
+            } else if ("tsc".equals(type)) {
+                return printLabel(sn, sn, sn, "产品标签", 1);
+            } else {
+                System.err.println("[打印] 未知的打印机类型: " + type);
+                return false;
+            }
+
+        } catch (Exception e) {
+            System.err.println("[打印] 自动打印失败: " + e.getMessage());
+            e.printStackTrace();
+            return false;
+        }
+    }
+}

+ 20 - 0
src/com/mes/ui/MesClient.java

@@ -714,6 +714,26 @@ public class MesClient extends JFrame {
         });
         settingMenu.add(resetTcpMenu_1);
 
+        // 打印机设置菜单
+        JMenuItem printerSettingMenu = new JMenuItem("打印机设置");
+        printerSettingMenu.setIcon(new ImageIcon(MesClient.class.getResource("/bg/reset_logo.png")));
+        printerSettingMenu.setFont(new Font("微软雅黑", Font.PLAIN, 20));
+        printerSettingMenu.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mousePressed(MouseEvent e) {
+                super.mouseClicked(e);
+                try {
+                    new com.mes.print.ui.PrinterSettingDialog(mesClientFrame).setVisible(true);
+                } catch (Exception ex) {
+                    JOptionPane.showMessageDialog(mesClientFrame,
+                        "打开打印机设置失败: " + ex.getMessage(),
+                        "错误",
+                        JOptionPane.ERROR_MESSAGE);
+                }
+            }
+        });
+        settingMenu.add(printerSettingMenu);
+
         contentPane = new JPanel();
         contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
         setContentPane(contentPane);