Commit 3dae89576ed60c11056634da05f0e621472b6807

Authored by liuye
1 parent e3d9764a

feat<central_clearing_system>:调整下单流程,未完成,剩余支付打印接口未调

central_clearing_system/Config/menu_res_auth_cfg.json
@@ -6,19 +6,19 @@ @@ -6,19 +6,19 @@
6 {"res_id":2, "auth_id":1010, "icon":"", "index":[1]}, 6 {"res_id":2, "auth_id":1010, "icon":"", "index":[1]},
7 {"res_id":20001, "auth_id":101001, "icon":"user_manage.ico", "index":[1, 0]}, 7 {"res_id":20001, "auth_id":101001, "icon":"user_manage.ico", "index":[1, 0]},
8 {"res_id":20002, "auth_id":101002, "icon":"role_manage.ico", "index":[1, 1]}, 8 {"res_id":20002, "auth_id":101002, "icon":"role_manage.ico", "index":[1, 1]},
9 - {"res_id":20003, "auth_id":101003, "icon":"role_manage.ico", "index":[1, 2]},  
10 - {"res_id":30001, "auth_id":103001, "icon":"role_manage.ico", "index":[2]}, 9 + {"res_id":20003, "auth_id":101003, "icon":"trade.ico", "index":[1, 2]},
  10 + {"res_id":30001, "auth_id":103001, "icon":"trade.ico", "index":[2]},
11 {"res_id":4, "auth_id":1020, "icon":"", "index":[3]}, 11 {"res_id":4, "auth_id":1020, "icon":"", "index":[3]},
12 - {"res_id":40001, "auth_id":102001, "icon":"user_manage.ico", "index":[3, 0]},  
13 - {"res_id":40002, "auth_id":102002, "icon":"user_manage.ico", "index":[3, 1]},  
14 - {"res_id":40003, "auth_id":102003, "icon":"user_manage.ico", "index":[3, 2]},  
15 - {"res_id":40004, "auth_id":102004, "icon":"user_manage.ico", "index":[3, 3]},  
16 - {"res_id":40005, "auth_id":102005, "icon":"user_manage.ico", "index":[3, 4]}, 12 + {"res_id":40001, "auth_id":102001, "icon":"trade.ico", "index":[3, 0]},
  13 + {"res_id":40002, "auth_id":102002, "icon":"trade.ico", "index":[3, 1]},
  14 + {"res_id":40003, "auth_id":102003, "icon":"trade.ico", "index":[3, 2]},
  15 + {"res_id":40004, "auth_id":102004, "icon":"trade.ico", "index":[3, 3]},
  16 + {"res_id":40005, "auth_id":102005, "icon":"trade.ico", "index":[3, 4]},
17 {"res_id":5, "auth_id":1040, "icon":"", "index":[4]}, 17 {"res_id":5, "auth_id":1040, "icon":"", "index":[4]},
18 - {"res_id":50001, "auth_id":104001, "icon":"user_manage.ico", "index":[4, 0]},  
19 - {"res_id":50002, "auth_id":104002, "icon":"user_manage.ico", "index":[4, 1]},  
20 - {"res_id":50003, "auth_id":104003, "icon":"user_manage.ico", "index":[4, 2]},  
21 - {"res_id":50004, "auth_id":104004, "icon":"user_manage.ico", "index":[4, 3]},  
22 - {"res_id":11001, "auth_id":0, "icon":"exit.ico", "index":[]},  
23 - {"res_id":11002, "auth_id":0, "icon":"modify_account_pwd.ico","index":[]} 18 + {"res_id":50001, "auth_id":104001, "icon":"trade.ico", "index":[4, 0]},
  19 + {"res_id":50002, "auth_id":104002, "icon":"trade.ico", "index":[4, 1]},
  20 + {"res_id":50003, "auth_id":104003, "icon":"trade.ico", "index":[4, 2]},
  21 + {"res_id":50004, "auth_id":104004, "icon":"trade.ico", "index":[4, 3]},
  22 + {"res_id":11001, "auth_id":0, "icon":"exit.ico", "index":[]},
  23 + {"res_id":11002, "auth_id":0, "icon":"modify_account_pwd.ico", "index":[]}
