ReticleFamilyContextManagerImpl.java

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

import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.beans.BeanUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.framework.utils.lang.math.NumberUtils;
import com.mycim.server.base.manager.NamedObjectManager;
import com.mycim.server.ctx.exec.manager.ReticleFamilyContextManager;
import com.mycim.server.ctx.manager.ContextValueManager;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.prp.ContextValue;
import com.mycim.valueobject.prp.ReticleFamilyContextValue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

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

/**
 * @author Luopeng.Wang
 * @version 6.0.0
 * @date 2019/9/9
 **/

@Service
@Transactional
public class ReticleFamilyContextManagerImpl implements ReticleFamilyContextManager {

    @Autowired
    private ContextValueManager contextValueManager;

    @Autowired
    private NamedObjectManager namedObjectManager;


    @Override
    public ContextValue getReticleFamilyContextValue(Long productRrn, Integer productVersion, Long processRrn,
                                                     Integer processVersion, Long routeRrn, Long operationRrn) {
        ReticleFamilyContextValue reticleFamilyContextValue = buildNewReticleFamilyContextValueForProcess(productRrn,
                                                                                                          productVersion,
                                                                                                          processRrn,
                                                                                                          processVersion,
                                                                                                          routeRrn,
                                                                                                          operationRrn);
        ContextValue contextValue = contextValueManager.getContextValueNoFilter(reticleFamilyContextValue);
        return contextValue;
    }

    @Override
    public long getReticleFamilyRrn(long productRrn, Integer productVersion, long processRrn, int processVersion,
                                    long routeRrn, long operationRrn) {
        long reticleFamliyRrn = 0;
        ContextValue reticleFamilyContextValue = getReticleFamilyContextValue(productRrn, productVersion, processRrn,
                                                                              processVersion, routeRrn, operationRrn);
        if (reticleFamilyContextValue != null && StringUtils.isNotBlank(reticleFamilyContextValue.getResultValue1())) {
            reticleFamliyRrn = NumberUtils.toLong(reticleFamilyContextValue.getResultValue1(), 0);
        }
        return reticleFamliyRrn;
    }

    @Override
    public List<ContextValue> getReticleFamilyContextValueList(long productRrn, Integer productVersion, long processRrn,
                                                               int processVersion) {
        long facilityRrn = LocalContext.getFacilityRrn();
        ReticleFamilyContextValue reticleFamilyContextValue = new ReticleFamilyContextValue();
        reticleFamilyContextValue.setContextRrn(namedObjectManager
                                                        .getNamedObjectRrn(reticleFamilyContextValue.getContextId(),
                                                                           facilityRrn, ObjectList.CONTEXT_KEY));
        reticleFamilyContextValue.setProductRrn(productRrn);
        reticleFamilyContextValue.setProcessRrn(processRrn);
        reticleFamilyContextValue.setProcessVersion(processVersion);

        return contextValueManager.getContextValuesByContextKey(reticleFamilyContextValue);
    }

    @Override
    public List<ContextValue> getReticleFamilyContextValueList(Long processRrn, Integer processVersion) {
        long facilityRrn = LocalContext.getFacilityRrn();
        ReticleFamilyContextValue reticleFamilyContextValue = new ReticleFamilyContextValue();
        reticleFamilyContextValue.setContextRrn(namedObjectManager
                                                        .getNamedObjectRrn(reticleFamilyContextValue.getContextId(),
                                                                           facilityRrn, ObjectList.CONTEXT_KEY));
        reticleFamilyContextValue.setProcessRrn(processRrn);
        reticleFamilyContextValue.setProcessVersion(processVersion);

        return contextValueManager.getContextValuesByContextKey(reticleFamilyContextValue);
    }

    @Override
    public boolean isRequiredReticle(long productRrn, Integer productVersion, long processRrn, int processVersion,
                                     long routeRrn, long operationRrn) {
        ContextValue reticleFamilyContextValue = getReticleFamilyContextValue(productRrn, productVersion, processRrn,
                                                                              processVersion, routeRrn, operationRrn);
        return reticleFamilyContextValue != null &&
                StringUtils.isNotBlank(reticleFamilyContextValue.getResultValue1()) &&
                NumberUtils.toLong(reticleFamilyContextValue.getResultValue1(), 0) > 0;
    }

    @Override
    public Map buildContextValueForReticleFamily(Long facilityRrn, Map contextValueInfo) {

        ReticleFamilyContextValue reticleFamilyContextValue = new ReticleFamilyContextValue();
        BeanUtils.copyMapToBean(reticleFamilyContextValue, contextValueInfo);
        reticleFamilyContextValue.setProductRrn(MapUtils.getLong(contextValueInfo, "productRrn"));
        reticleFamilyContextValue.setProductVersion(MapUtils.getInteger(contextValueInfo, "productVersion"));
        reticleFamilyContextValue.setProcessRrn(MapUtils.getLong(contextValueInfo, "processRrn"));
        reticleFamilyContextValue.setOperationRrn(MapUtils.getLong(contextValueInfo, "operationRrn"));
        reticleFamilyContextValue.setRouteRrn(MapUtils.getLong(contextValueInfo, "routeRrn"));
        reticleFamilyContextValue.setContextRrn(namedObjectManager
                                                        .getNamedObjectRrn(reticleFamilyContextValue.getContextId(),
                                                                           facilityRrn, ObjectList.CONTEXT_KEY));

        // 未按照规则取值,取值不需要seq,置为空,后续需要seq的话,直接释放即可
        reticleFamilyContextValue.setOperationSeq("");
        reticleFamilyContextValue.setRouteSeq("");
        ContextValue contextValue = contextValueManager.getContextValueNoFilter(reticleFamilyContextValue);
        if (contextValue != null) {
            contextValueInfo.put("reticleGroupRrn", contextValue.getResultValue1());
            contextValue = contextValueManager.filterContextValueToId(contextValue);
            contextValueInfo.put("reticleFamilyId", 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;
    }

    public ReticleFamilyContextValue buildNewReticleFamilyContextValue() {
        ReticleFamilyContextValue contextValue = new ReticleFamilyContextValue();
        contextValue.setContextRrn(namedObjectManager.getNamedObjectRrn(contextValue.getContextId(),
                                                                        LocalContext.getFacilityRrn(),
                                                                        ObjectList.CONTEXT_KEY));
        return contextValue;
    }

    private ReticleFamilyContextValue buildNewReticleFamilyContextValueForProcess(Long productRrn,
                                                                                  Integer productVersion,
                                                                                  Long processRrn,
                                                                                  Integer processVersion, Long routeRrn,
                                                                                  Long operationRrn) {
        ReticleFamilyContextValue contextValue = buildNewReticleFamilyContextValue();

        contextValue.setProductRrn(productRrn);
        contextValue.setProductVersion(productVersion);
        contextValue.setProcessRrn(processRrn);
        contextValue.setProcessVersion(processVersion);
        contextValue.setRouteRrn(routeRrn);
        contextValue.setOperationRrn(operationRrn);
        return contextValue;
    }

}