Bladeren bron

完成交班单

zhangyang 5 jaren geleden
bovenliggende
commit
a1d0834333

+ 58 - 0
bin/Win32/Debug/zhipuzi_pay_plugin/skin/jiaoban_wnd.xml

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window size="800,600" caption="0,0,0,44" roundcorner="4,4">
+	<Font id="0" name="微软雅黑" size="16"/>
+	<Font id="1" name="微软雅黑" size="40"/>
+	<Font id="2" name="微软雅黑" size="18"/>
+	<Font id="3" name="微软雅黑" size="32"/>
+	<VerticalLayout bkimage="shoukuan_bkg.png">
+		<HorizontalLayout name="jiaoban_title_bkg" height="44" bkcolor="0xFF3CB371">
+			<Label name="jiaoban_title" text="交班" height="44" align="center" valign="center" padding="0,0,0,0" textcolor="#FFFFFFFF" font="2"/>
+			<Button name="jiaoban_closebtn" padding="0,13,15,0" width="16" height="16" tooltip="关闭" normalimage="file='close_normal.png'" hotimage="file='close_hover.png'" pushedimage="file='close_normal.png'"/>
+		</HorizontalLayout>
+		<HorizontalLayout height="60" padding="0,20,0,0">
+			<Label text="当前状态:" width="100" padding="30,0,0,0" font="2"></Label>
+			<Label name="jiaoban_status" width="80" font="2"></Label>
+			
+			<Label name="jiaoban_shangban_time_title" text="上班时间:" width="100" padding="50,0,0,0" font="2"></Label>
+			<Label name="jiaoban_shangban_time" width="200" font="2"></Label>
+			<Control></Control>
+		</HorizontalLayout>
+		<VerticalLayout name="jiaoban_work_info" height="350">
+			<HorizontalLayout height="60" padding="0,50,0,0">
+				<Control width="200"></Control>
+				<Label text="微信支付" width="200" font="2"></Label>
+				<Label name="jiaoban_weixin_num" text="0笔" width="100" font="2"></Label>
+				<Label name="jiaoban_weixin_value" text="0元" width="150" font="2" textcolor="FFFF0000"></Label>
+				<Control></Control>
+			</HorizontalLayout>
+			<HorizontalLayout height="60" padding="0,20,0,0">
+				<Control width="200"></Control>
+				<Label text="支付宝" width="200" font="2"></Label>
+				<Label name="jiaoban_zhifubao_num" text="0笔" width="100" font="2"></Label>
+				<Label name="jiaoban_zhifubao_value" text="0元" width="150" font="2" textcolor="FFFF0000"></Label>
+				<Control></Control>
+			</HorizontalLayout>
+			<HorizontalLayout height="60" padding="0,20,0,0">
+				<Control width="200"></Control>
+				<Label text="云闪付" width="200" font="2"></Label>
+				<Label name="jiaoban_yunshanfu_num" text="0笔" width="100" font="2"></Label>
+				<Label name="jiaoban_yunshanfu_value" text="0元" width="150" font="2" textcolor="FFFF0000"></Label>
+				<Control></Control>
+			</HorizontalLayout>
+			<HorizontalLayout height="60" padding="0,20,0,0">
+				<Control width="200"></Control>
+				<Label text="退款" width="200" font="2"></Label>
+				<Label name="jiaoban_tuikuan_num" text="0笔" width="100" font="2"></Label>
+				<Label name="jiaoban_tuikuan_value" text="0元" width="150" font="2" textcolor="FFFF0000"></Label>
+				<Control></Control>
+			</HorizontalLayout>
+		</VerticalLayout>
+		<VerticalLayout name="jiaoban_work_info_attention" height="350">
+			<Label text="您还未开始上班,点击【上班】按钮即可开工啦~!" font="2" align="center" padding="0,130,0,0"></Label>
+		</VerticalLayout>
+		<HorizontalLayout>
+			<Button name="jiaoban_shangban" width="150" height="42" padding="30,30,0,0" text="上班" textcolor="#FFFFFFFF" normalimage="file='Btn_Green.png' corner='5,5,5,5'" hotimage="file='Btn_Green_Hover.png' corner='5,5,5,5'" pushedimage="file='Btn_Green_Click.png' corner='5,5,5,5'" />
+			<Button name="jiaoban_xiaban" width="150" height="42" padding="30,30,0,0" text="下班" textcolor="#FFFFFFFF" normalimage="file='Btn_Red.png' corner='5,5,5,5'" hotimage="file='Btn_Red_Hover.png' corner='5,5,5,5'" pushedimage="file='Btn_Red_Click.png' corner='5,5,5,5'" />
+		</HorizontalLayout>
+	</VerticalLayout>
+</Window>

+ 22 - 4
zhipuzi_pay_plugin/network/CMessagePush.cpp

@@ -23,7 +23,7 @@ void CMessagePush::Stop()
     m_is_work = false;
 }
 
-void CMessagePush::AddPinter(std::string out_order_no, int print_type)
+void CMessagePush::AddPrinter(std::string out_order_no, int print_type)
 {
     m_printer_mutex.lock();
 
@@ -36,6 +36,19 @@ void CMessagePush::AddPinter(std::string out_order_no, int print_type)
     m_printer_mutex.unlock();
 }
 
+void CMessagePush::AddPrinter(CJiaobanMessage message)
+{
+	m_printer_mutex.lock();
+
+	ShouyinPinterInfo newPrinter;
+	newPrinter.print_type = 4;
+	newPrinter.message = message;
+
+	m_printer_queue.push(newPrinter);
+
+	m_printer_mutex.unlock();
+}
+
 
 void CMessagePush::HandlePrinter()
 {
@@ -77,13 +90,18 @@ void CMessagePush::HandlePrinter()
 			CPosPrinter printer;
 			printer.PrintTuikuan(order);
 		}
