LotAutoMonitorInqManagerImpl.java

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

import com.mycim.framework.jdbc.Page;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.math.NumberUtils;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.server.automonitor.dao.LotAutoMonitorInqDao;
import com.mycim.server.automonitor.manager.AutoMonitorItemInqManager;
import com.mycim.server.automonitor.manager.LotAutoMonitorInqManager;
import com.mycim.server.ems.manager.EquipmentManager;
import com.mycim.valueobject.automonitor.dto.LotAutoMonitorQueryDTO;
import com.mycim.valueobject.automonitor.dto.MonitorJobQueryDTO;
import com.mycim.valueobject.automonitor.entity.*;
import com.mycim.valueobject.automonitor.util.AutoMonitorOperationConstants;
import com.mycim.valueobject.automonitor.util.AutoMonitorUtils;
import com.mycim.valueobject.ems.Equipment;
import com.mycim.valueobject.wip.EquipmentRunHistory;
import com.mycim.valueobject.wip.Lot;
import com.mycim.valueobject.wip.LotStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;

/**
 * @author finatice.yang
 * @date 2021/8/31
 **/
@Service
public class LotAutoMonitorInqManagerImpl implements LotAutoMonitorInqManager {

    @Autowired
    LotAutoMonitorInqDao lotAutoMonitorInqDao;

    @Autowired
    AutoMonitorItemInqManager itemInqManager;

    @Autowired
    EquipmentManager equipmentManager;

    @Override
    public Lot fillLotAutoMonitorSpec(Lot lot) {
        LotMonitorJobStore lotStore =  getLotMonitorJobStore(lot.getLotRrn());

        if(Objects.isNull(lotStore)) {
            return lot;
        }

        Long workflowRrn = lotStore.getWorkflowRrn();
        Integer verison = lotStore.getWorkflowVersion();
        Long operationRrn = lot.getOperationRrn();

        Long equipmentRrn = lotStore.getEqptRrn();
        Equipment equipment = equipmentManager.getEquipment(equipmentRrn);

        AutoMonitorItemStep stepInfo = itemInqManager.getAutoMonitorItemStep(workflowRrn, verison, operationRrn);
        if (Objects.nonNull(stepInfo)) {
            lot.setStepType(stepInfo.getEqptType());
            lot.setOperationDesc(stepInfo.getOperationDesc());
            lot.setWorkArea(equipment.getEquipmentLocation());

            lot.setRecipeId(stepInfo.getRecipeId());

            if (!LotStatus.isAutoMonitorMerge(lot.getLotStatus())) {
                lot.setFlowSeq(stepInfo.getFlowSeq());
                lot.setStageId(stepInfo.getStageId());
            }
        }

        return lot;
    }

    @Override
    public boolean checkLotIsAutoMonitorLot(Long lotRrn) {
        return lotAutoMonitorInqDao.checkLotIsAutoMonitorLot(lotRrn);
    }

    @Override
    public boolean checkLotInAutoMonitorBaseLot(Long lotRrn) {
        return lotAutoMonitorInqDao.checkLotInAutoMonitorBaseLot(lotRrn);
    }

    @Override
    public List<MonitorCarrierMapping> getMonitorCarrierMappings(Long monitorCarrierRrn) {
        return lotAutoMonitorInqDao.getMonitorCarrierMappings(monitorCarrierRrn);
    }

    @Override
    public LotMonitorJobStore getLotMonitorJobStore(Long lotRrn) {
        return lotAutoMonitorInqDao.getLotMonitorJobStore(lotRrn);
    }

    @Override
    public Page getMonitorJobListPage(Page page, MonitorJobQueryDTO queryDTO) {
        return lotAutoMonitorInqDao.getMonitorJobListPage(page, queryDTO);
    }

    @Override
    public LotAutoMonitorInfo getLotActiveAutoMonitorInfo(Long lotRrn) {
        return lotAutoMonitorInqDao.getLotActiveAutoMonitorInfo(lotRrn);
    }

    @Override
    public LotAutoMonitorInfo getLotAutoMonitorInfo(Long lotRrn) {
        return lotAutoMonitorInqDao.getLotAutoMonitorInfo(lotRrn);
    }

    @Override
    public Page getLotMonitorLotPage(Page page, LotAutoMonitorQueryDTO queryDTO) {
        return lotAutoMonitorInqDao.getLotMonitorLotPage(page, queryDTO);
    }

    @Override
    public List<LotAutoMonitorInfo> getLotMonitorLotList(LotAutoMonitorQueryDTO queryDTO) {
        return lotAutoMonitorInqDao.getLotMonitorLotList(queryDTO);
    }

    @Override
    public boolean checkAutoMonitorLotCanCreateSortJob(LotAutoMonitorInfo lotAutoMonitorInfo) {
        if (Objects.isNull(lotAutoMonitorInfo)) {
            return false;
        }
        if(LotStatus.isAutoMonitorMerge(lotAutoMonitorInfo.getLotStatus())) {
            return false;
        }
        if (Objects.nonNull(lotAutoMonitorInfo.getMonitorCarrierRrn()) &&
                lotAutoMonitorInfo.getCarrierRrn().longValue()==lotAutoMonitorInfo.getMonitorCarrierRrn().longValue()) {
            return false;
        }
        if (lotAutoMonitorInfo.getStartSplitFlag() &&
                lotAutoMonitorInfo.getWorkflowStepSequence().longValue() == NumberUtils.LONG_ONE.longValue()) {
            return true;
        } else if (!lotAutoMonitorInfo.getStartSplitFlag() &&
                StringUtils.equals(lotAutoMonitorInfo.getEqptType(), AutoMonitorOperationConstants.STEP_TYPE_MAIN) &&
                lotAutoMonitorInfo.getMonitorCarrierRrn() != null &&
                lotAutoMonitorInfo.getMonitorCarrierRrn().longValue() > 0) {
            return true;
        }
        return false;
    }

    @Override
    public List<LotMonitorJobStepEdcInfo> getStepEdcInfoList(Long transRrn) {
        return lotAutoMonitorInqDao.getStepEdcInfoList(transRrn);
    }

    @Override
    public Boolean checkAutomonitorLotNeedSkipEdc(Long lotRrn, Long stepSequence) {
        Integer count = lotAutoMonitorInqDao.getLotStepEdcCount(lotRrn, stepSequence);
        if (Objects.nonNull(count) && count.intValue() > 0) {
            return Boolean.TRUE;
        }

        return Boolean.FALSE;
    }

    @Override
    public List<String> getFinishLotIdList(Long baseLotRrn) {
        return lotAutoMonitorInqDao.getFinishLotIdList(baseLotRrn);
    }

    @Override
    public List<AutoMonitorUnitInfo> getAutoMonitorUnitInfoList(Long lotRrn) {
        return lotAutoMonitorInqDao.getAutoMonitorUnitInfoList(lotRrn);
    }

    @Override
    public Page getAutoMonitorJobHistoryPage(Page page, MonitorJobQueryDTO queryDTO) {
        return lotAutoMonitorInqDao.getAutoMonitorJobHistoryPage(page, queryDTO);
    }
}