|
|
@@ -0,0 +1,387 @@
|
|
|
+#include "../pch/pch.h"
|
|
|
+#include "CJiaoyijiluWnd.h"
|
|
|
+
|
|
|
+#include "../control/ControlEx.h"
|
|
|
+#include "../tool/CComHelper.h"
|
|
|
+
|
|
|
+#include "CValueWnd.h"
|
|
|
+
|
|
|
+#include "../helper/CBitmapHelper.h"
|
|
|
+
|
|
|
+void CJiaoyijiluWnd::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 * 6;
|
|
|
+
|
|
|
+ SYSTEMTIME syDataStart = CLewaimaiTime::Time_tToSystemTime(start);
|
|
|
+
|
|
|
+ CDateTimeUI* pDateStart = static_cast<CDateTimeUI*>(m_pm.FindControl(_T("jiaoyijilu_time_start")));
|
|
|
+ pDateStart->SetTime(&syDataStart);
|
|
|
+ pDateStart->UpdateText();
|
|
|
+
|
|
|
+ std::string s_start = CLewaimaiTime::DatetimeToDateString(start);
|
|
|
+ pDateStart->SetText(CLewaimaiString::UTF8ToUnicode(s_start).c_str());
|
|
|
+
|
|
|
+ StartQuery();
|
|
|
+
|
|
|
+ //启动一个线程,刷新列表内容
|
|
|
+ std::thread(&CJiaoyijiluWnd::StartRefreshWork, this).detach();
|
|
|
+}
|
|
|
+
|
|
|
+LRESULT CJiaoyijiluWnd::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("jiaoyijilu_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 CJiaoyijiluWnd::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 CJiaoyijiluWnd::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 CJiaoyijiluWnd::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 CJiaoyijiluWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
|
|
|
+{
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void CJiaoyijiluWnd::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 CJiaoyijiluWnd::HandleClickMsg(TNotifyUI& msg)
|
|
|
+{
|
|
|
+ DuiLib::CDuiString senderName = msg.pSender->GetName();
|
|
|
+
|
|
|
+ if (senderName == _T("jiaoyijilu_closebtn"))
|
|
|
+ {
|
|
|
+ Close(IDCANCEL);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ else if (senderName == L"jiaoyijilu_list_last")
|
|
|
+ {
|
|
|
+ m_curpage--;
|
|
|
+
|
|
|
+ this->StartRefreshWork();
|
|
|
+ }
|
|
|
+ else if (senderName == L"jiaoyijilu_list_next")
|
|
|
+ {
|
|
|
+ m_curpage++;
|
|
|
+ this->StartRefreshWork();
|
|
|
+ }
|
|
|
+ else if (senderName == L"jiaoyijilu_query")
|
|
|
+ {
|
|
|
+ this->StartQuery();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void CJiaoyijiluWnd::HandleSelectChangeMsg(TNotifyUI& msg)
|
|
|
+{
|
|
|
+ CDuiString name = msg.pSender->GetName();
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+void CJiaoyijiluWnd::HandleItemSelectMsg(TNotifyUI& msg)
|
|
|
+{
|
|
|
+ CDuiString name = msg.pSender->GetName();
|
|
|
+}
|
|
|
+
|
|
|
+void CJiaoyijiluWnd::StartQuery()
|
|
|
+{
|
|
|
+ CDateTimeUI* pDateStart = static_cast<CDateTimeUI*>(m_pm.FindControl(_T("jiaoyijilu_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("jiaoyijilu_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);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (end_time - start_time < 0)
|
|
|
+ {
|
|
|
+ MessageBox(GetHWND(), L"结束时间不能小于起始时间", L"提示", MB_OK);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新时间
|
|
|
+ m_start_time = s_start;
|
|
|
+ m_end_time = s_end;
|
|
|
+
|
|
|
+ StartRefreshWork();
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ *网络请求获取历史订单数据,并且刷新显示
|
|
|
+ **/
|
|
|
+void CJiaoyijiluWnd::StartRefreshWork()
|
|
|
+{
|
|
|
+ std::map<string, string> params;
|
|
|
+
|
|
|
+ int offset = 10;
|
|
|
+
|
|
|
+ params["page"] = to_string(m_curpage);
|
|
|
+ params["offset"] = to_string(offset);
|
|
|
+ params["start_time"] = m_start_time;
|
|
|
+ params["end_time"] = m_end_time;
|
|
|
+
|
|
|
+ std::string response;
|
|
|
+
|
|
|
+ std::string url = "/saomashoukuan/getlist";
|
|
|
+ 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!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
|
|
|
+ {
|
|
|
+ LOG_INFO("json error!");
|
|
|
+ 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);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ rapidjson::Value& data = document["data"];
|
|
|
+
|
|
|
+ std::string total_num = data["total_num"].GetString();
|
|
|
+ m_totalNum = atoi(total_num.c_str());
|
|
|
+
|
|
|
+ CListUI* pJiaoyijiluList = static_cast<CListUI*>(m_pm.FindControl(_T("jiaoyijilu_list")));
|
|
|
+ pJiaoyijiluList->RemoveAll();
|
|
|
+
|
|
|
+ rapidjson::Value& rows = data["rows"];
|
|
|
+ for (rapidjson::SizeType i = 0; i < rows.Size(); ++i)
|
|
|
+ {
|
|
|
+ rapidjson::Value& v_row_i = rows[i];
|
|
|
+
|
|
|
+ //把最后一个厨房打印机取出来
|
|
|
+ CDialogBuilder builder;
|
|
|
+ CListContainerElementUI* pEle = static_cast<CListContainerElementUI*>(builder.Create(_T("jiaoyijilu_item.xml"), (UINT)0, NULL, &m_pm));
|
|
|
+
|
|
|
+ CLabelUI* pTime = static_cast<CLabelUI*>(pEle->FindSubControl(_T("jiaoyijilu_item_time")));
|
|
|
+ pTime->SetText(CLewaimaiString::UTF8ToUnicode(v_row_i["complete_time"].GetString()).c_str());
|
|
|
+
|
|
|
+ CLabelUI* pValue = static_cast<CLabelUI*>(pEle->FindSubControl(_T("jiaoyijilu_item_value")));
|
|
|
+ pValue->SetText(CLewaimaiString::UTF8ToUnicode(v_row_i["value"].GetString()).c_str());
|
|
|
+
|
|
|
+ CLabelUI* pType = static_cast<CLabelUI*>(pEle->FindSubControl(_T("jiaoyijilu_item_paytype")));
|
|
|
+ pType->SetText(CLewaimaiString::UTF8ToUnicode(v_row_i["zhifu_type"].GetString()).c_str());
|
|
|
+
|
|
|
+ CLabelUI* pStatus = static_cast<CLabelUI*>(pEle->FindSubControl(_T("jiaoyijilu_item_status")));
|
|
|
+ pStatus->SetText(CLewaimaiString::UTF8ToUnicode(v_row_i["status"].GetString()).c_str());
|
|
|
+
|
|
|
+ CLabelUI* pOrderno = static_cast<CLabelUI*>(pEle->FindSubControl(_T("jiaoyijilu_item_orderno")));
|
|
|
+ pOrderno->SetText(CLewaimaiString::UTF8ToUnicode(v_row_i["out_trade_no"].GetString()).c_str());
|
|
|
+
|
|
|
+ pEle->AddCustomAttribute(L"id", L"1");
|
|
|
+
|
|
|
+ pJiaoyijiluList->Add(pEle);
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新页码状态提示
|
|
|
+ m_totalpage = (int)(m_totalNum / offset) + 1;
|
|
|
+
|
|
|
+ CButtonUI* pLast = static_cast<CButtonUI*>(m_pm.FindControl(_T("jiaoyijilu_list_last")));
|
|
|
+ CButtonUI* pNext = static_cast<CButtonUI*>(m_pm.FindControl(_T("jiaoyijilu_list_next")));
|
|
|
+
|
|
|
+ if (m_curpage < 1)
|
|
|
+ {
|
|
|
+ m_curpage = 1;
|
|
|
+ }
|
|
|
+ if (m_curpage == 1)
|
|
|
+ {
|
|
|
+ pLast->SetEnabled(false);
|
|
|
+ }
|
|
|
+ else if (m_curpage > 1)
|
|
|
+ {
|
|
|
+ pLast->SetEnabled(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (m_curpage > m_totalpage)
|
|
|
+ {
|
|
|
+ m_curpage = m_totalpage;
|
|
|
+ }
|
|
|
+ if (m_curpage == m_totalpage)
|
|
|
+ {
|
|
|
+ pNext->SetEnabled(false);
|
|
|
+ }
|
|
|
+ else if (m_curpage < m_totalpage)
|
|
|
+ {
|
|
|
+ pNext->SetEnabled(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ CLabelUI* pPageNum = static_cast<CLabelUI*>(m_pm.FindControl(_T("jiaoyijilu_list_page")));
|
|
|
+ wstring pageinfo = _T("第") + CLewaimaiString::ANSIToUnicode(to_string(m_curpage)) + _T("页/共") + CLewaimaiString::ANSIToUnicode(to_string(m_totalpage)) + _T("页");
|
|
|
+ pPageNum->SetText(pageinfo.c_str());
|
|
|
+}
|