|
|
@@ -1634,6 +1634,434 @@ void CPosPrinter::PrintWaimaiOrderChufang(CWaimaiOrder& order)
|
|
|
LOG_INFO("_______________________________结束打印厨房小票,订单编号:" << order.m_order_num.c_str() << "_________________________");
|
|
|
}
|
|
|
|
|
|
+void CPosPrinter::PrintWaimaiOrderTuikuan(CWaimaiOrder& order)
|
|
|
+{
|
|
|
+ LOG_INFO("_______________________________开始打印退款小票,订单编号:"<<order.m_order_num.c_str()<<"_________________________");
|
|
|
+
|
|
|
+ //设置模式,后面输出数据不会错
|
|
|
+ m_type = 1;
|
|
|
+
|
|
|
+ std::string printer_leixing = CSetting::GetParam("setting_printer_leixing");
|
|
|
+
|
|
|
+ if(printer_leixing == "auto")
|
|
|
+ {
|
|
|
+ InitShouyin();
|
|
|
+ }
|
|
|
+ else if(printer_leixing == "usb")
|
|
|
+ {
|
|
|
+ std::string printer_usb = CSetting::GetParam("setting_printer_usb");
|
|
|
+ std::wstring ws_printer_usb = CLewaimaiString::UTF8ToUnicode(printer_usb);
|
|
|
+
|
|
|
+ bool ret = InitOneUsb(ws_printer_usb);
|
|
|
+ if (ret == false)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(printer_leixing == "bingkou")
|
|
|
+ {
|
|
|
+ bool ret = InitBingkou();
|
|
|
+ if (ret == false)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(printer_leixing == "chuankou")
|
|
|
+ {
|
|
|
+ InitCom();
|
|
|
+ }
|
|
|
+ else if(printer_leixing == "wangkou")
|
|
|
+ {
|
|
|
+ m_type = 2;
|
|
|
+
|
|
|
+ std::string wangkou_ip = CSetting::GetParam("setting_printer_wangkou_ip");
|
|
|
+
|
|
|
+ //初始化连接
|
|
|
+ try
|
|
|
+ {
|
|
|
+ boost::asio::ip::tcp::endpoint ep(boost::asio::ip::address::from_string(wangkou_ip.c_str()), 9100);
|
|
|
+ m_socket.connect(ep);
|
|
|
+ }
|
|
|
+ catch(std::exception& e)
|
|
|
+ {
|
|
|
+ std::string err = e.what();
|
|
|
+ LOG_INFO("网口打印机连接失败,IP地址:" << wangkou_ip.c_str() << ",错误信息:" << err.c_str());
|
|
|
+
|
|
|
+ MessageBoxW(NULL, (L"厨房网口打印机连接失败,IP地址:" + CLewaimaiString::UTF8ToUnicode(wangkou_ip)).c_str(), L"打印机连接失败", MB_OK);
|
|
|
+
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //读取当前收银打印机的设置
|
|
|
+ std::string guige = CSetting::GetParam("setting_printer_guige");
|
|
|
+ std::string lianshu = CSetting::GetParam("setting_printer_lianshu");
|
|
|
+ int n_lianshu = atoi(lianshu.c_str());
|
|
|
+
|
|
|
+ //正式开始打印
|
|
|
+ for(int i = 0; i < n_lianshu; i++)
|
|
|
+ {
|
|
|
+ POS_Reset();
|
|
|
+
|
|
|
+ //打印退款信息
|
|
|
+ string tuikuan_info = "该订单顾客申请退款,请及时处理";
|
|
|
+ POS_TextOut(tuikuan_info, true, true, 1);
|
|
|
+
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ //打印店铺名字
|
|
|
+ string shop_name = "#" + order.m_restaurant_number + " " + CLewaimaiString::UTF8ToANSI(order.m_shop_name);
|
|
|
+ POS_TextOut(shop_name, true, true, 1);
|
|
|
+
|
|
|
+ POS_FeedLine();
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ //打印小票自定义名称
|
|
|
+ string printer_tip_name = CLewaimaiString::UTF8ToANSI(order.m_printer_tip_name);
|
|
|
+ if (printer_tip_name.length() > 0)
|
|
|
+ {
|
|
|
+ POS_TextOut(printer_tip_name, false, true, 1);
|
|
|
+
|
|
|
+ POS_FeedLine();
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
+
|
|
|
+ //打印预约、即时配送的提醒
|
|
|
+
|
|
|
+ /*
|
|
|
+ bool setting_printer_peisongshijian_big = false;
|
|
|
+
|
|
|
+ if (CSetting::GetParam("setting_printer_peisongshijian_big") == "1")
|
|
|
+ {
|
|
|
+ setting_printer_peisongshijian_big = true;
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+
|
|
|
+ if (order.m_is_selftake == "1")
|
|
|
+ {
|
|
|
+ string date = "【自取单】" + CLewaimaiString::UTF8ToANSI(order.m_delivery_date);
|
|
|
+ POS_TextOut(date, false, true);
|
|
|
+ POS_TextOut("取货", false, false);
|
|
|
+
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (order.m_is_book == "1")
|
|
|
+ {
|
|
|
+ //预约单
|
|
|
+ string date = "【预约单】" + CLewaimaiString::UTF8ToANSI(order.m_delivery_date);
|
|
|
+ POS_TextOut(date, false, true);
|
|
|
+ POS_TextOut("送达", false, false);
|
|
|
+
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //非预约单
|
|
|
+ string date = "【即时单】立即送达";
|
|
|
+ POS_TextOut(date, false, true, 1);
|
|
|
+
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ //打印取货方式
|
|
|
+ /*
|
|
|
+ bool setting_printer_quhuo_big = false;
|
|
|
+
|
|
|
+ if(CSetting::GetParam("setting_printer_quhuo_big") == "1")
|
|
|
+ {
|
|
|
+ setting_printer_quhuo_big = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(order.m_is_selftake == "1")
|
|
|
+ {
|
|
|
+ POS_TextOut("到店自取订单", false, setting_printer_quhuo_big, 1);
|
|
|
+ POS_FeedLine();
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ POS_TextOut("外卖订单", false, setting_printer_quhuo_big, 1);
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
+
|
|
|
+ POS_FeedLine();
|
|
|
+ */
|
|
|
+
|
|
|
+ //订单来源
|
|
|
+ string from_type = "订单来源:" + CLewaimaiString::UTF8ToANSI(order.m_from_type);
|
|
|
+ POS_TextOut(from_type);
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ //订单号
|
|
|
+ bool setting_printer_dingdanhao_big = false;
|
|
|
+
|
|
|
+ if(CSetting::GetParam("setting_printer_dingdanhao_big") == "1")
|
|
|
+ {
|
|
|
+ setting_printer_dingdanhao_big = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ string order_num = "订 单 号:" + CLewaimaiString::UTF8ToANSI(order.m_order_num);
|
|
|
+ POS_TextOut(order_num, false, setting_printer_dingdanhao_big);
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ //下单时间
|
|
|
+ bool setting_printer_xiadanshijian_big = false;
|
|
|
+
|
|
|
+ if(CSetting::GetParam("setting_printer_xiadanshijian_big") == "1")
|
|
|
+ {
|
|
|
+ setting_printer_xiadanshijian_big = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ string order_date = "下单时间:" + CLewaimaiString::UTF8ToANSI(order.m_order_date);
|
|
|
+ POS_TextOut(order_date, false, setting_printer_xiadanshijian_big);
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ //姓名
|
|
|
+ bool setting_printer_name_big = false;
|
|
|
+
|
|
|
+ if(CSetting::GetParam("setting_printer_name_big") == "1")
|
|
|
+ {
|
|
|
+ setting_printer_name_big = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(order.m_is_selftake != "1")
|
|
|
+ {
|
|
|
+ string name = "姓名:" + CLewaimaiString::UTF8ToANSI(order.m_customer_name);
|
|
|
+
|
|
|
+ //把下单次数也一起打印
|
|
|
+ if (order.m_showordernum == "1")
|
|
|
+ {
|
|
|
+ name += "(第 " + CLewaimaiString::UTF8ToANSI(order.m_customer_order_total) + " 次下单)";
|
|
|
+ }
|
|
|
+
|
|
|
+ POS_TextOut(name, false, setting_printer_name_big);
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
+
|
|
|
+ //电话
|
|
|
+ bool setting_printer_phone_big = false;
|
|
|
+
|
|
|
+ if(CSetting::GetParam("setting_printer_phone_big") == "1")
|
|
|
+ {
|
|
|
+ setting_printer_phone_big = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ //看看电话是否要脱敏
|
|
|
+ if (order.m_show_whole_phone == "0")
|
|
|
+ {
|
|
|
+ order.m_phone.replace(3, 4, 4, '*');
|
|
|
+ }
|
|
|
+
|
|
|
+ string phone = "电话:" + CLewaimaiString::UTF8ToANSI(order.m_phone);
|
|
|
+ POS_TextOut(phone, false, setting_printer_phone_big);
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ //地址
|
|
|
+ bool setting_printer_address_big = false;
|
|
|
+
|
|
|
+ if(CSetting::GetParam("setting_printer_address_big") == "1")
|
|
|
+ {
|
|
|
+ setting_printer_address_big = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(order.m_is_selftake != "1")
|
|
|
+ {
|
|
|
+ string address = "地址:" + CLewaimaiString::UTF8ToANSI(order.m_address);
|
|
|
+ POS_TextOut(address, false, setting_printer_address_big);
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
+
|
|
|
+ //预设选项
|
|
|
+ if(order.m_order_field.size() > 1)
|
|
|
+ {
|
|
|
+ for(std::vector<CWaimaiOrderField>::iterator it = order.m_order_field.begin(); it != order.m_order_field.end() - 1; it++)
|
|
|
+ {
|
|
|
+ string order_field = CLewaimaiString::UTF8ToANSI((*it).name) + ":" + CLewaimaiString::UTF8ToANSI((*it).value);
|
|
|
+ POS_TextOut(order_field, false, false, 0);
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //准备开始打印商品详情
|
|
|
+ string lines;
|
|
|
+
|
|
|
+ if(guige == "58")
|
|
|
+ {
|
|
|
+ lines = "--------------------------------";
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ lines = "------------------------------------------------";
|
|
|
+ }
|
|
|
+
|
|
|
+ POS_TextOut(lines);
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ //打印退款信息
|
|
|
+ POS_TextOut(tuikuan_info, true, true, 1);
|
|
|
+
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ //结束商品详情打印
|
|
|
+ POS_TextOut(lines);
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ //开始打印其他的费用
|
|
|
+ bool is_other_money = false;
|
|
|
+ bool setting_printer_price_big = false;
|
|
|
+
|
|
|
+ if(CSetting::GetParam("setting_printer_price_big") == "1")
|
|
|
+ {
|
|
|
+ setting_printer_price_big = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(order.m_delivery > 0)
|
|
|
+ {
|
|
|
+ string delivery = "配送费:" + CLewaimaiString::DoubleToString((double)order.m_delivery, 2);
|
|
|
+ POS_TextOut(delivery, false, setting_printer_price_big);
|
|
|
+ POS_FeedLine();
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(order.m_is_dabao == "1")
|
|
|
+ {
|
|
|
+ string dabao = "打包费:" + CLewaimaiString::UTF8ToANSI(order.m_dabao_money);
|
|
|
+ POS_TextOut(dabao, false, setting_printer_price_big);
|
|
|
+ POS_FeedLine();
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ //开始显示增值服务费
|
|
|
+ if(order.m_addservie.size() > 0)
|
|
|
+ {
|
|
|
+ for(std::vector<CWaimaiOrderField>::iterator it = order.m_addservie.begin(); it != order.m_addservie.end(); it++)
|
|
|
+ {
|
|
|
+ string addservice = CLewaimaiString::UTF8ToANSI((*it).name) + ":" + CLewaimaiString::DoubleToString((double)atof((*it).value.c_str()), 2);
|
|
|
+ POS_TextOut(addservice, false, setting_printer_price_big);
|
|
|
+ POS_FeedLine();
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(order.m_discount < 10)
|
|
|
+ {
|
|
|
+ string discount = "打折:" + CLewaimaiString::DoubleToString((double)order.m_discount, 2) + "折";
|
|
|
+ POS_TextOut(discount, false, setting_printer_price_big);
|
|
|
+ POS_FeedLine();
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(order.m_is_member_discount == "1")
|
|
|
+ {
|
|
|
+ string member_discount = "会员优惠:-" + order.m_member_discount;
|
|
|
+ POS_TextOut(member_discount, false, setting_printer_price_big);
|
|
|
+ POS_FeedLine();
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(order.m_is_firstcut == "1")
|
|
|
+ {
|
|
|
+ string firstcut = "首单优惠:-" + order.m_firstcut_value;
|
|
|
+ POS_TextOut(firstcut, false, setting_printer_price_big);
|
|
|
+ POS_FeedLine();
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ //满减
|
|
|
+ string::size_type position = order.m_promotion.find(":");
|
|
|
+
|
|
|
+ if(position != order.m_promotion.npos)
|
|
|
+ {
|
|
|
+ string promotion_value;
|
|
|
+ promotion_value.assign(order.m_promotion, position + 1);
|
|
|
+ string promotion = "满减优惠:-" + CLewaimaiString::DoubleToString((double)(atof(promotion_value.c_str())), 2);
|
|
|
+ POS_TextOut(promotion, false, setting_printer_price_big);
|
|
|
+ POS_FeedLine();
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(order.m_coupon > 0)
|
|
|
+ {
|
|
|
+ string coupon = "优惠券:-" + CLewaimaiString::DoubleToString((double)order.m_coupon, 2);
|
|
|
+ POS_TextOut(coupon, false, setting_printer_price_big);
|
|
|
+ POS_FeedLine();
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(is_other_money)
|
|
|
+ {
|
|
|
+ POS_TextOut(lines);
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
+
|
|
|
+ //最后显示总价
|
|
|
+ POS_TextOut("总计:¥" + CLewaimaiString::DoubleToString(order.m_price, 2), false, setting_printer_price_big, 2);
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ //显示付款方式
|
|
|
+ bool setting_printer_pay_big = false;
|
|
|
+
|
|
|
+ if(CSetting::GetParam("setting_printer_pay_big") == "1")
|
|
|
+ {
|
|
|
+ setting_printer_pay_big = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ POS_TextOut("支付方式:" + CLewaimaiString::UTF8ToANSI(order.m_pay_type), false, setting_printer_pay_big, 2);
|
|
|
+
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ POS_FeedLine();;
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ //准备开始打印二维码
|
|
|
+ std::string order_no = order.m_order_no;
|
|
|
+ order_no = CLewaimaiString::UTF8ToANSI(order_no);
|
|
|
+
|
|
|
+ if (order.m_show_qiangdan_qrcode == "1")
|
|
|
+ {
|
|
|
+ POS_OutQRCode(order_no);
|
|
|
+
|
|
|
+ POS_FeedLine();
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ POS_TextOut("请使用配送员app扫码绑定订单", false, false, 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ //走纸几行再切
|
|
|
+ POS_FeedLine();
|
|
|
+ POS_FeedLine();
|
|
|
+ POS_FeedLine();
|
|
|
+ POS_FeedLine();
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ POS_CutPaper();
|
|
|
+ }
|
|
|
+
|
|
|
+ //还原打印机初始设置,有些傻逼收银设备居然不是自动调用,比如哗啦啦
|
|
|
+ POS_Reset();
|
|
|
+
|
|
|
+ //关闭设备
|
|
|
+ for(std::vector<PrinterHandle>::iterator it = m_hPorts.begin(); it != m_hPorts.end(); it++)
|
|
|
+ {
|
|
|
+ CloseHandle((*it).hPort);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (m_type == 2)
|
|
|
+ {
|
|
|
+ m_socket.close();
|
|
|
+ }
|
|
|
+
|
|
|
+ LOG_INFO("_______________________________结束打印退款小票,订单编号:" << order.m_order_num.c_str() << "_________________________");
|
|
|
+ LOG_INFO(" ");
|
|
|
+}
|
|
|
+
|
|
|
std::vector<std::wstring> CPosPrinter::getUsbDevices()
|
|
|
{
|
|
|
return m_usb_devices;
|