diff --git a/src/ACUBL.properties b/src/ACUBL.properties index df9ffdb..e4db807 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -143,6 +143,16 @@ THXC.ACU001.JGSTAT.WORDCOUNT = 6 +#\u914D\u7535\u67DC\u6570\u91CF +THXC.ACU001.DL.COUNT = 1 +#\u914D\u7535\u67DC\u7F16\u7801\u5217\u8868 +THXC.ACU001.DL.ZC.LIST = THXC.ACU001.D.PDL01 +#\u914D\u7535\u67DC\u53C2\u6570\u8D77\u59CB\u5730\u5740 +THXC.ACU001.DL.START = 10 +#\u914D\u7535\u67DC\u53C2\u6570\u6240\u5360\u5B57\u6570 +THXC.ACU001.DL.WORDCOUNT = 12 + + ######## 02 THXC.ACU002 ######## #\u7532\u70F7\u4F20\u611F\u5668\u6570\u91CF diff --git a/src/ACUBL.properties b/src/ACUBL.properties index df9ffdb..e4db807 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -143,6 +143,16 @@ THXC.ACU001.JGSTAT.WORDCOUNT = 6 +#\u914D\u7535\u67DC\u6570\u91CF +THXC.ACU001.DL.COUNT = 1 +#\u914D\u7535\u67DC\u7F16\u7801\u5217\u8868 +THXC.ACU001.DL.ZC.LIST = THXC.ACU001.D.PDL01 +#\u914D\u7535\u67DC\u53C2\u6570\u8D77\u59CB\u5730\u5740 +THXC.ACU001.DL.START = 10 +#\u914D\u7535\u67DC\u53C2\u6570\u6240\u5360\u5B57\u6570 +THXC.ACU001.DL.WORDCOUNT = 12 + + ######## 02 THXC.ACU002 ######## #\u7532\u70F7\u4F20\u611F\u5668\u6570\u91CF diff --git a/src/com/szpg/db/dao/PgPowerDao.java b/src/com/szpg/db/dao/PgPowerDao.java new file mode 100644 index 0000000..0004875 --- /dev/null +++ b/src/com/szpg/db/dao/PgPowerDao.java @@ -0,0 +1,24 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgPower; + +import java.util.List; + +/** + * 电力相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgPowerDao { + + /******** 温湿度监测值 ********/ + public List findAllPower(); + public PgPower findPowerById(Integer id); + public PgPower findLatestPowerByDevice(Integer deviceid); + + public List findPowerByDevice(Integer deviceid); + public List finPowerByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPowerRecord(PgPower power); + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid); +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index df9ffdb..e4db807 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -143,6 +143,16 @@ THXC.ACU001.JGSTAT.WORDCOUNT = 6 +#\u914D\u7535\u67DC\u6570\u91CF +THXC.ACU001.DL.COUNT = 1 +#\u914D\u7535\u67DC\u7F16\u7801\u5217\u8868 +THXC.ACU001.DL.ZC.LIST = THXC.ACU001.D.PDL01 +#\u914D\u7535\u67DC\u53C2\u6570\u8D77\u59CB\u5730\u5740 +THXC.ACU001.DL.START = 10 +#\u914D\u7535\u67DC\u53C2\u6570\u6240\u5360\u5B57\u6570 +THXC.ACU001.DL.WORDCOUNT = 12 + + ######## 02 THXC.ACU002 ######## #\u7532\u70F7\u4F20\u611F\u5668\u6570\u91CF diff --git a/src/com/szpg/db/dao/PgPowerDao.java b/src/com/szpg/db/dao/PgPowerDao.java new file mode 100644 index 0000000..0004875 --- /dev/null +++ b/src/com/szpg/db/dao/PgPowerDao.java @@ -0,0 +1,24 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgPower; + +import java.util.List; + +/** + * 电力相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgPowerDao { + + /******** 温湿度监测值 ********/ + public List findAllPower(); + public PgPower findPowerById(Integer id); + public PgPower findLatestPowerByDevice(Integer deviceid); + + public List findPowerByDevice(Integer deviceid); + public List finPowerByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPowerRecord(PgPower power); + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java new file mode 100644 index 0000000..7941cb1 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java @@ -0,0 +1,339 @@ +package com.szpg.db.dao.impl; + +import com.szpg.db.dao.PgPowerDao; +import com.szpg.db.data.PgPower; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.commons.dbutils.handlers.ScalarHandler; +import org.apache.log4j.Logger; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +public class PgPowerDaoImpl implements PgPowerDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPower() { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List powerList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != powerList && powerList.isEmpty() == false) { + logger.debug("查询所有电力参数监测值成功[" + powerList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < powerList.size(); i++) { + PgPower power = new PgPower(); + Object[] item = powerList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 PgPower findPowerById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据ID查询电力监测值成功" + power); + + return power; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询电力监测值异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgPower findLatestPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER WHERE PGDEVICEID = ? AND ROWNUM <= 5 ORDER BY LOGTIME DESC"; + 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(), param); + + if (null != tempList && tempList.isEmpty() == false) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据设备ID查询最新的电力监测值成功" + power); + + return power; + } + 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 findPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 finPowerByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 addPowerRecord(PgPower power) { + return addPowerRecord(power.getAu(), power.getBu(), power.getCu(), power.getAi(), power.getBi(), power.getCi(), power.getTmStr(), power.getPgdeviceid()); + } + + @Override + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_POWER " + + "(AU, BU, CU, AI, BI, CI, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[9]; + params[0] = NumberFormat.format(au, "0.00"); + params[1] = NumberFormat.format(bu, "0.00"); + params[2] = NumberFormat.format(cu, "0.00"); + params[3] = NumberFormat.format(ai, "0.00"); + params[4] = NumberFormat.format(bi, "0.00"); + params[5] = NumberFormat.format(ci, "0.00"); + params[6] = tm; + params[7] = tm; + params[8] = 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 + ", temp=" + au + ", ai=" + ai + ", 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 df9ffdb..e4db807 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -143,6 +143,16 @@ THXC.ACU001.JGSTAT.WORDCOUNT = 6 +#\u914D\u7535\u67DC\u6570\u91CF +THXC.ACU001.DL.COUNT = 1 +#\u914D\u7535\u67DC\u7F16\u7801\u5217\u8868 +THXC.ACU001.DL.ZC.LIST = THXC.ACU001.D.PDL01 +#\u914D\u7535\u67DC\u53C2\u6570\u8D77\u59CB\u5730\u5740 +THXC.ACU001.DL.START = 10 +#\u914D\u7535\u67DC\u53C2\u6570\u6240\u5360\u5B57\u6570 +THXC.ACU001.DL.WORDCOUNT = 12 + + ######## 02 THXC.ACU002 ######## #\u7532\u70F7\u4F20\u611F\u5668\u6570\u91CF diff --git a/src/com/szpg/db/dao/PgPowerDao.java b/src/com/szpg/db/dao/PgPowerDao.java new file mode 100644 index 0000000..0004875 --- /dev/null +++ b/src/com/szpg/db/dao/PgPowerDao.java @@ -0,0 +1,24 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgPower; + +import java.util.List; + +/** + * 电力相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgPowerDao { + + /******** 温湿度监测值 ********/ + public List findAllPower(); + public PgPower findPowerById(Integer id); + public PgPower findLatestPowerByDevice(Integer deviceid); + + public List findPowerByDevice(Integer deviceid); + public List finPowerByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPowerRecord(PgPower power); + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java new file mode 100644 index 0000000..7941cb1 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java @@ -0,0 +1,339 @@ +package com.szpg.db.dao.impl; + +import com.szpg.db.dao.PgPowerDao; +import com.szpg.db.data.PgPower; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.commons.dbutils.handlers.ScalarHandler; +import org.apache.log4j.Logger; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +public class PgPowerDaoImpl implements PgPowerDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPower() { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List powerList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != powerList && powerList.isEmpty() == false) { + logger.debug("查询所有电力参数监测值成功[" + powerList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < powerList.size(); i++) { + PgPower power = new PgPower(); + Object[] item = powerList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 PgPower findPowerById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据ID查询电力监测值成功" + power); + + return power; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询电力监测值异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgPower findLatestPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER WHERE PGDEVICEID = ? AND ROWNUM <= 5 ORDER BY LOGTIME DESC"; + 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(), param); + + if (null != tempList && tempList.isEmpty() == false) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据设备ID查询最新的电力监测值成功" + power); + + return power; + } + 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 findPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 finPowerByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 addPowerRecord(PgPower power) { + return addPowerRecord(power.getAu(), power.getBu(), power.getCu(), power.getAi(), power.getBi(), power.getCi(), power.getTmStr(), power.getPgdeviceid()); + } + + @Override + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_POWER " + + "(AU, BU, CU, AI, BI, CI, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[9]; + params[0] = NumberFormat.format(au, "0.00"); + params[1] = NumberFormat.format(bu, "0.00"); + params[2] = NumberFormat.format(cu, "0.00"); + params[3] = NumberFormat.format(ai, "0.00"); + params[4] = NumberFormat.format(bi, "0.00"); + params[5] = NumberFormat.format(ci, "0.00"); + params[6] = tm; + params[7] = tm; + params[8] = 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 + ", temp=" + au + ", ai=" + ai + ", 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/data/PgPower.java b/src/com/szpg/db/data/PgPower.java new file mode 100644 index 0000000..c0a819d --- /dev/null +++ b/src/com/szpg/db/data/PgPower.java @@ -0,0 +1,144 @@ +package com.szpg.db.data; + +import com.szpg.util.TimeFormat; + +import java.util.Date; + +/** + * 电力参数值监测数据表 + * + * @author admin + * + */ +public class PgPower implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Float au; + private Float bu; + private Float cu; + private Float ai; + private Float bi; + private Float ci; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + 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 Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Float getAu() { + return au; + } + + public void setAu(Float au) { + this.au = au; + } + + public Float getBu() { + return bu; + } + + public void setBu(Float bu) { + this.bu = bu; + } + + public Float getCu() { + return cu; + } + + public void setCu(Float cu) { + this.cu = cu; + } + + public Float getAi() { + return ai; + } + + public void setAi(Float ai) { + this.ai = ai; + } + + public Float getBi() { + return bi; + } + + public void setBi(Float bi) { + this.bi = bi; + } + + public Float getCi() { + return ci; + } + + public void setCi(Float ci) { + this.ci = ci; + } + + 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 ""; + } + } + + @Override + public String toString() { + return "PgPower{" + + "logtime=" + TimeFormat.formatTimestamp(logtime) + + ", au=" + au + + ", bu=" + bu + + ", cu=" + cu + + ", ai=" + ai + + ", bi=" + bi + + ", ci=" + ci + + '}'; + } +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index df9ffdb..e4db807 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -143,6 +143,16 @@ THXC.ACU001.JGSTAT.WORDCOUNT = 6 +#\u914D\u7535\u67DC\u6570\u91CF +THXC.ACU001.DL.COUNT = 1 +#\u914D\u7535\u67DC\u7F16\u7801\u5217\u8868 +THXC.ACU001.DL.ZC.LIST = THXC.ACU001.D.PDL01 +#\u914D\u7535\u67DC\u53C2\u6570\u8D77\u59CB\u5730\u5740 +THXC.ACU001.DL.START = 10 +#\u914D\u7535\u67DC\u53C2\u6570\u6240\u5360\u5B57\u6570 +THXC.ACU001.DL.WORDCOUNT = 12 + + ######## 02 THXC.ACU002 ######## #\u7532\u70F7\u4F20\u611F\u5668\u6570\u91CF diff --git a/src/com/szpg/db/dao/PgPowerDao.java b/src/com/szpg/db/dao/PgPowerDao.java new file mode 100644 index 0000000..0004875 --- /dev/null +++ b/src/com/szpg/db/dao/PgPowerDao.java @@ -0,0 +1,24 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgPower; + +import java.util.List; + +/** + * 电力相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgPowerDao { + + /******** 温湿度监测值 ********/ + public List findAllPower(); + public PgPower findPowerById(Integer id); + public PgPower findLatestPowerByDevice(Integer deviceid); + + public List findPowerByDevice(Integer deviceid); + public List finPowerByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPowerRecord(PgPower power); + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java new file mode 100644 index 0000000..7941cb1 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java @@ -0,0 +1,339 @@ +package com.szpg.db.dao.impl; + +import com.szpg.db.dao.PgPowerDao; +import com.szpg.db.data.PgPower; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.commons.dbutils.handlers.ScalarHandler; +import org.apache.log4j.Logger; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +public class PgPowerDaoImpl implements PgPowerDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPower() { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List powerList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != powerList && powerList.isEmpty() == false) { + logger.debug("查询所有电力参数监测值成功[" + powerList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < powerList.size(); i++) { + PgPower power = new PgPower(); + Object[] item = powerList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 PgPower findPowerById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据ID查询电力监测值成功" + power); + + return power; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询电力监测值异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgPower findLatestPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER WHERE PGDEVICEID = ? AND ROWNUM <= 5 ORDER BY LOGTIME DESC"; + 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(), param); + + if (null != tempList && tempList.isEmpty() == false) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据设备ID查询最新的电力监测值成功" + power); + + return power; + } + 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 findPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 finPowerByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 addPowerRecord(PgPower power) { + return addPowerRecord(power.getAu(), power.getBu(), power.getCu(), power.getAi(), power.getBi(), power.getCi(), power.getTmStr(), power.getPgdeviceid()); + } + + @Override + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_POWER " + + "(AU, BU, CU, AI, BI, CI, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[9]; + params[0] = NumberFormat.format(au, "0.00"); + params[1] = NumberFormat.format(bu, "0.00"); + params[2] = NumberFormat.format(cu, "0.00"); + params[3] = NumberFormat.format(ai, "0.00"); + params[4] = NumberFormat.format(bi, "0.00"); + params[5] = NumberFormat.format(ci, "0.00"); + params[6] = tm; + params[7] = tm; + params[8] = 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 + ", temp=" + au + ", ai=" + ai + ", 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/data/PgPower.java b/src/com/szpg/db/data/PgPower.java new file mode 100644 index 0000000..c0a819d --- /dev/null +++ b/src/com/szpg/db/data/PgPower.java @@ -0,0 +1,144 @@ +package com.szpg.db.data; + +import com.szpg.util.TimeFormat; + +import java.util.Date; + +/** + * 电力参数值监测数据表 + * + * @author admin + * + */ +public class PgPower implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Float au; + private Float bu; + private Float cu; + private Float ai; + private Float bi; + private Float ci; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + 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 Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Float getAu() { + return au; + } + + public void setAu(Float au) { + this.au = au; + } + + public Float getBu() { + return bu; + } + + public void setBu(Float bu) { + this.bu = bu; + } + + public Float getCu() { + return cu; + } + + public void setCu(Float cu) { + this.cu = cu; + } + + public Float getAi() { + return ai; + } + + public void setAi(Float ai) { + this.ai = ai; + } + + public Float getBi() { + return bi; + } + + public void setBi(Float bi) { + this.bi = bi; + } + + public Float getCi() { + return ci; + } + + public void setCi(Float ci) { + this.ci = ci; + } + + 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 ""; + } + } + + @Override + public String toString() { + return "PgPower{" + + "logtime=" + TimeFormat.formatTimestamp(logtime) + + ", au=" + au + + ", bu=" + bu + + ", cu=" + cu + + ", ai=" + ai + + ", bi=" + bi + + ", ci=" + ci + + '}'; + } +} diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index 79b9217..cb5a82e 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -14,6 +14,8 @@ public final static String CMD_TYPE_READHSVALUE = "18"; //读取硫化氢监测值命令 public final static String CMD_TYPE_READHSSTATUS = "19"; //读取硫化氢报警状态命令 + public final static String CMD_TYPE_READPOWERVALUE = "20"; // 读取电力参数监测值命令 + public final static String CMD_TYPE_READYWSTATUS = "21"; //读取爆管液位报警状态命令 public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 diff --git a/src/ACUBL.properties b/src/ACUBL.properties index df9ffdb..e4db807 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -143,6 +143,16 @@ THXC.ACU001.JGSTAT.WORDCOUNT = 6 +#\u914D\u7535\u67DC\u6570\u91CF +THXC.ACU001.DL.COUNT = 1 +#\u914D\u7535\u67DC\u7F16\u7801\u5217\u8868 +THXC.ACU001.DL.ZC.LIST = THXC.ACU001.D.PDL01 +#\u914D\u7535\u67DC\u53C2\u6570\u8D77\u59CB\u5730\u5740 +THXC.ACU001.DL.START = 10 +#\u914D\u7535\u67DC\u53C2\u6570\u6240\u5360\u5B57\u6570 +THXC.ACU001.DL.WORDCOUNT = 12 + + ######## 02 THXC.ACU002 ######## #\u7532\u70F7\u4F20\u611F\u5668\u6570\u91CF diff --git a/src/com/szpg/db/dao/PgPowerDao.java b/src/com/szpg/db/dao/PgPowerDao.java new file mode 100644 index 0000000..0004875 --- /dev/null +++ b/src/com/szpg/db/dao/PgPowerDao.java @@ -0,0 +1,24 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgPower; + +import java.util.List; + +/** + * 电力相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgPowerDao { + + /******** 温湿度监测值 ********/ + public List findAllPower(); + public PgPower findPowerById(Integer id); + public PgPower findLatestPowerByDevice(Integer deviceid); + + public List findPowerByDevice(Integer deviceid); + public List finPowerByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPowerRecord(PgPower power); + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java new file mode 100644 index 0000000..7941cb1 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java @@ -0,0 +1,339 @@ +package com.szpg.db.dao.impl; + +import com.szpg.db.dao.PgPowerDao; +import com.szpg.db.data.PgPower; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.commons.dbutils.handlers.ScalarHandler; +import org.apache.log4j.Logger; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +public class PgPowerDaoImpl implements PgPowerDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPower() { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List powerList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != powerList && powerList.isEmpty() == false) { + logger.debug("查询所有电力参数监测值成功[" + powerList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < powerList.size(); i++) { + PgPower power = new PgPower(); + Object[] item = powerList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 PgPower findPowerById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据ID查询电力监测值成功" + power); + + return power; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询电力监测值异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgPower findLatestPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER WHERE PGDEVICEID = ? AND ROWNUM <= 5 ORDER BY LOGTIME DESC"; + 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(), param); + + if (null != tempList && tempList.isEmpty() == false) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据设备ID查询最新的电力监测值成功" + power); + + return power; + } + 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 findPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 finPowerByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 addPowerRecord(PgPower power) { + return addPowerRecord(power.getAu(), power.getBu(), power.getCu(), power.getAi(), power.getBi(), power.getCi(), power.getTmStr(), power.getPgdeviceid()); + } + + @Override + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_POWER " + + "(AU, BU, CU, AI, BI, CI, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[9]; + params[0] = NumberFormat.format(au, "0.00"); + params[1] = NumberFormat.format(bu, "0.00"); + params[2] = NumberFormat.format(cu, "0.00"); + params[3] = NumberFormat.format(ai, "0.00"); + params[4] = NumberFormat.format(bi, "0.00"); + params[5] = NumberFormat.format(ci, "0.00"); + params[6] = tm; + params[7] = tm; + params[8] = 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 + ", temp=" + au + ", ai=" + ai + ", 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/data/PgPower.java b/src/com/szpg/db/data/PgPower.java new file mode 100644 index 0000000..c0a819d --- /dev/null +++ b/src/com/szpg/db/data/PgPower.java @@ -0,0 +1,144 @@ +package com.szpg.db.data; + +import com.szpg.util.TimeFormat; + +import java.util.Date; + +/** + * 电力参数值监测数据表 + * + * @author admin + * + */ +public class PgPower implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Float au; + private Float bu; + private Float cu; + private Float ai; + private Float bi; + private Float ci; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + 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 Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Float getAu() { + return au; + } + + public void setAu(Float au) { + this.au = au; + } + + public Float getBu() { + return bu; + } + + public void setBu(Float bu) { + this.bu = bu; + } + + public Float getCu() { + return cu; + } + + public void setCu(Float cu) { + this.cu = cu; + } + + public Float getAi() { + return ai; + } + + public void setAi(Float ai) { + this.ai = ai; + } + + public Float getBi() { + return bi; + } + + public void setBi(Float bi) { + this.bi = bi; + } + + public Float getCi() { + return ci; + } + + public void setCi(Float ci) { + this.ci = ci; + } + + 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 ""; + } + } + + @Override + public String toString() { + return "PgPower{" + + "logtime=" + TimeFormat.formatTimestamp(logtime) + + ", au=" + au + + ", bu=" + bu + + ", cu=" + cu + + ", ai=" + ai + + ", bi=" + bi + + ", ci=" + ci + + '}'; + } +} diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index 79b9217..cb5a82e 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -14,6 +14,8 @@ public final static String CMD_TYPE_READHSVALUE = "18"; //读取硫化氢监测值命令 public final static String CMD_TYPE_READHSSTATUS = "19"; //读取硫化氢报警状态命令 + public final static String CMD_TYPE_READPOWERVALUE = "20"; // 读取电力参数监测值命令 + public final static String CMD_TYPE_READYWSTATUS = "21"; //读取爆管液位报警状态命令 public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index a311507..b931747 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -95,6 +95,9 @@ case AppMessageConstants.CMD_TYPE_READHSCH4VALUE: return new ReadHSCH4ValueCommand(); + + case AppMessageConstants.CMD_TYPE_READPOWERVALUE: + return new ReadPowerValueCommand(); default: return null; diff --git a/src/ACUBL.properties b/src/ACUBL.properties index df9ffdb..e4db807 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -143,6 +143,16 @@ THXC.ACU001.JGSTAT.WORDCOUNT = 6 +#\u914D\u7535\u67DC\u6570\u91CF +THXC.ACU001.DL.COUNT = 1 +#\u914D\u7535\u67DC\u7F16\u7801\u5217\u8868 +THXC.ACU001.DL.ZC.LIST = THXC.ACU001.D.PDL01 +#\u914D\u7535\u67DC\u53C2\u6570\u8D77\u59CB\u5730\u5740 +THXC.ACU001.DL.START = 10 +#\u914D\u7535\u67DC\u53C2\u6570\u6240\u5360\u5B57\u6570 +THXC.ACU001.DL.WORDCOUNT = 12 + + ######## 02 THXC.ACU002 ######## #\u7532\u70F7\u4F20\u611F\u5668\u6570\u91CF diff --git a/src/com/szpg/db/dao/PgPowerDao.java b/src/com/szpg/db/dao/PgPowerDao.java new file mode 100644 index 0000000..0004875 --- /dev/null +++ b/src/com/szpg/db/dao/PgPowerDao.java @@ -0,0 +1,24 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgPower; + +import java.util.List; + +/** + * 电力相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgPowerDao { + + /******** 温湿度监测值 ********/ + public List findAllPower(); + public PgPower findPowerById(Integer id); + public PgPower findLatestPowerByDevice(Integer deviceid); + + public List findPowerByDevice(Integer deviceid); + public List finPowerByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPowerRecord(PgPower power); + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java new file mode 100644 index 0000000..7941cb1 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java @@ -0,0 +1,339 @@ +package com.szpg.db.dao.impl; + +import com.szpg.db.dao.PgPowerDao; +import com.szpg.db.data.PgPower; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.commons.dbutils.handlers.ScalarHandler; +import org.apache.log4j.Logger; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +public class PgPowerDaoImpl implements PgPowerDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPower() { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List powerList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != powerList && powerList.isEmpty() == false) { + logger.debug("查询所有电力参数监测值成功[" + powerList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < powerList.size(); i++) { + PgPower power = new PgPower(); + Object[] item = powerList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 PgPower findPowerById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据ID查询电力监测值成功" + power); + + return power; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询电力监测值异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgPower findLatestPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER WHERE PGDEVICEID = ? AND ROWNUM <= 5 ORDER BY LOGTIME DESC"; + 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(), param); + + if (null != tempList && tempList.isEmpty() == false) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据设备ID查询最新的电力监测值成功" + power); + + return power; + } + 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 findPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 finPowerByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 addPowerRecord(PgPower power) { + return addPowerRecord(power.getAu(), power.getBu(), power.getCu(), power.getAi(), power.getBi(), power.getCi(), power.getTmStr(), power.getPgdeviceid()); + } + + @Override + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_POWER " + + "(AU, BU, CU, AI, BI, CI, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[9]; + params[0] = NumberFormat.format(au, "0.00"); + params[1] = NumberFormat.format(bu, "0.00"); + params[2] = NumberFormat.format(cu, "0.00"); + params[3] = NumberFormat.format(ai, "0.00"); + params[4] = NumberFormat.format(bi, "0.00"); + params[5] = NumberFormat.format(ci, "0.00"); + params[6] = tm; + params[7] = tm; + params[8] = 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 + ", temp=" + au + ", ai=" + ai + ", 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/data/PgPower.java b/src/com/szpg/db/data/PgPower.java new file mode 100644 index 0000000..c0a819d --- /dev/null +++ b/src/com/szpg/db/data/PgPower.java @@ -0,0 +1,144 @@ +package com.szpg.db.data; + +import com.szpg.util.TimeFormat; + +import java.util.Date; + +/** + * 电力参数值监测数据表 + * + * @author admin + * + */ +public class PgPower implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Float au; + private Float bu; + private Float cu; + private Float ai; + private Float bi; + private Float ci; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + 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 Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Float getAu() { + return au; + } + + public void setAu(Float au) { + this.au = au; + } + + public Float getBu() { + return bu; + } + + public void setBu(Float bu) { + this.bu = bu; + } + + public Float getCu() { + return cu; + } + + public void setCu(Float cu) { + this.cu = cu; + } + + public Float getAi() { + return ai; + } + + public void setAi(Float ai) { + this.ai = ai; + } + + public Float getBi() { + return bi; + } + + public void setBi(Float bi) { + this.bi = bi; + } + + public Float getCi() { + return ci; + } + + public void setCi(Float ci) { + this.ci = ci; + } + + 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 ""; + } + } + + @Override + public String toString() { + return "PgPower{" + + "logtime=" + TimeFormat.formatTimestamp(logtime) + + ", au=" + au + + ", bu=" + bu + + ", cu=" + cu + + ", ai=" + ai + + ", bi=" + bi + + ", ci=" + ci + + '}'; + } +} diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index 79b9217..cb5a82e 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -14,6 +14,8 @@ public final static String CMD_TYPE_READHSVALUE = "18"; //读取硫化氢监测值命令 public final static String CMD_TYPE_READHSSTATUS = "19"; //读取硫化氢报警状态命令 + public final static String CMD_TYPE_READPOWERVALUE = "20"; // 读取电力参数监测值命令 + public final static String CMD_TYPE_READYWSTATUS = "21"; //读取爆管液位报警状态命令 public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index a311507..b931747 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -95,6 +95,9 @@ case AppMessageConstants.CMD_TYPE_READHSCH4VALUE: return new ReadHSCH4ValueCommand(); + + case AppMessageConstants.CMD_TYPE_READPOWERVALUE: + return new ReadPowerValueCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadPowerValueCommand.java b/src/com/szpg/plc/message/command/read/ReadPowerValueCommand.java new file mode 100644 index 0000000..31d2373 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadPowerValueCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadPowerValueCommandResponse; + +public class ReadPowerValueCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 3051868021937132489L; + + @Override + public Class getResponseClass() { + return ReadPowerValueCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询电力监测值命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READPOWERVALUE; + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index df9ffdb..e4db807 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -143,6 +143,16 @@ THXC.ACU001.JGSTAT.WORDCOUNT = 6 +#\u914D\u7535\u67DC\u6570\u91CF +THXC.ACU001.DL.COUNT = 1 +#\u914D\u7535\u67DC\u7F16\u7801\u5217\u8868 +THXC.ACU001.DL.ZC.LIST = THXC.ACU001.D.PDL01 +#\u914D\u7535\u67DC\u53C2\u6570\u8D77\u59CB\u5730\u5740 +THXC.ACU001.DL.START = 10 +#\u914D\u7535\u67DC\u53C2\u6570\u6240\u5360\u5B57\u6570 +THXC.ACU001.DL.WORDCOUNT = 12 + + ######## 02 THXC.ACU002 ######## #\u7532\u70F7\u4F20\u611F\u5668\u6570\u91CF diff --git a/src/com/szpg/db/dao/PgPowerDao.java b/src/com/szpg/db/dao/PgPowerDao.java new file mode 100644 index 0000000..0004875 --- /dev/null +++ b/src/com/szpg/db/dao/PgPowerDao.java @@ -0,0 +1,24 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgPower; + +import java.util.List; + +/** + * 电力相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgPowerDao { + + /******** 温湿度监测值 ********/ + public List findAllPower(); + public PgPower findPowerById(Integer id); + public PgPower findLatestPowerByDevice(Integer deviceid); + + public List findPowerByDevice(Integer deviceid); + public List finPowerByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPowerRecord(PgPower power); + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java new file mode 100644 index 0000000..7941cb1 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java @@ -0,0 +1,339 @@ +package com.szpg.db.dao.impl; + +import com.szpg.db.dao.PgPowerDao; +import com.szpg.db.data.PgPower; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.commons.dbutils.handlers.ScalarHandler; +import org.apache.log4j.Logger; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +public class PgPowerDaoImpl implements PgPowerDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPower() { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List powerList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != powerList && powerList.isEmpty() == false) { + logger.debug("查询所有电力参数监测值成功[" + powerList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < powerList.size(); i++) { + PgPower power = new PgPower(); + Object[] item = powerList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 PgPower findPowerById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据ID查询电力监测值成功" + power); + + return power; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询电力监测值异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgPower findLatestPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER WHERE PGDEVICEID = ? AND ROWNUM <= 5 ORDER BY LOGTIME DESC"; + 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(), param); + + if (null != tempList && tempList.isEmpty() == false) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据设备ID查询最新的电力监测值成功" + power); + + return power; + } + 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 findPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 finPowerByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 addPowerRecord(PgPower power) { + return addPowerRecord(power.getAu(), power.getBu(), power.getCu(), power.getAi(), power.getBi(), power.getCi(), power.getTmStr(), power.getPgdeviceid()); + } + + @Override + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_POWER " + + "(AU, BU, CU, AI, BI, CI, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[9]; + params[0] = NumberFormat.format(au, "0.00"); + params[1] = NumberFormat.format(bu, "0.00"); + params[2] = NumberFormat.format(cu, "0.00"); + params[3] = NumberFormat.format(ai, "0.00"); + params[4] = NumberFormat.format(bi, "0.00"); + params[5] = NumberFormat.format(ci, "0.00"); + params[6] = tm; + params[7] = tm; + params[8] = 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 + ", temp=" + au + ", ai=" + ai + ", 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/data/PgPower.java b/src/com/szpg/db/data/PgPower.java new file mode 100644 index 0000000..c0a819d --- /dev/null +++ b/src/com/szpg/db/data/PgPower.java @@ -0,0 +1,144 @@ +package com.szpg.db.data; + +import com.szpg.util.TimeFormat; + +import java.util.Date; + +/** + * 电力参数值监测数据表 + * + * @author admin + * + */ +public class PgPower implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Float au; + private Float bu; + private Float cu; + private Float ai; + private Float bi; + private Float ci; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + 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 Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Float getAu() { + return au; + } + + public void setAu(Float au) { + this.au = au; + } + + public Float getBu() { + return bu; + } + + public void setBu(Float bu) { + this.bu = bu; + } + + public Float getCu() { + return cu; + } + + public void setCu(Float cu) { + this.cu = cu; + } + + public Float getAi() { + return ai; + } + + public void setAi(Float ai) { + this.ai = ai; + } + + public Float getBi() { + return bi; + } + + public void setBi(Float bi) { + this.bi = bi; + } + + public Float getCi() { + return ci; + } + + public void setCi(Float ci) { + this.ci = ci; + } + + 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 ""; + } + } + + @Override + public String toString() { + return "PgPower{" + + "logtime=" + TimeFormat.formatTimestamp(logtime) + + ", au=" + au + + ", bu=" + bu + + ", cu=" + cu + + ", ai=" + ai + + ", bi=" + bi + + ", ci=" + ci + + '}'; + } +} diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index 79b9217..cb5a82e 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -14,6 +14,8 @@ public final static String CMD_TYPE_READHSVALUE = "18"; //读取硫化氢监测值命令 public final static String CMD_TYPE_READHSSTATUS = "19"; //读取硫化氢报警状态命令 + public final static String CMD_TYPE_READPOWERVALUE = "20"; // 读取电力参数监测值命令 + public final static String CMD_TYPE_READYWSTATUS = "21"; //读取爆管液位报警状态命令 public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index a311507..b931747 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -95,6 +95,9 @@ case AppMessageConstants.CMD_TYPE_READHSCH4VALUE: return new ReadHSCH4ValueCommand(); + + case AppMessageConstants.CMD_TYPE_READPOWERVALUE: + return new ReadPowerValueCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadPowerValueCommand.java b/src/com/szpg/plc/message/command/read/ReadPowerValueCommand.java new file mode 100644 index 0000000..31d2373 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadPowerValueCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadPowerValueCommandResponse; + +public class ReadPowerValueCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 3051868021937132489L; + + @Override + public Class getResponseClass() { + return ReadPowerValueCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询电力监测值命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READPOWERVALUE; + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadPowerValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadPowerValueCommandResponse.java new file mode 100644 index 0000000..53c4d54 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadPowerValueCommandResponse.java @@ -0,0 +1,192 @@ +package com.szpg.plc.message.response.read; + +import com.szpg.db.dao.*; +import com.szpg.db.dao.impl.*; +import com.szpg.db.data.PgAlarm; +import com.szpg.db.data.PgAlarmRule; +import com.szpg.db.data.PgDevice; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.util.*; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +public class ReadPowerValueCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List au; //A相电压 + private List bu; //B相电压 + private List cu; //C相电压 + private List ai; //A相电流 + private List bi; //B相电流 + private List ci; //C相电流 + private String[] zcList; //电力监测的资产列表,从配置文件中获取 + + public ReadPowerValueCommandResponse() { + au = new ArrayList(); + bu = new ArrayList(); + cu = new ArrayList(); + ai = new ArrayList(); + bi = new ArrayList(); + ci = new ArrayList(); + } + + public List getAu() { + return au; + } + + public void setAu(List au) { + this.au = au; + } + + public List getBu() { + return bu; + } + + public void setBu(List bu) { + this.bu = bu; + } + + public List getCu() { + return cu; + } + + public void setCu(List cu) { + this.cu = cu; + } + + public List getAi() { + return ai; + } + + public void setAi(List ai) { + this.ai = ai; + } + + public List getBi() { + return bi; + } + + public void setBi(List bi) { + this.bi = bi; + } + + public List getCi() { + return ci; + } + + public void setCi(List ci) { + this.ci = ci; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将电力监测值数据存入数据库 + PgPowerDao powerDao = new PgPowerDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历电力设备列表,将电力浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + float auValue = au.get(i); + float buValue = bu.get(i); + float cuValue = cu.get(i); + float aiValue = ai.get(i); + float biValue = bi.get(i); + float ciValue = ci.get(i); + + int deviceId = deviceDao.findDeviceIdByCode(zcbh); + if (deviceId > 0) { + try { + powerDao.addPowerRecord(auValue, buValue, cuValue, aiValue, biValue, ciValue, TimeFormat.formatTimestamp(this.getTime().getTime()), deviceId); + } catch (Exception ex) { + logger.error("添加电力监测记录异常"); + } + } else { + logger.warn("未找到资产[" + zcbh + "]"); + } + } + } + } + + @Override + public void parseData() { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + byte[] messageData = this.getResponseData(); + + logger.info("开始解析[读取电力值][" + acucode + "]指令响应"); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DL.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 获取目标ACU电力监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DL.START")); + + // 获取目标ACU电力相关的资产列表,即电力设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DL.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析电力监测值以及电力报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析A相电压监测值 + float valueAu = getValueFromData(zcbh, start, messageData, zcbh + ".AU"); + + // 2解析B相电压监测值 + float valueBu = getValueFromData(zcbh, start, messageData, zcbh + ".BU"); + + // 3解析C相电压监测值 + float valueCu = getValueFromData(zcbh, start, messageData, zcbh + ".CU"); + + // 4解析A相电流监测值 + float valueAi = getValueFromData(zcbh, start, messageData, zcbh + ".AI"); + + // 5解析B相电流监测值 + float valueBi = getValueFromData(zcbh, start, messageData, zcbh + ".BI"); + + // 6解析C相电流监测值 + float valueCi = getValueFromData(zcbh, start, messageData, zcbh + ".CI"); + + getAu().add(valueAu); + getBu().add(valueBu); + getCu().add(valueCu); + getAi().add(valueAi); + getBi().add(valueBi); + getCi().add(valueCi); + + logger.info("[" + zcbh + "][A相" + valueAu + ", " + valueAi + "][B相" + valueBu + ", " + valueBi + "][C相" + valueCu + ", " + valueCi + "]"); + } + + logger.info("解析[读取电力值]响应指令结束"); + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index df9ffdb..e4db807 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -143,6 +143,16 @@ THXC.ACU001.JGSTAT.WORDCOUNT = 6 +#\u914D\u7535\u67DC\u6570\u91CF +THXC.ACU001.DL.COUNT = 1 +#\u914D\u7535\u67DC\u7F16\u7801\u5217\u8868 +THXC.ACU001.DL.ZC.LIST = THXC.ACU001.D.PDL01 +#\u914D\u7535\u67DC\u53C2\u6570\u8D77\u59CB\u5730\u5740 +THXC.ACU001.DL.START = 10 +#\u914D\u7535\u67DC\u53C2\u6570\u6240\u5360\u5B57\u6570 +THXC.ACU001.DL.WORDCOUNT = 12 + + ######## 02 THXC.ACU002 ######## #\u7532\u70F7\u4F20\u611F\u5668\u6570\u91CF diff --git a/src/com/szpg/db/dao/PgPowerDao.java b/src/com/szpg/db/dao/PgPowerDao.java new file mode 100644 index 0000000..0004875 --- /dev/null +++ b/src/com/szpg/db/dao/PgPowerDao.java @@ -0,0 +1,24 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgPower; + +import java.util.List; + +/** + * 电力相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgPowerDao { + + /******** 温湿度监测值 ********/ + public List findAllPower(); + public PgPower findPowerById(Integer id); + public PgPower findLatestPowerByDevice(Integer deviceid); + + public List findPowerByDevice(Integer deviceid); + public List finPowerByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPowerRecord(PgPower power); + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java new file mode 100644 index 0000000..7941cb1 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java @@ -0,0 +1,339 @@ +package com.szpg.db.dao.impl; + +import com.szpg.db.dao.PgPowerDao; +import com.szpg.db.data.PgPower; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.commons.dbutils.handlers.ScalarHandler; +import org.apache.log4j.Logger; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +public class PgPowerDaoImpl implements PgPowerDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPower() { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List powerList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != powerList && powerList.isEmpty() == false) { + logger.debug("查询所有电力参数监测值成功[" + powerList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < powerList.size(); i++) { + PgPower power = new PgPower(); + Object[] item = powerList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 PgPower findPowerById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据ID查询电力监测值成功" + power); + + return power; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询电力监测值异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgPower findLatestPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER WHERE PGDEVICEID = ? AND ROWNUM <= 5 ORDER BY LOGTIME DESC"; + 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(), param); + + if (null != tempList && tempList.isEmpty() == false) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据设备ID查询最新的电力监测值成功" + power); + + return power; + } + 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 findPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 finPowerByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 addPowerRecord(PgPower power) { + return addPowerRecord(power.getAu(), power.getBu(), power.getCu(), power.getAi(), power.getBi(), power.getCi(), power.getTmStr(), power.getPgdeviceid()); + } + + @Override + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_POWER " + + "(AU, BU, CU, AI, BI, CI, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[9]; + params[0] = NumberFormat.format(au, "0.00"); + params[1] = NumberFormat.format(bu, "0.00"); + params[2] = NumberFormat.format(cu, "0.00"); + params[3] = NumberFormat.format(ai, "0.00"); + params[4] = NumberFormat.format(bi, "0.00"); + params[5] = NumberFormat.format(ci, "0.00"); + params[6] = tm; + params[7] = tm; + params[8] = 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 + ", temp=" + au + ", ai=" + ai + ", 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/data/PgPower.java b/src/com/szpg/db/data/PgPower.java new file mode 100644 index 0000000..c0a819d --- /dev/null +++ b/src/com/szpg/db/data/PgPower.java @@ -0,0 +1,144 @@ +package com.szpg.db.data; + +import com.szpg.util.TimeFormat; + +import java.util.Date; + +/** + * 电力参数值监测数据表 + * + * @author admin + * + */ +public class PgPower implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Float au; + private Float bu; + private Float cu; + private Float ai; + private Float bi; + private Float ci; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + 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 Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Float getAu() { + return au; + } + + public void setAu(Float au) { + this.au = au; + } + + public Float getBu() { + return bu; + } + + public void setBu(Float bu) { + this.bu = bu; + } + + public Float getCu() { + return cu; + } + + public void setCu(Float cu) { + this.cu = cu; + } + + public Float getAi() { + return ai; + } + + public void setAi(Float ai) { + this.ai = ai; + } + + public Float getBi() { + return bi; + } + + public void setBi(Float bi) { + this.bi = bi; + } + + public Float getCi() { + return ci; + } + + public void setCi(Float ci) { + this.ci = ci; + } + + 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 ""; + } + } + + @Override + public String toString() { + return "PgPower{" + + "logtime=" + TimeFormat.formatTimestamp(logtime) + + ", au=" + au + + ", bu=" + bu + + ", cu=" + cu + + ", ai=" + ai + + ", bi=" + bi + + ", ci=" + ci + + '}'; + } +} diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index 79b9217..cb5a82e 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -14,6 +14,8 @@ public final static String CMD_TYPE_READHSVALUE = "18"; //读取硫化氢监测值命令 public final static String CMD_TYPE_READHSSTATUS = "19"; //读取硫化氢报警状态命令 + public final static String CMD_TYPE_READPOWERVALUE = "20"; // 读取电力参数监测值命令 + public final static String CMD_TYPE_READYWSTATUS = "21"; //读取爆管液位报警状态命令 public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index a311507..b931747 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -95,6 +95,9 @@ case AppMessageConstants.CMD_TYPE_READHSCH4VALUE: return new ReadHSCH4ValueCommand(); + + case AppMessageConstants.CMD_TYPE_READPOWERVALUE: + return new ReadPowerValueCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadPowerValueCommand.java b/src/com/szpg/plc/message/command/read/ReadPowerValueCommand.java new file mode 100644 index 0000000..31d2373 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadPowerValueCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadPowerValueCommandResponse; + +public class ReadPowerValueCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 3051868021937132489L; + + @Override + public Class getResponseClass() { + return ReadPowerValueCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询电力监测值命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READPOWERVALUE; + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadPowerValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadPowerValueCommandResponse.java new file mode 100644 index 0000000..53c4d54 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadPowerValueCommandResponse.java @@ -0,0 +1,192 @@ +package com.szpg.plc.message.response.read; + +import com.szpg.db.dao.*; +import com.szpg.db.dao.impl.*; +import com.szpg.db.data.PgAlarm; +import com.szpg.db.data.PgAlarmRule; +import com.szpg.db.data.PgDevice; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.util.*; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +public class ReadPowerValueCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List au; //A相电压 + private List bu; //B相电压 + private List cu; //C相电压 + private List ai; //A相电流 + private List bi; //B相电流 + private List ci; //C相电流 + private String[] zcList; //电力监测的资产列表,从配置文件中获取 + + public ReadPowerValueCommandResponse() { + au = new ArrayList(); + bu = new ArrayList(); + cu = new ArrayList(); + ai = new ArrayList(); + bi = new ArrayList(); + ci = new ArrayList(); + } + + public List getAu() { + return au; + } + + public void setAu(List au) { + this.au = au; + } + + public List getBu() { + return bu; + } + + public void setBu(List bu) { + this.bu = bu; + } + + public List getCu() { + return cu; + } + + public void setCu(List cu) { + this.cu = cu; + } + + public List getAi() { + return ai; + } + + public void setAi(List ai) { + this.ai = ai; + } + + public List getBi() { + return bi; + } + + public void setBi(List bi) { + this.bi = bi; + } + + public List getCi() { + return ci; + } + + public void setCi(List ci) { + this.ci = ci; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将电力监测值数据存入数据库 + PgPowerDao powerDao = new PgPowerDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历电力设备列表,将电力浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + float auValue = au.get(i); + float buValue = bu.get(i); + float cuValue = cu.get(i); + float aiValue = ai.get(i); + float biValue = bi.get(i); + float ciValue = ci.get(i); + + int deviceId = deviceDao.findDeviceIdByCode(zcbh); + if (deviceId > 0) { + try { + powerDao.addPowerRecord(auValue, buValue, cuValue, aiValue, biValue, ciValue, TimeFormat.formatTimestamp(this.getTime().getTime()), deviceId); + } catch (Exception ex) { + logger.error("添加电力监测记录异常"); + } + } else { + logger.warn("未找到资产[" + zcbh + "]"); + } + } + } + } + + @Override + public void parseData() { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + byte[] messageData = this.getResponseData(); + + logger.info("开始解析[读取电力值][" + acucode + "]指令响应"); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DL.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 获取目标ACU电力监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DL.START")); + + // 获取目标ACU电力相关的资产列表,即电力设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DL.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析电力监测值以及电力报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析A相电压监测值 + float valueAu = getValueFromData(zcbh, start, messageData, zcbh + ".AU"); + + // 2解析B相电压监测值 + float valueBu = getValueFromData(zcbh, start, messageData, zcbh + ".BU"); + + // 3解析C相电压监测值 + float valueCu = getValueFromData(zcbh, start, messageData, zcbh + ".CU"); + + // 4解析A相电流监测值 + float valueAi = getValueFromData(zcbh, start, messageData, zcbh + ".AI"); + + // 5解析B相电流监测值 + float valueBi = getValueFromData(zcbh, start, messageData, zcbh + ".BI"); + + // 6解析C相电流监测值 + float valueCi = getValueFromData(zcbh, start, messageData, zcbh + ".CI"); + + getAu().add(valueAu); + getBu().add(valueBu); + getCu().add(valueCu); + getAi().add(valueAi); + getBi().add(valueBi); + getCi().add(valueCi); + + logger.info("[" + zcbh + "][A相" + valueAu + ", " + valueAi + "][B相" + valueBu + ", " + valueBi + "][C相" + valueCu + ", " + valueCi + "]"); + } + + logger.info("解析[读取电力值]响应指令结束"); + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 0ccd5bf..ddeb866 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -182,6 +182,10 @@ case AppMessageConstants.CMD_TYPE_READHSCH4VALUE: received = bytesToReadHSCH4ValueCommandResponse(finsFrame); break; + + case AppMessageConstants.CMD_TYPE_READPOWERVALUE: + received = bytesToReadPowerValueCommandResponse(finsFrame); + break; } } else if (commandCode.equalsIgnoreCase("0102")) { switch (commandType) { @@ -693,6 +697,28 @@ return rwvcr; } + /** + * 将读取电力监测值响应字节数组转换为消息对象 + * @param finsFrame + * @return + */ + private AppMessage bytesToReadPowerValueCommandResponse(FINSByteFrame finsFrame) { + ReadPowerValueCommandResponse rpvcr = new ReadPowerValueCommandResponse(); + rpvcr.setCommandType(AppMessageConstants.CMD_TYPE_READPOWERVALUE); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rpvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rpvcr.setResponseData(data); + } + + return rpvcr; + } + + + /** * 将默认写内存指令响应字节数组转换为消息对象 * diff --git a/src/ACUBL.properties b/src/ACUBL.properties index df9ffdb..e4db807 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -143,6 +143,16 @@ THXC.ACU001.JGSTAT.WORDCOUNT = 6 +#\u914D\u7535\u67DC\u6570\u91CF +THXC.ACU001.DL.COUNT = 1 +#\u914D\u7535\u67DC\u7F16\u7801\u5217\u8868 +THXC.ACU001.DL.ZC.LIST = THXC.ACU001.D.PDL01 +#\u914D\u7535\u67DC\u53C2\u6570\u8D77\u59CB\u5730\u5740 +THXC.ACU001.DL.START = 10 +#\u914D\u7535\u67DC\u53C2\u6570\u6240\u5360\u5B57\u6570 +THXC.ACU001.DL.WORDCOUNT = 12 + + ######## 02 THXC.ACU002 ######## #\u7532\u70F7\u4F20\u611F\u5668\u6570\u91CF diff --git a/src/com/szpg/db/dao/PgPowerDao.java b/src/com/szpg/db/dao/PgPowerDao.java new file mode 100644 index 0000000..0004875 --- /dev/null +++ b/src/com/szpg/db/dao/PgPowerDao.java @@ -0,0 +1,24 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgPower; + +import java.util.List; + +/** + * 电力相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgPowerDao { + + /******** 温湿度监测值 ********/ + public List findAllPower(); + public PgPower findPowerById(Integer id); + public PgPower findLatestPowerByDevice(Integer deviceid); + + public List findPowerByDevice(Integer deviceid); + public List finPowerByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPowerRecord(PgPower power); + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java new file mode 100644 index 0000000..7941cb1 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java @@ -0,0 +1,339 @@ +package com.szpg.db.dao.impl; + +import com.szpg.db.dao.PgPowerDao; +import com.szpg.db.data.PgPower; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.commons.dbutils.handlers.ScalarHandler; +import org.apache.log4j.Logger; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +public class PgPowerDaoImpl implements PgPowerDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPower() { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List powerList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != powerList && powerList.isEmpty() == false) { + logger.debug("查询所有电力参数监测值成功[" + powerList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < powerList.size(); i++) { + PgPower power = new PgPower(); + Object[] item = powerList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 PgPower findPowerById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据ID查询电力监测值成功" + power); + + return power; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询电力监测值异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgPower findLatestPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER WHERE PGDEVICEID = ? AND ROWNUM <= 5 ORDER BY LOGTIME DESC"; + 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(), param); + + if (null != tempList && tempList.isEmpty() == false) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据设备ID查询最新的电力监测值成功" + power); + + return power; + } + 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 findPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 finPowerByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 addPowerRecord(PgPower power) { + return addPowerRecord(power.getAu(), power.getBu(), power.getCu(), power.getAi(), power.getBi(), power.getCi(), power.getTmStr(), power.getPgdeviceid()); + } + + @Override + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_POWER " + + "(AU, BU, CU, AI, BI, CI, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[9]; + params[0] = NumberFormat.format(au, "0.00"); + params[1] = NumberFormat.format(bu, "0.00"); + params[2] = NumberFormat.format(cu, "0.00"); + params[3] = NumberFormat.format(ai, "0.00"); + params[4] = NumberFormat.format(bi, "0.00"); + params[5] = NumberFormat.format(ci, "0.00"); + params[6] = tm; + params[7] = tm; + params[8] = 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 + ", temp=" + au + ", ai=" + ai + ", 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/data/PgPower.java b/src/com/szpg/db/data/PgPower.java new file mode 100644 index 0000000..c0a819d --- /dev/null +++ b/src/com/szpg/db/data/PgPower.java @@ -0,0 +1,144 @@ +package com.szpg.db.data; + +import com.szpg.util.TimeFormat; + +import java.util.Date; + +/** + * 电力参数值监测数据表 + * + * @author admin + * + */ +public class PgPower implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Float au; + private Float bu; + private Float cu; + private Float ai; + private Float bi; + private Float ci; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + 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 Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Float getAu() { + return au; + } + + public void setAu(Float au) { + this.au = au; + } + + public Float getBu() { + return bu; + } + + public void setBu(Float bu) { + this.bu = bu; + } + + public Float getCu() { + return cu; + } + + public void setCu(Float cu) { + this.cu = cu; + } + + public Float getAi() { + return ai; + } + + public void setAi(Float ai) { + this.ai = ai; + } + + public Float getBi() { + return bi; + } + + public void setBi(Float bi) { + this.bi = bi; + } + + public Float getCi() { + return ci; + } + + public void setCi(Float ci) { + this.ci = ci; + } + + 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 ""; + } + } + + @Override + public String toString() { + return "PgPower{" + + "logtime=" + TimeFormat.formatTimestamp(logtime) + + ", au=" + au + + ", bu=" + bu + + ", cu=" + cu + + ", ai=" + ai + + ", bi=" + bi + + ", ci=" + ci + + '}'; + } +} diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index 79b9217..cb5a82e 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -14,6 +14,8 @@ public final static String CMD_TYPE_READHSVALUE = "18"; //读取硫化氢监测值命令 public final static String CMD_TYPE_READHSSTATUS = "19"; //读取硫化氢报警状态命令 + public final static String CMD_TYPE_READPOWERVALUE = "20"; // 读取电力参数监测值命令 + public final static String CMD_TYPE_READYWSTATUS = "21"; //读取爆管液位报警状态命令 public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index a311507..b931747 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -95,6 +95,9 @@ case AppMessageConstants.CMD_TYPE_READHSCH4VALUE: return new ReadHSCH4ValueCommand(); + + case AppMessageConstants.CMD_TYPE_READPOWERVALUE: + return new ReadPowerValueCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadPowerValueCommand.java b/src/com/szpg/plc/message/command/read/ReadPowerValueCommand.java new file mode 100644 index 0000000..31d2373 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadPowerValueCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadPowerValueCommandResponse; + +public class ReadPowerValueCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 3051868021937132489L; + + @Override + public Class getResponseClass() { + return ReadPowerValueCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询电力监测值命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READPOWERVALUE; + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadPowerValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadPowerValueCommandResponse.java new file mode 100644 index 0000000..53c4d54 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadPowerValueCommandResponse.java @@ -0,0 +1,192 @@ +package com.szpg.plc.message.response.read; + +import com.szpg.db.dao.*; +import com.szpg.db.dao.impl.*; +import com.szpg.db.data.PgAlarm; +import com.szpg.db.data.PgAlarmRule; +import com.szpg.db.data.PgDevice; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.util.*; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +public class ReadPowerValueCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List au; //A相电压 + private List bu; //B相电压 + private List cu; //C相电压 + private List ai; //A相电流 + private List bi; //B相电流 + private List ci; //C相电流 + private String[] zcList; //电力监测的资产列表,从配置文件中获取 + + public ReadPowerValueCommandResponse() { + au = new ArrayList(); + bu = new ArrayList(); + cu = new ArrayList(); + ai = new ArrayList(); + bi = new ArrayList(); + ci = new ArrayList(); + } + + public List getAu() { + return au; + } + + public void setAu(List au) { + this.au = au; + } + + public List getBu() { + return bu; + } + + public void setBu(List bu) { + this.bu = bu; + } + + public List getCu() { + return cu; + } + + public void setCu(List cu) { + this.cu = cu; + } + + public List getAi() { + return ai; + } + + public void setAi(List ai) { + this.ai = ai; + } + + public List getBi() { + return bi; + } + + public void setBi(List bi) { + this.bi = bi; + } + + public List getCi() { + return ci; + } + + public void setCi(List ci) { + this.ci = ci; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将电力监测值数据存入数据库 + PgPowerDao powerDao = new PgPowerDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历电力设备列表,将电力浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + float auValue = au.get(i); + float buValue = bu.get(i); + float cuValue = cu.get(i); + float aiValue = ai.get(i); + float biValue = bi.get(i); + float ciValue = ci.get(i); + + int deviceId = deviceDao.findDeviceIdByCode(zcbh); + if (deviceId > 0) { + try { + powerDao.addPowerRecord(auValue, buValue, cuValue, aiValue, biValue, ciValue, TimeFormat.formatTimestamp(this.getTime().getTime()), deviceId); + } catch (Exception ex) { + logger.error("添加电力监测记录异常"); + } + } else { + logger.warn("未找到资产[" + zcbh + "]"); + } + } + } + } + + @Override + public void parseData() { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + byte[] messageData = this.getResponseData(); + + logger.info("开始解析[读取电力值][" + acucode + "]指令响应"); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DL.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 获取目标ACU电力监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DL.START")); + + // 获取目标ACU电力相关的资产列表,即电力设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DL.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析电力监测值以及电力报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析A相电压监测值 + float valueAu = getValueFromData(zcbh, start, messageData, zcbh + ".AU"); + + // 2解析B相电压监测值 + float valueBu = getValueFromData(zcbh, start, messageData, zcbh + ".BU"); + + // 3解析C相电压监测值 + float valueCu = getValueFromData(zcbh, start, messageData, zcbh + ".CU"); + + // 4解析A相电流监测值 + float valueAi = getValueFromData(zcbh, start, messageData, zcbh + ".AI"); + + // 5解析B相电流监测值 + float valueBi = getValueFromData(zcbh, start, messageData, zcbh + ".BI"); + + // 6解析C相电流监测值 + float valueCi = getValueFromData(zcbh, start, messageData, zcbh + ".CI"); + + getAu().add(valueAu); + getBu().add(valueBu); + getCu().add(valueCu); + getAi().add(valueAi); + getBi().add(valueBi); + getCi().add(valueCi); + + logger.info("[" + zcbh + "][A相" + valueAu + ", " + valueAi + "][B相" + valueBu + ", " + valueBi + "][C相" + valueCu + ", " + valueCi + "]"); + } + + logger.info("解析[读取电力值]响应指令结束"); + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 0ccd5bf..ddeb866 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -182,6 +182,10 @@ case AppMessageConstants.CMD_TYPE_READHSCH4VALUE: received = bytesToReadHSCH4ValueCommandResponse(finsFrame); break; + + case AppMessageConstants.CMD_TYPE_READPOWERVALUE: + received = bytesToReadPowerValueCommandResponse(finsFrame); + break; } } else if (commandCode.equalsIgnoreCase("0102")) { switch (commandType) { @@ -693,6 +697,28 @@ return rwvcr; } + /** + * 将读取电力监测值响应字节数组转换为消息对象 + * @param finsFrame + * @return + */ + private AppMessage bytesToReadPowerValueCommandResponse(FINSByteFrame finsFrame) { + ReadPowerValueCommandResponse rpvcr = new ReadPowerValueCommandResponse(); + rpvcr.setCommandType(AppMessageConstants.CMD_TYPE_READPOWERVALUE); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rpvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rpvcr.setResponseData(data); + } + + return rpvcr; + } + + + /** * 将默认写内存指令响应字节数组转换为消息对象 * diff --git a/src/com/szpg/rmi/RemotePowerCommandAction.java b/src/com/szpg/rmi/RemotePowerCommandAction.java new file mode 100644 index 0000000..9d43434 --- /dev/null +++ b/src/com/szpg/rmi/RemotePowerCommandAction.java @@ -0,0 +1,168 @@ +package com.szpg.rmi; + +import com.opensymphony.xwork2.ActionSupport; +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAlarmRuleDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAlarmRuleDaoImpl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.command.WriteMemoryCommand; +import com.szpg.plc.message.command.write.SetCH4ThresholdWordCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.service.ReadSensorValueService; +import com.szpg.service.SetSensorThresholdService; +import com.szpg.util.Configure; +import com.szpg.util.NumberFormat; +import com.szpg.util.UnicodeConvertor; +import org.apache.log4j.Logger; +import org.apache.struts2.ServletActionContext; +import z.json.JSONObject; + +public class RemotePowerCommandAction extends ActionSupport { + + /** + * + */ + private static final long serialVersionUID = 2221187086461756012L; + + private String zcbh; + + private String format; + private String jsoncallback; + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getFormat() { + return format; + } + + public void setFormat(String format) { + this.format = format; + } + + public String getJsoncallback() { + return jsoncallback; + } + + public void setJsoncallback(String jsoncallback) { + this.jsoncallback = jsoncallback; + } + + /** + * 读取电力实时监测值 + * @return + * @throws Exception + */ + public String readPowerValue() throws Exception { + // 返回结果 + JSONObject jResult = new JSONObject(); + + PgAcuDao acuDao = new PgAcuDaoImpl(); + + if (null == zcbh || zcbh.equals("") == true) { + jResult.put("success", false); + jResult.put("code", "1"); + jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空")); + + returnToFront(jResult); + return null; + } + + String acucode = zcbh.substring(0, zcbh.indexOf(".", 6)); + PgAcu acu = acuDao.findACUByCode(acucode); + if (null == acu) { + jResult.put("success", false); + jResult.put("code", "2"); + jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机")); + + returnToFront(jResult); + return null; + } + + ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port()); + if (null != client) { + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READPOWERVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setMessageProducerHost(client.getHost()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + try { + // 没有找到对应的配置项,直接返回 + String start = Configure.getProperty("acubl", client.getAcucode() + ".DL.START"); + String countWord = Configure.getProperty("acubl", client.getAcucode() + ".DL.WORDCOUNT"); + if (null == start || start.equals("")) { + jResult.put("success", false); + jResult.put("code", "4"); + jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到对应的变量配置项")); + + returnToFront(jResult); + return null; + } + + // 设置读取的地址范围 + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(start), 2)) + "00"); + command.setCountWord(Integer.parseInt(countWord)); + + // 调用服务过程执行命令发送服务 + ReadSensorValueService service = new ReadSensorValueService(); + service.executeService(client, (ReadMemoryCommand) command); + Logger.getLogger(this.getClass().getName()).info(command); + } catch (Exception ex) { + Logger.getLogger(getClass().getName()).error("发送查询电力参数指令异常" + ex); + } + + jResult.put("success", true); + jResult.put("resaon", UnicodeConvertor.string2Unicode("发送成功,请等待响应")); + + returnToFront(jResult); + return null; + } else { + jResult.put("success", false); + jResult.put("code", "3"); + jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线")); + + returnToFront(jResult); + return null; + } + } + + + /** + * 给前端返回 + * @param jResult + * @throws Exception + */ + private void returnToFront(JSONObject jResult) throws Exception { + // 返回jsonp格式的数据 + if (null != format && format.equalsIgnoreCase("jsonp") == true) { + ServletActionContext.getResponse().getWriter().write(jsoncallback + "(" + jResult.toString() + ");"); + } + + ServletActionContext.getResponse().getWriter().write(jResult.toString()); + } +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties index df9ffdb..e4db807 100644 --- a/src/ACUBL.properties +++ b/src/ACUBL.properties @@ -143,6 +143,16 @@ THXC.ACU001.JGSTAT.WORDCOUNT = 6 +#\u914D\u7535\u67DC\u6570\u91CF +THXC.ACU001.DL.COUNT = 1 +#\u914D\u7535\u67DC\u7F16\u7801\u5217\u8868 +THXC.ACU001.DL.ZC.LIST = THXC.ACU001.D.PDL01 +#\u914D\u7535\u67DC\u53C2\u6570\u8D77\u59CB\u5730\u5740 +THXC.ACU001.DL.START = 10 +#\u914D\u7535\u67DC\u53C2\u6570\u6240\u5360\u5B57\u6570 +THXC.ACU001.DL.WORDCOUNT = 12 + + ######## 02 THXC.ACU002 ######## #\u7532\u70F7\u4F20\u611F\u5668\u6570\u91CF diff --git a/src/com/szpg/db/dao/PgPowerDao.java b/src/com/szpg/db/dao/PgPowerDao.java new file mode 100644 index 0000000..0004875 --- /dev/null +++ b/src/com/szpg/db/dao/PgPowerDao.java @@ -0,0 +1,24 @@ +package com.szpg.db.dao; + +import com.szpg.db.data.PgPower; + +import java.util.List; + +/** + * 电力相关参数读写的数据库接口 + * @author admin + * + */ +public interface PgPowerDao { + + /******** 温湿度监测值 ********/ + public List findAllPower(); + public PgPower findPowerById(Integer id); + public PgPower findLatestPowerByDevice(Integer deviceid); + + public List findPowerByDevice(Integer deviceid); + public List finPowerByDeviceAndTm(Integer deviceid, String start, String end); + + public int addPowerRecord(PgPower power); + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid); +} diff --git a/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java new file mode 100644 index 0000000..7941cb1 --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgPowerDaoImpl.java @@ -0,0 +1,339 @@ +package com.szpg.db.dao.impl; + +import com.szpg.db.dao.PgPowerDao; +import com.szpg.db.data.PgPower; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.NumberFormat; +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.ArrayListHandler; +import org.apache.commons.dbutils.handlers.ScalarHandler; +import org.apache.log4j.Logger; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +public class PgPowerDaoImpl implements PgPowerDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAllPower() { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List powerList = (List) runner.query(conn, queryStr, new ArrayListHandler()); + + if (null != powerList && powerList.isEmpty() == false) { + logger.debug("查询所有电力参数监测值成功[" + powerList.size() + "]"); + + List list = new ArrayList(); + for (int i = 0; i < powerList.size(); i++) { + PgPower power = new PgPower(); + Object[] item = powerList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 PgPower findPowerById(Integer id) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据ID查询电力监测值成功" + power); + + return power; + } + else + return null; + } catch (Exception ex) { + logger.error("根据ID查询电力监测值异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgPower findLatestPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER WHERE PGDEVICEID = ? AND ROWNUM <= 5 ORDER BY LOGTIME DESC"; + 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(), param); + + if (null != tempList && tempList.isEmpty() == false) { + PgPower power = new PgPower(); + Object[] item = tempList.get(0); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + logger.debug("根据设备ID查询最新的电力监测值成功" + power); + + return power; + } + 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 findPowerByDevice(Integer deviceid) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 finPowerByDeviceAndTm(Integer deviceid, String start, String end) { + Connection conn = null; + + String queryStr = "SELECT ID, AU, BU, CU, AI, BI, CI, LOGTIME, PGDEVICEID FROM PG_POWER 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++) { + PgPower power = new PgPower(); + Object[] item = tempList.get(i); + + power.setId(((Number) item[0]).intValue()); + power.setAu(Float.parseFloat((String) item[1])); + power.setBu(Float.parseFloat((String) item[2])); + power.setCu(Float.parseFloat((String) item[3])); + power.setAi(Float.parseFloat((String) item[4])); + power.setBi(Float.parseFloat((String) item[5])); + power.setCi(Float.parseFloat((String) item[6])); + power.setPgdeviceid(((Number) item[8]).intValue()); + + long tmValue = ((java.sql.Timestamp) ((oracle.sql.TIMESTAMP) item[7]).toJdbc()).getTime(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(tmValue); + power.setLogtime(cal.getTime()); + power.setUptime(cal.getTime()); + + list.add(power); + } + 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 addPowerRecord(PgPower power) { + return addPowerRecord(power.getAu(), power.getBu(), power.getCu(), power.getAi(), power.getBi(), power.getCi(), power.getTmStr(), power.getPgdeviceid()); + } + + @Override + public int addPowerRecord(float au, float bu, float cu, float ai, float bi, float ci, String tm, int deviceid) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_POWER " + + "(AU, BU, CU, AI, BI, CI, LOGTIME, UPTIME, PGDEVICEID) " + + "VALUES (?, ?, ?, ?, ?, ?, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'), ?)"; + Object[] params = new Object[9]; + params[0] = NumberFormat.format(au, "0.00"); + params[1] = NumberFormat.format(bu, "0.00"); + params[2] = NumberFormat.format(cu, "0.00"); + params[3] = NumberFormat.format(ai, "0.00"); + params[4] = NumberFormat.format(bi, "0.00"); + params[5] = NumberFormat.format(ci, "0.00"); + params[6] = tm; + params[7] = tm; + params[8] = 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 + ", temp=" + au + ", ai=" + ai + ", 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/data/PgPower.java b/src/com/szpg/db/data/PgPower.java new file mode 100644 index 0000000..c0a819d --- /dev/null +++ b/src/com/szpg/db/data/PgPower.java @@ -0,0 +1,144 @@ +package com.szpg.db.data; + +import com.szpg.util.TimeFormat; + +import java.util.Date; + +/** + * 电力参数值监测数据表 + * + * @author admin + * + */ +public class PgPower implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = 3227305968602654566L; + + private Integer id; + private Date logtime; + private Date uptime; + private Integer pgdeviceid; + private Float au; + private Float bu; + private Float cu; + private Float ai; + private Float bi; + private Float ci; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + 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 Integer getPgdeviceid() { + return pgdeviceid; + } + + public void setPgdeviceid(Integer pgdeviceid) { + this.pgdeviceid = pgdeviceid; + } + + public Float getAu() { + return au; + } + + public void setAu(Float au) { + this.au = au; + } + + public Float getBu() { + return bu; + } + + public void setBu(Float bu) { + this.bu = bu; + } + + public Float getCu() { + return cu; + } + + public void setCu(Float cu) { + this.cu = cu; + } + + public Float getAi() { + return ai; + } + + public void setAi(Float ai) { + this.ai = ai; + } + + public Float getBi() { + return bi; + } + + public void setBi(Float bi) { + this.bi = bi; + } + + public Float getCi() { + return ci; + } + + public void setCi(Float ci) { + this.ci = ci; + } + + 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 ""; + } + } + + @Override + public String toString() { + return "PgPower{" + + "logtime=" + TimeFormat.formatTimestamp(logtime) + + ", au=" + au + + ", bu=" + bu + + ", cu=" + cu + + ", ai=" + ai + + ", bi=" + bi + + ", ci=" + ci + + '}'; + } +} diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java index 79b9217..cb5a82e 100644 --- a/src/com/szpg/plc/message/AppMessageConstants.java +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -14,6 +14,8 @@ public final static String CMD_TYPE_READHSVALUE = "18"; //读取硫化氢监测值命令 public final static String CMD_TYPE_READHSSTATUS = "19"; //读取硫化氢报警状态命令 + public final static String CMD_TYPE_READPOWERVALUE = "20"; // 读取电力参数监测值命令 + public final static String CMD_TYPE_READYWSTATUS = "21"; //读取爆管液位报警状态命令 public final static String CMD_TYPE_READDSSTATUS = "22"; //读取对射报警状态命令 public final static String CMD_TYPE_READFJSTAT = "23"; //读取风机运行状态命令 diff --git a/src/com/szpg/plc/message/command/ReadMemoryCommand.java b/src/com/szpg/plc/message/command/ReadMemoryCommand.java index a311507..b931747 100644 --- a/src/com/szpg/plc/message/command/ReadMemoryCommand.java +++ b/src/com/szpg/plc/message/command/ReadMemoryCommand.java @@ -95,6 +95,9 @@ case AppMessageConstants.CMD_TYPE_READHSCH4VALUE: return new ReadHSCH4ValueCommand(); + + case AppMessageConstants.CMD_TYPE_READPOWERVALUE: + return new ReadPowerValueCommand(); default: return null; diff --git a/src/com/szpg/plc/message/command/read/ReadPowerValueCommand.java b/src/com/szpg/plc/message/command/read/ReadPowerValueCommand.java new file mode 100644 index 0000000..31d2373 --- /dev/null +++ b/src/com/szpg/plc/message/command/read/ReadPowerValueCommand.java @@ -0,0 +1,29 @@ +package com.szpg.plc.message.command.read; + +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.response.read.ReadPowerValueCommandResponse; + +public class ReadPowerValueCommand extends ReadMemoryCommand { + + /** + * + */ + private static final long serialVersionUID = 3051868021937132489L; + + @Override + public Class getResponseClass() { + return ReadPowerValueCommandResponse.class; + } + + @Override + public String toString() { + return "向终端[" + getDestinationId() + "]发送查询电力监测值命令"; + } + + @Override + public String getCommandType() { + return AppMessageConstants.CMD_TYPE_READPOWERVALUE; + } + +} diff --git a/src/com/szpg/plc/message/response/read/ReadPowerValueCommandResponse.java b/src/com/szpg/plc/message/response/read/ReadPowerValueCommandResponse.java new file mode 100644 index 0000000..53c4d54 --- /dev/null +++ b/src/com/szpg/plc/message/response/read/ReadPowerValueCommandResponse.java @@ -0,0 +1,192 @@ +package com.szpg.plc.message.response.read; + +import com.szpg.db.dao.*; +import com.szpg.db.dao.impl.*; +import com.szpg.db.data.PgAlarm; +import com.szpg.db.data.PgAlarmRule; +import com.szpg.db.data.PgDevice; +import com.szpg.plc.message.response.ReadMemoryCommandResponse; +import com.szpg.util.*; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +public class ReadPowerValueCommandResponse extends ReadMemoryCommandResponse { + + /** + * + */ + private static final long serialVersionUID = 2964733118081941174L; + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + private List au; //A相电压 + private List bu; //B相电压 + private List cu; //C相电压 + private List ai; //A相电流 + private List bi; //B相电流 + private List ci; //C相电流 + private String[] zcList; //电力监测的资产列表,从配置文件中获取 + + public ReadPowerValueCommandResponse() { + au = new ArrayList(); + bu = new ArrayList(); + cu = new ArrayList(); + ai = new ArrayList(); + bi = new ArrayList(); + ci = new ArrayList(); + } + + public List getAu() { + return au; + } + + public void setAu(List au) { + this.au = au; + } + + public List getBu() { + return bu; + } + + public void setBu(List bu) { + this.bu = bu; + } + + public List getCu() { + return cu; + } + + public void setCu(List cu) { + this.cu = cu; + } + + public List getAi() { + return ai; + } + + public void setAi(List ai) { + this.ai = ai; + } + + public List getBi() { + return bi; + } + + public void setBi(List bi) { + this.bi = bi; + } + + public List getCi() { + return ci; + } + + public void setCi(List ci) { + this.ci = ci; + } + + public String[] getZcList() { + return zcList; + } + + public void setZcList(String[] zcList) { + this.zcList = zcList; + } + + @Override + public void afterAction() { + // 1将电力监测值数据存入数据库 + PgPowerDao powerDao = new PgPowerDaoImpl(); + PgDeviceDao deviceDao = new PgDeviceDaoImpl(); + + if (null != zcList && zcList.length > 0) { + // 遍历电力设备列表,将电力浓度监测值存入数据库 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + float auValue = au.get(i); + float buValue = bu.get(i); + float cuValue = cu.get(i); + float aiValue = ai.get(i); + float biValue = bi.get(i); + float ciValue = ci.get(i); + + int deviceId = deviceDao.findDeviceIdByCode(zcbh); + if (deviceId > 0) { + try { + powerDao.addPowerRecord(auValue, buValue, cuValue, aiValue, biValue, ciValue, TimeFormat.formatTimestamp(this.getTime().getTime()), deviceId); + } catch (Exception ex) { + logger.error("添加电力监测记录异常"); + } + } else { + logger.warn("未找到资产[" + zcbh + "]"); + } + } + } + } + + @Override + public void parseData() { + // 获取目标ACU的代码 + String acucode = this.getAcucode(); + byte[] messageData = this.getResponseData(); + + logger.info("开始解析[读取电力值][" + acucode + "]指令响应"); + + // 判断数据的长度是否满足要求 + if (messageData.length != Integer.parseInt(Configure.getProperty("acubl", acucode + ".DL.WORDCOUNT")) * 2) { + logger.error("返回的数据长度与读取的不一致!"); + this.setValid(false); + return; + } + + // 获取目标ACU电力监测值内存区域的起始字地址 + int start = Integer.parseInt(Configure.getProperty("acubl", acucode + ".DL.START")); + + // 获取目标ACU电力相关的资产列表,即电力设备列表 + String zcListStr = Configure.getProperty("acubl", acucode + ".DL.ZC.LIST"); + if (StringUtils.isEmpty(zcListStr) == true) { + this.setValid(false); + return; + } + zcList = zcListStr.split(";"); + + // 解析电力监测值以及电力报警阈值 + for (int i = 0; i < zcList.length; i++) { + String zcbh = zcList[i]; + + // 1解析A相电压监测值 + float valueAu = getValueFromData(zcbh, start, messageData, zcbh + ".AU"); + + // 2解析B相电压监测值 + float valueBu = getValueFromData(zcbh, start, messageData, zcbh + ".BU"); + + // 3解析C相电压监测值 + float valueCu = getValueFromData(zcbh, start, messageData, zcbh + ".CU"); + + // 4解析A相电流监测值 + float valueAi = getValueFromData(zcbh, start, messageData, zcbh + ".AI"); + + // 5解析B相电流监测值 + float valueBi = getValueFromData(zcbh, start, messageData, zcbh + ".BI"); + + // 6解析C相电流监测值 + float valueCi = getValueFromData(zcbh, start, messageData, zcbh + ".CI"); + + getAu().add(valueAu); + getBu().add(valueBu); + getCu().add(valueCu); + getAi().add(valueAi); + getBi().add(valueBi); + getCi().add(valueCi); + + logger.info("[" + zcbh + "][A相" + valueAu + ", " + valueAi + "][B相" + valueBu + ", " + valueBi + "][C相" + valueCu + ", " + valueCi + "]"); + } + + logger.info("解析[读取电力值]响应指令结束"); + } + +} diff --git a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java index 0ccd5bf..ddeb866 100644 --- a/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java +++ b/src/com/szpg/plc/protocol/fins/FINSDTProtocolImp.java @@ -182,6 +182,10 @@ case AppMessageConstants.CMD_TYPE_READHSCH4VALUE: received = bytesToReadHSCH4ValueCommandResponse(finsFrame); break; + + case AppMessageConstants.CMD_TYPE_READPOWERVALUE: + received = bytesToReadPowerValueCommandResponse(finsFrame); + break; } } else if (commandCode.equalsIgnoreCase("0102")) { switch (commandType) { @@ -693,6 +697,28 @@ return rwvcr; } + /** + * 将读取电力监测值响应字节数组转换为消息对象 + * @param finsFrame + * @return + */ + private AppMessage bytesToReadPowerValueCommandResponse(FINSByteFrame finsFrame) { + ReadPowerValueCommandResponse rpvcr = new ReadPowerValueCommandResponse(); + rpvcr.setCommandType(AppMessageConstants.CMD_TYPE_READPOWERVALUE); + + byte[] body = finsFrame.TEXT_DATA_BODY; + rpvcr.setMessageProducerId(FINSByteFrameTool.getControlDest(finsFrame)); + if (body[2] == 0x00 && body[3] == 0x00) { + // 正常返回 + byte[] data = FINSByteFrameTool.getDataWithoutEndCode(finsFrame); //获取返回的内存 + rpvcr.setResponseData(data); + } + + return rpvcr; + } + + + /** * 将默认写内存指令响应字节数组转换为消息对象 * diff --git a/src/com/szpg/rmi/RemotePowerCommandAction.java b/src/com/szpg/rmi/RemotePowerCommandAction.java new file mode 100644 index 0000000..9d43434 --- /dev/null +++ b/src/com/szpg/rmi/RemotePowerCommandAction.java @@ -0,0 +1,168 @@ +package com.szpg.rmi; + +import com.opensymphony.xwork2.ActionSupport; +import com.szpg.db.dao.PgAcuDao; +import com.szpg.db.dao.PgAlarmRuleDao; +import com.szpg.db.dao.PgDeviceDao; +import com.szpg.db.dao.PgHjsbblDao; +import com.szpg.db.dao.impl.PgAcuDaoImpl; +import com.szpg.db.dao.impl.PgAlarmRuleDaoImpl; +import com.szpg.db.dao.impl.PgDeviceDaoImpl; +import com.szpg.db.dao.impl.PgHjsbblDaoImpl; +import com.szpg.db.data.PgAcu; +import com.szpg.db.data.PgHjsbbl; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.ReadMemoryCommand; +import com.szpg.plc.message.command.WriteMemoryCommand; +import com.szpg.plc.message.command.write.SetCH4ThresholdWordCommand; +import com.szpg.plc.protocol.fins.FINSConstants; +import com.szpg.plc.server.ACUClient; +import com.szpg.plc.server.ACUClientUtil; +import com.szpg.plc.util.ByteUtil; +import com.szpg.plc.util.Bytes; +import com.szpg.service.ReadSensorValueService; +import com.szpg.service.SetSensorThresholdService; +import com.szpg.util.Configure; +import com.szpg.util.NumberFormat; +import com.szpg.util.UnicodeConvertor; +import org.apache.log4j.Logger; +import org.apache.struts2.ServletActionContext; +import z.json.JSONObject; + +public class RemotePowerCommandAction extends ActionSupport { + + /** + * + */ + private static final long serialVersionUID = 2221187086461756012L; + + private String zcbh; + + private String format; + private String jsoncallback; + + public String getZcbh() { + return zcbh; + } + + public void setZcbh(String zcbh) { + this.zcbh = zcbh; + } + + public String getFormat() { + return format; + } + + public void setFormat(String format) { + this.format = format; + } + + public String getJsoncallback() { + return jsoncallback; + } + + public void setJsoncallback(String jsoncallback) { + this.jsoncallback = jsoncallback; + } + + /** + * 读取电力实时监测值 + * @return + * @throws Exception + */ + public String readPowerValue() throws Exception { + // 返回结果 + JSONObject jResult = new JSONObject(); + + PgAcuDao acuDao = new PgAcuDaoImpl(); + + if (null == zcbh || zcbh.equals("") == true) { + jResult.put("success", false); + jResult.put("code", "1"); + jResult.put("resaon", UnicodeConvertor.string2Unicode("资产编号为空")); + + returnToFront(jResult); + return null; + } + + String acucode = zcbh.substring(0, zcbh.indexOf(".", 6)); + PgAcu acu = acuDao.findACUByCode(acucode); + if (null == acu) { + jResult.put("success", false); + jResult.put("code", "2"); + jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到资产对应的PLC主机")); + + returnToFront(jResult); + return null; + } + + ACUClient client = ACUClientUtil.getInstance().getClients().get(acu.getAcu_host() + ":" + acu.getAcu_port()); + if (null != client) { + ReadMemoryCommand command = ReadMemoryCommand.getInstance(AppMessageConstants.CMD_TYPE_READPOWERVALUE); + String sour = Configure.getProperty("sys", "LOCALHOST.NET") + + Configure.getProperty("sys", "LOCALHOST.NODE") + + Configure.getProperty("sys", "LOCALHOST.UNIT"); + command.setMessageProducerId(sour); + command.setMessageProducerHost(client.getHost()); + + String dest = client.getNet() + client.getNode() + client.getUnit(); + + command.setDestinationId(dest); + + command.setMemoryArea(FINSConstants.MEMORY_DM_AREA); + + try { + // 没有找到对应的配置项,直接返回 + String start = Configure.getProperty("acubl", client.getAcucode() + ".DL.START"); + String countWord = Configure.getProperty("acubl", client.getAcucode() + ".DL.WORDCOUNT"); + if (null == start || start.equals("")) { + jResult.put("success", false); + jResult.put("code", "4"); + jResult.put("resaon", UnicodeConvertor.string2Unicode("未找到对应的变量配置项")); + + returnToFront(jResult); + return null; + } + + // 设置读取的地址范围 + command.setStartAddress(ByteUtil.binToHexString(ByteUtil.intToBins(Integer.parseInt(start), 2)) + "00"); + command.setCountWord(Integer.parseInt(countWord)); + + // 调用服务过程执行命令发送服务 + ReadSensorValueService service = new ReadSensorValueService(); + service.executeService(client, (ReadMemoryCommand) command); + Logger.getLogger(this.getClass().getName()).info(command); + } catch (Exception ex) { + Logger.getLogger(getClass().getName()).error("发送查询电力参数指令异常" + ex); + } + + jResult.put("success", true); + jResult.put("resaon", UnicodeConvertor.string2Unicode("发送成功,请等待响应")); + + returnToFront(jResult); + return null; + } else { + jResult.put("success", false); + jResult.put("code", "3"); + jResult.put("resaon", UnicodeConvertor.string2Unicode("PLC主机不在线")); + + returnToFront(jResult); + return null; + } + } + + + /** + * 给前端返回 + * @param jResult + * @throws Exception + */ + private void returnToFront(JSONObject jResult) throws Exception { + // 返回jsonp格式的数据 + if (null != format && format.equalsIgnoreCase("jsonp") == true) { + ServletActionContext.getResponse().getWriter().write(jsoncallback + "(" + jResult.toString() + ");"); + } + + ServletActionContext.getResponse().getWriter().write(jResult.toString()); + } +} diff --git a/src/struts.xml b/src/struts.xml index eb988c8..208b0d3 100644 --- a/src/struts.xml +++ b/src/struts.xml @@ -48,5 +48,8 @@ + + +