From 0a0b065a898ea5d87ae82bf39a745e76337fc8f5 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期三, 10 九月 2025 15:19:16 +0800
Subject: [PATCH] 1.一些输出日志信息,更新等级; 2.CPath增加Slot信息; 3.WIP数据显示到列表控件; 4.调整Glass的Path信息文本输出;
---
SourceCode/Bond/Servo/CPageGlassList.cpp | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 117 insertions(+), 1 deletions(-)
diff --git a/SourceCode/Bond/Servo/CPageGlassList.cpp b/SourceCode/Bond/Servo/CPageGlassList.cpp
index b5fb2f8..f858794 100644
--- a/SourceCode/Bond/Servo/CPageGlassList.cpp
+++ b/SourceCode/Bond/Servo/CPageGlassList.cpp
@@ -8,6 +8,7 @@
#include "GlassJson.h"
#include "CServoUtilsTool.h"
#include "ToolUnits.h"
+#include <optional>
#define PAGE_SIZE 10
@@ -207,10 +208,14 @@
void CPageGlassList::UpdatePageData()
{
+ // 濡傛灉涓虹1椤�, 鍙栧嚭缂撳瓨Glass, 绗﹀悎鏉′欢鍒欐樉绀猴紱
+ m_listCtrl.DeleteAllItems();
+ UpdateWipData();
+
+
// 鏌ヨ
auto& db = GlassLogDb::Instance();
auto page = db.queryPaged(m_filters, PAGE_SIZE, PAGE_SIZE * (m_nCurPage - 1));
- m_listCtrl.DeleteAllItems();
for (const auto& r : page.items) {
int index = m_listCtrl.InsertItem(m_listCtrl.GetItemCount(), std::to_string(r.id).c_str());
m_listCtrl.SetItemText(index, 1, std::to_string(r.cassetteSeqNo).c_str());
@@ -224,6 +229,7 @@
m_listCtrl.SetItemText(index, 9, SERVO::CServoUtilsTool::getInspResultText((SERVO::InspResult)r.aoiResult).c_str());
m_listCtrl.SetItemText(index, 10, r.path.c_str());
m_listCtrl.SetItemText(index, 11, r.params.c_str());
+ m_listCtrl.SetItemColor(index, RGB(0, 0, 0), RGB(255, 255, 0));
// 娴嬭瘯鍙嶅簭鍒楀寲
/*
@@ -237,6 +243,42 @@
// 涓婁竴椤� / 涓嬩竴椤�
UpdatePageControls();
+}
+
+void CPageGlassList::UpdateWipData()
+{
+ if (m_nCurPage != 1) return;
+
+ // 鍙栧嚭缂撳瓨Glass, 绗﹀悎鏉′欢鍒欐樉绀猴紱
+ // 浣嗚鍒犻櫎鏃х殑鏁版嵁
+ std::vector<SERVO::CGlass*> wipGlasses;
+ theApp.m_model.m_master.getWipGlasses(wipGlasses);
+ std::vector<SERVO::CGlass*> tempGlasses = wipGlasses;
+ int count = m_listCtrl.GetItemCount();
+ if (count > 0) {
+ for (int i = count - 1; i >= 0; i--) {
+ SERVO::CGlass* pGlass = (SERVO::CGlass*)m_listCtrl.GetItemData(i);
+ if (eraseGlassInVector(pGlass, wipGlasses)
+ && GlassMatchesFilters(*pGlass, m_filters)) {
+ // 鏇存柊
+ UpdateWipRow(i, pGlass);
+ }
+ else {
+ // 鍒犻櫎
+ m_listCtrl.DeleteItem(i);
+ }
+ }
+ }
+
+ // 鍓╀笅鐨勫绗﹀彿鎻掑叆
+ for (auto* item : wipGlasses) {
+ if (GlassMatchesFilters(*item, m_filters)) {
+ InsertWipRow(item);
+ }
+ }
+ for (auto* item : tempGlasses) {
+ item->release();
+ }
}
void CPageGlassList::UpdatePageControls()
@@ -256,6 +298,7 @@
// TODO: 鍦ㄦ娣诲姞棰濆鐨勫垵濮嬪寲
SetTimer(1, 3000, nullptr);
+ SetTimer(2, 2000, nullptr);
// 涓嬫媺妗嗘帶浠�
InitStatusCombo();
@@ -354,6 +397,11 @@
KillTimer(1);
InitRxWindow();
}
+
+ else if (nIDEvent == 2) {
+ UpdateWipData();
+ }
+
CDialogEx::OnTimer(nIDEvent);
}
@@ -464,4 +512,72 @@
m_nCurPage++;
UpdatePageData();
}
+}
+
+// 鏍稿績锛歐IP 鐨� CGlass 鏄惁鍛戒腑褰撳墠 Filters
+// useEndTime=true 鏃剁敤 tEnd 鍒ゆ椂闂达紙姣斿鈥滃畬鎴愬垪琛ㄢ�濈敤 t_end锛夛紝榛樿鎸� tStart銆�
+bool CPageGlassList::GlassMatchesFilters(const SERVO::CGlass& g,
+ const GlassLogDb::Filters& f,
+ bool useEndTime/* = false*/)
+{
+ // 1) 绮剧‘瀛楁
+ if (f.classId && g.getID() != *f.classId) return false;
+ if (f.cassetteSeqNo && g.getCassetteSequenceNo() != *f.cassetteSeqNo)return false;
+ if (f.jobSeqNo && g.getJobSequenceNo() != *f.jobSeqNo) return false;
+
+ // 2) 鍏抽敭瀛楋紙涓� DB 淇濇寔涓�鑷达細class_id / buddy_id / path / params / pretty锛�
+ if (f.keyword) {
+ const std::string& kw = *f.keyword;
+ if (!(CToolUnits::containsCI(g.getID(), kw)
+ || CToolUnits::containsCI(g.getBuddyId(), kw)
+ || CToolUnits::containsCI(g.getPathDescription(), kw)
+ || CToolUnits::containsCI(g.getParamsDescription(), kw)))
+ return false;
+ }
+
+ // 3) 鏃堕棿锛堜笌 DB 淇濇寔涓�鑷达細榛樿鎸� t_start 杩囨护锛涢渶瑕佸彲鍒囧埌 t_end锛�
+ if (f.tStartFrom || f.tStartTo) {
+ std::optional<std::chrono::system_clock::time_point> tp = useEndTime ? g.tEnd() : g.tStart();
+ // 绾﹀畾锛氳嫢娌℃湁瀵瑰簲鏃堕棿鎴筹紝鍒欒涓轰笉鍛戒腑锛堜笌 DB 鐩稿悓锛歂ULL 涓嶄細鍛戒腑鑼冨洿锛�
+ if (!tp) return false;
+ if (f.tStartFrom && *tp < *f.tStartFrom) return false;
+ if (f.tStartTo && *tp > *f.tStartTo) return false;
+ }
+
+ return true;
+}
+
+void CPageGlassList::InsertWipRow(SERVO::CGlass* pGlass)
+{
+ int index = m_listCtrl.InsertItem(0, "");
+ UpdateWipRow(index, pGlass);
+}
+
+void CPageGlassList::UpdateWipRow(unsigned int index, SERVO::CGlass* pGlass)
+{
+ ASSERT(index < m_listCtrl.GetItemCount());
+ m_listCtrl.SetItemData(index, (DWORD_PTR)pGlass);
+ m_listCtrl.SetItemColor(index, RGB(0, 0, 0), RGB(255, 255, 255));
+ m_listCtrl.SetItemText(index, 1, std::to_string(pGlass->getCassetteSequenceNo()).c_str());
+ m_listCtrl.SetItemText(index, 2, std::to_string(pGlass->getJobSequenceNo()).c_str());
+ m_listCtrl.SetItemText(index, 3, pGlass->getID().c_str());
+ m_listCtrl.SetItemText(index, 4, SERVO::CServoUtilsTool::getMaterialsTypeText(pGlass->getType()).c_str());
+ m_listCtrl.SetItemText(index, 5, SERVO::CServoUtilsTool::getGlassStateText(pGlass->state()).c_str());
+ m_listCtrl.SetItemText(index, 6, CToolUnits::TimePointToLocalString(pGlass->tStart()).c_str());
+ m_listCtrl.SetItemText(index, 7, CToolUnits::TimePointToLocalString(pGlass->tEnd()).c_str());
+ m_listCtrl.SetItemText(index, 8, pGlass->getBuddyId().c_str());
+ m_listCtrl.SetItemText(index, 9, SERVO::CServoUtilsTool::getInspResultText((SERVO::InspResult)pGlass->getAOIInspResult()).c_str());
+ m_listCtrl.SetItemText(index, 10, pGlass->getPathDescription().c_str());
+ m_listCtrl.SetItemText(index, 11, pGlass->getParamsDescription().c_str());
+}
+
+bool CPageGlassList::eraseGlassInVector(SERVO::CGlass* pGlass, std::vector<SERVO::CGlass*>& glasses)
+{
+ auto iter = std::find(glasses.begin(), glasses.end(), pGlass);
+ if (iter != glasses.end()) {
+ glasses.erase(iter);
+ return true;
+ }
+
+ return false;
}
\ No newline at end of file
--
Gitblit v1.9.3