package com.szpg.db.dao.impl; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import org.apache.log4j.Logger; import com.szpg.db.dao.PgO2Dao; import com.szpg.db.data.PgO2; import com.szpg.db.util.ConnectionManager; import com.szpg.util.NumberFormat; public class PgO2DaoImpl implements PgO2Dao { private final Logger logger = Logger.getLogger(this.getClass().getName()); @Override public List<PgO2> findAllPblz() { Connection conn = null; String queryStr = "SELECT ID, O2, LOGTIME, PGDEVICEID FROM PG_O2"; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); QueryRunner runner = new QueryRunner(); List<Object[]> tempList = (List<Object[]>) runner.query(conn, queryStr, new ArrayListHandler()); if (null != tempList && tempList.isEmpty() == false) { logger.debug("查询所有氧气监测值成功[" + tempList.size() + "]"); List<PgO2> list = new ArrayList<PgO2>(); for (int i = 0; i < tempList.size(); i++) { PgO2 o2 = new PgO2(); Object[] item = tempList.get(i); o2.setId(((Number) item[0]).intValue()); o2.setO2(Float.parseFloat((String) item[1])); o2.setPgdeviceid(((Number) item[3]).intValue()); long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(tmValue); o2.setLogtime(cal.getTime()); o2.setUptime(cal.getTime()); list.add(o2); } return list; } else return null; } catch (Exception ex) { logger.error("查询所有氧气监测值异常", ex); } finally { try { DbUtils.commitAndClose(conn); } catch (SQLException e) { e.printStackTrace(); } } return null; } @Override public PgO2 findPblzById(Integer id) { Connection conn = null; String queryStr = "SELECT ID, O2, LOGTIME, PGDEVICEID FROM PG_O2 WHERE ID = ?"; Object[] param = new Object[1]; param[0] = id; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); QueryRunner runner = new QueryRunner(); List<Object[]> tempList = (List<Object[]>) runner.query(conn, queryStr, new ArrayListHandler(), param); if (null != tempList && tempList.size() == 1) { PgO2 o2 = new PgO2(); Object[] item = tempList.get(0); o2.setId(((Number) item[0]).intValue()); o2.setO2(Float.parseFloat((String) item[1])); o2.setPgdeviceid(((Number) item[3]).intValue()); long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(tmValue); o2.setLogtime(cal.getTime()); o2.setUptime(cal.getTime()); logger.debug("根据ID查询氧气监测值成功" + o2 + "]"); return o2; } else return null; } catch (Exception ex) { logger.error("根据ID查询氧气监测值异常", ex); } finally { try { DbUtils.commitAndClose(conn); } catch (SQLException e) { e.printStackTrace(); } } return null; } @Override public PgO2 findLatestPblzByDevice(Integer deviceid) { Connection conn = null; String queryStr = "SELECT A.* FROM " + "(SELECT ID, O2, LOGTIME, PGDEVICEID FROM PG_O2 WHERE PGDEVICEID = ? ORDER BY LOGTIME DESC) A " + "WHERE ROWNUM <= 1"; Object[] param = new Object[1]; param[0] = deviceid; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); QueryRunner runner = new QueryRunner(); List<Object[]> tempList = (List<Object[]>) runner.query(conn, queryStr, new ArrayListHandler(), param); if (null != tempList && tempList.isEmpty() == false) { PgO2 o2 = new PgO2(); Object[] item = tempList.get(0); o2.setId(((Number) item[0]).intValue()); o2.setO2(Float.parseFloat((String) item[1])); o2.setPgdeviceid(((Number) item[3]).intValue()); long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(tmValue); o2.setLogtime(cal.getTime()); o2.setUptime(cal.getTime()); logger.debug("根据设备ID查询最新的氧气监测值成功" + o2 + "]"); return o2; } else return null; } catch (Exception ex) { logger.error("根据设备ID查询最新的硫化氢监测值异常", ex); } finally { try { DbUtils.commitAndClose(conn); } catch (SQLException e) { e.printStackTrace(); } } return null; } @Override public List<PgO2> findPblzByDevice(Integer deviceid) { Connection conn = null; String queryStr = "SELECT ID, O2, LOGTIME, PGDEVICEID FROM PG_O2 WHERE PGDEVICEID = ?"; Object[] param = new Object[1]; param[0] = deviceid; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); QueryRunner runner = new QueryRunner(); List<Object[]> tempList = (List<Object[]>) runner.query(conn, queryStr, new ArrayListHandler()); if (null != tempList && tempList.isEmpty() == false) { logger.debug("根据设备ID查询氧气监测值成功[" + tempList.size() + "]"); List<PgO2> list = new ArrayList<PgO2>(); for (int i = 0; i < tempList.size(); i++) { PgO2 o2 = new PgO2(); Object[] item = tempList.get(i); o2.setId(((Number) item[0]).intValue()); o2.setO2(Float.parseFloat((String) item[1])); o2.setPgdeviceid(((Number) item[3]).intValue()); long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(tmValue); o2.setLogtime(cal.getTime()); o2.setUptime(cal.getTime()); list.add(o2); } return list; } else return null; } catch (Exception ex) { logger.error("根据设备ID查询氧气监测值异常", ex); } finally { try { DbUtils.commitAndClose(conn); } catch (SQLException e) { e.printStackTrace(); } } return null; } @Override public List<PgO2> findPblzByDeviceAndTm(Integer deviceid, String start, String end) { Connection conn = null; String queryStr = "SELECT ID, O2, LOGTIME, PGDEVICEID FROM PG_O2 WHERE PGDEVICEID = ? AND LOGTIME >= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AND LOGTIME <= TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; Object[] params = new Object[3]; params[0] = deviceid; params[1] = start; params[2] = end; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); QueryRunner runner = new QueryRunner(); List<Object[]> tempList = (List<Object[]>) runner.query(conn, queryStr, new ArrayListHandler()); if (null != tempList && tempList.isEmpty() == false) { logger.debug("根据设备ID和时间查询氧气监测值成功[" + tempList.size() + "]"); List<PgO2> list = new ArrayList<PgO2>(); for (int i = 0; i < tempList.size(); i++) { PgO2 o2 = new PgO2(); Object[] item = tempList.get(i); o2.setId(((Number) item[0]).intValue()); o2.setO2(Float.parseFloat((String) item[1])); o2.setPgdeviceid(((Number) item[3]).intValue()); long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(tmValue); o2.setLogtime(cal.getTime()); o2.setUptime(cal.getTime()); list.add(o2); } return list; } else return null; } catch (Exception ex) { logger.error("根据设备ID和时间查询氧气监测值异常", ex); } finally { try { DbUtils.commitAndClose(conn); } catch (SQLException e) { e.printStackTrace(); } } return null; } @Override public double findLastValueByDevice(Integer deviceid) { Connection conn = null; String sql = "SELECT O2 FROM (SELECT * FROM PG_O2 WHERE PGDEVICEID = ? ORDER BY ID DESC) WHERE ROWNUM = 1"; Object[] param = new Object[1]; param[0] = deviceid; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); QueryRunner runner = new QueryRunner(); double value = NumberFormat.parseDouble((String) runner.query(conn, sql, new ScalarHandler<String>(1), param), "0.00"); return value; } catch (Exception ex) { logger.error("根据设备查询最近的氧气浓度值异常", ex); } finally { try { DbUtils.commitAndClose(conn); } catch (SQLException e) { e.printStackTrace(); } } return 0.0; } @Override public int addPblzRecord(PgO2 o2) { return addPblzRecord(o2.getO2(), o2.getTmStr(), o2.getPgdeviceid()); } @Override public int addPblzRecord(float value, String tm, int deviceid) { Connection conn = null; String insertStr = "INSERT INTO PG_O2 " + "(O2, LOGTIME, UPTIME, PGDEVICEID) " + "VALUES (?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; Object[] params = new Object[4]; params[0] = NumberFormat.format(value, "0.00"); params[1] = tm; params[2] = tm; params[3] = deviceid; try { conn = ConnectionManager.getConnectionFromC3P0(); conn.setAutoCommit(false); QueryRunner runner = new QueryRunner(); int count = runner.update(conn, insertStr, params); if (count > 0) logger.debug("插入氧气监测值成功[tm=" + tm + ", value=" + value + ", deviceid=" + deviceid + "]"); else logger.error("插入氧气监测值失败!"); return count; } catch (Exception ex) { logger.error("插入氧气监测值异常", ex); } finally { try { DbUtils.commitAndClose(conn); } catch (SQLException e) { e.printStackTrace(); } } return 0; } }