PiLotInqManagerImpl.java

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

import com.mycim.framework.jdbc.Page;
import com.mycim.framework.utils.lang.ObjectUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.server.ems.manager.EquipmentManager;
import com.mycim.server.security.manager.UserManager;
import com.mycim.server.wip.dao.PiLotInqDAO;
import com.mycim.server.wip.manager.PiLotInqManager;
import com.mycim.valueobject.consts.PiLotStatusEnum;
import com.mycim.valueobject.consts.PiLotTypeEnum;
import com.mycim.valueobject.ems.Equipment;
import com.mycim.valueobject.ems.pilot.PiLotRcpGrp;
import com.mycim.valueobject.ems.pilot.PiLotSetup;
import com.mycim.valueobject.ems.pilot.PiLotView;
import com.mycim.valueobject.ems.pilot.dto.PiLotRcpGrpQueryDTO;
import com.mycim.valueobject.ems.pilot.dto.PiLotSetupQueryDTO;
import com.mycim.valueobject.ems.pilot.dto.PiLotViewQueryDTO;
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.Objects;
import java.util.stream.Collectors;

/**
 * @author songpy
 * @version 1.0.0
 * @date 2021/8/18
 **/
@Service
@Transactional
public class PiLotInqManagerImpl implements PiLotInqManager {
    @Autowired
    PiLotInqDAO queryDAO;

    @Autowired
    UserManager userManager;

    @Autowired
    EquipmentManager equipmentManager;

    @Override
    public Page getPiLotSetups(PiLotSetupQueryDTO queryDTO) {
        Page page = new Page(queryDTO.getPage(), queryDTO.getLimit());
        page = queryDAO.getPiLotSetups(page, queryDTO);
        if(CollectionUtils.isNotEmpty(page.getResults())){
            page.getResults().forEach(pilotSetup -> buildPiLotSetupDetail((PiLotSetup)pilotSetup));
        }
        return page;
    }

    @Override
    public PiLotSetup getPiLotSetupByRrn(Long piLotSetupRrn) {
        PiLotSetupQueryDTO queryDTO = new PiLotSetupQueryDTO();
        queryDTO.setPiLotRrn(piLotSetupRrn);
        return buildPiLotSetupDetail(queryDAO.getPiLotSetup(queryDTO));
    }

    @Override
    public PiLotSetup getPiLotSetupIdleByEquipment(String eqptId, long eqptRrn) {
        PiLotSetupQueryDTO queryDTO = new PiLotSetupQueryDTO();
        queryDTO.setEqptId(eqptId);
        queryDTO.setEqptRrn(eqptRrn);
        queryDTO.setType(PiLotTypeEnum.IDLETIME.toString());
        queryDTO.setEnableFlag(PiLotStatusEnum.ON.toString());
        queryDTO.addStatus(PiLotStatusEnum.CREATED.toString());
        return buildPiLotSetupDetail(queryDAO.getPiLotSetup(queryDTO));
    }

    @Override
    public PiLotView getPiLotViewByRrn(Long viewRrn) {
        PiLotViewQueryDTO queryDTO = new PiLotViewQueryDTO();
        queryDTO.setViewRrn(viewRrn);
        return queryDAO.getPiLotView(queryDTO);
    }

    @Override
    public Page getPiLotViews(PiLotViewQueryDTO queryDTO) {
        Page page = new Page(queryDTO.getPage(), queryDTO.getLimit());
        return queryDAO.getPiLotViews(page, queryDTO);
    }

    @Override
    public Integer getCountPiLotViewBySetupRrn(Long setupRrn) {
        return queryDAO.getCountPiLotViewBySetupRrn(setupRrn);
    }

