فهرست منبع

收银台功能 适配打印机 随时可能回退

liudongzhi 2 هفته پیش
والد
کامیت
fd3ae813f5

+ 21 - 0
alien-entity/src/main/java/shop/alien/entity/store/PrinterConfig.java

@@ -0,0 +1,21 @@
+package shop.alien.entity.store;
+
+import lombok.Data;
+
+@Data
+public class PrinterConfig {
+
+    private Integer id;
+    private String printerCode;
+    private String printerName;
+    private String brand;
+    private String connectType;
+    private String ip;
+    private Integer port;
+    private String comPort;
+    private Integer paperWidth;
+    private Integer enabled;
+    private String remark;
+
+
+}

+ 18 - 0
alien-entity/src/main/java/shop/alien/entity/store/Receipt.java

@@ -0,0 +1,18 @@
+package shop.alien.entity.store;
+
+import lombok.Data;
+
+@Data
+public class Receipt {
+
+
+
+    private String orderNo;
+    private String createTime;
+    private double totalAmount;
+    private String payType;
+
+
+
+
+}

+ 26 - 0
alien-store/pom.xml

@@ -42,6 +42,32 @@
             <artifactId>spring-boot-starter-jdbc</artifactId>
         </dependency>
 
+        <!-- 唯一需要的打印依赖 -->
+        <dependency>
+            <groupId>com.github.anastaciocintra</groupId>
+            <artifactId>escpos-coffee</artifactId>
+            <version>4.1.0</version>
+        </dependency>
+
+
+            <!-- ESC/POS 小票打印 -->
+            <dependency>
+                <groupId>com.github.anastaciocintra</groupId>
+                <artifactId>escpos-coffee</artifactId>
+                <version>4.1.0</version>
+            </dependency>
+
+            <!-- USB/串口通信 -->
+            <dependency>
+                <groupId>com.fazecast</groupId>
+                <artifactId>jSerialComm</artifactId>
+                <version>2.9.2</version>
+            </dependency>
+
+
+
+
+
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>

+ 11 - 0
alien-store/src/main/java/shop/alien/store/service/ReceiptPrinter.java

@@ -0,0 +1,11 @@
+package shop.alien.store.service;
+
+import shop.alien.entity.store.Receipt;
+
+public interface ReceiptPrinter {
+
+    /**
+     * 打印收银小票
+     */
+    void print(Receipt receipt) throws Exception;
+}

+ 66 - 0
alien-store/src/main/java/shop/alien/store/service/impl/NetworkReceiptPrinter.java

@@ -0,0 +1,66 @@
+package shop.alien.store.service.impl;
+
+import com.github.anastaciocintra.escpos.EscPos;
+import com.github.anastaciocintra.escpos.Style;
+import shop.alien.entity.store.Receipt;
+import shop.alien.store.service.ReceiptPrinter;
+import java.net.Socket;
+import java.io.OutputStream;
+import java.text.SimpleDateFormat;
+
+
+public class NetworkReceiptPrinter implements ReceiptPrinter {
+    private final String ip;
+    private final int port;
+
+    public NetworkReceiptPrinter(String ip, int port) {
+        this.ip = ip;
+        this.port = port;
+    }
+
+
+
+
+    @Override
+    public void print(Receipt receipt) throws Exception {
+        try (Socket socket = new Socket(ip, port);
+             OutputStream out = socket.getOutputStream()) {
+
+            EscPos escpos = new EscPos(out);
+            doPrint(escpos, receipt);
+
+            escpos.cut(EscPos.CutMode.FULL);
+            escpos.flush();
+        }
+             
+    }
+
+    private void doPrint(EscPos escpos, Receipt receipt) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+//        escpos.setAlign(Style.Align.CENTER)
+//                .setFontSize(Style.FontSize._2, Style.FontSize._2)
+//                .writeLn("XX便利店")
+//                .feed(1);
+//
+//        escpos.setFontSize(Style.FontSize._1, Style.FontSize._1)
+//                .setAlign(Style.Align.LEFT)
+//                .writeLn("单号:" + receipt.getOrderNo())
+//                .writeLn("时间:" + sdf.format(receipt.getCreateTime()))
+//                .writeLn("------------------------------");
+//
+//        for (ReceiptItem item : receipt.getItems()) {
+//            escpos.writeLn(item.getName() + " ×" + item.getQty());
+//            escpos.writeLn(String.format("          %s × %s = %s",
+//                    item.getPrice(), item.getQty(), item.getAmount()));
+//        }
+//
+//        escpos.writeLn("------------------------------")
+//                .setAlign(Style.Align.RIGHT)
+//                .writeLn("合计:" + receipt.getTotalAmount())
+//                .writeLn("支付:" + receipt.getPayType())
+//                .feed(3);
+    }
+
+
+}

+ 26 - 0
alien-store/src/main/java/shop/alien/store/util/PrinterFactory.java

@@ -0,0 +1,26 @@
+package shop.alien.store.util;
+
+import shop.alien.entity.store.PrinterConfig;
+import shop.alien.store.service.ReceiptPrinter;
+import shop.alien.store.service.impl.NetworkReceiptPrinter;
+
+
+public class PrinterFactory {
+
+
+
+    public static ReceiptPrinter getPrinter(PrinterConfig config) {
+        String type = config.getConnectType();
+
+        if ("NETWORK".equalsIgnoreCase(type)) {
+            return new NetworkReceiptPrinter(config.getIp(), config.getPort());
+        }
+
+//        if ("USB".equalsIgnoreCase(type) || "SERIAL".equalsIgnoreCase(type)) {
+//            return new SerialReceiptPrinter(config.getComPort());
+//        }
+
+        throw new RuntimeException("不支持的打印机类型:" + type);
+    }
+
+}