-        else
+        else if (print_type == 3)
         {
 			//打印测试的订单
 			CPosPrinter printer;
-			printer.PrintTest();
-			
+			printer.PrintTest();			
         }
+		else if (print_type == 4)
+		{
+			//打印交班单
+			CPosPrinter printer;
+			printer.PrintJiaoban(printerInfo.message);
+		}
     }
 
     AddStopNum();

+ 8 - 2
zhipuzi_pay_plugin/network/CMessagePush.h

@@ -3,11 +3,16 @@
 #include "../pch/pch.h"
 #include "../order/CShouyinOrder.h"
 
+#include "../tool/CJiaobanMessage.h"
+
 class ShouyinPinterInfo
 {
 public:
     std::string out_order_no;
-    int print_type; //打印类型 1:支付成功 2:退款成功 3:打印测试
+    int print_type; //打印类型 1:支付成功 2:退款成功 3:打印测试 4:交班单
+
+	//print_type为4的时候使用
+	CJiaobanMessage message;
 };
 
 class CMessagePush
@@ -29,7 +34,8 @@ public:
     //队列处理
     void HandlePrinter();
 
-    void AddPinter(std::string out_order_no, int print_type);
+    void AddPrinter(std::string out_order_no, int print_type);
+	void AddPrinter(CJiaobanMessage message);
 
 private:
     void AddStopNum();

+ 25 - 0
zhipuzi_pay_plugin/tool/CJiaobanMessage.h

@@ -0,0 +1,25 @@
+#pragma once
+
+#include "../pch/pch.h"
+
+class CJiaobanMessage
+{
+public:
+	std::string weixin_num;
+	std::string weixin_value;
+	
+	std::string zhifubao_num;
+	std::string zhifubao_value;
+
+	std::string yunshanfu_num;
+	std::string yunshanfu_value;
+
+	std::string tuikuan_num;
+	std::string tuikuan_value;
+
+	std::string shop_name;
+	std::string shouyinyuan;
+
+	std::string strat_time;
+	std::string end_time;
+};

+ 440 - 1
zhipuzi_pay_plugin/tool/CPosPrinter.cpp

