diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java new file mode 100644 index 0000000..9d693a8 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java @@ -0,0 +1,262 @@ +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.log4j.Logger; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.data.PgCh4; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; + +public class PgCh4DaoImpl implements PgCh4Dao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPblz() { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 PgCh4 findPblzById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(0); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + logger.debug("根据ID查询甲烷监测值成功" + ch4 + "]"); + + return ch4; + } + 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 findPblzByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 findPblzByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 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 tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 int addPblzRecord(PgCh4 ch4) { + return addPblzRecord(ch4.getCh4(), ch4.getTmStr(), ch4.getPgdeviceid()); + } + + @Override + public int addPblzRecord(float value, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_CH4 " + + "(CH4, 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; + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java new file mode 100644 index 0000000..9d693a8 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java @@ -0,0 +1,262 @@ +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.log4j.Logger; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.data.PgCh4; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; + +public class PgCh4DaoImpl implements PgCh4Dao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPblz() { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 PgCh4 findPblzById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(0); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + logger.debug("根据ID查询甲烷监测值成功" + ch4 + "]"); + + return ch4; + } + 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 findPblzByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 findPblzByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 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 tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 int addPblzRecord(PgCh4 ch4) { + return addPblzRecord(ch4.getCh4(), ch4.getTmStr(), ch4.getPgdeviceid()); + } + + @Override + public int addPblzRecord(float value, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_CH4 " + + "(CH4, 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; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java new file mode 100644 index 0000000..34be80b --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -0,0 +1,58 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ColumnListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.util.ConnectionManager; + +public class PgDeviceDaoImpl implements PgDeviceDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findCH4DeviceIdByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? ORDER BY D.ID"; + Object[] param = new Object[1]; + param[0] = dest; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + list.add(((Number) tempList.get(i)).intValue()); + } + + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java new file mode 100644 index 0000000..9d693a8 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java @@ -0,0 +1,262 @@ +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.log4j.Logger; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.data.PgCh4; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; + +public class PgCh4DaoImpl implements PgCh4Dao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPblz() { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 PgCh4 findPblzById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(0); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + logger.debug("根据ID查询甲烷监测值成功" + ch4 + "]"); + + return ch4; + } + 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 findPblzByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 findPblzByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 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 tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 int addPblzRecord(PgCh4 ch4) { + return addPblzRecord(ch4.getCh4(), ch4.getTmStr(), ch4.getPgdeviceid()); + } + + @Override + public int addPblzRecord(float value, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_CH4 " + + "(CH4, 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; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java new file mode 100644 index 0000000..34be80b --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -0,0 +1,58 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ColumnListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.util.ConnectionManager; + +public class PgDeviceDaoImpl implements PgDeviceDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findCH4DeviceIdByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? ORDER BY D.ID"; + Object[] param = new Object[1]; + param[0] = dest; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + list.add(((Number) tempList.get(i)).intValue()); + } + + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/com/szpg/db/data/PgCh4.java b/src/com/szpg/db/data/PgCh4.java new file mode 100644 index 0000000..d271acd --- /dev/null +++ b/src/com/szpg/db/data/PgCh4.java @@ -0,0 +1,91 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 甲烷浓度值监测数据表 + * + * @author admin + * + */ +public class PgCh4 implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Float ch4; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Float getCh4() { + return ch4; + } + + public void setCh4(Float ch4) { + this.ch4 = ch4; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + @Override + public String toString() { + return "PgCh4[ch4=" + ch4 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java new file mode 100644 index 0000000..9d693a8 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java @@ -0,0 +1,262 @@ +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.log4j.Logger; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.data.PgCh4; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; + +public class PgCh4DaoImpl implements PgCh4Dao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPblz() { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 PgCh4 findPblzById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(0); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + logger.debug("根据ID查询甲烷监测值成功" + ch4 + "]"); + + return ch4; + } + 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 findPblzByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 findPblzByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 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 tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 int addPblzRecord(PgCh4 ch4) { + return addPblzRecord(ch4.getCh4(), ch4.getTmStr(), ch4.getPgdeviceid()); + } + + @Override + public int addPblzRecord(float value, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_CH4 " + + "(CH4, 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; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java new file mode 100644 index 0000000..34be80b --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -0,0 +1,58 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ColumnListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.util.ConnectionManager; + +public class PgDeviceDaoImpl implements PgDeviceDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findCH4DeviceIdByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? ORDER BY D.ID"; + Object[] param = new Object[1]; + param[0] = dest; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + list.add(((Number) tempList.get(i)).intValue()); + } + + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/com/szpg/db/data/PgCh4.java b/src/com/szpg/db/data/PgCh4.java new file mode 100644 index 0000000..d271acd --- /dev/null +++ b/src/com/szpg/db/data/PgCh4.java @@ -0,0 +1,91 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 甲烷浓度值监测数据表 + * + * @author admin + * + */ +public class PgCh4 implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Float ch4; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Float getCh4() { + return ch4; + } + + public void setCh4(Float ch4) { + this.ch4 = ch4; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + @Override + public String toString() { + return "PgCh4[ch4=" + ch4 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuDaoTest.java b/src/com/szpg/db/test/PgAcuDaoTest.java new file mode 100644 index 0000000..07c8fbd --- /dev/null +++ b/src/com/szpg/db/test/PgAcuDaoTest.java @@ -0,0 +1,29 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; + +public class PgAcuDaoTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } + + @Test + public void testFindAllACU() { + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); + } +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java new file mode 100644 index 0000000..9d693a8 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java @@ -0,0 +1,262 @@ +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.log4j.Logger; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.data.PgCh4; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; + +public class PgCh4DaoImpl implements PgCh4Dao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPblz() { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 PgCh4 findPblzById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(0); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + logger.debug("根据ID查询甲烷监测值成功" + ch4 + "]"); + + return ch4; + } + 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 findPblzByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 findPblzByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 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 tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 int addPblzRecord(PgCh4 ch4) { + return addPblzRecord(ch4.getCh4(), ch4.getTmStr(), ch4.getPgdeviceid()); + } + + @Override + public int addPblzRecord(float value, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_CH4 " + + "(CH4, 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; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java new file mode 100644 index 0000000..34be80b --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -0,0 +1,58 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ColumnListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.util.ConnectionManager; + +public class PgDeviceDaoImpl implements PgDeviceDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findCH4DeviceIdByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? ORDER BY D.ID"; + Object[] param = new Object[1]; + param[0] = dest; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + list.add(((Number) tempList.get(i)).intValue()); + } + + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/com/szpg/db/data/PgCh4.java b/src/com/szpg/db/data/PgCh4.java new file mode 100644 index 0000000..d271acd --- /dev/null +++ b/src/com/szpg/db/data/PgCh4.java @@ -0,0 +1,91 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 甲烷浓度值监测数据表 + * + * @author admin + * + */ +public class PgCh4 implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Float ch4; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Float getCh4() { + return ch4; + } + + public void setCh4(Float ch4) { + this.ch4 = ch4; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + @Override + public String toString() { + return "PgCh4[ch4=" + ch4 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuDaoTest.java b/src/com/szpg/db/test/PgAcuDaoTest.java new file mode 100644 index 0000000..07c8fbd --- /dev/null +++ b/src/com/szpg/db/test/PgAcuDaoTest.java @@ -0,0 +1,29 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; + +public class PgAcuDaoTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } + + @Test + public void testFindAllACU() { + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java new file mode 100644 index 0000000..96dc762 --- /dev/null +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -0,0 +1,63 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.util.ByteUtil; + +public class PgAcuRdcmdDaoTest { + + private PgAcuRdcmdDao dao; + + @Before + public void init() { + dao = new PgAcuRdcmdDaoImpl(); + } + +// @Test + public void testAdd() { + ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); + ch4.setDestinationId("006B00"); + ch4.setMessageProducerId("00F400"); + ch4.setMemoryArea((byte) 0x82); + ch4.setStartAddress("012C00"); + ch4.setCount(24); + + + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4.getId()); + cmd.setTm(Calendar.getInstance().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); + cmd.setDest(ch4.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); + cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); + cmd.setCount_word(ch4.getCount()); + + assertEquals(1, dao.addCmdRecord(cmd)); + } + +// @Test + public void testFindAll() { + assertEquals(1, dao.findAll()); + } + + @Test + public void testFindByDestAndCount() { + assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); + } + + @Test + public void testUpdateResponsed() { + assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); + } +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java new file mode 100644 index 0000000..9d693a8 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java @@ -0,0 +1,262 @@ +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.log4j.Logger; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.data.PgCh4; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; + +public class PgCh4DaoImpl implements PgCh4Dao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPblz() { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 PgCh4 findPblzById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(0); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + logger.debug("根据ID查询甲烷监测值成功" + ch4 + "]"); + + return ch4; + } + 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 findPblzByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 findPblzByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 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 tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 int addPblzRecord(PgCh4 ch4) { + return addPblzRecord(ch4.getCh4(), ch4.getTmStr(), ch4.getPgdeviceid()); + } + + @Override + public int addPblzRecord(float value, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_CH4 " + + "(CH4, 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; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java new file mode 100644 index 0000000..34be80b --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -0,0 +1,58 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ColumnListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.util.ConnectionManager; + +public class PgDeviceDaoImpl implements PgDeviceDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findCH4DeviceIdByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? ORDER BY D.ID"; + Object[] param = new Object[1]; + param[0] = dest; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + list.add(((Number) tempList.get(i)).intValue()); + } + + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/com/szpg/db/data/PgCh4.java b/src/com/szpg/db/data/PgCh4.java new file mode 100644 index 0000000..d271acd --- /dev/null +++ b/src/com/szpg/db/data/PgCh4.java @@ -0,0 +1,91 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 甲烷浓度值监测数据表 + * + * @author admin + * + */ +public class PgCh4 implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Float ch4; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Float getCh4() { + return ch4; + } + + public void setCh4(Float ch4) { + this.ch4 = ch4; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + @Override + public String toString() { + return "PgCh4[ch4=" + ch4 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuDaoTest.java b/src/com/szpg/db/test/PgAcuDaoTest.java new file mode 100644 index 0000000..07c8fbd --- /dev/null +++ b/src/com/szpg/db/test/PgAcuDaoTest.java @@ -0,0 +1,29 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; + +public class PgAcuDaoTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } + + @Test + public void testFindAllACU() { + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java new file mode 100644 index 0000000..96dc762 --- /dev/null +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -0,0 +1,63 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.util.ByteUtil; + +public class PgAcuRdcmdDaoTest { + + private PgAcuRdcmdDao dao; + + @Before + public void init() { + dao = new PgAcuRdcmdDaoImpl(); + } + +// @Test + public void testAdd() { + ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); + ch4.setDestinationId("006B00"); + ch4.setMessageProducerId("00F400"); + ch4.setMemoryArea((byte) 0x82); + ch4.setStartAddress("012C00"); + ch4.setCount(24); + + + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4.getId()); + cmd.setTm(Calendar.getInstance().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); + cmd.setDest(ch4.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); + cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); + cmd.setCount_word(ch4.getCount()); + + assertEquals(1, dao.addCmdRecord(cmd)); + } + +// @Test + public void testFindAll() { + assertEquals(1, dao.findAll()); + } + + @Test + public void testFindByDestAndCount() { + assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); + } + + @Test + public void testUpdateResponsed() { + assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdTest.java b/src/com/szpg/db/test/PgAcuRdcmdTest.java deleted file mode 100644 index 97a7c98..0000000 --- a/src/com/szpg/db/test/PgAcuRdcmdTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import java.util.Calendar; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuRdcmdDao; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.util.ByteUtil; - -public class PgAcuRdcmdTest { - - private PgAcuRdcmdDao dao; - - @Before - public void init() { - dao = new PgAcuRdcmdDaoImpl(); - } - -// @Test - public void testAdd() { - ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(24); - - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(Calendar.getInstance().getTime()); - cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCount()); - - assertEquals(1, dao.addCmdRecord(cmd)); - } - -// @Test - public void testFindAll() { - assertEquals(1, dao.findAll()); - } - - @Test - public void testFindByDestAndCount() { - assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); - } -} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java new file mode 100644 index 0000000..9d693a8 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java @@ -0,0 +1,262 @@ +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.log4j.Logger; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.data.PgCh4; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; + +public class PgCh4DaoImpl implements PgCh4Dao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPblz() { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 PgCh4 findPblzById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(0); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + logger.debug("根据ID查询甲烷监测值成功" + ch4 + "]"); + + return ch4; + } + 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 findPblzByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 findPblzByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 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 tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 int addPblzRecord(PgCh4 ch4) { + return addPblzRecord(ch4.getCh4(), ch4.getTmStr(), ch4.getPgdeviceid()); + } + + @Override + public int addPblzRecord(float value, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_CH4 " + + "(CH4, 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; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java new file mode 100644 index 0000000..34be80b --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -0,0 +1,58 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ColumnListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.util.ConnectionManager; + +public class PgDeviceDaoImpl implements PgDeviceDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findCH4DeviceIdByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? ORDER BY D.ID"; + Object[] param = new Object[1]; + param[0] = dest; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + list.add(((Number) tempList.get(i)).intValue()); + } + + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/com/szpg/db/data/PgCh4.java b/src/com/szpg/db/data/PgCh4.java new file mode 100644 index 0000000..d271acd --- /dev/null +++ b/src/com/szpg/db/data/PgCh4.java @@ -0,0 +1,91 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 甲烷浓度值监测数据表 + * + * @author admin + * + */ +public class PgCh4 implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Float ch4; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Float getCh4() { + return ch4; + } + + public void setCh4(Float ch4) { + this.ch4 = ch4; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + @Override + public String toString() { + return "PgCh4[ch4=" + ch4 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuDaoTest.java b/src/com/szpg/db/test/PgAcuDaoTest.java new file mode 100644 index 0000000..07c8fbd --- /dev/null +++ b/src/com/szpg/db/test/PgAcuDaoTest.java @@ -0,0 +1,29 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; + +public class PgAcuDaoTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } + + @Test + public void testFindAllACU() { + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java new file mode 100644 index 0000000..96dc762 --- /dev/null +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -0,0 +1,63 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.util.ByteUtil; + +public class PgAcuRdcmdDaoTest { + + private PgAcuRdcmdDao dao; + + @Before + public void init() { + dao = new PgAcuRdcmdDaoImpl(); + } + +// @Test + public void testAdd() { + ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); + ch4.setDestinationId("006B00"); + ch4.setMessageProducerId("00F400"); + ch4.setMemoryArea((byte) 0x82); + ch4.setStartAddress("012C00"); + ch4.setCount(24); + + + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4.getId()); + cmd.setTm(Calendar.getInstance().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); + cmd.setDest(ch4.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); + cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); + cmd.setCount_word(ch4.getCount()); + + assertEquals(1, dao.addCmdRecord(cmd)); + } + +// @Test + public void testFindAll() { + assertEquals(1, dao.findAll()); + } + + @Test + public void testFindByDestAndCount() { + assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); + } + + @Test + public void testUpdateResponsed() { + assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdTest.java b/src/com/szpg/db/test/PgAcuRdcmdTest.java deleted file mode 100644 index 97a7c98..0000000 --- a/src/com/szpg/db/test/PgAcuRdcmdTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import java.util.Calendar; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuRdcmdDao; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.util.ByteUtil; - -public class PgAcuRdcmdTest { - - private PgAcuRdcmdDao dao; - - @Before - public void init() { - dao = new PgAcuRdcmdDaoImpl(); - } - -// @Test - public void testAdd() { - ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(24); - - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(Calendar.getInstance().getTime()); - cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCount()); - - assertEquals(1, dao.addCmdRecord(cmd)); - } - -// @Test - public void testFindAll() { - assertEquals(1, dao.findAll()); - } - - @Test - public void testFindByDestAndCount() { - assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); - } -} diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java deleted file mode 100644 index 4379704..0000000 --- a/src/com/szpg/db/test/PgAcuTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuDao; -import com.szpg.db.dao.impl.PgAcuDaoImpl; - -public class PgAcuTest { - - private PgAcuDao dao; - - @Before - public void init() { - dao = new PgAcuDaoImpl(); - } - - @Test - public void testFindAllACU() { - assertEquals(1, dao.findAllACU().size()); - } - - @Test - public void testFindById() { - assertEquals("6B", dao.findACUById(1).getAcu_node()); - } -} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java new file mode 100644 index 0000000..9d693a8 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java @@ -0,0 +1,262 @@ +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.log4j.Logger; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.data.PgCh4; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; + +public class PgCh4DaoImpl implements PgCh4Dao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPblz() { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 PgCh4 findPblzById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(0); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + logger.debug("根据ID查询甲烷监测值成功" + ch4 + "]"); + + return ch4; + } + 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 findPblzByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 findPblzByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 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 tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 int addPblzRecord(PgCh4 ch4) { + return addPblzRecord(ch4.getCh4(), ch4.getTmStr(), ch4.getPgdeviceid()); + } + + @Override + public int addPblzRecord(float value, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_CH4 " + + "(CH4, 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; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java new file mode 100644 index 0000000..34be80b --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -0,0 +1,58 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ColumnListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.util.ConnectionManager; + +public class PgDeviceDaoImpl implements PgDeviceDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findCH4DeviceIdByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? ORDER BY D.ID"; + Object[] param = new Object[1]; + param[0] = dest; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + list.add(((Number) tempList.get(i)).intValue()); + } + + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/com/szpg/db/data/PgCh4.java b/src/com/szpg/db/data/PgCh4.java new file mode 100644 index 0000000..d271acd --- /dev/null +++ b/src/com/szpg/db/data/PgCh4.java @@ -0,0 +1,91 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 甲烷浓度值监测数据表 + * + * @author admin + * + */ +public class PgCh4 implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Float ch4; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Float getCh4() { + return ch4; + } + + public void setCh4(Float ch4) { + this.ch4 = ch4; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + @Override + public String toString() { + return "PgCh4[ch4=" + ch4 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuDaoTest.java b/src/com/szpg/db/test/PgAcuDaoTest.java new file mode 100644 index 0000000..07c8fbd --- /dev/null +++ b/src/com/szpg/db/test/PgAcuDaoTest.java @@ -0,0 +1,29 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; + +public class PgAcuDaoTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } + + @Test + public void testFindAllACU() { + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java new file mode 100644 index 0000000..96dc762 --- /dev/null +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -0,0 +1,63 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.util.ByteUtil; + +public class PgAcuRdcmdDaoTest { + + private PgAcuRdcmdDao dao; + + @Before + public void init() { + dao = new PgAcuRdcmdDaoImpl(); + } + +// @Test + public void testAdd() { + ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); + ch4.setDestinationId("006B00"); + ch4.setMessageProducerId("00F400"); + ch4.setMemoryArea((byte) 0x82); + ch4.setStartAddress("012C00"); + ch4.setCount(24); + + + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4.getId()); + cmd.setTm(Calendar.getInstance().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); + cmd.setDest(ch4.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); + cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); + cmd.setCount_word(ch4.getCount()); + + assertEquals(1, dao.addCmdRecord(cmd)); + } + +// @Test + public void testFindAll() { + assertEquals(1, dao.findAll()); + } + + @Test + public void testFindByDestAndCount() { + assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); + } + + @Test + public void testUpdateResponsed() { + assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdTest.java b/src/com/szpg/db/test/PgAcuRdcmdTest.java deleted file mode 100644 index 97a7c98..0000000 --- a/src/com/szpg/db/test/PgAcuRdcmdTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import java.util.Calendar; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuRdcmdDao; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.util.ByteUtil; - -public class PgAcuRdcmdTest { - - private PgAcuRdcmdDao dao; - - @Before - public void init() { - dao = new PgAcuRdcmdDaoImpl(); - } - -// @Test - public void testAdd() { - ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(24); - - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(Calendar.getInstance().getTime()); - cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCount()); - - assertEquals(1, dao.addCmdRecord(cmd)); - } - -// @Test - public void testFindAll() { - assertEquals(1, dao.findAll()); - } - - @Test - public void testFindByDestAndCount() { - assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); - } -} diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java deleted file mode 100644 index 4379704..0000000 --- a/src/com/szpg/db/test/PgAcuTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuDao; -import com.szpg.db.dao.impl.PgAcuDaoImpl; - -public class PgAcuTest { - - private PgAcuDao dao; - - @Before - public void init() { - dao = new PgAcuDaoImpl(); - } - - @Test - public void testFindAllACU() { - assertEquals(1, dao.findAllACU().size()); - } - - @Test - public void testFindById() { - assertEquals("6B", dao.findACUById(1).getAcu_node()); - } -} diff --git a/src/com/szpg/db/test/PgCH4DaoTest.java b/src/com/szpg/db/test/PgCH4DaoTest.java new file mode 100644 index 0000000..8c1c49f --- /dev/null +++ b/src/com/szpg/db/test/PgCH4DaoTest.java @@ -0,0 +1,39 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.dao.impl.PgCh4DaoImpl; +import com.szpg.util.TimeFormat; + +public class PgCH4DaoTest { + + private PgCh4Dao dao; + + @Before + public void setUp() throws Exception { + dao = new PgCh4DaoImpl(); + } + +// @Test + public void testAddParamRecord() { + assertEquals(1, dao.addPblzRecord((float) 35.5, TimeFormat.formatTimestamp(Calendar.getInstance().getTime()), 1)); + } + + @Test + public void testFindAllParam() { + assertEquals("20180115131918", dao.findAllPblz().get(0).getTmStrGB()); + } + + @Test + public void testFindParamById() { + Assert.assertEquals(dao.findPblzById(1).getTmStrGB(), "20180115131918"); + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java new file mode 100644 index 0000000..9d693a8 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java @@ -0,0 +1,262 @@ +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.log4j.Logger; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.data.PgCh4; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; + +public class PgCh4DaoImpl implements PgCh4Dao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPblz() { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 PgCh4 findPblzById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(0); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + logger.debug("根据ID查询甲烷监测值成功" + ch4 + "]"); + + return ch4; + } + 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 findPblzByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 findPblzByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 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 tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 int addPblzRecord(PgCh4 ch4) { + return addPblzRecord(ch4.getCh4(), ch4.getTmStr(), ch4.getPgdeviceid()); + } + + @Override + public int addPblzRecord(float value, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_CH4 " + + "(CH4, 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; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java new file mode 100644 index 0000000..34be80b --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -0,0 +1,58 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ColumnListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.util.ConnectionManager; + +public class PgDeviceDaoImpl implements PgDeviceDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findCH4DeviceIdByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? ORDER BY D.ID"; + Object[] param = new Object[1]; + param[0] = dest; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + list.add(((Number) tempList.get(i)).intValue()); + } + + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/com/szpg/db/data/PgCh4.java b/src/com/szpg/db/data/PgCh4.java new file mode 100644 index 0000000..d271acd --- /dev/null +++ b/src/com/szpg/db/data/PgCh4.java @@ -0,0 +1,91 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 甲烷浓度值监测数据表 + * + * @author admin + * + */ +public class PgCh4 implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Float ch4; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Float getCh4() { + return ch4; + } + + public void setCh4(Float ch4) { + this.ch4 = ch4; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + @Override + public String toString() { + return "PgCh4[ch4=" + ch4 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuDaoTest.java b/src/com/szpg/db/test/PgAcuDaoTest.java new file mode 100644 index 0000000..07c8fbd --- /dev/null +++ b/src/com/szpg/db/test/PgAcuDaoTest.java @@ -0,0 +1,29 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; + +public class PgAcuDaoTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } + + @Test + public void testFindAllACU() { + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java new file mode 100644 index 0000000..96dc762 --- /dev/null +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -0,0 +1,63 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.util.ByteUtil; + +public class PgAcuRdcmdDaoTest { + + private PgAcuRdcmdDao dao; + + @Before + public void init() { + dao = new PgAcuRdcmdDaoImpl(); + } + +// @Test + public void testAdd() { + ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); + ch4.setDestinationId("006B00"); + ch4.setMessageProducerId("00F400"); + ch4.setMemoryArea((byte) 0x82); + ch4.setStartAddress("012C00"); + ch4.setCount(24); + + + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4.getId()); + cmd.setTm(Calendar.getInstance().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); + cmd.setDest(ch4.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); + cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); + cmd.setCount_word(ch4.getCount()); + + assertEquals(1, dao.addCmdRecord(cmd)); + } + +// @Test + public void testFindAll() { + assertEquals(1, dao.findAll()); + } + + @Test + public void testFindByDestAndCount() { + assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); + } + + @Test + public void testUpdateResponsed() { + assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdTest.java b/src/com/szpg/db/test/PgAcuRdcmdTest.java deleted file mode 100644 index 97a7c98..0000000 --- a/src/com/szpg/db/test/PgAcuRdcmdTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import java.util.Calendar; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuRdcmdDao; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.util.ByteUtil; - -public class PgAcuRdcmdTest { - - private PgAcuRdcmdDao dao; - - @Before - public void init() { - dao = new PgAcuRdcmdDaoImpl(); - } - -// @Test - public void testAdd() { - ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(24); - - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(Calendar.getInstance().getTime()); - cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCount()); - - assertEquals(1, dao.addCmdRecord(cmd)); - } - -// @Test - public void testFindAll() { - assertEquals(1, dao.findAll()); - } - - @Test - public void testFindByDestAndCount() { - assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); - } -} diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java deleted file mode 100644 index 4379704..0000000 --- a/src/com/szpg/db/test/PgAcuTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuDao; -import com.szpg.db.dao.impl.PgAcuDaoImpl; - -public class PgAcuTest { - - private PgAcuDao dao; - - @Before - public void init() { - dao = new PgAcuDaoImpl(); - } - - @Test - public void testFindAllACU() { - assertEquals(1, dao.findAllACU().size()); - } - - @Test - public void testFindById() { - assertEquals("6B", dao.findACUById(1).getAcu_node()); - } -} diff --git a/src/com/szpg/db/test/PgCH4DaoTest.java b/src/com/szpg/db/test/PgCH4DaoTest.java new file mode 100644 index 0000000..8c1c49f --- /dev/null +++ b/src/com/szpg/db/test/PgCH4DaoTest.java @@ -0,0 +1,39 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.dao.impl.PgCh4DaoImpl; +import com.szpg.util.TimeFormat; + +public class PgCH4DaoTest { + + private PgCh4Dao dao; + + @Before + public void setUp() throws Exception { + dao = new PgCh4DaoImpl(); + } + +// @Test + public void testAddParamRecord() { + assertEquals(1, dao.addPblzRecord((float) 35.5, TimeFormat.formatTimestamp(Calendar.getInstance().getTime()), 1)); + } + + @Test + public void testFindAllParam() { + assertEquals("20180115131918", dao.findAllPblz().get(0).getTmStrGB()); + } + + @Test + public void testFindParamById() { + Assert.assertEquals(dao.findPblzById(1).getTmStrGB(), "20180115131918"); + } + +} diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java new file mode 100644 index 0000000..1276bcc --- /dev/null +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -0,0 +1,24 @@ +package com.szpg.db.test; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; + +public class PgDeviceTest { + + private PgDeviceDao dao; + + @Before + public void setUp() throws Exception { + dao = new PgDeviceDaoImpl(); + } + + @Test + public void testFindCH4DeviceIdByDest() { + Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java new file mode 100644 index 0000000..9d693a8 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java @@ -0,0 +1,262 @@ +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.log4j.Logger; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.data.PgCh4; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; + +public class PgCh4DaoImpl implements PgCh4Dao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPblz() { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 PgCh4 findPblzById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(0); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + logger.debug("根据ID查询甲烷监测值成功" + ch4 + "]"); + + return ch4; + } + 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 findPblzByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 findPblzByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 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 tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 int addPblzRecord(PgCh4 ch4) { + return addPblzRecord(ch4.getCh4(), ch4.getTmStr(), ch4.getPgdeviceid()); + } + + @Override + public int addPblzRecord(float value, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_CH4 " + + "(CH4, 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; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java new file mode 100644 index 0000000..34be80b --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -0,0 +1,58 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ColumnListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.util.ConnectionManager; + +public class PgDeviceDaoImpl implements PgDeviceDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findCH4DeviceIdByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? ORDER BY D.ID"; + Object[] param = new Object[1]; + param[0] = dest; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + list.add(((Number) tempList.get(i)).intValue()); + } + + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/com/szpg/db/data/PgCh4.java b/src/com/szpg/db/data/PgCh4.java new file mode 100644 index 0000000..d271acd --- /dev/null +++ b/src/com/szpg/db/data/PgCh4.java @@ -0,0 +1,91 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 甲烷浓度值监测数据表 + * + * @author admin + * + */ +public class PgCh4 implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Float ch4; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Float getCh4() { + return ch4; + } + + public void setCh4(Float ch4) { + this.ch4 = ch4; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + @Override + public String toString() { + return "PgCh4[ch4=" + ch4 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuDaoTest.java b/src/com/szpg/db/test/PgAcuDaoTest.java new file mode 100644 index 0000000..07c8fbd --- /dev/null +++ b/src/com/szpg/db/test/PgAcuDaoTest.java @@ -0,0 +1,29 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; + +public class PgAcuDaoTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } + + @Test + public void testFindAllACU() { + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java new file mode 100644 index 0000000..96dc762 --- /dev/null +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -0,0 +1,63 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.util.ByteUtil; + +public class PgAcuRdcmdDaoTest { + + private PgAcuRdcmdDao dao; + + @Before + public void init() { + dao = new PgAcuRdcmdDaoImpl(); + } + +// @Test + public void testAdd() { + ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); + ch4.setDestinationId("006B00"); + ch4.setMessageProducerId("00F400"); + ch4.setMemoryArea((byte) 0x82); + ch4.setStartAddress("012C00"); + ch4.setCount(24); + + + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4.getId()); + cmd.setTm(Calendar.getInstance().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); + cmd.setDest(ch4.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); + cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); + cmd.setCount_word(ch4.getCount()); + + assertEquals(1, dao.addCmdRecord(cmd)); + } + +// @Test + public void testFindAll() { + assertEquals(1, dao.findAll()); + } + + @Test + public void testFindByDestAndCount() { + assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); + } + + @Test + public void testUpdateResponsed() { + assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdTest.java b/src/com/szpg/db/test/PgAcuRdcmdTest.java deleted file mode 100644 index 97a7c98..0000000 --- a/src/com/szpg/db/test/PgAcuRdcmdTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import java.util.Calendar; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuRdcmdDao; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.util.ByteUtil; - -public class PgAcuRdcmdTest { - - private PgAcuRdcmdDao dao; - - @Before - public void init() { - dao = new PgAcuRdcmdDaoImpl(); - } - -// @Test - public void testAdd() { - ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(24); - - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(Calendar.getInstance().getTime()); - cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCount()); - - assertEquals(1, dao.addCmdRecord(cmd)); - } - -// @Test - public void testFindAll() { - assertEquals(1, dao.findAll()); - } - - @Test - public void testFindByDestAndCount() { - assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); - } -} diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java deleted file mode 100644 index 4379704..0000000 --- a/src/com/szpg/db/test/PgAcuTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuDao; -import com.szpg.db.dao.impl.PgAcuDaoImpl; - -public class PgAcuTest { - - private PgAcuDao dao; - - @Before - public void init() { - dao = new PgAcuDaoImpl(); - } - - @Test - public void testFindAllACU() { - assertEquals(1, dao.findAllACU().size()); - } - - @Test - public void testFindById() { - assertEquals("6B", dao.findACUById(1).getAcu_node()); - } -} diff --git a/src/com/szpg/db/test/PgCH4DaoTest.java b/src/com/szpg/db/test/PgCH4DaoTest.java new file mode 100644 index 0000000..8c1c49f --- /dev/null +++ b/src/com/szpg/db/test/PgCH4DaoTest.java @@ -0,0 +1,39 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.dao.impl.PgCh4DaoImpl; +import com.szpg.util.TimeFormat; + +public class PgCH4DaoTest { + + private PgCh4Dao dao; + + @Before + public void setUp() throws Exception { + dao = new PgCh4DaoImpl(); + } + +// @Test + public void testAddParamRecord() { + assertEquals(1, dao.addPblzRecord((float) 35.5, TimeFormat.formatTimestamp(Calendar.getInstance().getTime()), 1)); + } + + @Test + public void testFindAllParam() { + assertEquals("20180115131918", dao.findAllPblz().get(0).getTmStrGB()); + } + + @Test + public void testFindParamById() { + Assert.assertEquals(dao.findPblzById(1).getTmStrGB(), "20180115131918"); + } + +} diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java new file mode 100644 index 0000000..1276bcc --- /dev/null +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -0,0 +1,24 @@ +package com.szpg.db.test; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; + +public class PgDeviceTest { + + private PgDeviceDao dao; + + @Before + public void setUp() throws Exception { + dao = new PgDeviceDaoImpl(); + } + + @Test + public void testFindCH4DeviceIdByDest() { + Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + } + +} diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 6539a1e..250ac62 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -14,7 +14,7 @@ private String destinationId; public CommandResponse() { - + this.setTime(Calendar.getInstance()); } public CommandResponse(Calendar time) { diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java new file mode 100644 index 0000000..9d693a8 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java @@ -0,0 +1,262 @@ +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.log4j.Logger; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.data.PgCh4; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; + +public class PgCh4DaoImpl implements PgCh4Dao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPblz() { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 PgCh4 findPblzById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(0); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + logger.debug("根据ID查询甲烷监测值成功" + ch4 + "]"); + + return ch4; + } + 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 findPblzByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 findPblzByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 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 tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 int addPblzRecord(PgCh4 ch4) { + return addPblzRecord(ch4.getCh4(), ch4.getTmStr(), ch4.getPgdeviceid()); + } + + @Override + public int addPblzRecord(float value, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_CH4 " + + "(CH4, 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; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java new file mode 100644 index 0000000..34be80b --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -0,0 +1,58 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ColumnListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.util.ConnectionManager; + +public class PgDeviceDaoImpl implements PgDeviceDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findCH4DeviceIdByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? ORDER BY D.ID"; + Object[] param = new Object[1]; + param[0] = dest; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + list.add(((Number) tempList.get(i)).intValue()); + } + + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/com/szpg/db/data/PgCh4.java b/src/com/szpg/db/data/PgCh4.java new file mode 100644 index 0000000..d271acd --- /dev/null +++ b/src/com/szpg/db/data/PgCh4.java @@ -0,0 +1,91 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 甲烷浓度值监测数据表 + * + * @author admin + * + */ +public class PgCh4 implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Float ch4; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Float getCh4() { + return ch4; + } + + public void setCh4(Float ch4) { + this.ch4 = ch4; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + @Override + public String toString() { + return "PgCh4[ch4=" + ch4 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuDaoTest.java b/src/com/szpg/db/test/PgAcuDaoTest.java new file mode 100644 index 0000000..07c8fbd --- /dev/null +++ b/src/com/szpg/db/test/PgAcuDaoTest.java @@ -0,0 +1,29 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; + +public class PgAcuDaoTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } + + @Test + public void testFindAllACU() { + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java new file mode 100644 index 0000000..96dc762 --- /dev/null +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -0,0 +1,63 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.util.ByteUtil; + +public class PgAcuRdcmdDaoTest { + + private PgAcuRdcmdDao dao; + + @Before + public void init() { + dao = new PgAcuRdcmdDaoImpl(); + } + +// @Test + public void testAdd() { + ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); + ch4.setDestinationId("006B00"); + ch4.setMessageProducerId("00F400"); + ch4.setMemoryArea((byte) 0x82); + ch4.setStartAddress("012C00"); + ch4.setCount(24); + + + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4.getId()); + cmd.setTm(Calendar.getInstance().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); + cmd.setDest(ch4.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); + cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); + cmd.setCount_word(ch4.getCount()); + + assertEquals(1, dao.addCmdRecord(cmd)); + } + +// @Test + public void testFindAll() { + assertEquals(1, dao.findAll()); + } + + @Test + public void testFindByDestAndCount() { + assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); + } + + @Test + public void testUpdateResponsed() { + assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdTest.java b/src/com/szpg/db/test/PgAcuRdcmdTest.java deleted file mode 100644 index 97a7c98..0000000 --- a/src/com/szpg/db/test/PgAcuRdcmdTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import java.util.Calendar; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuRdcmdDao; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.util.ByteUtil; - -public class PgAcuRdcmdTest { - - private PgAcuRdcmdDao dao; - - @Before - public void init() { - dao = new PgAcuRdcmdDaoImpl(); - } - -// @Test - public void testAdd() { - ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(24); - - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(Calendar.getInstance().getTime()); - cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCount()); - - assertEquals(1, dao.addCmdRecord(cmd)); - } - -// @Test - public void testFindAll() { - assertEquals(1, dao.findAll()); - } - - @Test - public void testFindByDestAndCount() { - assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); - } -} diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java deleted file mode 100644 index 4379704..0000000 --- a/src/com/szpg/db/test/PgAcuTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuDao; -import com.szpg.db.dao.impl.PgAcuDaoImpl; - -public class PgAcuTest { - - private PgAcuDao dao; - - @Before - public void init() { - dao = new PgAcuDaoImpl(); - } - - @Test - public void testFindAllACU() { - assertEquals(1, dao.findAllACU().size()); - } - - @Test - public void testFindById() { - assertEquals("6B", dao.findACUById(1).getAcu_node()); - } -} diff --git a/src/com/szpg/db/test/PgCH4DaoTest.java b/src/com/szpg/db/test/PgCH4DaoTest.java new file mode 100644 index 0000000..8c1c49f --- /dev/null +++ b/src/com/szpg/db/test/PgCH4DaoTest.java @@ -0,0 +1,39 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.dao.impl.PgCh4DaoImpl; +import com.szpg.util.TimeFormat; + +public class PgCH4DaoTest { + + private PgCh4Dao dao; + + @Before + public void setUp() throws Exception { + dao = new PgCh4DaoImpl(); + } + +// @Test + public void testAddParamRecord() { + assertEquals(1, dao.addPblzRecord((float) 35.5, TimeFormat.formatTimestamp(Calendar.getInstance().getTime()), 1)); + } + + @Test + public void testFindAllParam() { + assertEquals("20180115131918", dao.findAllPblz().get(0).getTmStrGB()); + } + + @Test + public void testFindParamById() { + Assert.assertEquals(dao.findPblzById(1).getTmStrGB(), "20180115131918"); + } + +} diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java new file mode 100644 index 0000000..1276bcc --- /dev/null +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -0,0 +1,24 @@ +package com.szpg.db.test; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; + +public class PgDeviceTest { + + private PgDeviceDao dao; + + @Before + public void setUp() throws Exception { + dao = new PgDeviceDaoImpl(); + } + + @Test + public void testFindCH4DeviceIdByDest() { + Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + } + +} diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 6539a1e..250ac62 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -14,7 +14,7 @@ private String destinationId; public CommandResponse() { - + this.setTime(Calendar.getInstance()); } public CommandResponse(Calendar time) { diff --git a/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java b/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java new file mode 100644 index 0000000..c6b0e18 --- /dev/null +++ b/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java @@ -0,0 +1,12 @@ +package com.szpg.plc.message.response; + +import com.szpg.plc.message.CommandResponse; + +public abstract class ReadMemoryCommandResponse extends CommandResponse { + + /** + * + */ + private static final long serialVersionUID = 6832502645108837925L; + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java new file mode 100644 index 0000000..9d693a8 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java @@ -0,0 +1,262 @@ +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.log4j.Logger; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.data.PgCh4; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; + +public class PgCh4DaoImpl implements PgCh4Dao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPblz() { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 PgCh4 findPblzById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(0); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + logger.debug("根据ID查询甲烷监测值成功" + ch4 + "]"); + + return ch4; + } + 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 findPblzByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 findPblzByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 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 tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 int addPblzRecord(PgCh4 ch4) { + return addPblzRecord(ch4.getCh4(), ch4.getTmStr(), ch4.getPgdeviceid()); + } + + @Override + public int addPblzRecord(float value, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_CH4 " + + "(CH4, 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; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java new file mode 100644 index 0000000..34be80b --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -0,0 +1,58 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ColumnListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.util.ConnectionManager; + +public class PgDeviceDaoImpl implements PgDeviceDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findCH4DeviceIdByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? ORDER BY D.ID"; + Object[] param = new Object[1]; + param[0] = dest; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + list.add(((Number) tempList.get(i)).intValue()); + } + + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/com/szpg/db/data/PgCh4.java b/src/com/szpg/db/data/PgCh4.java new file mode 100644 index 0000000..d271acd --- /dev/null +++ b/src/com/szpg/db/data/PgCh4.java @@ -0,0 +1,91 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 甲烷浓度值监测数据表 + * + * @author admin + * + */ +public class PgCh4 implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Float ch4; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Float getCh4() { + return ch4; + } + + public void setCh4(Float ch4) { + this.ch4 = ch4; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + @Override + public String toString() { + return "PgCh4[ch4=" + ch4 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuDaoTest.java b/src/com/szpg/db/test/PgAcuDaoTest.java new file mode 100644 index 0000000..07c8fbd --- /dev/null +++ b/src/com/szpg/db/test/PgAcuDaoTest.java @@ -0,0 +1,29 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; + +public class PgAcuDaoTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } + + @Test + public void testFindAllACU() { + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java new file mode 100644 index 0000000..96dc762 --- /dev/null +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -0,0 +1,63 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.util.ByteUtil; + +public class PgAcuRdcmdDaoTest { + + private PgAcuRdcmdDao dao; + + @Before + public void init() { + dao = new PgAcuRdcmdDaoImpl(); + } + +// @Test + public void testAdd() { + ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); + ch4.setDestinationId("006B00"); + ch4.setMessageProducerId("00F400"); + ch4.setMemoryArea((byte) 0x82); + ch4.setStartAddress("012C00"); + ch4.setCount(24); + + + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4.getId()); + cmd.setTm(Calendar.getInstance().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); + cmd.setDest(ch4.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); + cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); + cmd.setCount_word(ch4.getCount()); + + assertEquals(1, dao.addCmdRecord(cmd)); + } + +// @Test + public void testFindAll() { + assertEquals(1, dao.findAll()); + } + + @Test + public void testFindByDestAndCount() { + assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); + } + + @Test + public void testUpdateResponsed() { + assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdTest.java b/src/com/szpg/db/test/PgAcuRdcmdTest.java deleted file mode 100644 index 97a7c98..0000000 --- a/src/com/szpg/db/test/PgAcuRdcmdTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import java.util.Calendar; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuRdcmdDao; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.util.ByteUtil; - -public class PgAcuRdcmdTest { - - private PgAcuRdcmdDao dao; - - @Before - public void init() { - dao = new PgAcuRdcmdDaoImpl(); - } - -// @Test - public void testAdd() { - ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(24); - - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(Calendar.getInstance().getTime()); - cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCount()); - - assertEquals(1, dao.addCmdRecord(cmd)); - } - -// @Test - public void testFindAll() { - assertEquals(1, dao.findAll()); - } - - @Test - public void testFindByDestAndCount() { - assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); - } -} diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java deleted file mode 100644 index 4379704..0000000 --- a/src/com/szpg/db/test/PgAcuTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuDao; -import com.szpg.db.dao.impl.PgAcuDaoImpl; - -public class PgAcuTest { - - private PgAcuDao dao; - - @Before - public void init() { - dao = new PgAcuDaoImpl(); - } - - @Test - public void testFindAllACU() { - assertEquals(1, dao.findAllACU().size()); - } - - @Test - public void testFindById() { - assertEquals("6B", dao.findACUById(1).getAcu_node()); - } -} diff --git a/src/com/szpg/db/test/PgCH4DaoTest.java b/src/com/szpg/db/test/PgCH4DaoTest.java new file mode 100644 index 0000000..8c1c49f --- /dev/null +++ b/src/com/szpg/db/test/PgCH4DaoTest.java @@ -0,0 +1,39 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.dao.impl.PgCh4DaoImpl; +import com.szpg.util.TimeFormat; + +public class PgCH4DaoTest { + + private PgCh4Dao dao; + + @Before + public void setUp() throws Exception { + dao = new PgCh4DaoImpl(); + } + +// @Test + public void testAddParamRecord() { + assertEquals(1, dao.addPblzRecord((float) 35.5, TimeFormat.formatTimestamp(Calendar.getInstance().getTime()), 1)); + } + + @Test + public void testFindAllParam() { + assertEquals("20180115131918", dao.findAllPblz().get(0).getTmStrGB()); + } + + @Test + public void testFindParamById() { + Assert.assertEquals(dao.findPblzById(1).getTmStrGB(), "20180115131918"); + } + +} diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java new file mode 100644 index 0000000..1276bcc --- /dev/null +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -0,0 +1,24 @@ +package com.szpg.db.test; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; + +public class PgDeviceTest { + + private PgDeviceDao dao; + + @Before + public void setUp() throws Exception { + dao = new PgDeviceDaoImpl(); + } + + @Test + public void testFindCH4DeviceIdByDest() { + Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + } + +} diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 6539a1e..250ac62 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -14,7 +14,7 @@ private String destinationId; public CommandResponse() { - + this.setTime(Calendar.getInstance()); } public CommandResponse(Calendar time) { diff --git a/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java b/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java new file mode 100644 index 0000000..c6b0e18 --- /dev/null +++ b/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java @@ -0,0 +1,12 @@ +package com.szpg.plc.message.response; + +import com.szpg.plc.message.CommandResponse; + +public abstract class ReadMemoryCommandResponse extends CommandResponse { + + /** + * + */ + private static final long serialVersionUID = 6832502645108837925L; + +} diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java index 50fc608..3288409 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java @@ -3,9 +3,14 @@ import java.util.ArrayList; import java.util.List; -import com.szpg.plc.message.CommandResponse; +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgCh4DaoImpl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.util.TimeFormat; -public class ReadCH4ParamCommandResponse extends CommandResponse { +public class ReadCH4ParamCommandResponse extends ReadMemoryCommandResponse { /** * @@ -14,14 +19,10 @@ private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 - private List jwldsn; //甲烷联动使能 - private List jwldbj; //甲烷联动报警 public ReadCH4ParamCommandResponse() { jwnd = new ArrayList(); jwldbjz = new ArrayList(); - jwldsn = new ArrayList(); - jwldbj = new ArrayList(); } public List getJwnd() { @@ -40,26 +41,19 @@ this.jwldbjz = jwldbjz; } - public List getJwldsn() { - return jwldsn; - } - - public void setJwldsn(List jwldsn) { - this.jwldsn = jwldsn; - } - - public List getJwldbj() { - return jwldbj; - } - - public void setJwldbj(List jwldbj) { - this.jwldbj = jwldbj; - } - @Override public void afterAction() { - // TODO Auto-generated method stub - + // 1将甲烷浓度数据存入数据库 + PgCh4Dao ch4Dao = new PgCh4DaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + List ids = deviceDao.findCH4DeviceIdByDest(this.getMessageProducerId()); + + for (int i = 0; i < jwnd.size(); i++) { + if (i < ids.size()) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + } + } } } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java new file mode 100644 index 0000000..9d693a8 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java @@ -0,0 +1,262 @@ +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.log4j.Logger; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.data.PgCh4; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; + +public class PgCh4DaoImpl implements PgCh4Dao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPblz() { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 PgCh4 findPblzById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(0); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + logger.debug("根据ID查询甲烷监测值成功" + ch4 + "]"); + + return ch4; + } + 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 findPblzByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 findPblzByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 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 tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 int addPblzRecord(PgCh4 ch4) { + return addPblzRecord(ch4.getCh4(), ch4.getTmStr(), ch4.getPgdeviceid()); + } + + @Override + public int addPblzRecord(float value, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_CH4 " + + "(CH4, 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; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java new file mode 100644 index 0000000..34be80b --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -0,0 +1,58 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ColumnListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.util.ConnectionManager; + +public class PgDeviceDaoImpl implements PgDeviceDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findCH4DeviceIdByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? ORDER BY D.ID"; + Object[] param = new Object[1]; + param[0] = dest; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + list.add(((Number) tempList.get(i)).intValue()); + } + + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/com/szpg/db/data/PgCh4.java b/src/com/szpg/db/data/PgCh4.java new file mode 100644 index 0000000..d271acd --- /dev/null +++ b/src/com/szpg/db/data/PgCh4.java @@ -0,0 +1,91 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 甲烷浓度值监测数据表 + * + * @author admin + * + */ +public class PgCh4 implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Float ch4; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Float getCh4() { + return ch4; + } + + public void setCh4(Float ch4) { + this.ch4 = ch4; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + @Override + public String toString() { + return "PgCh4[ch4=" + ch4 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuDaoTest.java b/src/com/szpg/db/test/PgAcuDaoTest.java new file mode 100644 index 0000000..07c8fbd --- /dev/null +++ b/src/com/szpg/db/test/PgAcuDaoTest.java @@ -0,0 +1,29 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; + +public class PgAcuDaoTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } + + @Test + public void testFindAllACU() { + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java new file mode 100644 index 0000000..96dc762 --- /dev/null +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -0,0 +1,63 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.util.ByteUtil; + +public class PgAcuRdcmdDaoTest { + + private PgAcuRdcmdDao dao; + + @Before + public void init() { + dao = new PgAcuRdcmdDaoImpl(); + } + +// @Test + public void testAdd() { + ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); + ch4.setDestinationId("006B00"); + ch4.setMessageProducerId("00F400"); + ch4.setMemoryArea((byte) 0x82); + ch4.setStartAddress("012C00"); + ch4.setCount(24); + + + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4.getId()); + cmd.setTm(Calendar.getInstance().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); + cmd.setDest(ch4.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); + cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); + cmd.setCount_word(ch4.getCount()); + + assertEquals(1, dao.addCmdRecord(cmd)); + } + +// @Test + public void testFindAll() { + assertEquals(1, dao.findAll()); + } + + @Test + public void testFindByDestAndCount() { + assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); + } + + @Test + public void testUpdateResponsed() { + assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdTest.java b/src/com/szpg/db/test/PgAcuRdcmdTest.java deleted file mode 100644 index 97a7c98..0000000 --- a/src/com/szpg/db/test/PgAcuRdcmdTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import java.util.Calendar; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuRdcmdDao; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.util.ByteUtil; - -public class PgAcuRdcmdTest { - - private PgAcuRdcmdDao dao; - - @Before - public void init() { - dao = new PgAcuRdcmdDaoImpl(); - } - -// @Test - public void testAdd() { - ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(24); - - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(Calendar.getInstance().getTime()); - cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCount()); - - assertEquals(1, dao.addCmdRecord(cmd)); - } - -// @Test - public void testFindAll() { - assertEquals(1, dao.findAll()); - } - - @Test - public void testFindByDestAndCount() { - assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); - } -} diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java deleted file mode 100644 index 4379704..0000000 --- a/src/com/szpg/db/test/PgAcuTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuDao; -import com.szpg.db.dao.impl.PgAcuDaoImpl; - -public class PgAcuTest { - - private PgAcuDao dao; - - @Before - public void init() { - dao = new PgAcuDaoImpl(); - } - - @Test - public void testFindAllACU() { - assertEquals(1, dao.findAllACU().size()); - } - - @Test - public void testFindById() { - assertEquals("6B", dao.findACUById(1).getAcu_node()); - } -} diff --git a/src/com/szpg/db/test/PgCH4DaoTest.java b/src/com/szpg/db/test/PgCH4DaoTest.java new file mode 100644 index 0000000..8c1c49f --- /dev/null +++ b/src/com/szpg/db/test/PgCH4DaoTest.java @@ -0,0 +1,39 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.dao.impl.PgCh4DaoImpl; +import com.szpg.util.TimeFormat; + +public class PgCH4DaoTest { + + private PgCh4Dao dao; + + @Before + public void setUp() throws Exception { + dao = new PgCh4DaoImpl(); + } + +// @Test + public void testAddParamRecord() { + assertEquals(1, dao.addPblzRecord((float) 35.5, TimeFormat.formatTimestamp(Calendar.getInstance().getTime()), 1)); + } + + @Test + public void testFindAllParam() { + assertEquals("20180115131918", dao.findAllPblz().get(0).getTmStrGB()); + } + + @Test + public void testFindParamById() { + Assert.assertEquals(dao.findPblzById(1).getTmStrGB(), "20180115131918"); + } + +} diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java new file mode 100644 index 0000000..1276bcc --- /dev/null +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -0,0 +1,24 @@ +package com.szpg.db.test; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; + +public class PgDeviceTest { + + private PgDeviceDao dao; + + @Before + public void setUp() throws Exception { + dao = new PgDeviceDaoImpl(); + } + + @Test + public void testFindCH4DeviceIdByDest() { + Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + } + +} diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 6539a1e..250ac62 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -14,7 +14,7 @@ private String destinationId; public CommandResponse() { - + this.setTime(Calendar.getInstance()); } public CommandResponse(Calendar time) { diff --git a/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java b/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java new file mode 100644 index 0000000..c6b0e18 --- /dev/null +++ b/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java @@ -0,0 +1,12 @@ +package com.szpg.plc.message.response; + +import com.szpg.plc.message.CommandResponse; + +public abstract class ReadMemoryCommandResponse extends CommandResponse { + + /** + * + */ + private static final long serialVersionUID = 6832502645108837925L; + +} diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java index 50fc608..3288409 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java @@ -3,9 +3,14 @@ import java.util.ArrayList; import java.util.List; -import com.szpg.plc.message.CommandResponse; +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgCh4DaoImpl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.util.TimeFormat; -public class ReadCH4ParamCommandResponse extends CommandResponse { +public class ReadCH4ParamCommandResponse extends ReadMemoryCommandResponse { /** * @@ -14,14 +19,10 @@ private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 - private List jwldsn; //甲烷联动使能 - private List jwldbj; //甲烷联动报警 public ReadCH4ParamCommandResponse() { jwnd = new ArrayList(); jwldbjz = new ArrayList(); - jwldsn = new ArrayList(); - jwldbj = new ArrayList(); } public List getJwnd() { @@ -40,26 +41,19 @@ this.jwldbjz = jwldbjz; } - public List getJwldsn() { - return jwldsn; - } - - public void setJwldsn(List jwldsn) { - this.jwldsn = jwldsn; - } - - public List getJwldbj() { - return jwldbj; - } - - public void setJwldbj(List jwldbj) { - this.jwldbj = jwldbj; - } - @Override public void afterAction() { - // TODO Auto-generated method stub - + // 1将甲烷浓度数据存入数据库 + PgCh4Dao ch4Dao = new PgCh4DaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + List ids = deviceDao.findCH4DeviceIdByDest(this.getMessageProducerId()); + + for (int i = 0; i < jwnd.size(); i++) { + if (i < ids.size()) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + } + } } } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 101eb07..b0bb4a3 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -72,6 +72,10 @@ case AppMessageConstants.CMD_TYPE_READCH4PARAM: received = bytesToReadCH4ParamCommand(finsFrame); } + + // 4将有效的命令的是否有响应字段置1 + readCmdDao.updateCmdRecordResponsed(readCmd.getId()); + } } else if (commandCode.equalsIgnoreCase("0102")) { // 写内存命令响应 @@ -292,6 +296,7 @@ ReadCH4ParamCommandResponse rcpcr = new ReadCH4ParamCommandResponse(); byte[] body = finsFrame.TEXT_DATA_BODY; + rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java new file mode 100644 index 0000000..9d693a8 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java @@ -0,0 +1,262 @@ +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.log4j.Logger; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.data.PgCh4; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; + +public class PgCh4DaoImpl implements PgCh4Dao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPblz() { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 PgCh4 findPblzById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(0); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + logger.debug("根据ID查询甲烷监测值成功" + ch4 + "]"); + + return ch4; + } + 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 findPblzByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 findPblzByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 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 tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 int addPblzRecord(PgCh4 ch4) { + return addPblzRecord(ch4.getCh4(), ch4.getTmStr(), ch4.getPgdeviceid()); + } + + @Override + public int addPblzRecord(float value, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_CH4 " + + "(CH4, 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; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java new file mode 100644 index 0000000..34be80b --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -0,0 +1,58 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ColumnListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.util.ConnectionManager; + +public class PgDeviceDaoImpl implements PgDeviceDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findCH4DeviceIdByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? ORDER BY D.ID"; + Object[] param = new Object[1]; + param[0] = dest; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + list.add(((Number) tempList.get(i)).intValue()); + } + + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/com/szpg/db/data/PgCh4.java b/src/com/szpg/db/data/PgCh4.java new file mode 100644 index 0000000..d271acd --- /dev/null +++ b/src/com/szpg/db/data/PgCh4.java @@ -0,0 +1,91 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 甲烷浓度值监测数据表 + * + * @author admin + * + */ +public class PgCh4 implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Float ch4; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Float getCh4() { + return ch4; + } + + public void setCh4(Float ch4) { + this.ch4 = ch4; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + @Override + public String toString() { + return "PgCh4[ch4=" + ch4 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuDaoTest.java b/src/com/szpg/db/test/PgAcuDaoTest.java new file mode 100644 index 0000000..07c8fbd --- /dev/null +++ b/src/com/szpg/db/test/PgAcuDaoTest.java @@ -0,0 +1,29 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; + +public class PgAcuDaoTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } + + @Test + public void testFindAllACU() { + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java new file mode 100644 index 0000000..96dc762 --- /dev/null +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -0,0 +1,63 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.util.ByteUtil; + +public class PgAcuRdcmdDaoTest { + + private PgAcuRdcmdDao dao; + + @Before + public void init() { + dao = new PgAcuRdcmdDaoImpl(); + } + +// @Test + public void testAdd() { + ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); + ch4.setDestinationId("006B00"); + ch4.setMessageProducerId("00F400"); + ch4.setMemoryArea((byte) 0x82); + ch4.setStartAddress("012C00"); + ch4.setCount(24); + + + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4.getId()); + cmd.setTm(Calendar.getInstance().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); + cmd.setDest(ch4.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); + cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); + cmd.setCount_word(ch4.getCount()); + + assertEquals(1, dao.addCmdRecord(cmd)); + } + +// @Test + public void testFindAll() { + assertEquals(1, dao.findAll()); + } + + @Test + public void testFindByDestAndCount() { + assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); + } + + @Test + public void testUpdateResponsed() { + assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdTest.java b/src/com/szpg/db/test/PgAcuRdcmdTest.java deleted file mode 100644 index 97a7c98..0000000 --- a/src/com/szpg/db/test/PgAcuRdcmdTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import java.util.Calendar; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuRdcmdDao; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.util.ByteUtil; - -public class PgAcuRdcmdTest { - - private PgAcuRdcmdDao dao; - - @Before - public void init() { - dao = new PgAcuRdcmdDaoImpl(); - } - -// @Test - public void testAdd() { - ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(24); - - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(Calendar.getInstance().getTime()); - cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCount()); - - assertEquals(1, dao.addCmdRecord(cmd)); - } - -// @Test - public void testFindAll() { - assertEquals(1, dao.findAll()); - } - - @Test - public void testFindByDestAndCount() { - assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); - } -} diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java deleted file mode 100644 index 4379704..0000000 --- a/src/com/szpg/db/test/PgAcuTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuDao; -import com.szpg.db.dao.impl.PgAcuDaoImpl; - -public class PgAcuTest { - - private PgAcuDao dao; - - @Before - public void init() { - dao = new PgAcuDaoImpl(); - } - - @Test - public void testFindAllACU() { - assertEquals(1, dao.findAllACU().size()); - } - - @Test - public void testFindById() { - assertEquals("6B", dao.findACUById(1).getAcu_node()); - } -} diff --git a/src/com/szpg/db/test/PgCH4DaoTest.java b/src/com/szpg/db/test/PgCH4DaoTest.java new file mode 100644 index 0000000..8c1c49f --- /dev/null +++ b/src/com/szpg/db/test/PgCH4DaoTest.java @@ -0,0 +1,39 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.dao.impl.PgCh4DaoImpl; +import com.szpg.util.TimeFormat; + +public class PgCH4DaoTest { + + private PgCh4Dao dao; + + @Before + public void setUp() throws Exception { + dao = new PgCh4DaoImpl(); + } + +// @Test + public void testAddParamRecord() { + assertEquals(1, dao.addPblzRecord((float) 35.5, TimeFormat.formatTimestamp(Calendar.getInstance().getTime()), 1)); + } + + @Test + public void testFindAllParam() { + assertEquals("20180115131918", dao.findAllPblz().get(0).getTmStrGB()); + } + + @Test + public void testFindParamById() { + Assert.assertEquals(dao.findPblzById(1).getTmStrGB(), "20180115131918"); + } + +} diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java new file mode 100644 index 0000000..1276bcc --- /dev/null +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -0,0 +1,24 @@ +package com.szpg.db.test; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; + +public class PgDeviceTest { + + private PgDeviceDao dao; + + @Before + public void setUp() throws Exception { + dao = new PgDeviceDaoImpl(); + } + + @Test + public void testFindCH4DeviceIdByDest() { + Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + } + +} diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 6539a1e..250ac62 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -14,7 +14,7 @@ private String destinationId; public CommandResponse() { - + this.setTime(Calendar.getInstance()); } public CommandResponse(Calendar time) { diff --git a/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java b/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java new file mode 100644 index 0000000..c6b0e18 --- /dev/null +++ b/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java @@ -0,0 +1,12 @@ +package com.szpg.plc.message.response; + +import com.szpg.plc.message.CommandResponse; + +public abstract class ReadMemoryCommandResponse extends CommandResponse { + + /** + * + */ + private static final long serialVersionUID = 6832502645108837925L; + +} diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java index 50fc608..3288409 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java @@ -3,9 +3,14 @@ import java.util.ArrayList; import java.util.List; -import com.szpg.plc.message.CommandResponse; +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgCh4DaoImpl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.util.TimeFormat; -public class ReadCH4ParamCommandResponse extends CommandResponse { +public class ReadCH4ParamCommandResponse extends ReadMemoryCommandResponse { /** * @@ -14,14 +19,10 @@ private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 - private List jwldsn; //甲烷联动使能 - private List jwldbj; //甲烷联动报警 public ReadCH4ParamCommandResponse() { jwnd = new ArrayList(); jwldbjz = new ArrayList(); - jwldsn = new ArrayList(); - jwldbj = new ArrayList(); } public List getJwnd() { @@ -40,26 +41,19 @@ this.jwldbjz = jwldbjz; } - public List getJwldsn() { - return jwldsn; - } - - public void setJwldsn(List jwldsn) { - this.jwldsn = jwldsn; - } - - public List getJwldbj() { - return jwldbj; - } - - public void setJwldbj(List jwldbj) { - this.jwldbj = jwldbj; - } - @Override public void afterAction() { - // TODO Auto-generated method stub - + // 1将甲烷浓度数据存入数据库 + PgCh4Dao ch4Dao = new PgCh4DaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + List ids = deviceDao.findCH4DeviceIdByDest(this.getMessageProducerId()); + + for (int i = 0; i < jwnd.size(); i++) { + if (i < ids.size()) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + } + } } } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 101eb07..b0bb4a3 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -72,6 +72,10 @@ case AppMessageConstants.CMD_TYPE_READCH4PARAM: received = bytesToReadCH4ParamCommand(finsFrame); } + + // 4将有效的命令的是否有响应字段置1 + readCmdDao.updateCmdRecordResponsed(readCmd.getId()); + } } else if (commandCode.equalsIgnoreCase("0102")) { // 写内存命令响应 @@ -292,6 +296,7 @@ ReadCH4ParamCommandResponse rcpcr = new ReadCH4ParamCommandResponse(); byte[] body = finsFrame.TEXT_DATA_BODY; + rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index d319e9f..639359e 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -249,6 +249,16 @@ // 为控制域赋值 this.TEXT_CONTROL_BODY = ctrlBytes.toBytes(); + this.TEXT_CONTROL_ICF = this.TEXT_CONTROL_BODY[0]; + this.TEXT_CONTROL_RSV = FINSConstants.RSV; + this.TEXT_CONTROL_GCT = FINSConstants.GCT; + this.TEXT_CONTROL_DNA = this.TEXT_CONTROL_BODY[3]; + this.TEXT_CONTROL_DA1 = this.TEXT_CONTROL_BODY[4]; + this.TEXT_CONTROL_DA2 = this.TEXT_CONTROL_BODY[5]; + this.TEXT_CONTROL_SNA = this.TEXT_CONTROL_BODY[6]; + this.TEXT_CONTROL_SA1 = this.TEXT_CONTROL_BODY[7]; + this.TEXT_CONTROL_SA2 = this.TEXT_CONTROL_BODY[8]; + this.TEXT_CONTROL_SID = this.TEXT_CONTROL_BODY[9]; return true; } diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java new file mode 100644 index 0000000..9d693a8 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java @@ -0,0 +1,262 @@ +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.log4j.Logger; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.data.PgCh4; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; + +public class PgCh4DaoImpl implements PgCh4Dao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPblz() { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 PgCh4 findPblzById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(0); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + logger.debug("根据ID查询甲烷监测值成功" + ch4 + "]"); + + return ch4; + } + 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 findPblzByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 findPblzByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 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 tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 int addPblzRecord(PgCh4 ch4) { + return addPblzRecord(ch4.getCh4(), ch4.getTmStr(), ch4.getPgdeviceid()); + } + + @Override + public int addPblzRecord(float value, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_CH4 " + + "(CH4, 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; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java new file mode 100644 index 0000000..34be80b --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -0,0 +1,58 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ColumnListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.util.ConnectionManager; + +public class PgDeviceDaoImpl implements PgDeviceDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findCH4DeviceIdByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? ORDER BY D.ID"; + Object[] param = new Object[1]; + param[0] = dest; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + list.add(((Number) tempList.get(i)).intValue()); + } + + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/com/szpg/db/data/PgCh4.java b/src/com/szpg/db/data/PgCh4.java new file mode 100644 index 0000000..d271acd --- /dev/null +++ b/src/com/szpg/db/data/PgCh4.java @@ -0,0 +1,91 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 甲烷浓度值监测数据表 + * + * @author admin + * + */ +public class PgCh4 implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Float ch4; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Float getCh4() { + return ch4; + } + + public void setCh4(Float ch4) { + this.ch4 = ch4; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + @Override + public String toString() { + return "PgCh4[ch4=" + ch4 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuDaoTest.java b/src/com/szpg/db/test/PgAcuDaoTest.java new file mode 100644 index 0000000..07c8fbd --- /dev/null +++ b/src/com/szpg/db/test/PgAcuDaoTest.java @@ -0,0 +1,29 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; + +public class PgAcuDaoTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } + + @Test + public void testFindAllACU() { + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java new file mode 100644 index 0000000..96dc762 --- /dev/null +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -0,0 +1,63 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.util.ByteUtil; + +public class PgAcuRdcmdDaoTest { + + private PgAcuRdcmdDao dao; + + @Before + public void init() { + dao = new PgAcuRdcmdDaoImpl(); + } + +// @Test + public void testAdd() { + ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); + ch4.setDestinationId("006B00"); + ch4.setMessageProducerId("00F400"); + ch4.setMemoryArea((byte) 0x82); + ch4.setStartAddress("012C00"); + ch4.setCount(24); + + + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4.getId()); + cmd.setTm(Calendar.getInstance().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); + cmd.setDest(ch4.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); + cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); + cmd.setCount_word(ch4.getCount()); + + assertEquals(1, dao.addCmdRecord(cmd)); + } + +// @Test + public void testFindAll() { + assertEquals(1, dao.findAll()); + } + + @Test + public void testFindByDestAndCount() { + assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); + } + + @Test + public void testUpdateResponsed() { + assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdTest.java b/src/com/szpg/db/test/PgAcuRdcmdTest.java deleted file mode 100644 index 97a7c98..0000000 --- a/src/com/szpg/db/test/PgAcuRdcmdTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import java.util.Calendar; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuRdcmdDao; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.util.ByteUtil; - -public class PgAcuRdcmdTest { - - private PgAcuRdcmdDao dao; - - @Before - public void init() { - dao = new PgAcuRdcmdDaoImpl(); - } - -// @Test - public void testAdd() { - ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(24); - - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(Calendar.getInstance().getTime()); - cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCount()); - - assertEquals(1, dao.addCmdRecord(cmd)); - } - -// @Test - public void testFindAll() { - assertEquals(1, dao.findAll()); - } - - @Test - public void testFindByDestAndCount() { - assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); - } -} diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java deleted file mode 100644 index 4379704..0000000 --- a/src/com/szpg/db/test/PgAcuTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuDao; -import com.szpg.db.dao.impl.PgAcuDaoImpl; - -public class PgAcuTest { - - private PgAcuDao dao; - - @Before - public void init() { - dao = new PgAcuDaoImpl(); - } - - @Test - public void testFindAllACU() { - assertEquals(1, dao.findAllACU().size()); - } - - @Test - public void testFindById() { - assertEquals("6B", dao.findACUById(1).getAcu_node()); - } -} diff --git a/src/com/szpg/db/test/PgCH4DaoTest.java b/src/com/szpg/db/test/PgCH4DaoTest.java new file mode 100644 index 0000000..8c1c49f --- /dev/null +++ b/src/com/szpg/db/test/PgCH4DaoTest.java @@ -0,0 +1,39 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.dao.impl.PgCh4DaoImpl; +import com.szpg.util.TimeFormat; + +public class PgCH4DaoTest { + + private PgCh4Dao dao; + + @Before + public void setUp() throws Exception { + dao = new PgCh4DaoImpl(); + } + +// @Test + public void testAddParamRecord() { + assertEquals(1, dao.addPblzRecord((float) 35.5, TimeFormat.formatTimestamp(Calendar.getInstance().getTime()), 1)); + } + + @Test + public void testFindAllParam() { + assertEquals("20180115131918", dao.findAllPblz().get(0).getTmStrGB()); + } + + @Test + public void testFindParamById() { + Assert.assertEquals(dao.findPblzById(1).getTmStrGB(), "20180115131918"); + } + +} diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java new file mode 100644 index 0000000..1276bcc --- /dev/null +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -0,0 +1,24 @@ +package com.szpg.db.test; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; + +public class PgDeviceTest { + + private PgDeviceDao dao; + + @Before + public void setUp() throws Exception { + dao = new PgDeviceDaoImpl(); + } + + @Test + public void testFindCH4DeviceIdByDest() { + Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + } + +} diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 6539a1e..250ac62 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -14,7 +14,7 @@ private String destinationId; public CommandResponse() { - + this.setTime(Calendar.getInstance()); } public CommandResponse(Calendar time) { diff --git a/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java b/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java new file mode 100644 index 0000000..c6b0e18 --- /dev/null +++ b/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java @@ -0,0 +1,12 @@ +package com.szpg.plc.message.response; + +import com.szpg.plc.message.CommandResponse; + +public abstract class ReadMemoryCommandResponse extends CommandResponse { + + /** + * + */ + private static final long serialVersionUID = 6832502645108837925L; + +} diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java index 50fc608..3288409 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java @@ -3,9 +3,14 @@ import java.util.ArrayList; import java.util.List; -import com.szpg.plc.message.CommandResponse; +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgCh4DaoImpl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.util.TimeFormat; -public class ReadCH4ParamCommandResponse extends CommandResponse { +public class ReadCH4ParamCommandResponse extends ReadMemoryCommandResponse { /** * @@ -14,14 +19,10 @@ private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 - private List jwldsn; //甲烷联动使能 - private List jwldbj; //甲烷联动报警 public ReadCH4ParamCommandResponse() { jwnd = new ArrayList(); jwldbjz = new ArrayList(); - jwldsn = new ArrayList(); - jwldbj = new ArrayList(); } public List getJwnd() { @@ -40,26 +41,19 @@ this.jwldbjz = jwldbjz; } - public List getJwldsn() { - return jwldsn; - } - - public void setJwldsn(List jwldsn) { - this.jwldsn = jwldsn; - } - - public List getJwldbj() { - return jwldbj; - } - - public void setJwldbj(List jwldbj) { - this.jwldbj = jwldbj; - } - @Override public void afterAction() { - // TODO Auto-generated method stub - + // 1将甲烷浓度数据存入数据库 + PgCh4Dao ch4Dao = new PgCh4DaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + List ids = deviceDao.findCH4DeviceIdByDest(this.getMessageProducerId()); + + for (int i = 0; i < jwnd.size(); i++) { + if (i < ids.size()) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + } + } } } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 101eb07..b0bb4a3 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -72,6 +72,10 @@ case AppMessageConstants.CMD_TYPE_READCH4PARAM: received = bytesToReadCH4ParamCommand(finsFrame); } + + // 4将有效的命令的是否有响应字段置1 + readCmdDao.updateCmdRecordResponsed(readCmd.getId()); + } } else if (commandCode.equalsIgnoreCase("0102")) { // 写内存命令响应 @@ -292,6 +296,7 @@ ReadCH4ParamCommandResponse rcpcr = new ReadCH4ParamCommandResponse(); byte[] body = finsFrame.TEXT_DATA_BODY; + rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index d319e9f..639359e 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -249,6 +249,16 @@ // 为控制域赋值 this.TEXT_CONTROL_BODY = ctrlBytes.toBytes(); + this.TEXT_CONTROL_ICF = this.TEXT_CONTROL_BODY[0]; + this.TEXT_CONTROL_RSV = FINSConstants.RSV; + this.TEXT_CONTROL_GCT = FINSConstants.GCT; + this.TEXT_CONTROL_DNA = this.TEXT_CONTROL_BODY[3]; + this.TEXT_CONTROL_DA1 = this.TEXT_CONTROL_BODY[4]; + this.TEXT_CONTROL_DA2 = this.TEXT_CONTROL_BODY[5]; + this.TEXT_CONTROL_SNA = this.TEXT_CONTROL_BODY[6]; + this.TEXT_CONTROL_SA1 = this.TEXT_CONTROL_BODY[7]; + this.TEXT_CONTROL_SA2 = this.TEXT_CONTROL_BODY[8]; + this.TEXT_CONTROL_SID = this.TEXT_CONTROL_BODY[9]; return true; } diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java index 1d0d324..10be9db 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java @@ -10,15 +10,15 @@ * 获取数据帧的长度字 * 位于整个消息帧的5-8字节 * - * @param finsFrame + * @param finsBytes * @return */ - public static byte[] getFrameLength(byte[] finsFrame) { - if (finsFrame.length < 8) { + public static byte[] getFrameLength(byte[] finsBytes) { + if (finsBytes.length < 8) { return new byte[] {0x00, 0x00, 0x00, 0x00}; } - byte[] lengthByte = new byte[] {finsFrame[4], finsFrame[5], finsFrame[6], finsFrame[7]}; + byte[] lengthByte = new byte[] {finsBytes[4], finsBytes[5], finsBytes[6], finsBytes[7]}; return lengthByte; } @@ -26,57 +26,57 @@ * 获取帧的功能码 * 位于整个消息帧的9-12字节 * - * @param finsFrame + * @param finsBytes * @return */ - public static String getCommandStr(byte[] finsFrame) { - if (finsFrame.length < 12) { + public static String getCommandStr(byte[] finsBytes) { + if (finsBytes.length < 12) { return ""; } - return ByteUtil.binToHexString(finsFrame, 16, 24); + return ByteUtil.binToHexString(finsBytes, 16, 24); } /** * 获取帧的错误代码 * 位于整个消息帧的13-16字节 * - * @param finsFrame + * @param finsBytes * @return */ - public static String getErrorCodeStr(byte[] finsFrame) { - if (finsFrame.length < 16) { + public static String getErrorCodeStr(byte[] finsBytes) { + if (finsBytes.length < 16) { return ""; } - return ByteUtil.binToHexString(finsFrame, 24, 32); + return ByteUtil.binToHexString(finsBytes, 24, 32); } /** * 获取帧的TEXT域数据 * 代表用户数据 * - * @param finsFrame + * @param finsBytes * @return */ - public static String getTextStr(byte[] finsFrame) { - return ByteUtil.binToHexString(getText(finsFrame)); + public static String getTextStr(byte[] finsBytes) { + return ByteUtil.binToHexString(getText(finsBytes)); } /** * 获取帧的TEXT域数据 * - * @param finsFrame + * @param finsBytes * @return */ - public static byte[] getText(byte[] finsFrame) { - if (finsFrame.length < 16) { + public static byte[] getText(byte[] finsBytes) { + if (finsBytes.length < 16) { return null; } Bytes textBytes = new Bytes(); - for (int i = 16; i < finsFrame.length; i++) { - textBytes.append(finsFrame[i]); + for (int i = 16; i < finsBytes.length; i++) { + textBytes.append(finsBytes[i]); } return textBytes.toBytes(); @@ -87,11 +87,11 @@ * 位于TEXT区的第一个字节 * 如果是握手响应消息则没有该字节 * - * @param finsFrame + * @param finsBytes * @return */ - public static String getControlICF(byte[] finsFrame) { - byte[] text = getText(finsFrame); + public static String getControlICF(byte[] finsBytes) { + byte[] text = getText(finsBytes); if (null != text && text.length > 10) return ByteUtil.binToHexString(new byte[] {text[0]}); @@ -103,11 +103,11 @@ * 获取目标地址字符串 * 目标地址=目标网络号+目标节点号+目标单元号 * - * @param finsFrame + * @param finsBytes * @return */ - public static String getControlDest(byte[] finsFrame) { - byte[] text = getText(finsFrame); + public static String getControlDest(byte[] finsBytes) { + byte[] text = getText(finsBytes); if (null != text && text.length > 10) return ByteUtil.binToHexString(new byte[] {text[3], text[4], text[5]}); @@ -116,14 +116,26 @@ } /** - * 获取源地址字符串 - * 源地址=源网络号+源节点号+源单元号 + * 获取目标地址字符串 + * 目标地址=目标网络号+目标节点号+目标单元号 + * 从frame对象中获取 * * @param finsFrame * @return */ - public static String getControlSour(byte[] finsFrame) { - byte[] text = getText(finsFrame); + public static String getControlDest(FINSByteFrame finsFrame) { + return ByteUtil.binToHexString(new byte[] {finsFrame.TEXT_CONTROL_SNA, finsFrame.TEXT_CONTROL_SA1, finsFrame.TEXT_CONTROL_SA2}); + } + + /** + * 获取源地址字符串 + * 源地址=源网络号+源节点号+源单元号 + * + * @param finsBytes + * @return + */ + public static String getControlSour(byte[] finsBytes) { + byte[] text = getText(finsBytes); if (null != text && text.length > 10) return ByteUtil.binToHexString(new byte[] {text[6], text[7], text[8]}); @@ -135,11 +147,11 @@ * 获取命令代码 * 0x0101=读取内存,0x0102=写内存 * - * @param finsFrame + * @param finsBytes * @return */ - public static String getFinsCommandCode(byte[] finsFrame) { - byte[] text = getText(finsFrame); + public static String getFinsCommandCode(byte[] finsBytes) { + byte[] text = getText(finsBytes); if (null != text && text.length >= 10) return ByteUtil.binToHexString(new byte[] {text[10], text[11]}); @@ -151,11 +163,11 @@ * 获取读取的数据内容 * 不包括END CODE * - * @param finsFrame + * @param finsBytes * @return */ - public static byte[] getDataWithoutEndCode(byte[] finsFrame) { - byte[] text = getText(finsFrame); + public static byte[] getDataWithoutEndCode(byte[] finsBytes) { + byte[] text = getText(finsBytes); if (null != text && text.length > 12) { Bytes dataBody = new Bytes(); @@ -192,11 +204,11 @@ /** * 获取包含END CODE在内的用户数据域 * - * @param finsFrame + * @param finsBytes * @return */ - public static byte[] getDataWithEndCode(byte[] finsFrame) { - byte[] text = getText(finsFrame); + public static byte[] getDataWithEndCode(byte[] finsBytes) { + byte[] text = getText(finsBytes); if (null != text && text.length > 20) { Bytes dataBody = new Bytes(); diff --git a/src/ACUBL.properties b/src/ACUBL.properties index dafeb10..d3be57b 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -1,3 +1,3 @@ #ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 YXL.ACU001.DCH.START = 0300 -YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file +YXL.ACU001.DCH.COUNT = 48 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java index b2762f4..d99c991 100644 --- a/src/com/szpg/db/dao/PgAcuRdcmdDao.java +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -12,4 +12,5 @@ public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); public int addCmdRecord(PgAcuRdcmd cmd); + public int updateCmdRecordResponsed(String cmdId); } diff --git a/src/com/szpg/db/dao/PgCh4Dao.java b/src/com/szpg/db/dao/PgCh4Dao.java new file mode 100644 index 0000000..e5e8175 --- /dev/null +++ b/src/com/szpg/db/dao/PgCh4Dao.java @@ -0,0 +1,22 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgCh4; + +/** + * 甲烷相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgCh4Dao { + + public List findAllPblz(); + public PgCh4 findPblzById(Integer id); + + public List findPblzByDevice(Integer deviceid); + public List findPblzByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPblzRecord(PgCh4 ch4); + public int addPblzRecord(float value, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/PgDeviceDao.java b/src/com/szpg/db/dao/PgDeviceDao.java new file mode 100644 index 0000000..0e98558 --- /dev/null +++ b/src/com/szpg/db/dao/PgDeviceDao.java @@ -0,0 +1,8 @@ +package com.szpg.db.dao; + +import java.util.List; + +public interface PgDeviceDao { + + public List findCH4DeviceIdByDest(String dest); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java index a3432bd..3db493e 100644 --- a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -157,4 +157,37 @@ return 0; } + @Override + public int updateCmdRecordResponsed(String cmdId) { + Connection conn = null; + + String updateStr = "UPDATE PG_ACU_RDCMD SET RESPONSED = '1' WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = cmdId; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, updateStr, param); + + if (count > 0) + logger.debug("更新读取命令已响应字段成功" + cmdId); + else + logger.error("更新读取命令已响应字段失败!"); + + return count; + } catch (Exception ex) { + logger.error("更新读取命令已响应字段异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return 0; + } + } diff --git a/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java new file mode 100644 index 0000000..9d693a8 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgCh4DaoImpl.java @@ -0,0 +1,262 @@ +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.log4j.Logger; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.data.PgCh4; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; + +public class PgCh4DaoImpl implements PgCh4Dao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPblz() { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("查询所有甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 PgCh4 findPblzById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler(), param); + + if (null != tempList && tempList.size() == 1) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(0); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + logger.debug("根据ID查询甲烷监测值成功" + ch4 + "]"); + + return ch4; + } + 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 findPblzByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 WHERE PGDEVICEID = ?"; + Object[] param = new Object[1]; + param[0] = deviceid; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 findPblzByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, CH4, LOGTIME, PGDEVICEID FROM PG_CH4 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 tempList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据设备ID和时间查询甲烷监测值成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + PgCh4 ch4 = new PgCh4(); + Object[] item = tempList.get(i); + + ch4.setId(((Number) item[0]).intValue()); + ch4.setCh4(Float.parseFloat((String) item[1])); + ch4.setPgdeviceid(((Number) item[3]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[2]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + ch4.setLogtime(cal.getTime()); + ch4.setUptime(cal.getTime()); + + list.add(ch4); + } + 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 int addPblzRecord(PgCh4 ch4) { + return addPblzRecord(ch4.getCh4(), ch4.getTmStr(), ch4.getPgdeviceid()); + } + + @Override + public int addPblzRecord(float value, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_CH4 " + + "(CH4, 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; + } + +} diff --git a/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java new file mode 100644 index 0000000..34be80b --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgDeviceDaoImpl.java @@ -0,0 +1,58 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ColumnListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.util.ConnectionManager; + +public class PgDeviceDaoImpl implements PgDeviceDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findCH4DeviceIdByDest(String dest) { + Connection conn = null; + + String queryStr = "SELECT D.ID FROM PG_DEVICE D, PG_ACU A WHERE D.PARTITION = A.ACU_CODE AND A.ACU_DEST = ? ORDER BY D.ID"; + Object[] param = new Object[1]; + param[0] = dest; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List tempList = (List) runner.query(conn, queryStr, new ColumnListHandler(), param); + + if (null != tempList && tempList.isEmpty() == false) { + logger.debug("根据ACU的目的地址查询甲烷设备ID成功[" + tempList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < tempList.size(); i++) { + list.add(((Number) tempList.get(i)).intValue()); + } + + return list; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ACU的目的地址查询甲烷设备ID异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + +} diff --git a/src/com/szpg/db/data/PgCh4.java b/src/com/szpg/db/data/PgCh4.java new file mode 100644 index 0000000..d271acd --- /dev/null +++ b/src/com/szpg/db/data/PgCh4.java @@ -0,0 +1,91 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 甲烷浓度值监测数据表 + * + * @author admin + * + */ +public class PgCh4 implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Float ch4; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Float getCh4() { + return ch4; + } + + public void setCh4(Float ch4) { + this.ch4 = ch4; + } + + public Date getLogtime() { + return logtime; + } + + public void setLogtime(Date logtime) { + this.logtime = logtime; + } + + public Date getUptime() { + return uptime; + } + + public void setUptime(Date uptime) { + this.uptime = uptime; + } + + public void setTm(Date tm) { + this.logtime = tm; + this.uptime = tm; + } + + public String getTmStr() { + if (null != this.logtime) { + return TimeFormat.formatTimestamp(logtime); + } else { + return ""; + } + } + + public String getTmStrGB() { + if (null != this.logtime) { + return TimeFormat.format(logtime, "yyyyMMddHHmmss"); + } else { + return ""; + } + } + + public Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + @Override + public String toString() { + return "PgCh4[ch4=" + ch4 + ", logtime=" + TimeFormat.formatTimestamp(logtime) + "]"; + } +} diff --git a/src/com/szpg/db/test/PgAcuDaoTest.java b/src/com/szpg/db/test/PgAcuDaoTest.java new file mode 100644 index 0000000..07c8fbd --- /dev/null +++ b/src/com/szpg/db/test/PgAcuDaoTest.java @@ -0,0 +1,29 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; + +public class PgAcuDaoTest { + + private PgAcuDao dao; + + @Before + public void init() { + dao = new PgAcuDaoImpl(); + } + + @Test + public void testFindAllACU() { + assertEquals(1, dao.findAllACU().size()); + } + + @Test + public void testFindById() { + assertEquals("6B", dao.findACUById(1).getAcu_node()); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java new file mode 100644 index 0000000..96dc762 --- /dev/null +++ b/src/com/szpg/db/test/PgAcuRdcmdDaoTest.java @@ -0,0 +1,63 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.util.ByteUtil; + +public class PgAcuRdcmdDaoTest { + + private PgAcuRdcmdDao dao; + + @Before + public void init() { + dao = new PgAcuRdcmdDaoImpl(); + } + +// @Test + public void testAdd() { + ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); + ch4.setDestinationId("006B00"); + ch4.setMessageProducerId("00F400"); + ch4.setMemoryArea((byte) 0x82); + ch4.setStartAddress("012C00"); + ch4.setCount(24); + + + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4.getId()); + cmd.setTm(Calendar.getInstance().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); + cmd.setDest(ch4.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); + cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); + cmd.setCount_word(ch4.getCount()); + + assertEquals(1, dao.addCmdRecord(cmd)); + } + +// @Test + public void testFindAll() { + assertEquals(1, dao.findAll()); + } + + @Test + public void testFindByDestAndCount() { + assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); + } + + @Test + public void testUpdateResponsed() { + assertEquals(1, dao.updateCmdRecordResponsed("23ff9e2987e64f248823254f0dfe1528")); + } +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdTest.java b/src/com/szpg/db/test/PgAcuRdcmdTest.java deleted file mode 100644 index 97a7c98..0000000 --- a/src/com/szpg/db/test/PgAcuRdcmdTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import java.util.Calendar; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuRdcmdDao; -import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; -import com.szpg.db.data.PgAcuRdcmd; -import com.szpg.plc.message.AppMessageConstants; -import com.szpg.plc.message.command.read.ReadCH4ParamCommand; -import com.szpg.plc.util.ByteUtil; - -public class PgAcuRdcmdTest { - - private PgAcuRdcmdDao dao; - - @Before - public void init() { - dao = new PgAcuRdcmdDaoImpl(); - } - -// @Test - public void testAdd() { - ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); - ch4.setDestinationId("006B00"); - ch4.setMessageProducerId("00F400"); - ch4.setMemoryArea((byte) 0x82); - ch4.setStartAddress("012C00"); - ch4.setCount(24); - - - PgAcuRdcmd cmd = new PgAcuRdcmd(); - cmd.setId(ch4.getId()); - cmd.setTm(Calendar.getInstance().getTime()); - cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); - cmd.setDest(ch4.getDestinationId()); - cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); - cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); - cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); - cmd.setCount_word(ch4.getCount()); - - assertEquals(1, dao.addCmdRecord(cmd)); - } - -// @Test - public void testFindAll() { - assertEquals(1, dao.findAll()); - } - - @Test - public void testFindByDestAndCount() { - assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); - } -} diff --git a/src/com/szpg/db/test/PgAcuTest.java b/src/com/szpg/db/test/PgAcuTest.java deleted file mode 100644 index 4379704..0000000 --- a/src/com/szpg/db/test/PgAcuTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.szpg.db.test; - -import static org.junit.Assert.assertEquals; - -import org.junit.Before; -import org.junit.Test; - -import com.szpg.db.dao.PgAcuDao; -import com.szpg.db.dao.impl.PgAcuDaoImpl; - -public class PgAcuTest { - - private PgAcuDao dao; - - @Before - public void init() { - dao = new PgAcuDaoImpl(); - } - - @Test - public void testFindAllACU() { - assertEquals(1, dao.findAllACU().size()); - } - - @Test - public void testFindById() { - assertEquals("6B", dao.findACUById(1).getAcu_node()); - } -} diff --git a/src/com/szpg/db/test/PgCH4DaoTest.java b/src/com/szpg/db/test/PgCH4DaoTest.java new file mode 100644 index 0000000..8c1c49f --- /dev/null +++ b/src/com/szpg/db/test/PgCH4DaoTest.java @@ -0,0 +1,39 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.dao.impl.PgCh4DaoImpl; +import com.szpg.util.TimeFormat; + +public class PgCH4DaoTest { + + private PgCh4Dao dao; + + @Before + public void setUp() throws Exception { + dao = new PgCh4DaoImpl(); + } + +// @Test + public void testAddParamRecord() { + assertEquals(1, dao.addPblzRecord((float) 35.5, TimeFormat.formatTimestamp(Calendar.getInstance().getTime()), 1)); + } + + @Test + public void testFindAllParam() { + assertEquals("20180115131918", dao.findAllPblz().get(0).getTmStrGB()); + } + + @Test + public void testFindParamById() { + Assert.assertEquals(dao.findPblzById(1).getTmStrGB(), "20180115131918"); + } + +} diff --git a/src/com/szpg/db/test/PgDeviceTest.java b/src/com/szpg/db/test/PgDeviceTest.java new file mode 100644 index 0000000..1276bcc --- /dev/null +++ b/src/com/szpg/db/test/PgDeviceTest.java @@ -0,0 +1,24 @@ +package com.szpg.db.test; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; + +public class PgDeviceTest { + + private PgDeviceDao dao; + + @Before + public void setUp() throws Exception { + dao = new PgDeviceDaoImpl(); + } + + @Test + public void testFindCH4DeviceIdByDest() { + Assert.assertEquals(2, dao.findCH4DeviceIdByDest("006B00").get(1).intValue()); + } + +} diff --git a/src/com/szpg/plc/message/CommandResponse.java b/src/com/szpg/plc/message/CommandResponse.java index 6539a1e..250ac62 100644 --- a/src/com/szpg/plc/message/CommandResponse.java +++ b/src/com/szpg/plc/message/CommandResponse.java @@ -14,7 +14,7 @@ private String destinationId; public CommandResponse() { - + this.setTime(Calendar.getInstance()); } public CommandResponse(Calendar time) { diff --git a/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java b/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java new file mode 100644 index 0000000..c6b0e18 --- /dev/null +++ b/src/com/szpg/plc/message/response/ReadMemoryCommandResponse.java @@ -0,0 +1,12 @@ +package com.szpg.plc.message.response; + +import com.szpg.plc.message.CommandResponse; + +public abstract class ReadMemoryCommandResponse extends CommandResponse { + + /** + * + */ + private static final long serialVersionUID = 6832502645108837925L; + +} diff --git a/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java index 50fc608..3288409 100644 --- a/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java +++ b/src/com/szpg/plc/message/response/read/ReadCH4ParamCommandResponse.java @@ -3,9 +3,14 @@ import java.util.ArrayList; import java.util.List; -import com.szpg.plc.message.CommandResponse; +import com.szpg.db.dao.PgCh4Dao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.impl.PgCh4DaoImpl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.util.TimeFormat; -public class ReadCH4ParamCommandResponse extends CommandResponse { +public class ReadCH4ParamCommandResponse extends ReadMemoryCommandResponse { /** * @@ -14,14 +19,10 @@ private List jwnd; //甲烷浓度值 private List jwldbjz; //甲烷联动报警值 - private List jwldsn; //甲烷联动使能 - private List jwldbj; //甲烷联动报警 public ReadCH4ParamCommandResponse() { jwnd = new ArrayList(); jwldbjz = new ArrayList(); - jwldsn = new ArrayList(); - jwldbj = new ArrayList(); } public List getJwnd() { @@ -40,26 +41,19 @@ this.jwldbjz = jwldbjz; } - public List getJwldsn() { - return jwldsn; - } - - public void setJwldsn(List jwldsn) { - this.jwldsn = jwldsn; - } - - public List getJwldbj() { - return jwldbj; - } - - public void setJwldbj(List jwldbj) { - this.jwldbj = jwldbj; - } - @Override public void afterAction() { - // TODO Auto-generated method stub - + // 1将甲烷浓度数据存入数据库 + PgCh4Dao ch4Dao = new PgCh4DaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + List ids = deviceDao.findCH4DeviceIdByDest(this.getMessageProducerId()); + + for (int i = 0; i < jwnd.size(); i++) { + if (i < ids.size()) { + ch4Dao.addPblzRecord(jwnd.get(i), TimeFormat.formatTimestamp(this.getTime().getTime()), ids.get(i)); + } + } } } diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 101eb07..b0bb4a3 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -72,6 +72,10 @@ case AppMessageConstants.CMD_TYPE_READCH4PARAM: received = bytesToReadCH4ParamCommand(finsFrame); } + + // 4将有效的命令的是否有响应字段置1 + readCmdDao.updateCmdRecordResponsed(readCmd.getId()); + } } else if (commandCode.equalsIgnoreCase("0102")) { // 写内存命令响应 @@ -292,6 +296,7 @@ ReadCH4ParamCommandResponse rcpcr = new ReadCH4ParamCommandResponse(); byte[] body = finsFrame.TEXT_DATA_BODY; + rcpcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); if (body[2] == 0x00 && body[3] == 0x00) { // 正常返回 byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java index d319e9f..639359e 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrame.java @@ -249,6 +249,16 @@ // 为控制域赋值 this.TEXT_CONTROL_BODY = ctrlBytes.toBytes(); + this.TEXT_CONTROL_ICF = this.TEXT_CONTROL_BODY[0]; + this.TEXT_CONTROL_RSV = FINSConstants.RSV; + this.TEXT_CONTROL_GCT = FINSConstants.GCT; + this.TEXT_CONTROL_DNA = this.TEXT_CONTROL_BODY[3]; + this.TEXT_CONTROL_DA1 = this.TEXT_CONTROL_BODY[4]; + this.TEXT_CONTROL_DA2 = this.TEXT_CONTROL_BODY[5]; + this.TEXT_CONTROL_SNA = this.TEXT_CONTROL_BODY[6]; + this.TEXT_CONTROL_SA1 = this.TEXT_CONTROL_BODY[7]; + this.TEXT_CONTROL_SA2 = this.TEXT_CONTROL_BODY[8]; + this.TEXT_CONTROL_SID = this.TEXT_CONTROL_BODY[9]; return true; } diff --git a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java index 1d0d324..10be9db 100644 --- a/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java +++ b/src/com/szpg/plc/protocol/fins/frame/FINSByteFrameTool.java @@ -10,15 +10,15 @@ * 获取数据帧的长度字 * 位于整个消息帧的5-8字节 * - * @param finsFrame + * @param finsBytes * @return */ - public static byte[] getFrameLength(byte[] finsFrame) { - if (finsFrame.length < 8) { + public static byte[] getFrameLength(byte[] finsBytes) { + if (finsBytes.length < 8) { return new byte[] {0x00, 0x00, 0x00, 0x00}; } - byte[] lengthByte = new byte[] {finsFrame[4], finsFrame[5], finsFrame[6], finsFrame[7]}; + byte[] lengthByte = new byte[] {finsBytes[4], finsBytes[5], finsBytes[6], finsBytes[7]}; return lengthByte; } @@ -26,57 +26,57 @@ * 获取帧的功能码 * 位于整个消息帧的9-12字节 * - * @param finsFrame + * @param finsBytes * @return */ - public static String getCommandStr(byte[] finsFrame) { - if (finsFrame.length < 12) { + public static String getCommandStr(byte[] finsBytes) { + if (finsBytes.length < 12) { return ""; } - return ByteUtil.binToHexString(finsFrame, 16, 24); + return ByteUtil.binToHexString(finsBytes, 16, 24); } /** * 获取帧的错误代码 * 位于整个消息帧的13-16字节 * - * @param finsFrame + * @param finsBytes * @return */ - public static String getErrorCodeStr(byte[] finsFrame) { - if (finsFrame.length < 16) { + public static String getErrorCodeStr(byte[] finsBytes) { + if (finsBytes.length < 16) { return ""; } - return ByteUtil.binToHexString(finsFrame, 24, 32); + return ByteUtil.binToHexString(finsBytes, 24, 32); } /** * 获取帧的TEXT域数据 * 代表用户数据 * - * @param finsFrame + * @param finsBytes * @return */ - public static String getTextStr(byte[] finsFrame) { - return ByteUtil.binToHexString(getText(finsFrame)); + public static String getTextStr(byte[] finsBytes) { + return ByteUtil.binToHexString(getText(finsBytes)); } /** * 获取帧的TEXT域数据 * - * @param finsFrame + * @param finsBytes * @return */ - public static byte[] getText(byte[] finsFrame) { - if (finsFrame.length < 16) { + public static byte[] getText(byte[] finsBytes) { + if (finsBytes.length < 16) { return null; } Bytes textBytes = new Bytes(); - for (int i = 16; i < finsFrame.length; i++) { - textBytes.append(finsFrame[i]); + for (int i = 16; i < finsBytes.length; i++) { + textBytes.append(finsBytes[i]); } return textBytes.toBytes(); @@ -87,11 +87,11 @@ * 位于TEXT区的第一个字节 * 如果是握手响应消息则没有该字节 * - * @param finsFrame + * @param finsBytes * @return */ - public static String getControlICF(byte[] finsFrame) { - byte[] text = getText(finsFrame); + public static String getControlICF(byte[] finsBytes) { + byte[] text = getText(finsBytes); if (null != text && text.length > 10) return ByteUtil.binToHexString(new byte[] {text[0]}); @@ -103,11 +103,11 @@ * 获取目标地址字符串 * 目标地址=目标网络号+目标节点号+目标单元号 * - * @param finsFrame + * @param finsBytes * @return */ - public static String getControlDest(byte[] finsFrame) { - byte[] text = getText(finsFrame); + public static String getControlDest(byte[] finsBytes) { + byte[] text = getText(finsBytes); if (null != text && text.length > 10) return ByteUtil.binToHexString(new byte[] {text[3], text[4], text[5]}); @@ -116,14 +116,26 @@ } /** - * 获取源地址字符串 - * 源地址=源网络号+源节点号+源单元号 + * 获取目标地址字符串 + * 目标地址=目标网络号+目标节点号+目标单元号 + * 从frame对象中获取 * * @param finsFrame * @return */ - public static String getControlSour(byte[] finsFrame) { - byte[] text = getText(finsFrame); + public static String getControlDest(FINSByteFrame finsFrame) { + return ByteUtil.binToHexString(new byte[] {finsFrame.TEXT_CONTROL_SNA, finsFrame.TEXT_CONTROL_SA1, finsFrame.TEXT_CONTROL_SA2}); + } + + /** + * 获取源地址字符串 + * 源地址=源网络号+源节点号+源单元号 + * + * @param finsBytes + * @return + */ + public static String getControlSour(byte[] finsBytes) { + byte[] text = getText(finsBytes); if (null != text && text.length > 10) return ByteUtil.binToHexString(new byte[] {text[6], text[7], text[8]}); @@ -135,11 +147,11 @@ * 获取命令代码 * 0x0101=读取内存,0x0102=写内存 * - * @param finsFrame + * @param finsBytes * @return */ - public static String getFinsCommandCode(byte[] finsFrame) { - byte[] text = getText(finsFrame); + public static String getFinsCommandCode(byte[] finsBytes) { + byte[] text = getText(finsBytes); if (null != text && text.length >= 10) return ByteUtil.binToHexString(new byte[] {text[10], text[11]}); @@ -151,11 +163,11 @@ * 获取读取的数据内容 * 不包括END CODE * - * @param finsFrame + * @param finsBytes * @return */ - public static byte[] getDataWithoutEndCode(byte[] finsFrame) { - byte[] text = getText(finsFrame); + public static byte[] getDataWithoutEndCode(byte[] finsBytes) { + byte[] text = getText(finsBytes); if (null != text && text.length > 12) { Bytes dataBody = new Bytes(); @@ -192,11 +204,11 @@ /** * 获取包含END CODE在内的用户数据域 * - * @param finsFrame + * @param finsBytes * @return */ - public static byte[] getDataWithEndCode(byte[] finsFrame) { - byte[] text = getText(finsFrame); + public static byte[] getDataWithEndCode(byte[] finsBytes) { + byte[] text = getText(finsBytes); if (null != text && text.length > 20) { Bytes dataBody = new Bytes(); diff --git a/src/com/szpg/plc/server/ACUClientHandler.java b/src/com/szpg/plc/server/ACUClientHandler.java index 313d482..b3d7bc9 100644 --- a/src/com/szpg/plc/server/ACUClientHandler.java +++ b/src/com/szpg/plc/server/ACUClientHandler.java @@ -8,9 +8,7 @@ import org.apache.log4j.Logger; import com.szpg.plc.message.AppMessage; -import com.szpg.plc.message.UnKnownMessage; import com.szpg.plc.message.command.LinkCommand; -import com.szpg.plc.message.response.LinkCommandResponse; import com.szpg.plc.protocol.DTProtocolInterface; import com.szpg.plc.protocol.ProtocolFactory; import com.szpg.plc.util.ByteUtil; @@ -68,11 +66,9 @@ // 解析消息 AppMessage message = finspi.bytesToMessage((byte[]) bytesList.get(i)); - if (message instanceof UnKnownMessage) { - message.afterAction(); - } else if (message instanceof LinkCommandResponse) { - message.afterAction(); - } + + // 命令解析后处理 + message.afterAction(); } }