    @Override
    public List<PiLotView> getSplitBeforePiLotViewByEqpt(String eqptId, long eqptRrn) {
        PiLotViewQueryDTO queryDTO = new PiLotViewQueryDTO();
        queryDTO.setEqptId(eqptId);
        queryDTO.setEqptRrn(eqptRrn);
        queryDTO.addStatus(PiLotStatusEnum.WAITSPLIT.toString())
                .addStatus(PiLotStatusEnum.WAITMERGE.toString());
        return queryDAO.getPiLotViews(queryDTO);
    }

    @Override
    public PiLotView getSplitAfterPiLotViewByEqpt(String eqptId, long eqptRrn) {
        PiLotViewQueryDTO queryDTO = new PiLotViewQueryDTO();
        queryDTO.setEqptId(eqptId);
        queryDTO.setEqptRrn(eqptRrn);
        queryDTO.addStatus(PiLotStatusEnum.WAITMERGE.toString());
        return queryDAO.getPiLotView(queryDTO);
    }

    @Override
    public PiLotView getPiLotViewByEqpt(String eqptId, long eqptRrn) {
        PiLotViewQueryDTO queryDTO = new PiLotViewQueryDTO();
        queryDTO.setEqptId(eqptId);
        queryDTO.setEqptRrn(eqptRrn);
        queryDTO.addStatus(PiLotStatusEnum.ONGOING.toString()).addStatus(PiLotStatusEnum.WAITSPLIT.toString())
                .addStatus(PiLotStatusEnum.WAITMERGE.toString()).addStatus(PiLotStatusEnum.WAITCOMPLETE.toString());
        return queryDAO.getPiLotView(queryDTO);
    }

    @Override
    public PiLotView getSingleLotPiLotViewByEqpt(String eqptId, long eqptRrn) {
        PiLotViewQueryDTO queryDTO = new PiLotViewQueryDTO();
        queryDTO.setEqptId(eqptId);
        queryDTO.setEqptRrn(eqptRrn);
        queryDTO.addStatus(PiLotStatusEnum.WAITCOMPLETE.toString());
        return queryDAO.getPiLotView(queryDTO);
    }

    @Override
    public String getPiLotViewIdByLotRrn(Long basedLotRrn) {
        PiLotView view = getPiLotViewByLotRrn(basedLotRrn);
        if (Objects.nonNull(view)) {
            return view.getViewId();
        } else {
            return StringUtils.EMPTY;
        }
    }

    @Override
    public String getPiLotViewIdByChildLotRrn(Long lotRrn) {
        PiLotView view = getPiLotViewByChildLotRrn(lotRrn);
        if (Objects.nonNull(view)) {
            return view.getViewId();
        } else {
            return StringUtils.EMPTY;
        }
    }

    @Override
    public Page getPiLotRcpGrps(PiLotRcpGrpQueryDTO queryDTO) {
        Page page = new Page(queryDTO.getPage(), queryDTO.getLimit());
        return queryDAO.getPiLotRcpGrps(page, queryDTO);
    }

    @Override
    public PiLotRcpGrp getPiLotRcpGrpByRrn(Long rcpGrpRrn) {
        PiLotRcpGrpQueryDTO queryDTO = new PiLotRcpGrpQueryDTO();
        queryDTO.setRcpGrpRrn(rcpGrpRrn);
        return queryDAO.getPiLotRcpGrp(queryDTO);
    }

    @Override
    public Page getPiLotRcps(PiLotRcpGrpQueryDTO queryDTO) {
        Page page = new Page(queryDTO.getPage(), queryDTO.getLimit());
        return queryDAO.getPiLotRcps(page, queryDTO);
    }

    @Override
    public PiLotSetup getPiLotSetup(PiLotSetupQueryDTO queryDTO) {
        return buildPiLotSetupDetail(queryDAO.getPiLotSetup(queryDTO));
    }

