|
|
@@ -0,0 +1,345 @@
|
|
|
+#include "../pch/pch.h"
|
|
|
+#include "CJiaoyihuizongWnd.h"
|
|
|
+
|
|
|
+#include "../control/ControlEx.h"
|
|
|
+#include "../tool/CComHelper.h"
|
|
|
+
|
|
|
+#include "CValueWnd.h"
|
|
|
+
|
|
|
+#include "../helper/CBitmapHelper.h"
|
|
|
+
|
|
|
+void CJiaoyihuizongWnd::Init()
|
|
|
+{
|
|
|
+ ::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
|
|
|
+
|
|
|
+ //处理时间问题
|
|
|
+ time_t now = time(NULL);
|
|
|
+ time_t start = now - 60 * 60 * 24 * 0; //默认起始和结束时间都是今天
|
|
|
+
|
|
|
+ SYSTEMTIME syDataStart = CLewaimaiTime::Time_tToSystemTime(start);
|
|
|
+
|
|
|
+ CDateTimeUI* pDateStart = static_cast<CDateTimeUI*>(m_pm.FindControl(_T("jiaoyihuizong_time_start")));
|
|
|
+ pDateStart->SetTime(&syDataStart);
|
|
|
+ pDateStart->UpdateText();
|
|
|
+
|
|
|
+ std::string s_start = CLewaimaiTime::DatetimeToDateString(start);
|
|
|
+ pDateStart->SetText(CLewaimaiString::UTF8ToUnicode(s_start).c_str());
|
|
|
+
|
|
|
+ StartQuery();
|
|
|
+}
|
|
|
+
|
|
|
+LRESULT CJiaoyihuizongWnd::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("jiaoyihuizong_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 CJiaoyihuizongWnd::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 CJiaoyihuizongWnd::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 CJiaoyihuizongWnd::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 CJiaoyihuizongWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
|
|
|
+{
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void CJiaoyihuizongWnd::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 CJiaoyihuizongWnd::HandleClickMsg(TNotifyUI& msg)
|
|
|
+{
|
|
|
+ DuiLib::CDuiString senderName = msg.pSender->GetName();
|
|
|
+
|
|
|
+ if (senderName == _T("jiaoyihuizong_closebtn"))
|
|
|
+ {
|
|
|
+ Close(IDCANCEL);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ else if (senderName == L"jiaoyihuizong_query")
|
|
|
+ {
|
|
|
+ this->StartQuery();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void CJiaoyihuizongWnd::HandleSelectChangeMsg(TNotifyUI& msg)
|
|
|
+{
|
|
|
+ CDuiString name = msg.pSender->GetName();
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+void CJiaoyihuizongWnd::HandleItemSelectMsg(TNotifyUI& msg)
|
|
|
+{
|
|
|
+ CDuiString name = msg.pSender->GetName();
|
|
|
+}
|
|
|
+
|
|
|
+void CJiaoyihuizongWnd::StartQuery()
|
|
|
+{
|
|
|
+ if (m_is_query)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ m_is_query = true;
|
|
|
+
|
|
|
+ CDateTimeUI* pDateStart = static_cast<CDateTimeUI*>(m_pm.FindControl(_T("jiaoyihuizong_time_start")));
|
|
|
+ SYSTEMTIME syDataStart = pDateStart->GetTime();
|
|
|
+
|
|
|
+ syDataStart.wHour = 0;
|
|
|
+ syDataStart.wMinute = 0;
|
|
|
+ syDataStart.wSecond = 0;
|
|
|
+ syDataStart.wMilliseconds = 0;
|
|
|
+
|
|
|
+ CDateTimeUI* pDateEnd = static_cast<CDateTimeUI*>(m_pm.FindControl(_T("jiaoyihuizong_time_end")));
|
|
|
+ SYSTEMTIME syDataEnd = pDateEnd->GetTime();
|
|
|
+
|
|
|
+ syDataEnd.wHour = 23;
|
|
|
+ syDataEnd.wMinute = 59;
|
|
|
+ syDataEnd.wSecond = 59;
|
|
|
+ syDataEnd.wMilliseconds = 999;
|
|
|
+
|
|
|
+ time_t start_time = CLewaimaiTime::SystemTimeToTime_t(syDataStart);
|
|
|
+ time_t end_time = CLewaimaiTime::SystemTimeToTime_t(syDataEnd);
|
|
|
+
|
|
|
+ std::string s_start = CLewaimaiTime::DatetimeToString(start_time);
|
|
|
+ std::string s_end = CLewaimaiTime::DatetimeToString(end_time);
|
|
|
+
|
|
|
+ if (end_time - start_time > 60 * 60 * 24 * 7)
|
|
|
+ {
|
|
|
+ //起始时间不能大于7天
|
|
|
+ MessageBox(GetHWND(), L"选择的时间段不能超过7天", L"提示", MB_OK);
|
|
|
+ m_is_query = false;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (end_time - start_time < 0)
|
|
|
+ {
|
|
|
+ MessageBox(GetHWND(), L"结束时间不能小于起始时间", L"提示", MB_OK);
|
|
|
+ m_is_query = false;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新时间
|
|
|
+ m_start_time = s_start;
|
|
|
+ m_end_time = s_end;
|
|
|
+
|
|
|
+ //启动一个线程,刷新列表内容
|
|
|
+ std::thread(&CJiaoyihuizongWnd::StartRefreshWork, this).detach();
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ *网络请求获取历史订单数据,并且刷新显示
|
|
|
+ **/
|
|
|
+void CJiaoyihuizongWnd::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();
|
|
|
+
|
|
|
+ CLabelUI* weixinNum = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoyihuizong_weixin_num")));
|
|
|
+ CLabelUI* weixinValue = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoyihuizong_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("jiaoyihuizong_zhifubao_num")));
|
|
|
+ CLabelUI* zhifubaoValue = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoyihuizong_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("jiaoyihuizong_yunshanfu_num")));
|
|
|
+ CLabelUI* yunshanfuValue = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoyihuizong_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("jiaoyihuizong_tuikuan_num")));
|
|
|
+ CLabelUI* tuikuanValue = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoyihuizong_tuikuan_value")));
|
|
|
+ tuikuanNum->SetText((CLewaimaiString::UTF8ToUnicode(tuikuan_num) + L"笔").c_str());
|
|
|
+ tuikuanValue->SetText((CLewaimaiString::UTF8ToUnicode(tuikuan_value) + L"元").c_str());
|
|
|
+
|
|
|
+ m_is_query = false;
|
|
|
+}
|