| | |
| | | int CEquipment::onReceivedJob(int port, CJobDataS* pJobDataS) |
| | | { |
| | | LOGI("<CEquipment-%s>onReceivedJob.", m_strName.c_str()); |
| | | |
| | | addJobDataS(pJobDataS); |
| | | return 0; |
| | | } |
| | | |
| | |
| | | pStep->addAttributeVector(attrubutes); |
| | | |
| | | |
| | | onReceivedJob(port, &jobDataS); |
| | | onSentOutJob(port, &jobDataS); |
| | | |
| | | return nRet; |
| | | } |
| | |
| | | { |
| | | LOGI("<CEquipment-%s>onSentOutJob.", m_strName.c_str()); |
| | | |
| | | int count = removeJobDataS(pJobDataS->getCassetteSequenceNo(), pJobDataS->getJobSequenceNo()); |
| | | if (count == 1) { |
| | | LOGI("<CEquipment-%s>onSentOutJob,删除数据 %d 条", m_strName.c_str(), count); |
| | | |
| | | // 可以在此更新JobDataS数据了 |
| | | CGlass* pGlass = getGlass(pJobDataS->getGlass1Id().c_str()); |
| | | if (pGlass == nullptr) { |
| | | LOGE("<CEquipment-%s>onSentOutJob,没有找到对应的Glass(CassetteSequenceNo:%d, JobSequenceNo:%d, ID=%s),请检查数据,注意风险。", |
| | | m_strName.c_str(), pJobDataS->getCassetteSequenceNo(), pJobDataS->getJobSequenceNo(), |
| | | pJobDataS->getGlass1Id().c_str()); |
| | | return -1; |
| | | } |
| | | else { |
| | | LOGE("<CEquipment-%s>onSentOutJob,删除数据 %d 条,注意排查风险", m_strName.c_str(), count); |
| | | } |
| | | pGlass->updateJobDataS(pJobDataS); |
| | | |
| | | return 0; |
| | | } |
| | |
| | | LOGI("<CEquipment-%s>onPreStoredJob:port:%d|GlassId:%s", |
| | | m_strName.c_str(), port, pJobDataB->getGlassId().c_str()); |
| | | |
| | | CJobDataS* pJobDataS = getJobDataS(pJobDataB->getCassetteSequenceNo(), pJobDataB->getJobSequenceNo()); |
| | | if (pJobDataS == nullptr) { |
| | | LOGE("<CFliper-%s>onPreFetchedOutJob,找不到对应的JobDataS(CassetteSequenceNo:%d, JobSequenceNo:%d), 注意排查风险!", m_strName.c_str(), |
| | | // 当前要存片,之前肯定有拔片,因此片子在Arm那里 |
| | | CGlass* pGlass = ((CArm*)m_pArm)->getGlassFromSlot(1); |
| | | if (pGlass == nullptr) { |
| | | LOGE("<CFliper-%s>onPreStoredJob,缓存中没有找到对应的Glass(CassetteSequenceNo:%d, JobSequenceNo:%d),请检查数据,注意风险。", m_strName.c_str(), |
| | | pJobDataB->getCassetteSequenceNo(), pJobDataB->getJobSequenceNo()); |
| | | return FALSE; |
| | | } |
| | | |
| | | CJobDataS* pJobDataS = pGlass->getJobDataS(); |
| | | ASSERT(pJobDataS); |
| | | if (!compareJobData(pJobDataB, pJobDataS)) { |
| | | LOGE("<CFliper-%s>onPreFetchedOutJob,JobData数据不匹配(JobDataB(%d, %d),JobDataS(%d, %d)), 注意排查风险!", m_strName.c_str(), |
| | | pJobDataB->getCassetteSequenceNo(), pJobDataB->getJobSequenceNo(), |
| | | pJobDataS->getCassetteSequenceNo(), pJobDataS->getJobSequenceNo()); |
| | | return FALSE; |
| | | } |
| | | |
| | |
| | | short putSlot = 0; |
| | | BOOL bCheck = onPreStoredJob(port, pJobDataB, putSlot); |
| | | if (bCheck) { |
| | | addJobDataB(pJobDataB); |
| | | return storedJob(pJobDataB, putSlot); |
| | | } |
| | | |
| | |
| | | int CEquipment::getIndexerOperationModeBaseValue() |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | int CEquipment::addJobDataB(CJobDataB* pJobDataB) |
| | | { |
| | | // 添加之前先删除旧的,以免数据重复 |
| | | Lock(); |
| | | int count = removeJobDataB(pJobDataB->getCassetteSequenceNo(), pJobDataB->getJobSequenceNo()); |
| | | if (count > 0) { |
| | | LOGE("<CEquipment-%s>addJobDataB,删除重复数据 %d 条,注意排查风险", m_strName.c_str(), count); |
| | | } |
| | | |
| | | m_listJobDataB.push_back(std::move(*pJobDataB)); |
| | | Unlock(); |
| | | |
| | | return (int)m_listJobDataB.size(); |
| | | } |
| | | |
| | | int CEquipment::removeJobDataB(int nCassetteSequenceNo, int nJobSequenceNo) |
| | | { |
| | | int count = 0; |
| | | for (auto it = m_listJobDataB.begin(); it != m_listJobDataB.end(); ) { |
| | | if ((*it).getCassetteSequenceNo() == nCassetteSequenceNo |
| | | && (*it).getJobSequenceNo() == nJobSequenceNo) { |
| | | it = m_listJobDataB.erase(it); |
| | | count++; |
| | | } |
| | | else { |
| | | ++it; |
| | | } |
| | | } |
| | | |
| | | return count; |
| | | } |
| | | |
| | | CJobDataB* CEquipment::getJobDataB(int nCassetteSequenceNo, int nJobSequenceNo) |
| | | { |
| | | for (auto& item : m_listJobDataB) { |
| | | if (item.getCassetteSequenceNo() == nCassetteSequenceNo |
| | | && item.getJobSequenceNo() == nJobSequenceNo) { |
| | | return &item; |
| | | } |
| | | } |
| | | |
| | | return nullptr; |
| | | } |
| | | |
| | | int CEquipment::addJobDataS(CJobDataS* pJobDataS) |
| | | { |
| | | // 添加之前先删除旧的,以免数据重复 |
| | | Lock(); |
| | | int count = removeJobDataS(pJobDataS->getCassetteSequenceNo(), pJobDataS->getJobSequenceNo()); |
| | | if (count > 0) { |
| | | LOGE("<CEquipment-%s>addJobDataS,删除重复数据 %d 条,注意排查风险", m_strName.c_str(), count); |
| | | } |
| | | |
| | | m_listJobDataS.push_back(std::move(*pJobDataS)); |
| | | Unlock(); |
| | | |
| | | return (int)m_listJobDataB.size(); |
| | | } |
| | | |
| | | int CEquipment::removeJobDataS(int nCassetteSequenceNo, int nJobSequenceNo) |
| | | { |
| | | int count = 0; |
| | | Lock(); |
| | | for (auto it = m_listJobDataS.begin(); it != m_listJobDataS.end(); ) { |
| | | if ((*it).getCassetteSequenceNo() == nCassetteSequenceNo |
| | | && (*it).getJobSequenceNo() == nJobSequenceNo) { |
| | | it = m_listJobDataS.erase(it); |
| | | count++; |
| | | } |
| | | else { |
| | | ++it; |
| | | } |
| | | } |
| | | Unlock(); |
| | | |
| | | return count; |
| | | } |
| | | |
| | | CJobDataS* CEquipment::getJobDataS(int nCassetteSequenceNo, int nJobSequenceNo) |
| | | { |
| | | for (auto& item : m_listJobDataS) { |
| | | if (item.getCassetteSequenceNo() == nCassetteSequenceNo |
| | | && item.getJobSequenceNo() == nJobSequenceNo) { |
| | | return &item; |
| | | } |
| | | } |
| | | |
| | | return nullptr; |
| | | } |
| | | |
| | | BOOL CEquipment::compareJobData(CJobDataB* pJobDataB, CJobDataS* pJobDataS) |