24 ] 24 ]
25 \ No newline at end of file 25 \ No newline at end of file
central_clearing_system/Config/url_cfg.json
1 { 1 {
2 "protocol": "http", 2 "protocol": "http",
3 "host": "xtrade.esc.diligrp.com", 3 "host": "xtrade.esc.diligrp.com",
4 - "port": 80, 4 + "port": 8080,
5 "main_path": "/iset/oauth/clientInitMain.iset", 5 "main_path": "/iset/oauth/clientInitMain.iset",
6 "login_path": "/iset/oauth/login.auth", 6 "login_path": "/iset/oauth/login.auth",
7 "logout_path": "/iset/oauth/logout.auth", 7 "logout_path": "/iset/oauth/logout.auth",
central_clearing_system/ETradeClient.rc
@@ -258,7 +258,7 @@ BEGIN @@ -258,7 +258,7 @@ BEGIN
258 LTEXT "总计金额:",IDC_PAY_STATIC_TOTAL_MONEY,18,20,41,8 258 LTEXT "总计金额:",IDC_PAY_STATIC_TOTAL_MONEY,18,20,41,8
259 LTEXT "",IDC_PAY_STATIC_MONEY,73,20,8,8 259 LTEXT "",IDC_PAY_STATIC_MONEY,73,20,8,8
260 LTEXT "密 码:",IDC_PAY_STATIC_PASSWORD,18,50,31,8 260 LTEXT "密 码:",IDC_PAY_STATIC_PASSWORD,18,50,31,8
261 - EDITTEXT IDC_PAY_EDIT_PASSWORD,56,46,40,14,ES_MULTILINE | ES_AUTOHSCROLL 261 + EDITTEXT IDC_PAY_EDIT_PASSWORD,56,46,40,14,ES_PASSWORD | ES_AUTOHSCROLL
262 PUSHBUTTON "输入密码(&A)",IDC_PAY_BUTTON_PASSWORD,151,51,71,18 262 PUSHBUTTON "输入密码(&A)",IDC_PAY_BUTTON_PASSWORD,151,51,71,18
263 PUSHBUTTON "关闭(&S)",IDC_PAY_BUTTON_CLOSE,155,94,67,17 263 PUSHBUTTON "关闭(&S)",IDC_PAY_BUTTON_CLOSE,155,94,67,17
264 PUSHBUTTON "付款(&F)",IDC_PAY_BUTTON_PAY,72,94,67,17 264 PUSHBUTTON "付款(&F)",IDC_PAY_BUTTON_PAY,72,94,67,17
@@ -337,7 +337,6 @@ BEGIN @@ -337,7 +337,6 @@ BEGIN
337 337
338 IDD_DIALOG_PLACE_ORDER, DIALOG 338 IDD_DIALOG_PLACE_ORDER, DIALOG
339 BEGIN 339 BEGIN
340 - MOCKUP, 1, 50, -25, -30, "C:\Users\WangGY\Desktop\TIM图片20180918183513.png"  
341 RIGHTMARGIN, 337 340 RIGHTMARGIN, 337
342 HORZGUIDE, 67 341 HORZGUIDE, 67
343 END 342 END
central_clearing_system/ETradeClient/hardware/hardware_cmd.cpp
@@ -52,6 +52,8 @@ namespace StatusCode @@ -52,6 +52,8 @@ namespace StatusCode
52 static const std::string PWD_MACHINE_GET_KEY_FAILED = "402"; // 从加密机读取密钥失败. 52 static const std::string PWD_MACHINE_GET_KEY_FAILED = "402"; // 从加密机读取密钥失败.
53 53
54 static const std::string BANK_CARD_READ_CARD_NUM_FAILED = "501"; // 读取银行卡卡号失败. 54 static const std::string BANK_CARD_READ_CARD_NUM_FAILED = "501"; // 读取银行卡卡号失败.
  55 +
  56 + static const std::string PRINT_PARSE_DATA_FAILED = "601"; //解析打印数据失败
55 } 57 }
56 58
57 namespace EncryptTools 59 namespace EncryptTools
@@ -1277,12 +1279,17 @@ StylusPrinterCmd::Reply StylusPrinterCmd::Execute(const std::string&amp; input) @@ -1277,12 +1279,17 @@ StylusPrinterCmd::Reply StylusPrinterCmd::Execute(const std::string&amp; input)
1277 { 1279 {
1278 LOG_TRACE(L"开始打印"); 1280 LOG_TRACE(L"开始打印");
1279 Reply reply; 1281 Reply reply;
  1282 + reply.error_code = StatusCode::OK;
1280 1283
1281 std::vector<OrderInfo> comm_vector; 1284 std::vector<OrderInfo> comm_vector;
1282 do 1285 do
1283 { 1286 {
1284 LOG_TRACE(L"解析打印数据!"); 1287 LOG_TRACE(L"解析打印数据!");
1285 - ParseInput(const_cast<std::string&>(input), comm_vector); 1288 + reply.error_code = ParseInput(const_cast<std::string&>(input), comm_vector);
  1289 + if (reply.error_code.compare(StatusCode::OK) != 0)
  1290 + {
  1291 + break;
  1292 + }
1286 Print(comm_vector); 1293 Print(comm_vector);
1287 } while (0); 1294 } while (0);
1288 1295
@@ -1517,9 +1524,9 @@ static const std::string JSON_TAG_TRADE_TOTAL_MONEY = &quot;totalMoney&quot;; @@ -1517,9 +1524,9 @@ static const std::string JSON_TAG_TRADE_TOTAL_MONEY = &quot;totalMoney&quot;;
1517 static const std::string JSON_TAG_TRADE_PRODUCTS = "products"; 1524 static const std::string JSON_TAG_TRADE_PRODUCTS = "products";
1518 1525
1519 1526
1520 -bool StylusPrinterCmd::ParseInput(std::string &input, std::vector<OrderInfo> &order_vector) 1527 +std::string StylusPrinterCmd::ParseInput(std::string &input, std::vector<OrderInfo> &order_vector)
1521 { 1528 {
1522 - int result = 0; 1529 + std::string result = StatusCode::OK;
1523 1530
1524 namespace PT = boost::property_tree; 1531 namespace PT = boost::property_tree;
1525 try //Parse the configuration file 1532 try //Parse the configuration file
@@ -1535,22 +1542,22 @@ bool StylusPrinterCmd::ParseInput(std::string &amp;input, std::vector&lt;OrderInfo&gt; &amp;or @@ -1535,22 +1542,22 @@ bool StylusPrinterCmd::ParseInput(std::string &amp;input, std::vector&lt;OrderInfo&gt; &amp;or
1535 { 1542 {
1536 OrderInfo order; 1543 OrderInfo order;
1537 order.doc_name = title.c_str(); 1544 order.doc_name = title.c_str();
1538 - order.statements_no = v.second.get<std::string>(JSON_TAG_STATEMENT_ID).c_str();  
1539 - order.trade_time = v.second.get<std::string>(JSON_TAG_TRADE_TIME).c_str();  
1540 - order.buyer_name = v.second.get<std::string>(JSON_TAG_TRADE_BUYER_NAME).c_str();  
1541 - order.seller_name = v.second.get<std::string>(JSON_TAG_TRADE_SELLER_NAME).c_str();  
1542 - order.settlement_clerk = v.second.get<std::string>(JSON_TAG_TRADE_USER_NAME).c_str();  
1543 - order.total_money = v.second.get<std::string>(JSON_TAG_TRADE_TOTAL_MONEY).c_str(); 1545 + order.statements_no = str_2_wstr(v.second.get<std::string>(JSON_TAG_STATEMENT_ID)).c_str();
  1546 + order.trade_time = str_2_wstr(v.second.get<std::string>(JSON_TAG_TRADE_TIME)).c_str();
  1547 + order.buyer_name = str_2_wstr(v.second.get<std::string>(JSON_TAG_TRADE_BUYER_NAME)).c_str();
  1548 + order.seller_name = str_2_wstr(v.second.get<std::string>(JSON_TAG_TRADE_SELLER_NAME)).c_str();
  1549 + order.settlement_clerk = str_2_wstr(v.second.get<std::string>(JSON_TAG_TRADE_USER_NAME)).c_str();
  1550 + order.total_money = str_2_wstr(v.second.get<std::string>(JSON_TAG_TRADE_TOTAL_MONEY)).c_str();
1544 1551
1545 PT::ptree products_ptree = v.second.get_child(JSON_TAG_TRADE_PRODUCTS); 1552 PT::ptree products_ptree = v.second.get_child(JSON_TAG_TRADE_PRODUCTS);
1546 BOOST_FOREACH(PT::ptree::value_type &v, products_ptree) 1553 BOOST_FOREACH(PT::ptree::value_type &v, products_ptree)
1547 { 1554 {
1548 CommInfo comm_info; 1555 CommInfo comm_info;
1549 comm_info.comm_id = v.second.get<long>(JSON_TAG_ORDER_ID); 1556 comm_info.comm_id = v.second.get<long>(JSON_TAG_ORDER_ID);
1550 - comm_info.comm_name = v.second.get<std::string>(JSON_TAG_PRODUCT_NAME).c_str();  
1551 - comm_info.price = v.second.get<std::string>(JSON_TAG_PRICE).c_str();  
1552 - comm_info.count = v.second.get<std::string>(JSON_TAG_AMOUNT).c_str();  
1553 - comm_info.total_money = v.second.get<std::string>(JSON_TAG_MONEY).c_str(); 1557 + comm_info.comm_name = str_2_wstr(v.second.get<std::string>(JSON_TAG_PRODUCT_NAME)).c_str();
  1558 + comm_info.price = str_2_wstr(v.second.get<std::string>(JSON_TAG_PRICE)).c_str();
  1559 + comm_info.count = str_2_wstr(v.second.get<std::string>(JSON_TAG_AMOUNT)).c_str();
  1560 + comm_info.total_money = str_2_wstr(v.second.get<std::string>(JSON_TAG_MONEY)).c_str();
1554 order.comm_vector.push_back(comm_info); 1561 order.comm_vector.push_back(comm_info);
1555 } 1562 }
1556 order_vector.push_back(order); 1563 order_vector.push_back(order);
@@ -1559,7 +1566,7 @@ bool StylusPrinterCmd::ParseInput(std::string &amp;input, std::vector&lt;OrderInfo&gt; &amp;or @@ -1559,7 +1566,7 @@ bool StylusPrinterCmd::ParseInput(std::string &amp;input, std::vector&lt;OrderInfo&gt; &amp;or
1559 catch (...) 1566 catch (...)
1560 { 1567 {
1561 LOG_ERROR(L"解析服务器返回的打印信息时出错!请确认返回数据不为空,返回的数据格式为正确的Json格式!"); 1568 LOG_ERROR(L"解析服务器返回的打印信息时出错!请确认返回数据不为空,返回的数据格式为正确的Json格式!");
1562 - result = 1000; 1569 + result = StatusCode::PRINT_PARSE_DATA_FAILED;
1563 } 1570 }
1564 return result; 1571 return result;
1565 } 1572 }
1566 \ No newline at end of file 1573 \ No newline at end of file
central_clearing_system/ETradeClient/mfc_ui/pay_dlg.cpp
@@ -55,6 +55,7 @@ BEGIN_MESSAGE_MAP(PayDlg, CDialogEx) @@ -55,6 +55,7 @@ BEGIN_MESSAGE_MAP(PayDlg, CDialogEx)
55 ON_BN_CLICKED(IDC_PAY_BUTTON_CLOSE, &PayDlg::OnBnClickedPayButtonClose) 55 ON_BN_CLICKED(IDC_PAY_BUTTON_CLOSE, &PayDlg::OnBnClickedPayButtonClose)
56 ON_BN_CLICKED(IDC_PAY_BUTTON_PAY, &PayDlg::OnBnClickedPayButtonPay) 56 ON_BN_CLICKED(IDC_PAY_BUTTON_PAY, &PayDlg::OnBnClickedPayButtonPay)
57 ON_WM_CTLCOLOR() 57 ON_WM_CTLCOLOR()
  58 + ON_BN_CLICKED(IDC_PAY_BUTTON_PASSWORD, &PayDlg::OnBnClickedPayButtonPassword)
58 END_MESSAGE_MAP() 59 END_MESSAGE_MAP()
59 60
60 61
@@ -120,6 +121,8 @@ void PayDlg::SetCtrlPos() @@ -120,6 +121,8 @@ void PayDlg::SetCtrlPos()
120 CRect dlg_rect; 121 CRect dlg_rect;
121 GetClientRect(&dlg_rect); 122 GetClientRect(&dlg_rect);
122 123
  124 + ctrl_rect.top = ctrl_rect.bottom + 10;
  125 + ctrl_rect.bottom = ctrl_rect.top + StaticHeigth;
123 ctrl_rect.left = 30; 126 ctrl_rect.left = 30;
124 ctrl_rect.right = dlg_rect.right - 30; 127 ctrl_rect.right = dlg_rect.right - 30;
125 error_msg_static_.MoveWindow(&ctrl_rect); 128 error_msg_static_.MoveWindow(&ctrl_rect);
@@ -148,13 +151,18 @@ void PayDlg::OnBnClickedPayButtonClose() @@ -148,13 +151,18 @@ void PayDlg::OnBnClickedPayButtonClose()
148 CDialogEx::OnCancel(); 151 CDialogEx::OnCancel();
149 } 152 }
150 153
  154 +#include "etradeclient/hardware/hardware_cmd.h"
  155 +#include "etradeclient/boost_patch/property_tree/json_parser.hpp"
  156 +#include "ETradeClient/utility/logging.h"
151 157
152 void PayDlg::OnBnClickedPayButtonPay() 158 void PayDlg::OnBnClickedPayButtonPay()
153 { 159 {
  160 +
  161 + CString error_msg;
  162 +
154 std::string statement_data; 163 std::string statement_data;
155 do 164 do
156 { 165 {
157 - CString error_msg;  
158 const uint32_t kHTTPOK = 200; 166 const uint32_t kHTTPOK = 200;
159 WinHttp win_http; 167 WinHttp win_http;
160 auto& url_cfg = URLConfig::Instance(); 168 auto& url_cfg = URLConfig::Instance();
@@ -205,13 +213,13 @@ void PayDlg::OnBnClickedPayButtonPay() @@ -205,13 +213,13 @@ void PayDlg::OnBnClickedPayButtonPay()
205 std::stringstream ss; 213 std::stringstream ss;
206 ss << response_body; 214 ss << response_body;
207 PT::read_json(ss, ptree); 215 PT::read_json(ss, ptree);
208 - if (ptree.get<int>("code") == 0) 216 + if (ptree.get<long>("code") == 0)
209 { 217 {
210 statement_data = ptree.get<std::string>("data"); 218 statement_data = ptree.get<std::string>("data");
211 } 219 }
212 else 220 else
213 { 221 {
214 - error_msg = ptree.get<std::string>("message").c_str(); 222 + error_msg = str_2_wstr(ptree.get<std::string>("message")).c_str();
215 break; 223 break;
216 } 224 }
217 225
@@ -224,10 +232,16 @@ void PayDlg::OnBnClickedPayButtonPay() @@ -224,10 +232,16 @@ void PayDlg::OnBnClickedPayButtonPay()
224 } 232 }
225 } while (0); 233 } while (0);
226 234
227 - auto printer_device = StylusPrinterCmd();  
228 - HardwareCmd::Reply reply = printer_device.Execute(statement_data);  
229 -  
230 - CDialogEx::OnCancel(); 235 + if (!error_msg.IsEmpty())
  236 + {
  237 + SetErrorMsg(error_msg);
  238 + }
  239 + else if (!statement_data.empty())
  240 + {
  241 + auto printer_device = StylusPrinterCmd();
  242 + HardwareCmd::Reply reply = printer_device.Execute(statement_data);
  243 + CDialogEx::OnCancel();
  244 + }
231 } 245 }
232 246
233 void PayDlg::SetErrorMsg(CString error) 247 void PayDlg::SetErrorMsg(CString error)
@@ -250,3 +264,48 @@ HBRUSH PayDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) @@ -250,3 +264,48 @@ HBRUSH PayDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
250 264
251 return hbr; 265 return hbr;
252 } 266 }
  267 +
  268 +
  269 +void PayDlg::OnBnClickedPayButtonPassword()
  270 +{
  271 + auto pin_pad = ReadPINPadCmd();
  272 + HardwareCmd::Reply reply = pin_pad.Execute("");
  273 + CString error_msg;
  274 + do
  275 + {
  276 + if (reply.error_code.compare("") != 0)
  277 + {
  278 + if (reply.error_code.compare("100") == 0)
  279 + {
  280 + error_msg = L"连接密码键盘失败";
  281 + }
  282 + else if (reply.error_code.compare("101") == 0)
  283 + {
  284 + error_msg = L"用户密码输入超时";
  285 + }
  286 + else if (reply.error_code.compare("102") == 0)
  287 + {
  288 + error_msg = L"用户取消密码输入";
  289 + }
  290 + else if (reply.error_code.compare("103") == 0)
  291 + {
  292 + error_msg = L"读取密码失败";
  293 + }
  294 + else
  295 + {
  296 + error_msg = L"读卡失败";
  297 + }
  298 + std::wstring log = L"支付时输入密码错误,错误码:" + str_2_wstr(reply.error_code);
  299 + LOG_ERROR(log);
  300 + break;
  301 + }
  302 +
  303 + boost::property_tree::ptree password_child = reply.data.get_child("password");
  304 + std::string password = password_child.data();
  305 + password_edit_.SetWindowText(CString(password.c_str()));
  306 + } while (0);
  307 + if (!error_msg.IsEmpty())
  308 + {
  309 + SetErrorMsg(error_msg);
  310 + }
  311 +}
central_clearing_system/ETradeClient/mfc_ui/pay_dlg.h
1 #pragma once 1 #pragma once
2 #include "afxwin.h" 2 #include "afxwin.h"
  3 +#include "etrade_edit_control.h"
3 4
4 5
5 // PayDlg ¶Ô»°¿ò 6 // PayDlg ¶Ô»°¿ò
@@ -33,7 +34,7 @@ private: @@ -33,7 +34,7 @@ private:
33 CStatic total_money_static_; 34 CStatic total_money_static_;
34 CStatic real_money_static_; 35 CStatic real_money_static_;
35 CStatic password_static_; 36 CStatic password_static_;
36 - CEdit password_edit_; 37 + CEditBox password_edit_;
37 CButton pay_button_; 38 CButton pay_button_;
38 CButton close_button_; 39 CButton close_button_;
39 CButton password_button_; 40 CButton password_button_;
@@ -42,4 +43,6 @@ private: @@ -42,4 +43,6 @@ private:
42 long statement_id_; 43 long statement_id_;
43 CString total_money_; 44 CString total_money_;
44 int card_type_; 45 int card_type_;
  46 +public:
  47 + afx_msg void OnBnClickedPayButtonPassword();
45 }; 48 };
central_clearing_system/ETradeClient/mfc_ui/place_order_dlg.cpp
@@ -356,10 +356,11 @@ HBRUSH PlaceOrderDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) @@ -356,10 +356,11 @@ HBRUSH PlaceOrderDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
356 356
357 void PlaceOrderDlg::OnBnClickedButtonPay() 357 void PlaceOrderDlg::OnBnClickedButtonPay()
358 { 358 {
  359 + SetErrorMsg(CString(L""));
359 int row_count = product_list_.GetRowCount(); 360 int row_count = product_list_.GetRowCount();
360 - if (row_count == 0) 361 + if (row_count == 1)
361 { 362 {
362 - SetErrorMsg(CString(L"订单信息为空")); 363 + SetErrorMsg(CString(L"订单信息为空"));
363 return; 364 return;
364 } 365 }
365 366
@@ -378,19 +379,22 @@ void PlaceOrderDlg::OnBnClickedButtonPay() @@ -378,19 +379,22 @@ void PlaceOrderDlg::OnBnClickedButtonPay()
378 }; 379 };
379 std::vector<Order> orders_list; 380 std::vector<Order> orders_list;
380 Order current_order; 381 Order current_order;
381 - for (int row = 0; row < row_count; ++row) 382 + for (int row = 1; row < row_count; ++row)
382 { 383 {
383 - std::string card = wstr_2_str(product_list_.GetItemText(row, 0)); 384 + std::string card = wstr_2_str(std::wstring(product_list_.GetItemText(row, 0)));
384 if (card.compare(current_order.seller_card) != 0) 385 if (card.compare(current_order.seller_card) != 0)
385 { 386 {
386 - orders_list.push_back(current_order); 387 + if (row != 1)
  388 + {
  389 + orders_list.push_back(current_order);
  390 + }
387 current_order.comm_vec.clear(); 391 current_order.comm_vec.clear();
388 current_order.seller_card = card; 392 current_order.seller_card = card;
389 } 393 }
390 394
391 Comm comm_info; 395 Comm comm_info;
392 CGridCellBase* product_cell = product_list_.GetCell(row, 2); 396 CGridCellBase* product_cell = product_list_.GetCell(row, 2);
393 - comm_info.product_id == product_cell->product_id; 397 + comm_info.product_id = product_cell->product_id;
394 comm_info.price = wstr_2_str(product_list_.GetItemText(row, 3)); 398 comm_info.price = wstr_2_str(product_list_.GetItemText(row, 3));
395 comm_info.amount = wstr_2_str(product_list_.GetItemText(row, 4)); 399 comm_info.amount = wstr_2_str(product_list_.GetItemText(row, 4));
396 comm_info.unit = product_list_.GetItemText(row, 5).Compare(L"斤") == 0 ? "1" : "2"; 400 comm_info.unit = product_list_.GetItemText(row, 5).Compare(L"斤") == 0 ? "1" : "2";
@@ -398,6 +402,7 @@ void PlaceOrderDlg::OnBnClickedButtonPay() @@ -398,6 +402,7 @@ void PlaceOrderDlg::OnBnClickedButtonPay()
398 402
399 current_order.comm_vec.push_back(comm_info); 403 current_order.comm_vec.push_back(comm_info);
400 } 404 }
  405 + orders_list.push_back(current_order);
