Press "Enter" to skip to content

一个程序员关于订单打印的思考

乐佳肴台式茶餐屋 10 月 10 号开业以来,生意一直很好。我们在开业前几天就入驻了淘点点、美团外卖、乐外卖等系统。做外卖订餐的,我们肯定需要把用户下的订单打印出来然后再根据订单安排配送员给用户配送,前几天我对乐佳肴入驻的三个平台进行了调试,在淘宝上买了一个 58mm 无线蓝牙打印机,但是调试后发现只有美团外卖的订单能够打印出来,淘点点的订单打印不出来。淘点点指定的打印机好像是一款叫做“佳博”的无线打印机。乐外卖则在系统后台就指明了只能使用乐外卖提供的打印机才能打印在乐外卖平台上产生的订单,还给出了乐外卖打印机在淘宝上的购买链接,价格最便宜的 550 元,最新的 650 元。看到那个价格的时候我也是醉了。

作为一个自尊心很强的程序员,作为武汉凌波微购网络科技有限公司的首席技术官,我岂能眼睁睁的看着我们的乐佳肴花几百块钱去买三个不同的打印机分别适应我们入驻的三个平台?于是我想到了写一套统一的程序把三个平台的订单整合起来,用一个统一的打印机打印。

我最开始的想法是用模拟登陆技术,分别登陆淘点点、美团外卖、乐外卖三个系统的商家管理后台,然后用网页抓取技术把订单抓取下来存到本地的数据库,最后再调用打印机程序统一打印。不过后来发现淘点点跟美团外卖好像只有移动端的商家管理后台,没有 pc 端的,而乐外卖的管理后台登陆进去之后是一堆乱码,于是模拟抓取订单的这个想法行不通了。

然后我想到了三个平台接到订单的时候商家的手机都会接到订单提醒,淘点点跟美团外卖是直接在自己的 APP 中发出提示音并显示出订单详情,而乐外卖则可以设置短信通知和微信通知,商家在后台设置自己的接受信息后,只要一收到订单就会接到乐外卖发来的短信和微信,提示订单详情。然后我想到的是把这些通知类的订单详情复制粘贴并发送给一个微信号,由该微信号负责处理,并把内容插入到数据库,再从数据库中读取这些订单信息并进行打印。这样的话可能稍微麻烦一点,需要负责接收订单的商家人为的把三个平台的订单复制粘贴至同一个微信号,并统一打印。但是毕竟这种方法可以解决三个平台订单使用同一个打印机打印的问题。测试发现,淘点点跟美团外卖上面接到的订单不能复制,于是我只能处理乐外卖的订单了,毕竟写一个程序处理乐外卖系统产生的订单并用统一的打印机打印出来可以省去购买乐外卖打印机需要花费的 650 元,想想也是蛮有意义的。

ok,废话说了一大堆,现在开始进入正题,讲解如何写一套程序打印乐外卖平台产生的订单。

1、首先是在乐外卖后台设置接收订单的方式,我填写的是使用我的微信接收订单,所以每次用户下了订单,我的微信会马上接到订单提醒。

2、然后是把接收到的订单复制粘贴到一个微信公众号进行处理。本来想用最近申请的微信企业号进行处理的,但是因为企业号开发还没有学会,所以便临时使用了凌波微购公司的公众号进行处理。

3、处理订单的程序很简单,就是获取用户发送到微信公众号里面的内容,如果内容开头符合乐外卖订单开头的形式,就把用户发送的内容插入到数据库订单表中。如果用户发送的是”查看订单“,则跳转到查看订单的页面。

4、循环输出订单。基于 weiphp 的 MVC 模式来写数据输出程序要方便很多,简单的几行代码就把订单全部输出来了。

5、写一个刷新页面的程序,让页面每 5 秒钟刷新一次,便于获取最新的订单。

6、把这些准备工作做好之后,在查看订单的页面就能看到所有的订单信息了,页面每 5 秒钟刷新一次,在店面内负责接单的人就可以及时打印出订单了。

7、订单都显示出来了,现在就到了最关键的一步:把订单打印出来。从上图我们看到,每一条订单左上角都有 一个写着”订单“的按钮,点击那个按钮就能调出打印机预览页面。在输出订单的程序中,我们为每一个打印按钮设置一个 onclick 事件,为每一条订单设置一个唯一的 id,这样的话每次点击哪个订单的打印按钮,对应的订单就会被打印出来了。

打印订单的 js 函数 printdiv(printpage)中传递的参数是需要打印的订单 id,调用 window.print(); 能够打印出当前页面,所以在 window.print(); 前需要用 document.body.innerHTML = headstr+newstr+footstr; 设置当前页面内容。当前页面内容在打印之前设置了,打印之后不会自动恢复,所以在设置需要打印订单的当前页面内容之前我们先把原来的内容存储起来,等调用 windoe.print 打印出需要的内容之后再恢复以前的所有订单显示页面。

var oldstr = document.body.innerHTML;
document.body.innerHTML = headstr+newstr+footstr;
window.print();
document.body.innerHTML = oldstr;

8、把前面的工作都做好了,现在点击打印订单按钮就能调出打印机进行打印了。我这里用的是佳博的打印机,这个打印机是需要连接电脑的,不过价格挺便宜的,才 180 左右,所以用自己的智慧,配合一个 180 元的打印机,也能打印乐外卖的订单了,避免了购买乐外卖 650 元的打印机,为乐佳肴省掉了 470 元。感觉自己萌萌哒~请忽略我那乱得一笔的桌子。

整个订单打印程序开发流程到此处就哦了,总结几点: 1、作为一个程序员,一定要经常动脑筋,把自己学到的知识运用到实际场景中,能够创造价值。 2、实现某个功能能用的方法可能会有很多种,一种不行就试另一种,不要钻牛角尖。 3、一定要努力学技术,争取尽快开发出独立的线上订餐平台,功能不能亚于美团外卖、淘点点、乐外卖。 4、程序员的信仰:为改变世界而奋斗。