From 8ea6d363df77de2dca288397da8d4f9c3d3a5c4d Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期五, 18 十月 2024 18:41:57 +0800
Subject: [PATCH] '项目完善'

---
 DelegateQueue/MainFrame.cpp |  115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 109 insertions(+), 6 deletions(-)

diff --git a/DelegateQueue/MainFrame.cpp b/DelegateQueue/MainFrame.cpp
index c58d98f..4509e89 100644
--- a/DelegateQueue/MainFrame.cpp
+++ b/DelegateQueue/MainFrame.cpp
@@ -8,6 +8,7 @@
 #include "../common_nopch/TimeUtil.h"
 #include "MyConfigUtil.h"
 #include <wx/graphics.h>
+#include <atlstr.h>
 
 #define ROW_WIDTH_DELEGATE_INFO (FRAME_WIDTH  - 30)*DPI/100
 
@@ -29,6 +30,7 @@
 	CLICK_TYPE_CANCEL_BUY,
 	CLICK_TYPE_VIEW_DETAIL,
 	CLICK_TYPE_QUEUE,
+	CLICK_TYPE_NOT_BUY,
 };
 
 struct ViewDetailData {
@@ -44,6 +46,7 @@
 	DelegateInfo delegateInfo;
 	wxString delegateInfoStr;
 	list<ColorIndexInfo> delegateColors;
+	map<wxString, wxRect>  notBuyBtnRectMap;
 	map<wxString, wxRect>  viewBtnRectMap;
 	map<wxString, wxRect> cancelBtnRectMap;
 	map<wxString, wxRect> queueRectMap;
@@ -170,6 +173,10 @@
 
 		codeInfo.Append("  ").Append(delegateInfo.zyltgb);
 
+		if (delegateInfo.mode == 3) {
+			codeInfo.Append("(扫入)");
+		}
+
 
 		if (delegateInfo.pay_attention) {
 			WidgetsRenderUtil::drawText(dc, codeInfo, wxPoint(startx, starty + 3), line_width, TEXT_LINE_HEIGHT, std::list<ColorIndexInfo>(), *wxRED);
@@ -179,6 +186,9 @@
 		else {
 			WidgetsRenderUtil::drawText(dc, codeInfo, wxPoint(startx, starty + 3), line_width, TEXT_LINE_HEIGHT);
 		}
+
+
+
 		// 绘制按钮
 		dc->SetPen(wxColour(225, 225, 225));
 		dc->SetBrush(wxColour(225, 225, 225));
@@ -194,6 +204,14 @@
 		cancelBtnRectMap[delegateInfo.id] = wxRect({ startx + line_width - viewBtnRectMap[delegateInfo.id].GetWidth() - btnWidth - padding - (delegateInfo.index % 2 == 0 ? 0 : btnWidth + 5 * DPI / 100), starty, btnWidth, btnHeight });
 		cout << "撤单位置渲染:" << delegateInfo.index << " - " << cancelBtnRectMap[delegateInfo.id].x << ":" << cancelBtnRectMap[delegateInfo.id].y << endl;
 		WidgetsRenderUtil::drawBtn(dc, "撤单", cancelBtnRectMap[delegateInfo.id], *wxWHITE, wxColour(255, 87, 34));
+
+		notBuyBtnRectMap[delegateInfo.id] = wxRect({ cancelBtnRectMap[delegateInfo.id].GetLeft() -btnWidth - padding, cancelBtnRectMap[delegateInfo.id].GetTop(), btnWidth, btnHeight});
+
+
+		WidgetsRenderUtil::drawBtn(dc, "不买", notBuyBtnRectMap[delegateInfo.id], *wxWHITE, wxColour(133, 202, 255));
+
+
+
 	}
 
 	void drawDelegateQueue(wxDC* dc, wxPoint start, int line_width) {
@@ -266,6 +284,7 @@
 		wxRect gridPostion = gridPostionMap[delegateInfo.id];
 		wxRect queueRect = queueRectMap[delegateInfo.id];
 		wxRect	cancelBtnRect = cancelBtnRectMap[delegateInfo.id];
+		wxRect	notBuyBtnRect = notBuyBtnRectMap[delegateInfo.id];
 		wxRect viewBtnRect = viewBtnRectMap[delegateInfo.id];
 
 		cout << "单元位置:" << gridPostion.x << "-" << gridPostion.y << endl;
@@ -285,6 +304,10 @@
 		else if (x >= cancelBtnRect.x && x <= cancelBtnRect.x + cancelBtnRect.GetWidth() && y > cancelBtnRect.y && y <= cancelBtnRect.y + cancelBtnRect.GetHeight()) {
 
 			return CLICK_TYPE_CANCEL_BUY;
+		}
+		else if (x >= notBuyBtnRect.x && x <= notBuyBtnRect.x + notBuyBtnRect.GetWidth() && y > notBuyBtnRect.y && y <= notBuyBtnRect.y + notBuyBtnRect.GetHeight()) {
+
+			return CLICK_TYPE_NOT_BUY;
 		}
 		else if (x >= queueRect.x && x <= queueRect.x + queueRect.GetWidth() && y > queueRect.y && y <= queueRect.y + queueRect.GetHeight()) {
 
@@ -358,6 +381,30 @@
 
 	}
 
+	// 加入黑名单
+	void forbiddenBuy(string code) {
+		try {
+			string results = MyNetworkApi::add_black(code);
+			auto doc = JsonUtil::parseUTF16(results);
+			if (doc.IsObject()) {
+
+				if (doc[L"code"].GetInt() == 0) {
+					showMsg(wxString(delegateInfo.codeName).Append(":加入黑名单成功").ToStdString(), MSG_TYPE_INFO);
+				}
+				else {
+					showMsg(wxString(doc[L"msg"].GetString()).ToStdString(), MSG_TYPE_WARNING);
+				}
+			}
+			else {
+				showMsg("网络请求失败", MSG_TYPE_ERROR);
+			}
+		}
+		catch (wstring st) {
+			showMsg(wxString( st.c_str()).ToStdString(), MSG_TYPE_ERROR);
+		}
+		
+	}
+
 
 	MainFrame* getWindowFrame() {
 		wxWindow* window = this->GetOwner()->GetOwner()->GetParent();
@@ -413,6 +460,10 @@
 			case CLICK_TYPE_CANCEL_BUY:
 
 				cancelOrder(delegateInfo.code.ToStdString());
+				break;
+			case CLICK_TYPE_NOT_BUY:
+				cancelOrder(delegateInfo.code.ToStdString());
+				forbiddenBuy(delegateInfo.code.ToStdString());
 				break;
 			case CLICK_TYPE_VIEW_DETAIL:
 				try {
@@ -522,13 +573,51 @@
 	wxButton* openTradeQueueBtn = new wxButton(panel, wxID_ANY, "查看全部");
 
 
-	avaiableMoneyLabel = new wxStaticText(panel, wxID_ANY, "0.00", wxDefaultPosition, wxSize(80 * DPI / 100, -1));
+	avaiableMoneyLabel = new wxStaticText(panel, wxID_ANY, "0.00", wxDefaultPosition, wxSize(-1, -1));
 
 	wxBoxSizer* topSizer = new wxBoxSizer(wxHORIZONTAL);
-
 	topSizer->Add(msgCtrl, 1, wxEXPAND);
-	topSizer->Add(avaiableMoneyLabel, 0, wxEXPAND | wxALL, 3);
-	topSizer->Add(openTradeQueueBtn, 0);
+
+	currentTime = new wxStaticText(panel, wxID_ANY, "00:00:00", wxDefaultPosition, wxSize(-1, -1));
+	wxButton* repaireBtn = new wxButton(panel, wxID_ANY, "刷新");
+
+	wxBoxSizer* sizer1 = new wxBoxSizer(wxVERTICAL);
+	sizer1->Add(currentTime, 0, wxALL, 1);
+	sizer1->Add(repaireBtn, 0);
+	topSizer->Add(sizer1, 0, wxRIGHT, 2);
+
+	sizer1= new wxBoxSizer(wxVERTICAL);
+	sizer1->Add(avaiableMoneyLabel, 0, wxALL, 1);
+	sizer1->Add(openTradeQueueBtn, 0);
+
+	topSizer->Add(sizer1);
+
+	wxButton*  openTradeQueue = new wxButton(panel, wxID_ANY, "打开队列");
+	openTradeQueue->Bind(wxEVT_BUTTON, [this](wxCommandEvent& event) {
+		wxTextEntryDialog dialog(this, "股票代码", "请输入股票代码", "");
+
+		if (dialog.ShowModal() == wxID_OK) {
+			wxString input = dialog.GetValue();
+			if (input.Length() != 6) {
+				wxMessageBox("代码输入错误");
+				return;
+			}
+			WindowPosSize r = MyConfigUtil::getTradeQueueWindowPos();
+			if (r.x == -1 && r.y == -1) {
+				r.x = 0;
+				r.y = 0;
+				r.width = 400;
+				r.height = 400;
+			}
+	
+			TradeQueueFrame* tradeQueueFrame = new TradeQueueFrame(input.ToStdString(), input.ToStdString(), wxPoint(r.x, r.y), wxSize(r.width, r.height));
+			tradeQueueFrame->Show(true);
+		}
+
+	});
+
+	topSizer->Add(openTradeQueue, 0, wxALIGN_BOTTOM|wxLEFT, 2);
+
 
 
 	sizer->Add(topSizer, 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, 5);
@@ -537,6 +626,16 @@
 
 
 	openTradeQueueBtn->Bind(wxEVT_BUTTON, &MainFrame::OnButtonOpenTradeQueueClick, this);
+	repaireBtn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& event) {
+		string nowTime = TimeUtil::format(TimeUtil::getNowTimeStamp(),"%H:%M:%S");
+		wxString updateTime = currentTime->GetLabelText().ToStdString();
+		// 将时间转为s
+		if (TimeUtil::timeStr2Seconds(nowTime) - TimeUtil::timeStr2Seconds(updateTime.ToStdString()) > 10||true) {
+	        // 大于10s
+			std::thread t1(startRequestDelegatedInfoListTask, this);
+			t1.detach();
+		}
+	});
 
 
 	std::thread t1(startRequestDelegatedInfoListTask, this);
@@ -586,7 +685,7 @@
 
 void MainFrame::refresh()
 {
-	cout << "刷新时间:" << TimeUtil::getNowTimeStamp() << " 数量:" << delegateList.size() << endl;
+	//cout << "刷新时间:" << TimeUtil::getNowTimeStamp() << " 数量:" << delegateList.size() << endl;
 	m_listCtrl->DeleteAllItems();
 	for (list<DelegateInfo>::iterator e = delegateList.begin(); e != delegateList.end(); ++e) {
 		DelegateInfo info = *e;
@@ -654,6 +753,9 @@
 			if (doc.HasMember(L"zyltgb"))
 				delegateInfo.zyltgb = doc[L"zyltgb"].GetString();
 
+			if (doc.HasMember(L"mode"))
+				delegateInfo.mode = doc[L"mode"].GetInt();
+
 			fresults.push_back(delegateInfo);
 		}
 	}
@@ -706,10 +808,11 @@
 		start_time = TimeUtil::getNowTimeStamp();
 		// 根据ID
 		if (this != nullptr) {
+			this->currentTime->SetLabelText(TimeUtil::format(TimeUtil::getNowTimeStamp(),"%H:%M:%S"));
 			this->delegateList = delegateResult.delegates;
 			this->avaiableMoneyLabel->SetLabelText(delegateResult.money);
 			this->refresh();
-			cout << "刷新UI耗时:" << TimeUtil::getNowTimeStamp() - start_time << endl;
+			//cout << "刷新UI耗时:" << TimeUtil::getNowTimeStamp() - start_time << endl;
 		}
 	}
 	catch (string st) {

--
Gitblit v1.8.0