CShoukuanPageUI.cpp 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941
  1. #include "../pch/pch.h"
  2. #include "CShoukuanPageUI.h"
  3. #include "../control/ControlEx.h"
  4. #include "../wnd/CWeixinzhifuShoukuanWnd.h"
  5. #include "../wnd/CHuiyuanShoukuanWnd.h"
  6. #include "../wnd/CXianjinShoukuanWnd.h"
  7. #include "../wnd/CFulikaShoukuanWnd.h"
  8. #include "../wnd/CZidingyiShoukuanWnd.h"
  9. #include "../wnd/CMainWnd.h"
  10. #include "../print/CPosPrinter.h"
  11. CShoukuanPageUI::CShoukuanPageUI()
  12. {
  13. }
  14. CShoukuanPageUI::~CShoukuanPageUI()
  15. {
  16. }
  17. //初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用
  18. void CShoukuanPageUI::InitShow()
  19. {
  20. InitMoney();
  21. UpdateJiesuanInfo();
  22. if (m_is_zidingyizhifu_init == false)
  23. {
  24. //初始化结算页面的支付方式
  25. this->InitJiesuanZhifu();
  26. m_is_zidingyizhifu_init = true;
  27. }
  28. //更新结算按钮位置
  29. UpdateJiesuanZhifuPos();
  30. }
  31. //处理按钮点击类事件
  32. void CShoukuanPageUI::HandleClickMsg(TNotifyUI& msg)
  33. {
  34. CDuiString senderName = msg.pSender->GetName();
  35. if (senderName == L"jianpan_1")
  36. {
  37. CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("shoukuan_page_money_edit")));
  38. wstring wsReason = pContent->GetText();
  39. wsReason = CLewaimaiString::ShuziInputFormat(wsReason, L"1");
  40. pContent->SetText(wsReason.c_str());
  41. pContent->SetFocus();
  42. UpdateJiesuanInfo();
  43. }
  44. else if (senderName == L"jianpan_2")
  45. {
  46. CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("shoukuan_page_money_edit")));
  47. wstring wsReason = pContent->GetText();
  48. wsReason = CLewaimaiString::ShuziInputFormat(wsReason, L"2");
  49. pContent->SetText(wsReason.c_str());
  50. pContent->SetFocus();
  51. UpdateJiesuanInfo();
  52. }
  53. else if (senderName == L"jianpan_3")
  54. {
  55. CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("shoukuan_page_money_edit")));
  56. wstring wsReason = pContent->GetText();
  57. wsReason = CLewaimaiString::ShuziInputFormat(wsReason, L"3");
  58. pContent->SetText(wsReason.c_str());
  59. pContent->SetFocus();
  60. UpdateJiesuanInfo();
  61. }
  62. else if (senderName == L"jianpan_4")
  63. {
  64. CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("shoukuan_page_money_edit")));
  65. wstring wsReason = pContent->GetText();
  66. wsReason = CLewaimaiString::ShuziInputFormat(wsReason, L"4");
  67. pContent->SetText(wsReason.c_str());
  68. pContent->SetFocus();
  69. UpdateJiesuanInfo();
  70. }
  71. else if (senderName == L"jianpan_5")
  72. {
  73. CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("shoukuan_page_money_edit")));
  74. wstring wsReason = pContent->GetText();
  75. wsReason = CLewaimaiString::ShuziInputFormat(wsReason, L"5");
  76. pContent->SetText(wsReason.c_str());
  77. pContent->SetFocus();
  78. UpdateJiesuanInfo();
  79. }
  80. else if (senderName == L"jianpan_6")
  81. {
  82. CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("shoukuan_page_money_edit")));
  83. wstring wsReason = pContent->GetText();
  84. wsReason = CLewaimaiString::ShuziInputFormat(wsReason, L"6");
  85. pContent->SetText(wsReason.c_str());
  86. pContent->SetFocus();
  87. UpdateJiesuanInfo();
  88. }
  89. else if (senderName == L"jianpan_7")
  90. {
  91. CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("shoukuan_page_money_edit")));
  92. wstring wsReason = pContent->GetText();
  93. wsReason = CLewaimaiString::ShuziInputFormat(wsReason, L"7");
  94. pContent->SetText(wsReason.c_str());
  95. pContent->SetFocus();
  96. UpdateJiesuanInfo();
  97. }
  98. else if (senderName == L"jianpan_8")
  99. {
  100. CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("shoukuan_page_money_edit")));
  101. wstring wsReason = pContent->GetText();
  102. wsReason = CLewaimaiString::ShuziInputFormat(wsReason, L"8");
  103. pContent->SetText(wsReason.c_str());
  104. pContent->SetFocus();
  105. UpdateJiesuanInfo();
  106. }
  107. else if (senderName == L"jianpan_9")
  108. {
  109. CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("shoukuan_page_money_edit")));
  110. wstring wsReason = pContent->GetText();
  111. wsReason = CLewaimaiString::ShuziInputFormat(wsReason, L"9");
  112. pContent->SetText(wsReason.c_str());
  113. pContent->SetFocus();
  114. UpdateJiesuanInfo();
  115. }
  116. else if (senderName == L"jianpan_0")
  117. {
  118. CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("shoukuan_page_money_edit")));
  119. wstring wsReason = pContent->GetText();
  120. wsReason = CLewaimaiString::ShuziInputFormat(wsReason, L"0");
  121. pContent->SetText(wsReason.c_str());
  122. pContent->SetFocus();
  123. UpdateJiesuanInfo();
  124. }
  125. else if (senderName == L"jianpan_dian")
  126. {
  127. CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("shoukuan_page_money_edit")));
  128. wstring wsReason = pContent->GetText();
  129. wsReason = CLewaimaiString::ShuziInputFormat(wsReason, L".");
  130. pContent->SetText(wsReason.c_str());
  131. pContent->SetFocus();
  132. UpdateJiesuanInfo();
  133. }
  134. else if (senderName == L"jianpan_qingkong")
  135. {
  136. CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("shoukuan_page_money_edit")));
  137. wstring wsReason = pContent->GetText();
  138. wsReason = L"0";
  139. pContent->SetText(wsReason.c_str());
  140. pContent->SetFocus();
  141. UpdateJiesuanInfo();
  142. }
  143. else if (senderName == L"diandan_jiesuan_zhifufangshi_weixinzhifu_btn")
  144. {
  145. //点击微信支付
  146. this->StartWeixinzhifuShoukuan();
  147. }
  148. else if (senderName == L"diandan_jiesuan_zhifufangshi_shoukuan_btn")
  149. {
  150. //点击会员支付
  151. this->StartHuiyuanShoukuan();
  152. }
  153. else if (senderName == L"diandan_jiesuan_zhifufangshi_xianjin_btn")
  154. {
  155. //点击现金收款
  156. this->StartXianjinShoukuan();
  157. }
  158. else if (senderName == L"diandan_jiesuan_zhifufangshi_fulika_btn")
  159. {
  160. //福利卡收款
  161. this->StartFulikaShoukuan();
  162. }
  163. else if (senderName == L"diandan_jiesuan_zhifufangshi_zidingyi_btn")
  164. {
  165. //自定义支付
  166. std::wstring name = msg.pSender->GetText();
  167. std::wstring selfpay_id = msg.pSender->GetCustomAttribute(L"selfpay_id");
  168. this->StartZidingyiShoukuan(name, selfpay_id);
  169. }
  170. }
  171. //处理option切换事件
  172. void CShoukuanPageUI::HandleSelectChangeMsg(TNotifyUI& msg)
  173. {
  174. }
  175. //处理下拉框、radio的切换事件
  176. void CShoukuanPageUI::HandleItemSelectMsg(TNotifyUI& msg)
  177. {
  178. }
  179. //处理编辑框输入内容改变事件
  180. void CShoukuanPageUI::HandleTextChangedMsg(TNotifyUI& msg)
  181. {
  182. }
  183. //处理扫码枪捕捉到的扫码信息
  184. void CShoukuanPageUI::HandleTextCapture(std::string content)
  185. {
  186. if (m_is_show_modal_wnd == true)
  187. {
  188. m_curModalWnd->HandleTextCapture(content);
  189. return;
  190. }
  191. //按付款码处理
  192. std::string s_Fukuanma = content;
  193. int length = s_Fukuanma.size();
  194. if (length != 18 && length != 19)
  195. {
  196. //肯定不是付款码
  197. m_pMainWnd->ShowToast(L"无效的条码!");
  198. return;
  199. }
  200. for (int i = 0; i < length; i++)
  201. {
  202. char c = *(s_Fukuanma.c_str() + i);
  203. if (isdigit(c) == 0)
  204. {
  205. //不是数字
  206. m_pMainWnd->ShowToast(L"无效的条码!");
  207. return;
  208. }
  209. }
  210. if (s_Fukuanma.find("10") == 0 \
  211. || s_Fukuanma.find("11") == 0 \
  212. || s_Fukuanma.find("12") == 0 \
  213. || s_Fukuanma.find("13") == 0 \
  214. || s_Fukuanma.find("14") == 0 \
  215. || s_Fukuanma.find("15") == 0)
  216. {
  217. //微信付款码
  218. }
  219. else if (s_Fukuanma.find("25") == 0 \
  220. || s_Fukuanma.find("26") == 0 \
  221. || s_Fukuanma.find("27") == 0 \
  222. || s_Fukuanma.find("28") == 0 \
  223. || s_Fukuanma.find("29") == 0 \
  224. || s_Fukuanma.find("30") == 0)
  225. {
  226. //支付宝付款码
  227. }
  228. else if (s_Fukuanma.find("62") == 0)
  229. {
  230. //云闪付付款码
  231. }
  232. else
  233. {
  234. m_pMainWnd->ShowToast(L"无效的条码!");
  235. return;
  236. }
  237. //代码能走到这里,说明肯定就是付款码了,默认唤起支付
  238. this->StartWeixinzhifuShoukuan(content);
  239. }
  240. void CShoukuanPageUI::ShowError(std::wstring err)
  241. {
  242. CLabelUI* m_pLabel = static_cast<CLabelUI*>(this->FindSubControl(_T("errorinfo")));
  243. m_pLabel->SetText(err.c_str());
  244. m_pLabel->SetVisible(true);
  245. this->FindSubControl(L"shoukuan_info_layout")->SetVisible(false);
  246. this->FindSubControl(L"shoukuan_page_no_layout")->SetVisible(true);
  247. }
  248. void CShoukuanPageUI::HideError()
  249. {
  250. CLabelUI* m_pLabel = static_cast<CLabelUI*>(this->FindSubControl(_T("errorinfo")));
  251. m_pLabel->SetVisible(true);
  252. }
  253. void CShoukuanPageUI::InitJiesuanZhifu()
  254. {
  255. CHorizontalLayoutUI* pZhifufangshiLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhifufangshi_layout")));
  256. int num = 0;
  257. CHorizontalLayoutUI* pWeixinLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhifufangshi_weixinzhifu")));
  258. if (CShopinfo::GetInstance()->m_is_online_pay_open == "1")
  259. {
  260. //展示微信支付,并且调整位置
  261. pWeixinLayout->SetVisible(true);
  262. num++;
  263. }
  264. else
  265. {
  266. pZhifufangshiLayout->RemoveAt(num);
  267. }
  268. //会员支付
  269. CHorizontalLayoutUI* pHuiyuanLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhifufangshi_huiyuan")));
  270. if (CShopinfo::GetInstance()->m_is_vip_pay_open == "1")
  271. {
  272. pHuiyuanLayout->SetVisible(true);
  273. num++;
  274. }
  275. else
  276. {
  277. pZhifufangshiLayout->RemoveAt(num);
  278. }
  279. //现金支付
  280. CHorizontalLayoutUI* pXianjinLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhifufangshi_xianjin")));
  281. if (CShopinfo::GetInstance()->m_is_cash_pay_open == "1")
  282. {
  283. pXianjinLayout->SetVisible(true);
  284. num++;
  285. }
  286. else
  287. {
  288. pZhifufangshiLayout->RemoveAt(num);
  289. }
  290. /*
  291. //购物卡
  292. CHorizontalLayoutUI* pGouwukaLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhifufangshi_gouwuka")));
  293. if (CShopinfo::GetInstance()->m_is_giftcard_pay_open == "1")
  294. {
  295. pGouwukaLayout->SetVisible(true);
  296. num++;
  297. }
  298. else
  299. {
  300. pGouwukaLayout->SetVisible(false);
  301. }
  302. //美食城临时卡
  303. CHorizontalLayoutUI* pMeishichengLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhifufangshi_meishicheng")));
  304. if (CShopinfo::GetInstance()->m_is_food_town_card_pay_open == "1")
  305. {
  306. pMeishichengLayout->SetVisible(true);
  307. num++;
  308. }
  309. else
  310. {
  311. pMeishichengLayout->SetVisible(false);
  312. }
  313. */
  314. //福利卡
  315. CHorizontalLayoutUI* pFulikaLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhifufangshi_fulika")));
  316. if (CShopinfo::GetInstance()->m_is_open_fulika_pay == "1")
  317. {
  318. pFulikaLayout->SetVisible(true);
  319. num++;
  320. }
  321. else
  322. {
  323. pZhifufangshiLayout->RemoveAt(num);
  324. }
  325. //接着添加自定义支付的
  326. for (std::vector<SelfPay>::iterator it = CShopinfo::GetInstance()->m_self_pay.begin(); it != CShopinfo::GetInstance()->m_self_pay.end(); it++)
  327. {
  328. SelfPay selfpay = *it;
  329. if (selfpay.is_open == "1")
  330. {
  331. CButtonUI* newButton = new CButtonUI();
  332. newButton->SetFixedWidth(120);
  333. newButton->SetFixedHeight(80);
  334. newButton->SetText(CLewaimaiString::UTF8ToUnicode(selfpay.name).c_str());
  335. newButton->SetBorderSize(1);
  336. newButton->SetBorderColor(0xFFC1C1C1);
  337. newButton->SetBkColor(0xFFF7F7F7);
  338. //设置定义属性,在点击按钮的时候好区分
  339. newButton->SetAttribute(L"name", L"diandan_jiesuan_zhifufangshi_zidingyi_btn");
  340. newButton->AddCustomAttribute(L"selfpay_id", CLewaimaiString::UTF8ToUnicode(selfpay.id).c_str());
  341. newButton->SetAttribute(L"float", L"true");
  342. //必须先Add,才能调用下面的SetPos,否则无效
  343. pZhifufangshiLayout->Add(newButton);
  344. num++;
  345. }
  346. }
  347. m_nZhiufuNum = num;
  348. }
  349. void CShoukuanPageUI::UpdateJiesuanZhifuPos()
  350. {
  351. //添加支付方式
  352. int nWidth = m_nPageWidth;
  353. if (nWidth == 0)
  354. {
  355. return;
  356. }
  357. int nZhangdanWidth = nWidth - 420 - 5;
  358. if (nZhangdanWidth < 290)
  359. {
  360. nZhangdanWidth = 290;
  361. }
  362. CVerticalLayoutUI* pZhangdanLayout = static_cast<CVerticalLayoutUI*>(this->FindSubControl(L"diandan_page_jiesuan_zhangdan_layout"));
  363. pZhangdanLayout->SetFixedWidth(nZhangdanWidth);
  364. //根据宽度计算每行显示的数量
  365. int nMeihangNum = (nZhangdanWidth) / 144;
  366. if (nMeihangNum < 1)
  367. {
  368. nMeihangNum = 1;
  369. }
  370. int num = 0;
  371. CHorizontalLayoutUI* pZhifufangshiLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhifufangshi_layout")));
  372. for (int i = 0; i < m_nZhiufuNum; i++)
  373. {
  374. CButtonUI* curItem = static_cast<CButtonUI*>(pZhifufangshiLayout->GetItemAt(i));
  375. int curRow = num / nMeihangNum + 1;
  376. int curCol = num % nMeihangNum + 1;
  377. RECT rect;
  378. rect.left = (curCol - 1) * 140 + 20;
  379. rect.right = rect.left + 120;
  380. rect.top = (curRow - 1) * 100 + 20;
  381. rect.bottom = rect.top + 80;
  382. curItem->SetPos(rect);
  383. num++;
  384. }
  385. //调整区域高度
  386. int lastRow = (num - 1) / nMeihangNum + 1;
  387. pZhifufangshiLayout->SetFixedHeight(lastRow * 105);
  388. }
  389. //初始化收款金额
  390. void CShoukuanPageUI::InitMoney()
  391. {
  392. CEditUI* pMoneyEdit = static_cast<CEditUI*>(this->FindSubControl(_T("shoukuan_page_money_edit")));
  393. pMoneyEdit->SetText(L"0");
  394. }
  395. std::string CShoukuanPageUI::GetMoney()
  396. {
  397. CEditUI* pJiajiaEdit = static_cast<CEditUI*>(this->FindSubControl(_T("shoukuan_page_money_edit")));
  398. wstring ws_jiajia = pJiajiaEdit->GetText();
  399. double money = atof(CLewaimaiString::UnicodeToUTF8(ws_jiajia).c_str());
  400. return CLewaimaiString::DoubleToString(money, 2);
  401. }
  402. void CShoukuanPageUI::UpdateJiesuanInfo()
  403. {
  404. //再刷新账单明细展示
  405. CVerticalLayoutUI* pmingxiLayout = static_cast<CVerticalLayoutUI*>(this->FindSubControl(_T("diandan_jiesuan_zhangdanmingxi_jiage_layout")));
  406. pmingxiLayout->RemoveAll();
  407. std::string money = this->GetMoney();
  408. int item_num = 0;
  409. //先显示基础价格
  410. if (true)
  411. {
  412. CDialogBuilder builder;
  413. CDialogBuilderCallbackEx cb;
  414. CHorizontalLayoutUI* pItem = static_cast<CHorizontalLayoutUI*>(builder.Create(_T("diandan_zhangdanmingxi_item.xml"), (UINT)0, &cb, m_pManager));
  415. pmingxiLayout->Add(pItem);
  416. CLabelUI* pName = static_cast<CLabelUI*>(pItem->FindSubControl(_T("name")));
  417. CLabelUI* pValue = static_cast<CLabelUI*>(pItem->FindSubControl(_T("value")));
  418. pName->SetText(L"原价:");
  419. pValue->SetText((CLewaimaiString::UTF8ToUnicode(money) + L"元").c_str());
  420. item_num++;
  421. }
  422. pmingxiLayout->SetFixedHeight(item_num * 40);
  423. CLabelUI* pYingshou = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_jiesuan_total_yingshou")));
  424. pYingshou->SetText((L"应收金额:" + CLewaimaiString::UTF8ToUnicode(money) + L"元").c_str());
  425. }
  426. //开始进行微信支付收款,如果fukuanma不为空,默认自动唤起支付
  427. void CShoukuanPageUI::StartWeixinzhifuShoukuan(std::string fukuanma)
  428. {
  429. if (m_is_show_modal_wnd == true)
  430. {
  431. return;
  432. }
  433. if (atof(GetMoney().c_str()) < 0.0001)
  434. {
  435. m_pMainWnd->ShowToast(L"收款金额不能为0");
  436. return;
  437. }
  438. CWeixinzhifuShoukuanWnd* pShoukuanWnd = new CWeixinzhifuShoukuanWnd;
  439. if (pShoukuanWnd != NULL)
  440. {
  441. m_is_show_modal_wnd = true;
  442. m_curModalWnd = pShoukuanWnd;
  443. pShoukuanWnd->SetType(4);
  444. pShoukuanWnd->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
  445. pShoukuanWnd->SetIcon(IDI_ICON_DUILIB);
  446. pShoukuanWnd->CenterWindow();
  447. std::string format_string = GetMoney();
  448. std::wstring watchValue = CLewaimaiString::UTF8ToUnicode(format_string);
  449. pShoukuanWnd->InitMoney(watchValue);
  450. //这里要对提交订单的参数进行组装,然后方便请求
  451. pShoukuanWnd->SetCommonParams(GetSendorderParams());
  452. if (fukuanma != "")
  453. {
  454. pShoukuanWnd->InitFukuanma(fukuanma);
  455. }
  456. UINT ret = pShoukuanWnd->ShowModal();
  457. if (ret == IDOK)
  458. {
  459. int fukuanma_type = pShoukuanWnd->m_fukuanma_type;
  460. std::string zhifu_type;
  461. if (fukuanma_type == 1)
  462. {
  463. zhifu_type = "weixinzhifu";
  464. }
  465. else if (fukuanma_type == 2)
  466. {
  467. zhifu_type = "zhifubao";
  468. }
  469. else if (fukuanma_type == 3)
  470. {
  471. zhifu_type = "yunshanfu";
  472. }
  473. //说明收款成功了,需要进行一些后续的处理
  474. this->StartWorkAfterShoukuan(pShoukuanWnd->m_show_trade_no, zhifu_type);
  475. m_pMainWnd->ShowToast(L"收款成功!");
  476. }
  477. else
  478. {
  479. }
  480. m_is_show_modal_wnd = false;
  481. delete pShoukuanWnd;
  482. }
  483. }
  484. //开始进行会员收款
  485. void CShoukuanPageUI::StartHuiyuanShoukuan()
  486. {
  487. if (m_is_show_modal_wnd == true)
  488. {
  489. return;
  490. }
  491. if (atof(GetMoney().c_str()) < 0.0001)
  492. {
  493. m_pMainWnd->ShowToast(L"收款金额不能为0");
  494. return;
  495. }
  496. CHuiyuanShoukuanWnd* pShoukuanWnd = new CHuiyuanShoukuanWnd();
  497. if (pShoukuanWnd != NULL)
  498. {
  499. m_is_show_modal_wnd = true;
  500. m_curModalWnd = pShoukuanWnd;
  501. pShoukuanWnd->SetType(4);
  502. pShoukuanWnd->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
  503. pShoukuanWnd->SetIcon(IDI_ICON_DUILIB);
  504. pShoukuanWnd->CenterWindow();
  505. std::string format_string = GetMoney();
  506. std::wstring watchValue = CLewaimaiString::UTF8ToUnicode(format_string);
  507. pShoukuanWnd->InitMoney(watchValue);
  508. //这里要对提交订单的参数进行组装,然后方便请求
  509. pShoukuanWnd->SetCommonParams(GetSendorderParams());
  510. /*
  511. if (m_is_start_catch && m_catch_string.length() == 18)
  512. {
  513. pShoukuanWnd->InitFukuanma(m_catch_string);
  514. }
  515. }*/
  516. UINT ret = pShoukuanWnd->ShowModal();
  517. if (ret == IDOK)
  518. {
  519. std::string balance = pShoukuanWnd->m_balance;
  520. std::string member_number = pShoukuanWnd->m_member_number;
  521. //说明收款成功了,需要进行一些后续的处理
  522. this->StartWorkAfterShoukuan(pShoukuanWnd->m_show_trade_no, "huiyuanzhifu", balance, member_number);
  523. m_pMainWnd->ShowToast(L"收款成功!");
  524. }
  525. m_is_show_modal_wnd = false;
  526. delete pShoukuanWnd;
  527. }
  528. }
  529. //开始进行现金收款
  530. void CShoukuanPageUI::StartXianjinShoukuan()
  531. {
  532. if (m_is_show_modal_wnd == true)
  533. {
  534. return;
  535. }
  536. if (atof(GetMoney().c_str()) < 0.0001)
  537. {
  538. m_pMainWnd->ShowToast(L"收款金额不能为0");
  539. return;
  540. }
  541. CXianjinShoukuanWnd* pShoukuanWnd = new CXianjinShoukuanWnd();
  542. if (pShoukuanWnd != NULL)
  543. {
  544. m_is_show_modal_wnd = true;
  545. m_curModalWnd = pShoukuanWnd;
  546. pShoukuanWnd->SetType(4);
  547. pShoukuanWnd->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
  548. pShoukuanWnd->SetIcon(IDI_ICON_DUILIB);
  549. pShoukuanWnd->CenterWindow();
  550. std::string format_string = GetMoney();
  551. std::wstring watchValue = CLewaimaiString::UTF8ToUnicode(format_string);
  552. pShoukuanWnd->InitMoney(watchValue);
  553. //这里要对提交订单的参数进行组装,然后方便请求
  554. pShoukuanWnd->SetCommonParams(GetSendorderParams());
  555. /*
  556. if (m_is_start_catch && m_catch_string.length() == 18)
  557. {
  558. pShoukuanWnd->InitFukuanma(m_catch_string);
  559. }
  560. }*/
  561. UINT ret = pShoukuanWnd->ShowModal();
  562. if (ret == IDOK)
  563. {
  564. m_shishou_value = pShoukuanWnd->m_shishou;
  565. m_zhaoling_value = pShoukuanWnd->m_zhaoling;
  566. //说明收款成功了,需要进行一些后续的处理
  567. this->StartWorkAfterShoukuan(pShoukuanWnd->m_show_trade_no, "xianjinzhifu");
  568. m_pMainWnd->ShowToast(L"收款成功!");
  569. }
  570. m_is_show_modal_wnd = false;
  571. delete pShoukuanWnd;
  572. }
  573. }
  574. //开始进行福利卡收款
  575. void CShoukuanPageUI::StartFulikaShoukuan()
  576. {
  577. if (m_is_show_modal_wnd == true)
  578. {
  579. return;
  580. }
  581. if (atof(GetMoney().c_str()) < 0.0001)
  582. {
  583. m_pMainWnd->ShowToast(L"收款金额不能为0");
  584. return;
  585. }
  586. CFulikaShoukuanWnd* pShoukuanWnd = new CFulikaShoukuanWnd();
  587. if (pShoukuanWnd != NULL)
  588. {
  589. m_is_show_modal_wnd = true;
  590. m_curModalWnd = pShoukuanWnd;
  591. pShoukuanWnd->SetType(4);
  592. pShoukuanWnd->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
  593. pShoukuanWnd->SetIcon(IDI_ICON_DUILIB);
  594. pShoukuanWnd->CenterWindow();
  595. std::string format_string = GetMoney();
  596. std::wstring watchValue = CLewaimaiString::UTF8ToUnicode(format_string);
  597. pShoukuanWnd->InitMoney(watchValue);
  598. //这里要对提交订单的参数进行组装,然后方便请求
  599. pShoukuanWnd->SetCommonParams(GetSendorderParams());
  600. /*
  601. if (m_is_start_catch && m_catch_string.length() == 18)
  602. {
  603. pShoukuanWnd->InitFukuanma(m_catch_string);
  604. }
  605. }*/
  606. UINT ret = pShoukuanWnd->ShowModal();
  607. if (ret == IDOK)
  608. {
  609. //说明收款成功了,需要进行一些后续的处理
  610. this->StartWorkAfterShoukuan(pShoukuanWnd->m_show_trade_no, "fulikazhifu");
  611. m_pMainWnd->ShowToast(L"收款成功!");
  612. }
  613. m_is_show_modal_wnd = false;
  614. delete pShoukuanWnd;
  615. }
  616. }
  617. //开始自定义支付收款
  618. void CShoukuanPageUI::StartZidingyiShoukuan(std::wstring name, std::wstring selfpay_id)
  619. {
  620. if (m_is_show_modal_wnd == true)
  621. {
  622. return;
  623. }
  624. if (atof(GetMoney().c_str()) < 0.0001)
  625. {
  626. m_pMainWnd->ShowToast(L"收款金额不能为0");
  627. return;
  628. }
  629. CZidingyiShoukuanWnd* pShoukuanWnd = new CZidingyiShoukuanWnd();
  630. if (pShoukuanWnd != NULL)
  631. {
  632. m_is_show_modal_wnd = true;
  633. m_curModalWnd = pShoukuanWnd;
  634. pShoukuanWnd->SetType(4);
  635. pShoukuanWnd->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
  636. pShoukuanWnd->SetIcon(IDI_ICON_DUILIB);
  637. pShoukuanWnd->CenterWindow();
  638. std::string format_string = GetMoney();
  639. std::wstring watchValue = CLewaimaiString::UTF8ToUnicode(format_string);
  640. pShoukuanWnd->InitMoney(watchValue);
  641. //这里要对提交订单的参数进行组装,然后方便请求
  642. pShoukuanWnd->SetCommonParams(GetSendorderParams());
  643. /*
  644. if (m_is_start_catch && m_catch_string.length() == 18)
  645. {
  646. pShoukuanWnd->InitFukuanma(m_catch_string);
  647. }
  648. }*/
  649. pShoukuanWnd->SetZidingyiName(name);
  650. pShoukuanWnd->SetZidingyiId(selfpay_id);
  651. UINT ret = pShoukuanWnd->ShowModal();
  652. if (ret == IDOK)
  653. {
  654. //说明收款成功了,需要进行一些后续的处理
  655. this->StartWorkAfterShoukuan(pShoukuanWnd->m_show_trade_no, "zidingyizhifu");
  656. m_pMainWnd->ShowToast(L"收款成功!");
  657. }
  658. m_is_show_modal_wnd = false;
  659. delete pShoukuanWnd;
  660. }
  661. }
  662. //获取通用参数,任何支付方式都要用到的参数,个性化参数在弹框里面处理
  663. //参考文档 http://apidoc.zhipuzi.com/index.php/home/item/show?item_id=4
  664. std::map<string, string> CShoukuanPageUI::GetSendorderParams()
  665. {
  666. std::map<string, string> params;
  667. params["order_no"] = CRandomHelper::GetRandString(20);
  668. params["yingshou_value"] = GetMoney();
  669. params["shishou_value"] = GetMoney();
  670. params["zhaoling_value"] = "0";
  671. params["zhifu_type"] = "";
  672. return params;
  673. }
  674. void CShoukuanPageUI::StartWorkAfterShoukuan(std::string show_trade_no, std::string shoukuan_type, std::string balance, std::string member_number)
  675. {
  676. //针对现金收款成功,单独做一个打开钱箱的判断处理
  677. if (shoukuan_type == "xianjinzhifu")
  678. {
  679. std::string setting_is_diannei_xianjin_qianxiang = CSetting::GetInstance()->GetParam("setting_is_diannei_xianjin_qianxiang");
  680. if (setting_is_diannei_xianjin_qianxiang == "1")
  681. {
  682. //打开钱箱
  683. CPosPrinter printer;
  684. printer.OpenQianxiang();
  685. }
  686. }
  687. //处理小票打印
  688. //处理打印
  689. CShoukuanOrder order = this->GetPrintOrderinfo(show_trade_no, shoukuan_type, balance, member_number);
  690. CPosPrinter printer;
  691. printer.PrintShoukuanOrder(order);
  692. //最后还原收款金额
  693. this->InitMoney();
  694. this->UpdateJiesuanInfo();
  695. }
  696. CShoukuanOrder CShoukuanPageUI::GetPrintOrderinfo(std::string show_trade_no, std::string shoukuan_type, std::string balance, std::string member_number)
  697. {
  698. CShoukuanOrder newOrder;
  699. newOrder.m_money = this->GetMoney();
  700. newOrder.shopname = CShopinfo::GetInstance()->m_shop_name;
  701. newOrder.show_trade_no = show_trade_no;
  702. newOrder.balance = balance;
  703. newOrder.member_number = member_number;
  704. if (shoukuan_type == "weixinzhifu")
  705. {
  706. newOrder.shoukuan_type = CLewaimaiString::UnicodeToUTF8(L"微信支付");
  707. }
  708. else if (shoukuan_type == "zhifubao")
  709. {
  710. newOrder.shoukuan_type = CLewaimaiString::UnicodeToUTF8(L"支付宝");
  711. }
  712. else if (shoukuan_type == "yunshanfu")
  713. {
  714. newOrder.shoukuan_type = CLewaimaiString::UnicodeToUTF8(L"云闪付");
  715. }
  716. else if (shoukuan_type == "huiyuanzhifu")
  717. {
  718. newOrder.shoukuan_type = CLewaimaiString::UnicodeToUTF8(L"会员支付");
  719. }
  720. else if (shoukuan_type == "xianjinzhifu")
  721. {
  722. newOrder.shoukuan_type = CLewaimaiString::UnicodeToUTF8(L"现金支付");
  723. }
  724. else if (shoukuan_type == "fulikazhifu")
  725. {
  726. newOrder.shoukuan_type = CLewaimaiString::UnicodeToUTF8(L"福利卡支付");
  727. }
  728. else if (shoukuan_type == "zidingyizhifu")
  729. {
  730. newOrder.shoukuan_type = CLewaimaiString::UnicodeToUTF8(L"自定义支付");
  731. }
  732. newOrder.order_from = 1;
  733. newOrder.init_time = CLewaimaiTime::DatetimeToString(time(NULL));
  734. newOrder.employee_name = CSetting::GetInstance()->getUsername();
  735. return newOrder;
  736. }
  737. void CShoukuanPageUI::SetPos(RECT rc, bool bNeedInvalidate)
  738. {
  739. m_nPageWidth = rc.right - rc.left;
  740. //拖动窗口的时候,更新位置
  741. UpdateJiesuanZhifuPos();
  742. CContainerUI::SetPos(rc, bNeedInvalidate);
  743. }