BorContextValueManagerImpl.java

package com.mycim.server.ctx.exec.manager.impl;

import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.server.base.manager.NamedObjectManager;
import com.mycim.server.ctx.exec.manager.BORContextValueManager;
import com.mycim.server.ctx.manager.ContextValueManager;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.prp.BORContextValue;
import com.mycim.valueobject.prp.ContextValue;
import com.mycim.valueobject.wip.Lot;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.Map;

/**
 * @author Johnson.Wang
 * @version 6.0.0
 * @date 2019/9/27
 **/
@Service
@Transactional
public class BorContextValueManagerImpl implements BORContextValueManager {

    private final NamedObjectManager namedObjectManager;

    private final ContextValueManager contextValueManager;

    public BorContextValueManagerImpl(NamedObjectManager namedObjectManager, ContextValueManager contextValueManager) {
        this.namedObjectManager = namedObjectManager;
        this.contextValueManager = contextValueManager;
    }

    @Override
    public Long getBomRrn(Lot lot) {

        BORContextValue borContextValue = buildNewBorContextValue(lot);

        ContextValue contextValue = contextValueManager.simulateContextValue(borContextValue);

        if (contextValue == null) {
            return null;
        }

        borContextValue.copy(contextValue);

        return borContextValue.getBOMRrn();
    }

    @Override
    public Long getBomRrn(Map lotInfo) {

        BORContextValue borContextValue = buildNewBorContextValue(lotInfo);

        ContextValue contextValue = contextValueManager.simulateContextValue(borContextValue);

        if (contextValue == null) {
            return null;
        }

        borContextValue.copy(contextValue);

        return borContextValue.getBOMRrn();
    }

    @Override
    public Map getBorbyContext(Map tempInfo) {

        Map returnInfo = new HashMap();

        String contextId = "BOR_CONTEXT";
        Long facilityRrn = (Long) tempInfo.get("facilityRrn");
        Long productRrn = (Long) tempInfo.get("productRrn");
        String routeRrn = (String) tempInfo.get("routeRrn");
        Long operationRrn = (Long) tempInfo.get("operationRrn");
        Long technologyRrn = (Long) tempInfo.get("technologyRrn");
        Long lotRrn = (Long) tempInfo.get("lotRrn");

        long facility = 1;

        if (facilityRrn != null) {
            facility = facilityRrn.longValue();
        }

        // Operation, Route ID, Technology ID, Product ID, Lot
        // call prp setup manager's get context value method to retrive recipe string
        ContextValue ctxValue = new ContextValue();

        if ((contextId != null) && (facilityRrn != null)) {
            ctxValue.setContextRrn(
                    namedObjectManager.getNamedObjectRrn(contextId, facilityRrn.longValue(), ObjectList.CONTEXT_KEY));
        }

        if (facilityRrn != null) {
            facility = facilityRrn.longValue();
        }

        if (operationRrn != null) {
            ctxValue.setContextKey1("" + operationRrn);
        }

        if (routeRrn != null) {
            ctxValue.setContextKey2("" + routeRrn);
        }

        if (technologyRrn != null) {
            ctxValue.setContextKey3("" + technologyRrn);
        }

        if (productRrn != null) {
            ctxValue.setContextKey4("" + productRrn);
        }

        if (lotRrn != null) {
            ctxValue.setContextKey5("" + lotRrn);
        }

        ctxValue = contextValueManager.simulateContextValue(ctxValue);

        if (ctxValue != null) {
            returnInfo.put("borRrn", new Long(ctxValue.getResultValue1()));
        }

        return returnInfo;
    }

    private BORContextValue buildNewBorContextValue() {
        BORContextValue contextValue = new BORContextValue();
        contextValue.setContextRrn(namedObjectManager.getNamedObjectRrn(contextValue.getContextId(),
                                                                        LocalContext.getFacilityRrn(),
                                                                        ObjectList.CONTEXT_KEY));
        return contextValue;
    }

    private BORContextValue buildNewBorContextValue(Map lotInfo) {
        BORContextValue borContextValue = buildNewBorContextValue();

        Long productRrn = MapUtils.getLongValue(lotInfo, "productRrn");
        long routeRrn = MapUtils.getLongValue(lotInfo, "routeRrn");
        Long operationRrn = MapUtils.getLongValue(lotInfo, "operationRrn");
        Long technologyRrn = (Long) lotInfo.get("technologyRrn");
        Long lotRrn = (Long) lotInfo.get("lotRrn");

        borContextValue.setProductRrn(productRrn);
        borContextValue.setProcessRrn(routeRrn);
        borContextValue.setRouteRrn(technologyRrn);
        borContextValue.setOperationRrn(operationRrn);
        borContextValue.setLotRrn(lotRrn);

        return borContextValue;
    }

    private BORContextValue buildNewBorContextValue(Lot lot) {
        BORContextValue borContextValue = buildNewBorContextValue();

        borContextValue.setProductRrn(lot.getProductRrn());
        borContextValue.setProcessRrn(lot.getProcessRrn());
        borContextValue.setRouteRrn(lot.getRouteRrn());
        borContextValue.setOperationRrn(lot.getOperationRrn());
        borContextValue.setRecipeRrn(lot.getRecipeLogicalRrn());

        return borContextValue;
    }

}