PiLotInqDAOImpl.java

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

import com.mycim.framework.jdbc.JdbcTemplate;
import com.mycim.framework.jdbc.Page;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.server.wip.dao.PiLotInqDAO;
import com.mycim.server.wip.dao.mapper.*;
import com.mycim.valueobject.ems.pilot.*;
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.stereotype.Repository;

import java.util.List;

/**
 * @author songpy
 * @version 1.0.0
 * @date 2021/8/18
 **/
@Repository
public class PiLotInqDAOImpl implements PiLotInqDAO {

    final JdbcTemplate jdbcTemplate;

    public PiLotInqDAOImpl(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public Page getPiLotSetups(Page page, PiLotSetupQueryDTO queryDTO) {
        StringBuilder sqlBuilder = new StringBuilder(getPiLotSetupBaseSql());
        sqlBuilder.append(queryDTO.toSqlString());
        sqlBuilder.append(" ORDER BY PI_LOT_RRN desc ");
        return jdbcTemplate.queryForPage(page, sqlBuilder.toString(), queryDTO.getParamList().toArray(),
                                         new PiLotSetupRowMapper());
    }

    @Override
    public IdleType getPiLotSetupIdle(Long piLotSetupRrn) {
        String sql = "SELECT MAX_RUN_TIME,IDLE_TIME,RESET_COMMENT,SUB_TYPE FROM PI_LOT_SETUP_IDLE_TIME where " +
                "PI_LOT_RRN = ?";
        return jdbcTemplate.queryForObjectWithNull(sql, new IdleTypeRowMapper(), piLotSetupRrn);
    }

    @Override
    public PmType getPiLotSetupPM(Long piLotSetupRrn) {
        String sql = "SELECT BUFFER_TIME,CONSTRAINT_RECIPE_RRN,CONSTRAINT_RECIPE_ID FROM PI_LOT_SETUP_PM where " +
                "PI_LOT_RRN = ?";
        return jdbcTemplate.queryForObjectWithNull(sql, new PmTypeRowMapper(), piLotSetupRrn);
    }

    @Override
    public CountType getPiLotSetupCount(Long piLotSetupRrn) {
        String sql = "SELECT COUNT_TYPE,COUNT_SPEC,TIME_POINT TRIGGER_RECIPE_RRN,TRIGGER_RECIPE_ID," +
                "CONSTRAINT_RECIPE_RRN,CONSTRAINT_RECIPE_ID FROM PI_LOT_SETUP_COUNT WHERE PI_LOT_RRN= ?";
        return jdbcTemplate.queryForObjectWithNull(sql, new CountTypeRowMapper(), piLotSetupRrn);
    }

    @Override
    public RcpGrpType getPiLotSetupRcpGrp(Long piLotSetupRrn) {
        String sql = "SELECT FROM_RCP_GRP_ID,FROM_RCP_GRP_RRN,TO_RCP_GRP_ID,TO_RCP_GRP_RRN FROM PI_LOT_SETUP_RCP_GRP " +
                "WHERE PI_LOT_RRN= ?";
        return jdbcTemplate.queryForObjectWithNull(sql, new RcpGrpTypeRowMapper(), piLotSetupRrn);
    }

    @Override
    public PiLotSetup getPiLotSetup(PiLotSetupQueryDTO queryDTO) {
        StringBuilder sqlBuilder = new StringBuilder(getPiLotSetupBaseSql());
        sqlBuilder.append(queryDTO.toSqlString());
        return jdbcTemplate.queryForObjectWithNull(sqlBuilder.toString(), queryDTO.getParamList().toArray(),
                                                   new PiLotSetupRowMapper());
    }

    @Override
    public PiLotView getPiLotView(PiLotViewQueryDTO queryDTO) {
        StringBuilder sqlBuilder = new StringBuilder(getPiLotViewBaseSql());
        sqlBuilder.append(queryDTO.toSqlString());
        return jdbcTemplate.queryForObjectWithNull(sqlBuilder.toString(), queryDTO.getParamList().toArray(),
                                                   new PiLotViewRowMapper());
    }

    @Override
    public Page getPiLotViews(Page page, PiLotViewQueryDTO queryDTO) {
        StringBuilder sqlBuilder = new StringBuilder(getPiLotViewBaseSql());
        sqlBuilder.append(queryDTO.toSqlString());
        // sqlBuilder.append(" ORDER BY view_id desc ");
        sqlBuilder.append(" ORDER BY update_time desc ");
        return jdbcTemplate.queryForPage(page, sqlBuilder.toString(), queryDTO.getParamList().toArray(),
                                         new PiLotViewRowMapper());
    }

    @Override
    public Integer getCountPiLotViewBySetupRrn(Long setupRrn) {
        String sql = "SELECT count(*) FROM PI_LOT_VIEW WHERE PI_LOT_RRN= ?";
        return jdbcTemplate.queryForObjectWithNull(sql, Integer.class, setupRrn);
    }

    @Override
    public List<PiLotView> getPiLotViews(PiLotViewQueryDTO queryDTO) {
        StringBuilder sqlBuilder = new StringBuilder(getPiLotViewBaseSql());
        sqlBuilder.append(queryDTO.toSqlString());
        return jdbcTemplate.query(sqlBuilder.toString(), queryDTO.getParamList().toArray(), new PiLotViewRowMapper());
    }

    @Override
    public Page getPiLotRcpGrps(Page page, PiLotRcpGrpQueryDTO queryDTO) {
        StringBuilder sqlBuilder = new StringBuilder(getPiLotRcpGrpBaseSql());
        sqlBuilder.append(queryDTO.toSqlString());
        return jdbcTemplate.queryForPage(page, sqlBuilder.toString(), queryDTO.getParamList().toArray(),
                                         new PiLotRcpGrpRowMapper());
    }

    @Override
    public PiLotRcpGrp getPiLotRcpGrp(PiLotRcpGrpQueryDTO queryDTO) {
        StringBuilder sqlBuilder = new StringBuilder(getPiLotRcpGrpBaseSql());
        sqlBuilder.append(queryDTO.toSqlString());
        return jdbcTemplate.queryForObjectWithNull(sqlBuilder.toString(), queryDTO.getParamList().toArray(),
                                                   new PiLotRcpGrpRowMapper());
    }

    @Override
    public Page getPiLotRcps(Page page, PiLotRcpGrpQueryDTO queryDTO) {
        StringBuilder sqlBuilder = new StringBuilder(getPiLotRcpBaseSql());
        sqlBuilder.append(queryDTO.toSqlString());
        return jdbcTemplate.queryForPage(page, sqlBuilder.toString(), queryDTO.getParamList().toArray(),
                                         new PiLotRcpRowMapper());
    }

    @Override
    public Page querySetupHistorys(Page page, PiLotSetupQueryDTO queryDTO) {
        String sql = "SELECT h.trans_rrn,h.trans_id,h.pi_lot_rrn,h.pi_lot_id,h.pi_lot_type,h.status,h.enable_flag,h" +
                ".eqpt_id,h.eqpt_rrn,h.wafer_qty,h.wafer_rule_id,h.retry_count,h.trans_user_rrn,h.trans_user_id,h" +
                ".trans_time, h.PARALLEL_RUN_TYPE,h1" +
                ".IDLE_TIME,h1.MAX_RUN_TIME,h1.RESET_COMMENT,h1.SUB_TYPE,h2.BUFFER_TIME,h2.CONSTRAINT_RECIPE_ID " +
                "PM_CONSTRAINT_RECIPE_ID,h3.FROM_RCP_GRP_ID,h3.FROM_RCP_GRP_RRN,h3.TO_RCP_GRP_ID,h3.to_rcp_grp_rrn,h4" +
                ".COUNT_TYPE,h4.COUNT_SPEC,h4.TIME_POINT,h4.TRIGGER_RECIPE_ID,h4.CONSTRAINT_RECIPE_ID FROM " +
                "PI_LOT_SETUP_H h LEFT JOIN PI_LOT_SETUP_IDLE_TIME_H h1 ON h.TRANS_RRN=h1.TRANS_RRN LEFT JOIN " +
                "PI_LOT_SETUP_PM_H h2 ON h.TRANS_RRN=h2.TRANS_RRN LEFT JOIN PI_LOT_SETUP_RCP_GRP_H h3 ON h" +
                ".TRANS_RRN=h3.TRANS_RRN LEFT JOIN PI_LOT_SETUP_COUNT_H h4 ON h.TRANS_RRN=h4.TRANS_RRN WHERE h" +
                ".PI_LOT_RRN= ? ORDER BY h.TRANS_TIME DESC";
        return jdbcTemplate.queryForPage(page, sql, new Object[]{queryDTO.getPiLotRrn()}, new PiLotSetupHRowMapper());
    }

    @Override
    public Page queryViewHistorys(Page page, PiLotViewQueryDTO queryDTO) {
        String sql = "SELECT trans_rrn,trans_id,view_rrn,view_id,pi_lot_rrn,pi_lot_id,pi_lot_type,status,eqpt_id," +
                "eqpt_rrn,wafer_qty,retry_count,lot_id,lot_rrn,child_lot_id,child_lot_rrn,flow_complete,CAN_SPLIT," +
                "trans_user_rrn,trans_user_id,trans_time,start_route_id,start_route_rrn,start_step_id,start_step_rrn," +
                "end_route_id," +
                "end_route_rrn,end_step_id,end_step_rrn,single_lot,parallel_run_type,comments FROM PI_LOT_VIEW_H where view_rrn = ? ORDER BY TRANS_TIME DESC";
        return jdbcTemplate.queryForPage(page, sql, new Object[]{queryDTO.getViewRrn()}, new PiLotViewHRowMapper());
    }

    @Override
    public List<PiLotSetup> getPilotSetups(PiLotSetupQueryDTO queryDTO) {
        StringBuilder sqlBuilder = new StringBuilder(getPiLotSetupBaseSql());
        sqlBuilder.append(queryDTO.toSqlString());
        return jdbcTemplate.query(sqlBuilder.toString(), queryDTO.getParamList().toArray(), new PiLotSetupRowMapper());
    }

    private String getPiLotSetupBaseSql() {
        return "SELECT*FROM (" +
                "SELECT s.PI_LOT_RRN,s.PI_LOT_ID,s.PI_LOT_TYPE,s.STATUS,s.ENABLE_FLAG,s.EQPT_ID,s.EQPT_RRN,s" +
                ".WAFER_QTY,s.WAFER_RULE_ID,s.RETRY_COUNT,s.CREATE_TIME,s.UPDATE_TIME,s.CREATE_USER_RRN,s" +
                ".UPDATE_USER_RRN,s.LOCK_VERSION,s.PARALLEL_RUN_TYPE,v.single_lot,v.LOT_ID,v.LOT_RRN,v.VIEW_RRN,(" +
                "SELECT MAX(trans_time) FROM PI_LOT_VIEW_H h WHERE h.pi_lot_rrn=s.PI_LOT_RRN AND h.STATUS='CLOSE') AS" +
                " close_time FROM PI_LOT_SETUP s LEFT JOIN pi_lot_view v ON s.PI_LOT_RRN=v.PI_LOT_RRN AND v.STATUS " +
                "!='CLOSE') WHERE 1= 1";
    }

    private String getPiLotViewBaseSql() {
        return "SELECT view_rrn,view_id,pi_lot_rrn,pi_lot_id,pi_lot_type,status,eqpt_id,eqpt_rrn,wafer_qty," +
                "retry_count,lot_id,lot_rrn,child_lot_id,child_lot_rrn,flow_complete,can_split,start_route_id," +
                "start_route_rrn,start_step_id,start_step_rrn,end_route_id,end_route_rrn,end_step_id,end_step_rrn," +
                "create_time,update_time,create_user_rrn,update_user_rrn,lock_version,single_lot,parallel_run_type FROM PI_LOT_VIEW WHERE 1= 1";
    }

    private String getPiLotRcpGrpBaseSql() {
        return "SELECT rcp_grp_rrn,rcp_grp_id,create_time,update_time,create_user_rrn,update_user_rrn,lock_version," +
                "rcp_grp_desc FROM PI_LOT_RECIPE_GROUP WHERE 1=1 ";
    }

    private String getPiLotRcpBaseSql() {
        return "SELECT rcp_grp_rrn,rcp_grp_id,recipe_id,recipe_rrn FROM PI_LOT_RECIPE_GROUP_MAPPING WHERE 1=1";
    }

}