@@ -483,9 +483,17 @@ void CPosPrinter::PrintTest()
 	{
 		POS_Reset();
 
-		//走纸几行再切
+		//打印店铺名字
+		string test_title = "打印测试";
+		POS_TextOut(test_title, true, true, 1);
+
 		POS_FeedLine();
 		POS_FeedLine();
+
+		string test_info = "您的打印机已连接成功!";
+		POS_TextOut(test_info, false, false, 1);
+
+		POS_FeedLine();
 		POS_FeedLine();
 		POS_FeedLine();
 		POS_FeedLine();
@@ -510,12 +518,443 @@ void CPosPrinter::PrintTest()
 
 void CPosPrinter::PrintZhifu(CShouyinOrder& order)
 {
+	//设置模式,后面输出数据不会错
+	m_type = 1;
+
+	std::string printer_leixing = CSetting::GetParam("system_setting_dayinji_setting_type");
+
+	if (printer_leixing == "1")
+	{
+		//usb模式
+		std::string printer_usb = CSetting::GetParam("system_setting_dayinji_usb_port");
+		std::wstring ws_printer_usb = CLewaimaiString::UTF8ToUnicode(printer_usb);
+
+		bool ret = InitOneUsb(ws_printer_usb);
+		if (ret == false)
+		{
+			return;
+		}
+	}
+	else if (printer_leixing == "2")
+	{
+		//串口
+		InitCom();
+	}
+	else if (printer_leixing == "3")
+	{
+		//并口
+		bool ret = InitBingkou();
+		if (ret == false)
+		{
+			return;
+		}
+	}
+	else if (printer_leixing == "4")
+	{
+		//网口
+		m_type = 2;
+
+		std::string wangkou_ip = CSetting::GetParam("system_setting_dayinji_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());
+		}
+	}
+
+	//打印联数
+	int printer_num = atoi(CSetting::GetParam("system_setting_dayinji_setting_num").c_str());
+
+	//正式开始打印
+	for (int i = 0; i < printer_num; i++)
+	{
+		POS_Reset();
+
+		//打印店铺名字
+		string test_title = "收款凭证";
+		POS_TextOut(test_title, false, false, 1);
+		POS_FeedLine();
+
+		//分割线
+		string lines = "--------------------------------";
+
+		POS_TextOut(lines);
+		POS_FeedLine();
+
+		std::string zhifu_type = "交易类型:" + CLewaimaiString::UTF8ToANSI(order.m_zhifu_type);
+		POS_TextOut(zhifu_type);
+		POS_FeedLine();
+
+		std::string zhifu_value = "收款金额:" + CLewaimaiString::UTF8ToANSI(order.m_value);
+		POS_TextOut(zhifu_value);
+		POS_FeedLine();
+
+		//分割线
+		POS_TextOut(lines);
+		POS_FeedLine();
+
+		//订单号
+		std::string out_trade_no = "订 单 号:" + CLewaimaiString::UTF8ToANSI(order.m_out_trade_no);
+		POS_TextOut(out_trade_no);
+		POS_FeedLine();
+
+		//收款店铺
+		std::string shopname = "收款店铺:" + CLewaimaiString::UTF8ToANSI(order.m_shopname);
+		POS_TextOut(shopname);
+		POS_FeedLine();
 
+		//收银员
+		std::string shouyinyuan = "收 银 员:" + CLewaimaiString::UTF8ToANSI(order.m_shouyinyuanname);
+		POS_TextOut(shouyinyuan);
+		POS_FeedLine();
+
+		//日期
+		std::string init_time = "收款日期:" + CLewaimaiString::UTF8ToANSI(order.m_init_time);
+		POS_TextOut(init_time);
+		POS_FeedLine();
+
+		POS_FeedLine();
+		POS_FeedLine();
+		POS_FeedLine();
+
+		//打印空行
+		int printer_konghang = atoi(CSetting::GetParam("system_setting_dayinji_setting_konghang").c_str());
+		for (int i = 0; i < printer_konghang; i++)
+		{
+			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();
+	}
 }
 
 void CPosPrinter::PrintTuikuan(CShouyinOrder& order)
 {
+	//设置模式,后面输出数据不会错
+	m_type = 1;
+
+	std::string printer_leixing = CSetting::GetParam("system_setting_dayinji_setting_type");
+
+	if (printer_leixing == "1")
+	{
+		//usb模式
+		std::string printer_usb = CSetting::GetParam("system_setting_dayinji_usb_port");
+		std::wstring ws_printer_usb = CLewaimaiString::UTF8ToUnicode(printer_usb);
 
+		bool ret = InitOneUsb(ws_printer_usb);
+		if (ret == false)
+		{
+			return;
+		}
+	}
+	else if (printer_leixing == "2")
+	{
+		//串口
+		InitCom();
+	}
+	else if (printer_leixing == "3")
+	{
+		//并口
+		bool ret = InitBingkou();
+		if (ret == false)
+		{
+			return;
+		}
+	}
+	else if (printer_leixing == "4")
+	{
+		//网口
+		m_type = 2;
+
+		std::string wangkou_ip = CSetting::GetParam("system_setting_dayinji_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());
+		}
+	}
+
+	//打印联数
+	int printer_num = atoi(CSetting::GetParam("system_setting_dayinji_setting_num").c_str());
+
+	//正式开始打印
+	for (int i = 0; i < printer_num; i++)
+	{
+		POS_Reset();
+
+		//打印店铺名字
+		string test_title = "退款凭证";
+		POS_TextOut(test_title, false, false, 1);
+		POS_FeedLine();
+
+		//分割线
+		string lines = "--------------------------------";
+
+		POS_TextOut(lines);
+		POS_FeedLine();
+
+		std::string zhifu_type = "交易类型:" + CLewaimaiString::UTF8ToANSI(order.m_zhifu_type);
+		POS_TextOut(zhifu_type);
+		POS_FeedLine();
+
+		std::string zhifu_value = "退款金额:" + CLewaimaiString::UTF8ToANSI(order.m_refund_money);
+		POS_TextOut(zhifu_value);
+		POS_FeedLine();
+
+		//分割线
+		POS_TextOut(lines);
+		POS_FeedLine();
+
+		//订单号
+		std::string out_trade_no = "订 单 号:" + CLewaimaiString::UTF8ToANSI(order.m_out_trade_no);
+		POS_TextOut(out_trade_no);
+		POS_FeedLine();
+
+		//退款号
+		std::string refund_trade_no = "退 款 号:" + CLewaimaiString::UTF8ToANSI(order.m_refund_trade_no);
+		POS_TextOut(refund_trade_no);
+		POS_FeedLine();
+
+		//收款店铺
+		std::string shopname = "收款店铺:" + CLewaimaiString::UTF8ToANSI(order.m_shopname);
+		POS_TextOut(shopname);
+		POS_FeedLine();
+
+		//收银员
+		std::string shouyinyuan = "收 银 员:" + CLewaimaiString::UTF8ToANSI(order.m_shouyinyuanname);
+		POS_TextOut(shouyinyuan);
+		POS_FeedLine();
+
+		//日期
+		std::string init_time = "退款日期:" + CLewaimaiString::UTF8ToANSI(order.m_refund_time);
+		POS_TextOut(init_time);
+		POS_FeedLine();
+
+		POS_FeedLine();
+		POS_FeedLine();
+		POS_FeedLine();
+
+		//打印空行
+		int printer_konghang = atoi(CSetting::GetParam("system_setting_dayinji_setting_konghang").c_str());
+		for (int i = 0; i < printer_konghang; i++)
+		{
+			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();
+	}
+}
+
+void CPosPrinter::PrintJiaoban(CJiaobanMessage& message)
+{
+	//设置模式,后面输出数据不会错
+	m_type = 1;
+
+	std::string printer_leixing = CSetting::GetParam("system_setting_dayinji_setting_type");
+
+	if (printer_leixing == "1")
+	{
+		//usb模式
+		std::string printer_usb = CSetting::GetParam("system_setting_dayinji_usb_port");
+		std::wstring ws_printer_usb = CLewaimaiString::UTF8ToUnicode(printer_usb);
+
+		bool ret = InitOneUsb(ws_printer_usb);
+		if (ret == false)
+		{
+			return;
+		}
+	}
+	else if (printer_leixing == "2")
+	{
+		//串口
+		InitCom();
+	}
+	else if (printer_leixing == "3")
+	{
+		//并口
+		bool ret = InitBingkou();
+		if (ret == false)
+		{
+			return;
+		}
+	}
+	else if (printer_leixing == "4")
+	{
+		//网口
+		m_type = 2;
+
+		std::string wangkou_ip = CSetting::GetParam("system_setting_dayinji_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());
+		}
+	}
+
+	//打印联数
+	int printer_num = atoi(CSetting::GetParam("system_setting_dayinji_setting_num").c_str());
+
+	POS_Reset();
+
+	//打印店铺名字
+	string test_title = "交班单";
+	POS_TextOut(test_title, false, false, 1);
+	POS_FeedLine();
+
+	//分割线
+	string lines = "--------------------------------";
+
+	POS_TextOut(lines);
+	POS_FeedLine();
+
+	POS_TextOut("收款详情", false, false, 1);
+	POS_FeedLine();
+
+	std::string weixin_num = "微信支付:" + CLewaimaiString::UTF8ToANSI(message.weixin_num) + "笔";
+	POS_TextOut(weixin_num);
+	POS_FeedLine();
+
+	std::string weixin_value = "微信支付金额:" + CLewaimaiString::UTF8ToANSI(message.weixin_value) + "元";
+	POS_TextOut(weixin_value);
+	POS_FeedLine();
+
+	std::string zhifubao_num = "支付宝:" + CLewaimaiString::UTF8ToANSI(message.zhifubao_num) + "笔";
+	POS_TextOut(zhifubao_num);
+	POS_FeedLine();
+
+	std::string zhifubao_value = "支付宝金额:" + CLewaimaiString::UTF8ToANSI(message.zhifubao_value) + "元";
+	POS_TextOut(zhifubao_value);
+	POS_FeedLine();
+
+	std::string yunshanfu_num = "云闪付:" + CLewaimaiString::UTF8ToANSI(message.yunshanfu_num) + "笔";
+	POS_TextOut(yunshanfu_num);
+	POS_FeedLine();
+
+	std::string yunshanfu_value = "云闪付金额:" + CLewaimaiString::UTF8ToANSI(message.yunshanfu_value) + "元";
+	POS_TextOut(yunshanfu_value);
+	POS_FeedLine();
+
+	POS_FeedLine();
+
+	int total_num = atoi(message.weixin_num.c_str()) + atoi(message.zhifubao_num.c_str()) + atoi(message.yunshanfu_num.c_str());
+	double total_value = atof(message.weixin_value.c_str()) + atof(message.zhifubao_value.c_str()) + atof(message.yunshanfu_value.c_str());
+
+	std::string s_total_num = "合计笔数:" + to_string(total_num) + "笔";
+	POS_TextOut(s_total_num);
+	POS_FeedLine();
+
+	std::string s_total_value = "合计金额:" + CLewaimaiString::DoubleToString(total_value, 2) + "元";
+	POS_TextOut(s_total_value);
+	POS_FeedLine();
+
+	//分割线
+	POS_TextOut(lines);
+	POS_FeedLine();
+
+	POS_TextOut("退款详情", false, false, 1);
+	POS_FeedLine();
+
+	std::string tuikuan_num = "退款:" + CLewaimaiString::UTF8ToANSI(message.tuikuan_num) + "笔";
+	POS_TextOut(tuikuan_num);
+	POS_FeedLine();
+
+	std::string tuikuan_value = "退款金额:" + CLewaimaiString::UTF8ToANSI(message.tuikuan_value) + "元";
+	POS_TextOut(tuikuan_value);
+	POS_FeedLine();
+
+	//分割线
+	POS_TextOut(lines);
+	POS_FeedLine();
+
+	//日期
+	std::string start_time = "开始时间:" + CLewaimaiString::UTF8ToANSI(message.strat_time);
+	POS_TextOut(start_time);
+	POS_FeedLine();
+
+	std::string end_time = "结束时间:" + CLewaimaiString::UTF8ToANSI(message.end_time);
+	POS_TextOut(end_time);
+	POS_FeedLine();
+
+	//收款店铺
+	std::string shopname = "交班店铺:" + CLewaimaiString::UTF8ToANSI(message.shop_name);
+	POS_TextOut(shopname);
+	POS_FeedLine();
+
+	//收银员
+	std::string shouyinyuan = "收 银 员:" + CLewaimaiString::UTF8ToANSI(message.shouyinyuan);
+	POS_TextOut(shouyinyuan);
+	POS_FeedLine();
+
+	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();
+	}
 }
 
 std::vector<std::wstring> CPosPrinter::getUsbDevices()

+ 3 - 0
zhipuzi_pay_plugin/tool/CPosPrinter.h

@@ -3,6 +3,8 @@
 #include "../pch/pch.h"
 #include "../order/CShouyinOrder.h"
 
+#include "../tool/CJiaobanMessage.h"
+
 //SetupDiGetInterfaceDeviceDetail所需要的输出长度,定义足够大
 #define INTERFACE_DETAIL_SIZE 1024
 
@@ -29,6 +31,7 @@ public:
 	void PrintTest();
 	void PrintZhifu(CShouyinOrder& order);
 	void PrintTuikuan(CShouyinOrder& order);
+	void PrintJiaoban(CJiaobanMessage& message);
 
 	//usb打印机的类型 1:收银小票打印机 2:标签打印机
 	void InitUsb(int usbType = 1);

+ 14 - 0
zhipuzi_pay_plugin/tool/CSetting.cpp

@@ -219,6 +219,20 @@ void CSetting::Init()
 		m_paramsMap[system_setting_dayinji_wangkou_ip] = "";
 	}
 
+	//当前的上班状态
+	std::string jiaoban_is_work = "jiaoban_is_work";
+	if (m_paramsMap.find(jiaoban_is_work) == m_paramsMap.end())
+	{
+		m_paramsMap[jiaoban_is_work] = "0";
+	}
+
+	//上班时间
+	std::string jiaoban_shangban_time = "jiaoban_shangban_time";
+	if (m_paramsMap.find(jiaoban_shangban_time) == m_paramsMap.end())
+	{
+		m_paramsMap[jiaoban_shangban_time] = "";
+	}
+
     m_mutex.unlock();
 
     //设置好默认参数之后,将默认参数写回到数据库

+ 453 - 0
zhipuzi_pay_plugin/wnd/CJiaobanWnd.cpp

@@ -0,0 +1,453 @@
+#include "../pch/pch.h"
+#include "CJiaobanWnd.h"
+
+#include "../control/ControlEx.h"
+#include "../tool/CComHelper.h"
+
+#include "CValueWnd.h"
+
+#include "../helper/CBitmapHelper.h"
+
+void CJiaobanWnd::Init()
+{
+	::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
+
+	//判断当前是否上班状态
+	int is_work = atoi(CSetting::GetParam("jiaoban_is_work").c_str());
+
+	CLabelUI* pWorkStatus = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_status")));
+
+	CLabelUI* pShangbanTimeTitle = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_shangban_time_title")));
+	CLabelUI* pShangbanTime = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_shangban_time")));
+
+	CButtonUI* pShangbanBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("jiaoban_shangban")));
+	CButtonUI* pXiabanBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("jiaoban_xiaban")));
+
+	CVerticalLayoutUI* pWorkInfo = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("jiaoban_work_info")));
+	CVerticalLayoutUI* pWorkInfoAttention = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("jiaoban_work_info_attention")));
+	if (is_work)
+	{
+		pWorkStatus->SetText(L"值班中");
+		pWorkStatus->SetTextColor(0xFF00FF00);
+
+		pShangbanTimeTitle->SetVisible(true);
+		pShangbanTime->SetVisible(true);
+
+		//判断上班时间是否已经超过3天,如果超过了把上班时间改为当前时间
+
+
+		std::string shangban_time = CSetting::GetParam("jiaoban_shangban_time");
+		pShangbanTime->SetText(CLewaimaiString::UTF8ToUnicode(shangban_time).c_str());
+
+		m_start_time = shangban_time;
+
+		pShangbanBtn->SetVisible(false);
+		pXiabanBtn->SetVisible(true);
+
+		pWorkInfo->SetVisible(true);
+		pWorkInfoAttention->SetVisible(false);
+
+		StartQuery();
+	}
+	else
+	{
+		pWorkStatus->SetText(L"休息中");
+		pWorkStatus->SetTextColor(0xFFFF0000);
+
+		pShangbanTimeTitle->SetVisible(false);
+		pShangbanTime->SetVisible(false);
+
+		pShangbanBtn->SetVisible(true);
+		pXiabanBtn->SetVisible(false);
+
+		pWorkInfo->SetVisible(false);
+		pWorkInfoAttention->SetVisible(true);
+	}
+}
+
+LRESULT CJiaobanWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
+	styleValue &= ~WS_CAPTION;
+	::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
+
+	// 把自己的窗口句柄与窗口绘制管理器挂接在一起
+	m_pm.Init(m_hWnd);
+	m_pm.AddPreMessageFilter(this);
+
+	//页面内有自定义控件的,必须要加这2个
+	CDialogBuilder builder;
+	CDialogBuilderCallbackEx cb;
+
+	CControlUI* pRoot = builder.Create(_T("jiaoban_wnd.xml"), (UINT)0, &cb, &m_pm);
+	ASSERT(pRoot && "Failed to parse XML");
+
+	// 把这些控件绘制到本窗口上
+	m_pm.AttachDialog(pRoot);
+
+	// 把自己加入到CPaintManagerUI的m_aNotifiers数组中,用于处理Notify函数
+	m_pm.AddNotifier(this);
+
+	Init();
+
+	return 0;
+}
+
+LRESULT CJiaobanWnd::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	POINT pt;
+	pt.x = GET_X_LPARAM(lParam);
+	pt.y = GET_Y_LPARAM(lParam);
+	::ScreenToClient(*this, &pt);
+
+	RECT rcClient;
+	::GetClientRect(*this, &rcClient);
+
+	RECT rcCaption = m_pm.GetCaptionRect();
+	if (pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right \
+		&& pt.y >= rcCaption.top && pt.y < rcCaption.bottom)
+	{
+		CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(pt));
+		if (pControl && _tcscmp(pControl->GetClass(), DUI_CTR_BUTTON) != 0)
+		{
+			return HTCAPTION;
+		}
+	}
+
+	return HTCLIENT;
+}
+
+LRESULT CJiaobanWnd::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	SIZE szRoundCorner = m_pm.GetRoundCorner();
+	if (!::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0))
+	{
+		CDuiRect rcWnd;
+		::GetWindowRect(*this, &rcWnd);
+		rcWnd.Offset(-rcWnd.left, -rcWnd.top);
+		rcWnd.right++;
+		rcWnd.bottom++;
+		HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy);
+		::SetWindowRgn(*this, hRgn, TRUE);
+		::DeleteObject(hRgn);
+	}
+
+	bHandled = FALSE;
+	return 0;
+}
+
+LRESULT CJiaobanWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	LRESULT lRes = 0;
+	BOOL bHandled = TRUE;
+	switch (uMsg)
+	{
+	case WM_CREATE:
+		lRes = OnCreate(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCACTIVATE:
+		lRes = OnNcActivate(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCCALCSIZE:
+		lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCPAINT:
+		lRes = OnNcPaint(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCHITTEST:
+		lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_SIZE:
+		lRes = OnSize(uMsg, wParam, lParam, bHandled);
+		break;
+	default:
+		bHandled = FALSE;
+	}
+	if (bHandled)
+	{
+		return lRes;
+	}
+	if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes))
+	{
+		return lRes;
+	}
+	return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
+}
+
+LRESULT CJiaobanWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
+{
+
+	return false;
+}
+
+
+void CJiaobanWnd::Notify(TNotifyUI& msg)
+{
+	if (msg.sType == _T("windowinit"))
+	{
+		OnPrepare();
+	}
+
+	else if (msg.sType == _T("click"))
+	{
+		HandleClickMsg(msg);
+	}
+
+	else if (msg.sType == _T("selectchanged"))
+	{
+		HandleSelectChangeMsg(msg);
+	}
+
+	else if (msg.sType == _T("itemclick"))
+	{
+
+	}
+	else if (msg.sType == _T("itemactivate"))
+	{
+
+	}
+	else if (msg.sType == _T("itemselect"))
+	{
+		HandleItemSelectMsg(msg);
+	}
+	else if (msg.sType == _T("setfocus"))
+	{
+		if (msg.pSender->GetName() == L"kuaijiejian_setting_jiesuan_edit")
+		{
+			SetFocus(m_hWnd);
+		}
+	}
+}
+
+void CJiaobanWnd::HandleClickMsg(TNotifyUI& msg)
+{
+	DuiLib::CDuiString senderName = msg.pSender->GetName();
+
+	if (senderName == _T("jiaoban_closebtn"))
+	{
+		Close(IDCANCEL);
+		return;
+	}
+	else if (senderName == L"jiaoban_shangban")
+	{
+		this->Shangban();
+	}
+	else if (senderName == L"jiaoban_xiaban")
+	{
+		this->Xiaban();
+	}
+}
+
+void CJiaobanWnd::HandleSelectChangeMsg(TNotifyUI& msg)
+{
+	CDuiString name = msg.pSender->GetName();
+
+
+}
+void CJiaobanWnd::HandleItemSelectMsg(TNotifyUI& msg)
+{
+	CDuiString name = msg.pSender->GetName();
+}
+
+void CJiaobanWnd::Shangban()
+{
+	time_t now = time(NULL);
+
+	std::string s_now = CLewaimaiTime::DatetimeToString(now);
+
+	CSetting::SetParam("jiaoban_is_work", "1");
+	CSetting::SetParam("jiaoban_shangban_time", s_now);
+
+	m_start_time = s_now;
+
+	CLabelUI* pWorkStatus = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_status")));
+
+	CLabelUI* pShangbanTimeTitle = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_shangban_time_title")));
+	CLabelUI* pShangbanTime = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_shangban_time")));
+
+	CButtonUI* pShangbanBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("jiaoban_shangban")));
+	CButtonUI* pXiabanBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("jiaoban_xiaban")));
+
+	CVerticalLayoutUI* pWorkInfo = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("jiaoban_work_info")));
+	CVerticalLayoutUI* pWorkInfoAttention = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("jiaoban_work_info_attention")));
+
+	pWorkStatus->SetText(L"值班中");
+	pWorkStatus->SetTextColor(0xFF00FF00);
+
+	pShangbanTimeTitle->SetVisible(true);
+	pShangbanTime->SetVisible(true);
+
+	pShangbanTime->SetText(CLewaimaiString::UTF8ToUnicode(s_now).c_str());
+
+	pShangbanBtn->SetVisible(false);
+	pXiabanBtn->SetVisible(true);
+
+	pWorkInfo->SetVisible(true);
+	pWorkInfoAttention->SetVisible(false);
+
+	//这里要查询一次,不然如果直接点下班拿不到数据
+	StartQuery();
+}
+
+void CJiaobanWnd::Xiaban()
+{
+	if (m_is_query)
+	{
+		return;
+	}
+
+	CSetting::SetParam("jiaoban_is_work", "0");
+	CSetting::SetParam("jiaoban_shangban_time", "");
+
+	CLabelUI* pWorkStatus = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_status")));
+
+	CLabelUI* pShangbanTimeTitle = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_shangban_time_title")));
+	CLabelUI* pShangbanTime = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_shangban_time")));
+
+	CButtonUI* pShangbanBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("jiaoban_shangban")));
+	CButtonUI* pXiabanBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("jiaoban_xiaban")));
+
+	CVerticalLayoutUI* pWorkInfo = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("jiaoban_work_info")));
+	CVerticalLayoutUI* pWorkInfoAttention = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("jiaoban_work_info_attention")));
+
+	pWorkStatus->SetText(L"休息中");
+	pWorkStatus->SetTextColor(0xFFFF0000);
+
+	pShangbanTimeTitle->SetVisible(false);
+	pShangbanTime->SetVisible(false);
+
+	pShangbanBtn->SetVisible(true);
+	pXiabanBtn->SetVisible(false);
+
+	pWorkInfo->SetVisible(false);
+	pWorkInfoAttention->SetVisible(true);
+
+	//下班的同时,开始打印交班单
+	time_t now = time(NULL);
+	std::string s_now = CLewaimaiTime::DatetimeToString(now);
+
+	m_jiaobao_message.end_time = s_now;
+
+	m_valueWnd->PrintJiaoban(m_jiaobao_message);
+}
+
+void CJiaobanWnd::StartQuery()
+{
+	if (m_is_query)
+	{
+		return;
+	}
+
+	m_is_query = true;
+
+	time_t now = time(NULL);
+	std::string s_now = CLewaimaiTime::DatetimeToString(now);
+
+	m_end_time = s_now;
+
+	//启动一个线程,刷新列表内容
+	std::thread(&CJiaobanWnd::StartRefreshWork, this).detach();
+}
+
+/*
+ *网络请求获取历史订单数据,并且刷新显示
+ **/
+void CJiaobanWnd::StartRefreshWork()
+{
+	std::map<string, string> params;
+
+	params["start_time"] = m_start_time;
+	params["end_time"] = m_end_time;
+
+	std::string response;
+
+	std::string url = "/saomashoukuan/gettotal";
+	CZhipuziHttpClient::Request(url.c_str(), params, response);
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	LOG_INFO(response.c_str());
+
+	if (document.HasParseError())
+	{
+		LOG_INFO("parse response error!");
+		m_is_query = false;
+		return;
+	}
+
+	if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
+	{
+		LOG_INFO("json error!");
+		m_is_query = false;
+		return;
+	}
+
+	rapidjson::Value& v_errcode = document["errcode"];
+	int errcode = v_errcode.GetInt();
+	if (errcode != 0)
+	{
+		LOG_INFO("response failed! message:" << document["errmsg"].GetString());
+		wstring errmsg = CLewaimaiString::UTF8ToUnicode(document["errmsg"].GetString());
+		MessageBox(GetHWND(), errmsg.c_str(), L"提示", MB_OK);
+		m_is_query = false;
+		return;
+	}
+
+	rapidjson::Value& data = document["data"];
+
+	std::string weixin_value = data["weixin_value"].GetString();
+	std::string weixin_num = data["weixin_num"].GetString();
+
+	std::string zhifubao_value = data["zhifubao_value"].GetString();
+	std::string zhifubao_num = data["zhifubao_num"].GetString();
+
+	std::string yunshanfu_value = data["yunshanfu_value"].GetString();
+	std::string yunshanfu_num = data["yunshanfu_num"].GetString();
+
+	std::string tuikuan_value = data["tuikuan_value"].GetString();
+	std::string tuikuan_num = data["tuikuan_num"].GetString();
+
+	std::string shop_name = data["shop_name"].GetString();
+	std::string shouyinyuan = data["operator"].GetString();
+
+	m_jiaobao_message.shop_name = shop_name;
+	m_jiaobao_message.shouyinyuan = shouyinyuan;
+
+	m_jiaobao_message.weixin_num = weixin_num;
+	m_jiaobao_message.weixin_value = weixin_value;
+
+	m_jiaobao_message.zhifubao_num = zhifubao_num;
+	m_jiaobao_message.zhifubao_value = zhifubao_value;
+
+	m_jiaobao_message.yunshanfu_num = yunshanfu_num;
+	m_jiaobao_message.yunshanfu_value = yunshanfu_value;
+
+	m_jiaobao_message.tuikuan_num = tuikuan_num;
+	m_jiaobao_message.tuikuan_value = tuikuan_value;
+
+	m_jiaobao_message.strat_time = m_start_time;
+	m_jiaobao_message.end_time = m_end_time;
+
+	CLabelUI* weixinNum = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_weixin_num")));
+	CLabelUI* weixinValue = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_weixin_value")));
+	weixinNum->SetText((CLewaimaiString::UTF8ToUnicode(weixin_num) + L"笔").c_str());
+	weixinValue->SetText((CLewaimaiString::UTF8ToUnicode(weixin_value) + L"元").c_str());
+
+	CLabelUI* zhifubaoNum = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_zhifubao_num")));
+	CLabelUI* zhifubaoValue = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_zhifubao_value")));
+	zhifubaoNum->SetText((CLewaimaiString::UTF8ToUnicode(zhifubao_num) + L"笔").c_str());
+	zhifubaoValue->SetText((CLewaimaiString::UTF8ToUnicode(zhifubao_value) + L"元").c_str());
+
+	CLabelUI* yunshanfuNum = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_yunshanfu_num")));
+	CLabelUI* yunshanfuValue = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_yunshanfu_value")));
+	yunshanfuNum->SetText((CLewaimaiString::UTF8ToUnicode(yunshanfu_num) + L"笔").c_str());
+	yunshanfuValue->SetText((CLewaimaiString::UTF8ToUnicode(yunshanfu_value) + L"元").c_str());
+
+	CLabelUI* tuikuanNum = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_tuikuan_num")));
+	CLabelUI* tuikuanValue = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_tuikuan_value")));
+	tuikuanNum->SetText((CLewaimaiString::UTF8ToUnicode(tuikuan_num) + L"笔").c_str());
+	tuikuanValue->SetText((CLewaimaiString::UTF8ToUnicode(tuikuan_value) + L"元").c_str());
+
+	m_is_query = false;
+}