    @Override
    public PiLotView getPiLotViewByLotRrn(Long lotRrn) {
        PiLotViewQueryDTO queryDTO = new PiLotViewQueryDTO();
        queryDTO.setLotRrn(lotRrn);
        queryDTO.addStatus(PiLotStatusEnum.WAITSPLIT.toString())
                .addStatus(PiLotStatusEnum.WAITMERGE.toString())
                .addStatus(PiLotStatusEnum.ONGOING.toString())
                .addStatus(PiLotStatusEnum.WAITCOMPLETE.toString());
        return queryDAO.getPiLotView(queryDTO);
    }

    @Override
    public Page querySetupHistorys(PiLotSetupQueryDTO queryDTO) {
        Page page = new Page(queryDTO.getPage(), queryDTO.getLimit());
        return queryDAO.querySetupHistorys(page, queryDTO);
    }

    @Override
    public Page queryViewHistorys(PiLotViewQueryDTO queryDTO) {
        Page page = new Page(queryDTO.getPage(), queryDTO.getLimit());
        return queryDAO.queryViewHistorys(page, queryDTO);
    }

    @Override
    public PiLotSetup getPiLotSetupByTypeAndEqptId(String type, String eqptId) {
        PiLotSetupQueryDTO queryDTO = new PiLotSetupQueryDTO();
        queryDTO.setType(type);
        queryDTO.setEqptId(eqptId);
        return queryDAO.getPiLotSetup(queryDTO);
    }

    @Override
    public PiLotView getPiLotViewByChildLotRrn(long lotRrn) {
        PiLotViewQueryDTO queryDTO = new PiLotViewQueryDTO();
        queryDTO.setChildLotRrn(lotRrn);
        queryDTO.addStatus(PiLotStatusEnum.WAITMERGE.toString());
        return queryDAO.getPiLotView(queryDTO);
    }

    @Override
    public PiLotSetup getBasePilotSetup(Long piLotSetupRrn) {
        PiLotSetup piLotSetup = getPiLotSetupByRrn(piLotSetupRrn);
        Equipment equipment = equipmentManager.getEquipment(piLotSetup.getEqptRrn());
        if (ObjectUtils.isEmpty(equipment.getParentEntityRrn())){
            piLotSetup.setEqptRrn(equipment.getInstanceRrn());
        }else {
            piLotSetup.setEqptRrn(equipment.getParentEntityRrn());
            Equipment parentEquipment = equipmentManager.getEquipment(equipment.getParentEntityRrn());
            piLotSetup.setChamberMode(parentEquipment.getChamberMode());
        }
        return piLotSetup;
    }

    private PiLotSetup buildPiLotSetupDetail(PiLotSetup piLotSetup) {
        if (Objects.isNull(piLotSetup)) {
            return piLotSetup;
        }

        switch (PiLotTypeEnum.valueOf(piLotSetup.getType())) {
            case IDLETIME:
                piLotSetup.setIdle(queryDAO.getPiLotSetupIdle(piLotSetup.getPiLotRrn()));
                break;
            case PM:
                piLotSetup.setPm(queryDAO.getPiLotSetupPM(piLotSetup.getPiLotRrn()));
                break;
            case COUNT:
                piLotSetup.setCount(queryDAO.getPiLotSetupCount(piLotSetup.getPiLotRrn()));
                break;
            case RECIPEGROUPCHANGE:
                piLotSetup.setRcpGrp(queryDAO.getPiLotSetupRcpGrp(piLotSetup.getPiLotRrn()));
                break;
        }
        return piLotSetup;
    }

    @Override
    public List<PiLotSetup> getPilotSetupIdle() {
        PiLotSetupQueryDTO queryDTO = new PiLotSetupQueryDTO();
        queryDTO.setType(PiLotTypeEnum.IDLETIME.toString());
        queryDTO.setEnableFlag(PiLotStatusEnum.ON.toString());
        queryDTO.addStatus(PiLotStatusEnum.CREATED.toString());
        List<PiLotSetup> pilotSetups = queryDAO.getPilotSetups(queryDTO);
        return pilotSetups.stream().map(piLotSetup -> buildPiLotSetupDetail(piLotSetup)).collect(Collectors.toList());
    }

}