diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/PlasticBagPrinterService.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/PlasticBagPrinterService.kt index b8b6d8a..0ae1cdc 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/service/PlasticBagPrinterService.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/service/PlasticBagPrinterService.kt @@ -22,6 +22,9 @@ import java.io.PrintWriter import java.io.DataOutputStream import java.nio.charset.Charset +import java.io.BufferedReader +import java.io.InputStreamReader + // 1. Data class to store both the raw bytes and the width for XML injection data class BitmapResult(val bytes: ByteArray, val width: Int) @@ -270,4 +273,67 @@ open class PlasticBagPrinterService( } } + fun sendLaserTcpUpdateAndMark( + ip: String = "192.168.76.10", + port: Int = 45678, + textChannel3: String, // required – content for channel 3 + textChannel4: String, // required – content for channel 4 + text3ObjectName: String = "Text3", // EZCAD object name for channel 3 + text4ObjectName: String = "Text4" // EZCAD object name for channel 4 + ): Boolean { + var socket: Socket? = null + var writer: PrintWriter? = null + var reader: BufferedReader? = null + + try { + println("Han's Laser TCP: 正在連接 $ip:$port ...") + socket = Socket(ip, port).apply { + soTimeout = 8000 // 8秒超時,避免卡死 + } + + writer = PrintWriter(socket.getOutputStream(), true) + reader = BufferedReader(InputStreamReader(socket.getInputStream(), Charsets.UTF_8)) + + // Helper function: send command and check response + fun send(cmd: String): Boolean { + writer.println("$cmd\r\n") + writer.flush() + Thread.sleep(300) // give device time to process + + val resp = reader.readLine()?.trim() ?: "" + println("命令: $cmd → 回應: $resp") + return resp.startsWith("OK") + } + + // Update channel 3 text + val success3 = send("""E3_SetTextObject "$text3ObjectName" "$textChannel3"""") + + // Update channel 4 text + val success4 = send("""E3_SetTextObject "$text4ObjectName" "$textChannel4"""") + + // Trigger marking + val successMark = send("E3_StartMarking") + + val allSuccess = success3 && success4 && successMark + + if (allSuccess) { + println("Han's Laser: 更新並打標成功") + } else { + println("Han's Laser: 部分命令失敗") + } + + return allSuccess + + } catch (e: Exception) { + println("Han's Laser TCP 錯誤: ${e.message}") + e.printStackTrace() + return false + } finally { + reader?.close() + writer?.close() + socket?.close() + println("Han's Laser TCP 連接已關閉") + } + } + } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/jobOrder/web/PlasticBagPrinterController.kt b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/PlasticBagPrinterController.kt index 29cb031..c6fe1ed 100644 --- a/src/main/java/com/ffii/fpsms/modules/jobOrder/web/PlasticBagPrinterController.kt +++ b/src/main/java/com/ffii/fpsms/modules/jobOrder/web/PlasticBagPrinterController.kt @@ -3,6 +3,7 @@ package com.ffii.fpsms.modules.jobOrder.web import com.ffii.fpsms.modules.jobOrder.service.PlasticBagPrinterService import com.ffii.fpsms.modules.jobOrder.web.model.PrintRequest import com.ffii.fpsms.modules.jobOrder.web.model.LaserRequest +import com.ffii.fpsms.modules.jobOrder.web.model.Laser2Request import jakarta.servlet.http.HttpServletResponse import org.springframework.http.HttpHeaders import org.springframework.web.bind.annotation.* @@ -87,4 +88,29 @@ class PlasticBagPrinterController( } } + @PostMapping("/print-laser-tcp") + fun printLaserTcp(@RequestBody request: Laser2Request): ResponseEntity { + return try { + val success = plasticBagPrinterService.sendLaserTcpUpdateAndMark( + ip = request.printerIp, + port = request.printerPort.toInt(), + textChannel3 = request.textChannel3 + ?: throw IllegalArgumentException("缺少 textChannel3"), + textChannel4 = request.textChannel4 + ?: throw IllegalArgumentException("缺少 textChannel4"), + text3ObjectName = request.text3ObjectName ?: "Text3", + text4ObjectName = request.text4ObjectName ?: "Text4" + ) + + if (success) { + ResponseEntity.ok("Han's Laser TCP: 更新文字並觸發打標成功") + } else { + ResponseEntity.status(500) + .body("Han's Laser TCP: 部分或全部命令失敗,請檢查連接、物件名稱或 EZCAD TCP Server") + } + } catch (e: Exception) { + ResponseEntity.status(500).body("Laser TCP Error: ${e.message}") + } + } + } \ No newline at end of file