大亚湾电厂 app add mqtt

master
hwf453 1 year ago
parent 1dd0e5dd9a
commit 8c1670b09f

@ -1,6 +1,7 @@
package com.rehome.adminclientappmqttserver;
import com.rehome.adminclientappmqttserver.controller.UserController;
import com.rehome.adminclientappmqttserver.controller.UserDywController;
import com.rehome.adminclientappmqttserver.controller.UseryfController;
import com.rehome.adminclientappmqttserver.controller.UserzyController;
import org.mybatis.spring.annotation.MapperScan;
@ -33,7 +34,7 @@ public class AdminClientAppmqttserverApplication implements CommandLineRunner, A
/**
*/
@Autowired
@Resource
private UserController userController;
/**
@ -46,6 +47,12 @@ public class AdminClientAppmqttserverApplication implements CommandLineRunner, A
@Resource
private UserzyController userzyController;
/**
*/
@Resource
private UserDywController userDywController;
public static void main(String[] args) {
SpringApplication.run(AdminClientAppmqttserverApplication.class, args);
}
@ -59,10 +66,10 @@ public class AdminClientAppmqttserverApplication implements CommandLineRunner, A
//在这里可以调用applicationContext了
Map<String, Object> controllers = applicationContext.getBeansWithAnnotation(RequestMapping.class);
Gson gson = new Gson();
// for (Map.Entry<String, Object> entry : controllers.entrySet()) {
// System.out.println("------------------------");
// System.out.println(entry.getKey());//demo1Controller
// }
for (Map.Entry<String, Object> entry : controllers.entrySet()) {
System.out.println("------------------------");
System.out.println(entry.getKey());//demo1Controller
}
try {
//珠海电厂
if (userController != null) {
@ -96,6 +103,15 @@ public class AdminClientAppmqttserverApplication implements CommandLineRunner, A
} else {
System.out.println("UserzyController is empty");
}
//大亚湾综合能源 电厂
if (userDywController != null) {
System.out.println("------------------------");
System.out.println("UserDywController is not empty");
MqttRSAClientDywAPP client_dyw = new MqttRSAClientDywAPP();
client_dyw.start(userDywController);
} else {
System.out.println("UserDywController is empty");
}
} catch (Exception ex) {
ex.printStackTrace();
}

@ -0,0 +1,167 @@
package com.rehome.adminclientappmqttserver;
import com.google.gson.Gson;
import com.rehome.adminclientappmqttserver.controller.UserDywController;
import com.rehome.adminclientappmqttserver.entity.Userdyw;
import com.rehome.adminclientappmqttserver.utils.MqttSSLSocketFactory;
import com.rehome.adminclientappmqttserver.utils.UUIDUtil;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import javax.net.ssl.SSLSocketFactory;
import java.io.InputStream;
import java.util.Timer;
import java.util.TimerTask;
public class MqttRSAClientDywAPP {
/**
* ip
*/
public static final String MQTT_BROKER_HOST = "ssl://47.242.184.139:8883";
/**
*
*/
public static String MQTT_CLIENT_ID = "AppServer_disruptor_nmc_server_04";
/**
*
*/
public static String USERNAME = "admin";
/**
*
*/
public static String PASSWORD = "publish452131wW452131wW$";
/**
*
*/
public static String TOPIC_FILTER = "app_push_dyw";
private volatile static MqttClient mqttClient;
private static MqttConnectOptions options;
private static int qos = 2;
//定时器
private Timer timer;
public MqttRSAClientDywAPP(){
try {
MQTT_CLIENT_ID = UUIDUtil.getUUID();
// host为主机名clientid即连接MQTT的客户端ID一般以客户端唯一标识符表示
// MemoryPersistence设置clientid的保存形式默认为以内存保存
mqttClient = new MqttClient(MQTT_BROKER_HOST, MQTT_CLIENT_ID, new MemoryPersistence());
// 配置参数信息
options = new MqttConnectOptions();
// 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录
// 这里设置为true表示每次连接到服务器都以新的身份连接
options.setCleanSession(false);
// 设置用户名
options.setUserName(USERNAME);
// 设置密码
options.setPassword(PASSWORD.toCharArray());
// 设置超时时间 单位为秒
options.setConnectionTimeout(10);
// 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线但这个方法并没有重连的机制
options.setKeepAliveInterval(20);
//断线重连
options.setAutomaticReconnect(true);
//mqtt服务器端单双向加密
InputStream caCrtFile = this.getClass().getResourceAsStream("/sslHk/my_root_ca.crt");
InputStream crtFile = this.getClass().getResourceAsStream("/sslHk/client.crt");
InputStream keyFile = this.getClass().getResourceAsStream("/sslHk/client.key");
String password = "";
SSLSocketFactory socketFactory = MqttSSLSocketFactory.getTwoDirSocketFactory(caCrtFile,crtFile,keyFile,password);
options.setSocketFactory(socketFactory);
} catch (Exception e) {
e.printStackTrace();
}
}
public void start(UserDywController userController) {
try {
// 连接
mqttClient.connect(options);
// 订阅
mqttClient.subscribe(TOPIC_FILTER,qos);
// 设置回调
mqttClient.setCallback(new MqttCallbackExtended(){
@Override
public void connectionLost(Throwable throwable) {
System.out.println("connectionLost");
try {
mqttClient.reconnect();
} catch (MqttException e) {
e.printStackTrace();
}
}
@Override
public void messageArrived(String s, MqttMessage mqttMessage) {
System.out.println("topic:"+s);
System.out.println("Qos:"+mqttMessage.getQos());
System.out.println("message RSA:"+new String(mqttMessage.getPayload()));
System.out.println("大亚湾电厂APP收到mqtt消息");
try {
String messageDe = RSAAndroid.decryptByPrivateKeyForSpiltStr(new String(mqttMessage.getPayload()), RSAAndroid.privateRsaKey);
System.out.println("message content:"+messageDe);
Gson gson = new Gson();
Userdyw userInfo = gson.fromJson(messageDe,Userdyw.class);
System.out.println(userInfo.getUsername());
System.out.println(userInfo.getPassword());
System.out.println(userInfo.getDate());
System.out.println(userInfo.getImeinum());
System.out.println(userInfo.getPhonemodel());
System.out.println(userInfo.getSysversion());
System.out.println(userInfo.getAppversion());
userController.saveUser(userInfo);
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
System.out.println("deliveryComplete---------"+ iMqttDeliveryToken.isComplete());
}
@Override
public void connectComplete(boolean b, String s) {
//连接成功后调用
try {
mqttClient.subscribe(TOPIC_FILTER,qos);//具体订阅代码
} catch (MqttException e) {
e.printStackTrace();
}
}
});
timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
System.out.println("-------设定要指定任务--------");
try {
//判断拦截状态,这里注意一下,如果没有这个判断,是非常坑的
if (!mqttClient.isConnected()) {
System.out.println("***** 没有连接到服务器 *****");
System.out.println("***** client to connect *****");
// 重新连接
mqttClient.connect(options);
}
if (mqttClient.isConnected()) {//连接成功,跳出连接
System.out.println("***** connect success *****");
}
} catch (MqttException e1) {
e1.printStackTrace();
}
}
}, 10000,10000);
// 设定指定的时间time,此处为10000毫秒
} catch (Exception e) {
e.printStackTrace();
}
}
}

