Sfoglia il codice sorgente

完成所有的网络异常处理

zhangyang 5 anni fa
parent
commit
dff0b7a69b

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

@@ -47,6 +47,11 @@
 				<Control></Control>
 			</HorizontalLayout>
 		</VerticalLayout>
+		<HorizontalLayout name="jiaoban_error_layout" height="350">
+			<Control></Control>
+			<Label name="jiaoban_error" text="错误信息" font="2" width="800" align="center"></Label>
+			<Control></Control>
+		</HorizontalLayout>
 		<VerticalLayout name="jiaoban_work_info_attention" height="350">
 			<Label text="您还未开始上班,点击【上班】按钮即可开工啦~!" font="2" align="center" padding="0,130,0,0"></Label>
 		</VerticalLayout>

+ 6 - 1
bin/Win32/Debug/zhipuzi_pay_plugin/skin/jiaoyihuizong_wnd.xml

@@ -16,7 +16,7 @@
 			<Button name="jiaoyihuizong_query" width="80" height="38" padding="30,10,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'"/>
 			<Control></Control>
 		</HorizontalLayout>
-		<VerticalLayout>
+		<VerticalLayout name="jiaoyihuizong_info">
 			<HorizontalLayout height="60" padding="0,50,0,0">
 				<Control width="200"></Control>
 				<Label text="微信支付" width="200" font="2"></Label>
@@ -46,5 +46,10 @@
 				<Control></Control>
 			</HorizontalLayout>
 		</VerticalLayout>
+		<HorizontalLayout name="jiaoyihuizong_error_layout" float="true" pos="0,300,800,300" height="30">
+			<Control></Control>
+			<Label name="jiaoyihuizong_error" text="错误信息" font="2" width="800" align="center"></Label>
+			<Control></Control>
+		</HorizontalLayout>
 	</VerticalLayout>
 </Window>

+ 1 - 1
bin/Win32/Debug/zhipuzi_pay_plugin/skin/jiaoyijilu_wnd.xml

@@ -29,7 +29,7 @@
 			</HorizontalLayout>
 			<HorizontalLayout name="jiaoyijilu_error_layout" float="true" pos="0,200,800,300" height="30">
 				<Control></Control>
-				<Label name="jiaoyijilu_error" text="错误信息1" font="2"></Label>
+				<Label name="jiaoyijilu_error" text="错误信息" font="2" width="800" align="center"></Label>
 				<Control></Control>
 			</HorizontalLayout>
 		</VerticalLayout>

+ 55 - 1
zhipuzi_pay_plugin/wnd/CJiaobanWnd.cpp

@@ -15,6 +15,10 @@ void CJiaobanWnd::Init()
 	//判断当前是否上班状态
 	int is_work = atoi(CSetting::GetParam("jiaoban_is_work").c_str());
 
+	m_is_work = is_work;
+
+	ShowError(false);
+
 	CLabelUI* pWorkStatus = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_status")));
 
 	CLabelUI* pShangbanTimeTitle = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_shangban_time_title")));
@@ -225,6 +229,12 @@ void CJiaobanWnd::HandleClickMsg(TNotifyUI& msg)
 
 	if (senderName == _T("jiaoban_closebtn"))
 	{
+		if (m_is_query)
+		{
+			//如果正在网络查询,禁止关闭
+			return;
+		}
+
 		m_valueWnd->CloseJiaoban();
 		return;
 	}
@@ -260,6 +270,8 @@ void CJiaobanWnd::Shangban()
 
 	m_start_time = s_now;
 
+	m_is_work = true;
+
 	CLabelUI* pWorkStatus = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_status")));
 
 	CLabelUI* pShangbanTimeTitle = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_shangban_time_title")));
@@ -285,6 +297,8 @@ void CJiaobanWnd::Shangban()
 	pWorkInfo->SetVisible(true);
 	pWorkInfoAttention->SetVisible(false);
 
+	ShowError(false);
+
 	//这里要查询一次,不然如果直接点下班拿不到数据
 	StartQuery();
 }
@@ -299,6 +313,8 @@ void CJiaobanWnd::Xiaban()
 	CSetting::SetParam("jiaoban_is_work", "0");
 	CSetting::SetParam("jiaoban_shangban_time", "");
 
+	m_is_work = false;
+
 	CLabelUI* pWorkStatus = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_status")));
 
 	CLabelUI* pShangbanTimeTitle = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_shangban_time_title")));
@@ -329,6 +345,8 @@ void CJiaobanWnd::Xiaban()
 	m_jiaobao_message.end_time = s_now;
 
 	m_valueWnd->PrintJiaoban(m_jiaobao_message);
+
+	ShowError(false);
 }
 
 void CJiaobanWnd::StartQuery()
@@ -373,6 +391,9 @@ void CJiaobanWnd::StartRefreshWork()
 	{
 		LOG_INFO("parse response error!");
 		m_is_query = false;
+
+		ShowError(true, L"服务器错误");
+
 		return;
 	}
 
@@ -380,6 +401,9 @@ void CJiaobanWnd::StartRefreshWork()
 	{
 		LOG_INFO("json error!");
 		m_is_query = false;
+
+		ShowError(true, L"服务器错误");
+
 		return;
 	}
 
