|
|
@@ -4,14 +4,30 @@
|
|
|
#include <winioctl.h>
|
|
|
#include <setupapi.h>
|
|
|
|
|
|
-CPosPrinter::CPosPrinter()
|
|
|
+using boost::asio::ip::tcp;
|
|
|
+
|
|
|
+CPosPrinter::CPosPrinter(int print_type): m_socket(m_io)
|
|
|
{
|
|
|
- Init();
|
|
|
+ m_type = print_type;
|
|
|
+
|
|
|
+ if(print_type == 1)
|
|
|
+ {
|
|
|
+ Init();
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ InitChufang();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
|
CPosPrinter::~CPosPrinter()
|
|
|
{
|
|
|
+ if (m_type == 2)
|
|
|
+ {
|
|
|
+ m_socket.close();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
bool CPosPrinter::Init()
|
|
|
@@ -53,277 +69,327 @@ bool CPosPrinter::Init()
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-void CPosPrinter::PrintWaimaiOrder(string order_id, string order_no, int type)
|
|
|
+bool CPosPrinter::InitChufang()
|
|
|
{
|
|
|
- CWaimaiOrder order;
|
|
|
- order.InitData(order_id, order_no);
|
|
|
+ try
|
|
|
+ {
|
|
|
+ boost::asio::ip::tcp::endpoint ep(boost::asio::ip::address::from_string("192.168.10.47"), 9100);
|
|
|
+ m_socket.connect(ep);
|
|
|
+ }
|
|
|
|
|
|
- PrintWaimaiOrder(order);
|
|
|
+ catch(std::exception& e)
|
|
|
+ {
|
|
|
+ std::cout << e.what() << std::endl;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
-void CPosPrinter::PrintWaimaiOrder(CWaimaiOrder& order, int type)
|
|
|
+void CPosPrinter::PrintWaimaiOrder(string order_id, std::string order_no)
|
|
|
{
|
|
|
- POS_Reset();
|
|
|
+ CWaimaiOrder order;
|
|
|
+ order.InitData(order_id, order_no);
|
|
|
|
|
|
- string shop_name = "#" + order.m_restaurant_number + " " + CLewaimaiString::UTF8ToANSI(order.m_shop_name);
|
|
|
- POS_TextOut(shop_name, true);
|
|
|
- POS_FeedLine();
|
|
|
+ PrintWaimaiOrder(order);
|
|
|
+}
|
|
|
|
|
|
- POS_FeedLine();
|
|
|
+void CPosPrinter::PrintWaimaiOrder(CWaimaiOrder& order)
|
|
|
+{
|
|
|
+ std::string guige = CSetting::GetParam("setting_printer_guige");
|
|
|
+ std::string lianshu = CSetting::GetParam("setting_printer_lianshu");
|
|
|
|
|
|
- if (order.m_is_selftake == "1")
|
|
|
- {
|
|
|
- POS_TextOut("到店自取订单", false, 1);
|
|
|
- POS_FeedLine();
|
|
|
+ int n_lianshu = atoi(lianshu.c_str());
|
|
|
|
|
|
- POS_FeedLine();
|
|
|
+ for(int i = 0; i < n_lianshu; i++)
|
|
|
+ {
|
|
|
+ POS_Reset();
|
|
|
|
|
|
- POS_TextOut("取餐号:" + CLewaimaiString::UTF8ToANSI(order.m_take_food_code), true, 1);
|
|
|
- POS_FeedLine();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- POS_TextOut("外卖订单", false, 1);
|
|
|
- POS_FeedLine();
|
|
|
- }
|
|
|
+ string shop_name = "#" + order.m_restaurant_number + " " + CLewaimaiString::UTF8ToANSI(order.m_shop_name);
|
|
|
+ POS_TextOut(shop_name, true, 1);
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- POS_FeedLine();
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- if(order.m_is_selftake == "1")
|
|
|
- {
|
|
|
- //自取订单,打印自取信息
|
|
|
+ if(order.m_is_selftake == "1")
|
|
|
+ {
|
|
|
+ POS_TextOut("到店自取订单", false, 1);
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- }
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- //订单来源
|
|
|
- string from_type = "订单来源:" + CLewaimaiString::UTF8ToANSI(order.m_from_type);
|
|
|
- POS_TextOut(from_type);
|
|
|
- POS_FeedLine();
|
|
|
+ POS_TextOut("取餐号:" + CLewaimaiString::UTF8ToANSI(order.m_take_food_code), true, 1);
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
|
|
|
- //订单号
|
|
|
- string order_no = "订单号:" + CLewaimaiString::UTF8ToANSI(order.m_order_no);
|
|
|
- POS_TextOut(order_no);
|
|
|
- POS_FeedLine();
|
|
|
+ else
|
|
|
+ {
|
|
|
+ POS_TextOut("外卖订单", false, 1);
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
|
|
|
- //姓名
|
|
|
- if (order.m_is_selftake != "1")
|
|
|
- {
|
|
|
- string name = "姓名:" + CLewaimaiString::UTF8ToANSI(order.m_customer_name);
|
|
|
- POS_TextOut(name);
|
|
|
- POS_FeedLine();
|
|
|
- }
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- //电话
|
|
|
- string phone = "电话:" + CLewaimaiString::UTF8ToANSI(order.m_phone);
|
|
|
- POS_TextOut(phone);
|
|
|
- POS_FeedLine();
|
|
|
+ //订单来源
|
|
|
+ string from_type = "订单来源:" + CLewaimaiString::UTF8ToANSI(order.m_from_type);
|
|
|
+ POS_TextOut(from_type);
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- //地址
|
|
|
- if (order.m_is_selftake != "1")
|
|
|
- {
|
|
|
- string address = "地址:" + CLewaimaiString::UTF8ToANSI(order.m_address);
|
|
|
- POS_TextOut(address);
|
|
|
- POS_FeedLine();
|
|
|
- }
|
|
|
+ //订单号
|
|
|
+ string order_no = "订单号:" + CLewaimaiString::UTF8ToANSI(order.m_order_no);
|
|
|
+ POS_TextOut(order_no);
|
|
|
+ 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, 0);
|
|
|
- POS_FeedLine();
|
|
|
- }
|
|
|
- }
|
|
|
+ //姓名
|
|
|
+ if(order.m_is_selftake != "1")
|
|
|
+ {
|
|
|
+ string name = "姓名:" + CLewaimaiString::UTF8ToANSI(order.m_customer_name);
|
|
|
+ POS_TextOut(name);
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
|
|
|
- //下单时间
|
|
|
- string order_date = "下单时间:" + CLewaimaiString::UTF8ToANSI(order.m_order_date);
|
|
|
- POS_TextOut(order_date);
|
|
|
- POS_FeedLine();
|
|
|
+ //电话
|
|
|
+ string phone = "电话:" + CLewaimaiString::UTF8ToANSI(order.m_phone);
|
|
|
+ POS_TextOut(phone);
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- //配送时间
|
|
|
- if (order.m_is_selftake == "1")
|
|
|
- {
|
|
|
- string date = "自取时间:" + CLewaimaiString::UTF8ToANSI(order.m_delivery_date);
|
|
|
- POS_TextOut(date);
|
|
|
- POS_FeedLine();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- string date = "配送时间:" + CLewaimaiString::UTF8ToANSI(order.m_delivery_date);
|
|
|
- POS_TextOut(date);
|
|
|
- POS_FeedLine();
|
|
|
- }
|
|
|
+ //地址
|
|
|
+ if(order.m_is_selftake != "1")
|
|
|
+ {
|
|
|
+ string address = "地址:" + CLewaimaiString::UTF8ToANSI(order.m_address);
|
|
|
+ POS_TextOut(address);
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
|
|
|
- //准备开始打印商品详情
|
|
|
- string lines = "--------------------------------";
|
|
|
- POS_TextOut(lines);
|
|
|
- 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, 0);
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- //商品标题
|
|
|
- POS_TextOut("商品 单价 数量 金额");
|
|
|
- POS_FeedLine();
|
|
|
+ //下单时间
|
|
|
+ string order_date = "下单时间:" + CLewaimaiString::UTF8ToANSI(order.m_order_date);
|
|
|
+ POS_TextOut(order_date);
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- //商品内容
|
|
|
- for(std::vector<CWaimaiOrderItem>::iterator it = order.m_order_items.begin(); it != order.m_order_items.end(); it++)
|
|
|
- {
|
|
|
- std::string food_name = (*it).m_food_name;
|
|
|
- std::string food_price = (*it).m_item_price;
|
|
|
- std::string quantity = (*it).m_quantity;
|
|
|
+ //配送时间
|
|
|
+ if(order.m_is_selftake == "1")
|
|
|
+ {
|
|
|
+ string date = "自取时间:" + CLewaimaiString::UTF8ToANSI(order.m_delivery_date);
|
|
|
+ POS_TextOut(date);
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ string date = "配送时间:" + CLewaimaiString::UTF8ToANSI(order.m_delivery_date);
|
|
|
+ POS_TextOut(date);
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
|
|
|
- //计算总价
|
|
|
- double item_price = atof(food_price.c_str()) * atof(quantity.c_str());
|
|
|
- std::string food_total_price = CLewaimaiString::DoubleToString(item_price, 2);
|
|
|
+ //准备开始打印商品详情
|
|
|
+ string lines;
|
|
|
|
|
|
- food_name = CLewaimaiString::UTF8ToANSI(food_name);
|
|
|
+ if(guige == "58")
|
|
|
+ {
|
|
|
+ lines = "--------------------------------";
|
|
|
+ }
|
|
|
|
|
|
- //先输出商品名字
|
|
|
- std::vector<string> m_names = HandleFoodname(food_name);
|
|
|
+ else
|
|
|
+ {
|
|
|
+ lines = "------------------------------------------------";
|
|
|
+ }
|
|
|
|
|
|
- std::string firstLine = m_names[0];
|
|
|
- std::string priceShow = HandleFoodItemPrice(food_price);
|
|
|
- std::string quantityShow = HandleFoodQuantity(quantity);
|
|
|
- std::string priceTotalShow = HandleFoodTotalPrice(food_total_price);
|
|
|
+ POS_TextOut(lines);
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- std::string firstLineShow = firstLine + priceShow + quantityShow + priceTotalShow;
|
|
|
+ //商品标题
|
|
|
+ if(guige == "58")
|
|
|
+ {
|
|
|
+ POS_TextOut("商品 单价 数量 金额");
|
|
|
+ }
|
|
|
|
|
|
+ else
|
|
|
+ {
|
|
|
+ POS_TextOut("商品 单价 数量 金额");
|
|
|
+ }
|
|
|
|
|
|
- POS_TextOut(firstLineShow, false, 0);
|
|
|
POS_FeedLine();
|
|
|
|
|
|
- for (std::vector<string>::iterator it = m_names.begin() + 1; it != m_names.end(); it++)
|
|
|
- {
|
|
|
- POS_TextOut((*it), false, 0);
|
|
|
- POS_FeedLine();
|
|
|
- }
|
|
|
- }
|
|
|
+ //商品内容
|
|
|
+ for(std::vector<CWaimaiOrderItem>::iterator it = order.m_order_items.begin(); it != order.m_order_items.end(); it++)
|
|
|
+ {
|
|
|
+ std::string food_name = (*it).m_food_name;
|
|
|
+ std::string food_price = (*it).m_item_price;
|
|
|
+ std::string quantity = (*it).m_quantity;
|
|
|
|
|
|
- //判断是否有备注
|
|
|
- if (order.m_memo.length() > 0)
|
|
|
- {
|
|
|
- POS_FeedLine();
|
|
|
- string address = "顾客备注:" + CLewaimaiString::UTF8ToANSI(order.m_memo);
|
|
|
- POS_TextOut(address, false, 0);
|
|
|
- POS_FeedLine();
|
|
|
- }
|
|
|
+ //计算总价
|
|
|
+ double item_price = atof(food_price.c_str()) * atof(quantity.c_str());
|
|
|
+ std::string food_total_price = CLewaimaiString::DoubleToString(item_price, 2);
|
|
|
|
|
|
- //结束商品详情打印
|
|
|
- POS_TextOut(lines);
|
|
|
- POS_FeedLine();
|
|
|
+ food_name = CLewaimaiString::UTF8ToANSI(food_name);
|
|
|
|
|
|
- //开始打印其他的费用
|
|
|
- bool is_other_money = false;
|
|
|
+ //先输出商品名字
|
|
|
+ std::vector<string> m_names;
|
|
|
|
|
|
- if (order.m_delivery > 0)
|
|
|
- {
|
|
|
- string delivery = "配送费:" + CLewaimaiString::DoubleToString((double)order.m_delivery, 2);
|
|
|
- POS_TextOut(delivery, false, 0);
|
|
|
- POS_FeedLine();
|
|
|
+ if(guige == "58")
|
|
|
+ {
|
|
|
+ m_names = HandleFoodname(food_name, 1);
|
|
|
+ }
|
|
|
|
|
|
- is_other_money = true;
|
|
|
- }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ m_names = HandleFoodname(food_name, 2);
|
|
|
+ }
|
|
|
|
|
|
- if (order.m_is_dabao == "1")
|
|
|
- {
|
|
|
- string dabao = "打包费:" + CLewaimaiString::UTF8ToANSI(order.m_dabao_money);
|
|
|
- POS_TextOut(dabao, false, 0);
|
|
|
- POS_FeedLine();
|
|
|
+ std::string firstLine = m_names[0];
|
|
|
+ std::string priceShow = HandleFoodItemPrice(food_price, 2);
|
|
|
+ std::string quantityShow = HandleFoodQuantity(quantity, 2);
|
|
|
+ std::string priceTotalShow = HandleFoodTotalPrice(food_total_price, 2);
|
|
|
|
|
|
- is_other_money = true;
|
|
|
- }
|
|
|
+ std::string firstLineShow = firstLine + priceShow + quantityShow + priceTotalShow;
|
|
|
|
|
|
- //开始显示增值服务费
|
|
|
- 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, 0);
|
|
|
- POS_FeedLine();
|
|
|
+ POS_TextOut(firstLineShow, false, 0);
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- is_other_money = true;
|
|
|
- }
|
|
|
+ for(std::vector<string>::iterator it = m_names.begin() + 1; it != m_names.end(); it++)
|
|
|
+ {
|
|
|
+ POS_TextOut((*it), false, 0);
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- is_other_money = true;
|
|
|
- }
|
|
|
+ //判断是否有备注
|
|
|
+ if(order.m_memo.length() > 0)
|
|
|
+ {
|
|
|
+ POS_FeedLine();
|
|
|
+ string address = "顾客备注:" + CLewaimaiString::UTF8ToANSI(order.m_memo);
|
|
|
+ POS_TextOut(address, false, 0);
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
|
|
|
- if (order.m_discount < 10)
|
|
|
- {
|
|
|
- string discount = "打折:" + CLewaimaiString::DoubleToString((double)order.m_discount, 2) + "折";
|
|
|
- POS_TextOut(discount, false, 0);
|
|
|
- POS_FeedLine();
|
|
|
+ //结束商品详情打印
|
|
|
+ POS_TextOut(lines);
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- is_other_money = true;
|
|
|
- }
|
|
|
+ //开始打印其他的费用
|
|
|
+ bool is_other_money = false;
|
|
|
|
|
|
- if (order.m_is_member_discount == "1")
|
|
|
- {
|
|
|
- string member_discount = "会员优惠:-" + order.m_member_discount;
|
|
|
- POS_TextOut(member_discount, false, 0);
|
|
|
- POS_FeedLine();
|
|
|
+ if(order.m_delivery > 0)
|
|
|
+ {
|
|
|
+ string delivery = "配送费:" + CLewaimaiString::DoubleToString((double)order.m_delivery, 2);
|
|
|
+ POS_TextOut(delivery, false, 0);
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- is_other_money = true;
|
|
|
- }
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
|
|
|
- if (order.m_is_firstcut == "1")
|
|
|
- {
|
|
|
- string firstcut = "首单优惠:-" + order.m_firstcut_value;
|
|
|
- POS_TextOut(firstcut, false, 0);
|
|
|
- POS_FeedLine();
|
|
|
+ if(order.m_is_dabao == "1")
|
|
|
+ {
|
|
|
+ string dabao = "打包费:" + CLewaimaiString::UTF8ToANSI(order.m_dabao_money);
|
|
|
+ POS_TextOut(dabao, false, 0);
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- is_other_money = true;
|
|
|
- }
|
|
|
+ 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);
|
|
|
+ //开始显示增值服务费
|
|
|
+ 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, 0);
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- string promotion = "满减优惠:-" + CLewaimaiString::DoubleToString((double)(atof(promotion_value.c_str())), 2);
|
|
|
- POS_TextOut(promotion, false, 0);
|
|
|
- POS_FeedLine();
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
|
|
|
- is_other_money = true;
|
|
|
- }
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
|
|
|
- if (order.m_coupon> 0)
|
|
|
- {
|
|
|
- string coupon = "优惠券:-" + CLewaimaiString::DoubleToString((double)order.m_coupon, 2);
|
|
|
- POS_TextOut(coupon, false, 0);
|
|
|
- POS_FeedLine();
|
|
|
+ if(order.m_discount < 10)
|
|
|
+ {
|
|
|
+ string discount = "打折:" + CLewaimaiString::DoubleToString((double)order.m_discount, 2) + "折";
|
|
|
+ POS_TextOut(discount, false, 0);
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- is_other_money = true;
|
|
|
- }
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
|
|
|
- if (atof(order.m_goods_coupon_value.c_str()) > 0.0001)
|
|
|
- {
|
|
|
- string coupon = "商品券:-" + order.m_goods_coupon_value;
|
|
|
- POS_TextOut(coupon, false, 0);
|
|
|
- POS_FeedLine();
|
|
|
+ if(order.m_is_member_discount == "1")
|
|
|
+ {
|
|
|
+ string member_discount = "会员优惠:-" + order.m_member_discount;
|
|
|
+ POS_TextOut(member_discount, false, 0);
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- is_other_money = true;
|
|
|
- }
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
|
|
|
- if (is_other_money)
|
|
|
- {
|
|
|
- POS_TextOut(lines);
|
|
|
- POS_FeedLine();
|
|
|
- }
|
|
|
+ if(order.m_is_firstcut == "1")
|
|
|
+ {
|
|
|
+ string firstcut = "首单优惠:-" + order.m_firstcut_value;
|
|
|
+ POS_TextOut(firstcut, false, 0);
|
|
|
+ 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, 0);
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(order.m_coupon > 0)
|
|
|
+ {
|
|
|
+ string coupon = "优惠券:-" + CLewaimaiString::DoubleToString((double)order.m_coupon, 2);
|
|
|
+ POS_TextOut(coupon, false, 0);
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- //最后显示总价
|
|
|
- POS_TextOut("总计:¥" + CLewaimaiString::DoubleToString(order.m_price, 2), false, 2);
|
|
|
- POS_FeedLine();
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(atof(order.m_goods_coupon_value.c_str()) > 0.0001)
|
|
|
+ {
|
|
|
+ string coupon = "商品券:-" + order.m_goods_coupon_value;
|
|
|
+ POS_TextOut(coupon, false, 0);
|
|
|
+ POS_FeedLine();
|
|
|
+
|
|
|
+ is_other_money = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(is_other_money)
|
|
|
+ {
|
|
|
+ POS_TextOut(lines);
|
|
|
+ POS_FeedLine();
|
|
|
+ }
|
|
|
+
|
|
|
+ //最后显示总价
|
|
|
+ POS_TextOut("总计:¥" + CLewaimaiString::DoubleToString(order.m_price, 2), false, 2);
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- //显示付款方式
|
|
|
- POS_TextOut("支付方式:" + CLewaimaiString::UTF8ToANSI(order.m_pay_type), false, 2);
|
|
|
- POS_FeedLine();
|
|
|
+ //显示付款方式
|
|
|
+ POS_TextOut("支付方式:" + CLewaimaiString::UTF8ToANSI(order.m_pay_type), false, 2);
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- POS_FeedLine();
|
|
|
+ POS_FeedLine();
|
|
|
|
|
|
- POS_CutPaper();
|
|
|
+ POS_CutPaper();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
@@ -445,14 +511,48 @@ int CPosPrinter::GetDevicePath(LPGUID lpGuid, LPTSTR* pszDevicePath)
|
|
|
|
|
|
int CPosPrinter::WriteData(string msg)
|
|
|
{
|
|
|
- DWORD dwWrite;
|
|
|
- return WriteFile(m_hPort, msg.c_str(), (DWORD)msg.length(), &dwWrite, NULL);
|
|
|
+ if(m_type == 1)
|
|
|
+ {
|
|
|
+ DWORD dwWrite;
|
|
|
+ return WriteFile(m_hPort, msg.c_str(), (DWORD)msg.length(), &dwWrite, NULL);
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ m_socket.write_some(boost::asio::buffer(msg.c_str(), msg.length()));
|
|
|
+ }
|
|
|
+ catch (const std::exception& e)
|
|
|
+ {
|
|
|
+ LOG_INFO(e.what());
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
int CPosPrinter::WriteBuf(char *buf, int len)
|
|
|
{
|
|
|
- DWORD dwWrite;
|
|
|
- return WriteFile(m_hPort, buf, len, &dwWrite, NULL);
|
|
|
+ if(m_type == 1)
|
|
|
+ {
|
|
|
+ DWORD dwWrite;
|
|
|
+ return WriteFile(m_hPort, buf, len, &dwWrite, NULL);
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ m_socket.write_some(boost::asio::buffer(buf, len));
|
|
|
+ }
|
|
|
+ catch (const std::exception& e)
|
|
|
+ {
|
|
|
+ LOG_INFO(e.what());
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
int CPosPrinter::POS_Reset(void)
|
|
|
@@ -533,6 +633,7 @@ int CPosPrinter::POS_TextOut(string abc, bool is_double, int align_type)
|
|
|
char s2[3] = { 0x1C, 0x21, 0x0c };
|
|
|
WriteBuf(s2, 3);
|
|
|
}
|
|
|
+
|
|
|
else
|
|
|
{
|
|
|
char s1[3] = { 0x1B, 0x21, 0x00 };
|
|
|
@@ -547,16 +648,19 @@ int CPosPrinter::POS_TextOut(string abc, bool is_double, int align_type)
|
|
|
char s1[3] = { 0x1B, 0x61, 0x00 };
|
|
|
WriteBuf(s1, 3);
|
|
|
}
|
|
|
+
|
|
|
else if(align_type == 1)
|
|
|
{
|
|
|
char s1[3] = { 0x1B, 0x61, 0x01 };
|
|
|
WriteBuf(s1, 3);
|
|
|
}
|
|
|
+
|
|
|
else if(align_type == 2)
|
|
|
{
|
|
|
char s1[3] = { 0x1B, 0x61, 0x02 };
|
|
|
WriteBuf(s1, 3);
|
|
|
}
|
|
|
+
|
|
|
else
|
|
|
{
|
|
|
|
|
|
@@ -602,6 +706,7 @@ void CPosPrinter::CalWord(string s, int& nHanzi, int& nZimu)
|
|
|
|
|
|
nHanzi++;
|
|
|
}
|
|
|
+
|
|
|
else
|
|
|
{
|
|
|
//字母
|
|
|
@@ -610,7 +715,10 @@ void CPosPrinter::CalWord(string s, int& nHanzi, int& nZimu)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-std::vector<std::string>CPosPrinter::HandleFoodname(std::string oldname)
|
|
|
+/*
|
|
|
+ *规格 1:58mm 2:80mm
|
|
|
+ **/
|
|
|
+std::vector<std::string>CPosPrinter::HandleFoodname(std::string oldname, int guige)
|
|
|
{
|
|
|
std::vector<std::string> newnameArray;
|
|
|
|
|
|
@@ -620,13 +728,25 @@ std::vector<std::string>CPosPrinter::HandleFoodname(std::string oldname)
|
|
|
|
|
|
int nWidth = nHanzi * 2 + nZimu;
|
|
|
|
|
|
- if(nWidth <= 15)
|
|
|
+ int maxWidth;
|
|
|
+
|
|
|
+ if(guige == 1)
|
|
|
{
|
|
|
- //对于nWidth补空格
|
|
|
- for (int i = 0; i < 15 - nWidth; i++)
|
|
|
- {
|
|
|
- oldname += " ";
|
|
|
- }
|
|
|
+ maxWidth = 15;
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ maxWidth = 28;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(nWidth <= maxWidth)
|
|
|
+ {
|
|
|
+ //对于nWidth补空格
|
|
|
+ for(int i = 0; i < maxWidth - nWidth; i++)
|
|
|
+ {
|
|
|
+ oldname += " ";
|
|
|
+ }
|
|
|
|
|
|
newnameArray.push_back(oldname);
|
|
|
|
|
|
@@ -634,118 +754,232 @@ std::vector<std::string>CPosPrinter::HandleFoodname(std::string oldname)
|
|
|
}
|
|
|
|
|
|
//宽度大于15的情况,如果超过了,就要进行换行截取
|
|
|
- const char* s = oldname.c_str();
|
|
|
-
|
|
|
- int nTmp = 0;
|
|
|
- int nTotal = 0;
|
|
|
- while (*s++ != '\0')
|
|
|
- {
|
|
|
- nTmp++;
|
|
|
- nTotal++;
|
|
|
+ const char* s = oldname.c_str();
|
|
|
|
|
|
- if (!(*(s) >= 0 && *(s) <= 127))
|
|
|
- {
|
|
|
- //汉字的情况
|
|
|
- s++;
|
|
|
+ int nTmp = 0;
|
|
|
+ int nTotal = 0;
|
|
|
|
|
|
- nTmp++;
|
|
|
- nTotal++;
|
|
|
- }
|
|
|
+ while(*s++ != '\0')
|
|
|
+ {
|
|
|
+ nTmp++;
|
|
|
+ nTotal++;
|
|
|
|
|
|
- if (nTmp == 15)
|
|
|
- {
|
|
|
- //这里开始要换行了
|
|
|
- string newnameItem;
|
|
|
- newnameItem.assign(oldname, nTotal - nTmp, nTmp);
|
|
|
+ if(!(*(s) >= 0 && *(s) <= 127))
|
|
|
+ {
|
|
|
+ //汉字的情况
|
|
|
+ s++;
|
|
|
|
|
|
- newnameArray.push_back(newnameItem);
|
|
|
+ nTmp++;
|
|
|
+ nTotal++;
|
|
|
+ }
|
|
|
|
|
|
- nTmp = 0;
|
|
|
- }
|
|
|
- else if (nTmp == 14)
|
|
|
- {
|
|
|
- //如果是第14个了,判断下一个是不是中文,如果是的话也要换行
|
|
|
- if (!(*(s + 1) >= 0 && *(s + 1) <= 127))
|
|
|
- {
|
|
|
- //下一个是中文,也要换行了,补齐一个空格
|
|
|
- string newnameItem;
|
|
|
- newnameItem.assign(oldname, nTotal - nTmp, nTmp);
|
|
|
- newnameItem += " ";
|
|
|
-
|
|
|
- newnameArray.push_back(newnameItem);
|
|
|
-
|
|
|
- nTmp = 0;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ if(nTmp == maxWidth)
|
|
|
+ {
|
|
|
+ //这里开始要换行了
|
|
|
+ string newnameItem;
|
|
|
+ newnameItem.assign(oldname, nTotal - nTmp, nTmp);
|
|
|
|
|
|
- if (nTmp > 0)
|
|
|
- {
|
|
|
- //处理分隔后的最后一行
|
|
|
- string newnameItem;
|
|
|
- newnameItem.assign(oldname, nTotal - nTmp, nTmp);
|
|
|
+ newnameArray.push_back(newnameItem);
|
|
|
|
|
|
- for (int i = 0; i < 15 - nTmp; i++)
|
|
|
- {
|
|
|
- newnameItem += " ";
|
|
|
- }
|
|
|
+ nTmp = 0;
|
|
|
+ }
|
|
|
|
|
|
- newnameArray.push_back(newnameItem);
|
|
|
- }
|
|
|
+ else if(nTmp == maxWidth - 1)
|
|
|
+ {
|
|
|
+ //如果是第14个了,判断下一个是不是中文,如果是的话也要换行
|
|
|
+ if(!(*(s + 1) >= 0 && *(s + 1) <= 127))
|
|
|
+ {
|
|
|
+ //下一个是中文,也要换行了,补齐一个空格
|
|
|
+ string newnameItem;
|
|
|
+ newnameItem.assign(oldname, nTotal - nTmp, nTmp);
|
|
|
+ newnameItem += " ";
|
|
|
+
|
|
|
+ newnameArray.push_back(newnameItem);
|
|
|
|
|
|
- return newnameArray;
|
|
|
+ nTmp = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(nTmp > 0)
|
|
|
+ {
|
|
|
+ //处理分隔后的最后一行
|
|
|
+ string newnameItem;
|
|
|
+ newnameItem.assign(oldname, nTotal - nTmp, nTmp);
|
|
|
+
|
|
|
+ for(int i = 0; i < maxWidth - nTmp; i++)
|
|
|
+ {
|
|
|
+ newnameItem += " ";
|
|
|
+ }
|
|
|
+
|
|
|
+ newnameArray.push_back(newnameItem);
|
|
|
+ }
|
|
|
+
|
|
|
+ return newnameArray;
|
|
|
}
|
|
|
|
|
|
-std::string CPosPrinter::HandleFoodItemPrice(std::string oldprice)
|
|
|
+std::string CPosPrinter::HandleFoodItemPrice(std::string oldprice, int guige)
|
|
|
{
|
|
|
- double price = atof(oldprice.c_str());
|
|
|
+ double price = atof(oldprice.c_str());
|
|
|
|
|
|
- if (price < 10.00)
|
|
|
- {
|
|
|
- //单位数
|
|
|
- return " " + oldprice;
|
|
|
- }
|
|
|
- else if (price > 9.99 && price < 100.00)
|
|
|
- {
|
|
|
- //双位数
|
|
|
- return " " + oldprice;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- return " " + oldprice;
|
|
|
- }
|
|
|
+ if(price < 10.00)
|
|
|
+ {
|
|
|
+ //单位数
|
|
|
+ if(guige == 1)
|
|
|
+ {
|
|
|
+ return " " + oldprice;
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return " " + oldprice;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ else if(price > 9.99 && price < 100.00)
|
|
|
+ {
|
|
|
+ //双位数
|
|
|
+ if(guige == 1)
|
|
|
+ {
|
|
|
+ return " " + oldprice;
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return " " + oldprice;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ else if(price > 99.99 && price < 1000.00)
|
|
|
+ {
|
|
|
+ //三位数
|
|
|
+ if(guige == 1)
|
|
|
+ {
|
|
|
+ return " " + oldprice;
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return " " + oldprice;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //四位数
|
|
|
+ if(guige == 1)
|
|
|
+ {
|
|
|
+ return " " + oldprice;
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return " " + oldprice;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-std::string CPosPrinter::HandleFoodQuantity(std::string oldquantity)
|
|
|
+std::string CPosPrinter::HandleFoodQuantity(std::string oldquantity, int guige)
|
|
|
{
|
|
|
- int n = atoi(oldquantity.c_str());
|
|
|
+ int n = atoi(oldquantity.c_str());
|
|
|
|
|
|
- if (n < 10)
|
|
|
- {
|
|
|
- return " " + oldquantity;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- return " " + oldquantity;
|
|
|
- }
|
|
|
+ if(n < 10)
|
|
|
+ {
|
|
|
+ if(guige == 1)
|
|
|
+ {
|
|
|
+ return " " + oldquantity;
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return " " + oldquantity;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ else if(n >= 10 && n <= 99)
|
|
|
+ {
|
|
|
+ if(guige == 1)
|
|
|
+ {
|
|
|
+ return " " + oldquantity;
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return " " + oldquantity;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(guige == 1)
|
|
|
+ {
|
|
|
+ return "" + oldquantity;
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return " " + oldquantity;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-std::string CPosPrinter::HandleFoodTotalPrice(std::string oldprice)
|
|
|
+std::string CPosPrinter::HandleFoodTotalPrice(std::string oldprice, int guige)
|
|
|
{
|
|
|
- double price = atof(oldprice.c_str());
|
|
|
+ double price = atof(oldprice.c_str());
|
|
|
|
|
|
- if (price < 10.00)
|
|
|
- {
|
|
|
- //单位数
|
|
|
- return " " + oldprice;
|
|
|
- }
|
|
|
- else if (price > 9.99 && price < 100.00)
|
|
|
- {
|
|
|
- //双位数
|
|
|
- return " " + oldprice;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- return " " + oldprice;
|
|
|
- }
|
|
|
+ if(price < 10.00)
|
|
|
+ {
|
|
|
+ //单位数
|
|
|
+ if(guige == 1)
|
|
|
+ {
|
|
|
+ return " " + oldprice;
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return " " + oldprice;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ else if(price > 9.99 && price < 100.00)
|
|
|
+ {
|
|
|
+ //双位数
|
|
|
+ if(guige == 1)
|
|
|
+ {
|
|
|
+ return " " + oldprice;
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return " " + oldprice;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ else if(price > 99.99 && price < 1000.00)
|
|
|
+ {
|
|
|
+ //三位数
|
|
|
+ if(guige == 1)
|
|
|
+ {
|
|
|
+ return " " + oldprice;
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return " " + oldprice;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ //四位数
|
|
|
+ if(guige == 1)
|
|
|
+ {
|
|
|
+ return " " + oldprice;
|
|
|
+ }
|
|
|
+
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return " " + oldprice;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|