# LotSpecialEquipContextValueManagerImpl.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.server.base.manager.NamedObjectManager;
    import com.mycim.server.ctx.exec.manager.LotSpecialEquipContextValueManager;
    import com.mycim.server.ctx.manager.ContextValueManager;
    import com.mycim.valueobject.ObjectList;
    import com.mycim.valueobject.prp.ContextValue;
    import com.mycim.valueobject.prp.LotSpecialEquipContextValue;
    import com.mycim.valueobject.wip.Lot;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;

    /**
     * @author shijie.deng
     * @version 6.0.0
     * @date 2019/9/20
     **/
    @Service
    @Transactional
    public class LotSpecialEquipContextValueManagerImpl implements LotSpecialEquipContextValueManager {

        @Autowired
        private ContextValueManager contextValueManager;

        @Autowired
        private NamedObjectManager namedObjectManager;

        @Override
        public LotSpecialEquipContextValue getLotSpecialEquipContextValue(Lot lot) {
            long facilityRrn = LocalContext.getFacilityRrn();
            LotSpecialEquipContextValue specialEquipContextValue = new LotSpecialEquipContextValue();
            long contextRrn = namedObjectManager
                    .getNamedObjectRrn(specialEquipContextValue.getContextId(), facilityRrn, ObjectList.CONTEXT_KEY);
            if (contextRrn > 0) {
                specialEquipContextValue.setContextRrn(contextRrn);
                specialEquipContextValue.setProductRrn(lot.getProductRrn());
                specialEquipContextValue.setProcessRrn(lot.getProcessRrn());
                specialEquipContextValue.setRouteRrn(lot.getRouteRrn());
                specialEquipContextValue.setOperationRrn(lot.getOperationRrn());
                specialEquipContextValue.setLotRrn(new Long(lot.getLotRrn()));
                specialEquipContextValue.setRouteSeq(lot.getRouteSeq());
                specialEquipContextValue.setOperationSeq(lot.getOperationSeq());
                ContextValue contextValue = contextValueManager.simulateContextValue(specialEquipContextValue);
                if (contextValue != null) {
                    BeanUtils.copyProperties(contextValue, specialEquipContextValue);
                }
            }
            return specialEquipContextValue;
        }

        @Override
        public boolean isOverrideConstrain(Lot lot) {
            boolean overrideConstrain = false;
            LotSpecialEquipContextValue contextValue = getLotSpecialEquipContextValue(lot);
            if (contextValue != null && StringUtils.isNotEmpty(contextValue.getResultValue2()) &&
                    StringUtils.equalsIgnoreCase(contextValue.getResultValue2(), "1")) {
                overrideConstrain = true;
            }

            return overrideConstrain;
        }

    }