401 406
402 CString buyer_card; 407 CString buyer_card;
403 buyer_card_edit_.GetWindowText(buyer_card); 408 buyer_card_edit_.GetWindowText(buyer_card);
@@ -412,7 +417,7 @@ void PlaceOrderDlg::OnBnClickedButtonPay() @@ -412,7 +417,7 @@ void PlaceOrderDlg::OnBnClickedButtonPay()
412 auto& url_cfg = URLConfig::Instance(); 417 auto& url_cfg = URLConfig::Instance();
413 win_http.ConnectHost(url_cfg.Host(), url_cfg.Port(), url_cfg.IsHttps()); 418 win_http.ConnectHost(url_cfg.Host(), url_cfg.Port(), url_cfg.IsHttps());
414 std::string url = url_cfg.GetSubmitOrdersPath(); 419 std::string url = url_cfg.GetSubmitOrdersPath();
415 - auto& request = win_http.OpenRequest(WinHttp::Method::POST, url); 420 + auto& request = win_http.OpenRequest(WinHttp::Method::JSONPOST, url);
416 421
417 std::string post_data = "{\"paymentType\":1,\"cardNo\":\"" + wstr_2_str(buyer_card) + "\",\"orders\":["; 422 std::string post_data = "{\"paymentType\":1,\"cardNo\":\"" + wstr_2_str(buyer_card) + "\",\"orders\":[";
418 for (auto iter_order : orders_list) 423 for (auto iter_order : orders_list)
@@ -429,7 +434,6 @@ void PlaceOrderDlg::OnBnClickedButtonPay() @@ -429,7 +434,6 @@ void PlaceOrderDlg::OnBnClickedButtonPay()
429 post_data.erase(post_data.end() - 1); 434 post_data.erase(post_data.end() - 1);
430 post_data += "]}"; 435 post_data += "]}";
431 436
432 -  
433 request.SetPostData(post_data); 437 request.SetPostData(post_data);
434 if (url_cfg.IsHttps()) 438 if (url_cfg.IsHttps())
435 { 439 {
@@ -442,7 +446,7 @@ void PlaceOrderDlg::OnBnClickedButtonPay() @@ -442,7 +446,7 @@ void PlaceOrderDlg::OnBnClickedButtonPay()
442 if (kHTTPOK != status_code) 446 if (kHTTPOK != status_code)
443 { 447 {
444 std::string err_msg = "网络请求错误! 错误码: " + std::to_string(status_code); 448 std::string err_msg = "网络请求错误! 错误码: " + std::to_string(status_code);
445 - LOG_ERROR(str_2_wstr(err_msg.c_str())); 449 + LOG_ERROR(CString(err_msg.c_str()).GetBuffer());
446 error_msg = err_msg.c_str(); 450 error_msg = err_msg.c_str();
447 break; 451 break;
448 } 452 }
@@ -462,7 +466,7 @@ void PlaceOrderDlg::OnBnClickedButtonPay() @@ -462,7 +466,7 @@ void PlaceOrderDlg::OnBnClickedButtonPay()
462 std::stringstream ss; 466 std::stringstream ss;
463 ss << response_body; 467 ss << response_body;
464 PT::read_json(ss, ptree); 468 PT::read_json(ss, ptree);
465 - if (ptree.get<int>("code") == 0) 469 + if (ptree.get<long>("code") == 0)
466 { 470 {
467 PT::ptree statement_data = ptree.get_child("data"); 471 PT::ptree statement_data = ptree.get_child("data");
468 statement_id = statement_data.get<long>("statementId"); 472 statement_id = statement_data.get<long>("statementId");
@@ -470,7 +474,8 @@ void PlaceOrderDlg::OnBnClickedButtonPay() @@ -470,7 +474,8 @@ void PlaceOrderDlg::OnBnClickedButtonPay()
470 } 474 }
471 else 475 else
472 { 476 {
473 - error_msg = ptree.get<std::string>("message").c_str(); 477 + std::wstring error = str_2_wstr(ptree.get<std::string>("message"));
  478 + error_msg = error.c_str();
474 break; 479 break;
475 } 480 }
476 481
@@ -489,7 +494,7 @@ void PlaceOrderDlg::OnBnClickedButtonPay() @@ -489,7 +494,7 @@ void PlaceOrderDlg::OnBnClickedButtonPay()
489 } 494 }
490 else 495 else
491 { 496 {
492 - EmptyCtrl(); 497 + EmptyCtrl(true);
493 SetCtrlInitData(); 498 SetCtrlInitData();
494 InitList(); 499 InitList();
495 comm_id_index_; 500 comm_id_index_;
@@ -639,7 +644,7 @@ void PlaceOrderDlg::OnAcceleratorEnter() @@ -639,7 +644,7 @@ void PlaceOrderDlg::OnAcceleratorEnter()
639 product_list_.SetItemFormat(row_index, index, DT_CENTER | DT_VCENTER | DT_SINGLELINE); 644 product_list_.SetItemFormat(row_index, index, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
640 } 645 }
641 646
642 - EmptyCtrl(); 647 + EmptyCtrl(false);
643 SortList(); 648 SortList();
644 649
645 CString subtotal; 650 CString subtotal;
@@ -696,6 +701,8 @@ void PlaceOrderDlg::SetErrorMsg(CString &amp;error) @@ -696,6 +701,8 @@ void PlaceOrderDlg::SetErrorMsg(CString &amp;error)
696 701
697 LRESULT PlaceOrderDlg::OnEditKillFocus(WPARAM wParam, LPARAM lParam) 702 LRESULT PlaceOrderDlg::OnEditKillFocus(WPARAM wParam, LPARAM lParam)
698 { 703 {
  704 + SetErrorMsg(CString(L""));
  705 +
699 int dlg_id = wParam; 706 int dlg_id = wParam;
700 707
701 CString text; 708 CString text;
@@ -734,17 +741,17 @@ LRESULT PlaceOrderDlg::OnEditKillFocus(WPARAM wParam, LPARAM lParam) @@ -734,17 +741,17 @@ LRESULT PlaceOrderDlg::OnEditKillFocus(WPARAM wParam, LPARAM lParam)
734 comm_num_edit_.SetEditRed(true); 741 comm_num_edit_.SetEditRed(true);
735 break; 742 break;
736 } 743 }
737 - CString buyer_card;  
738 - buyer_card_edit_.GetWindowText(buyer_card);  
739 - bool result = GetCommName(text, buyer_card, name, product_id_); 744 + CString seller_card;
  745 + card_edit_.GetWindowText(seller_card);
  746 + bool result = GetCommName(text, seller_card, name, product_id_);
740 if (result) 747 if (result)
741 { 748 {
742 - name_edit_.SetWindowText(name); 749 + comm_name_edit_.SetWindowText(name);
743 comm_num_edit_.SetEditRed(false); 750 comm_num_edit_.SetEditRed(false);
744 } 751 }
745 else 752 else
746 { 753 {
747 - SetErrorMsg(name); 754 + //SetErrorMsg(name);
748 comm_num_edit_.SetEditRed(true); 755 comm_num_edit_.SetEditRed(true);
749 } 756 }
750 757
@@ -852,18 +859,18 @@ bool PlaceOrderDlg::GetCardName(CString &amp;num, CString &amp;name, int type) @@ -852,18 +859,18 @@ bool PlaceOrderDlg::GetCardName(CString &amp;num, CString &amp;name, int type)
852 std::stringstream ss; 859 std::stringstream ss;
853 ss << response_body; 860 ss << response_body;
854 PT::read_json(ss, ptree); 861 PT::read_json(ss, ptree);
855 - std::string res = ptree.get<std::string>("code");  
856 - card_res = res.compare(0) == 0 ? true : false;  
857 - if (!card_res) 862 + long res = ptree.get<long>("code");
  863 + card_res = res == 0 ? true : false;
  864 + if (card_res)
858 { 865 {
859 PT::ptree card_data = ptree.get_child("data"); 866 PT::ptree card_data = ptree.get_child("data");
860 - name = card_data.get<std::string>("name").c_str(); 867 + name = str_2_wstr(card_data.get<std::string>("name")).c_str();
861 buyer_card_type_ = card_data.get<int>("category"); 868 buyer_card_type_ = card_data.get<int>("category");
862 } 869 }
863 else 870 else
864 { 871 {
865 - std::string error_msg = ptree.get<std::string>("message");  
866 - name = CString(error_msg.c_str()); 872 + std::wstring error_msg = str_2_wstr(ptree.get<std::string>("message"));
  873 + name = error_msg.c_str();
867 result = false; 874 result = false;
868 break; 875 break;
869 } 876 }
@@ -883,8 +890,9 @@ bool PlaceOrderDlg::GetCardName(CString &amp;num, CString &amp;name, int type) @@ -883,8 +890,9 @@ bool PlaceOrderDlg::GetCardName(CString &amp;num, CString &amp;name, int type)
883 890
884 bool PlaceOrderDlg::GetCommName(CString &num, CString& card, CString &name, CString &product_id) 891 bool PlaceOrderDlg::GetCommName(CString &num, CString& card, CString &name, CString &product_id)
885 { 892 {
  893 + SetErrorMsg(CString(L""));
886 bool result = true; 894 bool result = true;
887 - 895 + CString error_msg;
888 LOG_TRACE(_T("获取商品名称!")); 896 LOG_TRACE(_T("获取商品名称!"));
889 do 897 do
890 { 898 {
@@ -906,15 +914,16 @@ bool PlaceOrderDlg::GetCommName(CString &amp;num, CString&amp; card, CString &amp;name, CStr @@ -906,15 +914,16 @@ bool PlaceOrderDlg::GetCommName(CString &amp;num, CString&amp; card, CString &amp;name, CStr
906 { 914 {
907 std::string err_msg = "网络请求错误! 错误码: " + std::to_string(status_code); 915 std::string err_msg = "网络请求错误! 错误码: " + std::to_string(status_code);
908 LOG_ERROR(str_2_wstr(err_msg.c_str())); 916 LOG_ERROR(str_2_wstr(err_msg.c_str()));
909 - name = CString(L"网络请求错误!"); 917 + error_msg = CString(L"网络请求错误!");
910 result = false; 918 result = false;
911 break; 919 break;
912 } 920 }
913 std::string response_body = request.ReadResponseBody(); 921 std::string response_body = request.ReadResponseBody();
  922 +
914 if (response_body.empty()) 923 if (response_body.empty())
915 { 924 {
916 LOG_ERROR(L"获取服务器响应数据失败,请确保网络连接正常!"); 925 LOG_ERROR(L"获取服务器响应数据失败,请确保网络连接正常!");
917 - name = CString(L"获取服务器响应数据失败,请确保网络连接正常!"); 926 + error_msg = CString(L"获取服务器响应数据失败,请确保网络连接正常!");
918 result = false; 927 result = false;
919 break; 928 break;
920 } 929 }
@@ -927,19 +936,19 @@ bool PlaceOrderDlg::GetCommName(CString &amp;num, CString&amp; card, CString &amp;name, CStr @@ -927,19 +936,19 @@ bool PlaceOrderDlg::GetCommName(CString &amp;num, CString&amp; card, CString &amp;name, CStr
927 std::stringstream ss; 936 std::stringstream ss;
928 ss << response_body; 937 ss << response_body;
929 PT::read_json(ss, ptree); 938 PT::read_json(ss, ptree);
930 - std::string res = ptree.get<std::string>("code");  
931 - card_res = res.compare(0) == 0 ? true : false;  
932 - if (!card_res) 939 + long res = ptree.get<long>("code");
  940 + card_res = res == 0 ? true : false;
  941 + if (card_res)
933 { 942 {
934 PT::ptree card_data = ptree.get_child("data"); 943 PT::ptree card_data = ptree.get_child("data");
935 - name = ptree.get<std::string>("productName").c_str();  
936 - long id = ptree.get<long>("id"); 944 + name = str_2_wstr(card_data.get<std::string>("name")).c_str();
  945 + long id = card_data.get<long>("id");
937 product_id.Format(L"%ld", id); 946 product_id.Format(L"%ld", id);
938 } 947 }
939 else 948 else
940 { 949 {
941 - std::string error_msg = ptree.get<std::string>("message");  
942 - name = CString(error_msg.c_str()); 950 + std::wstring error_msg = str_2_wstr(ptree.get<std::string>("message"));
  951 + error_msg = CString(error_msg.c_str());
943 result = false; 952 result = false;
944 break; 953 break;
945 } 954 }
@@ -954,6 +963,11 @@ bool PlaceOrderDlg::GetCommName(CString &amp;num, CString&amp; card, CString &amp;name, CStr @@ -954,6 +963,11 @@ bool PlaceOrderDlg::GetCommName(CString &amp;num, CString&amp; card, CString &amp;name, CStr
954 } 963 }
955 } while (0); 964 } while (0);
956 965
  966 + if (!error_msg.IsEmpty())
  967 + {
  968 + SetErrorMsg(error_msg);
  969 + }
  970 +
957 return result; 971 return result;
958 } 972 }
959 973
@@ -1102,7 +1116,7 @@ void PlaceOrderDlg::SortList() @@ -1102,7 +1116,7 @@ void PlaceOrderDlg::SortList()
1102 product_list_.Invalidate(TRUE); 1116 product_list_.Invalidate(TRUE);
1103 } 1117 }
1104 1118
1105 -void PlaceOrderDlg::EmptyCtrl() 1119 +void PlaceOrderDlg::EmptyCtrl(bool is_empty_buyer)
1106 { 1120 {
1107 card_edit_.SetWindowText(L"8888"); 1121 card_edit_.SetWindowText(L"8888");
1108 name_edit_.SetWindowText(L""); 1122 name_edit_.SetWindowText(L"");
@@ -1115,16 +1129,21 @@ void PlaceOrderDlg::EmptyCtrl() @@ -1115,16 +1129,21 @@ void PlaceOrderDlg::EmptyCtrl()
1115 price_edit_.SetWindowText(L""); 1129 price_edit_.SetWindowText(L"");
1116 count_edit_.SetWindowText(L""); 1130 count_edit_.SetWindowText(L"");
1117 1131
1118 - buyer_card_edit_.SetWindowTextW(L"");  
1119 - buyer_name_edit_.SetWindowTextW(L"");  
1120 - total_real_money_static_.SetWindowTextW(L"0.00"); 1132 + if (is_empty_buyer)
  1133 + {
  1134 + buyer_card_edit_.SetWindowTextW(L"");
  1135 + buyer_name_edit_.SetWindowTextW(L"");
  1136 + total_real_money_static_.SetWindowTextW(L"0.00");
  1137 + }
  1138 +
1121 1139
1122 card_edit_.SetSel(4, 4); 1140 card_edit_.SetSel(4, 4);
1123 } 1141 }
1124 1142
1125 void PlaceOrderDlg::OnBnClickedButtonSwipCard() 1143 void PlaceOrderDlg::OnBnClickedButtonSwipCard()
1126 { 1144 {
1127 - EmptyCtrl(); 1145 + SetErrorMsg(CString(L""));
  1146 + EmptyCtrl(true);
1128 InitList(); 1147 InitList();
1129 pay_button_.EnableWindow(FALSE); 1148 pay_button_.EnableWindow(FALSE);
1130 1149
central_clearing_system/ETradeClient/mfc_ui/place_order_dlg.h
@@ -72,7 +72,7 @@ private: @@ -72,7 +72,7 @@ private:
72 void SetCtrlInitData(); 72 void SetCtrlInitData();
73 void InitList(); 73 void InitList();
74 void SortList(); 74 void SortList();
75 - void EmptyCtrl(); 75 + void EmptyCtrl(bool is_empty_buyer);
76 void EnableCtrl(bool is_enable); 76 void EnableCtrl(bool is_enable);
77 77
78 int GetCommIndex(); 78 int GetCommIndex();
central_clearing_system/ETradeClient/utility/url_config.cpp
@@ -97,6 +97,7 @@ void URLConfig::ModifyCfg(bool is_https, uint16_t port) @@ -97,6 +97,7 @@ void URLConfig::ModifyCfg(bool is_https, uint16_t port)
97 root.put("user_msg_path", m_user_msg_path); 97 root.put("user_msg_path", m_user_msg_path);
98 root.put("modify_pwd_path", m_modify_pwd_path); 98 root.put("modify_pwd_path", m_modify_pwd_path);
99 root.put("get_card_name_path", m_get_card_name_path); 99 root.put("get_card_name_path", m_get_card_name_path);
  100 + root.put("get_seller_card_path", m_get_seller_card_path);
100 root.put("get_product_name_path", m_get_product_path); 101 root.put("get_product_name_path", m_get_product_path);
101 root.put("submit_orders_path", m_submit_orders_path); 102 root.put("submit_orders_path", m_submit_orders_path);
102 root.put("finish_order_path", m_finish_order_path); 103 root.put("finish_order_path", m_finish_order_path);
@@ -190,5 +191,5 @@ std::string URLConfig::GetSubmitOrdersPath() const @@ -190,5 +191,5 @@ std::string URLConfig::GetSubmitOrdersPath() const
190 } 191 }
191 std::string URLConfig::GetSellerCardPath() const 192 std::string URLConfig::GetSellerCardPath() const
192 { 193 {
193 - return m_get_seller_path; 194 + return m_get_seller_card_path;
194 } 195 }
195 \ No newline at end of file 196 \ No newline at end of file
central_clearing_system/ETradeClient/utility/url_config.h
@@ -51,7 +51,6 @@ private: @@ -51,7 +51,6 @@ private:
51 std::string m_modify_pwd_path; 51 std::string m_modify_pwd_path;
52 std::string m_get_card_name_path; 52 std::string m_get_card_name_path;
53 std::string m_get_seller_card_path; 53 std::string m_get_seller_card_path;
54 - std::string m_get_seller_path;  
55 std::string m_get_product_path; 54 std::string m_get_product_path;
56 std::string m_submit_orders_path; 55 std::string m_submit_orders_path;
57 std::string m_finish_order_path; 56 std::string m_finish_order_path;
central_clearing_system/ETradeClient/utility/win_http.cpp
@@ -270,6 +270,9 @@ void WinHttp::Request::Send() @@ -270,6 +270,9 @@ void WinHttp::Request::Send()
270 case Method::POST: 270 case Method::POST:
271 Post(); 271 Post();
272 break; 272 break;
  273 + case Method::JSONPOST:
  274 + JsonPost();
  275 + break;
273 default: 276 default:
274 return; 277 return;
275 } 278 }
@@ -369,6 +372,22 @@ void WinHttp::Request::Post() @@ -369,6 +372,22 @@ void WinHttp::Request::Post()
369 } 372 }
370 } 373 }
371 374
  375 +void WinHttp::Request::JsonPost()
  376 +{
  377 + // Send a request.
  378 + if (!WinHttpSendRequest(m_request,
  379 + L"Content-Type: application/json; charset=UTF-8", // headers.
  380 + -1,
  381 + const_cast<char*>(m_post_data.c_str()),
  382 + m_post_data.size(),
  383 + m_post_data.size(),
  384 + 0))
  385 + {
  386 + std::string err_msg("发送WinHttp Post请求失败!错误代码:" + std::to_string(GetLastError()));
  387 + throw std::exception(err_msg.c_str());
  388 + }
  389 +}
  390 +