@@ -389,11 +413,14 @@ void CJiaobanWnd::StartRefreshWork()
 	{
 		LOG_INFO("response failed! message:" << document["errmsg"].GetString());
 		wstring errmsg = CLewaimaiString::UTF8ToUnicode(document["errmsg"].GetString());
-		MessageBox(GetHWND(), errmsg.c_str(), L"提示", MB_OK);
+		ShowError(true, errmsg);
+
 		m_is_query = false;
 		return;
 	}
 
+	ShowError(false);
+
 	rapidjson::Value& data = document["data"];
 
 	std::string weixin_value = data["weixin_value"].GetString();
@@ -450,4 +477,31 @@ void CJiaobanWnd::StartRefreshWork()
 	tuikuanValue->SetText((CLewaimaiString::UTF8ToUnicode(tuikuan_value) + L"元").c_str());
 
 	m_is_query = false;
+}
+
+void CJiaobanWnd::ShowError(bool is_show, std::wstring msg)
+{
+	CVerticalLayoutUI* pWorkInfo = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("jiaoban_work_info")));
+
+	CHorizontalLayoutUI* errorLayout = static_cast<CHorizontalLayoutUI*>(m_pm.FindControl(_T("jiaoban_error_layout")));
+	CLabelUI* errorLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoban_error")));
+
+	if (is_show)
+	{
+		pWorkInfo->SetVisible(false);
+
+		errorLayout->SetVisible(true);
+		errorLabel->SetText(msg.c_str());
+
+		m_is_query = false;
+	}
+	else
+	{
+		if (m_is_work)
+		{
+			pWorkInfo->SetVisible(true);
+		}
+
+		errorLayout->SetVisible(false);
+	}
 }

+ 4 - 0
zhipuzi_pay_plugin/wnd/CJiaobanWnd.h

@@ -87,6 +87,8 @@ public:
 
 	void StartRefreshWork();
 
+	void ShowError(bool is_show, std::wstring msg = L"");
+
 public:
 	CPaintManagerUI m_pm;
 
@@ -99,5 +101,7 @@ private:
 	int m_is_query = false;
 
 	CJiaobanMessage m_jiaobao_message;
+
+	bool m_is_work;
 };
 

+ 45 - 2
zhipuzi_pay_plugin/wnd/CJiaoyihuizongWnd.cpp

@@ -25,6 +25,8 @@ void CJiaoyihuizongWnd::Init()
 	std::string s_start = CLewaimaiTime::DatetimeToDateString(start);
 	pDateStart->SetText(CLewaimaiString::UTF8ToUnicode(s_start).c_str());
 
+	ShowError(false);
+
 	StartQuery();
 }
 
@@ -188,6 +190,12 @@ void CJiaoyihuizongWnd::HandleClickMsg(TNotifyUI& msg)
 
 	if (senderName == _T("jiaoyihuizong_closebtn"))
 	{
+		if (m_is_query)
+		{
+			//如果正在网络查询,禁止关闭
+			return;
+		}
+
 		m_valueWnd->CloseJiaoyihuizong();
 		return;
 	}
@@ -286,6 +294,9 @@ void CJiaoyihuizongWnd::StartRefreshWork()
 	{
 		LOG_INFO("parse response error!");
 		m_is_query = false;
+
+		ShowError(true, L"服务器错误");
+
 		return;
 	}
 
@@ -293,6 +304,9 @@ void CJiaoyihuizongWnd::StartRefreshWork()
 	{
 		LOG_INFO("json error!");
 		m_is_query = false;
+
+		ShowError(true, L"服务器错误");
+
 		return;
 	}
 
@@ -301,12 +315,17 @@ void CJiaoyihuizongWnd::StartRefreshWork()
 	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;
+
+		wstring errmsg = CLewaimaiString::UTF8ToUnicode(document["errmsg"].GetString());
+		ShowError(true, errmsg);
+
 		return;
 	}
 
+	//网络请求没问题了,准备开始渲染了,把之前的错误信息隐藏
+	ShowError(false);
+
 	rapidjson::Value& data = document["data"];
 
 	std::string weixin_value = data["weixin_value"].GetString();
@@ -342,4 +361,28 @@ void CJiaoyihuizongWnd::StartRefreshWork()
 	tuikuanValue->SetText((CLewaimaiString::UTF8ToUnicode(tuikuan_value) + L"元").c_str());
 
 	m_is_query = false;
+}
+
+void CJiaoyihuizongWnd::ShowError(bool is_show, std::wstring msg)
+{
+	CVerticalLayoutUI* pJiaoyijihuizongInfo = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(_T("jiaoyihuizong_info")));
+
+	CHorizontalLayoutUI* errorLayout = static_cast<CHorizontalLayoutUI*>(m_pm.FindControl(_T("jiaoyihuizong_error_layout")));
+	CLabelUI* errorLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoyihuizong_error")));
+
+	if (is_show)
+	{
+		pJiaoyijihuizongInfo->SetVisible(false);
+
+		errorLayout->SetVisible(true);
+		errorLabel->SetText(msg.c_str());
+
+		m_is_query = false;
+	}
+	else
+	{
+		pJiaoyijihuizongInfo->SetVisible(true);
+
+		errorLayout->SetVisible(false);
+	}
 }

+ 2 - 0
zhipuzi_pay_plugin/wnd/CJiaoyihuizongWnd.h

@@ -76,6 +76,8 @@ public:
 
 	void StartRefreshWork();
 
+	void ShowError(bool is_show, std::wstring msg = L"");
+
 public:
 	CPaintManagerUI m_pm;