commit 73861f3f18ebbe4639a095091a926bae8b2f4e65
Author: 谢洪龙 <599179587@qq.com>
Date: Mon Jul 10 11:54:47 2017 +0800
初始化
diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..bcebd81
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9f97022
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+target/
\ No newline at end of file
diff --git a/.project b/.project
new file mode 100644
index 0000000..629a41f
--- /dev/null
+++ b/.project
@@ -0,0 +1,42 @@
+
+
+ ifishSocket
+
+
+
+
+
+ org.eclipse.wst.jsdt.core.javascriptValidator
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.wst.common.project.facet.core.builder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+ org.eclipse.wst.validation.validationbuilder
+
+
+
+
+
+ org.eclipse.jem.workbench.JavaEMFNature
+ org.eclipse.wst.common.modulecore.ModuleCoreNature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+ org.eclipse.wst.common.project.facet.core.nature
+ org.eclipse.wst.jsdt.core.jsNature
+
+
diff --git a/nb-configuration.xml b/nb-configuration.xml
new file mode 100644
index 0000000..974314d
--- /dev/null
+++ b/nb-configuration.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+ Tomcat
+ false
+
+
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..88e2b16
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,181 @@
+
+ 4.0.0
+ ifishSocket
+ ifishSocket
+ war
+ 0.0.1-SNAPSHOT
+ ifishSocket Maven Webapp
+ http://mvnrepository.com
+
+
+
+ org.quartz-scheduler
+ quartz
+ 2.2.1
+
+
+ org.springframework
+ spring-core
+ 4.1.6.RELEASE
+
+
+
+ org.springframework
+ spring-context
+ 4.1.6.RELEASE
+
+
+
+ org.springframework
+ spring-orm
+ 4.1.6.RELEASE
+
+
+
+ org.springframework
+ spring-context-support
+ 4.1.6.RELEASE
+
+
+
+ org.aspectj
+ aspectjweaver
+ 1.8.5
+
+
+
+ org.springframework
+ spring-webmvc
+ 4.1.6.RELEASE
+
+
+
+ org.hibernate
+ hibernate-core
+ 4.3.11.Final
+
+
+
+ org.jboss.logging
+ jboss-logging-annotations
+ 2.0.1.Final
+
+
+
+ c3p0
+ c3p0
+ 0.9.1.2
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.12
+
+
+
+ ch.qos.logback
+ logback-core
+ 1.1.2
+
+
+
+ ch.qos.logback
+ logback-classic
+ 1.1.2
+
+
+
+ org.apache.mina
+ mina-core
+ 2.0.7
+
+
+
+ org.apache.mina
+ mina-integration-spring
+ 1.1.7
+
+
+
+ org.apache.mina
+ mina-integration-beans
+ 2.0.7
+
+
+
+ org.apache.mina
+ mina-filter-compression
+ 2.0.7
+
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.3.5
+
+
+
+ org.json
+ json
+ 20090211
+
+
+
+ com.google.code.gson
+ gson
+ 2.3
+
+
+
+
+
+
+ ifishSocket
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ 2.4
+
+
+
+ src/main/webapp
+
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ 2.5.4
+ true
+
+
+
+
+ src/main/java
+
+ **/*.hbm.xml
+
+
+
+ src/main/resources
+
+ **/*.xml
+ **/*.properties
+
+
+
+
+
+
+ UTF-8
+
+
+
diff --git a/src/main/java/com/ifish/dao/DeviceDao.java b/src/main/java/com/ifish/dao/DeviceDao.java
new file mode 100644
index 0000000..c3dd86f
--- /dev/null
+++ b/src/main/java/com/ifish/dao/DeviceDao.java
@@ -0,0 +1,25 @@
+package com.ifish.dao;
+
+import java.util.List;
+
+import com.ifish.entity.Device;
+
+/**
+ * @ClassName: DeviceDao
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+public interface DeviceDao {
+
+ public Device findById(Integer id);
+
+ public Device save(Device device);
+
+ public Device update(Device device);
+
+ public Device getUniqueByProperty(String property,Object value);
+
+ public List getByProperty(String property,Object value);
+
+}
diff --git a/src/main/java/com/ifish/dao/DeviceUserDao.java b/src/main/java/com/ifish/dao/DeviceUserDao.java
new file mode 100644
index 0000000..55ae297
--- /dev/null
+++ b/src/main/java/com/ifish/dao/DeviceUserDao.java
@@ -0,0 +1,20 @@
+package com.ifish.dao;
+
+import java.util.List;
+
+import org.hibernate.criterion.Criterion;
+
+import com.ifish.entity.DeviceUser;
+/**
+ * @ClassName: DeviceUserDaoImpl
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+public interface DeviceUserDao {
+
+ public DeviceUser getUniqueByProperty(Criterion... criterions);
+
+ public List getListByProperty(Criterion... criterions);
+
+}
diff --git a/src/main/java/com/ifish/dao/FactoryListDao.java b/src/main/java/com/ifish/dao/FactoryListDao.java
new file mode 100644
index 0000000..8d5678c
--- /dev/null
+++ b/src/main/java/com/ifish/dao/FactoryListDao.java
@@ -0,0 +1,15 @@
+package com.ifish.dao;
+
+import com.ifish.entity.FactoryList;
+
+/**
+ * @ClassName: FactoryListDao
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+public interface FactoryListDao{
+
+ public FactoryList findById(String factoryCode);
+
+}
diff --git a/src/main/java/com/ifish/dao/HardwareTypeDao.java b/src/main/java/com/ifish/dao/HardwareTypeDao.java
new file mode 100644
index 0000000..735d4e8
--- /dev/null
+++ b/src/main/java/com/ifish/dao/HardwareTypeDao.java
@@ -0,0 +1,15 @@
+package com.ifish.dao;
+
+import com.ifish.entity.HardwareType;
+
+/**
+ * @ClassName: HardwareTypeDao
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+public interface HardwareTypeDao {
+
+ public HardwareType findById(String TypeCode);
+
+}
diff --git a/src/main/java/com/ifish/dao/LoginRecordDao.java b/src/main/java/com/ifish/dao/LoginRecordDao.java
new file mode 100644
index 0000000..62147e9
--- /dev/null
+++ b/src/main/java/com/ifish/dao/LoginRecordDao.java
@@ -0,0 +1,15 @@
+package com.ifish.dao;
+
+import com.ifish.entity.LoginRecord;
+
+/**
+ * @ClassName: LoginRecordDao
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+public interface LoginRecordDao {
+
+ public LoginRecord save(LoginRecord loginRecord);
+
+}
diff --git a/src/main/java/com/ifish/dao/PushListDao.java b/src/main/java/com/ifish/dao/PushListDao.java
new file mode 100644
index 0000000..262a2a4
--- /dev/null
+++ b/src/main/java/com/ifish/dao/PushListDao.java
@@ -0,0 +1,15 @@
+package com.ifish.dao;
+
+import com.ifish.entity.PushList;
+
+/**
+ * @ClassName: PushListDao
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+public interface PushListDao{
+
+ public PushList save(PushList pushList);
+
+}
diff --git a/src/main/java/com/ifish/dao/UserDao.java b/src/main/java/com/ifish/dao/UserDao.java
new file mode 100644
index 0000000..eae5cde
--- /dev/null
+++ b/src/main/java/com/ifish/dao/UserDao.java
@@ -0,0 +1,16 @@
+package com.ifish.dao;
+
+import com.ifish.entity.User;
+
+
+/**
+ * @ClassName: UserDao
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+public interface UserDao {
+
+ public User findById(Integer id);
+
+}
diff --git a/src/main/java/com/ifish/daoImpl/DeviceDaoImpl.java b/src/main/java/com/ifish/daoImpl/DeviceDaoImpl.java
new file mode 100644
index 0000000..c913453
--- /dev/null
+++ b/src/main/java/com/ifish/daoImpl/DeviceDaoImpl.java
@@ -0,0 +1,55 @@
+package com.ifish.daoImpl;
+
+import java.util.List;
+
+import org.hibernate.criterion.Restrictions;
+import org.springframework.stereotype.Repository;
+
+import com.ifish.dao.DeviceDao;
+import com.ifish.entity.Device;
+import com.ifish.hibernate.HibernateBaseDao;
+
+/**
+ * @ClassName: DeviceDaoImpl
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+
+@Repository
+public class DeviceDaoImpl extends HibernateBaseDao implements DeviceDao {
+
+
+ @Override
+ protected Class getEntityClass() {
+ return Device.class;
+ }
+
+ @Override
+ public Device findById(Integer id) {
+ return this.get(id);
+ }
+
+ @Override
+ public Device getUniqueByProperty(String property, Object value) {
+ return this.findUniqueByProperty(Restrictions.eq(property, value));
+ }
+
+ @Override
+ public Device save(Device device) {
+ this.getSession().save(device);
+ return device;
+ }
+
+ @Override
+ public Device update(Device device) {
+ this.getSession().update(device);
+ return device;
+ }
+
+ @Override
+ public List getByProperty(String property, Object value) {
+ return this.findByProperty(Restrictions.eq(property, value));
+ }
+
+}
diff --git a/src/main/java/com/ifish/daoImpl/DeviceUserDaoImpl.java b/src/main/java/com/ifish/daoImpl/DeviceUserDaoImpl.java
new file mode 100644
index 0000000..e267483
--- /dev/null
+++ b/src/main/java/com/ifish/daoImpl/DeviceUserDaoImpl.java
@@ -0,0 +1,38 @@
+package com.ifish.daoImpl;
+
+import java.util.List;
+
+import org.hibernate.criterion.Criterion;
+import org.springframework.stereotype.Repository;
+
+import com.ifish.dao.DeviceUserDao;
+import com.ifish.entity.DeviceUser;
+import com.ifish.entity.PriId;
+import com.ifish.hibernate.HibernateBaseDao;
+
+/**
+ * @ClassName: DeviceUserDaoImpl
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+
+@Repository
+public class DeviceUserDaoImpl extends HibernateBaseDao implements DeviceUserDao {
+
+ @Override
+ protected Class getEntityClass() {
+ return DeviceUser.class;
+ }
+
+ @Override
+ public DeviceUser getUniqueByProperty(Criterion... criterions) {
+ return this.findUniqueByProperty(criterions);
+ }
+
+ @Override
+ public List getListByProperty(Criterion... criterions) {
+ return this.findByProperty(criterions);
+ }
+
+}
diff --git a/src/main/java/com/ifish/daoImpl/FactoryListDaoImpl.java b/src/main/java/com/ifish/daoImpl/FactoryListDaoImpl.java
new file mode 100644
index 0000000..70949ff
--- /dev/null
+++ b/src/main/java/com/ifish/daoImpl/FactoryListDaoImpl.java
@@ -0,0 +1,30 @@
+package com.ifish.daoImpl;
+
+import org.springframework.stereotype.Repository;
+
+import com.ifish.dao.FactoryListDao;
+import com.ifish.entity.FactoryList;
+import com.ifish.hibernate.HibernateBaseDao;
+
+/**
+ * @ClassName: FactoryListDaoImpl
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+
+@Repository
+public class FactoryListDaoImpl extends HibernateBaseDao implements FactoryListDao {
+
+
+ @Override
+ protected Class getEntityClass() {
+ return FactoryList.class;
+ }
+
+ @Override
+ public FactoryList findById(String id) {
+ return this.get(id);
+ }
+
+}
diff --git a/src/main/java/com/ifish/daoImpl/HardwareTypeDaoImpl.java b/src/main/java/com/ifish/daoImpl/HardwareTypeDaoImpl.java
new file mode 100644
index 0000000..aa7bee4
--- /dev/null
+++ b/src/main/java/com/ifish/daoImpl/HardwareTypeDaoImpl.java
@@ -0,0 +1,30 @@
+package com.ifish.daoImpl;
+
+import org.springframework.stereotype.Repository;
+
+import com.ifish.dao.HardwareTypeDao;
+import com.ifish.entity.HardwareType;
+import com.ifish.hibernate.HibernateBaseDao;
+
+/**
+ * @ClassName: HardwareTypeDaoImpl
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+
+@Repository
+public class HardwareTypeDaoImpl extends HibernateBaseDao implements HardwareTypeDao {
+
+
+ @Override
+ protected Class getEntityClass() {
+ return HardwareType.class;
+ }
+
+ @Override
+ public HardwareType findById(String id) {
+ return this.get(id);
+ }
+
+}
diff --git a/src/main/java/com/ifish/daoImpl/LoginRecordDaoImpl.java b/src/main/java/com/ifish/daoImpl/LoginRecordDaoImpl.java
new file mode 100644
index 0000000..2d4679e
--- /dev/null
+++ b/src/main/java/com/ifish/daoImpl/LoginRecordDaoImpl.java
@@ -0,0 +1,31 @@
+package com.ifish.daoImpl;
+
+import org.springframework.stereotype.Repository;
+
+import com.ifish.dao.LoginRecordDao;
+import com.ifish.entity.LoginRecord;
+import com.ifish.hibernate.HibernateBaseDao;
+
+/**
+ * @ClassName: LoginRecordDaoImpl
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+
+@Repository
+public class LoginRecordDaoImpl extends HibernateBaseDao implements LoginRecordDao {
+
+
+ @Override
+ protected Class getEntityClass() {
+ return LoginRecord.class;
+ }
+
+ @Override
+ public LoginRecord save(LoginRecord loginRecord) {
+ this.getSession().save(loginRecord);
+ return loginRecord;
+ }
+
+}
diff --git a/src/main/java/com/ifish/daoImpl/PushListDaoImpl.java b/src/main/java/com/ifish/daoImpl/PushListDaoImpl.java
new file mode 100644
index 0000000..a23bd63
--- /dev/null
+++ b/src/main/java/com/ifish/daoImpl/PushListDaoImpl.java
@@ -0,0 +1,30 @@
+package com.ifish.daoImpl;
+
+import org.springframework.stereotype.Repository;
+
+import com.ifish.dao.PushListDao;
+import com.ifish.entity.PushList;
+import com.ifish.hibernate.HibernateBaseDao;
+
+/**
+ * @ClassName: PushListDaoImpl
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+
+@Repository
+public class PushListDaoImpl extends HibernateBaseDao implements PushListDao {
+
+ @Override
+ protected Class getEntityClass() {
+ return PushList.class;
+ }
+
+ @Override
+ public PushList save(PushList pushList) {
+ this.getSession().save(pushList);
+ return pushList;
+ }
+
+}
diff --git a/src/main/java/com/ifish/daoImpl/UserDaoImpl.java b/src/main/java/com/ifish/daoImpl/UserDaoImpl.java
new file mode 100644
index 0000000..b1815da
--- /dev/null
+++ b/src/main/java/com/ifish/daoImpl/UserDaoImpl.java
@@ -0,0 +1,30 @@
+package com.ifish.daoImpl;
+
+import org.springframework.stereotype.Repository;
+
+import com.ifish.dao.UserDao;
+import com.ifish.entity.User;
+import com.ifish.hibernate.HibernateBaseDao;
+
+/**
+ * @ClassName: UserDaoImpl
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+
+@Repository
+public class UserDaoImpl extends HibernateBaseDao implements UserDao {
+
+
+ @Override
+ protected Class getEntityClass() {
+ return User.class;
+ }
+
+ @Override
+ public User findById(Integer id) {
+ return this.get(id);
+ }
+
+}
diff --git a/src/main/java/com/ifish/entity/Device.java b/src/main/java/com/ifish/entity/Device.java
new file mode 100644
index 0000000..a58205d
--- /dev/null
+++ b/src/main/java/com/ifish/entity/Device.java
@@ -0,0 +1,216 @@
+package com.ifish.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @ClassName: tbl_device
+ * @date 2015年7月2日 下午16:40:00
+ *
+ */
+public class Device implements Serializable{
+
+ private static final long serialVersionUID = -4069917773366185534L;
+ //设备ID
+ private Integer deviceId;
+ //服务器IP
+ private String serverIP;
+ //设备IP
+ private String deviceIP;
+ //设备MAC地址
+ private String macAddress;
+ //登陆次数
+ private Integer loginCount;
+ //电子厂
+ private String factoryCode;
+ //鱼缸厂
+ private String brandCode;
+ //硬件型号
+ private String hardwareType;
+ //mcu版本
+ private String softwareVersion;
+ //sdk版本
+ private Integer sdkVersion;
+ //sdk时间
+ private Date sdkTime;
+ //分配日期
+ private Date createDate;
+ //是否更新
+ private String isUpgrade;
+ //更新版本
+ private Integer upgradeVersion;
+ //更新时间
+ private Date upgradeTime;
+ //最后一次登陆时间
+ private Date loginTime;
+ //是否是黑名单:1是,0否
+ private String isBlacklist;
+ //激活时间
+ private Date firstActivate;
+ //创建时间
+ private Date createTime;
+ //是否推送
+ private String onOff;
+ //MCU启动次数
+ private Integer number1;
+ //模块启动次数
+ private Integer number2;
+ //连接路由器次数
+ private Integer number3;
+ //成功连接服务器次数
+ private Integer number4;
+ //尝试连接服务器次数
+ private Integer number5;
+
+ public Integer getDeviceId() {
+ return deviceId;
+ }
+ public void setDeviceId(Integer deviceId) {
+ this.deviceId = deviceId;
+ }
+ public String getServerIP() {
+ return serverIP;
+ }
+ public void setServerIP(String serverIP) {
+ this.serverIP = serverIP;
+ }
+ public String getDeviceIP() {
+ return deviceIP;
+ }
+ public void setDeviceIP(String deviceIP) {
+ this.deviceIP = deviceIP;
+ }
+ public String getMacAddress() {
+ return macAddress;
+ }
+ public void setMacAddress(String macAddress) {
+ this.macAddress = macAddress;
+ }
+ public Integer getLoginCount() {
+ return loginCount;
+ }
+ public void setLoginCount(Integer loginCount) {
+ this.loginCount = loginCount;
+ }
+ public Date getLoginTime() {
+ return loginTime;
+ }
+ public void setLoginTime(Date loginTime) {
+ this.loginTime = loginTime;
+ }
+ public Date getCreateTime() {
+ return createTime;
+ }
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+ public String getIsBlacklist() {
+ return isBlacklist;
+ }
+ public void setIsBlacklist(String isBlacklist) {
+ this.isBlacklist = isBlacklist;
+ }
+ public Date getFirstActivate() {
+ return firstActivate;
+ }
+ public void setFirstActivate(Date firstActivate) {
+ this.firstActivate = firstActivate;
+ }
+ public String getHardwareType() {
+ return hardwareType;
+ }
+ public void setHardwareType(String hardwareType) {
+ this.hardwareType = hardwareType;
+ }
+ public String getSoftwareVersion() {
+ return softwareVersion;
+ }
+ public void setSoftwareVersion(String softwareVersion) {
+ this.softwareVersion = softwareVersion;
+ }
+ public String getOnOff() {
+ return onOff;
+ }
+ public void setOnOff(String onOff) {
+ this.onOff = onOff;
+ }
+ public String getBrandCode() {
+ return brandCode;
+ }
+ public void setBrandCode(String brandCode) {
+ this.brandCode = brandCode;
+ }
+ public String getFactoryCode() {
+ return factoryCode;
+ }
+ public void setFactoryCode(String factoryCode) {
+ this.factoryCode = factoryCode;
+ }
+ public Date getCreateDate() {
+ return createDate;
+ }
+ public void setCreateDate(Date createDate) {
+ this.createDate = createDate;
+ }
+ public String getIsUpgrade() {
+ return isUpgrade;
+ }
+ public void setIsUpgrade(String isUpgrade) {
+ this.isUpgrade = isUpgrade;
+ }
+ public Date getUpgradeTime() {
+ return upgradeTime;
+ }
+ public void setUpgradeTime(Date upgradeTime) {
+ this.upgradeTime = upgradeTime;
+ }
+ public Integer getSdkVersion() {
+ return sdkVersion;
+ }
+ public void setSdkVersion(Integer sdkVersion) {
+ this.sdkVersion = sdkVersion;
+ }
+ public Integer getUpgradeVersion() {
+ return upgradeVersion;
+ }
+ public void setUpgradeVersion(Integer upgradeVersion) {
+ this.upgradeVersion = upgradeVersion;
+ }
+ public Date getSdkTime() {
+ return sdkTime;
+ }
+ public void setSdkTime(Date sdkTime) {
+ this.sdkTime = sdkTime;
+ }
+ public Integer getNumber1() {
+ return number1;
+ }
+ public void setNumber1(Integer number1) {
+ this.number1 = number1;
+ }
+ public Integer getNumber2() {
+ return number2;
+ }
+ public void setNumber2(Integer number2) {
+ this.number2 = number2;
+ }
+ public Integer getNumber3() {
+ return number3;
+ }
+ public void setNumber3(Integer number3) {
+ this.number3 = number3;
+ }
+ public Integer getNumber4() {
+ return number4;
+ }
+ public void setNumber4(Integer number4) {
+ this.number4 = number4;
+ }
+ public Integer getNumber5() {
+ return number5;
+ }
+ public void setNumber5(Integer number5) {
+ this.number5 = number5;
+ }
+
+}
diff --git a/src/main/java/com/ifish/entity/DeviceUser.java b/src/main/java/com/ifish/entity/DeviceUser.java
new file mode 100644
index 0000000..49360aa
--- /dev/null
+++ b/src/main/java/com/ifish/entity/DeviceUser.java
@@ -0,0 +1,39 @@
+package com.ifish.entity;
+
+import java.io.Serializable;
+
+/**
+ * @ClassName: tbl_device_user
+ * @date 2015年7月2日 下午16:40:00
+ *
+ */
+public class DeviceUser implements Serializable{
+
+ private static final long serialVersionUID = 6845058501114939424L;
+ //ID
+ private PriId priId = new PriId();
+ //1、主控制权,0、被分享者
+ private String isMaster;
+ //显示名称
+ private String showName;
+
+ public PriId getPriId() {
+ return priId;
+ }
+ public void setPriId(PriId priId) {
+ this.priId = priId;
+ }
+ public String getIsMaster() {
+ return isMaster;
+ }
+ public void setIsMaster(String isMaster) {
+ this.isMaster = isMaster;
+ }
+ public String getShowName() {
+ return showName;
+ }
+ public void setShowName(String showName) {
+ this.showName = showName;
+ }
+
+}
diff --git a/src/main/java/com/ifish/entity/FactoryList.java b/src/main/java/com/ifish/entity/FactoryList.java
new file mode 100644
index 0000000..55047e8
--- /dev/null
+++ b/src/main/java/com/ifish/entity/FactoryList.java
@@ -0,0 +1,30 @@
+package com.ifish.entity;
+
+import java.io.Serializable;
+
+/**
+ * @ClassName: tbl_factory_list
+ * @date 2015年7月2日 下午16:40:00
+ *
+ */
+public class FactoryList implements Serializable{
+
+ private static final long serialVersionUID = -52948033423321276L;
+ //电子厂编号
+ private String factoryCode;
+ //电子厂名称
+ private String factoryName;
+
+ public String getFactoryCode() {
+ return factoryCode;
+ }
+ public void setFactoryCode(String factoryCode) {
+ this.factoryCode = factoryCode;
+ }
+ public String getFactoryName() {
+ return factoryName;
+ }
+ public void setFactoryName(String factoryName) {
+ this.factoryName = factoryName;
+ }
+}
diff --git a/src/main/java/com/ifish/entity/HardwareType.java b/src/main/java/com/ifish/entity/HardwareType.java
new file mode 100644
index 0000000..5f70025
--- /dev/null
+++ b/src/main/java/com/ifish/entity/HardwareType.java
@@ -0,0 +1,30 @@
+package com.ifish.entity;
+
+import java.io.Serializable;
+
+/**
+ * @ClassName: tbl_hardware_type
+ * @date 2015年7月2日 下午16:40:00
+ *
+ */
+public class HardwareType implements Serializable{
+
+ private static final long serialVersionUID = -7239170169013659018L;
+ //类型编号
+ private String hardwareType;
+ //类型名称
+ private String hardwareName;
+
+ public String getHardwareType() {
+ return hardwareType;
+ }
+ public void setHardwareType(String hardwareType) {
+ this.hardwareType = hardwareType;
+ }
+ public String getHardwareName() {
+ return hardwareName;
+ }
+ public void setHardwareName(String hardwareName) {
+ this.hardwareName = hardwareName;
+ }
+}
diff --git a/src/main/java/com/ifish/entity/LoginRecord.java b/src/main/java/com/ifish/entity/LoginRecord.java
new file mode 100644
index 0000000..10a1162
--- /dev/null
+++ b/src/main/java/com/ifish/entity/LoginRecord.java
@@ -0,0 +1,40 @@
+package com.ifish.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @ClassName: tbl_login_record
+ * @date 2015年7月2日 下午16:40:00
+ *
+ */
+public class LoginRecord implements Serializable{
+
+ private static final long serialVersionUID = -5292867602998823697L;
+ //ID
+ private Integer recordId;
+ //mac地址
+ private String macAddress;
+ //登录时间
+ private Date loginTime;
+
+ public Integer getRecordId() {
+ return recordId;
+ }
+ public void setRecordId(Integer recordId) {
+ this.recordId = recordId;
+ }
+ public String getMacAddress() {
+ return macAddress;
+ }
+ public void setMacAddress(String macAddress) {
+ this.macAddress = macAddress;
+ }
+ public Date getLoginTime() {
+ return loginTime;
+ }
+ public void setLoginTime(Date loginTime) {
+ this.loginTime = loginTime;
+ }
+
+}
diff --git a/src/main/java/com/ifish/entity/PriId.java b/src/main/java/com/ifish/entity/PriId.java
new file mode 100644
index 0000000..290031c
--- /dev/null
+++ b/src/main/java/com/ifish/entity/PriId.java
@@ -0,0 +1,43 @@
+package com.ifish.entity;
+
+import java.io.Serializable;
+
+public class PriId implements Serializable {
+
+ private static final long serialVersionUID = -8487355297142132996L;
+ private Integer userId;
+ private Integer deviceId;
+
+ public Integer getUserId() {
+ return userId;
+ }
+
+ public void setUserId(Integer userId) {
+ this.userId = userId;
+ }
+
+ public Integer getDeviceId() {
+ return deviceId;
+ }
+
+ public void setDeviceId(Integer deviceId) {
+ this.deviceId = deviceId;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if(obj instanceof PriId){
+ PriId pk=(PriId)obj;
+ if(this.userId.equals(pk.userId)&&this.deviceId.equals(pk.deviceId)){
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return super.hashCode();
+ }
+
+}
diff --git a/src/main/java/com/ifish/entity/PushList.java b/src/main/java/com/ifish/entity/PushList.java
new file mode 100644
index 0000000..a914f81
--- /dev/null
+++ b/src/main/java/com/ifish/entity/PushList.java
@@ -0,0 +1,144 @@
+package com.ifish.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @ClassName: tbl_push_list
+ * @date 2015年7月2日 下午16:40:00
+ *
+ */
+public class PushList implements Serializable{
+
+ private static final long serialVersionUID = -6718129027121198763L;
+ //ID
+ private Integer pushId;
+ //用户ID
+ private Integer userId;
+ //设备ID
+ private Integer deviceId;
+ //推送手机类型
+ private String phoneType;
+ //显示名称
+ private String showName;
+ //推送消息类型
+ private String pushType;
+ //推送标题
+ private String pushTitle;
+ //推送内容
+ private String pushContext;
+ //极光推送状态
+ private String jpushStatus;
+ //云信推送状态
+ private String neteaseStatus;
+ //创建时间
+ private Date createTime;
+ //MCU启动次数
+ private Integer number1;
+ //模块启动次数
+ private Integer number2;
+ //连接路由器次数
+ private Integer number3;
+ //成功连接服务器次数
+ private Integer number4;
+ //尝试连接服务器次数
+ private Integer number5;
+
+ public Integer getPushId() {
+ return pushId;
+ }
+ public void setPushId(Integer pushId) {
+ this.pushId = pushId;
+ }
+ public Integer getUserId() {
+ return userId;
+ }
+ public void setUserId(Integer userId) {
+ this.userId = userId;
+ }
+ public Integer getDeviceId() {
+ return deviceId;
+ }
+ public void setDeviceId(Integer deviceId) {
+ this.deviceId = deviceId;
+ }
+ public String getShowName() {
+ return showName;
+ }
+ public void setShowName(String showName) {
+ this.showName = showName;
+ }
+ public String getPushType() {
+ return pushType;
+ }
+ public void setPushType(String pushType) {
+ this.pushType = pushType;
+ }
+ public String getPushTitle() {
+ return pushTitle;
+ }
+ public void setPushTitle(String pushTitle) {
+ this.pushTitle = pushTitle;
+ }
+ public String getPushContext() {
+ return pushContext;
+ }
+ public void setPushContext(String pushContext) {
+ this.pushContext = pushContext;
+ }
+ public Date getCreateTime() {
+ return createTime;
+ }
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+ public String getPhoneType() {
+ return phoneType;
+ }
+ public void setPhoneType(String phoneType) {
+ this.phoneType = phoneType;
+ }
+ public String getJpushStatus() {
+ return jpushStatus;
+ }
+ public void setJpushStatus(String jpushStatus) {
+ this.jpushStatus = jpushStatus;
+ }
+ public String getNeteaseStatus() {
+ return neteaseStatus;
+ }
+ public void setNeteaseStatus(String neteaseStatus) {
+ this.neteaseStatus = neteaseStatus;
+ }
+ public Integer getNumber1() {
+ return number1;
+ }
+ public void setNumber1(Integer number1) {
+ this.number1 = number1;
+ }
+ public Integer getNumber2() {
+ return number2;
+ }
+ public void setNumber2(Integer number2) {
+ this.number2 = number2;
+ }
+ public Integer getNumber3() {
+ return number3;
+ }
+ public void setNumber3(Integer number3) {
+ this.number3 = number3;
+ }
+ public Integer getNumber4() {
+ return number4;
+ }
+ public void setNumber4(Integer number4) {
+ this.number4 = number4;
+ }
+ public Integer getNumber5() {
+ return number5;
+ }
+ public void setNumber5(Integer number5) {
+ this.number5 = number5;
+ }
+
+}
diff --git a/src/main/java/com/ifish/entity/User.java b/src/main/java/com/ifish/entity/User.java
new file mode 100644
index 0000000..6738504
--- /dev/null
+++ b/src/main/java/com/ifish/entity/User.java
@@ -0,0 +1,49 @@
+package com.ifish.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @ClassName: tbl_user
+ * @date 2015年7月2日 下午16:40:00
+ *
+ */
+public class User implements Serializable{
+
+ private static final long serialVersionUID = 9090213827766125261L;
+ //用户ID
+ private Integer userId;
+ //最后一次登陆时间
+ private Date loginTime;
+ //登陆手机类型
+ private String loginType;
+ //修改时间
+ private Date updateTime;
+
+ public Integer getUserId() {
+ return userId;
+ }
+ public void setUserId(Integer userId) {
+ this.userId = userId;
+ }
+ public Date getLoginTime() {
+ return loginTime;
+ }
+ public void setLoginTime(Date loginTime) {
+ this.loginTime = loginTime;
+ }
+ public String getLoginType() {
+ return loginType;
+ }
+ public void setLoginType(String loginType) {
+ this.loginType = loginType;
+ }
+ public Date getUpdateTime() {
+ return updateTime;
+ }
+ public void setUpdateTime(Date updateTime) {
+ this.updateTime = updateTime;
+ }
+
+
+}
diff --git a/src/main/java/com/ifish/entity/hbm/Device.hbm.xml b/src/main/java/com/ifish/entity/hbm/Device.hbm.xml
new file mode 100644
index 0000000..8ee9711
--- /dev/null
+++ b/src/main/java/com/ifish/entity/hbm/Device.hbm.xml
@@ -0,0 +1,34 @@
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/ifish/entity/hbm/DeviceUser.hbm.xml b/src/main/java/com/ifish/entity/hbm/DeviceUser.hbm.xml
new file mode 100644
index 0000000..3da4b64
--- /dev/null
+++ b/src/main/java/com/ifish/entity/hbm/DeviceUser.hbm.xml
@@ -0,0 +1,14 @@
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/ifish/entity/hbm/FactoryList.hbm.xml b/src/main/java/com/ifish/entity/hbm/FactoryList.hbm.xml
new file mode 100644
index 0000000..5e80ad3
--- /dev/null
+++ b/src/main/java/com/ifish/entity/hbm/FactoryList.hbm.xml
@@ -0,0 +1,11 @@
+
+
+
+
+ false
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/ifish/entity/hbm/HardwareType.hbm.xml b/src/main/java/com/ifish/entity/hbm/HardwareType.hbm.xml
new file mode 100644
index 0000000..62f8ba0
--- /dev/null
+++ b/src/main/java/com/ifish/entity/hbm/HardwareType.hbm.xml
@@ -0,0 +1,11 @@
+
+
+
+
+ false
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/ifish/entity/hbm/LoginRecord.hbm.xml b/src/main/java/com/ifish/entity/hbm/LoginRecord.hbm.xml
new file mode 100644
index 0000000..fb4f338
--- /dev/null
+++ b/src/main/java/com/ifish/entity/hbm/LoginRecord.hbm.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ false
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/ifish/entity/hbm/PushList.hbm.xml b/src/main/java/com/ifish/entity/hbm/PushList.hbm.xml
new file mode 100644
index 0000000..282da46
--- /dev/null
+++ b/src/main/java/com/ifish/entity/hbm/PushList.hbm.xml
@@ -0,0 +1,26 @@
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/ifish/entity/hbm/User.hbm.xml b/src/main/java/com/ifish/entity/hbm/User.hbm.xml
new file mode 100644
index 0000000..824ef56
--- /dev/null
+++ b/src/main/java/com/ifish/entity/hbm/User.hbm.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ false
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/ifish/enums/BooleanEnum.java b/src/main/java/com/ifish/enums/BooleanEnum.java
new file mode 100644
index 0000000..d2e1851
--- /dev/null
+++ b/src/main/java/com/ifish/enums/BooleanEnum.java
@@ -0,0 +1,29 @@
+package com.ifish.enums;
+
+public enum BooleanEnum {
+ NO("0","否"),
+ YES("1","是");
+
+ private BooleanEnum(String key,String value){
+ this.key = key;
+ this.value = value;
+ }
+
+ private String key;
+ private String value;
+
+
+ public String getKey() {
+ return key;
+ }
+ public void setKey(String key) {
+ this.key = key;
+ }
+ public String getValue() {
+ return value;
+ }
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+}
diff --git a/src/main/java/com/ifish/enums/NeteaseEnum.java b/src/main/java/com/ifish/enums/NeteaseEnum.java
new file mode 100644
index 0000000..b0e5062
--- /dev/null
+++ b/src/main/java/com/ifish/enums/NeteaseEnum.java
@@ -0,0 +1,28 @@
+package com.ifish.enums;
+
+public enum NeteaseEnum {
+ status200("200","操作成功"),
+ status414("414","参数错误");
+
+ private NeteaseEnum(String key,String value){
+ this.key = key;
+ this.value = value;
+ }
+
+ private String key;
+ private String value;
+
+
+ public String getKey() {
+ return key;
+ }
+ public void setKey(String key) {
+ this.key = key;
+ }
+ public String getValue() {
+ return value;
+ }
+ public void setValue(String value) {
+ this.value = value;
+ }
+}
diff --git a/src/main/java/com/ifish/enums/PhoneTypeEnum.java b/src/main/java/com/ifish/enums/PhoneTypeEnum.java
new file mode 100644
index 0000000..ea80e79
--- /dev/null
+++ b/src/main/java/com/ifish/enums/PhoneTypeEnum.java
@@ -0,0 +1,29 @@
+package com.ifish.enums;
+
+public enum PhoneTypeEnum {
+ ios("ios","ios"),
+ android("android","android");
+
+ private PhoneTypeEnum(String key,String value){
+ this.key = key;
+ this.value = value;
+ }
+
+ private String key;
+ private String value;
+
+
+ public String getKey() {
+ return key;
+ }
+ public void setKey(String key) {
+ this.key = key;
+ }
+ public String getValue() {
+ return value;
+ }
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+}
diff --git a/src/main/java/com/ifish/enums/PushTypeEnum.java b/src/main/java/com/ifish/enums/PushTypeEnum.java
new file mode 100644
index 0000000..4ffa4e8
--- /dev/null
+++ b/src/main/java/com/ifish/enums/PushTypeEnum.java
@@ -0,0 +1,33 @@
+package com.ifish.enums;
+
+public enum PushTypeEnum {
+ remove_device("remove_device","解绑通知"),
+ wendu_warn("wendu_warn","温度报警"),
+ qu_reply("qu_reply","问题反馈"),
+ app_update("app_update","IOS更新推送"),
+ remind_water("remind_water","换水提醒"),
+ offline_push("offline_push","离线通知");
+
+ private PushTypeEnum(String key,String value){
+ this.key = key;
+ this.value = value;
+ }
+
+ private String key;
+ private String value;
+
+
+ public String getKey() {
+ return key;
+ }
+ public void setKey(String key) {
+ this.key = key;
+ }
+ public String getValue() {
+ return value;
+ }
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+}
diff --git a/src/main/java/com/ifish/hibernate/HibernateBaseDao.java b/src/main/java/com/ifish/hibernate/HibernateBaseDao.java
new file mode 100644
index 0000000..e47a872
--- /dev/null
+++ b/src/main/java/com/ifish/hibernate/HibernateBaseDao.java
@@ -0,0 +1,80 @@
+package com.ifish.hibernate;
+
+import java.io.Serializable;
+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.criterion.Criterion;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * hibernate DAO基类
+ * @author ggw
+ * @param
+ * @param
+ */
+public abstract class HibernateBaseDao {
+
+ @Autowired
+ protected SessionFactory sessionFactory;
+
+ protected Session getSession() {
+ return sessionFactory.getCurrentSession();
+ }
+
+ /**
+ * 根据ID查找
+ * @param id
+ * @return
+ */
+ @SuppressWarnings("unchecked")
+ protected T get(ID id) {
+ return (T) getSession().get(getEntityClass(), id);
+ }
+
+ /**
+ * 按属性查找对象列表
+ * @param criterions
+ * @return
+ */
+ @SuppressWarnings("unchecked")
+ protected List findByProperty(Criterion... criterions) {
+ Criteria cri = createCriteria(criterions);
+ return cri.list();
+ }
+
+ /**
+ * 按属性查找唯一对象
+ * @param criterions
+ * @return
+ */
+ @SuppressWarnings("unchecked")
+ protected T findUniqueByProperty(Criterion... criterions) {
+ Criteria cri = createCriteria(criterions);
+ return (T) cri.uniqueResult();
+ }
+
+ /**
+ * 根据Criterion条件创建Criteria,后续可进行更多处理,辅助函数.
+ * @param criterions
+ * @return
+ */
+ protected Criteria createCriteria(Criterion... criterions) {
+ Criteria criteria = getSession().createCriteria(getEntityClass());
+ if(criterions!=null){
+ for (Criterion c : criterions) {
+ criteria.add(c);
+ }
+ }
+ return criteria;
+ }
+
+ /**
+ * 获得Dao对于的实体类
+ * @return
+ */
+ abstract protected Class getEntityClass();
+}
diff --git a/src/main/java/com/ifish/netease/CheckSumBuilder.java b/src/main/java/com/ifish/netease/CheckSumBuilder.java
new file mode 100644
index 0000000..3f3f12e
--- /dev/null
+++ b/src/main/java/com/ifish/netease/CheckSumBuilder.java
@@ -0,0 +1,48 @@
+package com.ifish.netease;
+
+import java.security.MessageDigest;
+
+/**
+ * SHA1(AppSecret + Nonce + CurTime),三个参数拼接的字符串,进行SHA1哈希计算,转化成16进制字符(String,小写)
+ * @author Administrator
+ *
+ */
+public class CheckSumBuilder {
+
+ // 计算并获取CheckSum
+ public static String getCheckSum(String appSecret, String nonce, String curTime) {
+ return encode("sha1", appSecret + nonce + curTime);
+ }
+
+ // 计算并获取md5值
+ public static String getMD5(String requestBody) {
+ return encode("md5", requestBody);
+ }
+
+ private static String encode(String algorithm, String value) {
+ if (value == null) {
+ return null;
+ }
+ try {
+ MessageDigest messageDigest
+ = MessageDigest.getInstance(algorithm);
+ messageDigest.update(value.getBytes());
+ return getFormattedText(messageDigest.digest());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private static String getFormattedText(byte[] bytes) {
+ int len = bytes.length;
+ StringBuilder buf = new StringBuilder(len * 2);
+ for (int j = 0; j < len; j++) {
+ buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
+ buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
+ }
+ return buf.toString();
+ }
+
+ private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/ifish/netease/NeteaseIM.java b/src/main/java/com/ifish/netease/NeteaseIM.java
new file mode 100644
index 0000000..5ec9708
--- /dev/null
+++ b/src/main/java/com/ifish/netease/NeteaseIM.java
@@ -0,0 +1,292 @@
+package com.ifish.netease;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.ifish.enums.NeteaseEnum;
+import com.ifish.util.IfishUtil;
+
+public class NeteaseIM {
+
+ String appKey = "";
+ String appSecret = "";
+
+ private static Logger log = LoggerFactory.getLogger(NeteaseIM.class);
+
+ public NeteaseIM(String appKey,String appSecret){
+ this.appKey=appKey;
+ this.appSecret=appSecret;
+ }
+ /**
+ * 创建云信ID
+ * @param accid 云信ID,最大长度32字符,必须保证一个APP内唯一
+ * @param name 云信ID昵称,最大长度64字符,用来PUSH推送 时显示的昵称
+ * @param icon 云信ID头像URL,第三方可选填,最大长度1024
+ * @param props json属性,第三方可选填,最大长度1024字符
+ * @return
+ * @throws Exception
+ */
+ public Map createAccid(String accid,String name,String icon,String props){
+ try {
+ DefaultHttpClient httpClient = new DefaultHttpClient();
+ String url = "https://api.netease.im/nimserver/user/create.action";
+ HttpPost httpPost = new HttpPost(url);
+ String nonce = IfishUtil.getCharAndNumr(10);
+ String curTime = String.valueOf((new Date()).getTime() / 1000L);
+ //计算CheckSum
+ String checkSum = CheckSumBuilder.getCheckSum(appSecret, nonce ,curTime);
+ //设置请求的header
+ httpPost.addHeader("AppKey", appKey);
+ httpPost.addHeader("Nonce", nonce);
+ httpPost.addHeader("CurTime", curTime);
+ httpPost.addHeader("CheckSum", checkSum);
+ httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
+ //设置请求的参数
+ List nvps = new ArrayList();
+ nvps.add(new BasicNameValuePair("accid", accid));
+ nvps.add(new BasicNameValuePair("name", name));
+ nvps.add(new BasicNameValuePair("icon", icon));
+ nvps.add(new BasicNameValuePair("props", props));
+ httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
+ //执行请求
+ HttpResponse response = httpClient.execute(httpPost);
+ //执行结果
+ String responseStr = EntityUtils.toString(response.getEntity(), "utf-8");
+ JSONObject json = new JSONObject(responseStr);
+ String code = json.getString("code");
+ Map map = new HashMap();
+ map.put("code", code);
+ //200
+ if(code.equals(NeteaseEnum.status200.getKey())){
+ JSONObject infoJson = json.getJSONObject("info");
+ String token = infoJson.getString("token");
+ map.put("token", token);
+ }
+ else if(code.equals(NeteaseEnum.status414.getKey())){
+ String desc = json.getString("desc");
+ }
+ return map;
+ } catch (Exception e) {
+ log.error("CreateAccid error message:{},{}",accid,e.toString());
+ }
+ return null;
+ }
+ /**
+ * 更新并获取新token
+ * @param accid
+ * @return
+ * @throws Exception
+ */
+ public Map refreshToken(String accid){
+ try {
+ DefaultHttpClient httpClient = new DefaultHttpClient();
+ String url = "https://api.netease.im/nimserver/user/refreshToken.action";
+ HttpPost httpPost = new HttpPost(url);
+ String nonce = IfishUtil.getCharAndNumr(10);
+ String curTime = String.valueOf((new Date()).getTime() / 1000L);
+ //计算CheckSum
+ String checkSum = CheckSumBuilder.getCheckSum(appSecret, nonce ,curTime);
+ //设置请求的header
+ httpPost.addHeader("AppKey", appKey);
+ httpPost.addHeader("Nonce", nonce);
+ httpPost.addHeader("CurTime", curTime);
+ httpPost.addHeader("CheckSum", checkSum);
+ httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
+ //设置请求的参数
+ List nvps = new ArrayList();
+ nvps.add(new BasicNameValuePair("accid", accid));
+ httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
+ //执行请求
+ HttpResponse response = httpClient.execute(httpPost);
+ //执行结果
+ String responseStr = EntityUtils.toString(response.getEntity(), "utf-8");
+ JSONObject json = new JSONObject(responseStr);
+ String code = json.getString("code");
+ Map map = new HashMap();
+ map.put("code", code);
+ //200
+ if(code.equals(NeteaseEnum.status200.getKey())){
+ JSONObject infoJson = json.getJSONObject("info");
+ String token = infoJson.getString("token");
+ map.put("token", token);
+ }
+ else if(code.equals(NeteaseEnum.status414.getKey())){
+ String desc = json.getString("desc");
+ }
+ return map;
+ } catch (Exception e) {
+ log.error("refreshToken error message:{},{}",accid,e.toString());
+ }
+ return null;
+ }
+
+ /**
+ * 发送普通消息
+ * @param from
+ * @param to
+ * @param msg
+ * @return
+ */
+ public Map sendMsg(String from,String to,String msg){
+ try {
+ DefaultHttpClient httpClient = new DefaultHttpClient();
+ String url = "https://api.netease.im/nimserver/msg/sendMsg.action";
+ HttpPost httpPost = new HttpPost(url);
+ String nonce = IfishUtil.getCharAndNumr(10);
+ String curTime = String.valueOf((new Date()).getTime() / 1000L);
+ //计算CheckSum
+ String checkSum = CheckSumBuilder.getCheckSum(appSecret, nonce ,curTime);
+ //设置请求的header
+ httpPost.addHeader("AppKey", appKey);
+ httpPost.addHeader("Nonce", nonce);
+ httpPost.addHeader("CurTime", curTime);
+ httpPost.addHeader("CheckSum", checkSum);
+ httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
+ //设置请求的参数
+ List nvps = new ArrayList();
+ nvps.add(new BasicNameValuePair("from", from));
+ nvps.add(new BasicNameValuePair("to", to));
+ nvps.add(new BasicNameValuePair("ope", "0"));
+ nvps.add(new BasicNameValuePair("type", "0"));
+ nvps.add(new BasicNameValuePair("body", "{\"msg\":\""+msg+"\"}"));
+ httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
+ //执行请求
+ HttpResponse response = httpClient.execute(httpPost);
+ //执行结果
+ String responseStr = EntityUtils.toString(response.getEntity(), "utf-8");
+ JSONObject json = new JSONObject(responseStr);
+ String code = json.getString("code");
+ Map map = new HashMap();
+ map.put("code", code);
+ //200
+ if(code.equals(NeteaseEnum.status200.getKey())){
+
+ }
+ else if(code.equals(NeteaseEnum.status414.getKey())){
+ String desc = json.getString("desc");
+ }
+ return map;
+ } catch (Exception e) {
+ log.error("refreshToken error message:{}",e.toString());
+ }
+ return null;
+ }
+ /**
+ * 批量发送点对点普通消息
+ * @param fromAccid
+ * @param toAccids
+ * @param msg
+ * @return
+ */
+ public Map sendBatchMsg(String fromAccid,String toAccids,String msg){
+ try {
+ DefaultHttpClient httpClient = new DefaultHttpClient();
+ String url = "https://api.netease.im/nimserver/msg/sendBatchMsg.action";
+ HttpPost httpPost = new HttpPost(url);
+ String nonce = IfishUtil.getCharAndNumr(10);
+ String curTime = String.valueOf((new Date()).getTime() / 1000L);
+ //计算CheckSum
+ String checkSum = CheckSumBuilder.getCheckSum(appSecret, nonce ,curTime);
+ //设置请求的header
+ httpPost.addHeader("AppKey", appKey);
+ httpPost.addHeader("Nonce", nonce);
+ httpPost.addHeader("CurTime", curTime);
+ httpPost.addHeader("CheckSum", checkSum);
+ httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
+ //设置请求的参数
+ List nvps = new ArrayList();
+ nvps.add(new BasicNameValuePair("fromAccid", fromAccid));
+ nvps.add(new BasicNameValuePair("toAccids", toAccids));
+ nvps.add(new BasicNameValuePair("type", "0"));
+ nvps.add(new BasicNameValuePair("body", "{\"msg\":\""+msg+"\"}"));
+ httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
+ //执行请求
+ HttpResponse response = httpClient.execute(httpPost);
+ //执行结果
+ String responseStr = EntityUtils.toString(response.getEntity(), "utf-8");
+ JSONObject json = new JSONObject(responseStr);
+ String code = json.getString("code");
+ Map map = new HashMap();
+ map.put("code", code);
+ //200
+ if(code.equals(NeteaseEnum.status200.getKey())){
+
+ }
+ else if(code.equals(NeteaseEnum.status414.getKey())){
+ String desc = json.getString("desc");
+ }
+ return map;
+ } catch (Exception e) {
+ log.error("refreshToken error message:{}",e.toString());
+ }
+ return null;
+ }
+
+ /**
+ * 单聊云端历史消息查询
+ * @param from
+ * @param to
+ * @param begintime
+ * @param endtime
+ * @param limit
+ * @return
+ */
+ public Map querySessionMsg(String from,String to,String begintime,String endtime,String limit){
+ try {
+ DefaultHttpClient httpClient = new DefaultHttpClient();
+ String url = "https://api.netease.im/nimserver/history/querySessionMsg.action";
+ HttpPost httpPost = new HttpPost(url);
+ String nonce = IfishUtil.getCharAndNumr(10);
+ String curTime = String.valueOf((new Date()).getTime() / 1000L);
+ //计算CheckSum
+ String checkSum = CheckSumBuilder.getCheckSum(appSecret, nonce ,curTime);
+ //设置请求的header
+ httpPost.addHeader("AppKey", appKey);
+ httpPost.addHeader("Nonce", nonce);
+ httpPost.addHeader("CurTime", curTime);
+ httpPost.addHeader("CheckSum", checkSum);
+ httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
+ //设置请求的参数
+ List nvps = new ArrayList();
+ nvps.add(new BasicNameValuePair("from", from));
+ nvps.add(new BasicNameValuePair("to", to));
+ nvps.add(new BasicNameValuePair("begintime", begintime));
+ nvps.add(new BasicNameValuePair("endtime", endtime));
+ nvps.add(new BasicNameValuePair("limit", limit));
+ httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
+ //执行请求
+ HttpResponse response = httpClient.execute(httpPost);
+ //执行结果
+ String responseStr = EntityUtils.toString(response.getEntity(), "utf-8");
+ JSONObject json = new JSONObject(responseStr);
+ String code = json.getString("code");
+ Map map = new HashMap();
+ map.put("code", code);
+ //200
+ if(code.equals(NeteaseEnum.status200.getKey())){
+
+ }
+ else if(code.equals(NeteaseEnum.status414.getKey())){
+ String desc = json.getString("desc");
+ }
+ return map;
+ } catch (Exception e) {
+ log.error("refreshToken error message:{}",e.toString());
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/ifish/quartz/ExecuteJob.java b/src/main/java/com/ifish/quartz/ExecuteJob.java
new file mode 100644
index 0000000..d841948
--- /dev/null
+++ b/src/main/java/com/ifish/quartz/ExecuteJob.java
@@ -0,0 +1,113 @@
+package com.ifish.quartz;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.mina.core.session.IoSession;
+import org.quartz.Job;
+import org.quartz.JobDataMap;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import com.ifish.entity.Device;
+import com.ifish.entity.DeviceUser;
+import com.ifish.entity.PushList;
+import com.ifish.entity.User;
+import com.ifish.enums.BooleanEnum;
+import com.ifish.enums.NeteaseEnum;
+import com.ifish.enums.PushTypeEnum;
+import com.ifish.netease.NeteaseIM;
+import com.ifish.service.DeviceService;
+import com.ifish.service.UserService;
+import com.ifish.socketNew.SomeServer;
+
+public class ExecuteJob implements Job {
+
+ private static Logger log = LoggerFactory.getLogger(ExecuteJob.class);
+ @Autowired
+ private NeteaseIM neteaseIM;
+ @Autowired
+ private UserService userService;
+ @Autowired
+ private DeviceService deviceService;
+
+ public void execute(JobExecutionContext context) throws JobExecutionException {
+ //任务传递的参数
+ JobDataMap dataMap = context.getJobDetail().getJobDataMap();
+ String macAddress = dataMap.getString("macAddress");
+ String timestamp = dataMap.getString("timestamp");
+ try {
+ //移除为null的连接
+ IoSession session_cz = SomeServer.sessions_cz.get(macAddress);
+ if(session_cz==null || session_cz.getRemoteAddress()==null){
+ SomeServer.sessions_cz.remove(macAddress);
+ }
+ //设备是否存在
+ Device device = deviceService.getUniqueByProperty("macAddress", macAddress);
+ if(device!=null){
+ //记录次数
+ Integer number1 = device.getNumber1();
+ Integer number2 = device.getNumber2();
+ Integer number3 = device.getNumber3();
+ Integer number4 = device.getNumber4();
+ Integer number5 = device.getNumber5();
+ List list = deviceService.getListByProperty(device.getDeviceId());
+ //是否被绑定
+ if(list!=null){
+ for (DeviceUser deviceUser : list) {
+ Integer userId = deviceUser.getPriId().getUserId();
+ String showName = deviceUser.getShowName();
+ String title = PushTypeEnum.offline_push.getValue();
+ String msg = "【"+title+"】你的水族箱“"+showName+"”于"+timestamp+"离线,请及时查看!";
+ //发送云信消息
+ boolean neteaseBln = false;
+ Map neteaseMap = neteaseIM.sendMsg("ifish", userId.toString(), msg);
+ if(neteaseMap!=null){
+ neteaseBln = neteaseMap.get("code").equals(NeteaseEnum.status200.getKey());
+ }
+ //IOS极光推送
+ boolean jpushIosBln = false;
+ //推送记录
+ PushList pushList = new PushList();
+ Integer deviceId = deviceUser.getPriId().getDeviceId();
+ User user = userService.findById(userId);
+ if(user!=null){
+ String loginType = user.getLoginType();
+ if(loginType!=null){
+ Map map = new HashMap();
+ map.put("device_id", deviceId.toString());
+ map.put("device_name", showName);
+ map.put("timestamp", timestamp);
+ map.put("msg_type", PushTypeEnum.offline_push.getKey());
+ //推送记录
+ pushList.setUserId(userId);
+ pushList.setDeviceId(deviceId);
+ pushList.setPhoneType(loginType.toLowerCase());
+ pushList.setShowName(showName);
+ pushList.setPushType(PushTypeEnum.offline_push.getKey());
+ pushList.setNeteaseStatus(neteaseBln?BooleanEnum.YES.getKey():BooleanEnum.NO.getKey());
+ pushList.setPushTitle(title);
+ pushList.setPushContext(msg);
+ pushList.setCreateTime(new Date());
+ pushList.setNumber1(number1);
+ pushList.setNumber2(number2);
+ pushList.setNumber3(number3);
+ pushList.setNumber4(number4);
+ pushList.setNumber5(number5);
+ this.userService.save(pushList);
+ }
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error("error msg:{}",e.toString());
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ifish/quartz/JobFactory.java b/src/main/java/com/ifish/quartz/JobFactory.java
new file mode 100644
index 0000000..8a57a27
--- /dev/null
+++ b/src/main/java/com/ifish/quartz/JobFactory.java
@@ -0,0 +1,22 @@
+package com.ifish.quartz;
+
+import org.quartz.spi.TriggerFiredBundle;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
+import org.springframework.scheduling.quartz.AdaptableJobFactory;
+
+public class JobFactory extends AdaptableJobFactory {
+
+ @Autowired
+ private AutowireCapableBeanFactory capableBeanFactory;
+
+ @Override
+ protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
+ //调用父类的方法
+ Object jobInstance = super.createJobInstance(bundle);
+ //进行注入
+ capableBeanFactory.autowireBean(jobInstance);
+ return jobInstance;
+ }
+
+}
diff --git a/src/main/java/com/ifish/quartz/JobGroup.java b/src/main/java/com/ifish/quartz/JobGroup.java
new file mode 100644
index 0000000..1e7d904
--- /dev/null
+++ b/src/main/java/com/ifish/quartz/JobGroup.java
@@ -0,0 +1,84 @@
+package com.ifish.quartz;
+
+import java.util.Date;
+
+public class JobGroup {
+
+ /** 任务名称 **/
+ private String jobName;
+
+ /** 任务分组 **/
+ private String jobGroup = "offlinePushGroup";
+
+ /** 触发器名称 **/
+ private String triggerName;
+
+ /** 触发器分组 **/
+ private String triggerGroup = "offlinePushGroup";
+
+ /** mac地址 **/
+ private String macAddress;
+
+ /** 执行时间 **/
+ private Date startTime;
+
+ /** 离线时间 **/
+ private String timestamp;
+
+ public String getJobName() {
+ return jobName;
+ }
+
+ public void setJobName(String jobName) {
+ this.jobName = jobName;
+ }
+
+ public String getJobGroup() {
+ return jobGroup;
+ }
+
+ public void setJobGroup(String jobGroup) {
+ this.jobGroup = jobGroup;
+ }
+
+ public String getTriggerName() {
+ return triggerName;
+ }
+
+ public void setTriggerName(String triggerName) {
+ this.triggerName = triggerName;
+ }
+
+ public String getTriggerGroup() {
+ return triggerGroup;
+ }
+
+ public void setTriggerGroup(String triggerGroup) {
+ this.triggerGroup = triggerGroup;
+ }
+
+ public String getMacAddress() {
+ return macAddress;
+ }
+
+ public void setMacAddress(String macAddress) {
+ this.macAddress = macAddress;
+ }
+
+ public Date getStartTime() {
+ return startTime;
+ }
+
+ public void setStartTime(Date startTime) {
+ this.startTime = startTime;
+ }
+
+ public String getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(String timestamp) {
+ this.timestamp = timestamp;
+ }
+
+}
diff --git a/src/main/java/com/ifish/quartz/ScheduleJob.java b/src/main/java/com/ifish/quartz/ScheduleJob.java
new file mode 100644
index 0000000..55671f4
--- /dev/null
+++ b/src/main/java/com/ifish/quartz/ScheduleJob.java
@@ -0,0 +1,101 @@
+package com.ifish.quartz;
+
+import org.quartz.JobBuilder;
+import org.quartz.JobDetail;
+import org.quartz.JobKey;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import org.quartz.SchedulerFactory;
+import org.quartz.Trigger;
+import org.quartz.TriggerBuilder;
+import org.quartz.TriggerKey;
+import org.quartz.impl.StdSchedulerFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 定时任务
+ * @author guogw
+ */
+public class ScheduleJob {
+
+ private static Logger log = LoggerFactory.getLogger(ScheduleJob.class);
+ //调度
+ private Scheduler scheduler = null;
+
+ @Autowired
+ private JobFactory jobFactory;
+
+ public void init(){
+ try {
+ //调度任务开启
+ SchedulerFactory sf = new StdSchedulerFactory();
+ scheduler = sf.getScheduler();
+ //实现job中注入bean
+ scheduler.setJobFactory(jobFactory);
+ scheduler.start();
+ } catch (SchedulerException e) {
+ log.error("start scheduler error:{}",e.toString());
+ }
+ }
+ /**
+ * 添加任务
+ * @param jobGroup
+ * @throws SchedulerException
+ */
+ public void addJob(JobGroup jobGroup){
+ try {
+ log.info("添加任务:{}.{}",jobGroup.getJobName(),jobGroup.getTriggerName());
+ //任务
+ JobDetail jobDetail= JobBuilder.newJob(ExecuteJob.class)
+ .usingJobData("macAddress", jobGroup.getMacAddress())
+ .usingJobData("timestamp", jobGroup.getTimestamp())
+ .withIdentity(jobGroup.getJobName(),jobGroup.getJobName())
+ .build();
+ //触发器
+ Trigger trigger= TriggerBuilder.newTrigger()
+ .withIdentity(jobGroup.getTriggerName(),jobGroup.getTriggerGroup())
+ .startAt(jobGroup.getStartTime()).build();
+ //添加触发器
+ scheduler.scheduleJob(jobDetail,trigger);
+ } catch (SchedulerException e) {
+ log.error("addJob error【macAddress:{},jobGroup:{},triggerGroup:{},errMsg:{}】",jobGroup.getMacAddress(),jobGroup.getJobName(),jobGroup.getTriggerGroup(),e.toString());
+ }
+ }
+ /**
+ * 移除任务
+ * @param jobGroup
+ * @throws SchedulerException
+ */
+ public void deleteJob(JobGroup jobGroup){
+ try {
+ log.info("移除任务:{}.{}",jobGroup.getJobName(),jobGroup.getTriggerName());
+ //触发器
+ TriggerKey triggerKey = TriggerKey.triggerKey(jobGroup.getTriggerName(),jobGroup.getTriggerGroup());
+ //停止触发器
+ scheduler.pauseTrigger(triggerKey);
+ //移除触发器
+ scheduler.unscheduleJob(triggerKey);
+ //任务
+ JobKey jobKey = JobKey.jobKey(jobGroup.getJobName(),jobGroup.getJobGroup());
+ //删除任务
+ scheduler.deleteJob(jobKey);
+ } catch (SchedulerException e) {
+ log.error("deleteJob error【macAddress:{},jobGroup:{},triggerGroup:{},errMsg:{}】",jobGroup.getMacAddress(),jobGroup.getJobName(),jobGroup.getTriggerGroup(),e.toString());
+ }
+ }
+
+ /**
+ * 关闭调度任务
+ */
+ public void shutdown(){
+ try {
+ //关闭任务
+ scheduler.shutdown();
+ } catch (SchedulerException e) {
+ log.error("shutdown scheduler error:{}",e.toString());
+ }
+ }
+
+}
diff --git a/src/main/java/com/ifish/service/DeviceService.java b/src/main/java/com/ifish/service/DeviceService.java
new file mode 100644
index 0000000..5cc6420
--- /dev/null
+++ b/src/main/java/com/ifish/service/DeviceService.java
@@ -0,0 +1,39 @@
+package com.ifish.service;
+
+import java.util.List;
+
+import com.ifish.entity.Device;
+import com.ifish.entity.DeviceUser;
+import com.ifish.entity.FactoryList;
+import com.ifish.entity.HardwareType;
+import com.ifish.entity.LoginRecord;
+import com.ifish.socketNew.model.send.OrderFunctionCode1;
+
+/**
+ * @ClassName: DeviceService
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+public interface DeviceService {
+
+ public Device update(Device device);
+
+ public Device update(OrderFunctionCode1 model);
+
+ public void updateWarnOnoff(String macAddress,String onOff);
+
+ public Device getUniqueByProperty(String property,Object value);
+
+ public List getByProperty(String property,Object value);
+
+ public DeviceUser getUniqueByProperty(String macAddress);
+
+ public List getListByProperty(Integer deviceId);
+
+ public LoginRecord save(LoginRecord loginRecord);
+
+ public FactoryList getFactoryListById(String factoryCode);
+
+ public HardwareType getHardwareTypeById(String typeCode);
+}
diff --git a/src/main/java/com/ifish/service/UserService.java b/src/main/java/com/ifish/service/UserService.java
new file mode 100644
index 0000000..6ecd985
--- /dev/null
+++ b/src/main/java/com/ifish/service/UserService.java
@@ -0,0 +1,16 @@
+package com.ifish.service;
+
+import com.ifish.entity.PushList;
+import com.ifish.entity.User;
+
+/**
+ * @ClassName: UserService
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+public interface UserService {
+ public User findById(Integer userId);
+
+ public PushList save(PushList pushList);
+}
diff --git a/src/main/java/com/ifish/serviceImpl/DeviceServiceImpl.java b/src/main/java/com/ifish/serviceImpl/DeviceServiceImpl.java
new file mode 100644
index 0000000..a458425
--- /dev/null
+++ b/src/main/java/com/ifish/serviceImpl/DeviceServiceImpl.java
@@ -0,0 +1,171 @@
+package com.ifish.serviceImpl;
+
+import java.util.Date;
+import java.util.List;
+
+import org.hibernate.criterion.Restrictions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.ifish.dao.DeviceDao;
+import com.ifish.dao.DeviceUserDao;
+import com.ifish.dao.FactoryListDao;
+import com.ifish.dao.HardwareTypeDao;
+import com.ifish.dao.LoginRecordDao;
+import com.ifish.entity.Device;
+import com.ifish.entity.DeviceUser;
+import com.ifish.entity.FactoryList;
+import com.ifish.entity.HardwareType;
+import com.ifish.entity.LoginRecord;
+import com.ifish.enums.BooleanEnum;
+import com.ifish.service.DeviceService;
+import com.ifish.socketNew.model.send.OrderFunctionCode1;
+import com.ifish.util.ByteUtil;
+
+/**
+ * @ClassName: DeviceServiceImpl
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+
+@Service
+@Transactional
+public class DeviceServiceImpl implements DeviceService {
+
+ private static Logger log = LoggerFactory.getLogger(DeviceServiceImpl.class);
+
+ @Autowired
+ private DeviceDao deviceDao;
+ @Autowired
+ private LoginRecordDao loginRecordDao;
+ @Autowired
+ private DeviceUserDao deviceUserDao;
+ @Autowired
+ private FactoryListDao factoryListDao;
+ @Autowired
+ private HardwareTypeDao hardwareTypeDao;
+
+ @Override
+ public Device update(Device device) {
+ return this.deviceDao.update(device);
+ }
+
+ @Override
+ public Device update(OrderFunctionCode1 model) {
+ //macAddr地址
+ String stcMac = ByteUtil.bytesToHexString(model.getSrc());
+ //IP
+ byte[] log_Ip= model.getLogin_ip();
+ StringBuilder ipStr = new StringBuilder();
+ for (int i = 0; i < log_Ip.length; i++) {
+ int v = log_Ip[i] & 0xff;
+ if(i==0){
+ ipStr.append(v);
+ }
+ else{
+ ipStr.append("."+v);
+ }
+ }
+ //版本
+ Integer version = model.getVersion() & 0xff;
+ //电子厂
+ String factoryCode = ByteUtil.toHex(model.getVendor());
+ factoryCode = factoryCode.equals("01")?"0a":factoryCode;
+ //FactoryList factoryList = this.factoryListDao.findById(factoryCode);
+ //硬件类型
+ String typeCode = ByteUtil.toHex(model.getHardware_type());
+ //HardwareType hardwareType = this.hardwareTypeDao.findById(typeCode);
+ //if(factoryList==null || hardwareType==null){
+ // return null;
+ //}
+ Device device = this.deviceDao.getUniqueByProperty("macAddress", stcMac);
+ //更新
+ if(device!=null){
+ Integer loginConut = device.getLoginCount();
+ if(loginConut!=null){
+ device.setLoginCount(++loginConut);
+ }
+ else{
+ device.setLoginCount(1);
+ }
+ device.setFactoryCode(factoryCode);
+ device.setHardwareType(typeCode);
+ device.setSoftwareVersion(version.toString());
+ device.setDeviceIP(ipStr.toString());
+ device.setLoginTime(new Date());
+ this.deviceDao.update(device);
+ return device;
+ }
+ else{
+ //新增
+ //log.warn("macAddress not exist in database:{}",stcMac);
+ device = new Device();
+ device.setMacAddress(stcMac);
+ device.setFactoryCode(factoryCode);
+ device.setHardwareType(typeCode);
+ device.setSoftwareVersion(version.toString());
+ device.setDeviceIP(ipStr.toString());
+ device.setLoginCount(1);
+ Date date = new Date();
+ device.setLoginTime(date);
+ device.setCreateDate(date);
+ device.setCreateTime(date);
+ this.deviceDao.save(device);
+ return device;
+ }
+ }
+
+ @Override
+ public Device getUniqueByProperty(String property, Object value) {
+ return this.deviceDao.getUniqueByProperty(property, value);
+ }
+
+ @Override
+ public List getByProperty(String property, Object value) {
+ return this.deviceDao.getByProperty(property, value);
+ }
+
+ @Override
+ public DeviceUser getUniqueByProperty(String macAddress) {
+ Device device = deviceDao.getUniqueByProperty("macAddress", macAddress);
+ if(device!=null){
+ DeviceUser deviceUser = deviceUserDao.getUniqueByProperty(Restrictions.eq("isMaster", BooleanEnum.YES.getKey()),Restrictions.eq("priId.deviceId", device.getDeviceId()));
+ return deviceUser;
+ }
+ return null;
+ }
+
+ @Override
+ public List getListByProperty(Integer deviceId) {
+ return deviceUserDao.getListByProperty(Restrictions.eq("priId.deviceId", deviceId));
+ }
+
+ @Override
+ public void updateWarnOnoff(String macAddress,String onOff) {
+ Device device = this.deviceDao.getUniqueByProperty("macAddress", macAddress);
+ if(device!=null){
+ device.setOnOff(onOff);
+ this.deviceDao.update(device);
+ }
+ }
+
+ @Override
+ public LoginRecord save(LoginRecord loginRecord) {
+ return loginRecordDao.save(loginRecord);
+ }
+
+ @Override
+ public FactoryList getFactoryListById(String factoryCode) {
+ return this.factoryListDao.findById(factoryCode);
+ }
+
+ @Override
+ public HardwareType getHardwareTypeById(String typeCode) {
+ return this.hardwareTypeDao.findById(typeCode);
+ }
+
+}
diff --git a/src/main/java/com/ifish/serviceImpl/UserServiceImpl.java b/src/main/java/com/ifish/serviceImpl/UserServiceImpl.java
new file mode 100644
index 0000000..5eaa3e1
--- /dev/null
+++ b/src/main/java/com/ifish/serviceImpl/UserServiceImpl.java
@@ -0,0 +1,44 @@
+package com.ifish.serviceImpl;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.ifish.dao.PushListDao;
+import com.ifish.dao.UserDao;
+import com.ifish.entity.PushList;
+import com.ifish.entity.User;
+import com.ifish.service.UserService;
+
+/**
+ * @ClassName: UserServiceImpl
+ * @Description: TODO
+ * @author ggw
+ *
+ */
+
+@Service
+@Transactional
+public class UserServiceImpl implements UserService {
+
+ private static Logger log = LoggerFactory.getLogger(UserServiceImpl.class);
+
+ @Autowired
+ private UserDao userDao;
+ @Autowired
+ private PushListDao pushListDao;
+
+ @Override
+ public User findById(Integer userId) {
+ return this.userDao.findById(userId);
+ }
+
+ @Override
+ public PushList save(PushList pushList) {
+ return pushListDao.save(pushList);
+ }
+
+
+}
diff --git a/src/main/java/com/ifish/socketNew/MinaServerHandler.java b/src/main/java/com/ifish/socketNew/MinaServerHandler.java
new file mode 100644
index 0000000..df2e68b
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/MinaServerHandler.java
@@ -0,0 +1,125 @@
+package com.ifish.socketNew;
+
+import java.util.Date;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.mina.core.service.IoHandlerAdapter;
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.core.session.IoSession;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import com.ifish.quartz.JobGroup;
+import com.ifish.quartz.ScheduleJob;
+import com.ifish.util.IfishUtil;
+
+/**
+ * mina服务器端事件处理
+ *
+ * @author
+ */
+public class MinaServerHandler extends IoHandlerAdapter {
+
+ private final AtomicInteger atomicInt = new AtomicInteger();
+
+ private static Logger log = LoggerFactory.getLogger(MinaServerHandler.class);
+
+ @Autowired
+ private SomeServer someServer;
+ @Autowired
+ private ScheduleJob scheduleJob;
+
+ @Override
+ public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ log.error("{}服务器-客户端session异常:{}", session.getRemoteAddress(), cause.toString());
+ }
+
+ /**
+ * 服务端接收消息处理
+ */
+ @Override
+ public void messageReceived(IoSession session, Object message) throws Exception {
+ someServer.doSome(session, message);
+ }
+
+ /**
+ * 客户端连接的会话创建
+ */
+ @Override
+ public void sessionCreated(IoSession session) throws Exception {
+ log.info("{}:会话创建,在线数:{}", session.getRemoteAddress(), atomicInt.incrementAndGet());
+ }
+
+ /**
+ * 客户端连接关闭
+ */
+ @Override
+ public void sessionClosed(IoSession session) throws Exception {
+ log.warn("{}:会话关闭,连接数:{}", session.getRemoteAddress(), atomicInt.decrementAndGet());
+ //旧连接关闭,获取设备mac地址
+ String oldConnect = session.getRemoteAddress().toString();
+ String macAddress = SomeServer.remoteAddress.get(oldConnect);
+ if (macAddress != null) {
+ //移除关闭的连接
+ SomeServer.remoteAddress.remove(oldConnect);
+ //设备当前连接
+ IoSession nowIoSession = SomeServer.sessions_cz.get(macAddress);
+ if (nowIoSession != null && nowIoSession.getRemoteAddress() != null) {
+ String nowConnect = nowIoSession.getRemoteAddress().toString();
+ //如果当前连接和关闭的连接是相同的,说明设备没有重连,10分钟内还未连接,则推送通知用户
+ if (nowConnect.equals(oldConnect)) {
+ offlinePush(macAddress);
+ }
+ } //当前没有连接,10分钟内还未连接,则推送通知用户
+ else {
+ offlinePush(macAddress);
+ }
+ }
+ }
+
+ /**
+ * 延时10分钟推送离线通知,10分钟内重新连接上则移除推送,详见SomeServer
+ *
+ * @param macAddress
+ */
+ public void offlinePush(String macAddress) {
+ JobGroup jobGroup = new JobGroup();
+ jobGroup.setJobName(macAddress);
+ jobGroup.setTriggerName(macAddress);
+ jobGroup.setMacAddress(macAddress);
+ //离线时间
+ jobGroup.setTimestamp(IfishUtil.format(new Date()));
+ //10分钟后推送
+ jobGroup.setStartTime(new Date(new Date().getTime() + 600000L));
+ scheduleJob.addJob(jobGroup);
+ }
+
+ /**
+ * 给客户端发送消息
+ */
+ @Override
+ public void messageSent(IoSession session, Object message) {
+ //System.out.println("messageSent");
+ }
+
+ /**
+ * 空闲超时,主动关闭客户端连接
+ */
+ @Override
+ public void sessionIdle(IoSession session, IdleStatus status)
+ throws Exception {
+ log.warn("空闲超时,服务器主动关闭连接{}", session.getRemoteAddress());
+ session.close(true);
+ }
+
+ /**
+ * 客户端连接打开
+ */
+ @Override
+ public void sessionOpened(IoSession session) throws Exception {
+ //log.info("session open!!!");
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/SomeServer.java b/src/main/java/com/ifish/socketNew/SomeServer.java
new file mode 100644
index 0000000..b650552
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/SomeServer.java
@@ -0,0 +1,369 @@
+package com.ifish.socketNew;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+import org.apache.mina.core.session.IoSession;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import com.ifish.entity.Device;
+import com.ifish.entity.DeviceUser;
+import com.ifish.entity.LoginRecord;
+import com.ifish.entity.PushList;
+import com.ifish.entity.User;
+import com.ifish.enums.BooleanEnum;
+import com.ifish.enums.NeteaseEnum;
+import com.ifish.enums.PushTypeEnum;
+import com.ifish.netease.NeteaseIM;
+import com.ifish.quartz.JobGroup;
+import com.ifish.quartz.ScheduleJob;
+import com.ifish.service.DeviceService;
+import com.ifish.service.UserService;
+import com.ifish.socketNew.model.receive.BackFunctionCode0;
+import com.ifish.socketNew.model.receive.BackFunctionCode1;
+import com.ifish.socketNew.model.receive.BackFunctionCode8;
+import com.ifish.socketNew.model.send.OrderFunctionCode0;
+import com.ifish.socketNew.model.send.OrderFunctionCode1;
+import com.ifish.socketNew.model.send.OrderFunctionCode15;
+import com.ifish.socketNew.model.send.OrderFunctionCode16;
+import com.ifish.socketNew.model.send.OrderFunctionCode17;
+import com.ifish.socketNew.model.send.OrderFunctionCode5;
+import com.ifish.socketNew.model.send.OrderFunctionCode9;
+import com.ifish.socketNew.util.OrderModel;
+import com.ifish.util.ByteUtil;
+import com.ifish.util.IfishUtil;
+
+
+/**
+ * 这个类主要是通过spring注入给MinaServerHandler用的, 表示: mina在接收到信息后,该由主要业务类来处理 服务器处理类
+ **/
+public class SomeServer {
+
+ @Autowired
+ private UserService userService;
+ @Autowired
+ private DeviceService deviceService;
+ @Autowired
+ private ScheduleJob scheduleJob;
+ @Autowired
+ private NeteaseIM neteaseIM;
+
+ //是否回复心跳
+ public static boolean isReplay = true;
+
+ private static Logger log = LoggerFactory.getLogger(SomeServer.class);
+ public static ConcurrentHashMap remoteAddress = new ConcurrentHashMap();
+ public static ConcurrentHashMap sessions_cz = new ConcurrentHashMap();
+ private ConcurrentHashMap> sessions_sjs = new ConcurrentHashMap>();
+
+ /**
+ * 过滤收到的数据 服务器收到数据,进行协议类型匹配,如果不匹配,则不执行相应操作。
+ * @param session
+ * @param message
+ */
+ public void doSome(IoSession session, Object message) {
+ //通配字符串
+ if(message instanceof byte[]){
+ byte[] bytes = (byte[]) message;
+ //长度
+ int length = bytes[14] & 0xff;
+ //mac地址
+ byte[] srcByte = new byte[6];
+ for (int i = 2; i < 8; i++) {
+ srcByte[i-2] = bytes[i];
+ }
+ String strSrc = ByteUtil.bytesToHexString(srcByte);
+ //心跳
+ if(length>=28){
+ sendToApp(session,strSrc, message);
+ }
+ else{
+ sendToDevice(session,strSrc, message);
+ }
+ }
+ //设置设备温度报警
+ else if(message instanceof OrderFunctionCode5) {
+ OrderFunctionCode5 receive = (OrderFunctionCode5) message;
+ String strDest = ByteUtil.bytesToHexString(receive.getDest());
+ sendToDevice(session,strDest, message);
+ try {
+ Integer Onoff = receive.getOnoff() & 0xff;
+ if(Onoff==1 || Onoff==0){
+ deviceService.updateWarnOnoff(strDest,Onoff.toString());
+ }
+ else{
+ log.error("error Onoff:{},macAddress:{}",Onoff,strDest);
+ }
+ } catch (Exception e) {
+ log.warn("set OrderSetWarnModel error:macAddress:{},error msg:{}",strDest,e.toString());
+ }
+ }
+ //设备温度报警
+ else if(message instanceof OrderFunctionCode9) {
+ OrderFunctionCode9 receive = (OrderFunctionCode9) message;
+ String strSrc = ByteUtil.bytesToHexString(receive.getSrc());
+ //推送类型
+ Integer warnType = receive.getWarn_type() & 0xff;
+ if(warnType==0){
+ pushNotifcation(strSrc,PushTypeEnum.wendu_warn.getValue(),"温度达到"+(float)receive.getWendu()/10f+"℃,已低于"+(float)receive.getWarn_wendu()/10f+"℃,请及时查看!");
+ }
+ else if(warnType==1){
+ pushNotifcation(strSrc,PushTypeEnum.wendu_warn.getValue(),"温度达到"+(float)receive.getWendu()/10f+"℃,已高于"+(float)receive.getWarn_wendu()/10f+"℃,请及时查看!");
+ }
+ else{
+ log.error("error warn_type:{},macAddress:{}",warnType,strSrc);
+ }
+ }
+ //设备登录服务器
+ else if(message instanceof OrderFunctionCode1) {
+ OrderFunctionCode1 receive = (OrderFunctionCode1) message;
+ byte[] srcBytes = receive.getSrc();
+ byte[] destBytes = receive.getDest();
+ String strSrc = ByteUtil.bytesToHexString(srcBytes);
+ //服务器回复设备登录请求
+ BackFunctionCode1 model = OrderModel.BackFunctionCode1(destBytes, srcBytes);
+ //直接往本次session写回去
+ session.write(model);
+ //保存连接
+ sessions_cz.put(strSrc, session);
+ remoteAddress.put(session.getRemoteAddress().toString(), strSrc);
+ //设备重新连接上,则移除延时推送的任务
+ JobGroup jobGroup = new JobGroup();
+ jobGroup.setJobName(strSrc);
+ jobGroup.setTriggerName(strSrc);
+ scheduleJob.deleteJob(jobGroup);
+ try {
+ //更新设备信息
+ deviceService.update(receive);
+// if(device==null){
+// String HexDump = ByteUtil.toHex(receive.getType())+ByteUtil.toHex(receive.getCheck_code())+ByteUtil.bytesToHexString(receive.getSrc())+ByteUtil.bytesToHexString(destBytes)+ByteUtil.toHex(receive.getRemote_len())+ByteUtil.toHex(receive.getVendor())+ByteUtil.toHex(receive.getHardware_type())+ByteUtil.toHex(receive.getVersion())+ByteUtil.bytesToHexString(receive.getLogin_ip())+ByteUtil.bytesToHexString(receive.getCrc16_code());
+// log.error("HexDump:{}",HexDump);
+// log.error("factoryCode or hardwareType not exist:macAddress:{},factoryCode:{},hardwareType:{}",strSrc,ByteUtil.toHex(receive.getVendor()),ByteUtil.toHex(receive.getHardware_type()));
+// }
+// else{
+ //记录登录时间
+ LoginRecord loginRecord = new LoginRecord();
+ loginRecord.setMacAddress(strSrc);
+ loginRecord.setLoginTime(new Date());
+ deviceService.save(loginRecord);
+// }
+ } catch (Exception e) {
+ log.warn("save device login error:macAddress:{},error msg:{}",strSrc,e.toString());
+ }
+ }
+ //APP登录服务器
+ else if(message instanceof OrderFunctionCode0) {
+ OrderFunctionCode0 receive = (OrderFunctionCode0) message;
+ byte[] srcBytes = receive.getSrc();
+ byte[] destBytes = receive.getDest();
+ String strDest = ByteUtil.bytesToHexString(receive.getDest());
+ //设备是否在线
+ IoSession tmpSession = sessions_cz.get(strDest);
+ //1表示在线,0表示离线
+ byte login_status = 0;
+ if(tmpSession!=null && tmpSession.getRemoteAddress()!=null){
+ login_status = 1;
+ }
+ else {
+ login_status = 0;
+ }
+ //服务器回复APP登录请求
+ BackFunctionCode0 model = OrderModel.BackFunctionCode0(destBytes, srcBytes ,login_status);
+ session.write(model);
+ //保存APP连接
+ CopyOnWriteArraySet sessionSet = sessions_sjs.get(strDest);
+ if(sessionSet==null){
+ sessionSet = new CopyOnWriteArraySet();
+ sessionSet.add(session);
+ sessions_sjs.put(strDest, sessionSet);
+ }
+ else{
+ for(IoSession ioSession : sessionSet) {
+ if(ioSession==null || ioSession.getRemoteAddress()==null){
+ sessionSet.remove(ioSession);
+ }
+ }
+ sessionSet.add(session);
+ }
+ }
+ //模块版本号
+ else if(message instanceof OrderFunctionCode16) {
+ OrderFunctionCode16 receive = (OrderFunctionCode16) message;
+ byte[] macBytes = receive.getSrc();
+ String strSrc = ByteUtil.bytesToHexString(macBytes);
+ try {
+ //查找设备
+ Device device = this.deviceService.getUniqueByProperty("macAddress", strSrc);
+ if(device!=null){
+ //是否升级
+ if(device.getIsUpgrade().equals(BooleanEnum.YES.getKey())){
+ device.setIsUpgrade(BooleanEnum.NO.getKey());
+ device.setUpgradeTime(new Date());
+ //升级版本
+ int upgradeVersion = device.getUpgradeVersion();
+ OrderFunctionCode15 model = OrderModel.OrderFunctionCode15(macBytes,upgradeVersion);
+ session.write(model);
+ }
+ //记录参数
+ device.setSdkVersion(receive.getVersion() & 0xff);
+ device.setSdkTime(IfishUtil.StrToDate(receive.getYear()+"-"+(receive.getMonth() & 0xff)+"-"+(receive.getDay() & 0xff)));
+ this.deviceService.update(device);
+ }
+ } catch (Exception e) {
+ log.warn("save device sdk version16 error:macAddress:{},error msg:{}",strSrc,e.toString());
+ }
+ }
+ //模块版本号
+ else if(message instanceof OrderFunctionCode17) {
+ OrderFunctionCode17 receive = (OrderFunctionCode17) message;
+ byte[] macBytes = receive.getSrc();
+ String strSrc = ByteUtil.bytesToHexString(macBytes);
+ try {
+ //查找设备
+ Device device = this.deviceService.getUniqueByProperty("macAddress", strSrc);
+ if(device!=null){
+ //是否升级
+ if(device.getIsUpgrade().equals(BooleanEnum.YES.getKey())){
+ device.setIsUpgrade(BooleanEnum.NO.getKey());
+ device.setUpgradeTime(new Date());
+ //升级版本
+ int upgradeVersion = device.getUpgradeVersion();
+ OrderFunctionCode15 model = OrderModel.OrderFunctionCode15(macBytes,upgradeVersion);
+ session.write(model);
+ }
+ //记录参数
+ device.setSdkVersion(receive.getVersion() & 0xff);
+ device.setSdkTime(IfishUtil.StrToDate(receive.getYear()+"-"+(receive.getMonth() & 0xff)+"-"+(receive.getDay() & 0xff)));
+ device.setNumber1(receive.getNumber1());
+ device.setNumber2(receive.getNumber2());
+ device.setNumber3(receive.getNumber3());
+ device.setNumber4(receive.getNumber4());
+ device.setNumber5(receive.getNumber5());
+ this.deviceService.update(device);
+ }
+ } catch (Exception e) {
+ log.warn("save device sdk version17 error:macAddress:{},error msg:{}",strSrc,e.toString());
+ }
+ }
+ }
+
+ /**
+ * 发送数据APP
+ * @param dest 目的地
+ * @param message 发送对象
+ * @return
+ */
+ public void sendToApp(IoSession session,String strDest,Object message) {
+ //回复设备
+ if(isReplay){
+ BackFunctionCode8 model = OrderModel.BackFunctionCode8(strDest);
+ session.write(model);
+ }
+ //转发给APP
+ CopyOnWriteArraySet sessionSet = sessions_sjs.get(strDest);
+ if(sessionSet!=null && sessionSet.size()>0){
+ for (IoSession sj_session : sessionSet) {
+ if(sj_session!=null && sj_session.getRemoteAddress()!=null){
+ sj_session.write(message);
+ }
+ else{
+ sessionSet.remove(sj_session);
+ }
+ }
+ }
+ }
+ /**
+ * 发送数据给设备
+ * @param dest 目的地
+ * @param message 发送对象
+ * @return
+ */
+ public void sendToDevice(IoSession session,String strDest,Object message) {
+ IoSession cz_session = sessions_cz.get(strDest);
+ if(cz_session!=null && cz_session.getRemoteAddress()!=null){
+ cz_session.write(message);
+ }
+ else{
+ //设备离线
+ byte[] bytes = ByteUtil.hexStringToBytes2(strDest);
+ BackFunctionCode0 model = OrderModel.BackFunctionCode0(bytes, bytes ,(byte)0);
+ session.write(model);
+ }
+ }
+ /**
+ * 温度预警推送
+ * @param strSrc
+ * @param title
+ * @param contont
+ */
+ public void pushNotifcation(String strSrc,String title,String contont){
+ try {
+ Device device = deviceService.getUniqueByProperty("macAddress", strSrc);
+ if(device!=null){
+ Integer deviceId = device.getDeviceId();
+ //是否开启预警
+ String onOff = device.getOnOff();
+ if(onOff!=null && onOff.equals(BooleanEnum.YES.getKey())){
+ //绑定设备的用户
+ List list = deviceService.getListByProperty(device.getDeviceId());
+ for (DeviceUser deviceUser : list) {
+ Integer userId = deviceUser.getPriId().getUserId();
+ String showName = deviceUser.getShowName();
+ String timestamp = IfishUtil.format(new Date());
+ String msg = "【"+title+"】你的水族箱“"+showName+"”在"+timestamp+contont;
+ User user = userService.findById(userId);
+ if(user!=null){
+ //云信推送
+ boolean neteaseBln = false;
+ //极光推送
+ boolean jpushIosBln = false;
+ boolean jpushAndroidBln = false;
+ //发送云信消息
+ Map neteaseMap = neteaseIM.sendMsg("ifish", userId.toString(), msg);
+ if(neteaseMap!=null){
+ neteaseBln = neteaseMap.get("code").equals(NeteaseEnum.status200.getKey());
+ }
+ String loginType = user.getLoginType();
+ if(loginType!=null){
+ //推送记录
+ PushList pushList = new PushList();
+ Map map = new HashMap();
+ map.put("device_id", deviceId.toString());
+ map.put("device_name", showName);
+ map.put("timestamp", timestamp);
+ map.put("msg_type", PushTypeEnum.wendu_warn.getKey());
+ //记录推送
+ if(jpushIosBln || jpushAndroidBln || neteaseBln){
+ pushList.setUserId(userId);
+ pushList.setDeviceId(deviceId);
+ pushList.setPhoneType(loginType.toLowerCase());
+ pushList.setShowName(showName);
+ pushList.setPushType(PushTypeEnum.wendu_warn.getKey());
+ pushList.setPushTitle(title);
+ pushList.setPushContext(msg);
+ pushList.setNeteaseStatus(neteaseBln?BooleanEnum.YES.getKey():BooleanEnum.NO.getKey());
+ pushList.setCreateTime(new Date());
+ pushList.setNumber1(device.getNumber1());
+ pushList.setNumber2(device.getNumber2());
+ pushList.setNumber3(device.getNumber3());
+ pushList.setNumber4(device.getNumber4());
+ pushList.setNumber5(device.getNumber5());
+ this.userService.save(pushList);
+ }
+ }
+ }
+ }
+
+ }
+ }
+ } catch (Exception e) {
+ log.warn("pushNotifcation error:macAddress:{},error msg:{}",strSrc,e.toString());
+ }
+ }
+}
diff --git a/src/main/java/com/ifish/socketNew/codeFactory/Context.java b/src/main/java/com/ifish/socketNew/codeFactory/Context.java
new file mode 100644
index 0000000..c18203d
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/codeFactory/Context.java
@@ -0,0 +1,49 @@
+package com.ifish.socketNew.codeFactory;
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+
+import org.apache.mina.core.buffer.IoBuffer;
+
+public class Context {
+ private final CharsetDecoder decoder;
+ private IoBuffer buf;
+ private int matchCount = 0;
+ private int overflowPosition = 0;
+
+ public Context(Charset charset) {
+ decoder = charset.newDecoder();
+ buf = IoBuffer.allocate(100).setAutoExpand(true);
+ //buf.order(ByteOrder.LITTLE_ENDIAN);
+ }
+
+ public CharsetDecoder getDecoder() {
+ return decoder;
+ }
+
+ public IoBuffer getBuffer() {
+ return buf;
+ }
+
+ public int getOverflowPosition() {
+ return overflowPosition;
+ }
+
+ public int getMatchCount() {
+ return matchCount;
+ }
+
+ public void setMatchCount(int matchCount) {
+ this.matchCount = matchCount;
+ }
+
+ public void reset() {
+ overflowPosition = 0;
+ matchCount = 0;
+ decoder.reset();
+ }
+
+ public void append(IoBuffer in) {
+ getBuffer().put(in);
+ }
+}
diff --git a/src/main/java/com/ifish/socketNew/codeFactory/ServerCodecFactory.java b/src/main/java/com/ifish/socketNew/codeFactory/ServerCodecFactory.java
new file mode 100644
index 0000000..3adf571
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/codeFactory/ServerCodecFactory.java
@@ -0,0 +1,23 @@
+package com.ifish.socketNew.codeFactory;
+
+import java.nio.charset.Charset;
+import org.apache.mina.core.session.IoSession;
+import org.apache.mina.filter.codec.ProtocolCodecFactory;
+import org.apache.mina.filter.codec.ProtocolDecoder;
+import org.apache.mina.filter.codec.ProtocolEncoder;
+
+public class ServerCodecFactory implements ProtocolCodecFactory{
+
+ private static final Charset charset = Charset.forName("UTF-8");
+
+ @Override
+ public ProtocolDecoder getDecoder(IoSession session) throws Exception {
+ return new ServerDecode(charset);
+ }
+
+ @Override
+ public ProtocolEncoder getEncoder(IoSession session) throws Exception {
+ return new ServerEncode(charset);
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/codeFactory/ServerDecode.java b/src/main/java/com/ifish/socketNew/codeFactory/ServerDecode.java
new file mode 100644
index 0000000..61c617f
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/codeFactory/ServerDecode.java
@@ -0,0 +1,377 @@
+package com.ifish.socketNew.codeFactory;
+
+import java.nio.charset.Charset;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.mina.core.session.AttributeKey;
+import org.apache.mina.core.session.IoSession;
+import org.apache.mina.filter.codec.ProtocolDecoder;
+import org.apache.mina.filter.codec.ProtocolDecoderOutput;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.ifish.socketNew.model.send.OrderFunctionCode0;
+import com.ifish.socketNew.model.send.OrderFunctionCode1;
+import com.ifish.socketNew.model.send.OrderFunctionCode16;
+import com.ifish.socketNew.model.send.OrderFunctionCode17;
+import com.ifish.socketNew.model.send.OrderFunctionCode5;
+import com.ifish.socketNew.model.send.OrderFunctionCode9;
+
+
+/**
+ * 解码
+ *
+ * @author
+ */
+
+public class ServerDecode implements ProtocolDecoder {
+
+ private final AttributeKey CONTEXT = new AttributeKey(getClass(), "context");
+ private final Charset charset;
+ private static Logger log = LoggerFactory.getLogger(ServerDecode.class);
+
+ public ServerDecode() {
+ this(Charset.defaultCharset());
+ }
+
+ public ServerDecode(Charset charset) {
+ this.charset = charset;
+ }
+
+ private Context getContext(IoSession session) {
+ Context ctx = (Context) session.getAttribute(CONTEXT);
+ if (ctx == null) {
+ ctx = new Context(charset);
+ session.setAttribute(CONTEXT, ctx);
+ }
+ return ctx;
+ }
+
+ @Override
+ public void decode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
+ // 小端模式
+ //in.order(ByteOrder.LITTLE_ENDIAN);
+ // 先获取上次的处理上下文,其中可能有未处理完的数据
+ Context ctx = getContext(session);
+ // 先把当前buffer中的数据追加到Context的buffer当中
+ ctx.append(in);
+
+ IoBuffer buf = ctx.getBuffer();
+ buf.flip();
+ //验证
+ getValid(session, buf, out);
+ }
+
+ /**
+ * 验证协议
+ * @param session
+ * @param buf
+ * @param out
+ */
+ private void getValid(IoSession session, IoBuffer buf, ProtocolDecoderOutput out){
+ int limit = buf.remaining();
+ int check_code = buf.position(1).get() & 0xff;
+ int length = buf.position(14).get() & 0xff;
+ buf.position(0);
+ //计算包长度
+ if (buf.hasRemaining() && limit == length && length >= 17) {
+ //字节转成对象
+ doDecode(buf, out, length ,check_code);
+ }
+ else{
+ log.info("length error:length:【{}】,limit:【{}】,HexDump:【{}】",length,limit,buf.getHexDump());
+ }
+ buf.position(0);
+ buf.clear();
+ }
+
+ /**
+ * 解码成对象
+ * @param buf
+ * @param out
+ * @param length
+ */
+ private void doDecode(IoBuffer buf, ProtocolDecoderOutput out, int length, int check_code) {
+ //字节
+ byte[] bytes = new byte[length];
+ buf.get(bytes);
+ buf.flip();
+ //log.info("length:【{}】;limit:【{}】,HexDump:【{}】",length,buf.limit(),buf.getHexDump());
+ //crc16校验
+ //boolean bln = CRC16.calcCrc16(ByteUtil.hexStringToBytes(hexDump));
+ switch (length) {
+ //长度为22
+ case 22:{
+ //设置报警温度
+ if(check_code==5){
+ functionCode5(buf, out);
+ }
+ //设备报警
+ else if(check_code==9){
+ functionCode9(buf, out);
+ }
+ //模块版本指令
+ else if(check_code==16){
+ functionCode16(buf, out);
+ }
+ else{
+ out.write(bytes);
+ }
+ break;
+ }
+ //长度为24,设备发登录请求
+ case 24:{
+ if(check_code==1){
+ functionCode1(buf, out);
+ }
+ break;
+ }
+ //长度为25,手机发登录请求
+ case 25:{
+ if(check_code==0){
+ functionCode0(buf, out);
+ }
+ break;
+ }
+ //模块版本指令
+ case 42:{
+ if(check_code==17){
+ functionCode17(buf, out);
+ }
+ break;
+ }
+ default:{
+ out.write(bytes);
+ }
+ }
+ }
+
+ /**
+ * 设备登陆服务器
+ * @param buf
+ * @param out
+ */
+ private void functionCode1(IoBuffer buf, ProtocolDecoderOutput out) {
+ OrderFunctionCode1 model = new OrderFunctionCode1();
+ //15字节数据包头
+ model.setType(buf.get());
+ model.setCheck_code(buf.get());
+ byte[] src = model.getSrc();
+ for (int i = 0; i < src.length; i++) {
+ src[i] = buf.get();
+ }
+ model.setSrc(src);
+ byte[] dest = model.getDest();
+ for (int i = 0; i < dest.length; i++) {
+ dest[i] = buf.get();
+ }
+ model.setDest(dest);
+ model.setRemote_len(buf.get());
+ //登陆信息
+ model.setVendor(buf.get());
+ model.setHardware_type(buf.get());
+ model.setVersion(buf.get());
+ byte[] login_ip = model.getLogin_ip();
+ for (int i = 0; i < login_ip.length; i++) {
+ login_ip[i] = buf.get();
+ }
+ model.setLogin_ip(login_ip);
+ byte[] crc16_code = model.getCrc16_code();
+ for (int i = 0; i < crc16_code.length; i++) {
+ crc16_code[i] = buf.get();
+ }
+ out.write(model);
+ }
+
+ /**
+ * APP登陆服务器
+ * @param buf
+ * @param out
+ */
+ private void functionCode0(IoBuffer buf, ProtocolDecoderOutput out) {
+ OrderFunctionCode0 model = new OrderFunctionCode0();
+ //15字节数据包头
+ model.setType(buf.get());
+ model.setCheck_code(buf.get());
+ byte[] src = model.getSrc();
+ for (int i = 0; i < src.length; i++) {
+ src[i] = buf.get();
+ }
+ model.setSrc(src);
+ byte[] dest = model.getDest();
+ for (int i = 0; i < dest.length; i++) {
+ dest[i] = buf.get();
+ }
+ model.setDest(dest);
+ model.setRemote_len(buf.get());
+ //时间
+ model.setLongtime(buf.getLong());
+ byte[] crc16_code = model.getCrc16_code();
+ for (int i = 0; i < crc16_code.length; i++) {
+ crc16_code[i] = buf.get();
+ }
+ out.write(model);
+ }
+
+ /**
+ * 设置报警温度
+ * @param buf
+ * @param out
+ */
+ private void functionCode5(IoBuffer buf, ProtocolDecoderOutput out) {
+ OrderFunctionCode5 model = new OrderFunctionCode5();
+ //15字节数据包头
+ model.setType(buf.get());
+ model.setCheck_code(buf.get());
+ byte[] src = model.getSrc();
+ for (int i = 0; i < src.length; i++) {
+ src[i] = buf.get();
+ }
+ model.setSrc(src);
+ byte[] dest = model.getDest();
+ for (int i = 0; i < dest.length; i++) {
+ dest[i] = buf.get();
+ }
+ model.setDest(dest);
+ model.setRemote_len(buf.get());
+ //开启关闭报警,00关,01开,02设置温度
+ model.setOnoff(buf.get());
+ //低温报警温度
+ model.setLow_wendu(buf.getShort());
+ //高温报警温度
+ model.setHight_wendu(buf.getShort());
+ byte[] crc16_code = model.getCrc16_code();
+ for (int i = 0; i < crc16_code.length; i++) {
+ crc16_code[i] = buf.get();
+ }
+ out.write(model);
+ }
+ /**
+ * 模块版本号
+ * @param buf
+ * @param out
+ */
+ private void functionCode16(IoBuffer buf, ProtocolDecoderOutput out) {
+ OrderFunctionCode16 model = new OrderFunctionCode16();
+ //15字节数据包头
+ model.setType(buf.get());
+ model.setCheck_code(buf.get());
+ byte[] src = model.getSrc();
+ for (int i = 0; i < src.length; i++) {
+ src[i] = buf.get();
+ }
+ model.setSrc(src);
+ byte[] dest = model.getDest();
+ for (int i = 0; i < dest.length; i++) {
+ dest[i] = buf.get();
+ }
+ model.setDest(dest);
+ model.setRemote_len(buf.get());
+ //版本
+ model.setVersion(buf.get());
+ //年
+ model.setYear(buf.getShort());
+ //月
+ model.setMonth(buf.get());
+ //日
+ model.setDay(buf.get());
+ byte[] crc16_code = model.getCrc16_code();
+ for (int i = 0; i < crc16_code.length; i++) {
+ crc16_code[i] = buf.get();
+ }
+ out.write(model);
+ }
+ /**
+ * 模块版本号
+ * @param buf
+ * @param out
+ */
+ private void functionCode17(IoBuffer buf, ProtocolDecoderOutput out) {
+ OrderFunctionCode17 model = new OrderFunctionCode17();
+ //15字节数据包头
+ model.setType(buf.get());
+ model.setCheck_code(buf.get());
+ byte[] src = model.getSrc();
+ for (int i = 0; i < src.length; i++) {
+ src[i] = buf.get();
+ }
+ model.setSrc(src);
+ byte[] dest = model.getDest();
+ for (int i = 0; i < dest.length; i++) {
+ dest[i] = buf.get();
+ }
+ model.setDest(dest);
+ model.setRemote_len(buf.get());
+ //版本
+ model.setVersion(buf.get());
+ //年
+ model.setYear(buf.getShort());
+ //月
+ model.setMonth(buf.get());
+ //日
+ model.setDay(buf.get());
+ //MCU启动次数
+ model.setNumber1(buf.getInt());
+ //模块启动次数
+ model.setNumber2(buf.getInt());
+ //连接路由器次数
+ model.setNumber3(buf.getInt());
+ //成功连接服务器次数
+ model.setNumber4(buf.getInt());
+ //尝试连接服务器次数
+ model.setNumber5(buf.getInt());
+ byte[] crc16_code = model.getCrc16_code();
+ for (int i = 0; i < crc16_code.length; i++) {
+ crc16_code[i] = buf.get();
+ }
+ out.write(model);
+ }
+ /**
+ * 设备温度报警
+ * @param buf
+ * @param out
+ */
+ private void functionCode9(IoBuffer buf, ProtocolDecoderOutput out) {
+ OrderFunctionCode9 model = new OrderFunctionCode9();
+ //15字节数据包头
+ model.setType(buf.get());
+ model.setCheck_code(buf.get());
+ byte[] src = model.getSrc();
+ for (int i = 0; i < src.length; i++) {
+ src[i] = buf.get();
+ }
+ model.setSrc(src);
+ byte[] dest = model.getDest();
+ for (int i = 0; i < dest.length; i++) {
+ dest[i] = buf.get();
+ }
+ model.setDest(dest);
+ model.setRemote_len(buf.get());
+ //报警温度类型,0是低温报警,1是高温报警
+ model.setWarn_type(buf.get());
+ //当前设备温度
+ model.setWendu(buf.getShort());
+ //报警温度
+ model.setWarn_wendu(buf.getShort());
+ byte[] crc16_code = model.getCrc16_code();
+ for (int i = 0; i < crc16_code.length; i++) {
+ crc16_code[i] = buf.get();
+ }
+ out.write(model);
+ }
+
+ @Override
+ public void dispose(IoSession session) throws Exception {
+ Context ctx = (Context) session.getAttribute(CONTEXT);
+ if (ctx != null) {
+ session.removeAttribute(CONTEXT);
+ }
+ }
+
+ @Override
+ public void finishDecode(IoSession session, ProtocolDecoderOutput out)
+ throws Exception {
+
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/codeFactory/ServerEncode.java b/src/main/java/com/ifish/socketNew/codeFactory/ServerEncode.java
new file mode 100644
index 0000000..bebf23a
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/codeFactory/ServerEncode.java
@@ -0,0 +1,134 @@
+package com.ifish.socketNew.codeFactory;
+
+import java.nio.charset.Charset;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.mina.core.session.IoSession;
+import org.apache.mina.filter.codec.ProtocolEncoder;
+import org.apache.mina.filter.codec.ProtocolEncoderOutput;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.ifish.socketNew.model.receive.BackFunctionCode0;
+import com.ifish.socketNew.model.receive.BackFunctionCode1;
+import com.ifish.socketNew.model.receive.BackFunctionCode8;
+import com.ifish.socketNew.model.send.OrderFunctionCode15;
+import com.ifish.socketNew.model.send.OrderFunctionCode5;
+
+/**
+ * 编码
+ *
+ * @author
+ */
+public class ServerEncode implements ProtocolEncoder {
+
+ private final Charset charset;
+ private static Logger log = LoggerFactory.getLogger(ServerEncode.class);
+
+ public ServerEncode() {
+ this(Charset.defaultCharset());
+ }
+
+ public ServerEncode(Charset charset) {
+ this.charset = charset;
+ }
+
+ /* 这个message来自哪? */
+ @Override
+ public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception {
+
+ IoBuffer buffer = IoBuffer.allocate(100).setAutoExpand(true);
+ //修改此缓冲区的字节顺序,小端模式
+ //buffer.order(ByteOrder.LITTLE_ENDIAN);
+ //转发不做处理的数据
+ if (message instanceof byte[]) {
+ byte[] bytes = (byte[]) message;
+ buffer.put(bytes);
+ } //响应心跳
+ else if (message instanceof BackFunctionCode8) {
+ BackFunctionCode8 model = (BackFunctionCode8) message;
+ //15字节数据包头
+ buffer.put(model.getType());
+ buffer.put(model.getCheck_code());
+ buffer.put(model.getSrc());
+ buffer.put(model.getDest());
+ buffer.put(model.getRemote_len());
+ //crc16校验码
+ buffer.put(model.getCrc16_code());
+ } //设置报警温度
+ else if (message instanceof OrderFunctionCode5) {
+ OrderFunctionCode5 model = (OrderFunctionCode5) message;
+ //15字节数据包头
+ buffer.put(model.getType());
+ buffer.put(model.getCheck_code());
+ buffer.put(model.getSrc());
+ buffer.put(model.getDest());
+ buffer.put(model.getRemote_len());
+ //开关
+ buffer.put(model.getOnoff());
+ //温度类型
+ buffer.putShort(model.getLow_wendu());
+ //报警温度
+ buffer.putShort(model.getHight_wendu());
+ //crc16校验码
+ buffer.put(model.getCrc16_code());
+ } //APP登录响应
+ else if (message instanceof BackFunctionCode0) {
+ BackFunctionCode0 model = (BackFunctionCode0) message;
+ //15字节数据包头
+ buffer.put(model.getType());
+ buffer.put(model.getCheck_code());
+ buffer.put(model.getSrc());
+ buffer.put(model.getDest());
+ buffer.put(model.getRemote_len());
+ //状态
+ buffer.put(model.getLogin_status());
+ //时间
+ buffer.putLong(model.getSysTime());
+ //crc16校验码
+ buffer.put(model.getCrc16_code());
+ } //设备登陆返回
+ else if (message instanceof BackFunctionCode1) {
+ BackFunctionCode1 model = (BackFunctionCode1) message;
+ //15字节数据包头
+ buffer.put(model.getType());
+ buffer.put(model.getCheck_code());
+ buffer.put(model.getSrc());
+ buffer.put(model.getDest());
+ buffer.put(model.getRemote_len());
+ //系统时间
+ buffer.put(model.getSysTime());
+ //crc16校验码
+ buffer.put(model.getCrc16_code());
+ } //升级
+ else if (message instanceof OrderFunctionCode15) {
+ OrderFunctionCode15 model = (OrderFunctionCode15) message;
+ //15字节数据包头
+ buffer.put(model.getType());
+ buffer.put(model.getCheck_code());
+ buffer.put(model.getSrc());
+ buffer.put(model.getDest());
+ buffer.put(model.getRemote_len());
+ //版本
+ buffer.put(model.getVersion());
+ //地址
+ buffer.put(model.getAddress());
+ //crc16校验码
+ buffer.put(model.getCrc16_code());
+ }
+ buffer.flip();
+ /*
+ * 编码的方式就是按照短信协议拼 装字符串到IoBuffer 缓冲区,然后调用ProtocolEncoderOutput
+ * 的write()方法输出字节 流
+ */
+ //log.info("limit:【{}】,HexDump:【{}】",buffer.limit(),buffer.getHexDump());
+ out.write(buffer);
+ out.flush();
+ buffer.free();
+ }
+
+ @Override
+ public void dispose(IoSession session) throws Exception {
+
+ }
+}
diff --git a/src/main/java/com/ifish/socketNew/model/HeadModel.java b/src/main/java/com/ifish/socketNew/model/HeadModel.java
new file mode 100644
index 0000000..c5edc89
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/HeadModel.java
@@ -0,0 +1,74 @@
+package com.ifish.socketNew.model;
+
+import java.io.Serializable;
+
+/**
+ * 15字节数据包头+CRC16校验码2字节
+ * @author guogw
+ *
+ */
+public class HeadModel implements Serializable {
+
+ private static final long serialVersionUID = 7351497431272185642L;
+ //发送消息类型,1回复类型,0发送类型
+ private byte type;
+ //功能码
+ private byte check_code;
+ //6位为发送端的mac地址,高16位为0001
+ private byte[] src = new byte[6];
+ //6位为接收端的mac地址,高16位为0001
+ private byte[] dest = new byte[6];
+ //整个包长度
+ private byte remote_len;
+ //CRC16校验码
+ private byte[] crc16_code = new byte[2];
+
+ public byte getType() {
+ return type;
+ }
+
+ public void setType(byte type) {
+ this.type = type;
+ }
+
+ public byte getCheck_code() {
+ return check_code;
+ }
+
+ public void setCheck_code(byte check_code) {
+ this.check_code = check_code;
+ }
+
+ public void setRemote_len(byte remote_len) {
+ this.remote_len = remote_len;
+ }
+
+ public byte[] getSrc() {
+ return src;
+ }
+
+ public void setSrc(byte[] src) {
+ this.src = src;
+ }
+
+ public byte[] getDest() {
+ return dest;
+ }
+
+ public void setDest(byte[] dest) {
+ this.dest = dest;
+ }
+
+ public byte getRemote_len() {
+ return remote_len;
+ }
+
+ public byte[] getCrc16_code() {
+ return crc16_code;
+ }
+
+ public void setCrc16_code(byte[] crc16_code) {
+ this.crc16_code = crc16_code;
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/receive/BackBytes113.java b/src/main/java/com/ifish/socketNew/model/receive/BackBytes113.java
new file mode 100644
index 0000000..d4df5e8
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/receive/BackBytes113.java
@@ -0,0 +1,461 @@
+package com.ifish.socketNew.model.receive;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 查询反馈信息113字节(15字节协议头+98字节结果)
+ * @author guogw
+ *
+ */
+public class BackBytes113 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = 2740442296642889777L;
+ //工作模式
+ private byte work_model;
+ /*********灯和开关(12字节)**********/
+ //灯编号1
+ private byte number1;
+ //灯编号2
+ private byte number2;
+ //灯编号3
+ private byte number3;
+ //灯编号4
+ private byte number4;
+ //灯编号5
+ private byte number5;
+ //灯编号6
+ private byte number6;
+ //灯1开关
+ private byte onoff1;
+ //灯2开关
+ private byte onoff2;
+ //灯3开关
+ private byte onoff3;
+ //灯4开关
+ private byte onoff4;
+ //灯5开关
+ private byte onoff5;
+ //灯6开关
+ private byte onoff6;
+ /*********定时器编号(12字节)灯1对应定时器1-2,灯2对应定时器3-4,灯3对应定时器5-6.....**********/
+ //定时器1编号
+ private byte timer_number1;
+ //定时器2编号
+ private byte timer_number2;
+ //定时器3编号
+ private byte timer_number3;
+ //定时器4编号
+ private byte timer_number4;
+ //定时器5编号
+ private byte timer_number5;
+ //定时器6编号
+ private byte timer_number6;
+ //定时器7编号
+ private byte timer_number7;
+ //定时器8编号
+ private byte timer_number8;
+ //定时器9编号
+ private byte timer_number9;
+ //定时器10编号
+ private byte timer_number10;
+ //定时器11编号
+ private byte timer_number11;
+ //定时器12编号
+ private byte timer_number12;
+ /*********定时器开关(12字节)**********/
+ //定时器1开关
+ private byte timer_onoff1;
+ //定时器2开关
+ private byte timer_onoff2;
+ //定时器3开关
+ private byte timer_onoff3;
+ //定时器4开关
+ private byte timer_onoff4;
+ //定时器5开关
+ private byte timer_onoff5;
+ //定时器6开关
+ private byte timer_onoff6;
+ //定时器7开关
+ private byte timer_onoff7;
+ //定时器8开关
+ private byte timer_onoff8;
+ //定时器9开关
+ private byte timer_onoff9;
+ //定时器10开关
+ private byte timer_onoff10;
+ //定时器11开关
+ private byte timer_onoff11;
+ //定时器12开关
+ private byte timer_onoff12;
+ /*********定时器时间(48字节)**********/
+ //定时器1时间
+ private byte[] timer_time1 = new byte[4];
+ //定时器2时间
+ private byte[] timer_time2 = new byte[4];
+ //定时器3时间
+ private byte[] timer_time3 = new byte[4];
+ //定时器4时间
+ private byte[] timer_time4 = new byte[4];
+ //定时器5时间
+ private byte[] timer_time5 = new byte[4];
+ //定时器6时间
+ private byte[] timer_time6 = new byte[4];
+ //定时器7时间
+ private byte[] timer_time7 = new byte[4];
+ //定时器8时间
+ private byte[] timer_time8 = new byte[4];
+ //定时器9时间
+ private byte[] timer_time9 = new byte[4];
+ //定时器10时间
+ private byte[] timer_time10 = new byte[4];
+ //定时器11时间
+ private byte[] timer_time11 = new byte[4];
+ //定时器12时间
+ private byte[] timer_time12 = new byte[4];
+ //温度
+ private short wendu;
+ //ph
+ private short ph_value;
+ //湿度
+ private short shidu;
+ //报警开关,0关,1开
+ private byte warn_onoff;
+ //最低报警温度
+ private short low_wendu;
+ //最高报警温度
+ private short high_wendu;
+
+ public short getWendu() {
+ return wendu;
+ }
+ public void setWendu(short wendu) {
+ this.wendu = wendu;
+ }
+ public byte getWork_model() {
+ return work_model;
+ }
+ public void setWork_model(byte work_model) {
+ this.work_model = work_model;
+ }
+ public byte getNumber1() {
+ return number1;
+ }
+ public void setNumber1(byte number1) {
+ this.number1 = number1;
+ }
+ public byte getOnoff1() {
+ return onoff1;
+ }
+ public void setOnoff1(byte onoff1) {
+ this.onoff1 = onoff1;
+ }
+ public byte getNumber2() {
+ return number2;
+ }
+ public void setNumber2(byte number2) {
+ this.number2 = number2;
+ }
+ public byte getOnoff2() {
+ return onoff2;
+ }
+ public void setOnoff2(byte onoff2) {
+ this.onoff2 = onoff2;
+ }
+ public byte getNumber3() {
+ return number3;
+ }
+ public void setNumber3(byte number3) {
+ this.number3 = number3;
+ }
+ public byte getOnoff3() {
+ return onoff3;
+ }
+ public void setOnoff3(byte onoff3) {
+ this.onoff3 = onoff3;
+ }
+ public byte getTimer_number1() {
+ return timer_number1;
+ }
+ public void setTimer_number1(byte timer_number1) {
+ this.timer_number1 = timer_number1;
+ }
+ public byte getTimer_number2() {
+ return timer_number2;
+ }
+ public void setTimer_number2(byte timer_number2) {
+ this.timer_number2 = timer_number2;
+ }
+ public byte getTimer_number3() {
+ return timer_number3;
+ }
+ public void setTimer_number3(byte timer_number3) {
+ this.timer_number3 = timer_number3;
+ }
+ public byte getTimer_number4() {
+ return timer_number4;
+ }
+ public void setTimer_number4(byte timer_number4) {
+ this.timer_number4 = timer_number4;
+ }
+ public byte getTimer_number5() {
+ return timer_number5;
+ }
+ public void setTimer_number5(byte timer_number5) {
+ this.timer_number5 = timer_number5;
+ }
+ public byte getTimer_number6() {
+ return timer_number6;
+ }
+ public void setTimer_number6(byte timer_number6) {
+ this.timer_number6 = timer_number6;
+ }
+ public byte getTimer_number7() {
+ return timer_number7;
+ }
+ public void setTimer_number7(byte timer_number7) {
+ this.timer_number7 = timer_number7;
+ }
+ public byte getTimer_number8() {
+ return timer_number8;
+ }
+ public void setTimer_number8(byte timer_number8) {
+ this.timer_number8 = timer_number8;
+ }
+ public byte getTimer_number9() {
+ return timer_number9;
+ }
+ public void setTimer_number9(byte timer_number9) {
+ this.timer_number9 = timer_number9;
+ }
+ public byte[] getTimer_time1() {
+ return timer_time1;
+ }
+ public void setTimer_time1(byte[] timer_time1) {
+ this.timer_time1 = timer_time1;
+ }
+ public byte[] getTimer_time2() {
+ return timer_time2;
+ }
+ public void setTimer_time2(byte[] timer_time2) {
+ this.timer_time2 = timer_time2;
+ }
+ public byte[] getTimer_time3() {
+ return timer_time3;
+ }
+ public void setTimer_time3(byte[] timer_time3) {
+ this.timer_time3 = timer_time3;
+ }
+ public byte[] getTimer_time4() {
+ return timer_time4;
+ }
+ public void setTimer_time4(byte[] timer_time4) {
+ this.timer_time4 = timer_time4;
+ }
+ public byte[] getTimer_time5() {
+ return timer_time5;
+ }
+ public void setTimer_time5(byte[] timer_time5) {
+ this.timer_time5 = timer_time5;
+ }
+ public byte[] getTimer_time6() {
+ return timer_time6;
+ }
+ public void setTimer_time6(byte[] timer_time6) {
+ this.timer_time6 = timer_time6;
+ }
+ public byte[] getTimer_time7() {
+ return timer_time7;
+ }
+ public void setTimer_time7(byte[] timer_time7) {
+ this.timer_time7 = timer_time7;
+ }
+ public byte[] getTimer_time8() {
+ return timer_time8;
+ }
+ public void setTimer_time8(byte[] timer_time8) {
+ this.timer_time8 = timer_time8;
+ }
+ public byte[] getTimer_time9() {
+ return timer_time9;
+ }
+ public void setTimer_time9(byte[] timer_time9) {
+ this.timer_time9 = timer_time9;
+ }
+ public short getPh_value() {
+ return ph_value;
+ }
+ public void setPh_value(short ph_value) {
+ this.ph_value = ph_value;
+ }
+ public short getShidu() {
+ return shidu;
+ }
+ public void setShidu(short shidu) {
+ this.shidu = shidu;
+ }
+ public byte getWarn_onoff() {
+ return warn_onoff;
+ }
+ public void setWarn_onoff(byte warn_onoff) {
+ this.warn_onoff = warn_onoff;
+ }
+ public short getLow_wendu() {
+ return low_wendu;
+ }
+ public void setLow_wendu(short low_wendu) {
+ this.low_wendu = low_wendu;
+ }
+ public short getHigh_wendu() {
+ return high_wendu;
+ }
+ public void setHigh_wendu(short high_wendu) {
+ this.high_wendu = high_wendu;
+ }
+ public byte getOnoff4() {
+ return onoff4;
+ }
+ public void setOnoff4(byte onoff4) {
+ this.onoff4 = onoff4;
+ }
+ public byte getOnoff5() {
+ return onoff5;
+ }
+ public void setOnoff5(byte onoff5) {
+ this.onoff5 = onoff5;
+ }
+ public byte getTimer_number10() {
+ return timer_number10;
+ }
+ public void setTimer_number10(byte timer_number10) {
+ this.timer_number10 = timer_number10;
+ }
+ public byte[] getTimer_time10() {
+ return timer_time10;
+ }
+ public void setTimer_time10(byte[] timer_time10) {
+ this.timer_time10 = timer_time10;
+ }
+ public byte getNumber4() {
+ return number4;
+ }
+ public void setNumber4(byte number4) {
+ this.number4 = number4;
+ }
+ public byte getNumber5() {
+ return number5;
+ }
+ public void setNumber5(byte number5) {
+ this.number5 = number5;
+ }
+ public byte getTimer_onoff1() {
+ return timer_onoff1;
+ }
+ public void setTimer_onoff1(byte timer_onoff1) {
+ this.timer_onoff1 = timer_onoff1;
+ }
+ public byte getTimer_onoff2() {
+ return timer_onoff2;
+ }
+ public void setTimer_onoff2(byte timer_onoff2) {
+ this.timer_onoff2 = timer_onoff2;
+ }
+ public byte getTimer_onoff3() {
+ return timer_onoff3;
+ }
+ public void setTimer_onoff3(byte timer_onoff3) {
+ this.timer_onoff3 = timer_onoff3;
+ }
+ public byte getTimer_onoff4() {
+ return timer_onoff4;
+ }
+ public void setTimer_onoff4(byte timer_onoff4) {
+ this.timer_onoff4 = timer_onoff4;
+ }
+ public byte getTimer_onoff5() {
+ return timer_onoff5;
+ }
+ public void setTimer_onoff5(byte timer_onoff5) {
+ this.timer_onoff5 = timer_onoff5;
+ }
+ public byte getTimer_onoff6() {
+ return timer_onoff6;
+ }
+ public void setTimer_onoff6(byte timer_onoff6) {
+ this.timer_onoff6 = timer_onoff6;
+ }
+ public byte getTimer_onoff7() {
+ return timer_onoff7;
+ }
+ public void setTimer_onoff7(byte timer_onoff7) {
+ this.timer_onoff7 = timer_onoff7;
+ }
+ public byte getTimer_onoff8() {
+ return timer_onoff8;
+ }
+ public void setTimer_onoff8(byte timer_onoff8) {
+ this.timer_onoff8 = timer_onoff8;
+ }
+ public byte getTimer_onoff9() {
+ return timer_onoff9;
+ }
+ public void setTimer_onoff9(byte timer_onoff9) {
+ this.timer_onoff9 = timer_onoff9;
+ }
+ public byte getTimer_onoff10() {
+ return timer_onoff10;
+ }
+ public void setTimer_onoff10(byte timer_onoff10) {
+ this.timer_onoff10 = timer_onoff10;
+ }
+ public byte getNumber6() {
+ return number6;
+ }
+ public void setNumber6(byte number6) {
+ this.number6 = number6;
+ }
+ public byte getOnoff6() {
+ return onoff6;
+ }
+ public void setOnoff6(byte onoff6) {
+ this.onoff6 = onoff6;
+ }
+ public byte getTimer_number11() {
+ return timer_number11;
+ }
+ public void setTimer_number11(byte timer_number11) {
+ this.timer_number11 = timer_number11;
+ }
+ public byte getTimer_number12() {
+ return timer_number12;
+ }
+ public void setTimer_number12(byte timer_number12) {
+ this.timer_number12 = timer_number12;
+ }
+ public byte getTimer_onoff11() {
+ return timer_onoff11;
+ }
+ public void setTimer_onoff11(byte timer_onoff11) {
+ this.timer_onoff11 = timer_onoff11;
+ }
+ public byte getTimer_onoff12() {
+ return timer_onoff12;
+ }
+ public void setTimer_onoff12(byte timer_onoff12) {
+ this.timer_onoff12 = timer_onoff12;
+ }
+ public byte[] getTimer_time11() {
+ return timer_time11;
+ }
+ public void setTimer_time11(byte[] timer_time11) {
+ this.timer_time11 = timer_time11;
+ }
+ public byte[] getTimer_time12() {
+ return timer_time12;
+ }
+ public void setTimer_time12(byte[] timer_time12) {
+ this.timer_time12 = timer_time12;
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/receive/BackBytes28.java b/src/main/java/com/ifish/socketNew/model/receive/BackBytes28.java
new file mode 100644
index 0000000..8092980
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/receive/BackBytes28.java
@@ -0,0 +1,73 @@
+package com.ifish.socketNew.model.receive;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 查询反馈信息28字节(15字节协议头+13字节结果)
+ * @author guogw
+ *
+ */
+public class BackBytes28 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = 2740442296642889777L;
+ //温度
+ private short wendu;
+ //ph
+ private short ph_value;
+ //背光亮度
+ private byte lightness;
+ //湿度
+ private byte shidu;
+ //报警开关,0关,1开
+ private byte warn_onoff;
+ //最低报警温度
+ private short low_wendu;
+ //最高报警温度
+ private short high_wendu;
+ public short getWendu() {
+ return wendu;
+ }
+ public void setWendu(short wendu) {
+ this.wendu = wendu;
+ }
+ public short getPh_value() {
+ return ph_value;
+ }
+ public void setPh_value(short ph_value) {
+ this.ph_value = ph_value;
+ }
+ public byte getLightness() {
+ return lightness;
+ }
+ public void setLightness(byte lightness) {
+ this.lightness = lightness;
+ }
+ public byte getShidu() {
+ return shidu;
+ }
+ public void setShidu(byte shidu) {
+ this.shidu = shidu;
+ }
+ public byte getWarn_onoff() {
+ return warn_onoff;
+ }
+ public void setWarn_onoff(byte warn_onoff) {
+ this.warn_onoff = warn_onoff;
+ }
+ public short getLow_wendu() {
+ return low_wendu;
+ }
+ public void setLow_wendu(short low_wendu) {
+ this.low_wendu = low_wendu;
+ }
+ public short getHigh_wendu() {
+ return high_wendu;
+ }
+ public void setHigh_wendu(short high_wendu) {
+ this.high_wendu = high_wendu;
+ }
+
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/receive/BackBytes57.java b/src/main/java/com/ifish/socketNew/model/receive/BackBytes57.java
new file mode 100644
index 0000000..ff19e7e
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/receive/BackBytes57.java
@@ -0,0 +1,213 @@
+package com.ifish.socketNew.model.receive;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 查询反馈信息57字节(15字节协议头+42字节结果)
+ * @author guogw
+ *
+ */
+public class BackBytes57 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = 2740442296642889777L;
+ //工作模式
+ private byte work_model;
+ /*********灯和开关(4字节)**********/
+ //灯编号1
+ private byte number1;
+ //灯编号2
+ private byte number2;
+ //灯1开关
+ private byte onoff1;
+ //灯2开关
+ private byte onoff2;
+ /*********定时器编号(4字节)灯1对应定时器1-2,灯2对应定时器3-4.....**********/
+ //定时器1编号
+ private byte timer_number1;
+ //定时器2编号
+ private byte timer_number2;
+ //定时器3编号
+ private byte timer_number3;
+ //定时器4编号
+ private byte timer_number4;
+ /*********定时器开关(4字节)**********/
+ //定时器1开关
+ private byte timer_onoff1;
+ //定时器2开关
+ private byte timer_onoff2;
+ //定时器3开关
+ private byte timer_onoff3;
+ //定时器4开关
+ private byte timer_onoff4;
+ /*********定时器时间(24字节)**********/
+ //定时器1时间
+ private byte[] timer_time1 = new byte[4];
+ //定时器2时间
+ private byte[] timer_time2 = new byte[4];
+ //定时器3时间
+ private byte[] timer_time3 = new byte[4];
+ //定时器4时间
+ private byte[] timer_time4 = new byte[4];
+ //温度
+ private short wendu;
+ //ph
+ private short ph_value;
+ //背光亮度
+ private byte lightness;
+ //柜灯
+ private byte sarkLamp;
+ //报警开关,0关,1开
+ private byte warn_onoff;
+ //最低报警温度
+ private short low_wendu;
+ //最高报警温度
+ private short high_wendu;
+
+ public short getWendu() {
+ return wendu;
+ }
+ public void setWendu(short wendu) {
+ this.wendu = wendu;
+ }
+ public byte getWork_model() {
+ return work_model;
+ }
+ public void setWork_model(byte work_model) {
+ this.work_model = work_model;
+ }
+ public byte getNumber1() {
+ return number1;
+ }
+ public void setNumber1(byte number1) {
+ this.number1 = number1;
+ }
+ public byte getOnoff1() {
+ return onoff1;
+ }
+ public void setOnoff1(byte onoff1) {
+ this.onoff1 = onoff1;
+ }
+ public byte getNumber2() {
+ return number2;
+ }
+ public void setNumber2(byte number2) {
+ this.number2 = number2;
+ }
+ public byte getOnoff2() {
+ return onoff2;
+ }
+ public void setOnoff2(byte onoff2) {
+ this.onoff2 = onoff2;
+ }
+ public byte getTimer_number1() {
+ return timer_number1;
+ }
+ public void setTimer_number1(byte timer_number1) {
+ this.timer_number1 = timer_number1;
+ }
+ public byte getTimer_number2() {
+ return timer_number2;
+ }
+ public void setTimer_number2(byte timer_number2) {
+ this.timer_number2 = timer_number2;
+ }
+ public byte getTimer_number3() {
+ return timer_number3;
+ }
+ public void setTimer_number3(byte timer_number3) {
+ this.timer_number3 = timer_number3;
+ }
+ public byte getTimer_number4() {
+ return timer_number4;
+ }
+ public void setTimer_number4(byte timer_number4) {
+ this.timer_number4 = timer_number4;
+ }
+ public byte[] getTimer_time1() {
+ return timer_time1;
+ }
+ public void setTimer_time1(byte[] timer_time1) {
+ this.timer_time1 = timer_time1;
+ }
+ public byte[] getTimer_time2() {
+ return timer_time2;
+ }
+ public void setTimer_time2(byte[] timer_time2) {
+ this.timer_time2 = timer_time2;
+ }
+ public byte[] getTimer_time3() {
+ return timer_time3;
+ }
+ public void setTimer_time3(byte[] timer_time3) {
+ this.timer_time3 = timer_time3;
+ }
+ public byte[] getTimer_time4() {
+ return timer_time4;
+ }
+ public void setTimer_time4(byte[] timer_time4) {
+ this.timer_time4 = timer_time4;
+ }
+ public short getPh_value() {
+ return ph_value;
+ }
+ public void setPh_value(short ph_value) {
+ this.ph_value = ph_value;
+ }
+ public byte getLightness() {
+ return lightness;
+ }
+ public void setLightness(byte lightness) {
+ this.lightness = lightness;
+ }
+ public byte getSarkLamp() {
+ return sarkLamp;
+ }
+ public void setSarkLamp(byte sarkLamp) {
+ this.sarkLamp = sarkLamp;
+ }
+ public byte getWarn_onoff() {
+ return warn_onoff;
+ }
+ public void setWarn_onoff(byte warn_onoff) {
+ this.warn_onoff = warn_onoff;
+ }
+ public short getLow_wendu() {
+ return low_wendu;
+ }
+ public void setLow_wendu(short low_wendu) {
+ this.low_wendu = low_wendu;
+ }
+ public short getHigh_wendu() {
+ return high_wendu;
+ }
+ public void setHigh_wendu(short high_wendu) {
+ this.high_wendu = high_wendu;
+ }
+ public byte getTimer_onoff1() {
+ return timer_onoff1;
+ }
+ public void setTimer_onoff1(byte timer_onoff1) {
+ this.timer_onoff1 = timer_onoff1;
+ }
+ public byte getTimer_onoff2() {
+ return timer_onoff2;
+ }
+ public void setTimer_onoff2(byte timer_onoff2) {
+ this.timer_onoff2 = timer_onoff2;
+ }
+ public byte getTimer_onoff3() {
+ return timer_onoff3;
+ }
+ public void setTimer_onoff3(byte timer_onoff3) {
+ this.timer_onoff3 = timer_onoff3;
+ }
+ public byte getTimer_onoff4() {
+ return timer_onoff4;
+ }
+ public void setTimer_onoff4(byte timer_onoff4) {
+ this.timer_onoff4 = timer_onoff4;
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/receive/BackBytes71.java b/src/main/java/com/ifish/socketNew/model/receive/BackBytes71.java
new file mode 100644
index 0000000..69e9ec3
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/receive/BackBytes71.java
@@ -0,0 +1,277 @@
+package com.ifish.socketNew.model.receive;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 查询反馈信息71字节(15字节协议头+56字节结果)
+ * @author guogw
+ *
+ */
+public class BackBytes71 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = 2740442296642889777L;
+ //工作模式
+ private byte work_model;
+ /*********灯和开关(6字节)**********/
+ //灯编号1
+ private byte number1;
+ //灯编号2
+ private byte number2;
+ //灯编号3
+ private byte number3;
+ //灯1开关
+ private byte onoff1;
+ //灯2开关
+ private byte onoff2;
+ //灯3开关
+ private byte onoff3;
+ /*********定时器编号(6字节)灯1对应定时器1-2,灯2对应定时器3-4,灯3对应定时器5-6.....**********/
+ //定时器1编号
+ private byte timer_number1;
+ //定时器2编号
+ private byte timer_number2;
+ //定时器3编号
+ private byte timer_number3;
+ //定时器4编号
+ private byte timer_number4;
+ //定时器5编号
+ private byte timer_number5;
+ //定时器6编号
+ private byte timer_number6;
+ /*********定时器开关(6字节)**********/
+ //定时器1开关
+ private byte timer_onoff1;
+ //定时器2开关
+ private byte timer_onoff2;
+ //定时器3开关
+ private byte timer_onoff3;
+ //定时器4开关
+ private byte timer_onoff4;
+ //定时器5开关
+ private byte timer_onoff5;
+ //定时器6开关
+ private byte timer_onoff6;
+ /*********定时器时间(24字节)**********/
+ //定时器1时间
+ private byte[] timer_time1 = new byte[4];
+ //定时器2时间
+ private byte[] timer_time2 = new byte[4];
+ //定时器3时间
+ private byte[] timer_time3 = new byte[4];
+ //定时器4时间
+ private byte[] timer_time4 = new byte[4];
+ //定时器5时间
+ private byte[] timer_time5 = new byte[4];
+ //定时器6时间
+ private byte[] timer_time6 = new byte[4];
+ //温度
+ private short wendu;
+ //ph
+ private short ph_value;
+ //背光亮度
+ private byte lightness;
+ //柜灯
+ private byte sarkLamp;
+ //报警开关,0关,1开
+ private byte warn_onoff;
+ //最低报警温度
+ private short low_wendu;
+ //最高报警温度
+ private short high_wendu;
+
+ public short getWendu() {
+ return wendu;
+ }
+ public void setWendu(short wendu) {
+ this.wendu = wendu;
+ }
+ public byte getWork_model() {
+ return work_model;
+ }
+ public void setWork_model(byte work_model) {
+ this.work_model = work_model;
+ }
+ public byte getNumber1() {
+ return number1;
+ }
+ public void setNumber1(byte number1) {
+ this.number1 = number1;
+ }
+ public byte getOnoff1() {
+ return onoff1;
+ }
+ public void setOnoff1(byte onoff1) {
+ this.onoff1 = onoff1;
+ }
+ public byte getNumber2() {
+ return number2;
+ }
+ public void setNumber2(byte number2) {
+ this.number2 = number2;
+ }
+ public byte getOnoff2() {
+ return onoff2;
+ }
+ public void setOnoff2(byte onoff2) {
+ this.onoff2 = onoff2;
+ }
+ public byte getNumber3() {
+ return number3;
+ }
+ public void setNumber3(byte number3) {
+ this.number3 = number3;
+ }
+ public byte getOnoff3() {
+ return onoff3;
+ }
+ public void setOnoff3(byte onoff3) {
+ this.onoff3 = onoff3;
+ }
+ public byte getTimer_number1() {
+ return timer_number1;
+ }
+ public void setTimer_number1(byte timer_number1) {
+ this.timer_number1 = timer_number1;
+ }
+ public byte getTimer_number2() {
+ return timer_number2;
+ }
+ public void setTimer_number2(byte timer_number2) {
+ this.timer_number2 = timer_number2;
+ }
+ public byte getTimer_number3() {
+ return timer_number3;
+ }
+ public void setTimer_number3(byte timer_number3) {
+ this.timer_number3 = timer_number3;
+ }
+ public byte getTimer_number4() {
+ return timer_number4;
+ }
+ public void setTimer_number4(byte timer_number4) {
+ this.timer_number4 = timer_number4;
+ }
+ public byte getTimer_number5() {
+ return timer_number5;
+ }
+ public void setTimer_number5(byte timer_number5) {
+ this.timer_number5 = timer_number5;
+ }
+ public byte getTimer_number6() {
+ return timer_number6;
+ }
+ public void setTimer_number6(byte timer_number6) {
+ this.timer_number6 = timer_number6;
+ }
+ public byte[] getTimer_time1() {
+ return timer_time1;
+ }
+ public void setTimer_time1(byte[] timer_time1) {
+ this.timer_time1 = timer_time1;
+ }
+ public byte[] getTimer_time2() {
+ return timer_time2;
+ }
+ public void setTimer_time2(byte[] timer_time2) {
+ this.timer_time2 = timer_time2;
+ }
+ public byte[] getTimer_time3() {
+ return timer_time3;
+ }
+ public void setTimer_time3(byte[] timer_time3) {
+ this.timer_time3 = timer_time3;
+ }
+ public byte[] getTimer_time4() {
+ return timer_time4;
+ }
+ public void setTimer_time4(byte[] timer_time4) {
+ this.timer_time4 = timer_time4;
+ }
+ public byte[] getTimer_time5() {
+ return timer_time5;
+ }
+ public void setTimer_time5(byte[] timer_time5) {
+ this.timer_time5 = timer_time5;
+ }
+ public byte[] getTimer_time6() {
+ return timer_time6;
+ }
+ public void setTimer_time6(byte[] timer_time6) {
+ this.timer_time6 = timer_time6;
+ }
+ public short getPh_value() {
+ return ph_value;
+ }
+ public void setPh_value(short ph_value) {
+ this.ph_value = ph_value;
+ }
+ public byte getLightness() {
+ return lightness;
+ }
+ public void setLightness(byte lightness) {
+ this.lightness = lightness;
+ }
+ public byte getSarkLamp() {
+ return sarkLamp;
+ }
+ public void setSarkLamp(byte sarkLamp) {
+ this.sarkLamp = sarkLamp;
+ }
+ public byte getWarn_onoff() {
+ return warn_onoff;
+ }
+ public void setWarn_onoff(byte warn_onoff) {
+ this.warn_onoff = warn_onoff;
+ }
+ public short getLow_wendu() {
+ return low_wendu;
+ }
+ public void setLow_wendu(short low_wendu) {
+ this.low_wendu = low_wendu;
+ }
+ public short getHigh_wendu() {
+ return high_wendu;
+ }
+ public void setHigh_wendu(short high_wendu) {
+ this.high_wendu = high_wendu;
+ }
+ public byte getTimer_onoff1() {
+ return timer_onoff1;
+ }
+ public void setTimer_onoff1(byte timer_onoff1) {
+ this.timer_onoff1 = timer_onoff1;
+ }
+ public byte getTimer_onoff2() {
+ return timer_onoff2;
+ }
+ public void setTimer_onoff2(byte timer_onoff2) {
+ this.timer_onoff2 = timer_onoff2;
+ }
+ public byte getTimer_onoff3() {
+ return timer_onoff3;
+ }
+ public void setTimer_onoff3(byte timer_onoff3) {
+ this.timer_onoff3 = timer_onoff3;
+ }
+ public byte getTimer_onoff4() {
+ return timer_onoff4;
+ }
+ public void setTimer_onoff4(byte timer_onoff4) {
+ this.timer_onoff4 = timer_onoff4;
+ }
+ public byte getTimer_onoff5() {
+ return timer_onoff5;
+ }
+ public void setTimer_onoff5(byte timer_onoff5) {
+ this.timer_onoff5 = timer_onoff5;
+ }
+ public byte getTimer_onoff6() {
+ return timer_onoff6;
+ }
+ public void setTimer_onoff6(byte timer_onoff6) {
+ this.timer_onoff6 = timer_onoff6;
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/receive/BackBytes73.java b/src/main/java/com/ifish/socketNew/model/receive/BackBytes73.java
new file mode 100644
index 0000000..a00695e
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/receive/BackBytes73.java
@@ -0,0 +1,300 @@
+package com.ifish.socketNew.model.receive;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 查询反馈信息73字节(15字节协议头+58字节结果)
+ * @author guogw
+ *
+ */
+public class BackBytes73 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = -279167235456861496L;
+ /*********灯和开关(10字节)**********/
+ //灯编号1
+ private byte number1;
+ //灯编号2
+ private byte number2;
+ //灯编号3
+ private byte number3;
+ //灯编号4
+ private byte number4;
+ //灯编号5
+ private byte number5;
+ //灯1开关
+ private byte onoff1;
+ //灯2开关
+ private byte onoff2;
+ //灯3开关
+ private byte onoff3;
+ //灯4开关
+ private byte onoff4;
+ //灯5开关
+ private byte onoff5;
+ /*********定时器编号(6字节)灯1对应定时器1-2,灯2对应定时器3-4,灯3对应定时器5-6.....**********/
+ //定时器1编号
+ private byte timer_number1;
+ //定时器2编号
+ private byte timer_number2;
+ //定时器3编号
+ private byte timer_number3;
+ //定时器4编号
+ private byte timer_number4;
+ //定时器5编号
+ private byte timer_number5;
+ //定时器6编号
+ private byte timer_number6;
+ /*********定时器开关(6字节)**********/
+ //定时器1开关
+ private byte timer_onoff1;
+ //定时器2开关
+ private byte timer_onoff2;
+ //定时器3开关
+ private byte timer_onoff3;
+ //定时器4开关
+ private byte timer_onoff4;
+ //定时器5开关
+ private byte timer_onoff5;
+ //定时器6开关
+ private byte timer_onoff6;
+ /*********定时器时间(24字节)**********/
+ //定时器1时间
+ private byte[] timer_time1 = new byte[4];
+ //定时器2时间
+ private byte[] timer_time2 = new byte[4];
+ //定时器3时间
+ private byte[] timer_time3 = new byte[4];
+ //定时器4时间
+ private byte[] timer_time4 = new byte[4];
+ //定时器5时间
+ private byte[] timer_time5 = new byte[4];
+ //定时器6时间
+ private byte[] timer_time6 = new byte[4];
+ //温度
+ private short wendu;
+ //加热温度
+ private short heatWendu;
+ //加热状态
+ private byte heatStatus;
+ //柜灯
+ private byte sarkLamp;
+ //报警开关,0关,1开
+ private byte warn_onoff;
+ //最低报警温度
+ private short low_wendu;
+ //最高报警温度
+ private short high_wendu;
+
+ public byte getNumber1() {
+ return number1;
+ }
+ public void setNumber1(byte number1) {
+ this.number1 = number1;
+ }
+ public byte getNumber2() {
+ return number2;
+ }
+ public void setNumber2(byte number2) {
+ this.number2 = number2;
+ }
+ public byte getNumber3() {
+ return number3;
+ }
+ public void setNumber3(byte number3) {
+ this.number3 = number3;
+ }
+ public byte getNumber4() {
+ return number4;
+ }
+ public void setNumber4(byte number4) {
+ this.number4 = number4;
+ }
+ public byte getNumber5() {
+ return number5;
+ }
+ public void setNumber5(byte number5) {
+ this.number5 = number5;
+ }
+ public byte getOnoff1() {
+ return onoff1;
+ }
+ public void setOnoff1(byte onoff1) {
+ this.onoff1 = onoff1;
+ }
+ public byte getOnoff2() {
+ return onoff2;
+ }
+ public void setOnoff2(byte onoff2) {
+ this.onoff2 = onoff2;
+ }
+ public byte getOnoff3() {
+ return onoff3;
+ }
+ public void setOnoff3(byte onoff3) {
+ this.onoff3 = onoff3;
+ }
+ public byte getOnoff4() {
+ return onoff4;
+ }
+ public void setOnoff4(byte onoff4) {
+ this.onoff4 = onoff4;
+ }
+ public byte getOnoff5() {
+ return onoff5;
+ }
+ public void setOnoff5(byte onoff5) {
+ this.onoff5 = onoff5;
+ }
+ public byte getTimer_number1() {
+ return timer_number1;
+ }
+ public void setTimer_number1(byte timer_number1) {
+ this.timer_number1 = timer_number1;
+ }
+ public byte getTimer_number2() {
+ return timer_number2;
+ }
+ public void setTimer_number2(byte timer_number2) {
+ this.timer_number2 = timer_number2;
+ }
+ public byte getTimer_number3() {
+ return timer_number3;
+ }
+ public void setTimer_number3(byte timer_number3) {
+ this.timer_number3 = timer_number3;
+ }
+ public byte getTimer_number4() {
+ return timer_number4;
+ }
+ public void setTimer_number4(byte timer_number4) {
+ this.timer_number4 = timer_number4;
+ }
+ public byte getTimer_number5() {
+ return timer_number5;
+ }
+ public void setTimer_number5(byte timer_number5) {
+ this.timer_number5 = timer_number5;
+ }
+ public byte getTimer_number6() {
+ return timer_number6;
+ }
+ public void setTimer_number6(byte timer_number6) {
+ this.timer_number6 = timer_number6;
+ }
+ public byte getTimer_onoff1() {
+ return timer_onoff1;
+ }
+ public void setTimer_onoff1(byte timer_onoff1) {
+ this.timer_onoff1 = timer_onoff1;
+ }
+ public byte getTimer_onoff2() {
+ return timer_onoff2;
+ }
+ public void setTimer_onoff2(byte timer_onoff2) {
+ this.timer_onoff2 = timer_onoff2;
+ }
+ public byte getTimer_onoff3() {
+ return timer_onoff3;
+ }
+ public void setTimer_onoff3(byte timer_onoff3) {
+ this.timer_onoff3 = timer_onoff3;
+ }
+ public byte getTimer_onoff4() {
+ return timer_onoff4;
+ }
+ public void setTimer_onoff4(byte timer_onoff4) {
+ this.timer_onoff4 = timer_onoff4;
+ }
+ public byte getTimer_onoff5() {
+ return timer_onoff5;
+ }
+ public void setTimer_onoff5(byte timer_onoff5) {
+ this.timer_onoff5 = timer_onoff5;
+ }
+ public byte getTimer_onoff6() {
+ return timer_onoff6;
+ }
+ public void setTimer_onoff6(byte timer_onoff6) {
+ this.timer_onoff6 = timer_onoff6;
+ }
+ public byte[] getTimer_time1() {
+ return timer_time1;
+ }
+ public void setTimer_time1(byte[] timer_time1) {
+ this.timer_time1 = timer_time1;
+ }
+ public byte[] getTimer_time2() {
+ return timer_time2;
+ }
+ public void setTimer_time2(byte[] timer_time2) {
+ this.timer_time2 = timer_time2;
+ }
+ public byte[] getTimer_time3() {
+ return timer_time3;
+ }
+ public void setTimer_time3(byte[] timer_time3) {
+ this.timer_time3 = timer_time3;
+ }
+ public byte[] getTimer_time4() {
+ return timer_time4;
+ }
+ public void setTimer_time4(byte[] timer_time4) {
+ this.timer_time4 = timer_time4;
+ }
+ public byte[] getTimer_time5() {
+ return timer_time5;
+ }
+ public void setTimer_time5(byte[] timer_time5) {
+ this.timer_time5 = timer_time5;
+ }
+ public byte[] getTimer_time6() {
+ return timer_time6;
+ }
+ public void setTimer_time6(byte[] timer_time6) {
+ this.timer_time6 = timer_time6;
+ }
+ public short getWendu() {
+ return wendu;
+ }
+ public void setWendu(short wendu) {
+ this.wendu = wendu;
+ }
+ public short getHeatWendu() {
+ return heatWendu;
+ }
+ public void setHeatWendu(short heatWendu) {
+ this.heatWendu = heatWendu;
+ }
+ public byte getHeatStatus() {
+ return heatStatus;
+ }
+ public void setHeatStatus(byte heatStatus) {
+ this.heatStatus = heatStatus;
+ }
+ public byte getSarkLamp() {
+ return sarkLamp;
+ }
+ public void setSarkLamp(byte sarkLamp) {
+ this.sarkLamp = sarkLamp;
+ }
+ public byte getWarn_onoff() {
+ return warn_onoff;
+ }
+ public void setWarn_onoff(byte warn_onoff) {
+ this.warn_onoff = warn_onoff;
+ }
+ public short getLow_wendu() {
+ return low_wendu;
+ }
+ public void setLow_wendu(short low_wendu) {
+ this.low_wendu = low_wendu;
+ }
+ public short getHigh_wendu() {
+ return high_wendu;
+ }
+ public void setHigh_wendu(short high_wendu) {
+ this.high_wendu = high_wendu;
+ }
+}
diff --git a/src/main/java/com/ifish/socketNew/model/receive/BackBytes84.java b/src/main/java/com/ifish/socketNew/model/receive/BackBytes84.java
new file mode 100644
index 0000000..5bc4e17
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/receive/BackBytes84.java
@@ -0,0 +1,657 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.ifish.socketNew.model.receive;
+
+import com.ifish.socketNew.model.HeadModel;
+import java.io.Serializable;
+
+/**
+ *
+ * @author Administrator
+ */
+public class BackBytes84 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = 2740442296642889778L;
+
+ /**
+ * *******灯和开关(4字节)*********
+ */
+ //灯编号1
+ private byte number1;
+ //灯编号2
+ private byte number2;
+ //灯编号3
+ private byte number3;
+ //灯编号4
+ private byte number4;
+ //灯1开关
+ private byte onoff1;
+ //灯2开关
+ private byte onoff2;
+ //灯3开关
+ private byte onoff3;
+ //灯4开关
+ private byte onoff4;
+
+ /**
+ * *******定时器编号(4字节)灯1对应定时器1-2,灯2对应定时器3-4.....*********
+ */
+ //定时器1编号
+ private byte timer_number1;
+ //定时器2编号
+ private byte timer_number2;
+ //定时器3编号
+ private byte timer_number3;
+ //定时器4编号
+ private byte timer_number4;
+ //定时器5编号
+ private byte timer_number5;
+ //定时器6编号
+ private byte timer_number6;
+ //定时器7编号
+ private byte timer_number7;
+ //定时器8编号
+ private byte timer_number8;
+ /**
+ * *******定时器开关(4字节)*********
+ */
+ //定时器1开关
+ private byte timer_onoff1;
+ //定时器2开关
+ private byte timer_onoff2;
+ //定时器3开关
+ private byte timer_onoff3;
+ //定时器4开关
+ private byte timer_onoff4;
+ //定时器5开关
+ private byte timer_onoff5;
+ //定时器6开关
+ private byte timer_onoff6;
+ //定时器7开关
+ private byte timer_onoff7;
+ //定时器8开关
+ private byte timer_onoff8;
+ /**
+ * *******定时器时间(24字节)*********
+ */
+ //定时器1时间
+ private byte[] timer_time1 = new byte[4];
+ //定时器2时间
+ private byte[] timer_time2 = new byte[4];
+ //定时器3时间
+ private byte[] timer_time3 = new byte[4];
+ //定时器4时间
+ private byte[] timer_time4 = new byte[4];
+ //定时器5时间
+ private byte[] timer_time5 = new byte[4];
+ //定时器6时间
+ private byte[] timer_time6 = new byte[4];
+ //定时器7时间
+ private byte[] timer_time7 = new byte[4];
+ //定时器8时间
+ private byte[] timer_time8 = new byte[4];
+ //温度
+ private short wendu;
+ //加热温度
+ private short heatWendu;
+ //加热状态
+ private byte heatStatus;
+ //柜灯
+ private byte sarkLamp;
+ //报警开关,0关,1开
+ private byte warn_onoff;
+ //最低报警温度
+ private short low_wendu;
+ //最高报警温度
+ private short high_wendu;
+
+ /**
+ * @return the number1
+ */
+ public byte getNumber1() {
+ return number1;
+ }
+
+ /**
+ * @param number1 the number1 to set
+ */
+ public void setNumber1(byte number1) {
+ this.number1 = number1;
+ }
+
+ /**
+ * @return the number2
+ */
+ public byte getNumber2() {
+ return number2;
+ }
+
+ /**
+ * @param number2 the number2 to set
+ */
+ public void setNumber2(byte number2) {
+ this.number2 = number2;
+ }
+
+ /**
+ * @return the number3
+ */
+ public byte getNumber3() {
+ return number3;
+ }
+
+ /**
+ * @param number3 the number3 to set
+ */
+ public void setNumber3(byte number3) {
+ this.number3 = number3;
+ }
+
+ /**
+ * @return the number4
+ */
+ public byte getNumber4() {
+ return number4;
+ }
+
+ /**
+ * @param number4 the number4 to set
+ */
+ public void setNumber4(byte number4) {
+ this.number4 = number4;
+ }
+
+ /**
+ * @return the onoff1
+ */
+ public byte getOnoff1() {
+ return onoff1;
+ }
+
+ /**
+ * @param onoff1 the onoff1 to set
+ */
+ public void setOnoff1(byte onoff1) {
+ this.onoff1 = onoff1;
+ }
+
+ /**
+ * @return the onoff2
+ */
+ public byte getOnoff2() {
+ return onoff2;
+ }
+
+ /**
+ * @param onoff2 the onoff2 to set
+ */
+ public void setOnoff2(byte onoff2) {
+ this.onoff2 = onoff2;
+ }
+
+ /**
+ * @return the onoff3
+ */
+ public byte getOnoff3() {
+ return onoff3;
+ }
+
+ /**
+ * @param onoff3 the onoff3 to set
+ */
+ public void setOnoff3(byte onoff3) {
+ this.onoff3 = onoff3;
+ }
+
+ /**
+ * @return the onoff4
+ */
+ public byte getOnoff4() {
+ return onoff4;
+ }
+
+ /**
+ * @param onoff4 the onoff4 to set
+ */
+ public void setOnoff4(byte onoff4) {
+ this.onoff4 = onoff4;
+ }
+
+ /**
+ * @return the timer_number1
+ */
+ public byte getTimer_number1() {
+ return timer_number1;
+ }
+
+ /**
+ * @param timer_number1 the timer_number1 to set
+ */
+ public void setTimer_number1(byte timer_number1) {
+ this.timer_number1 = timer_number1;
+ }
+
+ /**
+ * @return the timer_number2
+ */
+ public byte getTimer_number2() {
+ return timer_number2;
+ }
+
+ /**
+ * @param timer_number2 the timer_number2 to set
+ */
+ public void setTimer_number2(byte timer_number2) {
+ this.timer_number2 = timer_number2;
+ }
+
+ /**
+ * @return the timer_number3
+ */
+ public byte getTimer_number3() {
+ return timer_number3;
+ }
+
+ /**
+ * @param timer_number3 the timer_number3 to set
+ */
+ public void setTimer_number3(byte timer_number3) {
+ this.timer_number3 = timer_number3;
+ }
+
+ /**
+ * @return the timer_number4
+ */
+ public byte getTimer_number4() {
+ return timer_number4;
+ }
+
+ /**
+ * @param timer_number4 the timer_number4 to set
+ */
+ public void setTimer_number4(byte timer_number4) {
+ this.timer_number4 = timer_number4;
+ }
+
+ /**
+ * @return the timer_number5
+ */
+ public byte getTimer_number5() {
+ return timer_number5;
+ }
+
+ /**
+ * @param timer_number5 the timer_number5 to set
+ */
+ public void setTimer_number5(byte timer_number5) {
+ this.timer_number5 = timer_number5;
+ }
+
+ /**
+ * @return the timer_number6
+ */
+ public byte getTimer_number6() {
+ return timer_number6;
+ }
+
+ /**
+ * @param timer_number6 the timer_number6 to set
+ */
+ public void setTimer_number6(byte timer_number6) {
+ this.timer_number6 = timer_number6;
+ }
+
+ /**
+ * @return the timer_number7
+ */
+ public byte getTimer_number7() {
+ return timer_number7;
+ }
+
+ /**
+ * @param timer_number7 the timer_number7 to set
+ */
+ public void setTimer_number7(byte timer_number7) {
+ this.timer_number7 = timer_number7;
+ }
+
+ /**
+ * @return the timer_number8
+ */
+ public byte getTimer_number8() {
+ return timer_number8;
+ }
+
+ /**
+ * @param timer_number8 the timer_number8 to set
+ */
+ public void setTimer_number8(byte timer_number8) {
+ this.timer_number8 = timer_number8;
+ }
+
+ /**
+ * @return the timer_onoff1
+ */
+ public byte getTimer_onoff1() {
+ return timer_onoff1;
+ }
+
+ /**
+ * @param timer_onoff1 the timer_onoff1 to set
+ */
+ public void setTimer_onoff1(byte timer_onoff1) {
+ this.timer_onoff1 = timer_onoff1;
+ }
+
+ /**
+ * @return the timer_onoff2
+ */
+ public byte getTimer_onoff2() {
+ return timer_onoff2;
+ }
+
+ /**
+ * @param timer_onoff2 the timer_onoff2 to set
+ */
+ public void setTimer_onoff2(byte timer_onoff2) {
+ this.timer_onoff2 = timer_onoff2;
+ }
+
+ /**
+ * @return the timer_onoff3
+ */
+ public byte getTimer_onoff3() {
+ return timer_onoff3;
+ }
+
+ /**
+ * @param timer_onoff3 the timer_onoff3 to set
+ */
+ public void setTimer_onoff3(byte timer_onoff3) {
+ this.timer_onoff3 = timer_onoff3;
+ }
+
+ /**
+ * @return the timer_onoff4
+ */
+ public byte getTimer_onoff4() {
+ return timer_onoff4;
+ }
+
+ /**
+ * @param timer_onoff4 the timer_onoff4 to set
+ */
+ public void setTimer_onoff4(byte timer_onoff4) {
+ this.timer_onoff4 = timer_onoff4;
+ }
+
+ /**
+ * @return the timer_onoff5
+ */
+ public byte getTimer_onoff5() {
+ return timer_onoff5;
+ }
+
+ /**
+ * @param timer_onoff5 the timer_onoff5 to set
+ */
+ public void setTimer_onoff5(byte timer_onoff5) {
+ this.timer_onoff5 = timer_onoff5;
+ }
+
+ /**
+ * @return the timer_onoff6
+ */
+ public byte getTimer_onoff6() {
+ return timer_onoff6;
+ }
+
+ /**
+ * @param timer_onoff6 the timer_onoff6 to set
+ */
+ public void setTimer_onoff6(byte timer_onoff6) {
+ this.timer_onoff6 = timer_onoff6;
+ }
+
+ /**
+ * @return the timer_onoff7
+ */
+ public byte getTimer_onoff7() {
+ return timer_onoff7;
+ }
+
+ /**
+ * @param timer_onoff7 the timer_onoff7 to set
+ */
+ public void setTimer_onoff7(byte timer_onoff7) {
+ this.timer_onoff7 = timer_onoff7;
+ }
+
+ /**
+ * @return the timer_onoff8
+ */
+ public byte getTimer_onoff8() {
+ return timer_onoff8;
+ }
+
+ /**
+ * @param timer_onoff8 the timer_onoff8 to set
+ */
+ public void setTimer_onoff8(byte timer_onoff8) {
+ this.timer_onoff8 = timer_onoff8;
+ }
+
+ /**
+ * @return the timer_time1
+ */
+ public byte[] getTimer_time1() {
+ return timer_time1;
+ }
+
+ /**
+ * @param timer_time1 the timer_time1 to set
+ */
+ public void setTimer_time1(byte[] timer_time1) {
+ this.timer_time1 = timer_time1;
+ }
+
+ /**
+ * @return the timer_time2
+ */
+ public byte[] getTimer_time2() {
+ return timer_time2;
+ }
+
+ /**
+ * @param timer_time2 the timer_time2 to set
+ */
+ public void setTimer_time2(byte[] timer_time2) {
+ this.timer_time2 = timer_time2;
+ }
+
+ /**
+ * @return the timer_time3
+ */
+ public byte[] getTimer_time3() {
+ return timer_time3;
+ }
+
+ /**
+ * @param timer_time3 the timer_time3 to set
+ */
+ public void setTimer_time3(byte[] timer_time3) {
+ this.timer_time3 = timer_time3;
+ }
+
+ /**
+ * @return the timer_time4
+ */
+ public byte[] getTimer_time4() {
+ return timer_time4;
+ }
+
+ /**
+ * @param timer_time4 the timer_time4 to set
+ */
+ public void setTimer_time4(byte[] timer_time4) {
+ this.timer_time4 = timer_time4;
+ }
+
+ /**
+ * @return the timer_time5
+ */
+ public byte[] getTimer_time5() {
+ return timer_time5;
+ }
+
+ /**
+ * @param timer_time5 the timer_time5 to set
+ */
+ public void setTimer_time5(byte[] timer_time5) {
+ this.timer_time5 = timer_time5;
+ }
+
+ /**
+ * @return the timer_time6
+ */
+ public byte[] getTimer_time6() {
+ return timer_time6;
+ }
+
+ /**
+ * @param timer_time6 the timer_time6 to set
+ */
+ public void setTimer_time6(byte[] timer_time6) {
+ this.timer_time6 = timer_time6;
+ }
+
+ /**
+ * @return the timer_time7
+ */
+ public byte[] getTimer_time7() {
+ return timer_time7;
+ }
+
+ /**
+ * @param timer_time7 the timer_time7 to set
+ */
+ public void setTimer_time7(byte[] timer_time7) {
+ this.timer_time7 = timer_time7;
+ }
+
+ /**
+ * @return the timer_time8
+ */
+ public byte[] getTimer_time8() {
+ return timer_time8;
+ }
+
+ /**
+ * @param timer_time8 the timer_time8 to set
+ */
+ public void setTimer_time8(byte[] timer_time8) {
+ this.timer_time8 = timer_time8;
+ }
+
+ /**
+ * @return the wendu
+ */
+ public short getWendu() {
+ return wendu;
+ }
+
+ /**
+ * @param wendu the wendu to set
+ */
+ public void setWendu(short wendu) {
+ this.wendu = wendu;
+ }
+
+ /**
+ * @return the heatWendu
+ */
+ public short getHeatWendu() {
+ return heatWendu;
+ }
+
+ /**
+ * @param heatWendu the heatWendu to set
+ */
+ public void setHeatWendu(short heatWendu) {
+ this.heatWendu = heatWendu;
+ }
+
+ /**
+ * @return the heatStatus
+ */
+ public byte getHeatStatus() {
+ return heatStatus;
+ }
+
+ /**
+ * @param heatStatus the heatStatus to set
+ */
+ public void setHeatStatus(byte heatStatus) {
+ this.heatStatus = heatStatus;
+ }
+
+ /**
+ * @return the sarkLamp
+ */
+ public byte getSarkLamp() {
+ return sarkLamp;
+ }
+
+ /**
+ * @param sarkLamp the sarkLamp to set
+ */
+ public void setSarkLamp(byte sarkLamp) {
+ this.sarkLamp = sarkLamp;
+ }
+
+ /**
+ * @return the warn_onoff
+ */
+ public byte getWarn_onoff() {
+ return warn_onoff;
+ }
+
+ /**
+ * @param warn_onoff the warn_onoff to set
+ */
+ public void setWarn_onoff(byte warn_onoff) {
+ this.warn_onoff = warn_onoff;
+ }
+
+ /**
+ * @return the low_wendu
+ */
+ public short getLow_wendu() {
+ return low_wendu;
+ }
+
+ /**
+ * @param low_wendu the low_wendu to set
+ */
+ public void setLow_wendu(short low_wendu) {
+ this.low_wendu = low_wendu;
+ }
+
+ /**
+ * @return the high_wendu
+ */
+ public short getHigh_wendu() {
+ return high_wendu;
+ }
+
+ /**
+ * @param high_wendu the high_wendu to set
+ */
+ public void setHigh_wendu(short high_wendu) {
+ this.high_wendu = high_wendu;
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/receive/BackBytes85.java b/src/main/java/com/ifish/socketNew/model/receive/BackBytes85.java
new file mode 100644
index 0000000..0260c36
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/receive/BackBytes85.java
@@ -0,0 +1,341 @@
+package com.ifish.socketNew.model.receive;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 查询反馈信息71字节(15字节协议头+56字节结果)
+ * @author guogw
+ *
+ */
+public class BackBytes85 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = 2740442296642889777L;
+ //工作模式
+ private byte work_model;
+ /*********灯和开关(8字节)**********/
+ //灯编号1
+ private byte number1;
+ //灯编号2
+ private byte number2;
+ //灯编号3
+ private byte number3;
+ //灯编号4
+ private byte number4;
+ //灯1开关
+ private byte onoff1;
+ //灯2开关
+ private byte onoff2;
+ //灯3开关
+ private byte onoff3;
+ //灯3开关
+ private byte onoff4;
+ /*********定时器编号(6字节)灯1对应定时器1-2,灯2对应定时器3-4,灯3对应定时器5-6.....**********/
+ //定时器1编号
+ private byte timer_number1;
+ //定时器2编号
+ private byte timer_number2;
+ //定时器3编号
+ private byte timer_number3;
+ //定时器4编号
+ private byte timer_number4;
+ //定时器5编号
+ private byte timer_number5;
+ //定时器6编号
+ private byte timer_number6;
+ //定时器7编号
+ private byte timer_number7;
+ //定时器8编号
+ private byte timer_number8;
+ /*********定时器开关(6字节)**********/
+ //定时器1开关
+ private byte timer_onoff1;
+ //定时器2开关
+ private byte timer_onoff2;
+ //定时器3开关
+ private byte timer_onoff3;
+ //定时器4开关
+ private byte timer_onoff4;
+ //定时器5开关
+ private byte timer_onoff5;
+ //定时器6开关
+ private byte timer_onoff6;
+ //定时器7开关
+ private byte timer_onoff7;
+ //定时器8开关
+ private byte timer_onoff8;
+ /*********定时器时间(24字节)**********/
+ //定时器1时间
+ private byte[] timer_time1 = new byte[4];
+ //定时器2时间
+ private byte[] timer_time2 = new byte[4];
+ //定时器3时间
+ private byte[] timer_time3 = new byte[4];
+ //定时器4时间
+ private byte[] timer_time4 = new byte[4];
+ //定时器5时间
+ private byte[] timer_time5 = new byte[4];
+ //定时器6时间
+ private byte[] timer_time6 = new byte[4];
+ //定时器7时间
+ private byte[] timer_time7 = new byte[4];
+ //定时器8时间
+ private byte[] timer_time8 = new byte[4];
+ //温度
+ private short wendu;
+ //ph
+ private short ph_value;
+ //背光亮度
+ private byte lightness;
+ //柜灯
+ private byte sarkLamp;
+ //报警开关,0关,1开
+ private byte warn_onoff;
+ //最低报警温度
+ private short low_wendu;
+ //最高报警温度
+ private short high_wendu;
+
+ public short getWendu() {
+ return wendu;
+ }
+ public void setWendu(short wendu) {
+ this.wendu = wendu;
+ }
+ public byte getWork_model() {
+ return work_model;
+ }
+ public void setWork_model(byte work_model) {
+ this.work_model = work_model;
+ }
+ public byte getNumber1() {
+ return number1;
+ }
+ public void setNumber1(byte number1) {
+ this.number1 = number1;
+ }
+ public byte getOnoff1() {
+ return onoff1;
+ }
+ public void setOnoff1(byte onoff1) {
+ this.onoff1 = onoff1;
+ }
+ public byte getNumber2() {
+ return number2;
+ }
+ public void setNumber2(byte number2) {
+ this.number2 = number2;
+ }
+ public byte getOnoff2() {
+ return onoff2;
+ }
+ public void setOnoff2(byte onoff2) {
+ this.onoff2 = onoff2;
+ }
+ public byte getNumber3() {
+ return number3;
+ }
+ public void setNumber3(byte number3) {
+ this.number3 = number3;
+ }
+ public byte getOnoff3() {
+ return onoff3;
+ }
+ public void setOnoff3(byte onoff3) {
+ this.onoff3 = onoff3;
+ }
+ public byte getTimer_number1() {
+ return timer_number1;
+ }
+ public void setTimer_number1(byte timer_number1) {
+ this.timer_number1 = timer_number1;
+ }
+ public byte getTimer_number2() {
+ return timer_number2;
+ }
+ public void setTimer_number2(byte timer_number2) {
+ this.timer_number2 = timer_number2;
+ }
+ public byte getTimer_number3() {
+ return timer_number3;
+ }
+ public void setTimer_number3(byte timer_number3) {
+ this.timer_number3 = timer_number3;
+ }
+ public byte getTimer_number4() {
+ return timer_number4;
+ }
+ public void setTimer_number4(byte timer_number4) {
+ this.timer_number4 = timer_number4;
+ }
+ public byte getTimer_number5() {
+ return timer_number5;
+ }
+ public void setTimer_number5(byte timer_number5) {
+ this.timer_number5 = timer_number5;
+ }
+ public byte getTimer_number6() {
+ return timer_number6;
+ }
+ public void setTimer_number6(byte timer_number6) {
+ this.timer_number6 = timer_number6;
+ }
+ public byte[] getTimer_time1() {
+ return timer_time1;
+ }
+ public void setTimer_time1(byte[] timer_time1) {
+ this.timer_time1 = timer_time1;
+ }
+ public byte[] getTimer_time2() {
+ return timer_time2;
+ }
+ public void setTimer_time2(byte[] timer_time2) {
+ this.timer_time2 = timer_time2;
+ }
+ public byte[] getTimer_time3() {
+ return timer_time3;
+ }
+ public void setTimer_time3(byte[] timer_time3) {
+ this.timer_time3 = timer_time3;
+ }
+ public byte[] getTimer_time4() {
+ return timer_time4;
+ }
+ public void setTimer_time4(byte[] timer_time4) {
+ this.timer_time4 = timer_time4;
+ }
+ public byte[] getTimer_time5() {
+ return timer_time5;
+ }
+ public void setTimer_time5(byte[] timer_time5) {
+ this.timer_time5 = timer_time5;
+ }
+ public byte[] getTimer_time6() {
+ return timer_time6;
+ }
+ public void setTimer_time6(byte[] timer_time6) {
+ this.timer_time6 = timer_time6;
+ }
+ public short getPh_value() {
+ return ph_value;
+ }
+ public void setPh_value(short ph_value) {
+ this.ph_value = ph_value;
+ }
+ public byte getLightness() {
+ return lightness;
+ }
+ public void setLightness(byte lightness) {
+ this.lightness = lightness;
+ }
+ public byte getSarkLamp() {
+ return sarkLamp;
+ }
+ public void setSarkLamp(byte sarkLamp) {
+ this.sarkLamp = sarkLamp;
+ }
+ public byte getWarn_onoff() {
+ return warn_onoff;
+ }
+ public void setWarn_onoff(byte warn_onoff) {
+ this.warn_onoff = warn_onoff;
+ }
+ public short getLow_wendu() {
+ return low_wendu;
+ }
+ public void setLow_wendu(short low_wendu) {
+ this.low_wendu = low_wendu;
+ }
+ public short getHigh_wendu() {
+ return high_wendu;
+ }
+ public void setHigh_wendu(short high_wendu) {
+ this.high_wendu = high_wendu;
+ }
+ public byte getTimer_onoff1() {
+ return timer_onoff1;
+ }
+ public void setTimer_onoff1(byte timer_onoff1) {
+ this.timer_onoff1 = timer_onoff1;
+ }
+ public byte getTimer_onoff2() {
+ return timer_onoff2;
+ }
+ public void setTimer_onoff2(byte timer_onoff2) {
+ this.timer_onoff2 = timer_onoff2;
+ }
+ public byte getTimer_onoff3() {
+ return timer_onoff3;
+ }
+ public void setTimer_onoff3(byte timer_onoff3) {
+ this.timer_onoff3 = timer_onoff3;
+ }
+ public byte getTimer_onoff4() {
+ return timer_onoff4;
+ }
+ public void setTimer_onoff4(byte timer_onoff4) {
+ this.timer_onoff4 = timer_onoff4;
+ }
+ public byte getTimer_onoff5() {
+ return timer_onoff5;
+ }
+ public void setTimer_onoff5(byte timer_onoff5) {
+ this.timer_onoff5 = timer_onoff5;
+ }
+ public byte getTimer_onoff6() {
+ return timer_onoff6;
+ }
+ public void setTimer_onoff6(byte timer_onoff6) {
+ this.timer_onoff6 = timer_onoff6;
+ }
+ public byte getNumber4() {
+ return number4;
+ }
+ public void setNumber4(byte number4) {
+ this.number4 = number4;
+ }
+ public byte getOnoff4() {
+ return onoff4;
+ }
+ public void setOnoff4(byte onoff4) {
+ this.onoff4 = onoff4;
+ }
+ public byte getTimer_number7() {
+ return timer_number7;
+ }
+ public void setTimer_number7(byte timer_number7) {
+ this.timer_number7 = timer_number7;
+ }
+ public byte getTimer_number8() {
+ return timer_number8;
+ }
+ public void setTimer_number8(byte timer_number8) {
+ this.timer_number8 = timer_number8;
+ }
+ public byte getTimer_onoff7() {
+ return timer_onoff7;
+ }
+ public void setTimer_onoff7(byte timer_onoff7) {
+ this.timer_onoff7 = timer_onoff7;
+ }
+ public byte getTimer_onoff8() {
+ return timer_onoff8;
+ }
+ public void setTimer_onoff8(byte timer_onoff8) {
+ this.timer_onoff8 = timer_onoff8;
+ }
+ public byte[] getTimer_time7() {
+ return timer_time7;
+ }
+ public void setTimer_time7(byte[] timer_time7) {
+ this.timer_time7 = timer_time7;
+ }
+ public byte[] getTimer_time8() {
+ return timer_time8;
+ }
+ public void setTimer_time8(byte[] timer_time8) {
+ this.timer_time8 = timer_time8;
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/receive/BackBytes99.java b/src/main/java/com/ifish/socketNew/model/receive/BackBytes99.java
new file mode 100644
index 0000000..57e6fc2
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/receive/BackBytes99.java
@@ -0,0 +1,397 @@
+package com.ifish.socketNew.model.receive;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 查询反馈信息99字节(15字节协议头+84字节结果)
+ * @author guogw
+ *
+ */
+public class BackBytes99 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = -2334084294686976805L;
+ //工作模式
+ private byte work_model;
+ /*********灯和开关(10字节)**********/
+ //灯编号1
+ private byte number1;
+ //灯编号2
+ private byte number2;
+ //灯编号3
+ private byte number3;
+ //灯编号4
+ private byte number4;
+ //灯编号5
+ private byte number5;
+ //灯1开关
+ private byte onoff1;
+ //灯2开关
+ private byte onoff2;
+ //灯3开关
+ private byte onoff3;
+ //灯4开关
+ private byte onoff4;
+ //灯5开关
+ private byte onoff5;
+ /*********定时器编号(10字节)灯1对应定时器1-2,灯2对应定时器3-4,灯3对应定时器5-6**********/
+ //定时器1编号
+ private byte timer_number1;
+ //定时器2编号
+ private byte timer_number2;
+ //定时器3编号
+ private byte timer_number3;
+ //定时器4编号
+ private byte timer_number4;
+ //定时器5编号
+ private byte timer_number5;
+ //定时器6编号
+ private byte timer_number6;
+ //定时器7编号
+ private byte timer_number7;
+ //定时器8编号
+ private byte timer_number8;
+ //定时器9编号
+ private byte timer_number9;
+ //定时器10编号
+ private byte timer_number10;
+ /*********定时器开关(10字节)**********/
+ //定时器1开关
+ private byte timer_onoff1;
+ //定时器2开关
+ private byte timer_onoff2;
+ //定时器3开关
+ private byte timer_onoff3;
+ //定时器4开关
+ private byte timer_onoff4;
+ //定时器5开关
+ private byte timer_onoff5;
+ //定时器6开关
+ private byte timer_onoff6;
+ //定时器7开关
+ private byte timer_onoff7;
+ //定时器8开关
+ private byte timer_onoff8;
+ //定时器9开关
+ private byte timer_onoff9;
+ //定时器10开关
+ private byte timer_onoff10;
+ /*********定时器时间(40字节)**********/
+ //定时器1时间
+ private byte[] timer_time1 = new byte[4];
+ //定时器2时间
+ private byte[] timer_time2 = new byte[4];
+ //定时器3时间
+ private byte[] timer_time3 = new byte[4];
+ //定时器4时间
+ private byte[] timer_time4 = new byte[4];
+ //定时器5时间
+ private byte[] timer_time5 = new byte[4];
+ //定时器6时间
+ private byte[] timer_time6 = new byte[4];
+ //定时器7时间
+ private byte[] timer_time7 = new byte[4];
+ //定时器8时间
+ private byte[] timer_time8 = new byte[4];
+ //定时器9时间
+ private byte[] timer_time9 = new byte[4];
+ //定时器10时间
+ private byte[] timer_time10 = new byte[4];
+ //温度
+ private short wendu;
+ //ph
+ private short ph_value;
+ //湿度
+ private short shidu;
+ //报警开关,0关,1开
+ private byte warn_onoff;
+ //最低报警温度
+ private short low_wendu;
+ //最高报警温度
+ private short high_wendu;
+
+ public short getWendu() {
+ return wendu;
+ }
+ public void setWendu(short wendu) {
+ this.wendu = wendu;
+ }
+ public byte getWork_model() {
+ return work_model;
+ }
+ public void setWork_model(byte work_model) {
+ this.work_model = work_model;
+ }
+ public byte getNumber1() {
+ return number1;
+ }
+ public void setNumber1(byte number1) {
+ this.number1 = number1;
+ }
+ public byte getOnoff1() {
+ return onoff1;
+ }
+ public void setOnoff1(byte onoff1) {
+ this.onoff1 = onoff1;
+ }
+ public byte getNumber2() {
+ return number2;
+ }
+ public void setNumber2(byte number2) {
+ this.number2 = number2;
+ }
+ public byte getOnoff2() {
+ return onoff2;
+ }
+ public void setOnoff2(byte onoff2) {
+ this.onoff2 = onoff2;
+ }
+ public byte getNumber3() {
+ return number3;
+ }
+ public void setNumber3(byte number3) {
+ this.number3 = number3;
+ }
+ public byte getOnoff3() {
+ return onoff3;
+ }
+ public void setOnoff3(byte onoff3) {
+ this.onoff3 = onoff3;
+ }
+ public byte getTimer_number1() {
+ return timer_number1;
+ }
+ public void setTimer_number1(byte timer_number1) {
+ this.timer_number1 = timer_number1;
+ }
+ public byte getTimer_number2() {
+ return timer_number2;
+ }
+ public void setTimer_number2(byte timer_number2) {
+ this.timer_number2 = timer_number2;
+ }
+ public byte getTimer_number3() {
+ return timer_number3;
+ }
+ public void setTimer_number3(byte timer_number3) {
+ this.timer_number3 = timer_number3;
+ }
+ public byte getTimer_number4() {
+ return timer_number4;
+ }
+ public void setTimer_number4(byte timer_number4) {
+ this.timer_number4 = timer_number4;
+ }
+ public byte getTimer_number5() {
+ return timer_number5;
+ }
+ public void setTimer_number5(byte timer_number5) {
+ this.timer_number5 = timer_number5;
+ }
+ public byte getTimer_number6() {
+ return timer_number6;
+ }
+ public void setTimer_number6(byte timer_number6) {
+ this.timer_number6 = timer_number6;
+ }
+ public byte getTimer_number7() {
+ return timer_number7;
+ }
+ public void setTimer_number7(byte timer_number7) {
+ this.timer_number7 = timer_number7;
+ }
+ public byte getTimer_number8() {
+ return timer_number8;
+ }
+ public void setTimer_number8(byte timer_number8) {
+ this.timer_number8 = timer_number8;
+ }
+ public byte getTimer_number9() {
+ return timer_number9;
+ }
+ public void setTimer_number9(byte timer_number9) {
+ this.timer_number9 = timer_number9;
+ }
+ public byte[] getTimer_time1() {
+ return timer_time1;
+ }
+ public void setTimer_time1(byte[] timer_time1) {
+ this.timer_time1 = timer_time1;
+ }
+ public byte[] getTimer_time2() {
+ return timer_time2;
+ }
+ public void setTimer_time2(byte[] timer_time2) {
+ this.timer_time2 = timer_time2;
+ }
+ public byte[] getTimer_time3() {
+ return timer_time3;
+ }
+ public void setTimer_time3(byte[] timer_time3) {
+ this.timer_time3 = timer_time3;
+ }
+ public byte[] getTimer_time4() {
+ return timer_time4;
+ }
+ public void setTimer_time4(byte[] timer_time4) {
+ this.timer_time4 = timer_time4;
+ }
+ public byte[] getTimer_time5() {
+ return timer_time5;
+ }
+ public void setTimer_time5(byte[] timer_time5) {
+ this.timer_time5 = timer_time5;
+ }
+ public byte[] getTimer_time6() {
+ return timer_time6;
+ }
+ public void setTimer_time6(byte[] timer_time6) {
+ this.timer_time6 = timer_time6;
+ }
+ public byte[] getTimer_time7() {
+ return timer_time7;
+ }
+ public void setTimer_time7(byte[] timer_time7) {
+ this.timer_time7 = timer_time7;
+ }
+ public byte[] getTimer_time8() {
+ return timer_time8;
+ }
+ public void setTimer_time8(byte[] timer_time8) {
+ this.timer_time8 = timer_time8;
+ }
+ public byte[] getTimer_time9() {
+ return timer_time9;
+ }
+ public void setTimer_time9(byte[] timer_time9) {
+ this.timer_time9 = timer_time9;
+ }
+ public short getPh_value() {
+ return ph_value;
+ }
+ public void setPh_value(short ph_value) {
+ this.ph_value = ph_value;
+ }
+ public short getShidu() {
+ return shidu;
+ }
+ public void setShidu(short shidu) {
+ this.shidu = shidu;
+ }
+ public byte getWarn_onoff() {
+ return warn_onoff;
+ }
+ public void setWarn_onoff(byte warn_onoff) {
+ this.warn_onoff = warn_onoff;
+ }
+ public short getLow_wendu() {
+ return low_wendu;
+ }
+ public void setLow_wendu(short low_wendu) {
+ this.low_wendu = low_wendu;
+ }
+ public short getHigh_wendu() {
+ return high_wendu;
+ }
+ public void setHigh_wendu(short high_wendu) {
+ this.high_wendu = high_wendu;
+ }
+ public byte getOnoff4() {
+ return onoff4;
+ }
+ public void setOnoff4(byte onoff4) {
+ this.onoff4 = onoff4;
+ }
+ public byte getOnoff5() {
+ return onoff5;
+ }
+ public void setOnoff5(byte onoff5) {
+ this.onoff5 = onoff5;
+ }
+ public byte getTimer_number10() {
+ return timer_number10;
+ }
+ public void setTimer_number10(byte timer_number10) {
+ this.timer_number10 = timer_number10;
+ }
+ public byte[] getTimer_time10() {
+ return timer_time10;
+ }
+ public void setTimer_time10(byte[] timer_time10) {
+ this.timer_time10 = timer_time10;
+ }
+ public byte getNumber4() {
+ return number4;
+ }
+ public void setNumber4(byte number4) {
+ this.number4 = number4;
+ }
+ public byte getNumber5() {
+ return number5;
+ }
+ public void setNumber5(byte number5) {
+ this.number5 = number5;
+ }
+ public byte getTimer_onoff1() {
+ return timer_onoff1;
+ }
+ public void setTimer_onoff1(byte timer_onoff1) {
+ this.timer_onoff1 = timer_onoff1;
+ }
+ public byte getTimer_onoff2() {
+ return timer_onoff2;
+ }
+ public void setTimer_onoff2(byte timer_onoff2) {
+ this.timer_onoff2 = timer_onoff2;
+ }
+ public byte getTimer_onoff3() {
+ return timer_onoff3;
+ }
+ public void setTimer_onoff3(byte timer_onoff3) {
+ this.timer_onoff3 = timer_onoff3;
+ }
+ public byte getTimer_onoff4() {
+ return timer_onoff4;
+ }
+ public void setTimer_onoff4(byte timer_onoff4) {
+ this.timer_onoff4 = timer_onoff4;
+ }
+ public byte getTimer_onoff5() {
+ return timer_onoff5;
+ }
+ public void setTimer_onoff5(byte timer_onoff5) {
+ this.timer_onoff5 = timer_onoff5;
+ }
+ public byte getTimer_onoff6() {
+ return timer_onoff6;
+ }
+ public void setTimer_onoff6(byte timer_onoff6) {
+ this.timer_onoff6 = timer_onoff6;
+ }
+ public byte getTimer_onoff7() {
+ return timer_onoff7;
+ }
+ public void setTimer_onoff7(byte timer_onoff7) {
+ this.timer_onoff7 = timer_onoff7;
+ }
+ public byte getTimer_onoff8() {
+ return timer_onoff8;
+ }
+ public void setTimer_onoff8(byte timer_onoff8) {
+ this.timer_onoff8 = timer_onoff8;
+ }
+ public byte getTimer_onoff9() {
+ return timer_onoff9;
+ }
+ public void setTimer_onoff9(byte timer_onoff9) {
+ this.timer_onoff9 = timer_onoff9;
+ }
+ public byte getTimer_onoff10() {
+ return timer_onoff10;
+ }
+ public void setTimer_onoff10(byte timer_onoff10) {
+ this.timer_onoff10 = timer_onoff10;
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/receive/BackFunctionCode0.java b/src/main/java/com/ifish/socketNew/model/receive/BackFunctionCode0.java
new file mode 100644
index 0000000..4ea58e9
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/receive/BackFunctionCode0.java
@@ -0,0 +1,33 @@
+package com.ifish.socketNew.model.receive;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 服务器回复手机端的登录请求26字节(17字节头+9字节)
+ * @author guogw
+ *
+ */
+public class BackFunctionCode0 extends HeadModel implements Serializable{
+
+ private static final long serialVersionUID = 656305903606196100L;
+ //0表示设备还未连接服务器,1表示已连接
+ private byte login_status;
+ //系统时间
+ private long sysTime;
+
+ public byte getLogin_status() {
+ return login_status;
+ }
+ public void setLogin_status(byte login_status) {
+ this.login_status = login_status;
+ }
+ public long getSysTime() {
+ return sysTime;
+ }
+ public void setSysTime(long sysTime) {
+ this.sysTime = sysTime;
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/receive/BackFunctionCode1.java b/src/main/java/com/ifish/socketNew/model/receive/BackFunctionCode1.java
new file mode 100644
index 0000000..90ecc58
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/receive/BackFunctionCode1.java
@@ -0,0 +1,25 @@
+package com.ifish.socketNew.model.receive;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 服务器回复插座的登录请求25字节(15字节头+8字节时间+2字节)
+ * @author guogw
+ *
+ */
+public class BackFunctionCode1 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+ //系统时间
+ private byte[] sysTime = new byte[8];
+
+ public byte[] getSysTime() {
+ return sysTime;
+ }
+ public void setSysTime(byte[] sysTime) {
+ this.sysTime = sysTime;
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/receive/BackFunctionCode8.java b/src/main/java/com/ifish/socketNew/model/receive/BackFunctionCode8.java
new file mode 100644
index 0000000..42ed8f5
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/receive/BackFunctionCode8.java
@@ -0,0 +1,16 @@
+package com.ifish.socketNew.model.receive;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 服务器响应心跳17字节(15字节头+2校验码)
+ * @author guogw
+ *
+ */
+public class BackFunctionCode8 extends HeadModel implements Serializable{
+
+ private static final long serialVersionUID = 8470317692571925603L;
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode0.java b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode0.java
new file mode 100644
index 0000000..425bfeb
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode0.java
@@ -0,0 +1,24 @@
+package com.ifish.socketNew.model.send;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 手机登录请求25字节(17字节头+8字节登陆信息)
+ * @author guogw
+ *
+ */
+public class OrderFunctionCode0 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = 5899193914651159511L;
+ //时间
+ private long longtime;
+
+ public long getLongtime() {
+ return longtime;
+ }
+ public void setLongtime(long longtime) {
+ this.longtime = longtime;
+ }
+}
diff --git a/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode1.java b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode1.java
new file mode 100644
index 0000000..8ea9276
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode1.java
@@ -0,0 +1,57 @@
+package com.ifish.socketNew.model.send;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 设备登录服务器(24字节=17+7字节登陆信息)
+ * @author guogw
+ *
+ */
+public class OrderFunctionCode1 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = 5329299292101065390L;
+ //厂商
+ private byte vendor;
+ //硬件型号
+ private byte hardware_type;
+ //版本
+ private byte version;
+ //登陆IP
+ private byte[] login_ip = new byte[4];
+
+
+ public byte getVendor() {
+ return vendor;
+ }
+
+ public void setVendor(byte vendor) {
+ this.vendor = vendor;
+ }
+
+ public byte getHardware_type() {
+ return hardware_type;
+ }
+
+ public void setHardware_type(byte hardware_type) {
+ this.hardware_type = hardware_type;
+ }
+
+ public byte getVersion() {
+ return version;
+ }
+
+ public void setVersion(byte version) {
+ this.version = version;
+ }
+
+ public byte[] getLogin_ip() {
+ return login_ip;
+ }
+
+ public void setLogin_ip(byte[] login_ip) {
+ this.login_ip = login_ip;
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode15.java b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode15.java
new file mode 100644
index 0000000..a20f838
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode15.java
@@ -0,0 +1,33 @@
+package com.ifish.socketNew.model.send;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 升级命令78字节(17字节头+61字节)
+ * @author guogw
+ *
+ */
+public class OrderFunctionCode15 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = 3696291654504951296L;
+ //版本
+ private byte version;
+ //地址
+ private byte[] address = new byte[60];
+
+ public byte getVersion() {
+ return version;
+ }
+ public void setVersion(byte version) {
+ this.version = version;
+ }
+ public byte[] getAddress() {
+ return address;
+ }
+ public void setAddress(byte[] address) {
+ this.address = address;
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode16.java b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode16.java
new file mode 100644
index 0000000..ebe00ef
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode16.java
@@ -0,0 +1,49 @@
+package com.ifish.socketNew.model.send;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 温度报警指令22字节(17字节头+5字节)
+ * @author guogw
+ *
+ */
+public class OrderFunctionCode16 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = -6712376303551767331L;
+ //版本
+ private byte version;
+ //年
+ private short year;
+ //月
+ private byte month;
+ //日
+ private byte day;
+
+ public byte getVersion() {
+ return version;
+ }
+ public void setVersion(byte version) {
+ this.version = version;
+ }
+ public short getYear() {
+ return year;
+ }
+ public void setYear(short year) {
+ this.year = year;
+ }
+ public byte getMonth() {
+ return month;
+ }
+ public void setMonth(byte month) {
+ this.month = month;
+ }
+ public byte getDay() {
+ return day;
+ }
+ public void setDay(byte day) {
+ this.day = day;
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode17.java b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode17.java
new file mode 100644
index 0000000..e6132a9
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode17.java
@@ -0,0 +1,89 @@
+package com.ifish.socketNew.model.send;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 温度报警指令38字节(17字节头+21字节)
+ * @author guogw
+ *
+ */
+public class OrderFunctionCode17 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = -6712376303551767331L;
+ //版本
+ private byte version;
+ //年
+ private short year;
+ //月
+ private byte month;
+ //日
+ private byte day;
+ //MCU启动次数
+ private int number1;
+ //模块启动次数
+ private int number2;
+ //连接路由器次数
+ private int number3;
+ //成功连接服务器次数
+ private int number4;
+ //尝试连接服务器次数
+ private int number5;
+
+ public byte getVersion() {
+ return version;
+ }
+ public void setVersion(byte version) {
+ this.version = version;
+ }
+ public short getYear() {
+ return year;
+ }
+ public void setYear(short year) {
+ this.year = year;
+ }
+ public byte getMonth() {
+ return month;
+ }
+ public void setMonth(byte month) {
+ this.month = month;
+ }
+ public byte getDay() {
+ return day;
+ }
+ public void setDay(byte day) {
+ this.day = day;
+ }
+ public int getNumber1() {
+ return number1;
+ }
+ public void setNumber1(int number1) {
+ this.number1 = number1;
+ }
+ public int getNumber2() {
+ return number2;
+ }
+ public void setNumber2(int number2) {
+ this.number2 = number2;
+ }
+ public int getNumber3() {
+ return number3;
+ }
+ public void setNumber3(int number3) {
+ this.number3 = number3;
+ }
+ public int getNumber4() {
+ return number4;
+ }
+ public void setNumber4(int number4) {
+ this.number4 = number4;
+ }
+ public int getNumber5() {
+ return number5;
+ }
+ public void setNumber5(int number5) {
+ this.number5 = number5;
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode2_12_13.java b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode2_12_13.java
new file mode 100644
index 0000000..146515f
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode2_12_13.java
@@ -0,0 +1,26 @@
+package com.ifish.socketNew.model.send;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 切换模式/调整背光灯亮度/开关柜灯18字节(17字节头+1字节模式)
+ * @author guogw
+ *
+ */
+public class OrderFunctionCode2_12_13 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = 4716919320112205973L;
+ //工作模式/亮度参数(00-FF)/开关
+ private byte parameter;
+
+ public byte getParameter() {
+ return parameter;
+ }
+ public void setParameter(byte parameter) {
+ this.parameter = parameter;
+ }
+
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode3_10.java b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode3_10.java
new file mode 100644
index 0000000..0daea1e
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode3_10.java
@@ -0,0 +1,32 @@
+package com.ifish.socketNew.model.send;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 开关灯/开关定时器19字节(17字节头+2字节)
+ * @author guogw
+ *
+ */
+public class OrderFunctionCode3_10 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = 4716919320112205973L;
+ //灯编号/定时器编号
+ private byte number;
+ //开关,1开,0关
+ private byte onoff;
+
+ public byte getNumber() {
+ return number;
+ }
+ public void setNumber(byte number) {
+ this.number = number;
+ }
+ public byte getOnoff() {
+ return onoff;
+ }
+ public void setOnoff(byte onoff) {
+ this.onoff = onoff;
+ }
+}
diff --git a/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode4.java b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode4.java
new file mode 100644
index 0000000..fb47319
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode4.java
@@ -0,0 +1,33 @@
+package com.ifish.socketNew.model.send;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 设置定时器时间22字节(17字节头+5字节)
+ * @author guogw
+ *
+ */
+public class OrderFunctionCode4 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = 4716919320112205973L;
+ //定时器编号
+ private byte timer_number;
+ //定时时间
+ private byte[] timer_time = new byte[4];
+
+ public byte getTimer_number() {
+ return timer_number;
+ }
+ public void setTimer_number(byte timer_number) {
+ this.timer_number = timer_number;
+ }
+ public byte[] getTimer_time() {
+ return timer_time;
+ }
+ public void setTimer_time(byte[] timer_time) {
+ this.timer_time = timer_time;
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode5.java b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode5.java
new file mode 100644
index 0000000..b322aae
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode5.java
@@ -0,0 +1,41 @@
+package com.ifish.socketNew.model.send;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 设置报警温度指令22字节(17字节头+5字节)
+ * @author guogw
+ *
+ */
+public class OrderFunctionCode5 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = -6712376303551767331L;
+ //开启关闭报警,00关,01开,02设置温度
+ private byte onoff;
+ //报警温度
+ private short low_wendu;
+ //报警温度
+ private short hight_wendu;
+
+ public byte getOnoff() {
+ return onoff;
+ }
+ public void setOnoff(byte onoff) {
+ this.onoff = onoff;
+ }
+ public short getLow_wendu() {
+ return low_wendu;
+ }
+ public void setLow_wendu(short low_wendu) {
+ this.low_wendu = low_wendu;
+ }
+ public short getHight_wendu() {
+ return hight_wendu;
+ }
+ public void setHight_wendu(short hight_wendu) {
+ this.hight_wendu = hight_wendu;
+ }
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode6.java b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode6.java
new file mode 100644
index 0000000..9c56d42
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode6.java
@@ -0,0 +1,16 @@
+package com.ifish.socketNew.model.send;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 手机查询设备状态17字节(17字节头)
+ * @author guogw
+ *
+ */
+public class OrderFunctionCode6 extends HeadModel implements Serializable{
+
+ private static final long serialVersionUID = 8470317692571925603L;
+
+}
diff --git a/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode9.java b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode9.java
new file mode 100644
index 0000000..71021e5
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/model/send/OrderFunctionCode9.java
@@ -0,0 +1,42 @@
+package com.ifish.socketNew.model.send;
+
+import java.io.Serializable;
+
+import com.ifish.socketNew.model.HeadModel;
+
+/**
+ * 温度报警指令22字节(17字节头+5字节)
+ * @author guogw
+ *
+ */
+public class OrderFunctionCode9 extends HeadModel implements Serializable {
+
+ private static final long serialVersionUID = -6712376303551767331L;
+ //报警温度类型,0是低温报警,1是高温报警
+ private byte warn_type;
+ //当前设备温度
+ private short wendu;
+ //报警温度
+ private short warn_wendu;
+
+ public byte getWarn_type() {
+ return warn_type;
+ }
+ public void setWarn_type(byte warn_type) {
+ this.warn_type = warn_type;
+ }
+ public short getWendu() {
+ return wendu;
+ }
+ public void setWendu(short wendu) {
+ this.wendu = wendu;
+ }
+ public short getWarn_wendu() {
+ return warn_wendu;
+ }
+ public void setWarn_wendu(short warn_wendu) {
+ this.warn_wendu = warn_wendu;
+ }
+
+
+}
diff --git a/src/main/java/com/ifish/socketNew/util/ModelCodec.java b/src/main/java/com/ifish/socketNew/util/ModelCodec.java
new file mode 100644
index 0000000..2b2f74b
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/util/ModelCodec.java
@@ -0,0 +1,310 @@
+package com.ifish.socketNew.util;
+
+import org.apache.mina.core.buffer.IoBuffer;
+
+import com.ifish.socketNew.model.receive.BackFunctionCode0;
+import com.ifish.socketNew.model.receive.BackBytes99;
+import com.ifish.socketNew.model.send.OrderFunctionCode0;
+import com.ifish.socketNew.model.send.OrderFunctionCode2_12_13;
+import com.ifish.socketNew.model.send.OrderFunctionCode3_10;
+import com.ifish.socketNew.model.send.OrderFunctionCode4;
+import com.ifish.socketNew.model.send.OrderFunctionCode5;
+import com.ifish.socketNew.model.send.OrderFunctionCode6;
+import com.ifish.util.ByteUtil;
+
+public class ModelCodec {
+ /**
+ * 把对象转成字节数
+ * @param obj
+ * @return
+ */
+ public static byte[] enCode(Object obj){
+ IoBuffer buffer = IoBuffer.allocate(100).setAutoExpand(true);
+ //查询设备状信息
+ if(obj instanceof OrderFunctionCode6){
+ OrderFunctionCode6 model = (OrderFunctionCode6) obj;
+ //15字节数据包头
+ buffer.put(model.getType());
+ buffer.put(model.getCheck_code());
+ buffer.put(model.getSrc());
+ buffer.put(model.getDest());
+ buffer.put(model.getRemote_len());
+ //crc16校验码
+ buffer.put(model.getCrc16_code());
+ }
+ //切换工作模式
+ else if(obj instanceof OrderFunctionCode2_12_13){
+ OrderFunctionCode2_12_13 model = (OrderFunctionCode2_12_13) obj;
+ //15字节数据包头
+ buffer.put(model.getType());
+ buffer.put(model.getCheck_code());
+ buffer.put(model.getSrc());
+ buffer.put(model.getDest());
+ buffer.put(model.getRemote_len());
+ //工作模式
+ buffer.put(model.getParameter());
+ //crc16校验码
+ buffer.put(model.getCrc16_code());
+ }
+ //开关灯
+ else if(obj instanceof OrderFunctionCode3_10){
+ OrderFunctionCode3_10 model = (OrderFunctionCode3_10) obj;
+ //15字节数据包头
+ buffer.put(model.getType());
+ buffer.put(model.getCheck_code());
+ buffer.put(model.getSrc());
+ buffer.put(model.getDest());
+ buffer.put(model.getRemote_len());
+ //灯编号
+ buffer.put(model.getNumber());
+ //开关
+ buffer.put(model.getOnoff());
+ //crc16校验码
+ buffer.put(model.getCrc16_code());
+ }
+ //设置定时器时间
+ else if(obj instanceof OrderFunctionCode4){
+ OrderFunctionCode4 model = (OrderFunctionCode4) obj;
+ //15字节数据包头
+ buffer.put(model.getType());
+ buffer.put(model.getCheck_code());
+ buffer.put(model.getSrc());
+ buffer.put(model.getDest());
+ buffer.put(model.getRemote_len());
+ //定时器编号
+ buffer.put(model.getTimer_number());
+ //定时器时间
+ buffer.put(model.getTimer_time());
+ //crc16校验码
+ buffer.put(model.getCrc16_code());
+ }
+ //设置报警温度
+ else if(obj instanceof OrderFunctionCode5){
+ OrderFunctionCode5 model = (OrderFunctionCode5) obj;
+ //15字节数据包头
+ buffer.put(model.getType());
+ buffer.put(model.getCheck_code());
+ buffer.put(model.getSrc());
+ buffer.put(model.getDest());
+ buffer.put(model.getRemote_len());
+ //开关
+ buffer.put(model.getOnoff());
+ //温度类型
+ buffer.putShort(model.getLow_wendu());
+ //报警温度
+ buffer.putShort(model.getHight_wendu());
+ //crc16校验码
+ buffer.put(model.getCrc16_code());
+ }
+ //APP登陆服务器
+ else if(obj instanceof OrderFunctionCode0){
+ OrderFunctionCode0 model = (OrderFunctionCode0) obj;
+ //15字节数据包头
+ buffer.put(model.getType());
+ buffer.put(model.getCheck_code());
+ buffer.put(model.getSrc());
+ buffer.put(model.getDest());
+ buffer.put(model.getRemote_len());
+ //时间
+ buffer.putLong(model.getLongtime());
+ //crc16校验码
+ buffer.put(model.getCrc16_code());
+ }
+ buffer.flip();
+ return ByteUtil.ioBufferToByte(buffer);
+ }
+
+ /**
+ * 把字节数组转成对象
+ * @param obj
+ * @return
+ */
+ public static Object deCode(byte[] bys) {
+ int length = bys.length;
+ IoBuffer buf = ByteUtil.byteToIoBuffer(bys,length);
+ //switch语句
+ switch (length) {
+ //长度为26,服务器回复APP登录请求
+ case 26: {
+ return decode26(buf);
+ }
+ //长度为99,设备反馈信息
+ case 99: {
+ return decode99(buf);
+ }
+ default:
+ return null;
+ }
+ }
+ /**
+ * 服务器回复APP登录请求
+ * @param buf
+ * @return
+ */
+ private static Object decode26(IoBuffer buf){
+ BackFunctionCode0 model = new BackFunctionCode0();
+ //15字节头
+ model.setType(buf.get());
+ model.setCheck_code(buf.get());
+ byte[] src = model.getSrc();
+ for (int i = 0; i < src.length; i++) {
+ src[i] = buf.get();
+ }
+ model.setSrc(src);
+ byte[] dest = model.getDest();
+ for (int i = 0; i < dest.length; i++) {
+ dest[i] = buf.get();
+ }
+ model.setDest(dest);
+ model.setRemote_len(buf.get());
+ //登陆状态
+ model.setLogin_status(buf.get());
+ //时间
+ model.setSysTime(buf.getLong());
+ byte[] crc16_code = model.getCrc16_code();
+ for (int i = 0; i < crc16_code.length; i++) {
+ crc16_code[i] = buf.get();
+ }
+ return model;
+ }
+ /**
+ * 设备反馈信息
+ * @param buf
+ * @return
+ */
+ private static Object decode99(IoBuffer buf){
+ BackBytes99 model = new BackBytes99();
+ //15字节头
+ model.setType(buf.get());
+ model.setCheck_code(buf.get());
+ byte[] src = model.getSrc();
+ for (int i = 0; i < src.length; i++) {
+ src[i] = buf.get();
+ }
+ model.setSrc(src);
+ byte[] dest = model.getDest();
+ for (int i = 0; i < dest.length; i++) {
+ dest[i] = buf.get();
+ }
+ model.setDest(dest);
+ model.setRemote_len(buf.get());
+ //工作模式
+ model.setWork_model(buf.get());
+ //灯1编号和开关
+ model.setNumber1(buf.get());
+ model.setOnoff1(buf.get());
+ //灯2编号和开关
+ model.setNumber2(buf.get());
+ model.setOnoff2(buf.get());
+ //灯3编号和开关
+ model.setNumber3(buf.get());
+ model.setOnoff3(buf.get());
+ //灯4编号和开关
+ model.setNumber4(buf.get());
+ model.setOnoff4(buf.get());
+ //灯5编号和开关
+ model.setNumber5(buf.get());
+ model.setOnoff5(buf.get());
+
+ //定时器编号
+ byte timer_number1 = model.getTimer_number1();
+ byte timer_number2 = model.getTimer_number2();
+ byte timer_number3 = model.getTimer_number3();
+ byte timer_number4 = model.getTimer_number4();
+ byte timer_number5 = model.getTimer_number5();
+ byte timer_number6 = model.getTimer_number6();
+ byte timer_number7 = model.getTimer_number7();
+ byte timer_number8 = model.getTimer_number8();
+ byte timer_number9 = model.getTimer_number9();
+ byte timer_number10 = model.getTimer_number10();
+
+ //定时器开关
+ byte timer_onoff1 = model.getTimer_onoff1();
+ byte timer_onoff2 = model.getTimer_onoff2();
+ byte timer_onoff3 = model.getTimer_onoff3();
+ byte timer_onoff4 = model.getTimer_onoff4();
+ byte timer_onoff5 = model.getTimer_onoff5();
+ byte timer_onoff6 = model.getTimer_onoff6();
+ byte timer_onoff7 = model.getTimer_onoff7();
+ byte timer_onoff8 = model.getTimer_onoff8();
+ byte timer_onoff9 = model.getTimer_onoff9();
+ byte timer_onoff10 = model.getTimer_onoff10();
+
+ //定时器时间
+ byte[] timer_time1 = model.getTimer_time1();
+ byte[] timer_time2 = model.getTimer_time2();
+ byte[] timer_time3 = model.getTimer_time3();
+ byte[] timer_time4 = model.getTimer_time4();
+ byte[] timer_time5 = model.getTimer_time5();
+ byte[] timer_time6 = model.getTimer_time6();
+ byte[] timer_time7 = model.getTimer_time7();
+ byte[] timer_time8 = model.getTimer_time8();
+ byte[] timer_time9 = model.getTimer_time9();
+ byte[] timer_time10 = model.getTimer_time10();
+
+ byte[] timer_numbers = {timer_number1,timer_number2,timer_number3,timer_number4,timer_number5,timer_number6,timer_number7,timer_number8,timer_number9,timer_number10};
+ byte[] timer_onoffs = {timer_onoff1,timer_onoff2,timer_onoff3,timer_onoff4,timer_onoff5,timer_onoff6,timer_onoff7,timer_onoff8,timer_onoff9,timer_onoff10};
+ byte[][] timers = {timer_time1,timer_time2,timer_time3,timer_time4,timer_time5,timer_time6,timer_time7,timer_time8,timer_time9,timer_time10};
+
+ for (int i = 0; i < timers.length; i++) {
+ //定时器编号
+ timer_numbers[i] = buf.get();
+ //定时器开关
+ timer_onoffs[i] = buf.get();
+ for (int j = 0; j < timers[i].length; j++) {
+ timers[i][j] = buf.get();
+ }
+ }
+ //定时器编号
+ model.setTimer_number1(timer_numbers[0]);
+ model.setTimer_number2(timer_numbers[1]);
+ model.setTimer_number3(timer_numbers[2]);
+ model.setTimer_number4(timer_numbers[3]);
+ model.setTimer_number5(timer_numbers[4]);
+ model.setTimer_number6(timer_numbers[5]);
+ model.setTimer_number7(timer_numbers[6]);
+ model.setTimer_number8(timer_numbers[7]);
+ model.setTimer_number9(timer_numbers[8]);
+ model.setTimer_number10(timer_numbers[9]);
+ //定时器开关
+ model.setTimer_onoff1(timer_onoffs[0]);
+ model.setTimer_onoff2(timer_onoffs[1]);
+ model.setTimer_onoff3(timer_onoffs[2]);
+ model.setTimer_onoff4(timer_onoffs[3]);
+ model.setTimer_onoff5(timer_onoffs[4]);
+ model.setTimer_onoff6(timer_onoffs[5]);
+ model.setTimer_onoff7(timer_onoffs[6]);
+ model.setTimer_onoff8(timer_onoffs[7]);
+ model.setTimer_onoff9(timer_onoffs[8]);
+ model.setTimer_onoff10(timer_onoffs[9]);
+ //定时器时间
+ model.setTimer_time1(timers[0]);
+ model.setTimer_time2(timers[1]);
+ model.setTimer_time3(timers[2]);
+ model.setTimer_time4(timers[3]);
+ model.setTimer_time5(timers[4]);
+ model.setTimer_time6(timers[5]);
+ model.setTimer_time7(timers[6]);
+ model.setTimer_time8(timers[7]);
+ model.setTimer_time9(timers[8]);
+ model.setTimer_time10(timers[9]);
+
+ //温度
+ model.setWendu(buf.getShort());
+ //ph
+ model.setPh_value(buf.getShort());
+ //湿度
+ model.setShidu(buf.getShort());
+ //报警开关
+ model.setWarn_onoff(buf.get());
+ //最低报警温度
+ model.setLow_wendu(buf.getShort());
+ //最高报警温度
+ model.setHigh_wendu(buf.getShort());
+ byte[] crc16_code = model.getCrc16_code();
+ for (int i = 0; i < crc16_code.length; i++) {
+ crc16_code[i] = buf.get();
+ }
+ return model;
+ }
+}
diff --git a/src/main/java/com/ifish/socketNew/util/MyInetSocketAddress.java b/src/main/java/com/ifish/socketNew/util/MyInetSocketAddress.java
new file mode 100644
index 0000000..f9e90ab
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/util/MyInetSocketAddress.java
@@ -0,0 +1,44 @@
+package com.ifish.socketNew.util;
+
+import java.net.InetSocketAddress;
+
+public class MyInetSocketAddress {
+
+ private InetSocketAddress socketAddress = null;
+ private String ip = "";
+ private int serverPort = 9955;
+
+ public MyInetSocketAddress(String ip, int serverPort) {
+ try {
+ this.ip = ip;
+ this.serverPort = serverPort;
+ socketAddress = new InetSocketAddress(ip, serverPort);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public InetSocketAddress getSocketAddress() {
+ return socketAddress;
+ }
+
+ public void setSocketAddress(InetSocketAddress socketAddress) {
+ this.socketAddress = socketAddress;
+ }
+
+ public String getIp() {
+ return ip;
+ }
+
+ public void setIp(String ip) {
+ this.ip = ip;
+ }
+
+ public int getServerPort() {
+ return serverPort;
+ }
+
+ public void setServerPort(int serverPort) {
+ this.serverPort = serverPort;
+ }
+}
diff --git a/src/main/java/com/ifish/socketNew/util/OrderModel.java b/src/main/java/com/ifish/socketNew/util/OrderModel.java
new file mode 100644
index 0000000..f69d07b
--- /dev/null
+++ b/src/main/java/com/ifish/socketNew/util/OrderModel.java
@@ -0,0 +1,92 @@
+package com.ifish.socketNew.util;
+
+import com.ifish.socketNew.model.receive.BackFunctionCode0;
+import com.ifish.socketNew.model.receive.BackFunctionCode1;
+import com.ifish.socketNew.model.receive.BackFunctionCode8;
+import com.ifish.socketNew.model.send.OrderFunctionCode15;
+import com.ifish.util.ByteUtil;
+
+public class OrderModel {
+
+ /**
+ * 服务器回复设备登录请求指令
+ *
+ * @param src
+ * @param dest
+ * @return
+ */
+ public final static BackFunctionCode1 BackFunctionCode1(byte[] src, byte[] dest) {
+ BackFunctionCode1 model = new BackFunctionCode1();
+ model.setType((byte) 1);
+ model.setCheck_code((byte) 1);
+ model.setSrc(src);
+ model.setDest(dest);
+ model.setRemote_len((byte) 25);
+ model.setSysTime(ByteUtil.hexSysTime());
+ return model;
+ }
+
+ /**
+ * 服务器回复APP登录请求指令
+ *
+ * @param src
+ * @param dest
+ * @return
+ */
+ public final static BackFunctionCode0 BackFunctionCode0(byte[] src, byte[] dest, byte login_status) {
+ BackFunctionCode0 model = new BackFunctionCode0();
+ model.setType((byte) 1);
+ model.setSrc(src);
+ model.setDest(dest);
+ model.setRemote_len((byte) 26);
+ model.setLogin_status(login_status);
+ model.setSysTime(System.currentTimeMillis());
+ return model;
+ }
+
+ /**
+ * 获取查询命令
+ *
+ * @param type
+ * @param macAddress
+ * @return
+ */
+ public final static BackFunctionCode8 BackFunctionCode8(String macAddress) {
+ BackFunctionCode8 model = new BackFunctionCode8();
+ //15字节数据包头
+ model.setType((byte) 1);
+ model.setCheck_code((byte) 8);
+ model.setSrc(ByteUtil.hexStringToBytes2(macAddress));
+ model.setDest(ByteUtil.hexStringToBytes2(macAddress));
+ model.setRemote_len((byte) 17);
+ return model;
+ }
+
+ /**
+ * 升级
+ *
+ * @param type
+ * @param macAddress
+ * @param timer_number
+ * @param time
+ * @return
+ */
+ public final static OrderFunctionCode15 OrderFunctionCode15(byte[] macAddress, int version) {
+ OrderFunctionCode15 model = new OrderFunctionCode15();
+ //15字节数据包头
+ model.setType((byte) 0);
+ model.setCheck_code((byte) 15);
+ model.setSrc(macAddress);
+ model.setDest(macAddress);
+ model.setRemote_len((byte) 78);
+ model.setVersion((byte) version);
+ //地址
+ byte[] addressByte = model.getAddress();
+ byte[] bytes = "/download/sdk/".getBytes();
+ for (int i = 0; i < bytes.length; i++) {
+ addressByte[i] = bytes[i];
+ }
+ model.setAddress(addressByte);
+ return model;
+ }
+}
diff --git a/src/main/java/com/ifish/util/ByteUtil.java b/src/main/java/com/ifish/util/ByteUtil.java
new file mode 100644
index 0000000..ac1d980
--- /dev/null
+++ b/src/main/java/com/ifish/util/ByteUtil.java
@@ -0,0 +1,185 @@
+package com.ifish.util;
+
+import java.util.Calendar;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import com.ifish.socketNew.model.receive.BackBytes99;
+
+public class ByteUtil{
+
+ /**
+ * 将IoBuffer转换成byte
+ * @param str
+ */
+ public static byte[] ioBufferToByte(IoBuffer ioBuffer){
+ byte[] b = new byte[ioBuffer.limit()];
+ ioBuffer.get(b, 0, b.length);
+ return b;
+ }
+ /**
+ * 将byte[]转换成IoBuffer
+ * @param str
+ */
+ public static IoBuffer byteToIoBuffer(byte [] bt,int length){
+ IoBuffer ioBuffer = IoBuffer.allocate(100).setAutoExpand(true);
+ //ioBuffer.order(ByteOrder.LITTLE_ENDIAN);// 修改此缓冲区的字节顺大端模式
+ ioBuffer.put(bt, 0, length);
+ ioBuffer.flip();
+ return ioBuffer;
+ }
+ /**
+ * 16进制字节数组转16进制字符
+ * @param hexString
+ * @return byte[]
+ */
+ public static String bytesToHexString(byte[] src){
+ StringBuilder stringBuilder = new StringBuilder();
+ if (src == null || src.length <= 0) {
+ return null;
+ }
+ for (int i = 0; i < src.length; i++) {
+ int v = src[i] & 0xFF;
+ String hv = Integer.toHexString(v);
+ if (hv.length() < 2) {
+ stringBuilder.append(0);
+ }
+ stringBuilder.append(hv);
+ }
+ return stringBuilder.toString();
+ }
+
+ /**
+ * 16进制字符串转换成字节数组(带空格)
+ * @param hexString
+ * @return byte[]
+ */
+ public static byte[] hexStringToBytes(String hexString){
+ hexString = hexString.toLowerCase();
+ String[] hexStrings = hexString.split(" ");
+ byte[] bytes = new byte[hexStrings.length];
+ for (int i = 0; i < hexStrings.length; i++){
+ char[] hexChars = hexStrings[i].toCharArray();
+ bytes[i] = (byte) (charToByte(hexChars[0]) << 4 | charToByte(hexChars[1]));
+ }
+ return bytes;
+ }
+ private static byte charToByte(char c){
+ return (byte) "0123456789abcdef".indexOf(c);
+ }
+ /**
+ * 16进制字符串转换成字节数组(不带空格)
+ * @param hexString
+ * @return byte[]
+ */
+ public static byte[] hexStringToBytes2(String hex) {
+ hex = hex.toLowerCase();
+ int len = (hex.length() / 2);
+ byte[] result = new byte[len];
+ char[] achar = hex.toCharArray();
+ for (int i = 0; i < len; i++) {
+ int pos = i * 2;
+ result[i] = (byte) (charToByte(achar[pos]) << 4 | charToByte(achar[pos + 1]));
+ }
+ return result;
+ }
+
+ /**
+ * 把byte 转化为两位十六进制数
+ * @param b
+ * @return
+ */
+ public static String toHex(byte b) {
+ String result = Integer.toHexString(b & 0xFF);
+ if (result.length() == 1) {
+ result = '0' + result;
+ }
+ return result;
+ }
+ /**
+ * 当前16进制时间
+ * @return
+ */
+ public static byte[] hexSysTime(){
+ Calendar calendar = Calendar.getInstance();
+ String hexYear = String.format("%04x", calendar.get(Calendar.YEAR));
+ String hexMonth = String.format("%02x", (calendar.get(Calendar.MONTH)+1));
+ String hexDate = String.format("%02x", calendar.get(Calendar.DATE));
+ String hexHours = String.format("%02x", calendar.get(Calendar.HOUR_OF_DAY));
+ String hexMinutes = String.format("%02x", calendar.get(Calendar.MINUTE));
+ String hexSeconds = String.format("%02x", calendar.get(Calendar.SECOND));
+ int hexDay = calendar.get(Calendar.DAY_OF_WEEK);
+ String dayOfWeek = String.format("%02x", hexDay==1?7:hexDay-1);
+ byte[] sysTime = hexStringToBytes2(hexYear+hexMonth+hexDate+hexHours+hexMinutes+hexSeconds+dayOfWeek);
+ return sysTime;
+ }
+
+ /**
+ * 将byte定时器转换成String
+ * @param str
+ */
+ public static String BytesToTimer(byte[] bys){
+ StringBuilder s = new StringBuilder();
+ for (int i = 0; i < bys.length; i++) {
+ if(i==1){
+ s.append(String.format("%02d", (int)bys[i])+"-");
+ }
+ else if(i==3){
+ s.append(String.format("%02d", (int)bys[i]));
+ }
+ else{
+ s.append(String.format("%02d", (int)bys[i])+":");
+ }
+ }
+ return s.toString();
+ }
+
+ /**
+ * 设备信息
+ * @return
+ */
+ public static String formatDeviceInfo(BackBytes99 model){
+ String macAddress = ByteUtil.bytesToHexString(model.getSrc());
+ String wendu = (float)model.getWendu()/10f+"℃";
+ String low_wendu = (float)model.getLow_wendu()/10f+"℃";
+ String height_wendu = (float)model.getHigh_wendu()/10f+"℃";
+ String warn_onoff = String.valueOf(model.getWarn_onoff());
+ String onff1 = String.valueOf(model.getOnoff1());
+ String onff2 = String.valueOf(model.getOnoff2());
+ String onff3 = String.valueOf(model.getOnoff3());
+ String timer_time1 = BytesToTimer(model.getTimer_time1());
+ String timer_time2 = BytesToTimer(model.getTimer_time2());
+ String timer_time3 = BytesToTimer(model.getTimer_time3());
+ String timer_time4 = BytesToTimer(model.getTimer_time4());
+ String timer_time5 = BytesToTimer(model.getTimer_time5());
+ String timer_time6 = BytesToTimer(model.getTimer_time6());
+ String timer_time7 = BytesToTimer(model.getTimer_time7());
+ String timer_time8 = BytesToTimer(model.getTimer_time8());
+ String timer_time9 = BytesToTimer(model.getTimer_time9());
+ JSONObject json = new JSONObject();
+ try {
+ json.put("macAddress", macAddress);
+ json.put("wendu", wendu);
+ json.put("low_wendu", low_wendu);
+ json.put("height_wendu", height_wendu);
+ json.put("warn_onoff", warn_onoff);
+ json.put("onff1", onff1);
+ json.put("onff2", onff2);
+ json.put("onff3", onff3);
+ json.put("timer_time1", timer_time1);
+ json.put("timer_time2", timer_time2);
+ json.put("timer_time3", timer_time3);
+ json.put("timer_time4", timer_time4);
+ json.put("timer_time5", timer_time5);
+ json.put("timer_time6", timer_time6);
+ json.put("timer_time7", timer_time7);
+ json.put("timer_time8", timer_time8);
+ json.put("timer_time9", timer_time9);
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ return json.toString();
+ }
+}
diff --git a/src/main/java/com/ifish/util/CRC16.java b/src/main/java/com/ifish/util/CRC16.java
new file mode 100644
index 0000000..cec73d1
--- /dev/null
+++ b/src/main/java/com/ifish/util/CRC16.java
@@ -0,0 +1,88 @@
+package com.ifish.util;
+
+/**
+ * CRC16相关计算
+
+ * encode: utf-8
+ *
+ * @author trb
+ * @date 2014-12-25
+ */
+public class CRC16 {
+ static byte[] crc16_tab_h = { (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0,
+ (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1,
+ (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0,
+ (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0,
+ (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40 };
+
+ static byte[] crc16_tab_l = { (byte) 0x00, (byte) 0xC0, (byte) 0xC1, (byte) 0x01, (byte) 0xC3, (byte) 0x03, (byte) 0x02, (byte) 0xC2, (byte) 0xC6, (byte) 0x06, (byte) 0x07, (byte) 0xC7, (byte) 0x05, (byte) 0xC5, (byte) 0xC4, (byte) 0x04, (byte) 0xCC, (byte) 0x0C, (byte) 0x0D, (byte) 0xCD, (byte) 0x0F, (byte) 0xCF, (byte) 0xCE, (byte) 0x0E, (byte) 0x0A, (byte) 0xCA, (byte) 0xCB, (byte) 0x0B, (byte) 0xC9, (byte) 0x09, (byte) 0x08, (byte) 0xC8, (byte) 0xD8, (byte) 0x18, (byte) 0x19, (byte) 0xD9, (byte) 0x1B, (byte) 0xDB, (byte) 0xDA, (byte) 0x1A, (byte) 0x1E, (byte) 0xDE, (byte) 0xDF, (byte) 0x1F, (byte) 0xDD, (byte) 0x1D, (byte) 0x1C, (byte) 0xDC, (byte) 0x14, (byte) 0xD4, (byte) 0xD5, (byte) 0x15, (byte) 0xD7, (byte) 0x17, (byte) 0x16, (byte) 0xD6, (byte) 0xD2, (byte) 0x12,
+ (byte) 0x13, (byte) 0xD3, (byte) 0x11, (byte) 0xD1, (byte) 0xD0, (byte) 0x10, (byte) 0xF0, (byte) 0x30, (byte) 0x31, (byte) 0xF1, (byte) 0x33, (byte) 0xF3, (byte) 0xF2, (byte) 0x32, (byte) 0x36, (byte) 0xF6, (byte) 0xF7, (byte) 0x37, (byte) 0xF5, (byte) 0x35, (byte) 0x34, (byte) 0xF4, (byte) 0x3C, (byte) 0xFC, (byte) 0xFD, (byte) 0x3D, (byte) 0xFF, (byte) 0x3F, (byte) 0x3E, (byte) 0xFE, (byte) 0xFA, (byte) 0x3A, (byte) 0x3B, (byte) 0xFB, (byte) 0x39, (byte) 0xF9, (byte) 0xF8, (byte) 0x38, (byte) 0x28, (byte) 0xE8, (byte) 0xE9, (byte) 0x29, (byte) 0xEB, (byte) 0x2B, (byte) 0x2A, (byte) 0xEA, (byte) 0xEE, (byte) 0x2E, (byte) 0x2F, (byte) 0xEF, (byte) 0x2D, (byte) 0xED, (byte) 0xEC, (byte) 0x2C, (byte) 0xE4, (byte) 0x24, (byte) 0x25, (byte) 0xE5, (byte) 0x27, (byte) 0xE7,
+ (byte) 0xE6, (byte) 0x26, (byte) 0x22, (byte) 0xE2, (byte) 0xE3, (byte) 0x23, (byte) 0xE1, (byte) 0x21, (byte) 0x20, (byte) 0xE0, (byte) 0xA0, (byte) 0x60, (byte) 0x61, (byte) 0xA1, (byte) 0x63, (byte) 0xA3, (byte) 0xA2, (byte) 0x62, (byte) 0x66, (byte) 0xA6, (byte) 0xA7, (byte) 0x67, (byte) 0xA5, (byte) 0x65, (byte) 0x64, (byte) 0xA4, (byte) 0x6C, (byte) 0xAC, (byte) 0xAD, (byte) 0x6D, (byte) 0xAF, (byte) 0x6F, (byte) 0x6E, (byte) 0xAE, (byte) 0xAA, (byte) 0x6A, (byte) 0x6B, (byte) 0xAB, (byte) 0x69, (byte) 0xA9, (byte) 0xA8, (byte) 0x68, (byte) 0x78, (byte) 0xB8, (byte) 0xB9, (byte) 0x79, (byte) 0xBB, (byte) 0x7B, (byte) 0x7A, (byte) 0xBA, (byte) 0xBE, (byte) 0x7E, (byte) 0x7F, (byte) 0xBF, (byte) 0x7D, (byte) 0xBD, (byte) 0xBC, (byte) 0x7C, (byte) 0xB4, (byte) 0x74,
+ (byte) 0x75, (byte) 0xB5, (byte) 0x77, (byte) 0xB7, (byte) 0xB6, (byte) 0x76, (byte) 0x72, (byte) 0xB2, (byte) 0xB3, (byte) 0x73, (byte) 0xB1, (byte) 0x71, (byte) 0x70, (byte) 0xB0, (byte) 0x50, (byte) 0x90, (byte) 0x91, (byte) 0x51, (byte) 0x93, (byte) 0x53, (byte) 0x52, (byte) 0x92, (byte) 0x96, (byte) 0x56, (byte) 0x57, (byte) 0x97, (byte) 0x55, (byte) 0x95, (byte) 0x94, (byte) 0x54, (byte) 0x9C, (byte) 0x5C, (byte) 0x5D, (byte) 0x9D, (byte) 0x5F, (byte) 0x9F, (byte) 0x9E, (byte) 0x5E, (byte) 0x5A, (byte) 0x9A, (byte) 0x9B, (byte) 0x5B, (byte) 0x99, (byte) 0x59, (byte) 0x58, (byte) 0x98, (byte) 0x88, (byte) 0x48, (byte) 0x49, (byte) 0x89, (byte) 0x4B, (byte) 0x8B, (byte) 0x8A, (byte) 0x4A, (byte) 0x4E, (byte) 0x8E, (byte) 0x8F, (byte) 0x4F, (byte) 0x8D, (byte) 0x4D,
+ (byte) 0x4C, (byte) 0x8C, (byte) 0x44, (byte) 0x84, (byte) 0x85, (byte) 0x45, (byte) 0x87, (byte) 0x47, (byte) 0x46, (byte) 0x86, (byte) 0x82, (byte) 0x42, (byte) 0x43, (byte) 0x83, (byte) 0x41, (byte) 0x81, (byte) 0x80, (byte) 0x40 };
+
+ /**
+ * 计算CRC16校验
+ *
+ * @param data
+ * 需要计算的数组
+ * @return CRC16校验值
+ */
+ public static boolean calcCrc16(byte[] data) {
+ byte[] b = new byte[2];
+ int length = data.length;
+ int begin = length-2;
+ for (int i = begin; i < data.length; i++) {
+ b[i-begin]=data[i];
+ }
+ return ByteUtil.bytesToHexString(b).equals(String.format("%04x", calcCrc16(data, 0, data.length-2)));
+ }
+
+ /**
+ * 计算CRC16校验
+ *
+ * @param data
+ * 需要计算的数组
+ * @param offset
+ * 起始位置
+ * @param len
+ * 长度
+ * @return CRC16校验值
+ */
+ public static int calcCrc16(byte[] data, int offset, int len) {
+ return calcCrc16(data, offset, len, 0xffff);
+ }
+
+ /**
+ * 计算CRC16校验
+ *
+ * @param data
+ * 需要计算的数组
+ * @param offset
+ * 起始位置
+ * @param len
+ * 长度
+ * @param preval
+ * 之前的校验值
+ * @return CRC16校验值
+ */
+ public static int calcCrc16(byte[] data, int offset, int len, int preval) {
+ int ucCRCHi = (preval & 0xff00) >> 8;
+ int ucCRCLo = preval & 0x00ff;
+ int iIndex;
+ for (int i = 0; i < len; ++i) {
+ iIndex = (ucCRCLo ^ data[offset + i]) & 0x00ff;
+ ucCRCLo = ucCRCHi ^ crc16_tab_h[iIndex];
+ ucCRCHi = crc16_tab_l[iIndex];
+ }
+ return ((ucCRCHi & 0x00ff) << 8) | (ucCRCLo & 0x00ff) & 0xffff;
+ }
+
+ // 测试
+ public static void main(String[] args) {
+ // 0x02 05 00 03 FF 00 , crc16=7C 09
+ boolean bln = CRC16.calcCrc16(ByteUtil.hexStringToBytes("00 01 5C CF 7F 09 58 29 00 00 00 00 00 08 18 0A 0B 01 C0 A8 3D A2 2D 0C"));
+ System.out.println(bln);
+ }
+}
+
diff --git a/src/main/java/com/ifish/util/IfishUtil.java b/src/main/java/com/ifish/util/IfishUtil.java
new file mode 100644
index 0000000..83657de
--- /dev/null
+++ b/src/main/java/com/ifish/util/IfishUtil.java
@@ -0,0 +1,116 @@
+package com.ifish.util;
+
+import java.security.MessageDigest;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+
+public class IfishUtil {
+
+ private static final String formatDate ="yyyy-MM-dd HH:mm:ss";
+
+ private static final String formatDate1 ="yyyy-MM-dd";
+
+ /**
+ * 格式化日期yyyy-MM-dd HH:mm:ss
+ * @param date
+ * @return
+ */
+ public static String format(Date date){
+ SimpleDateFormat format = new SimpleDateFormat(formatDate);
+ return format.format(date);
+ }
+
+ /**
+ * 字符串转换成日期
+ * @param str
+ * @return date
+ */
+ public static Date StrToDate(String str) {
+ SimpleDateFormat format = new SimpleDateFormat(formatDate1);
+ Date date = null;
+ try {
+ date = format.parse(str);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ return date;
+ }
+
+ /**
+ * 随机生成字母与数字组合
+ * @param length
+ * @return
+ */
+ public static String getCharAndNumr(int length) {
+ String val = "";
+ Random random = new Random();
+ for (int i = 0; i < length; i++) {
+ // 输出字母还是数字
+ String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
+ // 字符串
+ if ("char".equalsIgnoreCase(charOrNum)) {
+ // 取得大写字母还是小写字母
+ int choice = random.nextInt(2) % 2 == 0 ? 65 : 97;
+ val += (char) (choice + random.nextInt(26));
+ // 数字
+ } else if ("num".equalsIgnoreCase(charOrNum)) {
+ val += String.valueOf(random.nextInt(10));
+ }
+ }
+ return val;
+ }
+ /**
+ * MD5实现方法
+ * @param str
+ * @return
+ */
+ public static String GetMD5(String str) {
+ MessageDigest md5 = null;
+ try {
+ md5 = MessageDigest.getInstance("MD5");
+ } catch (Exception e) {
+ e.printStackTrace();
+ return "";
+ }
+ char[] charArray = str.toCharArray();
+ byte[] byteArray = new byte[charArray.length];
+
+ for (int i = 0; i < charArray.length; i++) {
+ byteArray[i] = (byte) charArray[i];
+ }
+ byte[] md5Bytes = md5.digest(byteArray);
+ StringBuffer hexValue = new StringBuffer();
+ for (int i = 0; i < md5Bytes.length; i++) {
+ int val = ((int) md5Bytes[i]) & 0xff;
+ if (val < 16) {
+ hexValue.append("0");
+ }
+ hexValue.append(Integer.toHexString(val));
+ }
+ return hexValue.toString();
+ }
+ /**
+ * 返回json数据
+ * @param str
+ * @return
+ */
+ public static Object returnJson(String key,Object value) {
+ Map map = new HashMap();
+ try {
+ map.put("result", key);
+ if(value.equals("")){
+ map.put("data", null);
+ }
+ else{
+ map.put("data", value);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return map;
+ }
+}
diff --git a/src/main/java/com/ifish/webService/MyService.java b/src/main/java/com/ifish/webService/MyService.java
new file mode 100644
index 0000000..d85b318
--- /dev/null
+++ b/src/main/java/com/ifish/webService/MyService.java
@@ -0,0 +1,47 @@
+package com.ifish.webService;
+
+import javax.jws.WebService;
+
+import org.apache.mina.core.session.IoSession;
+
+import com.ifish.socketNew.SomeServer;
+import com.ifish.socketNew.model.send.OrderFunctionCode15;
+import com.ifish.socketNew.util.OrderModel;
+import com.ifish.util.ByteUtil;
+
+@WebService
+public class MyService {
+
+ //查询设备是否在线
+ public boolean deviceIsOnline(String macAddress){
+ if(macAddress!=null && macAddress.length()>0){
+ IoSession session = SomeServer.sessions_cz.get(macAddress);
+ if(session!=null){
+ if(session.getRemoteAddress()!=null){
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ //查询在线设备数量
+ public Integer getLineDeviceNumber(){
+ return SomeServer.sessions_cz.size();
+ }
+
+ //在线升级
+ public boolean onlineUpgrade(String macAddress,Integer upgradeVersion){
+ if(macAddress!=null && macAddress.length()>0 && upgradeVersion!=null){
+ IoSession session = SomeServer.sessions_cz.get(macAddress);
+ if(session!=null){
+ if(session.getRemoteAddress()!=null){
+ OrderFunctionCode15 model = OrderModel.OrderFunctionCode15(ByteUtil.hexStringToBytes2(macAddress),upgradeVersion);
+ session.write(model);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+}
diff --git a/src/main/java/com/ifish/webService/ServiceBean.java b/src/main/java/com/ifish/webService/ServiceBean.java
new file mode 100644
index 0000000..f5de9c6
--- /dev/null
+++ b/src/main/java/com/ifish/webService/ServiceBean.java
@@ -0,0 +1,9 @@
+package com.ifish.webService;
+
+import javax.xml.ws.Endpoint;
+
+public class ServiceBean {
+ public ServiceBean() {
+ Endpoint.publish("http://localhost:9001/Service/webService", new MyService());
+ }
+}
diff --git a/src/main/resources/application-context.xml b/src/main/resources/application-context.xml
new file mode 100644
index 0000000..b61f8d7
--- /dev/null
+++ b/src/main/resources/application-context.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ classpath:/com/ifish/entity/hbm/*.hbm.xml
+
+
+
+
+ ${hibernate.dialect}
+ ${hibernate.show_sql}
+ ${hibernate.format_sql}
+ ${hibernate.hbm2ddl.auto}
+ ${hibernate.query.substitutions}
+ ${"hibernate.jdbc.batch_size"}
+ ${hibernate.cache.use_second_level_cache}
+ ${hibernate.cache.use_query_cache}
+ ${hibernate.cache.region.factory_class}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${netease.appKey}
+
+
+
+ ${netease.appSecret}
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/jPpush.properties b/src/main/resources/jPpush.properties
new file mode 100644
index 0000000..362ee70
--- /dev/null
+++ b/src/main/resources/jPpush.properties
@@ -0,0 +1,16 @@
+#\u6781\u5149\u63a8\u9001
+#appKey
+jpush.android.appKey=d970d5e193cb2a0bbe41653c
+#secret
+jpush.android.secret=60162c8cf195ce9f4dc76629
+#production
+jpush.android.productionMode=true
+#appKey
+jpush.ios.appKey=d147124018074eb970474e48
+#secret
+jpush.ios.secret=a7d41825e75082b13675c326
+#production
+jpush.ios.productionMode=true
+#\u4e91\u4fe1IM
+netease.appKey=87b0e3315dfc2df08060bcb54246da68
+netease.appSecret=e62f6c247b46
diff --git a/src/main/resources/jdbc.properties b/src/main/resources/jdbc.properties
new file mode 100644
index 0000000..2b2d014
--- /dev/null
+++ b/src/main/resources/jdbc.properties
@@ -0,0 +1,32 @@
+c3p0.driverClassName=com.mysql.jdbc.Driver
+c3p0.url=jdbc\:mysql\://localhost\:3306/myfishdb?characterEncoding\=UTF-8
+c3p0.username=ifish
+c3p0.password=ifish7pwd
+#c3p0.username=root
+#c3p0.password=123456
+
+c3p0.autoCommitOnClose=true
+c3p0.initialPoolSize=20
+c3p0.minPoolSize=20
+c3p0.maxPoolSize=100
+c3p0.acquireIncrement=3
+
+c3p0.checkoutTimeout=5000
+c3p0.maxIdleTime=7200
+c3p0.idleConnectionTestPeriod=18000
+#c3p0.maxIdleTimeExcessConnections=1800
+
+#c3p0.automaticTestTable=C3P0TestTable
+#c3p0.testConnectionOnCheckout=false
+#c3p0.testConnectionOnCheckin=false
+
+#org.hibernate.dialect.MySQLInnoDBDialect
+hibernate.dialect=org.hibernate.dialect.MySQLDialect
+hibernate.show_sql=false
+hibernate.format_sql=true
+hibernate.hbm2ddl.auto=false
+hibernate.jdbc.batch_size=50
+hibernate.query.substitutions=true 1,false 0
+hibernate.cache.use_second_level_cache=false
+hibernate.cache.use_query_cache=false
+hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
\ No newline at end of file
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
new file mode 100644
index 0000000..a3d95ff
--- /dev/null
+++ b/src/main/resources/logback.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} 【%-5level】 【%logger{50}】 %msg%n
+ GBK
+
+
+
+
+
+ ${LOG_HOME}/ifishSocket/online.log
+
+ ${LOG_HOME}/ifishSocket/%d{yyyy-MM-dd}_online.log
+ 30
+
+ 100MB
+
+
+
+ %d{yyyy-MM-dd HH:mm:ss} 【%-5level】 【%logger{50}】 %msg%n
+ UTF-8
+
+
+ WARN
+
+
+
+
+
+ ${LOG_HOME}/ifishSocket/socket.log
+
+ ${LOG_HOME}/ifishSocket/%d{yyyy-MM-dd}_socket.log
+ 30
+
+ 100MB
+
+
+
+ %d{yyyy-MM-dd HH:mm:ss} 【%-5level】 【%logger{50}】 %msg%n
+ UTF-8
+
+
+ WARN
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/mina.xml b/src/main/resources/mina.xml
new file mode 100644
index 0000000..87cdc05
--- /dev/null
+++ b/src/main/resources/mina.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${ifish.ip}
+
+
+ ${ifish.port}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/property.properties b/src/main/resources/property.properties
new file mode 100644
index 0000000..9fae2d4
--- /dev/null
+++ b/src/main/resources/property.properties
@@ -0,0 +1,8 @@
+#\u672c\u5730
+ifish.ip=192.168.61.128
+#\u6d4b\u8bd5\u4e91
+#ifish.ip=139.196.24.156
+#\u6b63\u5f0f\u4e91
+#ifish.ip=120.55.190.56
+#\u670d\u52a1\u5668\u7aef\u53e3
+ifish.port=9955
\ No newline at end of file
diff --git a/src/main/webapp/META-INF/MANIFEST.MF b/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/src/main/webapp/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff --git a/src/main/webapp/META-INF/context.xml b/src/main/webapp/META-INF/context.xml
new file mode 100644
index 0000000..5bee3dc
--- /dev/null
+++ b/src/main/webapp/META-INF/context.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/src/main/webapp/WEB-INF/lib/mysql-connector-5.1.8.jar b/src/main/webapp/WEB-INF/lib/mysql-connector-5.1.8.jar
new file mode 100644
index 0000000..5a7c6fb
Binary files /dev/null and b/src/main/webapp/WEB-INF/lib/mysql-connector-5.1.8.jar differ
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..7bd141f
--- /dev/null
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,20 @@
+
+
+ Archetype Created Web Application
+
+
+ index.jsp
+
+
+
+ contextConfigLocation
+
+ classpath:application-context.xml
+ classpath:mina.xml
+
+
+
+ org.springframework.web.context.ContextLoaderListener
+
+
+
diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp
new file mode 100644
index 0000000..99ce2c8
--- /dev/null
+++ b/src/main/webapp/index.jsp
@@ -0,0 +1,11 @@
+<%@ page language="java" pageEncoding="utf-8"%>
+
+
+
+ 首页
+
+
+
+ 访问正常!
+
+