+ 104 - 0
zhipuzi_pay_plugin/wnd/CJiaobanWnd.h

@@ -0,0 +1,104 @@
+#pragma once
+
+#include "../helper/WndHelper.h"
+
+#include "CDingweiWnd.h"
+
+#include "../tool/CJiaobanMessage.h"
+
+class CValueWnd;
+
+class CJiaobanWnd : public CWindowWnd, public INotifyUI, public IMessageFilterUI
+{
+public:
+	CJiaobanWnd(CValueWnd* value)
+	{
+		m_valueWnd = value;
+	}
+
+	LPCTSTR GetWindowClassName() const
+	{
+		return _T("UIJiaobanFrame");
+	};
+
+	UINT GetClassStyle() const
+	{
+		return UI_CLASSSTYLE_DIALOG;
+	};
+
+	void OnFinalMessage(HWND /*hWnd*/)
+	{
+		//WindowImplBase::OnFinalMessage(hWnd);
+		m_pm.RemovePreMessageFilter(this);
+		delete this;
+	};
+
+	void Init();
+
+	void setValueWnd(CValueWnd* valueWnd)
+	{
+		m_valueWnd = valueWnd;
+	}
+
+	void OnPrepare()
+	{
+
+	}
+
+	void Notify(TNotifyUI& msg);
+
+	void HandleClickMsg(TNotifyUI& msg);
+	void HandleSelectChangeMsg(TNotifyUI& msg);
+	void HandleItemSelectMsg(TNotifyUI& msg);
+
+	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+	{
+		if (::IsIconic(*this))
+		{
+			bHandled = FALSE;
+		}
+		return (wParam == 0) ? TRUE : FALSE;
+	}
+
+	LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+	{
+		return 0;
+	}
+
+	LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+	{
+		return 0;
+	}
+
+	LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+	LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled);
+
+	void Shangban();
+
+	void Xiaban();
+
+	void StartQuery();
+
+	void StartRefreshWork();
+
+public:
+	CPaintManagerUI m_pm;
+
+private:
+	CValueWnd* m_valueWnd;
+
+	std::string m_start_time;
+	std::string m_end_time;
+
+	int m_is_query = false;
+
+	CJiaobanMessage m_jiaobao_message;
+};
+

