// CSettingDlg.cpp: 实现文件
|
//
|
|
#include "common/pch.h"
|
#include "FloatTrade.h"
|
#include "CSettingDlg.h"
|
#include "afxdialogex.h"
|
#include "../common/StringUtil.h"
|
#include "../common/NetworkApi.h"
|
#include "../common/JsonUtil.h"
|
#include "ConfigUtil.h"
|
#include <iostream>
|
#include <string>
|
#include <sstream>
|
#include <regex>
|
#include <iconv.h>
|
using namespace std;
|
|
// CSettingDlg 对话框
|
|
IMPLEMENT_DYNAMIC(CSettingDlg, CDialogEx)
|
|
CSettingDlg::CSettingDlg(CWnd* pParent /*=nullptr*/)
|
: CDialogEx(IDD_SETTINGS, pParent)
|
{
|
|
}
|
|
CSettingDlg::~CSettingDlg()
|
{
|
}
|
|
void CSettingDlg::DoDataExchange(CDataExchange* pDX)
|
{
|
CDialogEx::DoDataExchange(pDX);
|
DDX_Control(pDX, edit_trade_refresh_space_time, editRefreshSpaceTime);
|
DDX_Control(pDX, edit_normal_buy_count, editNormalBuyCount);
|
DDX_Control(pDX, edit_radical_buy_count, editRadicalBuyCount);
|
}
|
|
|
BEGIN_MESSAGE_MAP(CSettingDlg, CDialogEx)
|
ON_BN_CLICKED(btn_sure, &CSettingDlg::OnBnClickedsure)
|
ON_BN_CLICKED(btn_sure_network, &CSettingDlg::OnBnClickedsurenetwork)
|
ON_BN_CLICKED(btn_radical_buy_block_count_sure, &CSettingDlg::OnBnClickedradicalbuyblockcountsure)
|
END_MESSAGE_MAP()
|
|
|
// CSettingDlg 消息处理程序
|
|
|
void CSettingDlg::OnBnClickedsure()
|
{
|
CString refreshSpace;
|
editRefreshSpaceTime.GetWindowTextW(refreshSpace);
|
|
|
if (refreshSpace.GetLength() < 0) {
|
AfxMessageBox(L"请填写交易刷新频率");
|
return;
|
}
|
|
int volume_ids[] = {
|
IDC_EDIT_VOLUME_1,IDC_EDIT_VOLUME_2,IDC_EDIT_VOLUME_3,IDC_EDIT_VOLUME_4,IDC_EDIT_VOLUME_5,IDC_EDIT_VOLUME_6,IDC_EDIT_VOLUME_7,
|
IDC_EDIT_VOLUME_8,IDC_EDIT_VOLUME_9,IDC_EDIT_VOLUME_10,IDC_EDIT_VOLUME_11,IDC_EDIT_VOLUME_12
|
};
|
|
list<int> volumeList;
|
for (int i = 0; i < 12; i++) {
|
CEdit* edit = (CEdit*)GetDlgItem(volume_ids[i]);
|
CString volumeC;
|
edit->GetWindowTextW(volumeC);
|
if (!StringUtil::isNumber(StringUtil::cstring2String(volumeC))) {
|
AfxMessageBox(L"金额必须为数字");
|
return;
|
}
|
volumeList.push_back(stoi(StringUtil::cstring2String(volumeC).c_str()));
|
}
|
|
ConfigUtil::setVolumesSetting(volumeList);
|
ConfigUtil::setThsAutoRefreshTimeSpace(stoi(StringUtil::cstring2String(refreshSpace)));
|
AfxMessageBox(L"保存成功", MB_ICONINFORMATION);
|
}
|
|
|
BOOL CSettingDlg::OnInitDialog()
|
{
|
CDialogEx::OnInitDialog();
|
int rt = ConfigUtil::getThsAutoRefreshTimeSpace();
|
editRefreshSpaceTime.SetWindowTextW(CString(std::to_string(rt).c_str()));
|
|
try {
|
string result = NetworkApi::get_buy_money_and_count();
|
auto doc = JsonUtil::parseUTF8(result);
|
if (doc.IsObject()) {
|
if (doc["code"].GetInt() == 0) {
|
BuyDataSettings settings;
|
auto data = doc["data"].GetObject();
|
auto normal = data["normal"].GetArray();;
|
auto radical = data["radical"].GetArray();
|
auto moneys_enum = data["moneys"].GetArray();
|
settings.normalCount = normal[0].GetInt();
|
settings.radicalCount = radical[0].GetInt();
|
auto money_list = normal[1].GetArray();
|
for (int i = 0; i < money_list.Size(); i++) {
|
auto item = money_list[i].GetArray();
|
settings.normalMoneyList.push_back(TimeMoney({ CString(item[0].GetString()),item[1].GetInt(), item[2].GetInt() }));
|
}
|
|
money_list = radical[1].GetArray();
|
for (int i = 0; i < money_list.Size(); i++) {
|
auto item = money_list[i].GetArray();
|
settings.radicalMoneyList.push_back(TimeMoney({ CString(item[0].GetString()),item[1].GetInt(), item[2].GetInt() }));
|
}
|
|
|
int moneys[] = { combo_normal_buy_money_1 ,combo_normal_buy_money_2 ,combo_normal_buy_money_3,combo_radical_buy_money_1 ,combo_radical_buy_money_2 ,combo_radical_buy_money_3 };
|
for (int i = 0; i < 6; i++) {
|
CComboBox* box = (CComboBox*)GetDlgItem(moneys[i]);
|
for (int i = 0; i < moneys_enum.Size(); i++) {
|
box->AddString(to_wstring(moneys_enum[i].GetInt()).c_str());
|
}
|
}
|
setBuyDataSetting(settings);
|
}
|
}
|
|
}
|
catch (...) {
|
|
}
|
|
// 初始化下拉框内容
|
try {
|
int volume_ids[] = {
|
IDC_EDIT_VOLUME_1,IDC_EDIT_VOLUME_2,IDC_EDIT_VOLUME_3,IDC_EDIT_VOLUME_4,IDC_EDIT_VOLUME_5,IDC_EDIT_VOLUME_6,IDC_EDIT_VOLUME_7,
|
IDC_EDIT_VOLUME_8,IDC_EDIT_VOLUME_9,IDC_EDIT_VOLUME_10,IDC_EDIT_VOLUME_11,IDC_EDIT_VOLUME_12
|
};
|
|
list<int> volumeList = ConfigUtil::getVolumesSetting();
|
int index = 0;
|
for (list<int>::iterator e = volumeList.begin(); e != volumeList.end(); ++e) {
|
int volume = *e;
|
CEdit* edit = (CEdit*)GetDlgItem(volume_ids[index]);
|
edit->SetWindowTextW(to_wstring(volume).c_str());
|
index++;
|
}
|
}
|
catch (...) {
|
|
}
|
|
try {
|
|
requestRadicalBuyBlockCount();
|
}
|
catch (...) {
|
|
|
}
|
|
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
// 异常: OCX 属性页应返回 FALSE
|
}
|
|
|
void CSettingDlg::OnBnClickedsurenetwork()
|
{
|
try {
|
BuyDataSettings settings = getBuyDataSetting();
|
|
rapidjson::StringBuffer buf;
|
rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buf);
|
writer.StartArray();
|
|
|
for (list<TimeMoney>::iterator e = settings.normalMoneyList.begin(); e != settings.normalMoneyList.end(); e++) {
|
TimeMoney timeMoney = *e;
|
writer.StartArray();
|
writer.String(StringUtil::cstring2String(timeMoney.time).c_str());
|
writer.Int(timeMoney.money);
|
writer.Int(timeMoney.count);
|
writer.EndArray();
|
}
|
|
writer.EndArray();
|
const char* normalMoneyJson = buf.GetString();
|
|
|
rapidjson::StringBuffer buf1;
|
rapidjson::PrettyWriter<rapidjson::StringBuffer> writer1(buf1);
|
writer1.StartArray();
|
for (list<TimeMoney>::iterator e = settings.radicalMoneyList.begin(); e != settings.radicalMoneyList.end(); e++) {
|
TimeMoney timeMoney = *e;
|
writer1.StartArray();
|
writer1.String(StringUtil::cstring2String(timeMoney.time).c_str());
|
writer1.Int(timeMoney.money);
|
writer1.Int(timeMoney.count);
|
writer1.EndArray();
|
}
|
|
writer1.EndArray();
|
const char* radicalMoneyJson = buf1.GetString();
|
NetworkApi::set_buy_money_and_count(settings.normalCount, string(normalMoneyJson), settings.radicalCount, string(radicalMoneyJson));
|
MessageBox(L"设置成功", L"提示");
|
}
|
catch (CString st) {
|
AfxMessageBox(st);
|
}
|
catch (wstring st) {
|
AfxMessageBox(st.c_str());
|
}
|
}
|
|
BuyDataSettings CSettingDlg::getBuyDataSetting()
|
{
|
int normal_times[] = { edit_normal_buy_money_time_1 ,edit_normal_buy_money_time_2 ,edit_normal_buy_money_time_3 };
|
int normal_moneys[] = { combo_normal_buy_money_1 ,combo_normal_buy_money_2 ,combo_normal_buy_money_3 };
|
int normal_counts[] = { edit_normal_buy_count_1 ,edit_normal_buy_count_2 ,edit_normal_buy_count_3 };
|
|
int radical_times[] = { edit_radical_buy_money_time_1 ,edit_radical_buy_money_time_2 ,edit_radical_buy_money_time_3 };
|
int radical_moneys[] = { combo_radical_buy_money_1 ,combo_radical_buy_money_2 ,combo_radical_buy_money_3 };
|
int radical_counts[] = { edit_radical_buy_count_1 ,edit_radical_buy_count_2 ,edit_radical_buy_count_3 };
|
|
|
CString normalCount;
|
((CEdit*)GetDlgItem(edit_normal_buy_count))->GetWindowTextW(normalCount);
|
|
|
CString radicalCount;
|
((CEdit*)GetDlgItem(edit_radical_buy_count))->GetWindowTextW(radicalCount);
|
|
|
|
if (normalCount.IsEmpty() || !StringUtil::isNumber(StringUtil::cstring2String(normalCount))) {
|
throw CString(L"正常买入最大数量填写错误");
|
}
|
if (radicalCount.IsEmpty() || !StringUtil::isNumber(StringUtil::cstring2String(radicalCount))) {
|
throw CString(L"扫入买入最大数量填写错误");
|
}
|
|
BuyDataSettings settings;
|
|
settings.normalCount = stoi(StringUtil::cstring2String(normalCount).c_str());
|
settings.radicalCount = stoi(StringUtil::cstring2String(radicalCount).c_str());
|
|
for (int i = 0; i < 3; i++) {
|
|
CString time;
|
CString money;
|
CString count;
|
((CEdit*)GetDlgItem(normal_times[i]))->GetWindowTextW(time);
|
|
CComboBox* moneyCombo = ((CComboBox*)GetDlgItem(normal_moneys[i]));
|
if (moneyCombo->GetCurSel() >= 0) {
|
moneyCombo->GetLBText(moneyCombo->GetCurSel(), money);
|
}
|
((CEdit*)GetDlgItem(normal_counts[i]))->GetWindowTextW(count);
|
|
|
if (!time.IsEmpty() && !money.IsEmpty() && !count.IsEmpty()) {
|
if (!validTime(time)) {
|
throw CString(L"时间格式错误");
|
}
|
if (!StringUtil::isNumber(StringUtil::cstring2String(money))) {
|
throw CString(L"金额格式错误(必须为正整数)");
|
}
|
if (!StringUtil::isNumber(StringUtil::cstring2String(count))) {
|
throw CString(L"最大买入数量格式错误(必须为正整数)");
|
}
|
settings.normalMoneyList.push_back(TimeMoney({ time,stoi(StringUtil::cstring2String(money).c_str()),stoi(StringUtil::cstring2String(count).c_str()) }));
|
}
|
}
|
|
|
for (int i = 0; i < 3; i++) {
|
|
CString time;
|
CString money;
|
CString count;
|
((CEdit*)GetDlgItem(radical_times[i]))->GetWindowTextW(time);
|
CComboBox* moneyCombo = ((CComboBox*)GetDlgItem(radical_moneys[i]));
|
if (moneyCombo->GetCurSel() >= 0) {
|
moneyCombo->GetLBText(moneyCombo->GetCurSel(), money);
|
}
|
|
((CEdit*)GetDlgItem(radical_counts[i]))->GetWindowTextW(count);
|
|
|
if (!time.IsEmpty() && !money.IsEmpty() && !count.IsEmpty()) {
|
if (!validTime(time)) {
|
throw CString(L"时间格式错误");
|
}
|
if (!StringUtil::isNumber(StringUtil::cstring2String(money))) {
|
throw CString(L"金额格式错误(必须为正整数)");
|
}
|
if (!StringUtil::isNumber(StringUtil::cstring2String(count))) {
|
throw CString(L"最大买入数量格式错误(必须为正整数)");
|
}
|
settings.radicalMoneyList.push_back(TimeMoney({ time,stoi(StringUtil::cstring2String(money).c_str()),stoi(StringUtil::cstring2String(count).c_str()) }));
|
}
|
}
|
return settings;
|
}
|
|
|
void CSettingDlg::requestRadicalBuyBlockCount()
|
{
|
list<RadicalBuyBlockInfo> mList;
|
string result = NetworkApi::get_radical_buy_block_count();
|
auto doc = JsonUtil::parseUTF16(result);
|
if (doc.IsObject()) {
|
if (doc[L"code"].GetInt() == 0) {
|
auto array = doc[L"data"].GetArray();
|
for (int i = 0; i < array.Size(); i++) {
|
auto item = array[i].GetArray();
|
mList.push_back(RadicalBuyBlockInfo({ item[0].GetString(),item[1].GetInt()}));
|
}
|
}
|
}
|
int block_ids[] = { IDC_EDIT_RADICAL_BUY_BLOCK_1, IDC_EDIT_RADICAL_BUY_BLOCK_2, IDC_EDIT_RADICAL_BUY_BLOCK_3, IDC_EDIT_RADICAL_BUY_BLOCK_4 };
|
int count_ids[] = { IDC_EDIT_RADICAL_BUY_COUNT_1, IDC_EDIT_RADICAL_BUY_COUNT_2, IDC_EDIT_RADICAL_BUY_COUNT_3, IDC_EDIT_RADICAL_BUY_COUNT_4 };
|
int index = 0;
|
for (list<RadicalBuyBlockInfo>::iterator e = mList.begin(); e != mList.end(); e++) {
|
RadicalBuyBlockInfo info = *e;
|
((CEdit*)GetDlgItem(block_ids[index]))->SetWindowTextW(info.blockName);
|
((CEdit*)GetDlgItem(count_ids[index]))->SetWindowTextW(to_wstring(info.count).c_str());
|
index++;
|
if (index >= 4) {
|
break;
|
}
|
}
|
}
|
|
void CSettingDlg::setBuyDataSetting(BuyDataSettings setting)
|
{
|
|
int normal_times[] = { edit_normal_buy_money_time_1 ,edit_normal_buy_money_time_2 ,edit_normal_buy_money_time_3 };
|
int normal_moneys[] = { combo_normal_buy_money_1 ,combo_normal_buy_money_2 ,combo_normal_buy_money_3 };
|
int normal_counts[] = { edit_normal_buy_count_1 ,edit_normal_buy_count_2 ,edit_normal_buy_count_3 };
|
|
int radical_times[] = { edit_radical_buy_money_time_1 ,edit_radical_buy_money_time_2 ,edit_radical_buy_money_time_3 };
|
int radical_moneys[] = { combo_radical_buy_money_1 ,combo_radical_buy_money_2 ,combo_radical_buy_money_3 };
|
int radical_counts[] = { edit_radical_buy_count_1 ,edit_radical_buy_count_2 ,edit_radical_buy_count_3 };
|
editNormalBuyCount.SetWindowTextW(to_wstring(setting.normalCount).c_str());
|
editRadicalBuyCount.SetWindowTextW(to_wstring(setting.radicalCount).c_str());
|
int index = 0;
|
for (list<TimeMoney>::iterator e = setting.normalMoneyList.begin(); e != setting.normalMoneyList.end(); e++) {
|
TimeMoney timeMoney = *e;
|
((CEdit*)GetDlgItem(normal_times[index]))->SetWindowTextW(timeMoney.time);
|
CComboBox* box = (CComboBox*)GetDlgItem(normal_moneys[index]);
|
int nCount = box->GetCount();
|
for (int i = 0; i < nCount; i++)
|
{
|
CString strItem;
|
box->GetLBText(i, strItem);
|
if (stoi(StringUtil::cstring2String(strItem).c_str()) == timeMoney.money) {
|
box->SetCurSel(i);
|
break;
|
}
|
}
|
((CEdit*)GetDlgItem(normal_counts[index]))->SetWindowTextW(to_wstring(timeMoney.count).c_str());
|
index++;
|
}
|
|
index = 0;
|
for (list<TimeMoney>::iterator e = setting.radicalMoneyList.begin(); e != setting.radicalMoneyList.end(); e++) {
|
TimeMoney timeMoney = *e;
|
((CEdit*)GetDlgItem(radical_times[index]))->SetWindowTextW(timeMoney.time);
|
CComboBox* box = (CComboBox*)GetDlgItem(radical_moneys[index]);
|
int nCount = box->GetCount();
|
for (int i = 0; i < nCount; i++)
|
{
|
CString strItem;
|
box->GetLBText(i, strItem);
|
if (stoi(StringUtil::cstring2String(strItem).c_str()) == timeMoney.money) {
|
box->SetCurSel(i);
|
break;
|
}
|
}
|
((CEdit*)GetDlgItem(radical_counts[index]))->SetWindowTextW(to_wstring(timeMoney.count).c_str());
|
index++;
|
}
|
}
|
|
bool CSettingDlg::validTime(CString st)
|
{
|
|
// 正则表达式:匹配 HH:MM:SS 格式
|
std::regex timePattern(R"((([01]\d|2[0-3]):([0-5]\d):([0-5]\d))?)");
|
return std::regex_match(StringUtil::cstring2String(st), timePattern);
|
|
}
|
|
|
void CSettingDlg::OnBnClickedradicalbuyblockcountsure()
|
{
|
int block_ids[] = { IDC_EDIT_RADICAL_BUY_BLOCK_1, IDC_EDIT_RADICAL_BUY_BLOCK_2, IDC_EDIT_RADICAL_BUY_BLOCK_3, IDC_EDIT_RADICAL_BUY_BLOCK_4 };
|
int count_ids[] = { IDC_EDIT_RADICAL_BUY_COUNT_1, IDC_EDIT_RADICAL_BUY_COUNT_2, IDC_EDIT_RADICAL_BUY_COUNT_3, IDC_EDIT_RADICAL_BUY_COUNT_4 };
|
try {
|
|
list<RadicalBuyBlockInfo> mList;
|
// 获取数据
|
for (int i = 0; i < 4; i++) {
|
CString block;
|
CString count;
|
((CEdit*)GetDlgItem(block_ids[i]))->GetWindowTextW(block);
|
((CEdit*)GetDlgItem(count_ids[i]))->GetWindowTextW(count);
|
if (!block.IsEmpty() && !count.IsEmpty()) {
|
if (!StringUtil::isNumber(StringUtil::cstring2String(count))) {
|
throw CString(L"输入格式错误");
|
}
|
mList.push_back(RadicalBuyBlockInfo({ block , stoi(StringUtil::cstring2String(count)) }));
|
}
|
|
}
|
|
|
rapidjson::StringBuffer buf;
|
rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buf);
|
writer.StartArray();
|
for (list<RadicalBuyBlockInfo>::iterator e = mList.begin(); e != mList.end(); e++) {
|
RadicalBuyBlockInfo info = *e;
|
writer.StartArray();
|
writer.String(StringUtil::cstring2StringV2(info.blockName).c_str());
|
writer.Int(info.count);
|
writer.EndArray();
|
}
|
writer.EndArray();
|
const char* json = buf.GetString();
|
// 设置数据
|
NetworkApi::set_radical_buy_block_count(StringUtil::base64_encode(json));
|
MessageBox(L"设置成功",L"提示");
|
}
|
catch (CString msg) {
|
AfxMessageBox(msg);
|
}
|
catch (wstring msg) {
|
AfxMessageBox(msg.c_str());
|
}
|
}
|