AutoMonitorItemReqDaoImpl.java

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

import com.mycim.framework.jdbc.JdbcTemplate;
import com.mycim.framework.utils.beans.BeanUtils;
import com.mycim.server.automonitor.dao.AutoMonitorItemReqDao;
import com.mycim.valueobject.automonitor.entity.AutoMonitorItem;
import com.mycim.valueobject.automonitor.entity.AutoMonitorItemStep;
import com.mycim.valueobject.automonitor.entity.AutoMonitorItemStepEdcInfo;
import com.mycim.valueobject.consts.DataBaseNames;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.stereotype.Repository;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author finatice.yang
 * @date 2021/8/24
 **/
@Repository
public class AutoMonitorItemReqDaoImpl implements AutoMonitorItemReqDao {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Override
    public void insertAutoMonitorItem(AutoMonitorItem autoMonitorItem) {
        StringBuilder sql = new StringBuilder("INSERT INTO ");
        sql.append(DataBaseNames.AUTO_MONITOR_ITEM);
        sql.append(" (WORKFLOW_RRN, WORKFLOW_VERSION, WORKFLOW_ID, EQUIPMENT_RRN, EQUIPMENT_ID, ITEM_TYPE, QTY, ");
        sql.append(" PRODUCT_RRN, PRODUCT_ID, PROCESS_RRN, PROCESS_ID, MAIN_EQUIPMENT_TYPE,");
        sql.append(" MONITOR_CARRIER_FLAG, MONITOR_CARRIER_TYPE, START_SPLIT_FLAG ) ");
        sql.append(" VALUES ");
        sql.append("(:workflowRrn,:workflowVersion,:workflowId,:eqptRrn,:eqptId,:itemType,:qty,");
        sql.append(" :productRrn,:productId,:processRrn,:processId,:mainEqptType,");
        sql.append(" :monitorCarrierFlag,:monitorCarrierType,:startSplitFlag) ");

        jdbcTemplate.update(sql.toString(), new BeanPropertySqlParameterSource(autoMonitorItem));
    }

    @Override
    public void updateAutoMonitorItem(AutoMonitorItem autoMonitorItem) {
        StringBuilder sql = new StringBuilder("UPDATE ");
        sql.append(DataBaseNames.AUTO_MONITOR_ITEM).append(" SET ");
        sql.append(" QTY=:qty, PRODUCT_RRN=:productRrn, PRODUCT_ID=:productId, ");
        sql.append(" PROCESS_RRN=:processRrn, PROCESS_ID=:processId, ");
        sql.append(" MONITOR_CARRIER_FLAG=:monitorCarrierFlag, MONITOR_CARRIER_TYPE=:monitorCarrierType, ");
        sql.append(" START_SPLIT_FLAG=:startSplitFlag ");
        sql.append(" WHERE WORKFLOW_RRN=:workflowRrn AND WORKFLOW_VERSION=:workflowVersion ");

        jdbcTemplate.update(sql.toString(), new BeanPropertySqlParameterSource(autoMonitorItem));
    }

    @Override
    public void updateAutoMonitorItemSysInActiveFlag(Long workflowRrn, Boolean sysInActiveFlag) {
        StringBuilder sql = new StringBuilder("UPDATE ");
        sql.append(DataBaseNames.AUTO_MONITOR_ITEM).append(" SET ");
        sql.append(" SYS_INACTIVE_FLAG = ? ");
        sql.append(" WHERE WORKFLOW_RRN=? ");

        Object[] args = new Object[]{sysInActiveFlag, workflowRrn};

        jdbcTemplate.update(sql.toString(), args);
    }

    @Override
    public void deleteAutoMonitorItem(AutoMonitorItem autoMonitorItem) {
        StringBuilder sql = new StringBuilder("DELETE FROM ");
        sql.append(DataBaseNames.AUTO_MONITOR_ITEM);
        sql.append(" WHERE WORKFLOW_RRN = :workflowRrn AND WORKFLOW_VERSION = :workflowVersion ");
        jdbcTemplate.update(sql.toString(), new BeanPropertySqlParameterSource(autoMonitorItem));
    }

