ResistRcpMappingDAOImpl.java

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

import com.mycim.framework.jdbc.JdbcTemplate;
import com.mycim.framework.jdbc.Page;
import com.mycim.framework.jdbc.mapper.RowMapper;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.time.DateUtils;
import com.mycim.server.resist.dao.ResistRcpMappingDAO;
import com.mycim.server.resist.dao.mapper.ResistRcpMappingRowMapper;
import com.mycim.valueobject.consts.DataBaseNames;
import com.mycim.valueobject.ems.ResistRcpMapping;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author weike.li
 * @version 6.0.0
 * @date 2020/6/24
 **/
@Repository
public class ResistRcpMappingDAOImpl implements ResistRcpMappingDAO {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Override
    public Page qryResistRcpMappingByPage(ResistRcpMapping mapping, Page page) {
        StringBuilder sql = new StringBuilder("SELECT ");
        sql.append(" R.RESIST_NO, R.RECIPE, R.CREATE_BY, R.CREATE_TIME, ");
        sql.append(" R.MODIFY_BY, R.MODIFY_TIME ");
        sql.append(" FROM ");
        sql.append(DataBaseNames.RESIST_RCP_MAPPING);
        sql.append(" R WHERE 1=1 ");

        List<Object> argList = new ArrayList<>();
        if (StringUtils.isNotBlank(mapping.getResistNo())) {
            sql.append("AND R.RESIST_NO LIKE ? ");
            argList.add(mapping.getResistNo());
        }
        if (StringUtils.isNotBlank(mapping.getCreateBy())) {
            sql.append("AND R.CREATE_BY LIKE ? ");
            argList.add(mapping.getCreateBy());
        }
        if (StringUtils.isNotBlank(mapping.getModifyBy())) {
            sql.append("AND R.MODIFY_BY LIKE ? ");
            argList.add(mapping.getModifyBy());
        }
        if (StringUtils.isNotBlank(mapping.getTransStartTime())) {
            sql.append(" AND R.CREATE_TIME > to_timestamp (?,'" + DateUtils.DATE_FORMAT24 + "')");
            argList.add(mapping.getTransStartTime() + " 00:00:00");
        }

        if (StringUtils.isNotBlank(mapping.getTransEndTime())) {
            sql.append(" AND R.CREATE_TIME <= to_timestamp (?,'" + DateUtils.DATE_FORMAT24 + "')");
            argList.add(mapping.getTransEndTime() + " 23:59:59");
        }

        sql.append("ORDER BY R.CREATE_TIME DESC ");

        return jdbcTemplate.queryForPage(page, sql.toString(), argList.toArray(), new ResistRcpMappingRowMapper());
    }

    @Override
    public void addResistRcpMapping(ResistRcpMapping mapping) {
        String sql = "INSERT INTO " + DataBaseNames.RESIST_RCP_MAPPING + " (RESIST_NO, " +
                "RECIPE, CREATE_BY, MODIFY_BY, CREATE_TIME, " + " MODIFY_TIME) VALUES (?, ?, ?, ?, sysdate, " +
                "sysdate) ";
        jdbcTemplate
                .update(sql, mapping.getResistNo(), mapping.getRecipe(), mapping.getCreateBy(), mapping.getCreateBy());
    }

    @Override
    public void addResistRcpMappingHist(long transRrn, ResistRcpMapping mapping) {
        String sql = "INSERT INTO " + DataBaseNames.RESIST_RCP_MAPPING_H + " (TRANS_RRN, RESIST_NO, " +
                " RECIPE, OLD_RECIPE) VALUES (?, ?, ?, ?) ";
        jdbcTemplate.update(sql, transRrn, mapping.getResistNo(), mapping.getRecipe(), mapping.getOldRecipe());
    }

    @Override
    public boolean checkResistRcpMappingIsExist(String resistNo, String rcpLetter) {
        String sql = "SELECT COUNT(*) FROM RESIST_RCP_MAPPING WHERE RESIST_NO = ? " + "AND RECIPE = ?";
        return jdbcTemplate.queryForObject(sql, new Object[]{resistNo, rcpLetter}, int.class) > 0;
    }

