package com.myzmds.ecp.core.standard.mq.delayed;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;

/**
 * @类名称 MessageDaoImpl.java
 * @类描述 <pre>消息数据接口实现类:依赖spring-jdbc框架,可替换</pre>
 * @作者  庄梦蝶殇 [email protected]
 * @创建时间 2019年12月25日 下午3:21:42
 * @版本 1.0.0
 *
 * @修改记录
 * <pre>
 *     版本                       修改人 		修改日期 		 修改内容描述
 *     ----------------------------------------------
 *     1.0.0 	       庄梦蝶殇 	2019年12月25日             
 *     ----------------------------------------------
 * </pre>
 */
public class MessageDaoImpl implements IMessageDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    public final static String SQL_INSERT = "INSERT INTO base_msg_delaye(id, subject, publish_time, content) VALUES (?, ?, ?, ?)";
    
    public final static String SQL_SELECT = "select * from base_msg_delaye where id in (%s)";
    
    public final static String SQL_DELETE = "delete base_msg_delaye where id in (%s)";
    
    @Override
    public void insert(Message queue) {
        this.jdbcTemplate.update(SQL_INSERT, new Object[] {queue.getId(), queue.getSubject(), queue.getPublishTime(), queue.getContent()});
    }
    
    @Override
    public List<Message> select(String[] ids) {
        List<Message> list = new ArrayList<Message>(ids.length);
        jdbcTemplate.query(String.format(SQL_SELECT, String.join(",", ids)), new RowCallbackHandler() {
            @Override
            public void processRow(ResultSet rs)
                throws SQLException {
                Message queue = new Message();
                queue.setId(rs.getString("id"));
                queue.setSubject(rs.getString("subject"));
                queue.setPublishTime(rs.getLong("publish_time"));
                queue.setContent(rs.getString("content"));
                list.add(queue);
            }
        });
        return list;
    }
    
    @Override
    public void delete(String[] ids) {
        this.jdbcTemplate.update(String.format(SQL_SELECT, String.join(",", ids)));
        
    }
}