OCAPRule.java

package com.mycim.valueobject.edcspc.rule;

import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.valueobject.edcspc.DataCollectionRule;
import com.mycim.valueobject.wip.Unit;

import java.util.List;

/**
 * Data Collection Rule For OCAP
 *
 * @author Qiansheng.Wang
 * @since 2020-03-04
 */
public class OCAPRule extends CollectionRuleAbstract implements CollectionRule {

    protected OCAPRule(DataCollectionRule dataCollectionRule, List<Unit> unitList) {
        super(dataCollectionRule, unitList);
    }

    @Override
    public Boolean isAvailableDataCollectionRule() {
        int sampleSize = getWaferSamples().length;
        int specialSampleSize = getSpecialSampleSize();
        if (isNotAvailable(sampleSize, specialSampleSize)) {
            return false;
        }

        for (int i = 0; i < sampleSize; i++) {
            String sample = getWaferSamples()[i];

            setAndCheckAvailableUnit(sample);
        }

        return checkResult(sampleSize);
    }

    @Override
    protected void setAndCheckAvailableUnit(String sample) {
        addToResultForNormalIndex(sample);
    }

    @Override
    protected void addToResultForNormalIndex(String sample) {
        for (Unit unit : getUnitList()) {
            if (StringUtils.contains(unit.getUnitId(), sample)) {
                addToResult(StringUtils.toString(unit.getPositionInCarrier()), unit.getUnitId());
                break;
            }
        }
    }

    /**
     * 检查结果是否正确。<br>
     * OCAP 规则,匹配数量等于选片数量。<br>
     *
     * @param sampleSize
     * @return
     */
    @Override
    protected Boolean checkResult(int sampleSize) {
        setAvailableSample(getSelectedUnitIdList().size());

        return getAvailableSample() == sampleSize;
    }

}