From 8d492d8d449d6aaff1825a99055298682ebf71b7 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期二, 02 九月 2025 09:55:49 +0800
Subject: [PATCH] 1. 配方数据库管理表里面添加ID(下发JobDataS) 2. 如果任务没有创建,那么配方是当前选择的(不是默认第一个)
---
SourceCode/Bond/Servo/PortConfigurationDlg.cpp | 29 ++++++++++----
SourceCode/Bond/Servo/RecipeManager.cpp | 41 ++++++++++++++++++++
SourceCode/Bond/Servo/RecipeManager.h | 6 +++
3 files changed, 67 insertions(+), 9 deletions(-)
diff --git a/SourceCode/Bond/Servo/PortConfigurationDlg.cpp b/SourceCode/Bond/Servo/PortConfigurationDlg.cpp
index aa7179c..62ad3a0 100644
--- a/SourceCode/Bond/Servo/PortConfigurationDlg.cpp
+++ b/SourceCode/Bond/Servo/PortConfigurationDlg.cpp
@@ -11,8 +11,6 @@
#include "RecipeManager.h"
#include "ServoCommo.h"
-
-
#define CHECKBOX_ALL_ID 0x1234
// CPortConfigurationDlg 瀵硅瘽妗�
@@ -102,11 +100,26 @@
// 鍥炲~ Job 淇℃伅锛堝彧鍙栫涓�涓湁鏁� Glass锛�
if (!bJobInfoSet && pGlass) {
SERVO::CJobDataS* pJS = pGlass->getJobDataS();
- if (pJS) {
+ if (pJS) {
+ int nRecipeID = pJobDataS->getMasterRecipe();
+ std::string strRecipeName = RecipeManager::getInstance().getPPIDById(nRecipeID);
SetDlgItemText(IDC_EDIT_LOTID, CString(pJS->getLotId().c_str()));
SetDlgItemText(IDC_EDIT_PRODUCTID, CString(pJS->getProductId().c_str()));
SetDlgItemText(IDC_EDIT_OPERATIONID, CString(pJS->getOperationId().c_str()));
m_comboMaterialsType.SetCurSel(pJS->getMaterialsType() - 1);
+
+ if (!strRecipeName.empty()) {
+ CString csRecipeName(strRecipeName.c_str());
+ int nIndex = m_comboRecipe.FindStringExact(-1, csRecipeName);
+ if (nIndex != CB_ERR) {
+ m_comboRecipe.SetCurSel(nIndex);
+ }
+ else {
+ AfxMessageBox(_T("褰撳墠閰嶆柟鍦ㄧ郴缁熶腑涓嶅瓨鍦紝璇烽噸鏂伴�夋嫨锛�"), MB_ICONWARNING);
+ m_comboRecipe.SetCurSel(0);
+ }
+ }
+
bJobInfoSet = true;
}
}
@@ -252,7 +265,6 @@
SetWindowText(_T("Port Configuration"));
}
-
// Porcess Start / Process Cancel 鎸夐挳鐘舵��
GetDlgItem(IDC_BUTTON_PROCESS_START)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_PROCESS_CANCEL)->EnableWindow(FALSE);
@@ -299,6 +311,9 @@
m_comboRecipe.GetLBText(selRecipe, str);
config.strRecipe = CT2A(str.GetString());
}
+ int nRecipeID = RecipeManager::getInstance().getIdByPPID(config.strRecipe);
+ RecipeInfo stRecipeInfo = RecipeManager::getInstance().getRecipeByPPID(config.strRecipe);
+ std::vector<DeviceRecipe> vecRecipeInfo = stRecipeInfo.vecDeviceList;
// 鑾峰彇 Material Type 绱㈠紩锛堢储寮曚粠 0 寮�濮嬶紝瀵瑰簲鏋氫妇浠� 1 寮�濮嬶級
//int selMaterial = m_comboMaterialsType.GetCurSel();
@@ -342,16 +357,14 @@
CGridCellCombo* pCombo = dynamic_cast<CGridCellCombo*>(m_wndGrid.GetCell(i, 2));
ASSERT(pCheck && pCombo);
pGlass->setScheduledForProcessing(pCheck->GetCheck());
- /*pGlass->setType(static_cast<SERVO::MaterialsType>(config.nMaterialType));*/
+ pGlass->setType(static_cast<SERVO::MaterialsType>(nMaterialType));
SERVO::CJobDataS* pJobDataS = pGlass->getJobDataS();
pJobDataS->setLotId(config.strLotID.c_str());
pJobDataS->setProductId(config.strProductID.c_str());
pJobDataS->setOperationId(config.strOperationID.c_str());
pJobDataS->setMaterialsType(nMaterialType);
-
- RecipeInfo stRecipeInfo = RecipeManager::getInstance().getRecipeByPPID(config.strRecipe);
- std::vector<DeviceRecipe> vecRecipeInfo = stRecipeInfo.vecDeviceList;
+ pJobDataS->setMasterRecipe(nRecipeID);
for (const auto& info : vecRecipeInfo) {
const std::string& name = info.strDeviceName;
diff --git a/SourceCode/Bond/Servo/RecipeManager.cpp b/SourceCode/Bond/Servo/RecipeManager.cpp
index 1095038..8cb7a51 100644
--- a/SourceCode/Bond/Servo/RecipeManager.cpp
+++ b/SourceCode/Bond/Servo/RecipeManager.cpp
@@ -43,7 +43,8 @@
const std::string createRecipeTable = R"(
CREATE TABLE IF NOT EXISTS recipes (
- ppid TEXT PRIMARY KEY NOT NULL,
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ ppid TEXT NOT NULL UNIQUE,
description TEXT,
create_time TEXT DEFAULT (datetime('now', 'localtime'))
);
@@ -283,6 +284,44 @@
return vecPPID;
}
+std::string RecipeManager::getPPIDById(int nId) {
+ if (!m_pDB) {
+ return {};
+ }
+
+ std::ostringstream query;
+ query << "SELECT ppid FROM recipes WHERE id = " << nId << ";";
+
+ auto rows = m_pDB->fetchResults(query.str());
+ if (rows.empty() || rows[0].empty()) {
+ return {};
+ }
+
+ return rows[0][0];
+}
+
+int RecipeManager::getIdByPPID(const std::string& ppid) {
+ if (!m_pDB) {
+ return -1;
+ }
+
+ std::ostringstream query;
+ query << "SELECT id FROM recipes WHERE ppid = '" << ppid << "';";
+
+ auto rows = m_pDB->fetchResults(query.str());
+ if (rows.empty() || rows[0].empty()) {
+ return -1;
+ }
+
+ try {
+ return std::stoi(rows[0][0]);
+ }
+ catch (...) {
+ std::cerr << "Invalid id value for PPID: " << ppid << std::endl;
+ return -1;
+ }
+}
+
RecipeInfo RecipeManager::getRecipeByPPID(const std::string& ppid) {
RecipeInfo info;
auto rows = m_pDB->fetchResults("SELECT ppid, description, create_time FROM recipes WHERE ppid = '" + ppid + "';");
diff --git a/SourceCode/Bond/Servo/RecipeManager.h b/SourceCode/Bond/Servo/RecipeManager.h
index 3ada9c2..008a1fd 100644
--- a/SourceCode/Bond/Servo/RecipeManager.h
+++ b/SourceCode/Bond/Servo/RecipeManager.h
@@ -64,6 +64,12 @@
// 获取所有 PPID
std::vector<std::string> getAllPPID() const;
+ // 按 ID 查询 PPID
+ std::string getPPIDById(int nId);
+
+ // 按 PPID 查询 ID
+ int getIdByPPID(const std::string& ppid);
+
// 按 PPID 查询配方
RecipeInfo getRecipeByPPID(const std::string& ppid);
--
Gitblit v1.9.3