CJiaobanPageUI.cpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. #include "../pch/pch.h"
  2. #include "CJiaobanPageUI.h"
  3. #include "../wnd/CHuiyuanChongzhiWnd.h"
  4. #include "../wnd/CHuiyuanAddWnd.h"
  5. #include "../print/CPosPrinter.h"
  6. CJiaobanPageUI::CJiaobanPageUI()
  7. {
  8. }
  9. CJiaobanPageUI::~CJiaobanPageUI()
  10. {
  11. }
  12. //初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用
  13. void CJiaobanPageUI::InitShow()
  14. {
  15. time_t now = time(NULL);
  16. std::string s_now = CLewaimaiTime::DatetimeToString(now);
  17. m_end_time = s_now;
  18. CLabelUI* endLabel = static_cast<CLabelUI*>(this->FindSubControl(L"jiaoban_page_end_time"));
  19. endLabel->SetText(CLewaimaiString::UTF8ToUnicode(m_end_time).c_str());
  20. CLabelUI* acccountLabel = static_cast<CLabelUI*>(this->FindSubControl(L"jiaoban_page_account"));
  21. acccountLabel->SetText(CLewaimaiString::UTF8ToUnicode(CZhipuziHttpClient::GetInstance()->GetUsername()).c_str());
  22. InitJiaobanShijian();
  23. }
  24. //处理按钮点击类事件
  25. void CJiaobanPageUI::HandleClickMsg(TNotifyUI& msg)
  26. {
  27. CDuiString name = msg.pSender->GetName();
  28. if (name == L"jiaoban_page_queren_btn")
  29. {
  30. StartJiaoban();
  31. }
  32. }
  33. //处理option切换事件
  34. void CJiaobanPageUI::HandleSelectChangeMsg(TNotifyUI& msg)
  35. {
  36. }
  37. //处理下拉框、radio的切换事件
  38. void CJiaobanPageUI::HandleItemSelectMsg(TNotifyUI& msg)
  39. {
  40. CDuiString name = msg.pSender->GetName();
  41. if (name == _T("jiaoban_page_init_time_select"))
  42. {
  43. CComboUI* com = static_cast<CComboUI*>(this->FindSubControl(_T("jiaoban_page_init_time_select")));
  44. std::wstring ws = com->GetItemAt(com->GetCurSel())->GetText();
  45. m_init_time = CLewaimaiString::UnicodeToUTF8(ws);
  46. Refresh();
  47. }
  48. }
  49. //处理编辑框输入内容改变事件
  50. void CJiaobanPageUI::HandleTextChangedMsg(TNotifyUI& msg)
  51. {
  52. DuiLib::CDuiString senderName = msg.pSender->GetName();
  53. if (senderName == L"huiyuan_page_shoujihao_edit")
  54. {
  55. }
  56. }
  57. //处理扫码枪捕捉到的扫码信息
  58. void CJiaobanPageUI::HandleTextCapture(std::string content)
  59. {
  60. if (m_is_show_modal_wnd == true)
  61. {
  62. m_curModalWnd->HandleTextCapture(content);
  63. }
  64. }
  65. bool CJiaobanPageUI::HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
  66. {
  67. if (uMsg == WM_JIAOBAN_REFRESH)
  68. {
  69. DoRefresh();
  70. return true;
  71. }
  72. return false;
  73. }
  74. void CJiaobanPageUI::InitJiaobanShijian()
  75. {
  76. CContainerUI* pOrderListLayout = static_cast<CContainerUI*>(this->FindSubControl(_T("data_layout")));
  77. pOrderListLayout->SetVisible(false);
  78. this->FindSubControl(_T("loading"))->SetVisible(true);
  79. //启动一个线程,进行网络请求操作
  80. std::thread t(&CJiaobanPageUI::HandleJiaobanShijian, this);
  81. t.detach();
  82. }
  83. void CJiaobanPageUI::HandleJiaobanShijian()
  84. {
  85. std::string url = "/user/getlogintime";
  86. //请求外卖的未处理订单,直接用当前的page值去请求
  87. std::map<string, string> params;
  88. std::string response;
  89. CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
  90. rapidjson::Document document;
  91. document.Parse(response.c_str());
  92. if (document.HasParseError())
  93. {
  94. LOG_INFO("parse response error!");
  95. return;
  96. }
  97. if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
  98. {
  99. LOG_INFO("json error!");
  100. return;
  101. }
  102. rapidjson::Value& v_errcode = document["errcode"];
  103. int errcode = v_errcode.GetInt();
  104. if (errcode != 0)
  105. {
  106. LOG_INFO("response failed! message:" << document["errmsg"].GetString());
  107. return;
  108. }
  109. //获得数据成功
  110. rapidjson::Value& data = document["data"];
  111. std::string select_time = data["select_time"].GetString();
  112. rapidjson::Value& rows = data["rows"];
  113. //取最后一个时间点
  114. m_init_time = rows[rows.Size() - 1]["init_time"].GetString();
  115. m_shangban_times.clear();
  116. CComboUI* com = NULL;
  117. com = static_cast<CComboUI*>(this->FindSubControl(_T("jiaoban_page_init_time_select")));
  118. com->RemoveAll();
  119. int qidian = 0;
  120. int num = rows.Size();
  121. if (num > 10)
  122. {
  123. //只选最多10个
  124. qidian = rows.Size() - 10;
  125. num = 10;
  126. }
  127. for (rapidjson::SizeType i = qidian; i < rows.Size(); ++i)
  128. {
  129. std::string cur_time = rows[i]["init_time"].GetString();
  130. m_shangban_times.push_back(cur_time);
  131. CListLabelElementUI* elem = new CListLabelElementUI();
  132. elem->SetText(CLewaimaiString::UTF8ToUnicode(cur_time).c_str());
  133. com->Add(elem);
  134. }
  135. com->SetInternVisible(true);
  136. com->SelectItem(num - 1, false, false);
  137. com->SetText(CLewaimaiString::UTF8ToUnicode(m_init_time).c_str());
  138. //到这里了,开始处理数据刷新
  139. HandleRefresh();
  140. }
  141. void CJiaobanPageUI::Refresh()
  142. {
  143. //根据当前的起始时间,刷新数据显示
  144. //开始转菊花
  145. CContainerUI* pOrderListLayout = static_cast<CContainerUI*>(this->FindSubControl(_T("data_layout")));
  146. pOrderListLayout->SetVisible(false);
  147. this->FindSubControl(_T("loading"))->SetVisible(true);
  148. //启动一个线程,进行网络请求操作
  149. std::thread t(&CJiaobanPageUI::HandleRefresh, this);
  150. t.detach();
  151. }
  152. void CJiaobanPageUI::HandleRefresh()
  153. {
  154. std::string url = "/analysis/index/statistics/index";
  155. //请求外卖的未处理订单,直接用当前的page值去请求
  156. std::map<string, string> params;
  157. params["begin_time"] = m_init_time;
  158. params["end_time"] = m_end_time;
  159. std::string response;
  160. CZhipuziHttpClient::GetInstance()->RequestNew(url.c_str(), params, response);
  161. m_response = response;
  162. ::PostMessage(m_pManager->GetPaintWindow(), WM_JIAOBAN_REFRESH, 0, 0);
  163. }
  164. void CJiaobanPageUI::DoRefresh()
  165. {
  166. rapidjson::Document document;
  167. document.Parse(m_response.c_str());
  168. if (document.HasParseError())
  169. {
  170. LOG_INFO("parse response error!");
  171. return;
  172. }
  173. if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
  174. {
  175. LOG_INFO("json error!");
  176. return;
  177. }
  178. rapidjson::Value& v_errcode = document["errcode"];
  179. int errcode = v_errcode.GetInt();
  180. if (errcode != 0)
  181. {
  182. LOG_INFO("response failed! message:" << document["errmsg"].GetString());
  183. return;
  184. }
  185. //获得数据成功
  186. rapidjson::Value& data = document["data"];
  187. m_diannei_num = to_string(data["diannei_member"].GetInt());
  188. //m_huiyuan_num = to_string(data["today_member"].GetInt());
  189. m_diannei_value = CLewaimaiString::DoubleToString(data["diannei_money"].GetFloat(), 2);
  190. //m_huiyuan_value = CLewaimaiString::DoubleToString(data["today_recharge"].GetFloat(), 2);
  191. m_diannei_refund_member = to_string(data["diannei_refund_member"].GetInt());
  192. m_diannei_refund_money = CLewaimaiString::DoubleToString(data["diannei_refund_money"].GetFloat(), 2);
  193. m_diannei_discount_money = CLewaimaiString::DoubleToString(data["diannei_discount_money"].GetFloat(), 2);
  194. m_diannei_xianjin_value = CLewaimaiString::DoubleToString(data["ready_money"].GetFloat(), 2);
  195. m_diannei_xianjin_tuikuan = CLewaimaiString::DoubleToString(data["ready_money_refund"].GetFloat(), 2);
  196. m_diannei_xianjin_zengzhang = CLewaimaiString::DoubleToString(data["ready_money_boost"].GetFloat(), 2);
  197. //开始渲染数据
  198. CLabelUI* dianneinumLabel = static_cast<CLabelUI*>(this->FindSubControl(L"diannei_num"));
  199. dianneinumLabel->SetText(CLewaimaiString::UTF8ToUnicode(m_diannei_num).c_str());
  200. CLabelUI* dianneivalueLabel = static_cast<CLabelUI*>(this->FindSubControl(L"diannei_value"));
  201. dianneivalueLabel->SetText(CLewaimaiString::UTF8ToUnicode(m_diannei_value).c_str());
  202. /*
  203. CLabelUI* huiyuannumLabel = static_cast<CLabelUI*>(this->FindSubControl(L"huiyuan_num"));
  204. huiyuannumLabel->SetText(CLewaimaiString::UTF8ToUnicode(m_huiyuan_num).c_str());
  205. CLabelUI* huiyuanvalueLabel = static_cast<CLabelUI*>(this->FindSubControl(L"huiyuan_value"));
  206. huiyuanvalueLabel->SetText(CLewaimaiString::UTF8ToUnicode(m_huiyuan_value).c_str());
  207. */
  208. CLabelUI* diannei_tuikuan_numLabel = static_cast<CLabelUI*>(this->FindSubControl(L"diannei_tuikuan_num"));
  209. diannei_tuikuan_numLabel->SetText(CLewaimaiString::UTF8ToUnicode(m_diannei_refund_member).c_str());
  210. CLabelUI* diannei_tuikuan_valueLabel = static_cast<CLabelUI*>(this->FindSubControl(L"diannei_tuikuan_value"));
  211. diannei_tuikuan_valueLabel->SetText(CLewaimaiString::UTF8ToUnicode(m_diannei_refund_money).c_str());
  212. CLabelUI* diannei_youhui_valueLabel = static_cast<CLabelUI*>(this->FindSubControl(L"diannei_youhui_value"));
  213. diannei_youhui_valueLabel->SetText(CLewaimaiString::UTF8ToUnicode(m_diannei_discount_money).c_str());
  214. CLabelUI* diannei_xianjin_valueLabel = static_cast<CLabelUI*>(this->FindSubControl(L"diannei_xianjin_value"));
  215. diannei_xianjin_valueLabel->SetText(CLewaimaiString::UTF8ToUnicode(m_diannei_xianjin_value).c_str());
  216. CLabelUI* diannei_xianjin_tuikuanLabel = static_cast<CLabelUI*>(this->FindSubControl(L"diannei_xianjin_tuikuan"));
  217. diannei_xianjin_tuikuanLabel->SetText(CLewaimaiString::UTF8ToUnicode(m_diannei_xianjin_tuikuan).c_str());
  218. CLabelUI* diannei_xianjin_zengzhangLabel = static_cast<CLabelUI*>(this->FindSubControl(L"diannei_xianjin_zengzhang"));
  219. diannei_xianjin_zengzhangLabel->SetText(CLewaimaiString::UTF8ToUnicode(m_diannei_xianjin_zengzhang).c_str());
  220. CContainerUI* pOrderListLayout = static_cast<CContainerUI*>(this->FindSubControl(_T("data_layout")));
  221. pOrderListLayout->SetVisible(true);
  222. this->FindSubControl(_T("loading"))->SetVisible(false);
  223. }
  224. void CJiaobanPageUI::StartJiaoban()
  225. {
  226. //先进行打印
  227. CJiaobaoOrder order;
  228. order.m_init_time = m_init_time;
  229. order.m_end_time = m_end_time;
  230. order.m_diannei_num = m_diannei_num;
  231. order.m_huiyuan_num = m_huiyuan_num;
  232. order.m_diannei_value = m_diannei_value;
  233. order.m_huiyuan_value = m_huiyuan_value;
  234. order.m_diannei_refund_member = m_diannei_refund_member;
  235. order.m_diannei_refund_money = m_diannei_refund_money;
  236. order.m_diannei_discount_money = m_diannei_discount_money;
  237. order.m_diannei_xianjin_value = m_diannei_xianjin_value;
  238. order.m_diannei_xianjin_tuikuan = m_diannei_xianjin_tuikuan;
  239. order.m_diannei_xianjin_zengzhang = m_diannei_xianjin_zengzhang;
  240. order.shopname = CShopinfo::GetInstance()->m_shop_name;
  241. order.employee_name = CZhipuziHttpClient::GetInstance()->GetUsername();
  242. CPosPrinter printer;
  243. printer.PirntJiaobanOrder(order);
  244. //打印完成之后,退出登陆
  245. m_pMainWnd->LoginOut(1);
  246. }
  247. void CJiaobanPageUI::SetPos(RECT rc, bool bNeedInvalidate)
  248. {
  249. int m_nPageWidth = rc.right - rc.left;
  250. //添加支付方式
  251. int nWidth = m_nPageWidth;
  252. if (nWidth == 0)
  253. {
  254. return;
  255. }
  256. //根据宽度计算每行显示的数量
  257. int nMeihangNum = nWidth / 260;
  258. if (nMeihangNum < 1)
  259. {
  260. nMeihangNum = 1;
  261. }
  262. int num = 0;
  263. CHorizontalLayoutUI* pFenleiLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("jiaoban_page_yingye_items")));
  264. for (int i = 0; i < 2; i++)
  265. {
  266. CVerticalLayoutUI* curItem = static_cast<CVerticalLayoutUI*>(pFenleiLayout->GetItemAt(i));
  267. int curRow = num / nMeihangNum + 1;
  268. int curCol = num % nMeihangNum + 1;
  269. RECT rect;
  270. rect.left = (curCol - 1) * 260 + 20;
  271. rect.right = rect.left + 240;
  272. rect.top = (curRow - 1) * 146 + 20;
  273. rect.bottom = rect.top + 126;
  274. curItem->SetFloat(true);
  275. curItem->SetPos(rect);
  276. num++;
  277. }
  278. //调整区域高度
  279. CVerticalLayoutUI* pLayout = static_cast<CVerticalLayoutUI*>(this->FindSubControl(_T("jiaoban_page_yingye_layout")));
  280. int lastRow = (num - 1) / nMeihangNum + 1;
  281. pLayout->SetFixedHeight(lastRow * 146 + 20 + 30);
  282. CContainerUI::SetPos(rc, bNeedInvalidate);
  283. }