# EenActionQueryManagerImpl.java

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

    import com.mycim.framework.utils.lang.StringUtils;
    import com.mycim.framework.utils.lang.collections.CollectionUtils;
    import com.mycim.server.base.manager.NamedObjectManager;
    import com.mycim.server.ctx.exec.manager.EenLotContextValueManager;
    import com.mycim.server.ctx.manager.ContextValueManager;
    import com.mycim.server.wip.dao.EenActionQueryDAO;
    import com.mycim.server.wip.manager.EenActionQueryManager;
    import com.mycim.server.wip.manager.LotQueryManager;
    import com.mycim.valueobject.alm.EenAction;
    import com.mycim.valueobject.consts.EenActionType;
    import com.mycim.valueobject.prp.ContextValue;
    import com.mycim.valueobject.wip.Lot;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;

    import java.util.ArrayList;
    import java.util.List;

    /**
     * @author Johnson.Wang
     * @version 6.0.0
     * @date 2019/10/8
     **/
    @Service
    @Transactional
    public class EenActionQueryManagerImpl implements EenActionQueryManager {

        @Autowired
        private EenActionQueryDAO eenActionQueryDAO;

        @Autowired
        private LotQueryManager lotQueryManager;

        @Autowired
        private NamedObjectManager namedObjectManager;

        @Autowired
        private EenLotContextValueManager eenLotContextValueManager;

        @Autowired
        private ContextValueManager contextValueManager;

        @Override
        public List<EenAction> getEenActionsWithMerged(long actionRrn) {
            return eenActionQueryDAO.getEenActionsWithMerged(actionRrn);
        }

        @Override
        public List<EenAction> getFutureActions(Lot lot, String actionPoint) {
            List<Long> actionRrns = eenLotContextValueManager.getFutureActionRrns(lot, actionPoint);

            if (CollectionUtils.isEmpty(actionRrns)) {
                return null;
            }

            List<EenAction> eenActionList = new ArrayList<>();
            for (Long actionRrn : actionRrns) {
                eenActionList.addAll(getEenActions(actionRrn));
            }

            return eenActionList;
        }

        @Override
        public EenAction getEenAction(EenAction eenAction) {
            return eenActionQueryDAO.getEenAction(eenAction);
        }

        @Override
        public List<EenAction> getEenActions(long actionRrn) {
            List<EenAction> eenActionList = eenActionQueryDAO.getEenActions(actionRrn);
            if (CollectionUtils.isEmpty(eenActionList)) {
                return null;
            }

            for (EenAction action : eenActionList) {
                if (action.getActionType().equals(EenActionType.HOLD_LOT_KEY)) {

                    if (StringUtils.isNotEmpty(action.getParameterValue1())) {
                        action.setParameterValue1Id(lotQueryManager.getLotId(Long.parseLong(action.getParameterValue1())));
                    }
                } else if (action.getActionType().equals(EenActionType.SPLIT_LOT_KEY)) {

                    if (StringUtils.isNotEmpty(action.getParameterValue1())) {
                        action.setParameterValue1Id(lotQueryManager.getLotId(Long.parseLong(action.getParameterValue1())));
                    }
                } else {

                    action.setParameterValue1Id(
                            namedObjectManager.getNamedObjectId(Long.valueOf(action.getParameterValue1())));

                    action.setParameterValue2Id(
                            namedObjectManager.getNamedObjectId(Long.parseLong(action.getParameterValue2())));
                }
            }

            return eenActionList;
        }

        @Override
        public List<EenAction> getFutureActions(ContextValue contextValue, long facilityRrn) {
            List actions = new ArrayList();
            List<ContextValue> contextValues = new ArrayList();
            contextValue = contextValueManager.filterContextValueToRrn(contextValue, facilityRrn);
            if (contextValue == null) {
                return actions;
            }
            contextValues = contextValueManager.simulateContextValues(contextValue);

            ContextValue item = null;

            for (ContextValue contextValue1 : contextValues) {
                if (contextValue1.getResultValue1() != null) {
                    actions.addAll(getEenActions(new Long(item.getResultValue1()).longValue()));
                }
            }
            return actions;
        }

    }