LotAttributeQueryManagerImpl.java

package com.mycim.server.wip.manager.impl;

import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.server.base.manager.NamedObjectManager;
import com.mycim.server.ctx.exec.manager.OperationAttributeSimulateManager;
import com.mycim.server.prp.manager.OperationManager;
import com.mycim.server.system.manager.ReferenceFileManager;
import com.mycim.server.wip.manager.LotAttributeQueryManager;
import com.mycim.valueobject.context.dto.QueryContextValueDTO;
import com.mycim.valueobject.prp.Operation;
import com.mycim.valueobject.prp.OperationDESCContextValue;
import com.mycim.valueobject.prp.ProcessLocationContextValue;
import com.mycim.valueobject.prp.StageContextValue;
import com.mycim.valueobject.wip.Lot;
import com.mycim.valueobject.wip.dto.LotProcessStepDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * This class is only used to query the attribute of the context value
 *
 * @author Qiansheng.Wang
 * @since 2021-05-24
 */
@Service
public class LotAttributeQueryManagerImpl implements LotAttributeQueryManager {

    @Autowired
    NamedObjectManager namedObjectManager;

    @Autowired
    ReferenceFileManager referenceFileManager;

    @Autowired
    OperationAttributeSimulateManager operationAttributeSimulateManager;

    @Autowired
    OperationManager operationManager;

    @Override
    public String getOperationType(Lot lot) {
        OperationDESCContextValue contextValue = operationAttributeSimulateManager
                .simulateOperationDESCContextValue(buildQueryContextValue(lot));
        if (contextValue != null && StringUtils.isNotBlank(contextValue.getOperationType())) {
            return contextValue.getOperationType();
        }

        Operation operation = operationManager.getOperation(lot.getOperationRrn());
        if (operation != null && operation.getInstanceRrn() > 0 && StringUtils.isNotBlank(operation.getObjectType())) {
            return operation.getObjectType();
        }

        return StringUtils.EMPTY;
    }

    @Override
    public String getWorkArea(Lot lot) {
        OperationDESCContextValue contextValue = operationAttributeSimulateManager
                .simulateOperationDESCContextValue(buildQueryContextValue(lot));
        if (contextValue != null && StringUtils.isNotBlank(contextValue.getWorkArea())) {
            return contextValue.getWorkArea();
        }

        Operation operation = operationManager.getOperation(lot.getOperationRrn());
        if (operation != null && operation.getInstanceRrn() > 0 && StringUtils.isNotBlank(operation.getWorkArea())) {
            return operation.getWorkArea();
        }

        return StringUtils.EMPTY;
    }

    @Override
    public String getStageId(Lot lot) {
        StageContextValue contextValue = operationAttributeSimulateManager
                .simulateStageContextValue(buildQueryContextValue(lot));
        if (contextValue != null && StringUtils.isNotBlank(contextValue.getStageId())) {
            return contextValue.getStageId();
        }
        return StringUtils.EMPTY;
    }

    private String getProcessLocation(QueryContextValueDTO queryContextValue) {
        ProcessLocationContextValue contextValue = operationAttributeSimulateManager
                .simulateProcessLocationContextValue(queryContextValue);

        if (contextValue != null && StringUtils.isNotBlank(contextValue.getProcessLocation())) {
            return contextValue.getProcessLocation();
        }

        return StringUtils.EMPTY;
    }

    @Override
    public String getProcessLocation(Lot lot) {
        return getProcessLocation(buildQueryContextValue(lot));
    }

    @Override
    public String getProcessLocation(LotProcessStepDto lotProcessStep) {
        return getProcessLocation(buildQueryContextValue(lotProcessStep));
    }

    private QueryContextValueDTO buildQueryContextValue(LotProcessStepDto lotProcessStep) {
        QueryContextValueDTO queryContextValue = new QueryContextValueDTO();

        queryContextValue.setProductRrn(lotProcessStep.getProductRrn());
        queryContextValue.setProductVersion(lotProcessStep.getProductVersion());
        queryContextValue.setProcessRrn(lotProcessStep.getProcessRrn());
        queryContextValue.setProcessVersion(lotProcessStep.getProcessVersion());
        queryContextValue.setRouteRrn(lotProcessStep.getRouteRrn());
        queryContextValue.setRouteVersion(lotProcessStep.getRouteVersion());
        queryContextValue.setOperationRrn(lotProcessStep.getOperationRrn());

        return queryContextValue;
    }

    private QueryContextValueDTO buildQueryContextValue(Lot lot) {
        QueryContextValueDTO queryContextValue = new QueryContextValueDTO();

        queryContextValue.setFacilityRrn(lot.getFacilityRrn());
        queryContextValue.setLotRrn(lot.getLotRrn());
        queryContextValue.setProductRrn(lot.getProductRrn());
        queryContextValue.setProductVersion(lot.getProductVersion());
        queryContextValue.setProcessRrn(lot.getProcessRrn());
        queryContextValue.setProcessVersion(lot.getProcessVersion());
        queryContextValue.setRouteRrn(lot.getRouteRrn());
        queryContextValue.setRouteVersion(lot.getRouteVersion());
        queryContextValue.setOperationRrn(lot.getOperationRrn());

        return queryContextValue;
    }

}