EntityCounterTypeDaoImpl.java

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

import com.mycim.framework.jdbc.JdbcTemplate;
import com.mycim.framework.jdbc.mapper.RowMapper;
import com.mycim.framework.utils.MiscUtils;
import com.mycim.framework.utils.lang.math.NumberUtils;
import com.mycim.server.pms.dao.EntityCounterTypeDao;
import com.mycim.valueobject.bas.TransactionLog;
import com.mycim.valueobject.consts.DataBaseNames;
import com.mycim.valueobject.ems.EntityCounterType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.support.rowset.SqlRowSet;
import org.springframework.stereotype.Repository;

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

/**
 * EntityCounterType
 *
 * @author pinyan.song
 * @version 6.0.0
 * @date 2019-11-15
 **/
@Repository
public class EntityCounterTypeDaoImpl implements EntityCounterTypeDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public List<EntityCounterType> getEntityCounterTypesOfEntity(long entityRrn) {
        String sql = "SELECT ENTITY_RRN,EVENT_RRN,RECIPE_RRN," + "COUNTER_TYPE,QUANTITY,BASIS_CODE" + " FROM " +
                DataBaseNames.ENTITY_COUNTER + " WHERE ENTITY_RRN = " + entityRrn +
                " ORDER BY EVENT_RRN,RECIPE_RRN,COUNTER_TYPE";

        return jdbcTemplate.query(sql, new RowMapper<EntityCounterType>() {
            @Override
            public EntityCounterType mapRow(ResultSet rs, int rowNum) throws SQLException {
                EntityCounterType entityCounterType = new EntityCounterType();
                entityCounterType.setEventRrn(rs.getLong("EVENT_RRN"));
                entityCounterType.setRecipeRrn(rs.getLong("RECIPE_RRN"));
                entityCounterType.setCounterType(rs.getString("COUNTER_TYPE"));
                entityCounterType.setQuantity(rs.getLong("QUANTITY"));
                entityCounterType.setBasisCode(rs.getString("BASIS_CODE"));
                entityCounterType.setSequenceNumber((long) (rowNum + 1));

                return entityCounterType;
            }
        });

    }

    @Override
    public long insertEntityCounterType(EntityCounterType entityCounterType, TransactionLog transactionLog) {
        long instanceRrn = entityCounterType.getEntityRrn();

        String sql = "SELECT * FROM " + DataBaseNames.ENTITY_COUNTER + " WHERE ENTITY_RRN = " + instanceRrn + " AND " +
                "EVENT_RRN = " + MiscUtils.parseSQL(entityCounterType.getEventRrn()) + " AND RECIPE_RRN = " +
                MiscUtils.parseSQL(entityCounterType.getRecipeRrn()) + " AND COUNTER_TYPE = " +
                MiscUtils.parseSQL(entityCounterType.getCounterType());

        SqlRowSet rs = jdbcTemplate.queryForRowSet(sql);

        if (rs.next()) {
            return 0;
        }
        Object[] obj = {entityCounterType.getEventRrn(), entityCounterType.getRecipeRrn(),
                entityCounterType.getCounterType(), entityCounterType.getQuantity(), entityCounterType.getBasisCode()};

        // insert into entityCounter table
        sql = "INSERT INTO " + DataBaseNames.ENTITY_COUNTER + " (ENTITY_RRN,EVENT_RRN,RECIPE_RRN,COUNTER_TYPE," +
                "QUANTITY,BASIS_CODE)" + " VALUES( " + instanceRrn + "," + MiscUtils.parseSQL(obj) + ")";

        jdbcTemplate.update(sql);

        insertEntityCounterTypeHistory(entityCounterType, transactionLog.getTransRrn());
        return instanceRrn;
    }

    @Override
    public void updateEntityCounterType(EntityCounterType entityCounterType, TransactionLog transactionLog) {
        insertEntityCounterTypeHistory(entityCounterType, transactionLog.getTransRrn());
        String sql = " UPDATE " + DataBaseNames.ENTITY_COUNTER + " SET BASIS_CODE =  " +
                MiscUtils.parseSQL(entityCounterType.getBasisCode()) + "," + " QUANTITY = " +
                MiscUtils.parseSQL(entityCounterType.getQuantity()) + " WHERE ENTITY_RRN = " +
                entityCounterType.getEntityRrn() + " AND " + "EVENT_RRN = " + entityCounterType.getEventRrn() +
                " AND RECIPE_RRN = " + entityCounterType.getRecipeRrn() + " AND COUNTER_TYPE = " +
                MiscUtils.parseSQL(entityCounterType.getCounterType());
        jdbcTemplate.update(sql);
    }

    @Override
    public void deleteEntityCounterType(EntityCounterType entityCounterType, TransactionLog transactionLog) {
        insertEntityCounterTypeHistory(entityCounterType, transactionLog.getTransRrn());
        String sql = "DELETE FROM " + DataBaseNames.ENTITY_COUNTER + " WHERE ENTITY_RRN = " +
                entityCounterType.getEntityRrn() + " AND EVENT_RRN  = " + entityCounterType.getEventRrn() +
                " AND RECIPE_RRN = " + NumberUtils.toLong(entityCounterType.getRecipeRrn().toString()) +
                " AND COUNTER_TYPE = " + MiscUtils.parseSQL(entityCounterType.getCounterType());
        jdbcTemplate.update(sql);
    }

    private void insertEntityCounterTypeHistory(EntityCounterType entityCounterType, long transRrn) {
        String sql = "INSERT INTO " + DataBaseNames.ENTITY_COUNTER_HISTORY + " (ENTITY_RRN,EVENT_RRN,RECIPE_RRN," +
                "COUNTER_TYPE,QUANTITY,BASIS_CODE,TRANS_RRN) " + "SELECT ENTITY_RRN,EVENT_RRN,RECIPE_RRN," +
                "COUNTER_TYPE,QUANTITY,BASIS_CODE,? FROM " + DataBaseNames.ENTITY_COUNTER + " WHERE ENTITY_RRN=? and " +
                "EVENT_RRN=? and RECIPE_RRN=? and COUNTER_TYPE=?";

        jdbcTemplate.update(sql, transRrn, entityCounterType.getEntityRrn(), entityCounterType.getEventRrn(),
                            entityCounterType.getRecipeRrn(), entityCounterType.getCounterType());

    }

}