LAPTOP-SNT8I5JK\Boounion
2025-09-01 72a8c79352717cf4ef7751f4e0f5d07ee1a65ab6
Merge branch 'liuyang'

# Conflicts:
# SourceCode/Bond/Servo/PortConfigurationDlg.cpp
已修改1个文件
105 ■■■■■ 文件已修改
SourceCode/Bond/Servo/PortConfigurationDlg.cpp 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/PortConfigurationDlg.cpp
@@ -56,6 +56,10 @@
        return;
    }
    CStringArray permissions;
    permissions.Add(_T("G1"));
    permissions.Add(_T("G2"));
    SetDlgItemText(IDC_EDIT_LOTID, "");
    SetDlgItemText(IDC_EDIT_PRODUCTID, "");
    SetDlgItemText(IDC_EDIT_OPERATIONID, "");
@@ -68,11 +72,11 @@
            continue;
        }
        // 设置 Panel ID 和勾选框
        SERVO::CGlass* pGlass = dynamic_cast<SERVO::CGlass*>(pSlot->getContext());
        SERVO::CJobDataS* pJobDataS = pGlass->getJobDataS();
        int nRow = i + 1;
        if (pGlass != nullptr) {
        if (pGlass != nullptr && pJobDataS != nullptr) {
            m_wndGrid.SetItemState(nRow, 0, GVIS_READONLY);
            m_wndGrid.SetItemText(nRow, 0, pSlot->getName().c_str());
            m_wndGrid.SetCellType(nRow, 1, RUNTIME_CLASS(CGridCellCheck));
@@ -80,9 +84,20 @@
            ASSERT(pCheck);
            pCheck->SetCheck(pGlass->isScheduledForProcessing());
            pCheck->SetText(pGlass->getID().c_str());
            if (m_wndGrid.SetCellType(nRow, 2, RUNTIME_CLASS(CGridCellCombo))) {
                CGridCellCombo* pCell = static_cast<CGridCellCombo*>(m_wndGrid.GetCell(nRow, 2));
                pCell->SetOptions(permissions);
                pCell->SetStyle(CBS_DROPDOWNLIST);
                int nMaterialsType = pJobDataS->getMaterialsType() - 1;
                if (nMaterialsType < 0 || nMaterialsType > 2) {
                    nMaterialsType = 0;
                }
                m_wndGrid.SetItemText(nRow, 2, permissions.GetAt(nMaterialsType));
            }
        }
        m_wndGrid.SetItemData(nRow, 0, (LPARAM)pGlass);
        // 回填 Job 信息(只取第一个有效 Glass)
        if (!bJobInfoSet && pGlass) {
@@ -105,7 +120,7 @@
        return;
    }
    const int nCols = 2;
    const int nCols = 3;
    const int nFixRows = 1;
    const int nRows = SLOT_MAX + 1; // 存在表头,所以 +1
@@ -130,6 +145,8 @@
    m_wndGrid.SetItemText(0, nColIdx++, _T("Slot ID"));
    m_wndGrid.SetColumnWidth(nColIdx, 60);
    m_wndGrid.SetItemText(0, nColIdx++, _T("Glass ID"));
    m_wndGrid.SetColumnWidth(nColIdx, 60);
    m_wndGrid.SetItemText(0, nColIdx++, _T("物料类型"));
    // 设置行为样式
@@ -137,7 +154,7 @@
    m_wndGrid.SetFixedColumnSelection(FALSE);
    m_wndGrid.SetEditable(TRUE);
    m_wndGrid.SetRowResize(FALSE);
    m_wndGrid.SetColumnResize(TRUE);
    m_wndGrid.SetColumnResize(FALSE);
    m_wndGrid.SetListMode(TRUE);
    m_wndGrid.EnableSelection(TRUE);
    m_wndGrid.SetSingleRowSelection(TRUE);
@@ -219,7 +236,7 @@
        m_comboMaterialsType.AddString(item);
    }
    m_comboMaterialsType.SetCurSel(0);  // 默认选择第一个物料类型
    m_comboMaterialsType.EnableWindow(FALSE);
    InitGrid();
    LoadPortConfigToUI(m_pPort[0]);     // 默认加载第一个端口的配置