    @Override
    public void insertAutoMonitorItemSteps(List<AutoMonitorItemStep> stepList) {
        StringBuilder sql = new StringBuilder("INSERT INTO ");
        sql.append(DataBaseNames.AUTO_MONITOR_ITEM_STEP);
        sql.append(" (WORKFLOW_RRN, WORKFLOW_VERSION, WORKFLOW_ID, STEP_SEQUENCE, OPERATION_RRN, OPERATION_ID, ");
        sql.append(" EQUIPMENT_TYPE,EQUIPMENT_RRN,EQUIPMENT_ID,EQUIPMENT_GROUP_RRN,EQUIPMENT_GROUP_ID,");
        sql.append(" MAIN_EQUIPMENT_FLAG,FLOW_SEQ,OPERATION_DESC,RECIPE_ID,RECIPE_RRN,RETICLE_RRN,RETICLE_ID, ");
        sql.append(" RETICLE_GROUP_RRN, RETICLE_GROUP_ID, STAGE_ID, NONRT_SLOT_TYPE  ) ");
        sql.append(" VALUES (:workflowRrn,:workflowVersion,:workflowId,:stepSequence,:operationRrn,:operationId,");
        sql.append(" :eqptType,:equipmentRrn,:equipmentId,:equipmentGroupRrn,:equipmentGroupId,:mainEqptFlag,");
        sql.append(" :flowSeq,:operationDesc,:recipeId,:recipeRrn,:reticleRrn,:reticleId,");
        sql.append(" :reticleGroupRrn,:reticleGroupId,:stageId,:nonRTSlotType)");

        Map<String, Object>[] batchValues = stepList.stream().map(step -> {
            return BeanUtils.copyBeanToMap(step);
        }).collect(Collectors.toList()).toArray(new Map[stepList.size()]);

        jdbcTemplate.batchUpdate(sql.toString(), batchValues);
    }

    @Override
    public void deleteAutoMonitorItemSteps(Long workflowRrn, Integer workflowVersion) {
        StringBuilder sql = new StringBuilder("DELETE FROM ");
        sql.append(DataBaseNames.AUTO_MONITOR_ITEM_STEP);
        sql.append(" WHERE WORKFLOW_RRN = ? AND WORKFLOW_VERSION = ?");

        Object[] args = new Object[]{workflowRrn, workflowVersion};
        jdbcTemplate.update(sql.toString(), args);
    }

    @Override
    public void insertItemStepEdcInfo(List<AutoMonitorItemStepEdcInfo> edcInfoList) {
        StringBuilder sql = new StringBuilder("INSERT INTO ");
        sql.append(DataBaseNames.AUTO_MONITOR_ITEM_STEP_EDC);
        sql.append(" (WORKFLOW_RRN, WORKFLOW_VERSION, WORKFLOW_ID, STEP_SEQUENCE, WAFER_SLOT, ");
        sql.append(" NONRT_JOB_IDS, NONRT_JOB_NAMES) ");
        sql.append(" VALUES (:workflowRrn,:workflowVersion,:workflowId,:stepSequence,:waferSlot,");
        sql.append(" :nonRTJobIds,:nonRTJobNames) ");

        Map<String, Object>[] batchValues = edcInfoList.stream().map(edcInfo -> {
            return BeanUtils.copyBeanToMap(edcInfo);
        }).collect(Collectors.toList()).toArray(new Map[edcInfoList.size()]);

        jdbcTemplate.batchUpdate(sql.toString(), batchValues);
    }

    @Override
    public void deleteItemStepEdcInfo(Long workflowRrn, Integer workflowVersion) {
        StringBuilder sql = new StringBuilder("DELETE FROM ");
        sql.append(DataBaseNames.AUTO_MONITOR_ITEM_STEP_EDC);
        sql.append(" WHERE WORKFLOW_RRN = ? AND WORKFLOW_VERSION = ?");

        Object[] args = new Object[]{workflowRrn, workflowVersion};
        jdbcTemplate.update(sql.toString(), args);
    }

    @Override
    public void deleteItemStepEdcInfo(Long workflowRrn, Integer workflowVersion, Long stepSequence) {
        StringBuilder sql = new StringBuilder("DELETE FROM ");
        sql.append(DataBaseNames.AUTO_MONITOR_ITEM_STEP_EDC);
        sql.append(" WHERE WORKFLOW_RRN = ? AND WORKFLOW_VERSION = ? AND STEP_SEQUENCE = ?");

        Object[] args = new Object[]{workflowRrn, workflowVersion, stepSequence};
        jdbcTemplate.update(sql.toString(), args);
    }

}