新增离线设备信息保存

This commit is contained in:
yiyan 2019-05-10 16:37:05 +08:00
parent d46bf9f62e
commit 09474f04bb
9 changed files with 250 additions and 80 deletions

View File

@ -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<DeviceOffline> getByCriterion(Criterion... criterions);
}

View File

@ -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<DeviceOffline, Integer> implements DeviceOfflineDao {
@Override
protected Class<DeviceOffline> 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<DeviceOffline> getByCriterion(Criterion... criterion) {
return super.findByProperty(criterion);
}
}

View File

@ -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;
}
}

View File

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.ifish.entity">
<class name="DeviceOffline" table="tbl_device_offline" dynamic-insert="true" dynamic-update="true">
<meta attribute="sync-DAO">false</meta>
<id name="offlineId" type="java.lang.Integer" column="offline_id">
<generator class="identity"/>
</id>
<property name="offlineMacAddress" column="offline_mac_address" type="string" length="50"/>
<property name="offlineFactoryCode" column="offline_factory_code" type="string" length="10"/>
<property name="offlineDeviceType" column="offline_device_type" type="string" length="10"/>
<property name="offlineTime" column="offline_time" type="date" />
<property name="offlineSdkVersion" column="offline_sdk_version" type="string" length="20"/>
</class>
</hibernate-mapping>

View File

@ -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,10 +23,6 @@ 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 {
@ -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<String, String> neteaseMap = neteaseIM.sendMsg("ifish", userId.toString(), msg);
// if(neteaseMap!=null){
// neteaseBln = neteaseMap.get("code").equals(NeteaseEnum.status200.getKey());
// }
boolean neteaseBln = false;
Map<String, String> 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<String,String> map = new HashMap<String, String>();
// 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<String,String> map = new HashMap<String, String>();
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));
}
}

View File

@ -38,4 +38,6 @@ public interface DeviceService {
FactoryList getFactoryListById(String factoryCode);
HardwareType getHardwareTypeById(String typeCode);
void saveDeviceOffline(DeviceOffline deviceOffline);
}

View File

@ -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<DeviceHeater> list = this.deviceHeaterDao.getByCriterion(queryList.toArray(new Criterion[queryList.size()]));
return list;
}
@Override
public void saveDeviceOffline(DeviceOffline deviceOffline) {
this.deviceOfflineDao.save(deviceOffline);
}
}

View File

@ -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;

View File

@ -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;
}
/**
* 随机生成字母与数字组合