Browse Source

修复重复打印的问题

张洋 3 weeks ago
parent
commit
865fdec80a

+ 27 - 66
zhipuzi_pos_windows/worker/CPosPrinterWorker.cpp

@@ -87,17 +87,12 @@ void CPosPrinterWorker::HandleShouyinPrinter()
 			continue;
 		}
 
-		if (SendDataToShouyinPirnter(data))
-		{
-			std::lock_guard<std::mutex> lock(m_shouyin_printer_mutex);
-			if (!m_shouyin_printer_queue.empty() && m_shouyin_printer_queue.front() == data)
-			{
-				m_shouyin_printer_queue.pop();
-			}
-		}
-		else
+		SendDataToShouyinPirnter(data);
+
+		std::lock_guard<std::mutex> lock(m_shouyin_printer_mutex);
+		if (!m_shouyin_printer_queue.empty() && m_shouyin_printer_queue.front() == data)
 		{
-			Sleep(1000);
+			m_shouyin_printer_queue.pop();
 		}
 	}
 }
@@ -127,17 +122,12 @@ void CPosPrinterWorker::HandleBiaoqianPrinter()
 			continue;
 		}
 
-		if (SendDataToBiaoqianPirnter(data))
-		{
-			std::lock_guard<std::mutex> lock(m_biaoqian_printer_mutex);
-			if (!m_biaoqian_printer_queue.empty() && m_biaoqian_printer_queue.front() == data)
-			{
-				m_biaoqian_printer_queue.pop();
-			}
-		}
-		else
+		SendDataToBiaoqianPirnter(data);
+
+		std::lock_guard<std::mutex> lock(m_biaoqian_printer_mutex);
+		if (!m_biaoqian_printer_queue.empty() && m_biaoqian_printer_queue.front() == data)
 		{
-			Sleep(1000);
+			m_biaoqian_printer_queue.pop();
 		}
 	}
 }
@@ -165,25 +155,18 @@ void CPosPrinterWorker::HandleChufangPrinter()
 			continue;
 		}
 
-		if (SendDataToChufangPirnter(chufang_data))
-		{
-			std::lock_guard<std::mutex> lock(m_chufang_printer_mutex);
-			if (!m_chufang_printer_queue.empty())
-			{
-				m_chufang_printer_queue.pop();
-			}
-		}
-		else
+		SendDataToChufangPirnter(chufang_data);
+
+		std::lock_guard<std::mutex> lock(m_chufang_printer_mutex);
+		if (!m_chufang_printer_queue.empty())
 		{
-			Sleep(1000);
+			m_chufang_printer_queue.pop();
 		}
 	}
 }
 
-bool CPosPrinterWorker::SendDataToShouyinPirnter(std::string data)
+void CPosPrinterWorker::SendDataToShouyinPirnter(std::string data)
 {
-	bool bSuccess = false;
-
 	//默认是句柄模式
 	int nType = 1;
 
@@ -203,7 +186,7 @@ bool CPosPrinterWorker::SendDataToShouyinPirnter(std::string data)
 
 		if (m_hShouyinPorts.size() == 0)
 		{
-			return false;
+			return;
 		}
 	}
 	else if (printer_leixing == "usb")
@@ -214,7 +197,7 @@ bool CPosPrinterWorker::SendDataToShouyinPirnter(std::string data)
 		bool ret = InitOneUsb(ws_printer_usb, 1);
 		if (ret == false)
 		{
-			return false;
+			return;
 		}
 	}
 	else if (printer_leixing == "bingkou")
@@ -222,7 +205,7 @@ bool CPosPrinterWorker::SendDataToShouyinPirnter(std::string data)
 		bool ret = InitBingkou();
 		if (ret == false)
 		{
-			return false;
+			return;
 		}
 	}
 	else if (printer_leixing == "chuankou")
@@ -248,15 +231,13 @@ bool CPosPrinterWorker::SendDataToShouyinPirnter(std::string data)
 			LOG_INFO("网口打印机连接失败,IP地址:" << wangkou_ip.c_str() << ",错误信息:" << err.c_str());
 
 			MessageBoxW(NULL, (L"小票网口打印机连接失败,IP地址:" + CLewaimaiString::UTF8ToUnicode(wangkou_ip)).c_str(), L"打印机连接失败", MB_OK);
-			return false;
+			return;
 		}
 	}
 
 	//开始发送数据
 	if (nType == 1)
 	{
-		bSuccess = true;
-
 		//USB、串口、并口,走这里
 		for (std::vector<HANDLE>::iterator it = m_hShouyinPorts.begin(); it != m_hShouyinPorts.end(); it++)
 		{
@@ -268,8 +249,7 @@ bool CPosPrinterWorker::SendDataToShouyinPirnter(std::string data)
 			if (!ret || dwWrite != (DWORD)data.length())
 			{
 				LOG_INFO("WriteWithTimeout Failed or partial write!, hPort:" << hPort << ", dwWrite:" << dwWrite);
-				bSuccess = false;
-				break;
+				continue;
 			}
 		}
 	}
