StageContextValueManagerImpl.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.StageContextValueManager;
import com.mycim.server.ctx.manager.ContextValueManager;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.prp.ContextValue;
import com.mycim.valueobject.prp.StageContextValue;
import com.mycim.valueobject.wip.Lot;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * @author shijie.deng
 * @version 6.0.0
 * @date 2019/9/1
 **/
@Service
@Transactional
public class StageContextValueManagerImpl implements StageContextValueManager {

    private final ContextValueManager contextValueManager;

    private final NamedObjectManager namedObjectManager;

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

    @Override
    public String getStage(Long productRrn, Long processRrn, Integer processVersion, Long routeRrn, Long operationRrn) {
        StageContextValue stageContextValue = buildNewStageContextValue(productRrn, processRrn, processVersion,
                                                                        routeRrn, operationRrn);
        ContextValue contextValueNoFilter = contextValueManager.getContextValueNoFilter(stageContextValue);
        if (contextValueNoFilter != null) {
            return contextValueNoFilter.getResultValue1();
        }
        return null;
    }

    @Override
    public ContextValue getStageContextValue(Long productRrn, Long processRrn, Integer processVersion, Long routeRrn,
                                             Long operationRrn) {
        StageContextValue stageContextValue = buildNewStageContextValue(productRrn, processRrn, processVersion,
                                                                        routeRrn, operationRrn);
        ContextValue contextValue = contextValueManager.getContextValueNoFilter(stageContextValue);
        return contextValue;
    }

    @Override
    public String getStageIdByContext(Lot lot, Long facilityRrn) {
        StageContextValue stageContextValue = new StageContextValue();

        stageContextValue.setProductRrn(lot.getProductRrn());
        stageContextValue.setProcessRrn(lot.getProcessRrn());
        stageContextValue.setProcessVersion(lot.getProcessVersion());
        stageContextValue.setRouteRrn(lot.getRouteRrn());
        stageContextValue.setRouteSeq(lot.getRouteSeq());
        stageContextValue.setOperationRrn(lot.getOperationRrn());
        stageContextValue.setOperationSeq(lot.getOperationSeq());
        stageContextValue.setContextRrn(namedObjectManager.getNamedObjectRrn(stageContextValue.getContextId(),
                                                                             namedObjectManager
                                                                                     .getNamedSpace(facilityRrn,
                                                                                                    ObjectList.CONTEXT_KEY),
                                                                             ObjectList.CONTEXT_KEY));
        ContextValue contextValue = contextValueManager.simulateContextValue(stageContextValue);

        return contextValue == null ? "" : contextValue.getResultValue1();
    }

    @Override
    public List<ContextValue> getStageContextValueList(long productRrn, long processRrn, int processVersion) {
        long facilityRrn = LocalContext.getFacilityRrn();
        StageContextValue stageContextValue = new StageContextValue();
        stageContextValue.setContextRrn(namedObjectManager
                                                .getNamedObjectRrn(stageContextValue.getContextId(), facilityRrn,
                                                                   ObjectList.CONTEXT_KEY));
        stageContextValue.setProductRrn(productRrn);
        stageContextValue.setProcessRrn(processRrn);
        stageContextValue.setProcessVersion(processVersion);
        return contextValueManager.getContextValuesByContextKey(stageContextValue);
    }

    @Override
    public String getStageId(Lot lot) {
        StageContextValue stageContextValue = buildNewStageContextValue(lot);
        ContextValue contextValue = contextValueManager.simulateContextValue(stageContextValue);
        if (contextValue == null) {
            return null;
        }
        return contextValue.getResultValue1();
    }

    @Override
    public Map buildContextValueForStage(Long facilityRrn, Map contextValueInfo) {
        StageContextValue stageContextValue = new StageContextValue();
        stageContextValue.setProductRrn(MapUtils.getLong(contextValueInfo, "productRrn"));
        stageContextValue.setProcessRrn(MapUtils.getLong(contextValueInfo, "processRrn"));
        stageContextValue.setOperationRrn(MapUtils.getLong(contextValueInfo, "operationRrn"));
        stageContextValue.setRouteRrn(MapUtils.getLong(contextValueInfo, "routeRrn"));
        stageContextValue.setProcessVersion(MapUtils.getIntValue(contextValueInfo, "processVersion"));
        stageContextValue.setContextRrn(namedObjectManager.getNamedObjectRrn(stageContextValue.getContextId(),
                                                                             namedObjectManager
                                                                                     .getNamedSpace(facilityRrn,
                                                                                                    ObjectList.CONTEXT_KEY),
                                                                             ObjectList.CONTEXT_KEY));
        //未按照规则取值,取值不需要seq,置为空,后续需要seq的话,直接释放即可
        // stageContextValue.setOperationSeq("");
        // stageContextValue.setRouteSeq("");
        ContextValue contextValue = contextValueManager.getContextValueNoFilter(stageContextValue);
        if (contextValue != null) {
            // contextValue = this.getPrpManager().FilterContextValueToId(contextValue);
            contextValueInfo.put("stageId", contextValue.getResultValue1());
            contextValueInfo.put("activeStageId", contextValue.getResultValue1());
            if (contextValue.getEcnRrn() != null && contextValue.getEcnRrn() > 0) {
                contextValueInfo.put("ecnRrn", contextValue.getEcnRrn());
                contextValueInfo.put("status", contextValue.getStatus());
                contextValueInfo.put("effectiveDateFrom", contextValue.getEffectiveDateFrom());
                contextValueInfo.put("effectiveDateTo", contextValue.getEffectiveDateTo());
            }
        }

        return contextValueInfo;
    }

    private StageContextValue buildNewStageContextValue(Lot lot) {
        StageContextValue stageContextValue = new StageContextValue();

        stageContextValue.setContextRrn(namedObjectManager.getNamedObjectRrn(stageContextValue.getContextId(),
                                                                             LocalContext.getFacilityRrn(),
                                                                             ObjectList.CONTEXT_KEY));
        stageContextValue.setProductRrn(lot.getProductRrn());
        stageContextValue.setProcessRrn(lot.getProcessRrn());
        stageContextValue.setProcessVersion(lot.getProcessVersion());
        stageContextValue.setRouteRrn(lot.getRouteRrn());
        stageContextValue.setRouteSeq(lot.getRouteSeq());
        stageContextValue.setOperationRrn(lot.getOperationRrn());
        stageContextValue.setOperationSeq(lot.getOperationSeq());

        return stageContextValue;
    }

    private StageContextValue buildNewStageContextValue(Long productRrn, Long processRrn, Integer processVersion,
                                                        Long routeRrn, Long operationRrn) {
        StageContextValue stageContextValue = new StageContextValue();

        stageContextValue.setContextRrn(namedObjectManager.getNamedObjectRrn(stageContextValue.getContextId(),
                                                                             LocalContext.getFacilityRrn(),
                                                                             ObjectList.CONTEXT_KEY));
        stageContextValue.setProductRrn(productRrn);
        stageContextValue.setProcessRrn(processRrn);
        stageContextValue.setRouteRrn(routeRrn);
        stageContextValue.setOperationRrn(operationRrn);
        stageContextValue.setProcessVersion(processVersion);

        return stageContextValue;
    }

}