+ 4 - 0
zhipuzi_pay_plugin/wnd/CMenuWnd.cpp

@@ -55,6 +55,10 @@ void CMenuWnd::Notify(TNotifyUI& msg)
 		{
 			m_valueWnd->ShowJiaoyihuizong();
 		}
+		else if (name == L"value_menu_jiaoban")
+		{
+			m_valueWnd->ShowJiaoban();
+		}
 	}
 }
 

+ 2 - 0
zhipuzi_pay_plugin/wnd/CShoukuanWnd.cpp

@@ -699,6 +699,8 @@ void CShoukuanWnd::HandleShoukuanPassword()
 			//支付成功
 			m_shoukuan_status = 3;
 
+			m_out_trade_no = data["out_trade_no"].GetString();
+
 			SendMessage(WM_SHOUKUAN_STATUS_SUCCESS, 0, 0);
 
 			break;

+ 48 - 3
zhipuzi_pay_plugin/wnd/CValueWnd.cpp

@@ -632,6 +632,8 @@ void CValueWnd::ShowTuikuan()
 	CTuikuanWnd* pTuikuanWnd = new CTuikuanWnd;
 	if (pTuikuanWnd != NULL)
 	{
+		pTuikuanWnd->setValueWnd(this);
+
 		pTuikuanWnd->Create(NULL, _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
 		pTuikuanWnd->SetIcon(IDI_ICON_DUILIB);
 		pTuikuanWnd->CenterWindow();
@@ -823,6 +825,44 @@ void CValueWnd::ShowJiaoyihuizong()
 	}
 }
 