@@ -279,12 +259,10 @@ bool CPosPrinterWorker::SendDataToShouyinPirnter(std::string data)
 		try
 		{
 			boost::asio::write(m_socket, boost::asio::buffer(data.c_str(), data.length()));
-			bSuccess = true;
 		}
 		catch (const std::exception& e)
 		{
 			LOG_INFO("网口打印机发送消息失败,错误信息:" << e.what());
-			bSuccess = false;
 		}
 	}
 
@@ -301,14 +279,10 @@ bool CPosPrinterWorker::SendDataToShouyinPirnter(std::string data)
 	{
 		m_socket.close();
 	}
-
-	return bSuccess;
 }
 
-bool CPosPrinterWorker::SendDataToBiaoqianPirnter(std::string data)
+void CPosPrinterWorker::SendDataToBiaoqianPirnter(std::string data)
 {
-	bool bSuccess = false;
-
 	//默认是句柄模式
 	int nType = 1;
 	
@@ -327,7 +301,7 @@ bool CPosPrinterWorker::SendDataToBiaoqianPirnter(std::string data)
 		bool ret = InitOneUsb(ws_printer_usb, 2);
 		if (ret == false)
 		{
-			return false;
+			return;
 		}
 	}
 	else if (printer_leixing == "wangkou")
@@ -349,7 +323,7 @@ bool CPosPrinterWorker::SendDataToBiaoqianPirnter(std::string data)
 			LOG_INFO("网口打印机连接失败,IP地址:" << wangkou_ip.c_str() << ",错误信息:" << err.c_str());
 
 			MessageBoxW(NULL, (L"标签网口打印机连接失败,IP地址:" + CLewaimaiString::UTF8ToUnicode(wangkou_ip)).c_str(), L"打印机连接失败", MB_OK);
-			return false;
+			return;
 		}
 	}
 
@@ -367,8 +341,7 @@ bool CPosPrinterWorker::SendDataToBiaoqianPirnter(std::string data)
 			if (!ret || dwWrite != (DWORD)data.length())
 			{
 				LOG_INFO("WriteWithTimeout Failed or partial write!, hPort:" << hPort << ", dwWrite:" << dwWrite);
-				bSuccess = false;
-				break;
+				continue;
 			}
 		}
 	}
@@ -378,12 +351,10 @@ bool CPosPrinterWorker::SendDataToBiaoqianPirnter(std::string data)
 		try
 		{
 			boost::asio::write(m_socket, boost::asio::buffer(data.c_str(), data.length()));
-			bSuccess = true;
 		}
 		catch (const std::exception& e)
 		{
 			LOG_INFO("网口打印机发送消息失败,错误信息:" << e.what());
-			bSuccess = false;
 		}
 	}
 
@@ -399,14 +370,10 @@ bool CPosPrinterWorker::SendDataToBiaoqianPirnter(std::string data)
 	{
 		m_socket.close();
 	}
-
-	return bSuccess;
 }
 
-bool CPosPrinterWorker::SendDataToChufangPirnter(ChufangPrinterContent chufang_data)
+void CPosPrinterWorker::SendDataToChufangPirnter(ChufangPrinterContent chufang_data)
 {
-	bool bSuccess = false;
-
 	boost::asio::io_context m_io;
 	boost::asio::ip::tcp::socket m_socket(m_io);
 
@@ -428,26 +395,20 @@ bool CPosPrinterWorker::SendDataToChufangPirnter(ChufangPrinterContent chufang_d
 		LOG_INFO("厨房网口打印机连接失败,IP地址:" << ip.c_str() << ",错误信息:" << err.c_str());
 
 		MessageBoxW(NULL, (L"厨房网口打印机连接失败,IP地址:" + CLewaimaiString::UTF8ToUnicode(ip)).c_str(), L"打印机连接失败", MB_OK);
-
-		//连接失败了,处理下一个厨房打印机
-		return false;
+		return;
 	}
 
 	//网口走这里
 	try
 	{
 		boost::asio::write(m_socket, boost::asio::buffer(data.c_str(), data.length()));
-		bSuccess = true;
 	}
 	catch (const std::exception& e)
 	{
 		LOG_INFO("网口打印机发送消息失败,错误信息:" << e.what());
-		bSuccess = false;
 	}
 
 	m_socket.close();
-
-	return bSuccess;
 }
 
 //自动识别用于收银小票的USB打印机列表

+ 3 - 3
zhipuzi_pos_windows/worker/CPosPrinterWorker.h

@@ -30,9 +30,9 @@ public:
 	void HandleChufangPrinter();
 
 	//执行实际的数据往打印机的发送
-	bool SendDataToShouyinPirnter(std::string data);
-	bool SendDataToBiaoqianPirnter(std::string data);
-	bool SendDataToChufangPirnter(ChufangPrinterContent chufang_data);
+	void SendDataToShouyinPirnter(std::string data);
+	void SendDataToBiaoqianPirnter(std::string data);
+	void SendDataToChufangPirnter(ChufangPrinterContent chufang_data);
 
 	//获取当前电脑上所有的打印usb设备
 	std::vector<std::wstring> getUsbDevices();