@@ -284,14 +301,14 @@
    }
    // 获取 Material Type 索引(索引从 0 开始,对应枚举从 1 开始)
    int selMaterial = m_comboMaterialsType.GetCurSel();
    if (selMaterial != CB_ERR) {
        config.nMaterialType = selMaterial + 1;
    }
    else {
        AfxMessageBox(_T("Please select a material type!"));
        return;
    }
    //int selMaterial = m_comboMaterialsType.GetCurSel();
    //if (selMaterial != CB_ERR) {
    //    config.nMaterialType = selMaterial + 1;
    //}
    //else {
    //    AfxMessageBox(_T("Please select a material type!"));
    //    return;
    //}
    // 获取 Lot ID / Product ID / Operation ID
    CString strText;
@@ -317,21 +334,21 @@
    }
    // 获取 Grid 表格中 Slot 状态(第1~8行)
    /*
    for (int i = 1; i <= SLOT_MAX; ++i) {
        SERVO::CGlass* pGlass = (SERVO::CGlass*)m_wndGrid.GetItemData(i, 0);
        int nMaterialType = m_wndGrid.GetItemText(i, 2).CompareNoCase("G1") == 0 ? 1 : 2;
        if (pGlass != nullptr) {
            CGridCellCheck* pCheck = dynamic_cast<CGridCellCheck*>(m_wndGrid.GetCell(i, 1));
            ASSERT(pCheck);
            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));
            LOGI("i: %d, nMaterialType:%d", i, config.nMaterialType);
            /*pGlass->setType(static_cast<SERVO::MaterialsType>(config.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(config.nMaterialType);
            pJobDataS->setMaterialsType(nMaterialType);
            RecipeInfo stRecipeInfo = RecipeManager::getInstance().getRecipeByPPID(config.strRecipe);
            std::vector<DeviceRecipe> vecRecipeInfo = stRecipeInfo.vecDeviceList;
@@ -361,56 +378,6 @@
            }
        }
    }
    */
    // 打勾为更新类型,暂时测试使用,原打色为是否加工
    for (int i = 1; i <= SLOT_MAX; ++i) {
        SERVO::CGlass* pGlass = (SERVO::CGlass*)m_wndGrid.GetItemData(i, 0);
        if (pGlass != nullptr) {
            CGridCellCheck* pCheck = dynamic_cast<CGridCellCheck*>(m_wndGrid.GetCell(i, 1));
            ASSERT(pCheck);
            pGlass->setScheduledForProcessing(TRUE);
            if (pCheck->GetCheck()) {
                pGlass->setType(static_cast<SERVO::MaterialsType>(config.nMaterialType));
                LOGI("i: %d, nMaterialType:%d", i, config.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(config.nMaterialType);
                RecipeInfo stRecipeInfo = RecipeManager::getInstance().getRecipeByPPID(config.strRecipe);
                std::vector<DeviceRecipe> vecRecipeInfo = stRecipeInfo.vecDeviceList;
                for (const auto& info : vecRecipeInfo) {
                    const std::string& name = info.strDeviceName;
                    short nRecipeID = (short)info.nRecipeID;
                    if (name == EQ_NAME_EFEM) {
                        pJobDataS->setDeviceRecipeId(0, nRecipeID);
                    }
                    else if (name == EQ_NAME_BONDER1) {
                        pJobDataS->setDeviceRecipeId(1, nRecipeID);
                    }
                    else if (name == EQ_NAME_BONDER2) {
                        pJobDataS->setDeviceRecipeId(2, nRecipeID);
                    }
                    else if (name == EQ_NAME_BAKE_COOLING) {
                        pJobDataS->setDeviceRecipeId(3, nRecipeID);
                    }
                    else if (name == EQ_NAME_VACUUMBAKE) {
                        pJobDataS->setDeviceRecipeId(4, nRecipeID);
                    }
                    else if (name == EQ_NAME_MEASUREMENT) {
                        pJobDataS->setDeviceRecipeId(5, nRecipeID);
                    }
                }
            }
        }
    }
    GetDlgItem(IDC_BUTTON_PROCESS_START)->EnableWindow(TRUE);
    GetDlgItem(IDC_BUTTON_PROCESS_CANCEL)->EnableWindow(TRUE);