+void CValueWnd::ShowJiaoban()
+{
+	//先隐藏目录
+	pMenu->ShowWindow(false);
+
+	//然后判断和显示系统设置
+	if (m_is_show_jiaoban == true)
+	{
+		return;
+	}
+
+	CJiaobanWnd* pjiaobanFrame = new CJiaobanWnd(this);
+	m_jiaobanWnd = pjiaobanFrame;
+
+	if (pjiaobanFrame != NULL)
+	{
+		m_is_show_jiaoban = true;
+
+		pjiaobanFrame->setValueWnd(this);
+
+		pjiaobanFrame->Create(NULL, _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
+		pjiaobanFrame->SetIcon(IDI_ICON_DUILIB);
+		pjiaobanFrame->CenterWindow();
+		UINT ret = pjiaobanFrame->ShowModal();
+
+		m_is_show_jiaoban = false;
+
+		if (ret == IDOK)
+		{
+
+		}
+		else if (ret == IDCANCEL)
+		{
+
+		}
+	}
+}
+
 void CValueWnd::UpdateKexian(const char* data, int length)
 {
     std::string new_data = data;
@@ -1160,15 +1200,20 @@ bool CValueWnd::UpdateRegisterHotKey()
 
 void CValueWnd::PrintTest()
 {
-	m_push->AddPinter("", 3);
+	m_push->AddPrinter("", 3);
 }
 
 void CValueWnd::PrintZhifu(std::string out_trade_no)
 {
-	m_push->AddPinter(out_trade_no, 1);
+	m_push->AddPrinter(out_trade_no, 1);
 }
 
 void CValueWnd::PrintTuikuan(std::string out_trade_no)
 {
-	m_push->AddPinter(out_trade_no, 2);
+	m_push->AddPrinter(out_trade_no, 2);
+}
+
+void CValueWnd::PrintJiaoban(CJiaobanMessage& message)
+{
+	m_push->AddPrinter(message);
 }

+ 12 - 0
zhipuzi_pay_plugin/wnd/CValueWnd.h

@@ -7,12 +7,15 @@
 #include "CSystemSettingWnd.h"
 #include "CJiaoyijiluWnd.h"
 #include "CJiaoyihuizongWnd.h"
+#include "CJiaobanWnd.h"
 #include "CDingweiInfoWnd.h"
 #include "COcrWnd.h"
 
 #include "CShoukuanWnd.h"
 #include "CTuikuanWnd.h"
 
+#include "../tool/CJiaobanMessage.h"
+
 class CMessagePush;
 
 class CValueWnd : public CWindowWnd, public INotifyUI, public IMessageFilterUI
@@ -87,6 +90,9 @@ public:
 	//显示交易汇总页面
 	void ShowJiaoyihuizong();
 
+	//显示交班页面
+	void ShowJiaoban();
+
 	void Init();
 
 	void TopMostWnd();
@@ -120,6 +126,8 @@ public:
 
 	void PrintZhifu(std::string out_trade_no);
 	void PrintTuikuan(std::string out_trade_no);
+
+	void PrintJiaoban(CJiaobanMessage& message);
 private:
 	void UpdateKexian(const char* data, int length);
 
@@ -160,6 +168,10 @@ private:
 	bool m_is_show_jiaoyihuizong = false;
 	CJiaoyihuizongWnd* m_jiaoyihuizongWnd;
 
+	//交班窗口是否已经显示
+	bool m_is_show_jiaoban = false;
+	CJiaobanWnd* m_jiaobanWnd;
+
 	//默认监听的模式
 	int m_nWatchType = -1;
 

+ 3 - 0
zhipuzi_pay_plugin/zhipuzi_pay_plugin.vcxproj

@@ -223,6 +223,8 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <ClInclude Include="tool\CJiaobanMessage.h" />
+    <ClInclude Include="wnd\CJiaobanWnd.h" />
     <ClInclude Include="wnd\CJiaoyihuizongWnd.h" />
     <ClInclude Include="wnd\CJiaoyijiluWnd.h" />
     <ClInclude Include="control\CMenuItemUI.h" />
@@ -264,6 +266,7 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     <ClInclude Include="helper\CSystem.h" />
   </ItemGroup>
   <ItemGroup>
+    <ClCompile Include="wnd\CJiaobanWnd.cpp" />
     <ClCompile Include="wnd\CJiaoyihuizongWnd.cpp" />
     <ClCompile Include="wnd\CJiaoyijiluWnd.cpp" />
     <ClCompile Include="control\CMenuItemUI.cpp" />

+ 9 - 0
zhipuzi_pay_plugin/zhipuzi_pay_plugin.vcxproj.filters

@@ -132,6 +132,12 @@
     <ClInclude Include="order\CShouyinOrder.h">
       <Filter>头文件</Filter>
     </ClInclude>
+    <ClInclude Include="wnd\CJiaobanWnd.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="tool\CJiaobanMessage.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="pch\pch.cpp">
@@ -245,6 +251,9 @@
     <ClCompile Include="order\CShouyinOrder.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
+    <ClCompile Include="wnd\CJiaobanWnd.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <Image Include="resource\zhipuzi.ico">