@ -8,6 +8,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* <p>
*
@ -20,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/user")
public class UserController {
@Autowired
@Resource
private UserService userService;
public void saveUser(User user){

@ -0,0 +1,30 @@
package com.rehome.adminclientappmqttserver.controller;
import com.rehome.adminclientappmqttserver.entity.User;
import com.rehome.adminclientappmqttserver.entity.Userdyw;
import com.rehome.adminclientappmqttserver.service.UserService;
import com.rehome.adminclientappmqttserver.service.UserdywService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
*
* @author huangwenfei
* @since 2024-11-05 10:04
*/
@RestController
@RequestMapping("/userDyw")
public class UserDywController {
@Resource
private UserdywService userdywService;
public void saveUser(Userdyw user){
userdywService.saveByUsername(user);
}
}

@ -7,6 +7,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* <p>
*
@ -19,7 +21,7 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/useryf")
public class UseryfController {
@Autowired
@Resource
private UseryfService userYfService;
public void saveUserYF(Useryf user){

@ -9,6 +9,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* <p>
*
@ -23,7 +25,7 @@ import org.springframework.web.bind.annotation.RestController;
public class UserzyController {
@Autowired
@Resource
private UserzyService userzyService;
public void saveUserZY(Userzy user){

@ -0,0 +1,11 @@
package com.rehome.adminclientappmqttserver.dao;
import com.rehome.adminclientappmqttserver.entity.Userdyw;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserdywRepository extends JpaRepository<Userdyw,String> {
//方法名称必须要遵循驼峰式命名规则findBy关键字+属性名称(首字母大写)+查询条件(首字母大写)
Userdyw findByUsername(String username);
}

@ -10,10 +10,6 @@ import javax.persistence.EntityListeners;
import javax.persistence.Id;
/**
* <p>
*
* </p>
*
* @author huangwenfei
* @since 2021-08-17
*/

@ -0,0 +1,41 @@
package com.rehome.adminclientappmqttserver.entity;
import java.io.Serializable;
import lombok.Data;
import org.hibernate.annotations.Proxy;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.Id;
/**
* @author huangwenfei
* @since 2024-11-05 09:49
*/
@EntityListeners(AuditingEntityListener.class)
@Proxy(lazy = false)
@Data
@Entity
public class Userdyw implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private String username;
private String password;
private String date;
@Column( length = 50)
private String imeinum;
@Column( length = 100)
private String sysversion;
private String phonemodel;
private String appversion;
}

@ -13,6 +13,6 @@ import com.rehome.adminclientappmqttserver.entity.User;
*/
public interface UserService {
public void saveByUsername(User user);
void saveByUsername(User user);
}

@ -0,0 +1,17 @@
package com.rehome.adminclientappmqttserver.service;
import com.rehome.adminclientappmqttserver.entity.Userdyw;
/**
* <p>
*
* </p>
*
* @author huangwenfei
* @since 2021-08-17
*/
public interface UserdywService {
void saveByUsername(Userdyw user);
}

@ -0,0 +1,26 @@
package com.rehome.adminclientappmqttserver.service.impl;
import com.rehome.adminclientappmqttserver.dao.UserdywRepository;
import com.rehome.adminclientappmqttserver.entity.Userdyw;
import com.rehome.adminclientappmqttserver.service.UserdywService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
*
* @author huangwenfei
* @since 2024-11-05 09:56
*/
@Service
@Transactional
public class UserdywServiceImpl implements UserdywService {
@Resource
private UserdywRepository userdywRepository;
@Override
public void saveByUsername(Userdyw user) {
this.userdywRepository.save(user);
}
}
Loading…
Cancel
Save