admin
2023-01-02 954ead41d9391bca28a3cc4f9592f73f25b3bbc8
app/appDlg.cpp
@@ -142,11 +142,11 @@
   DDX_Control(pDX, IDC_CHECK_TRADE_TIME_TRADE_SUCCESS, tradeSuccessTimeCheck);
   DDX_Control(pDX, IDC_CHECK_TRADE_TIME_DELEGATE, delegateTimeCheck);
   DDX_Control(pDX, IDC_CHECK_TRADE_TIME_LIMIT_UP, limitUpTimeCheck);
   DDX_Control(pDX, IDC_BUTTON_UPLOAD_EXCEL_CODE, uploadExcelGPBtn);
   DDX_Control(pDX, IDC_CHECK_BUY1_VOLUMN_TIME_LIMIT, buy1VolumnTimeLimitCheck);
   DDX_Control(pDX, IDC_BUTTON_BUY_1_VOLUMN, buy1VolumnBtn);
   DDX_Control(pDX, IDC_CHECK_ONLINE, onlineCheck);
   DDX_Control(pDX, IDC_BUTTON_UPLOAD_GPCODE, uploadGPCodeBtn);
   DDX_Control(pDX, IDC_BUTTON_GP_CODE_ADD, addGPCodeBtn);
}
BEGIN_MESSAGE_MAP(CappDlg, CDialogEx)
@@ -177,9 +177,10 @@
   ON_BN_CLICKED(IDC_CHECK_TRADE_TIME_TRADE_SUCCESS, &CappDlg::OnBnClickedCheckTradeTimeTradeSuccess)
   ON_BN_CLICKED(IDC_CHECK_TRADE_TIME_DELEGATE, &CappDlg::OnBnClickedCheckTradeTimeDelegate)
   ON_BN_CLICKED(IDC_CHECK_PRICE_TIME_LIMIT, &CappDlg::OnBnClickedCheckPriceTimeLimit)
   ON_BN_CLICKED(IDC_BUTTON_UPLOAD_EXCEL_CODE, &CappDlg::OnBnClickedButtonUploadExcelCode)
   ON_BN_CLICKED(IDC_BUTTON_BUY_1_VOLUMN, &CappDlg::OnBnClickedButtonBuy1Volumn)
   ON_BN_CLICKED(IDC_BUTTON_UPLOAD_GPCODE, &CappDlg::OnBnClickedButtonUploadGpcode)
   ON_BN_CLICKED(IDC_CHECK_BUY1_VOLUMN_TIME_LIMIT, &CappDlg::OnBnClickedCheckBuy1VolumnTimeLimit)
   ON_BN_CLICKED(IDC_BUTTON_GP_CODE_ADD, &CappDlg::OnBnClickedButtonGpCodeAdd)
