0

我有一个送货服务网络,客户从网站下订单,在餐厅里,用户通过自动打印订单的票来接收订单。顾客下单后,必须在餐厅自动打印门票。在使用 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>&nbsp;</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'>&nbsp;</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>&nbsp;</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'>&nbsp;</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 文件也在那里。

4

1 回答 1

0

问题是,您的打印机未连接到服务器,因此您无法从服务器控制打印机。

有几种方法可以做到这一点。

  1. 谷歌云打印的方法我可以使用云打印机成功地从服务器打印到本地pos打印机。我已将我的打印机注册到云打印机,并将收据转换为 pdf,但打印效果不佳。所以,我不推荐这种方法。
  2. 使用本地网络的方法。您可以在连接客户端浏览器的 wifi 网络中设置打印机。对于打印,在您的客户端浏览器中,将向您的本地打印机发送请求。它运作良好,我正在使用它。在wifi打印机的情况下,你必须有笔记本电脑。您还可以使用树莓派来减小尺寸并提供专门的打印服务。
  3. vps的方法。有人说我们可以从 vps 服务中获得专用的公共 ip。但我还不能配置它。但我认为这也是一个好方法。
于 2020-02-14T03:33:12.220 回答