1. 配方数据库管理表里面添加ID(下发JobDataS)
2. 如果任务没有创建,那么配方是当前选择的(不是默认第一个)
已修改3个文件
76 ■■■■ 文件已修改
SourceCode/Bond/Servo/PortConfigurationDlg.cpp 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/RecipeManager.cpp 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/RecipeManager.h 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
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 + "';");
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);