END_MESSAGE_MAP()
@@ -224,23 +225,41 @@
   limitUpTimeCheck.SetCheck(TRUE);
   LimitUpCapture::setTradeTimeCapture(limitUpTimeCheck.GetCheck());
   tradeSuccessTimeCheck.SetCheck(TRUE);
   TradeListCapture::setTradeTimeCapture_success(tradeSuccessTimeCheck.GetCheck());
   delegateTimeCheck.SetCheck(TRUE);
   TradeListCapture::setTradeTimeCapture_delegate(delegateTimeCheck.GetCheck());
   priceTimeLimitCheck.SetCheck(TRUE);
   CurrentPriceCapture::setTradeTimeCapture(TRUE);
   buy1VolumnTimeLimitCheck.SetCheck(TRUE);
   TradeQueueCaptureManager::setTradeTimeCapture(priceTimeLimitCheck.GetCheck());
   TradeQueueCaptureManager::setTradeTimeCapture(buy1VolumnTimeLimitCheck.GetCheck());
   onlineCheck.SetCheck(TRUE);
   //是否自动开启功能
   bool autoOpen = FALSE;
   list<string> settings = Tool::getSettings("setting.txt");
   if (settings.size() > 0) {
      string c = *(settings.begin());
      if (c == "1") {
         autoOpen = TRUE;
      }
      else {
         autoMsgStatic.SetWindowTextW(_T(""));
         autoL2Check.SetCheck(FALSE);
      }
   }
   if (autoOpen) {
      autoL2Check.SetCheck(TRUE);
   }
   if (authoritySet.count(AUTHORITY_L2) > 0) {
      onlineCheck.SetCheck(FALSE);
@@ -248,19 +267,10 @@
      resetTHSBtn.EnableWindow(TRUE);
      refreshHWNDBtn.EnableWindow(TRUE);
      onlineCheck.EnableWindow(TRUE);
      list<string> settings = Tool::getSettings("setting.txt");
      if (settings.size() > 0) {
         string c = *(settings.begin());
         if (c == "1") {
            autoMsgStatic.SetWindowTextW(_T("正在自动启动中..."));
            autoL2Check.SetCheck(TRUE);
            thread rt(&(CappDlg::autoStartL2), this);
            rt.detach();
         }
         else {
            autoMsgStatic.SetWindowTextW(_T(""));
            autoL2Check.SetCheck(FALSE);
         }
      if (autoOpen) {
         autoMsgStatic.SetWindowTextW(_T("正在自动启动中..."));
         thread rt(&(CappDlg::autoStartL2), this);
         rt.detach();
      }
   }
   else {
@@ -272,6 +282,26 @@
   if (authoritySet.count(AUTHORITY_LIMIT_UP) > 0) {
      limitUpBtn.EnableWindow(TRUE);
      //自动开启涨停
      if (autoOpen) {
         //等待同花顺主屏是否打开
         autoMsgStatic.SetWindowTextW(_T("正在等待THS主屏启动..."));
         for (int i = 0; i < 10; i++) {
            HWND hwnd = THSActionUtil::getMainWin();
            Sleep(1000);
            if (hwnd > 0) {
               break;
            }
         }
         autoMsgStatic.SetWindowTextW(_T("等待打开副屏1..."));
         THSActionUtil::openSecondScreen();
         autoMsgStatic.SetWindowTextW(_T("副屏1已打开..."));
         Sleep(1000);
         // 开启 涨停识别
         autoMsgStatic.SetWindowTextW(_T("启动涨停识别中..."));
         CappDlg::OnBnClickedButton12();
         autoMsgStatic.SetWindowTextW(_T("启动涨停启动成功"));
      }
   }
   else {
      limitUpBtn.EnableWindow(FALSE);
@@ -279,6 +309,33 @@
   if (authoritySet.count(AUTHORITY_TRADE_SUCCESS) > 0) {
      tradeBtn.EnableWindow(TRUE);
      if (autoOpen) {
         //自动打开交易成功页面成功
         HWND hwnd = THSActionUtil::getTradeSuccessWindow();
         if (hwnd <= 0) {
            //打开交易成功页面,在主屏上按F12
            HWND mainWin = THSActionUtil::getMainWin();
            if (mainWin > 0) {
               Win32Util::sendMessage(mainWin, WM_KEYDOWN, VK_F12, 0);
               Win32Util::sendMessage(mainWin, WM_KEYUP, VK_F12, 0);
               //等待页面打开
               for (int i = 0; i < 10; i++) {
                  hwnd = THSActionUtil::getTradeSuccessWindow();
                  Sleep(1000);
                  if (hwnd > 0) {
                     break;
                  }
               }
            }
         }
         if (hwnd > 0) {
            //交易页面打开
            THSActionUtil::openTradeSuccessScreen();
            //启动交易成功识别
            OnBnClickedButtonTrade();
         }
      }
   }
   else {
      tradeBtn.EnableWindow(FALSE);
@@ -288,6 +345,12 @@
   if (authoritySet.count(AUTHORITY_TRADE_DELEGATE) > 0) {
      delegateBtn.EnableWindow(TRUE);
      currentPriceBtn.EnableWindow(TRUE);
      if (autoOpen) {
         thread rt1(&(CappDlg::autoStartTradeDelegate), this);
         rt1.detach();
         thread rt2(&(CappDlg::autoStartCurrentPrice), this);
         rt2.detach();
      }
   }
   else {
      delegateBtn.EnableWindow(FALSE);
@@ -305,18 +368,22 @@
   if (authoritySet.count(AUTHORITY_UPLOAD_CODE) > 0) {
      uploadGPBtn.EnableWindow(FALSE);
      uploadExcelGPBtn.EnableWindow(FALSE);
      addGPCodeBtn.EnableWindow(TRUE);
      uploadGPCodeBtn.EnableWindow(TRUE);
   }
   else {
      uploadGPBtn.EnableWindow(FALSE);
      uploadExcelGPBtn.EnableWindow(FALSE);
      addGPCodeBtn.EnableWindow(FALSE);
      uploadGPCodeBtn.EnableWindow(FALSE);
   }
   if (authoritySet.count(AUTHORITY_TRADE_QUEUE) > 0) {
      buy1VolumnBtn.EnableWindow(TRUE);
      if (autoOpen) {
         thread rt3(&(CappDlg::autoStartBuy1Volumn), this);
         rt3.detach();
      }
   }
   else {
      buy1VolumnBtn.EnableWindow(FALSE);
@@ -351,8 +418,13 @@
   else
   {
      CDialogEx::OnSysCommand(nID, lParam);
      // 关闭按钮退出应用
      if (nID == 61536) {
         exit(0);
      }
   }
}
// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
@@ -383,10 +455,6 @@
   }
}
void CappDlg::OnClose() {
   MessageBox(_T("内容"), _T("标题"), MB_OKCANCEL);
   CDialogEx::OnClose();
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
@@ -417,22 +485,22 @@
   }
}
void  CappDlg::OnTradeQueueDataCallback(int index, string code, list<int> numList, void* context) {
void  CappDlg::OnTradeQueueDataCallback(int index, string code, L2TradeQueue tradeQueue, void* context) {
   //转为json
   CappDlg* app = (CappDlg*)context;
   //cout << "回调:" << std::this_thread::get_id() << ":" << index << endl;
   CButton* btn = (CButton*)app->GetDlgItem(IDC_CHECK1);
   bool check = btn->GetCheck();
   if (check) {
      string data = JsonUtil::loadTradeQueueData(app->clientNum, index, code, numList);
      string data = JsonUtil::loadTradeQueueData(app->clientNum, index, code, tradeQueue);
      clock_t time_start = clock();
      try {
         app->socketManager->sendMsg(index, data.c_str());
         app->socketManager->sendMsg(index + 9, data.c_str());
      }
      catch (string st) {
         //重新连接服务器
         app->socketManager->resetClient(index);
         app->socketManager->Connect(index);
         app->socketManager->resetClient(index + 9);
         app->socketManager->Connect(index + 9);
      }
      //cout << "*****数据处理时间:" << (clock() - time_start) << endl;
   }
@@ -493,7 +561,6 @@
   if (check) {
      string data = JsonUtil::loadTradeDelegateData(dataList);
      clock_t time_start = clock();
      try {
         app->socketManager->sendMsg(8, data.c_str());
@@ -566,7 +633,7 @@
{
   //转为json
   CappDlg* app = (CappDlg*)context;
   string data = JsonUtil::loadTradeQueue(index, result.code_name, result.buy_1_volumn, result.buy_1_price,result.time);
   string data = JsonUtil::loadTradeQueue(index, result.code_name, result.buy_1_volumn, result.buy_1_price, result.time);
   try {
      app->socketManager->sendMsg(8, data.c_str());
      //AfxMessageBox(_T("上传成功"));
@@ -582,16 +649,18 @@
{
   //转为json
   CappDlg* app = (CappDlg*)context;
   if (! app->onlineCheck) {
   if (!app->onlineCheck) {
      return "未知错误";
   }
   if (!app->onlineCheck.GetCheck())
   {
      throw string("客户端离线");
   }
   cout << "action回调:" << std::this_thread::get_id() << ":" << data << endl;
   //解析命令
   Json::Value root = JsonUtil::parseJson(data);
   bool forceAction = root["force"].asBool();
   if (!app->onlineCheck.GetCheck() && !forceAction)
   {
      throw string("客户端离线");
   }
   string action = root["action"].asString();
   if (action == "setGPCode") {
      //设置股票代码
@@ -627,15 +696,15 @@
         //打开Level2监控屏幕
         THSActionUtil::openL2Screen();
         map<int, string> results = THSActionUtil::getListenL2GPCodes(recognitionManager);
         //设置代码
         for (map<int, string>::iterator ele = results.begin();ele != results.end();ele++) {
         for (map<int, string>::iterator ele = results.begin(); ele != results.end(); ele++) {
            int key = (*ele).first;
            string value = (*ele).second;
            app->capture->setGPCode(key, value);
            cout << "代码位:" << key << " CODE:" << value;
                //TODO 记录日志
            //TODO 记录日志
         }
         Sleep(500);
      }
@@ -650,6 +719,106 @@
      app->capture->start(index);
      //恢复涨停识别
      LimitUpCapture::pause = FALSE;
   }
   else if (action == "betchSetGPCodes") {
      //批量设置代码
      int len = root["data"].size();
      for (int i = 0; i < len; i++) {
         int index = root["data"][i]["index"].asInt();
         string code = root["data"][i]["code"].asString();
         string quickCode = "5";
         quickCode.append(to_string(index + 1));
         list<string> codeList;
         if (code.length() > 0)
         {
            codeList.push_back(code);
         }
         try {
            if (!app->capture->isInited()) {
               app->initCapture(false);
            }
            //暂停采集
            app->capture->stop(index);
            //暂停涨停识别
            LimitUpCapture::pause = TRUE;
            //打开Level2监控屏幕
            THSActionUtil::openL2Screen();
            bool result = THSActionUtil::setGP(quickCode, codeList, recognitionManager);
            if (!result) {
               throw string("设置版块监控的GP失败");
            }
         }
         catch (string e) {
            throw e;
         }
         catch (...) {
            throw string("未知错误(unknown error)");
         }
      }
      //map<int, string> results = THSActionUtil::getListenL2GPCodes(recognitionManager);
      //设置代码
      //for (map<int, string>::iterator ele = results.begin(); ele != results.end(); ele++) {
      //   int key = (*ele).first;
      //   string value = (*ele).second;
      //   app->capture->setGPCode(key, value);
      //   cout << "代码位:" << key << " CODE:" << value;
      //}
      for (int i = 0; i < len; i++) {
         try {
            int index = root["data"][i]["index"].asInt();
            string code = root["data"][i]["code"].asString();
            app->capture->setGPCode(index, code);
            cout << "代码位:" << index << " CODE:" << code;
         }
         catch (...) {
         }
         Sleep(100);
      }
      for (int i = 0; i < len; i++) {
         try {
            int index = root["data"][i]["index"].asInt();
            string code = root["data"][i]["code"].asString();
            //刷新L2数据
            THSActionUtil::setListenL2GP(index, code, recognitionManager);
            //打开Level2监控屏幕
            THSActionUtil::openL2Screen();
         }
         catch (...) {
         }
         Sleep(100);
      }
      //恢复识别
      for (int i = 0; i < len; i++) {
         int index = root["data"][i]["index"].asInt();
         app->capture->start(index);
      }
      //恢复涨停识别
      LimitUpCapture::pause = FALSE;
      //可以接受命令
      //app->onlineCheck.SetCheck(TRUE);
      //app->onlineCheck.PostMessage(WM_LBUTTONDOWN, 0, 0);
      //app->onlineCheck.PostMessage(WM_LBUTTONUP, 0, 0);
      RECT rect;
      Win32Util::getWindowRect(app->onlineCheck.m_hWnd, &rect);
      Win32Util::click((rect.left + rect.right )/ 2, (rect.top + rect.bottom) / 2, 10);
   }
   else if (action == "repairL2Data") {
      //修正代码与L2行情代码不对应 或者 L2行情无数据的情况
@@ -668,6 +837,9 @@
      }
      catch (string st) {
         throw st;
      }
      catch (...) {
         throw string("未知错误");
      }
   }
@@ -713,7 +885,7 @@
      //获取环境状态
      int l2_valid_count = 0;
      int l2_invalid_count = 0;
      for (int i = 0;i < THS_FRAME_COUNT;i++)
      for (int i = 0; i < THS_FRAME_COUNT; i++)
      {
         clock_t latestTime = TaskChecker::clientLiveTime.l2[i];
         if (clock() - latestTime > 5000) {
@@ -752,7 +924,7 @@
      app->OnBnClickedButton21();
      //l2采集环境修复
      for (int i = 0;i < THS_FRAME_COUNT;i++)
      for (int i = 0; i < THS_FRAME_COUNT; i++)
      {
         clock_t latestTime = TaskChecker::clientLiveTime.l2[i];
         if (clock() - latestTime > 5000) {
@@ -774,7 +946,7 @@
   else if (action == "syncTargetCodes") {
      Json::Value data = root["data"];
      list<string> codeList;
      for (int i = 0;i < data.size();i++) {
      for (int i = 0; i < data.size(); i++) {
         string code = data[i].asString();
         codeList.push_back(code);
      }
@@ -800,7 +972,7 @@
      Json::Value root;
      Json::Value data;
      int index = 0;
      for (std::list<GPCodeArea>::iterator ele = resultList.begin();ele != resultList.end();++ele) {
      for (std::list<GPCodeArea>::iterator ele = resultList.begin(); ele != resultList.end(); ++ele) {
         Json::Value item;
         item["index"] = (*ele).cateIndex;
         item["code"] = (*ele).code;
@@ -816,6 +988,9 @@
      }
      catch (string st) {
         throw st;
      }
      catch (...) {
         throw string("未知错误");
      }
   }
@@ -840,6 +1015,11 @@
      root["msg"] = "未知错误";
   }
   return  JsonUtil::jsonValue2String(root);
}
string CappDlg::OnActionCallbackQueue(string data, void* context)
{
   return string();
}
//心跳信号
@@ -1021,7 +1201,7 @@
   CappDlg* app = (CappDlg*)context;
   app->autoMsgStatic.SetWindowTextW(_T("开始检测同花顺环境..."));
   //点击检查同花顺
   for (int i = 0;i < 10;i++)
   for (int i = 0; i < 10; i++)
   {
      try {
         checkTHSEnv(app);
@@ -1046,10 +1226,56 @@
   //app->OnBnClickedButtonTrade();
   //启动涨停识别
   //OnBnClickedButton12();
   //可以接受命令
   app->onlineCheck.SetCheck(TRUE);
   //发送自动化开始成功
   string data = JsonUtil::loadAutoStartL2(clientNum);
   clock_t time_start = clock();
   try {
      string result_msg = app->socketManager->sendMsg(8, data.c_str());
      Json::Value v_ = JsonUtil::parseJson(result_msg);
      if (v_["code"] == 0) {
         //判断是否需要自动开启在线
            //可以接受命令
         app->onlineCheck.SetCheck(TRUE);
      }
      else {
         //不可以接受命令
         app->onlineCheck.SetCheck(FALSE);
      }
   }
   catch (string st) {
      //重新连接服务器
      app->socketManager->resetClient(8);
      app->socketManager->Connect(8);
   }
}
void CappDlg::autoStartTradeDelegate(void* context)
{
   CappDlg* app = (CappDlg*)context;
   app->autoMsgStatic.SetWindowTextW(_T("开始委托识别..."));
   app->OnBnClickedButtonTradeDelegate();
   app->autoMsgStatic.SetWindowTextW(_T("委托识别启动成功"));
}
void CappDlg::autoStartCurrentPrice(void* context)
{
   CappDlg* app = (CappDlg*)context;
   app->autoMsgStatic.SetWindowTextW(_T("开始现价识别..."));
   app->OnBnClickedCurrentPrice();
   app->autoMsgStatic.SetWindowTextW(_T("现价识别启动成功"));
}
void CappDlg::autoStartBuy1Volumn(void* context)
{
   CappDlg* app = (CappDlg*)context;
   app->autoMsgStatic.SetWindowTextW(_T("开始买1识别..."));
   app->OnBnClickedButtonBuy1Volumn();
   app->autoMsgStatic.SetWindowTextW(_T("买1识别启动成功"));
}
@@ -1081,7 +1307,7 @@
void CappDlg::OnBnClickedButton2()
{
   for (int i = 0;i < 8;i++)
   for (int i = 0; i < 8; i++)
   {
      socketManager->disConnect(i);
   }
@@ -1099,9 +1325,9 @@
   for (int i = 0; i < num; i++)
   {
      try {
         if (socketManager->sendMsg(i, "test")) {
         socketManager->sendMsg(i, "test");
            scount++;
         }
      }
      catch (string st) {
@@ -1129,9 +1355,9 @@
   int num = socketManager->getClientsNum();
   for (int i = 0; i < num; i++)
   {
      if (socketManager->sendMsg(i, "test")) {
         scount++;
      }
      socketManager->sendMsg(i, "test");
      scount++;
   }
@@ -1150,12 +1376,12 @@
   return
   initCapture();
      initCapture();
   clock_t time = clock();
   CString path = GUITool::selectImage();
    std:string p = Tool::cstring2String(path);
std:string p = Tool::cstring2String(path);
   if (p.length() <= 0) {
      return;
   }
@@ -1245,7 +1471,7 @@
            cout << "尚未获取L2的监听代码" << endl;
         }
         //设置代码
         for (map<int, string>::iterator ele = result.begin();ele != result.end();ele++) {
         for (map<int, string>::iterator ele = result.begin(); ele != result.end(); ele++) {
            int key = (*ele).first;
            string value = (*ele).second;
            capture->setGPCode(key, value);
@@ -1296,7 +1522,7 @@
   list<CString> paths = GUITool::selectMulImages();
   std::list<IndustryData> fResultList;
   for (list<CString>::iterator ele = paths.begin();ele != paths.end();ele++) {
   for (list<CString>::iterator ele = paths.begin(); ele != paths.end(); ele++) {
      CString path = *ele;
   std:string p = Tool::cstring2String(path);
      cv::Mat grayImg = gpDataCapture->grayImgs(cv::imread(p));
@@ -1305,7 +1531,7 @@
      list<list<GPDataStruct>>  resultList = gpDataCapture->captureGPData(grayImg, types, 6, 1, 2);
      for (list<list<GPDataStruct>>::iterator ele1 = resultList.begin();ele1 != resultList.end();ele1++) {
      for (list<list<GPDataStruct>>::iterator ele1 = resultList.begin(); ele1 != resultList.end(); ele1++) {
         IndustryData industryData = IndustryData();
         list<GPDataStruct>::iterator e = (*ele1).begin();
@@ -1320,7 +1546,7 @@
         bool contains = false;
         for (std::list<IndustryData>::iterator e = fResultList.begin();e != fResultList.end();e++) {
         for (std::list<IndustryData>::iterator e = fResultList.begin(); e != fResultList.end(); e++) {
            if ((*e).code == industryData.code) {
               contains = true;
               break;
@@ -1355,7 +1581,7 @@
   list<CString> paths = GUITool::selectMulImages();
   std::list<IndustryData> fResultList;
   for (list<CString>::iterator ele = paths.begin();ele != paths.end();ele++) {
   for (list<CString>::iterator ele = paths.begin(); ele != paths.end(); ele++) {
      CString path = *ele;
   std:string p = Tool::cstring2String(path);
      cv::Mat img = cv::imread(p);
@@ -1369,7 +1595,7 @@
      list<list<GPDataStruct>>  resultList = gpDataCapture->captureGPData(grayImg, types, 6, 1, 2);
      for (list<list<GPDataStruct>>::iterator ele1 = resultList.begin();ele1 != resultList.end();ele1++) {
      for (list<list<GPDataStruct>>::iterator ele1 = resultList.begin(); ele1 != resultList.end(); ele1++) {
         IndustryData industryData = IndustryData();
         list<GPDataStruct>::iterator e = (*ele1).begin();
@@ -1384,7 +1610,7 @@
         bool contains = false;
         for (std::list<IndustryData>::iterator e = fResultList.begin();e != fResultList.end();e++) {
         for (std::list<IndustryData>::iterator e = fResultList.begin(); e != fResultList.end(); e++) {
            if ((*e).code == industryData.code) {
               contains = true;
               break;
@@ -1401,51 +1627,6 @@
   codesDataDlog dlg;
   dlg.DoModal();
}
// Excel上传股票代码
void CappDlg::OnBnClickedButtonUploadExcelCode()
{
   CString cpath = GUITool::selectExcel();
   std:string path = Tool::cstring2String(cpath);
   if (path.length() > 0)
   {
      std::list<IndustryData> fresult;
      list<ExcelGPCodeInfo> codesList =   ExcelUtil::readGPCodes(path);
      list<ExcelGPCodeInfo>::iterator ele;
      for (ele = codesList.begin();ele != codesList.end();++ele) {
         ExcelGPCodeInfo info= *ele;
         IndustryData finfo;
         if (info.code.length()>0)
         {
            finfo.code = info.code.replace(0, 2, "");
            if (info.zyltgb.find("亿",0) > 0) {
               finfo.zyltMoneyUnit = MONEY_UNIT_Y;
               string zyltgb = info.zyltgb;
               finfo.zyltMoney = zyltgb.substr(0, zyltgb.length()-2);
            }
            else if (info.zyltgb.find("万",0) > 0) {
               finfo.zyltMoneyUnit = MONEY_UNIT_W;
               string zyltgb = info.zyltgb;
               finfo.zyltMoney = zyltgb.substr(0, zyltgb.length() - 2);
            }
            else {
               finfo.zyltMoneyUnit = MONEY_UNIT_NO;
               finfo.zyltMoney = info.zyltgb;
            }
            fresult.push_back(finfo);
         }
      }
      codesDataDlog::codeData = fresult;
      codesDataDlog::upload = TRUE;
      codesDataDlog dlg;
      dlg.DoModal();
   }
}
//涨停上传
@@ -1598,7 +1779,7 @@
   else {
      try
      {
         tradeListCapture->refreshTradeDelegateHWND();
         tradeListCapture->refreshTradeSimpleDelegateHWND();
      }
      catch (string st)
      {
@@ -1620,7 +1801,7 @@
{
   int index = 0;
   std::list<TradeData> dataList;
   for (int i = 0;i < 10;i++) {
   for (int i = 0; i < 10; i++) {
      TradeData data = TradeData();
      //7.32
      data.time = "09:30:00";
@@ -1631,7 +1812,7 @@
      dataList.push_back(data);
   }
   for (int i = 10;i < 11;i++) {
   for (int i = 10; i < 11; i++) {
      TradeData data = TradeData();
      //7.32
      data.time = "09:30:00";
@@ -1645,7 +1826,7 @@
   string data = JsonUtil::loadL2Data(clientNum, 0, "002338",0,0, dataList);
   string data = JsonUtil::loadL2Data(clientNum, 0, "002338", 0, 0, dataList);
   clock_t time_start = clock();
   try {
      socketManager->sendMsg(index, data.c_str());
@@ -1884,7 +2065,7 @@
// 买1 识别
void CappDlg::OnBnClickedButtonBuy1Volumn()
{
   if (!tradeQueueCaptureManager->isInited()) {
      try {
         tradeQueueCaptureManager->init(OnTradeQueueCallback, this);
@@ -1917,6 +2098,24 @@
   std::list<IndustryData> fresult;
   codesDataDlog::codeData = fresult;
   codesDataDlog::upload = TRUE;
   codesDataDlog::add = FALSE;
   codesDataDlog dlg;
   dlg.DoModal();
}
void CappDlg::OnBnClickedCheckBuy1VolumnTimeLimit()
{
   TradeQueueCaptureManager::setTradeTimeCapture(buy1VolumnTimeLimitCheck.GetCheck());
}
//新增股票代码
void CappDlg::OnBnClickedButtonGpCodeAdd()
{
   std::list<IndustryData> fresult;
   codesDataDlog::codeData = fresult;
   codesDataDlog::upload = TRUE;
   codesDataDlog::add = TRUE;
   codesDataDlog dlg;
   dlg.DoModal();
}