diff --git a/src/main/java/com/ifish/dao/DeviceOfflineDao.java b/src/main/java/com/ifish/dao/DeviceOfflineDao.java new file mode 100644 index 0000000..747dafc --- /dev/null +++ b/src/main/java/com/ifish/dao/DeviceOfflineDao.java @@ -0,0 +1,25 @@ +package com.ifish.dao; + +import com.ifish.entity.DeviceOffline; +import org.hibernate.criterion.Criterion; + +import java.util.List; + +/** + * @author: yan.y + * @Description: + * @Date: Created in 20:06 2018/9/15 + * @Modified by: + */ +public interface DeviceOfflineDao { + + DeviceOffline findById(Integer id); + + DeviceOffline save(DeviceOffline device); + + DeviceOffline update(DeviceOffline device); + + DeviceOffline getUniqueByProperty(String property, Object value); + + List getByCriterion(Criterion... criterions); +} diff --git a/src/main/java/com/ifish/daoImpl/DeviceOfflineDaoImpl.java b/src/main/java/com/ifish/daoImpl/DeviceOfflineDaoImpl.java new file mode 100644 index 0000000..033052f --- /dev/null +++ b/src/main/java/com/ifish/daoImpl/DeviceOfflineDaoImpl.java @@ -0,0 +1,55 @@ +package com.ifish.daoImpl; + +import com.ifish.dao.DeviceOfflineDao; +import com.ifish.entity.DeviceHeater; +import com.ifish.entity.DeviceOffline; +import com.ifish.hibernate.HibernateBaseDao; +import org.hibernate.criterion.Criterion; +import org.hibernate.criterion.Restrictions; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @ClassName: DeviceOfflineDaoImpl + * @Description: TODO + * @author ggw + * + */ + +@Repository +public class DeviceOfflineDaoImpl extends HibernateBaseDao implements DeviceOfflineDao { + + + @Override + protected Class getEntityClass() { + return DeviceOffline.class; + } + + @Override + public DeviceOffline findById(Integer id) { + return this.get(id); + } + + @Override + public DeviceOffline getUniqueByProperty(String property, Object value) { + return this.findUniqueByProperty(Restrictions.eq(property, value)); + } + + @Override + public DeviceOffline save(DeviceOffline deviceOffline) { + this.getSession().save(deviceOffline); + return deviceOffline; + } + + @Override + public DeviceOffline update(DeviceOffline deviceOffline) { + this.getSession().update(deviceOffline); + return deviceOffline; + } + + @Override + public List getByCriterion(Criterion... criterion) { + return super.findByProperty(criterion); + } +} diff --git a/src/main/java/com/ifish/entity/DeviceOffline.java b/src/main/java/com/ifish/entity/DeviceOffline.java new file mode 100644 index 0000000..19b3d66 --- /dev/null +++ b/src/main/java/com/ifish/entity/DeviceOffline.java @@ -0,0 +1,73 @@ +package com.ifish.entity; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author: yan.y + * @Description: + * @Date: Created in 15:58 2019-05-10 + * @Modified by: + */ +public class DeviceOffline implements Serializable { + + private Integer offlineId; + + private String offlineMacAddress; + + private String offlineFactoryCode; + + private String offlineDeviceType; + + private Date offlineTime; + + private String offlineSdkVersion; + + public Integer getOfflineId() { + return offlineId; + } + + public void setOfflineId(Integer offlineId) { + this.offlineId = offlineId; + } + + public String getOfflineMacAddress() { + return offlineMacAddress; + } + + public void setOfflineMacAddress(String offlineMacAddress) { + this.offlineMacAddress = offlineMacAddress; + } + + public String getOfflineFactoryCode() { + return offlineFactoryCode; + } + + public void setOfflineFactoryCode(String offlineFactoryCode) { + this.offlineFactoryCode = offlineFactoryCode; + } + + public String getOfflineDeviceType() { + return offlineDeviceType; + } + + public void setOfflineDeviceType(String offlineDeviceType) { + this.offlineDeviceType = offlineDeviceType; + } + + public Date getOfflineTime() { + return offlineTime; + } + + public void setOfflineTime(Date offlineTime) { + this.offlineTime = offlineTime; + } + + public String getOfflineSdkVersion() { + return offlineSdkVersion; + } + + public void setOfflineSdkVersion(String offlineSdkVersion) { + this.offlineSdkVersion = offlineSdkVersion; + } +} diff --git a/src/main/java/com/ifish/entity/hbm/DeviceOffline.hbm.xml b/src/main/java/com/ifish/entity/hbm/DeviceOffline.hbm.xml new file mode 100644 index 0000000..b8d00b5 --- /dev/null +++ b/src/main/java/com/ifish/entity/hbm/DeviceOffline.hbm.xml @@ -0,0 +1,15 @@ + + + + + false + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/ifish/quartz/ExecuteJob.java b/src/main/java/com/ifish/quartz/ExecuteJob.java index efd1143..767a2eb 100644 --- a/src/main/java/com/ifish/quartz/ExecuteJob.java +++ b/src/main/java/com/ifish/quartz/ExecuteJob.java @@ -5,10 +5,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.ifish.entity.event.QueueEventBody; -import com.ifish.entity.event.QueueEventEntity; +import com.ifish.entity.*; +import com.ifish.util.IfishUtil; import org.apache.mina.core.session.IoSession; import org.quartz.Job; import org.quartz.JobDataMap; @@ -18,10 +16,6 @@ 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; @@ -29,13 +23,9 @@ import com.ifish.netease.NeteaseIM; import com.ifish.service.DeviceService; import com.ifish.service.UserService; import com.ifish.socketNew.SomeServer; -import org.springframework.jms.core.JmsTemplate; - -import javax.jms.Destination; -import javax.jms.Session; public class ExecuteJob implements Job { - + private static Logger log = LoggerFactory.getLogger(ExecuteJob.class); @Autowired private NeteaseIM neteaseIM; @@ -43,26 +33,31 @@ public class ExecuteJob implements Job { private UserService userService; @Autowired private DeviceService deviceService; - @Autowired - private JmsTemplate jmsTemplate; - @Autowired - private Destination ifish7PushQueueDestination; - 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); + 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){ - //记录次数 + //设备是否存在 + Device device = deviceService.getUniqueByProperty("macAddress", macAddress); + if(device!=null){ + //保存离线的设备信息 + DeviceOffline deviceOffline = new DeviceOffline(); + deviceOffline.setOfflineMacAddress(device.getMacAddress()); + deviceOffline.setOfflineFactoryCode(device.getFactoryCode()); + deviceOffline.setOfflineDeviceType(device.getHardwareType()); + deviceOffline.setOfflineSdkVersion(String.valueOf(device.getSdkVersion())); + deviceOffline.setOfflineTime(IfishUtil.StrToDate1(timestamp)); + deviceService.saveDeviceOffline(deviceOffline); + + //记录次数 Integer number1 = device.getNumber1(); Integer number2 = device.getNumber2(); Integer number3 = device.getNumber3(); @@ -77,50 +72,42 @@ public class ExecuteJob implements Job { 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()); -// } + 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; + 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()); + 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("ALL"); - 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); - JSONObject data = JSON.parseObject(JSON.toJSONString(pushList)); - QueueEventEntity eventEntity = new QueueEventEntity(); - eventEntity.setEventName("com.ifish7.mq.queues.event.PushNotifcationEvent"); - eventEntity.setEventProcess("deviceNotifcationPlus"); - QueueEventBody eventBody = new QueueEventBody("com.ifish7.mq.business.user.entity.TblPushList",data); - eventEntity.setEventBody(eventBody); - //推送至消息推送队列 - sendPushQueueMessage(JSONObject.toJSONString(eventEntity)); -// this.userService.save(pushList); -// } + 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); + } } } } @@ -129,14 +116,5 @@ public class ExecuteJob implements Job { e.printStackTrace(); log.error("error msg:{}",e.toString()); } - } - - /** - * 推送Push消息队列 - * @param json 内容 - */ - private void sendPushQueueMessage(final String json) { - jmsTemplate.send(ifish7PushQueueDestination,(Session session) -> session.createTextMessage(json)); } - } \ No newline at end of file diff --git a/src/main/java/com/ifish/service/DeviceService.java b/src/main/java/com/ifish/service/DeviceService.java index 605feef..e812e7f 100644 --- a/src/main/java/com/ifish/service/DeviceService.java +++ b/src/main/java/com/ifish/service/DeviceService.java @@ -38,4 +38,6 @@ public interface DeviceService { FactoryList getFactoryListById(String factoryCode); HardwareType getHardwareTypeById(String typeCode); + + void saveDeviceOffline(DeviceOffline deviceOffline); } diff --git a/src/main/java/com/ifish/serviceImpl/DeviceServiceImpl.java b/src/main/java/com/ifish/serviceImpl/DeviceServiceImpl.java index 938f2a4..aa87840 100644 --- a/src/main/java/com/ifish/serviceImpl/DeviceServiceImpl.java +++ b/src/main/java/com/ifish/serviceImpl/DeviceServiceImpl.java @@ -47,6 +47,8 @@ public class DeviceServiceImpl implements DeviceService { private FactoryListDao factoryListDao; @Autowired private HardwareTypeDao hardwareTypeDao; + @Autowired + private DeviceOfflineDao deviceOfflineDao; @Override public Device update(Device device) { @@ -193,4 +195,9 @@ public class DeviceServiceImpl implements DeviceService { List list = this.deviceHeaterDao.getByCriterion(queryList.toArray(new Criterion[queryList.size()])); return list; } + + @Override + public void saveDeviceOffline(DeviceOffline deviceOffline) { + this.deviceOfflineDao.save(deviceOffline); + } } diff --git a/src/main/java/com/ifish/socketNew/codeFactory/ServerDecode.java b/src/main/java/com/ifish/socketNew/codeFactory/ServerDecode.java index 67b2a73..274f1cc 100644 --- a/src/main/java/com/ifish/socketNew/codeFactory/ServerDecode.java +++ b/src/main/java/com/ifish/socketNew/codeFactory/ServerDecode.java @@ -71,6 +71,7 @@ public class ServerDecode implements ProtocolDecoder { 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); //计算包长度 @@ -101,11 +102,10 @@ public class ServerDecode implements ProtocolDecoder { //crc16校验 //boolean bln = CRC16.calcCrc16(ByteUtil.hexStringToBytes(hexDump)); switch (length) { - //长度为22 case 31: { functionBackHeater(bytes,buf, out); break; - } + }//长度为22 case 22:{ //设置报警温度 if(check_code==5){ @@ -128,7 +128,7 @@ public class ServerDecode implements ProtocolDecoder { case 24:{ if(check_code==1){ functionCode1(buf, out); - }else{ + } else { out.write(bytes); } break; @@ -137,7 +137,7 @@ public class ServerDecode implements ProtocolDecoder { case 25:{ if(check_code==0){ functionCode0(buf, out); - }else{ + } else { out.write(bytes); } break; @@ -146,7 +146,7 @@ public class ServerDecode implements ProtocolDecoder { case 42:{ if(check_code==17){ functionCode17(buf, out); - }else{ + } else { out.write(bytes); } break; diff --git a/src/main/java/com/ifish/util/IfishUtil.java b/src/main/java/com/ifish/util/IfishUtil.java index cdba844..6c9b894 100644 --- a/src/main/java/com/ifish/util/IfishUtil.java +++ b/src/main/java/com/ifish/util/IfishUtil.java @@ -49,6 +49,21 @@ public class IfishUtil { } return date; } + /** + * 字符串转换成日期 + * @param str + * @return date + */ + public static Date StrToDate1(String str) { + SimpleDateFormat format = new SimpleDateFormat(formatDate); + Date date = null; + try { + date = format.parse(str); + } catch (ParseException e) { + e.printStackTrace(); + } + return date; + } /** * 随机生成字母与数字组合