372 void WinHttp::Request::QuerySingleHeader(std::wstring& header, uint32_t query_info_flag, DWORD* header_idx) const 391 void WinHttp::Request::QuerySingleHeader(std::wstring& header, uint32_t query_info_flag, DWORD* header_idx) const
373 { 392 {
374 DWORD buff_len = 0; 393 DWORD buff_len = 0;
central_clearing_system/ETradeClient/utility/win_http.h
@@ -32,6 +32,7 @@ public: @@ -32,6 +32,7 @@ public:
32 { 32 {
33 GET = 0, 33 GET = 0,
34 POST, 34 POST,
  35 + JSONPOST
35 }; 36 };
36 37
37 typedef std::list<Cookie> Cookies; 38 typedef std::list<Cookie> Cookies;
@@ -63,6 +64,7 @@ public: @@ -63,6 +64,7 @@ public:
63 64
64 void Get(); 65 void Get();
65 void Post(); 66 void Post();
  67 + void JsonPost();
66 68
67 // Refer to: https://msdn.microsoft.com/en-us/library/aa384070%28v=vs.85%29.aspx 69 // Refer to: https://msdn.microsoft.com/en-us/library/aa384070%28v=vs.85%29.aspx
68 void QuerySingleHeader(std::wstring& header, uint32_t query_info_flag, DWORD* header_idx) const; 70 void QuerySingleHeader(std::wstring& header, uint32_t query_info_flag, DWORD* header_idx) const;
central_clearing_system/Resource.h
@@ -69,41 +69,33 @@ @@ -69,41 +69,33 @@
69 #define IDC_PAY_BUTTON_PAY 1052 69 #define IDC_PAY_BUTTON_PAY 1052
70 #define IDC_PAY_STATIC_REAL_MONEY 1053 70 #define IDC_PAY_STATIC_REAL_MONEY 1053
71 #define IDC_STATIC_ERROR_MSG 1054 71 #define IDC_STATIC_ERROR_MSG 1054
72 -  
73 #define ID_ORDER 10001 72 #define ID_ORDER 10001
74 #define ID_STATEMENT_MANAGE 10002 73 #define ID_STATEMENT_MANAGE 10002
75 #define ID_ORDERFORM_MANAGE 10003 74 #define ID_ORDERFORM_MANAGE 10003
76 -  
77 #define ID_EXIT 11001 75 #define ID_EXIT 11001
78 #define ID_MODIFY_PASSWORD 11002 76 #define ID_MODIFY_PASSWORD 11002
79 -  
80 #define ID_COMM_REGIST 20001 77 #define ID_COMM_REGIST 20001
81 #define ID_COMM_DISTRIB 20002 78 #define ID_COMM_DISTRIB 20002
82 #define ID_QUERY_MANAGE 20003 79 #define ID_QUERY_MANAGE 20003
83 -  
84 #define ID_SPECIAL_HANDLE 30001 80 #define ID_SPECIAL_HANDLE 30001
85 - 81 +#define ID_MENU_DELETE 32846
  82 +#define ID_POPMENU_LIST 32848
  83 +#define ID_POPMENU_DELETE 32850
  84 +#define ID_ACCELERATOR_TAB 32851
  85 +#define ID_ACCELERATOR_ENTER 32852
  86 +#define ID_ACCELERATOR_UP 32854
  87 +#define ID_ACCELERATOR_DOWN 32855
  88 +#define ID_ACCELERATOR_F11 32857
86 #define ID_POINT_RULE 40001 89 #define ID_POINT_RULE 40001
87 #define ID_CATEGORY_RULE 40002 90 #define ID_CATEGORY_RULE 40002
88 #define ID_AGREEMENT 40003 91 #define ID_AGREEMENT 40003
89 #define ID_TAPE_HANDLE 40004 92 #define ID_TAPE_HANDLE 40004
90 #define ID_CREDIT 40005 93 #define ID_CREDIT 40005
91 -  
92 #define ID_USER_MANAGE 50001 94 #define ID_USER_MANAGE 50001
93 #define ID_ROLE_MANAGE 50002 95 #define ID_ROLE_MANAGE 50002
94 #define ID_PARAM_SET 50003 96 #define ID_PARAM_SET 50003
95 #define ID_LOG 50004 97 #define ID_LOG 50004
96 98
97 -#define ID_MENU_DELETE 32846  
98 -#define ID_POPMENU_LIST 32848  
99 -#define ID_POPMENU_DELETE 32850  
100 -#define ID_ACCELERATOR_TAB 32851  
101 -#define ID_ACCELERATOR_ENTER 32852  
102 -#define ID_ACCELERATOR_UP 32854  
103 -#define ID_ACCELERATOR_DOWN 32855  
104 -#define ID_ACCELERATOR_F11 32857  
105 -  
106 -  
107 // Next default values for new objects 99 // Next default values for new objects
108 // 100 //
109 #ifdef APSTUDIO_INVOKED 101 #ifdef APSTUDIO_INVOKED