# CheckListItemDaoImpl.java

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

    import com.mycim.framework.jdbc.JdbcTemplate;
    import com.mycim.framework.utils.MiscUtils;
    import com.mycim.server.pms.dao.CheckListItemDao;
    import com.mycim.valueobject.bas.TransactionLog;
    import com.mycim.valueobject.consts.DataBaseNames;
    import com.mycim.valueobject.ems.ChecklistItem;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.RowMapper;
    import org.springframework.stereotype.Repository;

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

    /**
     * CheckListItemDaoImpl
     *
     * @author pinyan.song
     * @version 6.0.0
     * @date 2019-11-5
     **/
    @Repository
    public class CheckListItemDaoImpl implements CheckListItemDao {
        @Autowired
        private JdbcTemplate jdbcTemplate;

        @Override
        public List<ChecklistItem> getChecklistItems(long checklistRrn) {
            String sql = " SELECT checklist_rrn, checklist_version, checklist_sequence," + " checklist_item_id, " +
                    "checklist_item_desc, bor_rrn," + " data_type, upper_limit, lower_limit, parameter_set_rrn, unit, bool" + " FROM " +
                    DataBaseNames.CHECKLIST_ITEM + " WHERE " + " checklist_rrn = " + checklistRrn + " order by " +
                    "checklist_sequence ";

            return jdbcTemplate.query(sql, new RowMapper<ChecklistItem>() {
                @Override
                public ChecklistItem mapRow(ResultSet rs, int rowNum) throws SQLException {
                    ChecklistItem checklistItem = new ChecklistItem();
                    checklistItem.setChecklistRrn(rs.getLong("checklist_rrn"));
                    checklistItem.setChecklistVersion(rs.getInt("checklist_version"));
                    checklistItem.setChecklistSequence(rs.getInt("checklist_sequence"));
                    checklistItem.setChecklistItemId(rs.getString("checklist_item_id"));
                    checklistItem.setChecklistItemDesc(rs.getString("checklist_item_desc"));
                    checklistItem.setBorRrn(rs.getLong("bor_rrn"));
                    checklistItem.setDataType(rs.getString("data_type"));
                    checklistItem.setUpperLimit(rs.getDouble("upper_limit"));
                    checklistItem.setLowerLimit(rs.getDouble("lower_limit"));
                    checklistItem.setParameterSetRrn(rs.getLong("parameter_set_rrn"));
                    checklistItem.setUnit(rs.getString("unit"));
                    checklistItem.setBool(rs.getString("bool"));
                    return checklistItem;
                }
            });
        }

        @Override
        public List<ChecklistItem> getChecklistItems(long entityRrn, long checklistRrn) {
            String sql = " SELECT checklist_rrn, checklist_version, checklist_sequence," + " checklist_item_id, " +
                    "checklist_item_desc, bor_rrn," + " data_type, upper_limit, lower_limit, parameter_set_rrn, unit, bool" + " FROM " +
                    DataBaseNames.CHECKLIST_ITEM + " WHERE " + " checklist_rrn = " + checklistRrn + " and ENTITY_RRN = " +
                    entityRrn + " order by checklist_sequence ";

            return jdbcTemplate.query(sql, new RowMapper<ChecklistItem>() {
                @Override
                public ChecklistItem mapRow(ResultSet rs, int rowNum) throws SQLException {
                    ChecklistItem checklistItem = new ChecklistItem();
                    checklistItem.setChecklistRrn(rs.getLong("checklist_rrn"));
                    checklistItem.setChecklistVersion(rs.getInt("checklist_version"));
                    checklistItem.setChecklistSequence(rs.getInt("checklist_sequence"));
                    checklistItem.setChecklistItemId(rs.getString("checklist_item_id"));
                    checklistItem.setChecklistItemDesc(rs.getString("checklist_item_desc"));
                    checklistItem.setBorRrn(rs.getLong("bor_rrn"));
                    checklistItem.setDataType(rs.getString("data_type"));
                    checklistItem.setUpperLimit(rs.getDouble("upper_limit"));
                    checklistItem.setLowerLimit(rs.getDouble("lower_limit"));
                    checklistItem.setParameterSetRrn(rs.getLong("parameter_set_rrn"));
                    checklistItem.setUnit(rs.getString("unit"));
                    checklistItem.setBool(rs.getString("bool"));
                    return checklistItem;
                }
            });
        }

        @Override
        public void insertChecklistItem(ChecklistItem checklistItem, TransactionLog transactionLog) {
            Object[] obj = {checklistItem.getChecklistItemId(), checklistItem.getChecklistItemDesc(),
                    checklistItem.getBorRrn(), checklistItem.getDataType(), checklistItem.getUpperLimit(),
                    checklistItem.getLowerLimit(), checklistItem.getParameterSetRrn(), checklistItem.getUnit(), checklistItem.getBool()};
            String sql = "INSERT INTO " + DataBaseNames.CHECKLIST_ITEM + " (checklist_rrn, checklist_version, " +
                    "checklist_sequence," + " checklist_item_id, checklist_item_desc, bor_rrn," + " data_type, " +
                    "upper_limit, lower_limit, parameter_set_rrn, unit, bool)" + " SELECT " + checklistItem.getChecklistRrn() + "," +
                    checklistItem.getChecklistVersion() + "," + " NVL(MAX(checklist_sequence),0)+1," +
                    MiscUtils.parseSQL(obj) + " from " + DataBaseNames.CHECKLIST_ITEM + " WHERE " + " checklist_rrn = " +
                    checklistItem.getChecklistRrn() + " and " + " checklist_version = " +
                    checklistItem.getChecklistVersion();

            String sqlh = "INSERT INTO " + DataBaseNames.CHECKLIST_ITEM_H + " (trans_rrn,checklist_rrn, " +
                    "checklist_version, checklist_sequence," + " checklist_item_id, checklist_item_desc, bor_rrn," + " " +
                    "data_type, upper_limit, lower_limit, parameter_set_rrn, unit, bool)" + " VALUES " + "(" +
                    transactionLog.getTransRrn() + "," + checklistItem.getChecklistRrn() + "," +
                    checklistItem.getChecklistVersion() + "," + checklistItem.getChecklistSequence() + "," +
                    MiscUtils.parseSQL(obj) + ")";

            jdbcTemplate.execute(sql);
            jdbcTemplate.execute(sqlh);
        }

        @Override
        public void deleteChecklistItem(ChecklistItem checklistItem, TransactionLog transactionLog) {
            String sql = " DELETE FROM " + DataBaseNames.CHECKLIST_ITEM + " WHERE " + " checklist_rrn = " +
                    checklistItem.getChecklistRrn() + " and " + " checklist_version = " +
                    checklistItem.getChecklistVersion() + " and " + " checklist_sequence = " +
                    checklistItem.getChecklistSequence();
            String sqlupdatesequence =
                    " UPDATE " + DataBaseNames.CHECKLIST_ITEM + " SET checklist_sequence = " + "checklist_sequence - 1" +
                            " WHERE " + " checklist_rrn = " + checklistItem.getChecklistRrn() + " and " +
                            " checklist_version = " + checklistItem.getChecklistVersion() + " and " +
                            " checklist_sequence > " + checklistItem.getChecklistSequence();
            String sqlh = "INSERT INTO " + DataBaseNames.CHECKLIST_ITEM_H + "(trans_rrn, checklist_rrn, " +
                    "checklist_version, checklist_sequence," + " checklist_item_id, checklist_item_desc, bor_rrn," + " " +
                    "data_type, upper_limit, lower_limit, parameter_set_rrn, unit, bool)" + " SELECT " + transactionLog.getTransRrn() +
                    ", checklist_rrn, checklist_version, checklist_sequence," +
                    " checklist_item_id, checklist_item_desc, bor_rrn," +
                    " data_type, upper_limit, lower_limit, parameter_set_rrn, unit, bool" + " FROM " + DataBaseNames.CHECKLIST_ITEM +
                    " WHERE " + " checklist_rrn = " + checklistItem.getChecklistRrn() + " and " + " checklist_version = " +
                    checklistItem.getChecklistVersion() + " and" + " checklist_sequence = " +
                    checklistItem.getChecklistSequence();

            jdbcTemplate.execute(sqlh);
            jdbcTemplate.execute(sql);
            jdbcTemplate.execute(sqlupdatesequence);
        }

        @Override
        public void updateChecklistItem(ChecklistItem checklistItem, TransactionLog transactionLog) {
            Object[] obj = {checklistItem.getChecklistItemId(), checklistItem.getChecklistItemDesc(),
                    checklistItem.getBorRrn(), checklistItem.getDataType(), checklistItem.getUpperLimit(),
                    checklistItem.getLowerLimit(), checklistItem.getParameterSetRrn(), checklistItem.getUnit(), checklistItem.getBool()};

            String sql = " UPDATE " + DataBaseNames.CHECKLIST_ITEM + " SET " + " checklist_item_id =" +
                    MiscUtils.parseSQL(checklistItem.getChecklistItemId()) + "," + " checklist_item_desc = " +
                    MiscUtils.parseSQL(checklistItem.getChecklistItemDesc()) + "," + " bor_rrn = " +
                    checklistItem.getBorRrn() + "," + " " + "data_type = " +
                    MiscUtils.parseSQL(checklistItem.getDataType()) + "," + " upper_limit = " +
                    checklistItem.getUpperLimit() + "," + " " + "lower_limit = " + checklistItem.getLowerLimit() + "," +
                    " parameter_set_rrn = " + checklistItem.getParameterSetRrn() + ",unit = " +
                    MiscUtils.parseSQL(checklistItem.getUnit())+ ", bool = " +
                    MiscUtils.parseSQL(checklistItem.getBool())+ " WHERE " + " checklist_rrn = " +
                    checklistItem.getChecklistRrn() + " and " + " checklist_version = " +
                    checklistItem.getChecklistVersion() + " and" + " checklist_sequence = " +
                    checklistItem.getChecklistSequence();

            String sqlh = "INSERT INTO " + DataBaseNames.CHECKLIST_ITEM_H + " (trans_rrn,checklist_rrn, " +
                    "checklist_version, checklist_sequence," + " checklist_item_id, checklist_item_desc, bor_rrn," + " " +
                    "data_type, upper_limit, lower_limit, parameter_set_rrn, unit, bool)" + " VALUES " + "(" +
                    transactionLog.getTransRrn() + "," + checklistItem.getChecklistRrn() + "," +
                    checklistItem.getChecklistVersion() + "," + checklistItem.getChecklistSequence() + "," +
                    MiscUtils.parseSQL(obj) + ")";

            jdbcTemplate.execute(sql);
            jdbcTemplate.execute(sqlh);
        }

        @Override
        public void changeChecklistItemSeq(long checklistRrn, long aSeq, long bSeq) {
            Long maxSeq = 9999999L;

            String sql = "update checklist_item set checklist_sequence = ? where checklist_rrn=?" + " and " +
                    "checklist_sequence = ? ";

            jdbcTemplate.update(sql, maxSeq, checklistRrn, aSeq);
            jdbcTemplate.update(sql, aSeq, checklistRrn, bSeq);
            jdbcTemplate.update(sql, bSeq, checklistRrn, maxSeq);
        }

        @Override
        public List<ChecklistItem> getChecklistJobItems(long checklistJobRrn, Long checklistRrn) {
            String sql = " SELECT checklist_rrn, checklist_version, checklist_sequence," + " checklist_item_id, " +
                    "checklist_item_desc, bor_rrn," + " data_type, upper_limit, lower_limit, parameter_set_rrn, unit, bool" + " FROM " +
                    "CHECKLIST_JOB_ITEM WHERE checklist_job_rrn=" + checklistJobRrn + " and checklist_rrn =" +
                    checklistRrn + " order by checklist_sequence";

            return jdbcTemplate.query(sql, (resultSet, rowNum) -> {
                ChecklistItem checklistItem = new ChecklistItem();
                checklistItem.setChecklistRrn(resultSet.getLong("checklist_rrn"));
                checklistItem.setChecklistVersion(resultSet.getInt("checklist_version"));
                checklistItem.setChecklistSequence(resultSet.getInt("checklist_sequence"));
                checklistItem.setChecklistItemId(resultSet.getString("checklist_item_id"));
                checklistItem.setChecklistItemDesc(resultSet.getString("checklist_item_desc"));
                checklistItem.setBorRrn(resultSet.getLong("bor_rrn"));
                checklistItem.setDataType(resultSet.getString("data_type"));
                checklistItem.setUpperLimit(resultSet.getDouble("upper_limit"));
                checklistItem.setLowerLimit(resultSet.getDouble("lower_limit"));
                checklistItem.setParameterSetRrn(resultSet.getLong("parameter_set_rrn"));
                checklistItem.setUnit(resultSet.getString("unit"));
                checklistItem.setBool(resultSet.getString("bool"));
                return checklistItem;
            });

        }

    }