DiffBatchQueryManagerImpl.java

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

import com.mycim.framework.jdbc.Page;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.framework.utils.lang.math.NumberUtils;
import com.mycim.framework.utils.lang.time.DateUtils;
import com.mycim.server.automonitor.manager.LotAutoMonitorInqManager;
import com.mycim.server.wip.dao.DiffBatchQueryDAO;
import com.mycim.server.wip.manager.DiffBatchQueryManager;
import com.mycim.server.wip.manager.LotInqManager;
import com.mycim.server.wip.manager.LotQueryManager;
import com.mycim.server.wip.manager.job.EquipmentCheckManager;
import com.mycim.valueobject.ems.Equipment;
import com.mycim.valueobject.wip.BatchLotStore;
import com.mycim.valueobject.wip.EqpRcpDiffBatchSetupInfo;
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;
import java.util.Map;
import java.util.Objects;

/**
 * @author finatice.yang
 * @date 2021/6/30
 **/
@Service
@Transactional
public class DiffBatchQueryManagerImpl implements DiffBatchQueryManager {

    @Autowired
    DiffBatchQueryDAO diffBatchQueryDAO;

    @Autowired
    LotInqManager lotInqManager;

    @Autowired
    LotAutoMonitorInqManager lotAutoMonitorInqManager;

    @Autowired
    EquipmentCheckManager equipmentCheckManager;

    @Override
    public List<BatchLotStore> getBatchStoreListByLot(Long lotRrn) {
        List<BatchLotStore> batchList = new ArrayList<BatchLotStore>();
        BatchLotStore store = diffBatchQueryDAO.getBatchLotStoreByToRrn(lotRrn);
        if (store != null) {
            batchList = diffBatchQueryDAO.getBatchLotStore(store.getBatchId());
        } else {
            batchList = diffBatchQueryDAO.getBatchLotStore(lotRrn);
        }
        return batchList;
    }

    @Override
    public List<BatchLotStore> getBatchStoreListByBatchId(String batchId) {
        return diffBatchQueryDAO.getBatchLotStore(batchId);
    }

    @Override
    public List<Lot> getBatchLotList(Long lotRrn) {
        List<Lot> lotList = new ArrayList<>();

        List<BatchLotStore> batchLotStoreList = getBatchStoreListByLot(lotRrn);
        if (CollectionUtils.isNotEmpty(batchLotStoreList)) {
            for (BatchLotStore batchLotStore : batchLotStoreList) {
                lotList.add(lotInqManager.getLot(batchLotStore.getLotRrn()));
            }
            Long monitorLotRrn = batchLotStoreList.iterator().next().getMonitorLotRrn();
            if (Objects.nonNull(monitorLotRrn) && monitorLotRrn.longValue() > 0 &&
                    lotAutoMonitorInqManager.checkLotIsAutoMonitorLot(monitorLotRrn)) {
                lotList.add(lotInqManager.getLot(monitorLotRrn));
            }
        }

        return lotList;
    }

    @Override
    public Boolean checkLotInBatch(Long lotRrn) {
        return diffBatchQueryDAO.checkLotInBatch(lotRrn);
    }

    @Override
    public Boolean checkLotIsBatchMonitorLot(Long lotRrn) {
        return diffBatchQueryDAO.checkLotIsBatchMonitorLot(lotRrn);
    }

    @Override
    public Boolean checkLotIsBatchMonitorLot(Long lotRrn, Equipment equipment) {
        Boolean isMonitorLot = checkLotIsBatchMonitorLot(lotRrn);

        if (isMonitorLot) {
            if (lotAutoMonitorInqManager.checkLotIsAutoMonitorLot(lotRrn)) {
                return checkLotCanDiffBatchRun(lotRrn, equipment);
            }
            return Boolean.TRUE;
        }

        return Boolean.FALSE;
    }

    @Override
    public String getLotBatchId(Long lotRrn) {
        return diffBatchQueryDAO.getBatchIdByLotRrn(lotRrn);
    }

    @Override
    public String buildBatchId(String prefix) {
        String batchPrefix = prefix + DateUtils.getNowTime("yyyyMMdd") + ".";
        String count = (diffBatchQueryDAO.getPrefixBatchIdCount(batchPrefix) + 1) + "";
        int length = 3 - count.length();
        for (int i = 0; i < length; i++) {
            count = NumberUtils.INTEGER_ZERO.toString() + count;
        }
        return batchPrefix + count;
    }

    @Override
    public List<Map<String, Object>> getBatchLotStoreHistory(BatchLotStore storeCondition, Boolean showAll) {
        return diffBatchQueryDAO.getBatchLotStoreHistory(storeCondition, showAll);
    }

    @Override
    public List<EqpRcpDiffBatchSetupInfo> getEqpRecipeDiffBatchSet(Long eqptRrn) {
        return diffBatchQueryDAO.getEqpRecipeDiffBatchSet(eqptRrn);
    }

    @Override
    public Page getEqpRcpBatchSetupHistory(Map<String, Object> condition, Page page) {
        return diffBatchQueryDAO.getEqpRcpBatchSetupHistory(condition, page);
    }

    private Boolean checkLotCanDiffBatchRun(Long lotRrn, Equipment equipment) {
        Boolean canDiffBatchRun = true;

        List<Lot> batchLotList = getBatchLotList(lotRrn);

        if (CollectionUtils.isNotEmpty(batchLotList)) {
            for (Lot lot : batchLotList) {
                Boolean canTrackInThisEqpt = equipmentCheckManager.checkLotCanDispatchEquipment(lot, equipment);
                canDiffBatchRun = canDiffBatchRun ? canTrackInThisEqpt : canDiffBatchRun;
            }
        }
        return canDiffBatchRun;
    }


}