diff --git a/src/ACUBL.properties b/src/ACUBL.properties new file mode 100644 index 0000000..dafeb10 --- /dev/null +++ b/src/ACUBL.properties @@ -0,0 +1,3 @@ +#ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 +YXL.ACU001.DCH.START = 0300 +YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file diff --git a/src/ACUBL.properties b/src/ACUBL.properties new file mode 100644 index 0000000..dafeb10 --- /dev/null +++ b/src/ACUBL.properties @@ -0,0 +1,3 @@ +#ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 +YXL.ACU001.DCH.START = 0300 +YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java new file mode 100644 index 0000000..b2762f4 --- /dev/null +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -0,0 +1,15 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgAcuRdcmd; + +public interface PgAcuRdcmdDao { + + public List findAll(); + public PgAcuRdcmd findById(String id); + + public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); + + public int addCmdRecord(PgAcuRdcmd cmd); +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties new file mode 100644 index 0000000..dafeb10 --- /dev/null +++ b/src/ACUBL.properties @@ -0,0 +1,3 @@ +#ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 +YXL.ACU001.DCH.START = 0300 +YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java new file mode 100644 index 0000000..b2762f4 --- /dev/null +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -0,0 +1,15 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgAcuRdcmd; + +public interface PgAcuRdcmdDao { + + public List findAll(); + public PgAcuRdcmd findById(String id); + + public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); + + public int addCmdRecord(PgAcuRdcmd cmd); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java new file mode 100644 index 0000000..a3432bd --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -0,0 +1,160 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.TimeFormat; + +public class PgAcuRdcmdDaoImpl implements PgAcuRdcmdDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAll() { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU_RDCMD"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class)); + + if (null != list && list.isEmpty() == false) { + logger.debug("查询所有内存读取命令成功[" + list.size() + "]"); + + 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 PgAcuRdcmd findById(String id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询内存读取命令成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询内存读取命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; + Object[] params = new Object[2]; + params[0] = dest; + params[1] = count; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); + + if (null != list && list.isEmpty() == false) { + logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址和字数查询内存读取命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addCmdRecord(PgAcuRdcmd cmd) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ACU_RDCMD " + + "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, RESPONSED, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, '0', '0')"; + Object[] params = new Object[8]; + params[0] = cmd.getId(); + params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); + params[2] = cmd.getCmd_type(); + params[3] = cmd.getDest(); + params[4] = cmd.getMem_area_cd(); + params[5] = cmd.getStart_mem_word(); + params[6] = cmd.getStart_mem_bit(); + params[7] = cmd.getCount_word(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入读取命令数据成功" + cmd); + 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 new file mode 100644 index 0000000..dafeb10 --- /dev/null +++ b/src/ACUBL.properties @@ -0,0 +1,3 @@ +#ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 +YXL.ACU001.DCH.START = 0300 +YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java new file mode 100644 index 0000000..b2762f4 --- /dev/null +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -0,0 +1,15 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgAcuRdcmd; + +public interface PgAcuRdcmdDao { + + public List findAll(); + public PgAcuRdcmd findById(String id); + + public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); + + public int addCmdRecord(PgAcuRdcmd cmd); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java new file mode 100644 index 0000000..a3432bd --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -0,0 +1,160 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.TimeFormat; + +public class PgAcuRdcmdDaoImpl implements PgAcuRdcmdDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAll() { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU_RDCMD"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class)); + + if (null != list && list.isEmpty() == false) { + logger.debug("查询所有内存读取命令成功[" + list.size() + "]"); + + 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 PgAcuRdcmd findById(String id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询内存读取命令成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询内存读取命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; + Object[] params = new Object[2]; + params[0] = dest; + params[1] = count; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); + + if (null != list && list.isEmpty() == false) { + logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址和字数查询内存读取命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addCmdRecord(PgAcuRdcmd cmd) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ACU_RDCMD " + + "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, RESPONSED, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, '0', '0')"; + Object[] params = new Object[8]; + params[0] = cmd.getId(); + params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); + params[2] = cmd.getCmd_type(); + params[3] = cmd.getDest(); + params[4] = cmd.getMem_area_cd(); + params[5] = cmd.getStart_mem_word(); + params[6] = cmd.getStart_mem_bit(); + params[7] = cmd.getCount_word(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入读取命令数据成功" + cmd); + 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/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java new file mode 100644 index 0000000..38f8667 --- /dev/null +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -0,0 +1,123 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 读取内存命令对应数据表 + * + * @author admin + * + */ +public class PgAcuRdcmd implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -3187227934289186463L; + + private String id; // ID + private Date tm; // 命令发送时间 + private String cmd_type; // 命令类型 + private String dest; // 目标地址 + private String mem_area_cd; // 内存区域代码 + private String start_mem_word; // 起始内存字地址 + private String start_mem_bit; // 起始内存位地址 + private Integer count_word; // 读取的字数量 + private boolean responsed; // 是否收到响应 + private boolean timeout; // 是否超时 + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Date getTm() { + return tm; + } + + public void setTm(Date tm) { + this.tm = tm; + } + + public String getCmd_type() { + return cmd_type; + } + + public void setCmd_type(String cmd_type) { + this.cmd_type = cmd_type; + } + + public String getDest() { + return dest; + } + + public void setDest(String dest) { + this.dest = dest; + } + + public String getMem_area_cd() { + return mem_area_cd; + } + + public void setMem_area_cd(String mem_area_cd) { + this.mem_area_cd = mem_area_cd; + } + + public String getStart_mem_word() { + return start_mem_word; + } + + public void setStart_mem_word(String start_mem_word) { + this.start_mem_word = start_mem_word; + } + + public String getStart_mem_bit() { + return start_mem_bit; + } + + public void setStart_mem_bit(String start_mem_bit) { + this.start_mem_bit = start_mem_bit; + } + + public Integer getCount_word() { + return count_word; + } + + public void setCount_word(Integer count_word) { + this.count_word = count_word; + } + + public boolean isResponsed() { + return responsed; + } + + public void setResponsed(boolean responsed) { + this.responsed = responsed; + } + + public boolean isTimeout() { + return timeout; + } + + public void setTimeout(boolean timeout) { + this.timeout = timeout; + } + + @Override + public String toString() { + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + } + + public String getTmStr() { + if (null != this.getTm()) + return TimeFormat.formatTimestamp(getTm()); + else + return ""; + } + +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties new file mode 100644 index 0000000..dafeb10 --- /dev/null +++ b/src/ACUBL.properties @@ -0,0 +1,3 @@ +#ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 +YXL.ACU001.DCH.START = 0300 +YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java new file mode 100644 index 0000000..b2762f4 --- /dev/null +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -0,0 +1,15 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgAcuRdcmd; + +public interface PgAcuRdcmdDao { + + public List findAll(); + public PgAcuRdcmd findById(String id); + + public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); + + public int addCmdRecord(PgAcuRdcmd cmd); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java new file mode 100644 index 0000000..a3432bd --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -0,0 +1,160 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.TimeFormat; + +public class PgAcuRdcmdDaoImpl implements PgAcuRdcmdDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAll() { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU_RDCMD"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class)); + + if (null != list && list.isEmpty() == false) { + logger.debug("查询所有内存读取命令成功[" + list.size() + "]"); + + 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 PgAcuRdcmd findById(String id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询内存读取命令成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询内存读取命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; + Object[] params = new Object[2]; + params[0] = dest; + params[1] = count; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); + + if (null != list && list.isEmpty() == false) { + logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址和字数查询内存读取命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addCmdRecord(PgAcuRdcmd cmd) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ACU_RDCMD " + + "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, RESPONSED, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, '0', '0')"; + Object[] params = new Object[8]; + params[0] = cmd.getId(); + params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); + params[2] = cmd.getCmd_type(); + params[3] = cmd.getDest(); + params[4] = cmd.getMem_area_cd(); + params[5] = cmd.getStart_mem_word(); + params[6] = cmd.getStart_mem_bit(); + params[7] = cmd.getCount_word(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入读取命令数据成功" + cmd); + 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/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java new file mode 100644 index 0000000..38f8667 --- /dev/null +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -0,0 +1,123 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 读取内存命令对应数据表 + * + * @author admin + * + */ +public class PgAcuRdcmd implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -3187227934289186463L; + + private String id; // ID + private Date tm; // 命令发送时间 + private String cmd_type; // 命令类型 + private String dest; // 目标地址 + private String mem_area_cd; // 内存区域代码 + private String start_mem_word; // 起始内存字地址 + private String start_mem_bit; // 起始内存位地址 + private Integer count_word; // 读取的字数量 + private boolean responsed; // 是否收到响应 + private boolean timeout; // 是否超时 + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Date getTm() { + return tm; + } + + public void setTm(Date tm) { + this.tm = tm; + } + + public String getCmd_type() { + return cmd_type; + } + + public void setCmd_type(String cmd_type) { + this.cmd_type = cmd_type; + } + + public String getDest() { + return dest; + } + + public void setDest(String dest) { + this.dest = dest; + } + + public String getMem_area_cd() { + return mem_area_cd; + } + + public void setMem_area_cd(String mem_area_cd) { + this.mem_area_cd = mem_area_cd; + } + + public String getStart_mem_word() { + return start_mem_word; + } + + public void setStart_mem_word(String start_mem_word) { + this.start_mem_word = start_mem_word; + } + + public String getStart_mem_bit() { + return start_mem_bit; + } + + public void setStart_mem_bit(String start_mem_bit) { + this.start_mem_bit = start_mem_bit; + } + + public Integer getCount_word() { + return count_word; + } + + public void setCount_word(Integer count_word) { + this.count_word = count_word; + } + + public boolean isResponsed() { + return responsed; + } + + public void setResponsed(boolean responsed) { + this.responsed = responsed; + } + + public boolean isTimeout() { + return timeout; + } + + public void setTimeout(boolean timeout) { + this.timeout = timeout; + } + + @Override + public String toString() { + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + } + + public String getTmStr() { + if (null != this.getTm()) + return TimeFormat.formatTimestamp(getTm()); + else + return ""; + } + +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdTest.java b/src/com/szpg/db/test/PgAcuRdcmdTest.java new file mode 100644 index 0000000..97a7c98 --- /dev/null +++ b/src/com/szpg/db/test/PgAcuRdcmdTest.java @@ -0,0 +1,58 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.util.ByteUtil; + +public class PgAcuRdcmdTest { + + private PgAcuRdcmdDao dao; + + @Before + public void init() { + dao = new PgAcuRdcmdDaoImpl(); + } + +// @Test + public void testAdd() { + ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); + ch4.setDestinationId("006B00"); + ch4.setMessageProducerId("00F400"); + ch4.setMemoryArea((byte) 0x82); + ch4.setStartAddress("012C00"); + ch4.setCount(24); + + + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4.getId()); + cmd.setTm(Calendar.getInstance().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); + cmd.setDest(ch4.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); + cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); + cmd.setCount_word(ch4.getCount()); + + assertEquals(1, dao.addCmdRecord(cmd)); + } + +// @Test + public void testFindAll() { + assertEquals(1, dao.findAll()); + } + + @Test + public void testFindByDestAndCount() { + assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); + } +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties new file mode 100644 index 0000000..dafeb10 --- /dev/null +++ b/src/ACUBL.properties @@ -0,0 +1,3 @@ +#ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 +YXL.ACU001.DCH.START = 0300 +YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java new file mode 100644 index 0000000..b2762f4 --- /dev/null +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -0,0 +1,15 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgAcuRdcmd; + +public interface PgAcuRdcmdDao { + + public List findAll(); + public PgAcuRdcmd findById(String id); + + public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); + + public int addCmdRecord(PgAcuRdcmd cmd); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java new file mode 100644 index 0000000..a3432bd --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -0,0 +1,160 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.TimeFormat; + +public class PgAcuRdcmdDaoImpl implements PgAcuRdcmdDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAll() { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU_RDCMD"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class)); + + if (null != list && list.isEmpty() == false) { + logger.debug("查询所有内存读取命令成功[" + list.size() + "]"); + + 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 PgAcuRdcmd findById(String id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询内存读取命令成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询内存读取命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; + Object[] params = new Object[2]; + params[0] = dest; + params[1] = count; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); + + if (null != list && list.isEmpty() == false) { + logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址和字数查询内存读取命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addCmdRecord(PgAcuRdcmd cmd) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ACU_RDCMD " + + "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, RESPONSED, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, '0', '0')"; + Object[] params = new Object[8]; + params[0] = cmd.getId(); + params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); + params[2] = cmd.getCmd_type(); + params[3] = cmd.getDest(); + params[4] = cmd.getMem_area_cd(); + params[5] = cmd.getStart_mem_word(); + params[6] = cmd.getStart_mem_bit(); + params[7] = cmd.getCount_word(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入读取命令数据成功" + cmd); + 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/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java new file mode 100644 index 0000000..38f8667 --- /dev/null +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -0,0 +1,123 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 读取内存命令对应数据表 + * + * @author admin + * + */ +public class PgAcuRdcmd implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -3187227934289186463L; + + private String id; // ID + private Date tm; // 命令发送时间 + private String cmd_type; // 命令类型 + private String dest; // 目标地址 + private String mem_area_cd; // 内存区域代码 + private String start_mem_word; // 起始内存字地址 + private String start_mem_bit; // 起始内存位地址 + private Integer count_word; // 读取的字数量 + private boolean responsed; // 是否收到响应 + private boolean timeout; // 是否超时 + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Date getTm() { + return tm; + } + + public void setTm(Date tm) { + this.tm = tm; + } + + public String getCmd_type() { + return cmd_type; + } + + public void setCmd_type(String cmd_type) { + this.cmd_type = cmd_type; + } + + public String getDest() { + return dest; + } + + public void setDest(String dest) { + this.dest = dest; + } + + public String getMem_area_cd() { + return mem_area_cd; + } + + public void setMem_area_cd(String mem_area_cd) { + this.mem_area_cd = mem_area_cd; + } + + public String getStart_mem_word() { + return start_mem_word; + } + + public void setStart_mem_word(String start_mem_word) { + this.start_mem_word = start_mem_word; + } + + public String getStart_mem_bit() { + return start_mem_bit; + } + + public void setStart_mem_bit(String start_mem_bit) { + this.start_mem_bit = start_mem_bit; + } + + public Integer getCount_word() { + return count_word; + } + + public void setCount_word(Integer count_word) { + this.count_word = count_word; + } + + public boolean isResponsed() { + return responsed; + } + + public void setResponsed(boolean responsed) { + this.responsed = responsed; + } + + public boolean isTimeout() { + return timeout; + } + + public void setTimeout(boolean timeout) { + this.timeout = timeout; + } + + @Override + public String toString() { + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + } + + public String getTmStr() { + if (null != this.getTm()) + return TimeFormat.formatTimestamp(getTm()); + else + return ""; + } + +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdTest.java b/src/com/szpg/db/test/PgAcuRdcmdTest.java new file mode 100644 index 0000000..97a7c98 --- /dev/null +++ b/src/com/szpg/db/test/PgAcuRdcmdTest.java @@ -0,0 +1,58 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.util.ByteUtil; + +public class PgAcuRdcmdTest { + + private PgAcuRdcmdDao dao; + + @Before + public void init() { + dao = new PgAcuRdcmdDaoImpl(); + } + +// @Test + public void testAdd() { + ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); + ch4.setDestinationId("006B00"); + ch4.setMessageProducerId("00F400"); + ch4.setMemoryArea((byte) 0x82); + ch4.setStartAddress("012C00"); + ch4.setCount(24); + + + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4.getId()); + cmd.setTm(Calendar.getInstance().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); + cmd.setDest(ch4.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); + cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); + cmd.setCount_word(ch4.getCount()); + + assertEquals(1, dao.addCmdRecord(cmd)); + } + +// @Test + public void testFindAll() { + assertEquals(1, dao.findAll()); + } + + @Test + public void testFindByDestAndCount() { + assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); + } +} diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java new file mode 100644 index 0000000..e0dee1d --- /dev/null +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -0,0 +1,8 @@ +package com.szpg.plc.message; + +public class AppMessageConstants { + + /******** 命令类型 ********/ + public final static String CMD_TYPE_READCH4PARAM = "11"; + public final static String CMD_TYPE_READCH4STATUS = "12"; +} diff --git a/src/ACUBL.properties b/src/ACUBL.properties new file mode 100644 index 0000000..dafeb10 --- /dev/null +++ b/src/ACUBL.properties @@ -0,0 +1,3 @@ +#ACU\u53d8\u91cf\u8868\u914d\u7f6e\u6587\u4ef6 +YXL.ACU001.DCH.START = 0300 +YXL.ACU001.DCH.COUNT = 24 \ No newline at end of file diff --git a/src/com/szpg/db/dao/PgAcuRdcmdDao.java b/src/com/szpg/db/dao/PgAcuRdcmdDao.java new file mode 100644 index 0000000..b2762f4 --- /dev/null +++ b/src/com/szpg/db/dao/PgAcuRdcmdDao.java @@ -0,0 +1,15 @@ +package com.szpg.db.dao; + +import java.util.List; + +import com.szpg.db.data.PgAcuRdcmd; + +public interface PgAcuRdcmdDao { + + public List findAll(); + public PgAcuRdcmd findById(String id); + + public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count); + + public int addCmdRecord(PgAcuRdcmd cmd); +} diff --git a/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java new file mode 100644 index 0000000..a3432bd --- /dev/null +++ b/src/com/szpg/db/dao/impl/PgAcuRdcmdDaoImpl.java @@ -0,0 +1,160 @@ +package com.szpg.db.dao.impl; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; + +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.log4j.Logger; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.db.util.ConnectionManager; +import com.szpg.util.TimeFormat; + +public class PgAcuRdcmdDaoImpl implements PgAcuRdcmdDao { + + private final Logger logger = Logger.getLogger(this.getClass().getName()); + + @Override + public List findAll() { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU_RDCMD"; + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class)); + + if (null != list && list.isEmpty() == false) { + logger.debug("查询所有内存读取命令成功[" + list.size() + "]"); + + 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 PgAcuRdcmd findById(String id) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE ID = ?"; + Object[] param = new Object[1]; + param[0] = id; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), param); + + if (null != list && list.size() == 1) { + logger.debug("根据ID查询内存读取命令成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据ID查询内存读取命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public PgAcuRdcmd findLatestCmdByDestAndCount(String dest, int count) { + Connection conn = null; + + String queryStr = "SELECT * FROM PG_ACU_RDCMD WHERE RESPONSED='0' AND TIMEOUT='0' AND DEST=? AND COUNT_WORD=? ORDER BY TM DESC"; + Object[] params = new Object[2]; + params[0] = dest; + params[1] = count; + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + List list = (List) runner.query(conn, queryStr, new BeanListHandler(PgAcuRdcmd.class), params); + + if (null != list && list.isEmpty() == false) { + logger.debug("根据目的地址和字数查询内存读取命令成功[" + list.size() + "]"); + + return list.get(0); + } else + return null; + } catch (Exception ex) { + logger.error("根据目的地址和字数查询内存读取命令异常", ex); + } finally { + try { + DbUtils.commitAndClose(conn); + } catch (SQLException e) { + e.printStackTrace(); + } + } + return null; + } + + @Override + public int addCmdRecord(PgAcuRdcmd cmd) { + Connection conn = null; + + String insertStr = "INSERT INTO PG_ACU_RDCMD " + + "(ID, TM, CMD_TYPE, DEST, MEM_AREA_CD, START_MEM_WORD, START_MEM_BIT, COUNT_WORD, RESPONSED, TIMEOUT) " + + "VALUES (?, TO_DATE(?, 'YYYYMMDDHH24MISS'), ?, ?, ?, ?, ?, ?, '0', '0')"; + Object[] params = new Object[8]; + params[0] = cmd.getId(); + params[1] = TimeFormat.format(cmd.getTm(), "yyyyMMddHHmmss"); + params[2] = cmd.getCmd_type(); + params[3] = cmd.getDest(); + params[4] = cmd.getMem_area_cd(); + params[5] = cmd.getStart_mem_word(); + params[6] = cmd.getStart_mem_bit(); + params[7] = cmd.getCount_word(); + + try { + conn = ConnectionManager.getConnectionFromC3P0(); + conn.setAutoCommit(false); + + QueryRunner runner = new QueryRunner(); + int count = runner.update(conn, insertStr, params); + + if (count > 0) + logger.debug("插入读取命令数据成功" + cmd); + 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/PgAcuRdcmd.java b/src/com/szpg/db/data/PgAcuRdcmd.java new file mode 100644 index 0000000..38f8667 --- /dev/null +++ b/src/com/szpg/db/data/PgAcuRdcmd.java @@ -0,0 +1,123 @@ +package com.szpg.db.data; + +import java.util.Date; + +import com.szpg.util.TimeFormat; + +/** + * 读取内存命令对应数据表 + * + * @author admin + * + */ +public class PgAcuRdcmd implements java.io.Serializable { + + /** + * + */ + private static final long serialVersionUID = -3187227934289186463L; + + private String id; // ID + private Date tm; // 命令发送时间 + private String cmd_type; // 命令类型 + private String dest; // 目标地址 + private String mem_area_cd; // 内存区域代码 + private String start_mem_word; // 起始内存字地址 + private String start_mem_bit; // 起始内存位地址 + private Integer count_word; // 读取的字数量 + private boolean responsed; // 是否收到响应 + private boolean timeout; // 是否超时 + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Date getTm() { + return tm; + } + + public void setTm(Date tm) { + this.tm = tm; + } + + public String getCmd_type() { + return cmd_type; + } + + public void setCmd_type(String cmd_type) { + this.cmd_type = cmd_type; + } + + public String getDest() { + return dest; + } + + public void setDest(String dest) { + this.dest = dest; + } + + public String getMem_area_cd() { + return mem_area_cd; + } + + public void setMem_area_cd(String mem_area_cd) { + this.mem_area_cd = mem_area_cd; + } + + public String getStart_mem_word() { + return start_mem_word; + } + + public void setStart_mem_word(String start_mem_word) { + this.start_mem_word = start_mem_word; + } + + public String getStart_mem_bit() { + return start_mem_bit; + } + + public void setStart_mem_bit(String start_mem_bit) { + this.start_mem_bit = start_mem_bit; + } + + public Integer getCount_word() { + return count_word; + } + + public void setCount_word(Integer count_word) { + this.count_word = count_word; + } + + public boolean isResponsed() { + return responsed; + } + + public void setResponsed(boolean responsed) { + this.responsed = responsed; + } + + public boolean isTimeout() { + return timeout; + } + + public void setTimeout(boolean timeout) { + this.timeout = timeout; + } + + @Override + public String toString() { + return "PgAcuRdcmd [tm=" + getTmStr() + ", cmd_type=" + cmd_type + ", dest=" + dest + "]"; + } + + public String getTmStr() { + if (null != this.getTm()) + return TimeFormat.formatTimestamp(getTm()); + else + return ""; + } + +} diff --git a/src/com/szpg/db/test/PgAcuRdcmdTest.java b/src/com/szpg/db/test/PgAcuRdcmdTest.java new file mode 100644 index 0000000..97a7c98 --- /dev/null +++ b/src/com/szpg/db/test/PgAcuRdcmdTest.java @@ -0,0 +1,58 @@ +package com.szpg.db.test; + +import static org.junit.Assert.assertEquals; + +import java.util.Calendar; + +import org.junit.Before; +import org.junit.Test; + +import com.szpg.db.dao.PgAcuRdcmdDao; +import com.szpg.db.dao.impl.PgAcuRdcmdDaoImpl; +import com.szpg.db.data.PgAcuRdcmd; +import com.szpg.plc.message.AppMessageConstants; +import com.szpg.plc.message.command.read.ReadCH4ParamCommand; +import com.szpg.plc.util.ByteUtil; + +public class PgAcuRdcmdTest { + + private PgAcuRdcmdDao dao; + + @Before + public void init() { + dao = new PgAcuRdcmdDaoImpl(); + } + +// @Test + public void testAdd() { + ReadCH4ParamCommand ch4 = new ReadCH4ParamCommand(); + ch4.setDestinationId("006B00"); + ch4.setMessageProducerId("00F400"); + ch4.setMemoryArea((byte) 0x82); + ch4.setStartAddress("012C00"); + ch4.setCount(24); + + + PgAcuRdcmd cmd = new PgAcuRdcmd(); + cmd.setId(ch4.getId()); + cmd.setTm(Calendar.getInstance().getTime()); + cmd.setCmd_type(AppMessageConstants.CMD_TYPE_READCH4STATUS); + cmd.setDest(ch4.getDestinationId()); + cmd.setMem_area_cd(ByteUtil.binToHexString(new byte[] {ch4.getMemoryArea()})); + cmd.setStart_mem_word(ch4.getStartAddress().substring(0, 4)); + cmd.setStart_mem_bit(ch4.getStartAddress().substring(4)); + cmd.setCount_word(ch4.getCount()); + + assertEquals(1, dao.addCmdRecord(cmd)); + } + +// @Test + public void testFindAll() { + assertEquals(1, dao.findAll()); + } + + @Test + public void testFindByDestAndCount() { + assertEquals("11", dao.findLatestCmdByDestAndCount("006B00", 24).getCmd_type()); + } +} diff --git a/src/com/szpg/plc/message/AppMessageConstants.java b/src/com/szpg/plc/message/AppMessageConstants.java new file mode 100644 index 0000000..e0dee1d --- /dev/null +++ b/src/com/szpg/plc/message/AppMessageConstants.java @@ -0,0 +1,8 @@ +package com.szpg.plc.message; + +public class AppMessageConstants { + + /******** 命令类型 ********/ + public final static String CMD_TYPE_READCH4PARAM = "11"; + public final static String CMD_TYPE_READCH4STATUS = "12"; +} diff --git a/src/com/szpg/plc/server/MessageConstants.java b/src/com/szpg/plc/server/MessageConstants.java deleted file mode 100644 index 21ef477..0000000 --- a/src/com/szpg/plc/server/MessageConstants.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.szpg.plc.server; - -public class MessageConstants { - - /******** 常用命令 ********/ - public final static String MESSAGE_TYPE_QUERYREALTIMEVALUE = "rtValue"; //查询实时值 - public final static String MESSAGE_TYPE_QUERYREALTIMESTATUS = "rtStatus"; //查询实时状态 - public final static String MESSAGE_TYPE_QUERYADDRESS = "queryAddress"; //查询地址 - public final static String MESSAGE_TYPE_QUERYCLOCK = "queryClock"; //查询时钟 - public final static String MESSAGE_TYPE_QUERYPATTERN = "queryPattern"; //查询工作模式 - public final static String MESSAGE_TYPE_SETADDRESS = "setAddress"; //设置地址 - public final static String MESSAGE_TYPE_SETCLOCK= "setClock"; //设置时钟 - public final static String MESSAGE_TYPE_SETPATTERN = "setPattern"; //设置工作模式 - - /******** 其他命令 ********/ - public final static String MESSAGE_TYPE_QUERYINTERVAL = "queryIntetval"; //查询自报种类和时间间隔 - public final static String MESSAGE_TYPE_SETINTERVAL = "setIntetval"; //设置自报种类和时间间隔 - public final static String MESSAGE_TYPE_QUERYALARMVAL = "queryAlarmVal"; //查询剩余水量报警值及剩余水量 - public final static String MESSAGE_TYPE_SETALARMVAL = "setAlarmVal"; //设置剩余水量报警值 - public final static String MESSAGE_TYPE_QUERYPARAMWATERLEVEL = "queryParamWaterLevel"; //查询水位参数 - public final static String MESSAGE_TYPE_SETPARAMWATERLEVEL = "setParamWaterLevel"; //设置水位参数 - public final static String MESSAGE_TYPE_QUERYPARAMWATERPRESSURE = "queryParamWaterPressure"; //查询水压参数 - public final static String MESSAGE_TYPE_SETPARAMWATERPRESSURE = "setParamWaterPressure"; //设置水压参数 - public final static String MESSAGE_TYPE_QUERYPARAMWATERQUALITYUPPER = "queryParamWaterQualityUpper"; //查询水质参数上限 - public final static String MESSAGE_TYPE_SETPARAMWATERQUALITYUPPER = "setParamWaterQualityUpper"; //设置水质参数上限 - public final static String MESSAGE_TYPE_QUERYPARAMWATERQUALITYLOWER = "queryParamWaterQualityLower"; //查询水质参数下限 - public final static String MESSAGE_TYPE_SETPARAMWATERQUALITYLOWER = "setParamWaterQualityLower"; //设置水质参数下限 - public final static String MESSAGE_TYPE_QUERYPARAMFLUX = "queryParamFlux"; //查询流量参数 - public final static String MESSAGE_TYPE_SETPARAMFLUX = "setParamFlux"; //设置流量参数 - public final static String MESSAGE_TYPE_QUERYRTTYPES = "queryRttypes"; //查询实时数据种类 - public final static String MESSAGE_TYPE_SETRTTYPES = "setRttypes"; //设置实时数据种类 - public final static String MESSAGE_TYPE_QUERYCHARGING = "queryCharging"; //查询最近充值量和剩余水量 - public final static String MESSAGE_TYPE_SETCHARGING = "setCharging"; //设置本次充值量 - - public final static String MESSAGE_TYPE_SETFIXEDVALUE = "setFixedValue"; //设置定值控制量 - public final static String MESSAGE_TYPE_SETTHRESHOLD = "setThreshold"; //设置启报阈值 - - - public final static String MESSAGE_TYPE_QUERYSOLIDSTOREVAL = "querySolidStoreVal"; //查询固态存储值 - public final static String MESSAGE_TYPE_QUERYMEMORYNUM = "queryMemoryNum"; //查询内存自报数据 - public final static String MESSAGE_TYPE_QUERYTERMINALEVENTRECORD = "queryTerminalEventRecord"; //查询终端事件记录 - public final static String MESSAGE_TYPE_QUERYMOTORWORKDATA = "queryMotorWorkData"; //查询电机工作数据 - - - public final static String MESSAGE_TYPE_SETLOGOUT = "setLogout"; //终端退出命令 - public final static String MESSAGE_TYPE_SETFLOWINIT = "setFlowInit"; //设置水量表底值 - public final static String MESSAGE_TYPE_ENABLEICCARD = "enableICCard"; //设置IC卡功能有效 - public final static String MESSAGE_TYPE_DISABLEICCARD = "disableICCard"; //设置IC卡功能无效 - public final static String MESSAGE_TYPE_ENABLEFIXEDVALUE = "enableFixedValue"; //设置定值控制投入 - public final static String MESSAGE_TYPE_DISABLEFIXEDVALUE = "disableFixedValue"; //设置定值控制退出 - public final static String MESSAGE_TYPE_REMOTEOPENPUMP = "remoteOpenPump"; //遥控开启水泵 - public final static String MESSAGE_TYPE_REMOTECLOSEPUMP = "remoteClosePump"; //遥控关闭水泵 - public final static String MESSAGE_TYPE_RESETTERMINALPARAM = "reset"; //复位参数命令 - public final static String MESSAGE_TYPE_CLEARTERMINALDATA = "clear"; //清空存储命令 - public final static String MESSAGE_TYPE_CHANGEPASSWORD = "changePw"; //设置密码命令 -}