    @Override
    public void deleteResistRcpMapping(String resistNo, String rcpLetter) {
        String sql = "delete from RESIST_RCP_MAPPING WHERE RESIST_NO = ?  AND " + "RECIPE = ?";
        jdbcTemplate.update(sql, resistNo, rcpLetter);
    }

    @Override
    public Page qryResistRcpMappingHistByPage(ResistRcpMapping mapping, Page page) {
        StringBuilder sql = new StringBuilder("SELECT ");
        sql.append(" H.RESIST_NO, H.RECIPE, H.OLD_RECIPE, ");
        sql.append(" T.TRANS_PERFORMED_BY, T.TRANS_ID, T.TRANS_START_TIMESTAMP ");
        sql.append(" FROM RESIST_RCP_MAPPING_H H, TRANSACTION_LOG T ");
        sql.append(" where H.TRANS_RRN = T.TRANS_RRN(+) ");

        List<Object> argList = new ArrayList<>();
        if (StringUtils.isNotBlank(mapping.getResistNo())) {
            sql.append("AND H.RESIST_NO LIKE ? ");
            argList.add(mapping.getResistNo());
        }
        if (StringUtils.isNotBlank(mapping.getTransPerformedBy())) {
            sql.append("AND T.TRANS_PERFORMED_BY LIKE ? ");
            argList.add(mapping.getTransPerformedBy());
        }
        if (StringUtils.isNotBlank(mapping.getTransStartTime())) {
            sql.append(" AND T.TRANS_START_TIMESTAMP > to_timestamp (?,'" + DateUtils.DATE_FORMAT24 + "')");
            argList.add(mapping.getTransStartTime() + " 00:00:00");
        }

        if (StringUtils.isNotBlank(mapping.getTransEndTime())) {
            sql.append(" AND T.TRANS_START_TIMESTAMP <= to_timestamp (?,'" + DateUtils.DATE_FORMAT24 + "')");
            argList.add(mapping.getTransEndTime() + " 23:59:59");
        }

        sql.append("ORDER BY T.TRANS_START_TIMESTAMP DESC ");

        return jdbcTemplate.queryForPage(page, sql.toString(), argList.toArray(), new RowMapper<ResistRcpMapping>() {

            @Override
            public ResistRcpMapping mapRow(ResultSet rs, int rowNum) throws SQLException {
                ResistRcpMapping mapping = new ResistRcpMapping();
                mapping.setTransId(rs.getString("TRANS_ID"));
                mapping.setResistNo(rs.getString("RESIST_NO"));
                mapping.setRecipe(rs.getString("RECIPE"));
                mapping.setTransPerformedBy(rs.getString("TRANS_PERFORMED_BY"));
                String startTimestamp = rs.getString("TRANS_START_TIMESTAMP");
                if (StringUtils.isNotEmptyTrim(startTimestamp)) {
                    mapping.setTransTime(DateUtils.parse(startTimestamp, DateUtils.DATE_FORMAT4DATE));
                }
                String oldRecipe = rs.getString("OLD_RECIPE");
                mapping.setOldRecipe(StringUtils.isNotBlank(oldRecipe) ? oldRecipe : StringUtils.EMPTY);
                return mapping;
            }
        });
    }

    @Override
    public void modifyResistRcpMapping(ResistRcpMapping mapping) {
        String sql = "UPDATE " + DataBaseNames.RESIST_RCP_MAPPING + " SET RECIPE = ?, " +
                "MODIFY_BY = ?, MODIFY_TIME = sysdate " + " WHERE RESIST_NO = ? AND " + "RECIPE = ? ";
        jdbcTemplate
                .update(sql, mapping.getRecipe(), mapping.getModifyBy(), mapping.getResistNo(), mapping.getOldRecipe());
    }

}