我有一个送货服务网络,客户从网站下订单,在餐厅里,用户通过自动打印订单的票来接收订单。顾客下单后,必须在餐厅自动打印门票。在使用 XAMPP 的本地主机中,我可以很好地打印票证,但问题是如何从主机打印。
我创建了使用 CRON 作业运行的下一个代码,但到目前为止票证还没有打印出来。我每 1 分钟执行一次这个 Cron。我还在计算机上配置了打印机,启用了共享打印机选项。
这是 cron 作业的代码:
include_once "../../../app/config.inc.php";
include_once "../../../app/Connection.php";
class PrintTickets
{
public static function CheckOrderToPrint ($connection, $status)
{
$category = [];
if (isset($connection)) {
try {
$sql = "SELECT * FROM orders WHERE status =:status ORDER BY id ASC";
$sentence = $connection ->prepare($sql);
$sentence -> bindParam (':status', $status, PDO::PARAM_STR);
$sentence -> execute();
$result = $sentence -> fetch();
if (!empty($result)) {
$category = [$result['id'],
$result['id_preOrder'],
$result['total_amount'],
$result['discount'],
$result['liefergenbuhr'],
$result['gesamtbetrag'],
$result['order_number'],
$result['status']];
}
} catch (PDOException $ex) {
print 'ERROR' . $ex -> getMessage();
}
}
return $category;
}
public static function CheckPreOrderToPrint ($connection, $id)
{
$category = [];
if (isset($connection)) {
try {
$sql = "SELECT * FROM pre_order WHERE id =:id";
$sentence = $connection ->prepare($sql);
$sentence -> bindParam (':id', $id, PDO::PARAM_INT);
$sentence -> execute();
$result = $sentence -> fetch();
if (!empty($result)) {
$category = [$result['id'],
$result['order_num'],
$result['address'],
$result['zip_code'],
$result['other_field'],
$result['type_order'],
$result['status']];
}
} catch (PDOException $ex) {
print 'ERROR' . $ex -> getMessage();
}
}
return $category;
}
public static function CheckOrderDetailsToPrint($connection, $id)
{
$category = [];
if (isset($connection)) {
try {
$sql = "SELECT * FROM order_details WHERE id_order = :id_order";
$sentence = $connection ->prepare($sql);
$sentence -> bindParam (':id_order', $id, PDO::PARAM_INT);
$sentence -> execute();
$result = $sentence -> fetchAll();
if (count($result)) {
foreach ($result as $row)
{
$category[] = [$row['id'], $row['id_order'], $row['id_dish'], $row['quantity']];
}
}
} catch (PDOException $ex) {
print 'ERROR' . $ex -> getMessage();
}
}
return $category;
}
public static function CheckOrderDishesToPrint($connection, $id)
{
$category = [];
if (isset($connection)) {
try {
$sql = "SELECT p.*, c.name AS category FROM products p INNER JOIN category c ON p.id_category = c.id WHERE p.id = :id";
$sentence = $connection ->prepare($sql);
$sentence -> bindParam (':id', $id, PDO::PARAM_INT);
$sentence -> execute();
$result = $sentence -> fetch();
if (!empty($result)) {
//foreach ($result as $row) {
$category[] = [$result['id'],
$result['id_category'],
$result['name'],
$result['ingredients'],
$result['price'],
$result['status'],
$result['category']];
//}
}
} catch (PDOException $ex) {
print 'ERROR' . $ex -> getMessage();
}
}
return $category;
}
public static function UpdateOrdersPrint ($connection, $id, $status) {
$preOrder_saved = false;
$lastId = 0;
if (isset($connection)) {
try {
$sql = "UPDATE orders SET status = :status WHERE id = :id";
$sentence = $connection -> prepare($sql);
$sentence -> bindParam (':id', $id, PDO::PARAM_INT);
$sentence -> bindParam (':status', $status, PDO::PARAM_STR);
$preOrder_saved = $sentence -> execute();
$lastId = $connection->lastInsertId();
} catch (PDOException $ex) {
print 'ERROR' . $ex -> getMessage();
}
}
return $lastId;
}
public static function GlobalGetGeneral($connection, $id)
{
$orders = null;
if (isset($connection)) {
try {
$sql = "SELECT * FROM global_setting WHERE id = :id";
$sentence = $connection ->prepare($sql);
$sentence -> bindParam(':id', $id, PDO::PARAM_INT);
$sentence -> execute();
$result = $sentence -> fetch();
if (!empty($result))
{
$orders = [$result['id'], $result['discount'], $result['rest_name'], $result['coin'], $result['address'], $result['phone'], $result['email']];
}
} catch (PDOException $ex) {
print 'ERROR' . $ex -> getMessage();
}
}
return $orders;
}
public static function GetCustomerOrders($connection, $pre_order_Id) {
$orders = null;
if (isset($connection)) {
try {
$sql = "SELECT * FROM costumers WHERE pre_order_Id = :pre_order_Id";
$sentence = $connection ->prepare($sql);
$sentence -> bindParam(':pre_order_Id', $pre_order_Id, PDO::PARAM_INT);
$sentence -> execute();
$result = $sentence -> fetch();
if (!empty($result))
{
$orders = [$result['id'], $result['first_name'], $result['last_name'], $result['firma'], $result['address'], $result['zip_code'], $result['zip_code2'], $result['zip_address'], $result['telephone'], $result['email'], $result['etage'], $result['nachricht'], $result['pre_order_Id']];
}
} catch (PDOException $ex) {
print 'ERROR' . $ex -> getMessage();
}
}
return $orders;
}
}
Connection::open_db();
$status = "Processed";
$poststatus = "Finished";
$Result = PrintTickets::CheckOrderToPrint(Connection::GetConnection(), $status);
if($Result)
{
$orderNum = $Result[0];
$Result2 = PrintTickets::GlobalGetGeneral(Connection::GetConnection(), 1);
$restaurent = $Result2[2];
$adresse = $Result2[4];
$celphone = $Result2[5];
$email = $Result2[6];
$coin = $Result2[3];
$IDRest = "YG84784FOSJD-00";
$Result3 = PrintTickets::GetCustomerOrders(Connection::GetConnection(), $Result[1]);
$name = $Result3[1] ." ". $Result3[2];
$telefone = $Result3[8];
$emailCos = $Result3[9];
$ID_Client = $Result3[10];
$Result4 = PrintTickets::CheckPreOrderToPrint(Connection::GetConnection(), $Result[1]);
$type_orders = $Result4[5];
if ($type_orders == "TAKE_OVER")
{
$type_orders = "TAKE OVER";
}
else if ($type_orders == "DELIVERY")
{
$type_orders = "DELIVERY";
}
$dish_details = "";
$Result6 = PrintTickets::CheckOrderDetailsToPrint(Connection::GetConnection(), $Result[0]);
//
//print_r($Result6);
$total = $Result[2];
for ($i=0; $i < count($Result6); $i++)
{
$price = 0;
$Result5 = PrintTickets::CheckOrderDishesToPrint(Connection::GetConnection(), $Result6[$i][2]);
//print_r($Result5);
for ($j=0; $j < $Result6[$i][3]; $j++)
{
$price = ($price + $Result5[0][4]);
}
$dish_details = $dish_details . "<tr><td>".$Result6[$i][3]."</td><td>".$Result5[0][6]. " " . $Result5[0][2]."</td><td align='right'>".$price."</td></tr>";
}
include_once "windows-usb.php";
$Result7 = PrintTickets::UpdateOrdersPrint(Connection::GetConnection(), $Result[0], $poststatus);
}
else
{
echo "nothing yet";
}
Connection::close_db();
这是 windows-usb.php 文件:
/* Change to the correct path if you copy this example! */
require __DIR__ . '/../../autoload.php';
use Mike42\Escpos\Printer;
use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;
/**
* Install the printer using USB printing support, and the "Generic / Text Only" driver,
* then share it (you can use a firewall so that it can only be seen locally).
*
* Use a WindowsPrintConnector with the share name to print.
*
* Troubleshooting: Fire up a command prompt, and ensure that (if your printer is shared as
* "Receipt Printer), the following commands work:
*
* echo "Hello World" > testfile
* copy testfile "\\%COMPUTERNAME%\Receipt Printer"
* del testfile
*/
try {
// Enter the share name for your USB printer here
//$connector = null;
$connector = new WindowsPrintConnector("HP Photosmart C4400 series2");
/* Print a "Hello world" receipt" */
$printer = new Printer($connector);
$printer -> text("<table border='0' align='center' width='385px'><tr><td align='center'>.::<strong> ". $restaurent ." </strong>::.\n ". $celphone ." - ID: ". $IDRest ."</td></tr><tr><td align='center'>Date/Time:" . date('d-m-Y H:i:s') . "</td></tr><tr><td align='left'></td></tr><tr><td>Client: ".$name."</td></tr><tr><td>ID Client: ".$ID_Client."</td></tr><tr><td>Order Nº: ".$orderNum."</td></tr><tr><td colspan='3' align='left'>Type of Order: ".$type_orders."</td></tr></table>\n"."<table border='0' align='center' width='300px'><tr><td><span id='cantDragg'>QUANTITY.</span></td><td><span id='descripDragg'>DETAILS</span></td><td align='right'><span id='importDragg'>TOTAL</span></td></tr><tr><td colspan='3'>==========================================</td></tr>"."<tr><td>Here Quantity</td><td>Here Dish Name</td><td align='right'>Here price</td></tr><tr><td>2</td><td>Pizza 4 cheese</td><td align='right'>330 CHF</td></tr><tr><td> </td><td align='right'><b>TOTAL:</b></td><td align='right'><b>360 CHF</b></td></tr><tr><td colspan='3'>Nº of Dishes: 2</td></tr><tr><td colspan='3'> </td></tr><tr><td colspan='3' align='center'>here other important detail</td></tr></table>");
$printer -> cut();
/* Close printer */
$printer -> close();
//header("Location:../../../../index.php");
echo "<table border='0' align='center' width='385px'><tr><td align='center'>.::<strong> ". $restaurent ." </strong>::. \n". $celphone ." - ID: ". $IDRest ."</td></tr><tr><td align='center'>Date/Time:" . date('d-m-Y H:i:s') . "</td></tr><tr><td align='left'></td></tr><tr><td>Client: ".$name."</td></tr><tr><td>ID Client: ".$ID_Client."</td></tr><tr><td>Order Nº: ".$orderNum."</td></tr><tr><td colspan='3' align='left'>Type of Order: ".$type_orders."</td></tr></table>\n"."<table border='0' align='center' width='300px'><tr><td><span id='cantDragg'>QUANTITY.</span></td><td><span id='descripDragg'>DETAILS</span></td><td align='right'><span id='importDragg'>TOTAL</span></td></tr><tr><td colspan='3'>==========================================</td></tr>". $dish_details."<tr><td> </td><td align='right'><b>TOTAL:</b></td><td align='right'><b>".$total." ".$coin."</b></td></tr><tr><td colspan='3'>Nº of Dishes: 2</td></tr><tr><td colspan='3'> </td></tr><tr><td colspan='3' align='center'>here other important detail</td></tr></table>";
} catch (Exception $e) {
echo "Couldn't print to this printer: " . $e -> getMessage() . "\n";
}
客户下单后如何从主机自动打印门票?我使用 ESC/POS 库使打印更容易。库的所有文件夹和文件都很好地位于系统所在的服务器文件夹中。
这个交付页面也有它的内容管理系统,它还有一个显示客户订单的菜单。这是包含 ESC / POS 库的文件夹所在的位置,并且使用 cron 打印的 php 文件也在那里。