Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d43acc31d9 | ||
|
|
58b76371c5 | ||
|
|
e9a698c728 | ||
|
|
118729ccb2 | ||
|
|
2248060905 | ||
|
|
17eb0c69ff | ||
|
|
985ec252c6 | ||
|
|
4c41f6f77e | ||
|
|
90003d79c5 | ||
|
|
7871c2ac70 | ||
|
|
778ab69fbc | ||
|
|
c403b07aeb |
@@ -0,0 +1,35 @@
|
||||
package org.dromara.mica.mqtt.server.config;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.scheduling.TaskScheduler;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
|
||||
|
||||
/**
|
||||
* 定时任务线程池配置
|
||||
* 解决默认定时任务线程池(大小为1)被阻塞导致所有定时任务无法执行的问题
|
||||
*/
|
||||
@Slf4j
|
||||
@Configuration
|
||||
@EnableScheduling
|
||||
public class SchedulerConfig {
|
||||
|
||||
@Bean
|
||||
public TaskScheduler taskScheduler() {
|
||||
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
|
||||
// 增加线程池大小,避免单线程阻塞影响所有定时任务
|
||||
scheduler.setPoolSize(5);
|
||||
scheduler.setThreadNamePrefix("mqtt-scheduler-");
|
||||
// 等待所有任务完成后再关闭
|
||||
scheduler.setWaitForTasksToCompleteOnShutdown(true);
|
||||
// 等待时间
|
||||
scheduler.setAwaitTerminationSeconds(60);
|
||||
// 设置异常处理器,确保异常被记录但不中断定时任务
|
||||
scheduler.setErrorHandler(throwable -> {
|
||||
log.error("定时任务执行异常", throwable);
|
||||
});
|
||||
return scheduler;
|
||||
}
|
||||
}
|
||||
@@ -3,10 +3,7 @@ package org.dromara.mica.mqtt.server.controller;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import org.dromara.mica.mqtt.server.service.impl.ServerService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@RequestMapping("/mqtt/server")
|
||||
@RestController
|
||||
@@ -52,4 +49,55 @@ public class ServerController {
|
||||
return service.set_time(body);
|
||||
}
|
||||
|
||||
//手动触发抬杆
|
||||
@PostMapping("/gpio_out")
|
||||
public boolean gpio_out(@RequestBody JSONObject js) {
|
||||
String sn = js.getString("sn");
|
||||
Integer io = js.getInteger("io");
|
||||
Integer value = js.getInteger("value");
|
||||
return service.gpio_out(sn, io, value);
|
||||
}
|
||||
|
||||
@PostMapping("/set_io_lock_status")
|
||||
public JSONObject lock(@RequestBody JSONObject js) {
|
||||
String sn = js.getString("sn");
|
||||
Integer status = js.getInteger("status");
|
||||
Integer ioout = js.getInteger("ioout");
|
||||
boolean publish = service.set_io_lock_status(sn, status,ioout);
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
if (publish) {
|
||||
jsonObject.put("code", 200);
|
||||
} else {
|
||||
jsonObject.put("code", 500);
|
||||
}
|
||||
return jsonObject;
|
||||
}
|
||||
|
||||
//开闸
|
||||
@PostMapping("/set_io_lock_open")
|
||||
public JSONObject lockOpen(@RequestBody JSONObject js) {
|
||||
String sn = js.getString("sn");
|
||||
boolean publish = service.lockOpen(sn);
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
if (publish) {
|
||||
jsonObject.put("code", 200);
|
||||
} else {
|
||||
jsonObject.put("code", 500);
|
||||
}
|
||||
return jsonObject;
|
||||
}
|
||||
|
||||
//关闸
|
||||
@PostMapping("/set_io_lock_close")
|
||||
public JSONObject lockClose(@RequestBody JSONObject js) {
|
||||
String sn = js.getString("sn");
|
||||
boolean publish = service.lockClose(sn);
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
if (publish) {
|
||||
jsonObject.put("code", 200);
|
||||
} else {
|
||||
jsonObject.put("code", 500);
|
||||
}
|
||||
return jsonObject;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package org.dromara.mica.mqtt.server.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
@@ -16,6 +18,7 @@ public class CarInfo implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** customer_id */
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long customerId;
|
||||
|
||||
/** 白名单生效时间 */
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package org.dromara.mica.mqtt.server.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
@@ -22,6 +24,7 @@ public class CarParkItem implements Serializable {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
@@ -44,4 +47,14 @@ public class CarParkItem implements Serializable {
|
||||
*/
|
||||
private String area;
|
||||
|
||||
/**
|
||||
* 车位数量
|
||||
*/
|
||||
private Integer carsNum;
|
||||
|
||||
/**
|
||||
* 满车位自动锁杆:0:不锁,1:锁
|
||||
*/
|
||||
private Integer autoLock;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package org.dromara.mica.mqtt.server.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
@@ -22,6 +24,7 @@ public class CarPassGather implements Serializable {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO )
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package org.dromara.mica.mqtt.server.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
@@ -24,6 +24,7 @@ public class CarPassRecord implements Serializable {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package org.dromara.mica.mqtt.server.entity;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
@@ -8,19 +10,17 @@ import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@TableName("sys_equipment")
|
||||
public class Equipment implements Serializable {
|
||||
@TableName("sys_io_lock_equipment")
|
||||
public class IoLockEquipment implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
||||
/** 设备Id */
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
/** 所属产品Id */
|
||||
private Long productId;
|
||||
|
||||
/** 设备名称 */
|
||||
private String name;
|
||||
|
||||
@@ -33,15 +33,6 @@ public class Equipment implements Serializable {
|
||||
/** 设备密码 */
|
||||
private String password;
|
||||
|
||||
/** 设备区域 */
|
||||
private Long spaceId;
|
||||
|
||||
/** 设备位置 */
|
||||
private Long pointId;
|
||||
|
||||
/** 对接状态(0未对接 1对接成功) */
|
||||
private Long state;
|
||||
|
||||
/** 设备状态(0在线 1离线) */
|
||||
private String flag;
|
||||
|
||||
@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.dromara.mica.mqtt.core.annotation.MqttServerFunction;
|
||||
@@ -20,6 +21,7 @@ import org.dromara.mica.mqtt.server.service.ICarParkItemService;
|
||||
import org.dromara.mica.mqtt.server.service.ICarParkRecordService;
|
||||
import org.dromara.mica.mqtt.server.service.ICarPassGatherService;
|
||||
import org.dromara.mica.mqtt.server.service.ICarPassRecordService;
|
||||
import org.dromara.mica.mqtt.server.service.impl.ServerService;
|
||||
import org.dromara.mica.mqtt.server.utils.AESUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -29,6 +31,7 @@ import org.tio.utils.hutool.StrUtil;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@@ -44,22 +47,21 @@ public class CarMessageListener {
|
||||
@Autowired
|
||||
RedisService redisService;
|
||||
|
||||
@Autowired
|
||||
ICarParkRecordService carParkRecordService;
|
||||
// @Autowired
|
||||
// ICarParkRecordService carParkRecordService;
|
||||
//
|
||||
// @Autowired
|
||||
// ICarPassRecordService carPassRecordService;
|
||||
//
|
||||
// @Autowired
|
||||
// ICarParkItemService carParkItemService;
|
||||
//
|
||||
// @Autowired
|
||||
// ICarPassGatherService carPassGatherService;
|
||||
|
||||
@Autowired
|
||||
ICarPassRecordService carPassRecordService;
|
||||
|
||||
@Autowired
|
||||
ICarParkItemService carParkItemService;
|
||||
|
||||
@Autowired
|
||||
ICarPassGatherService carPassGatherService;
|
||||
|
||||
private static String key = "1234567898765432";
|
||||
// private static String key = "1234567898765432";
|
||||
|
||||
// private String jinjiangUrl = "http://127.0.0.1:6609/";
|
||||
private String jinjiangUrl = "http://192.168.155.42:6609/";
|
||||
|
||||
/**
|
||||
* 心跳
|
||||
@@ -82,7 +84,7 @@ public class CarMessageListener {
|
||||
* @param topic
|
||||
* @param message
|
||||
*/
|
||||
@MqttServerFunction("device/${sn}/message/down/white_list_operator/reply")
|
||||
/*@MqttServerFunction("device/${sn}/message/down/white_list_operator/reply")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void white_list_operator_reply(String topic, byte[] message) {
|
||||
log.info("接收到车牌下发消息 -> Topic: {}, message: {}", topic, new String(message));
|
||||
@@ -102,7 +104,7 @@ public class CarMessageListener {
|
||||
carParkRecord.setSync("1");
|
||||
}
|
||||
carParkRecordService.updateByClientId(carParkRecord);
|
||||
}
|
||||
}*/
|
||||
|
||||
/**
|
||||
* 车牌入场出场识别监听
|
||||
@@ -114,66 +116,98 @@ public class CarMessageListener {
|
||||
public void ivs_result(String topic, Map<String, String> topicVars, byte[] message) throws Exception {
|
||||
String sn = topicVars.get("sn");
|
||||
log.info("接收到车辆识别消息 -> Topic: {}", topic);
|
||||
String data = new String(message, StandardCharsets.UTF_8);
|
||||
JSONObject jsonObject = JSONObject.parseObject(data);
|
||||
JSONObject payload = jsonObject.getJSONObject("payload");
|
||||
String id = jsonObject.getString("id");
|
||||
JSONObject alarmInfoPlate = payload.getJSONObject("AlarmInfoPlate");
|
||||
JSONObject result = alarmInfoPlate.getJSONObject("result");
|
||||
JSONObject plateResult = result.getJSONObject("PlateResult");
|
||||
JSONObject carBrand = plateResult.getJSONObject("car_brand");
|
||||
String license = plateResult.getString("license");
|
||||
String colorType = plateResult.getString("colorType");
|
||||
String str = "";
|
||||
if ("5".equals(colorType)) {
|
||||
str = AESUtil.decrptyAES_ECB(license, key).substring(0, 20);
|
||||
} else {
|
||||
str = AESUtil.decrptyAES_ECB(license, key).substring(0, 18);
|
||||
}
|
||||
|
||||
license = AESUtil.UTF8decode(str);
|
||||
log.info("解密前车牌:{},解谜后的车牌:{}", plateResult.getString("license"), license);
|
||||
|
||||
//保存通行记录
|
||||
CarPassRecord record = new CarPassRecord();
|
||||
record.setCarColor(plateResult.getString("carColor"));
|
||||
record.setColorType(colorType);
|
||||
record.setDirection(plateResult.getString("direction"));
|
||||
record.setLicense(license);
|
||||
record.setDataType("0");
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
paramMap.put("url", plateResult.getString("full_image_content"));
|
||||
String repose = HttpUtil.createPost(jinjiangUrl + "file/uploadMinioCarBase64")
|
||||
.body(JSON.toJSONString(paramMap))
|
||||
.execute()
|
||||
.body();
|
||||
log.info("imgRsp:{}", repose);
|
||||
JSONObject imgRsp = JSONObject.parseObject(repose);
|
||||
if (null != imgRsp && imgRsp.getInteger("code") == 200) {
|
||||
record.setUrl(imgRsp.getJSONObject("data").getString("url"));
|
||||
}
|
||||
//
|
||||
// //如果开启了锁杆,且车位满了
|
||||
// CarParkItem carParkItem = carParkItemService.selectBySn(sn);
|
||||
// long count = carPassGatherService.count(new QueryWrapper<CarPassGather>().eq("park_id", carParkItem.getParkId()));
|
||||
// if (StrUtil.equals(carParkItem.getWay(), "0") //入场
|
||||
// && carParkItem.getAutoLock() == 1 //开启了锁杆
|
||||
// && count >= carParkItem.getCarsNum()) { //车位满了
|
||||
// log.info("车位满了,不记录入场数据");
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// String data = new String(message, StandardCharsets.UTF_8);
|
||||
// JSONObject jsonObject = JSONObject.parseObject(data);
|
||||
// JSONObject payload = jsonObject.getJSONObject("payload");
|
||||
// String id = jsonObject.getString("id");
|
||||
// JSONObject alarmInfoPlate = payload.getJSONObject("AlarmInfoPlate");
|
||||
// JSONObject result = alarmInfoPlate.getJSONObject("result");
|
||||
// JSONObject plateResult = result.getJSONObject("PlateResult");
|
||||
// JSONObject carBrand = plateResult.getJSONObject("car_brand");
|
||||
// String license = plateResult.getString("license");
|
||||
// String colorType = plateResult.getString("colorType");
|
||||
// String str = "";
|
||||
// if ("5".equals(colorType)) {
|
||||
// str = AESUtil.decrptyAES_ECB(license, key).substring(0, 20);
|
||||
// } else {
|
||||
// str = AESUtil.decrptyAES_ECB(license, key).substring(0, 18);
|
||||
// }
|
||||
//
|
||||
// license = AESUtil.UTF8decode(str);
|
||||
// log.info("解密前车牌:{},解谜后的车牌:{}", plateResult.getString("license"), license);
|
||||
//
|
||||
// //保存通行记录
|
||||
// CarPassRecord record = new CarPassRecord();
|
||||
// record.setCarColor(plateResult.getString("carColor"));
|
||||
// record.setColorType(colorType);
|
||||
// record.setDirection(plateResult.getString("direction"));
|
||||
// record.setLicense(license);
|
||||
// record.setDataType("0");
|
||||
// Map<String, Object> paramMap = new HashMap<>();
|
||||
// paramMap.put("url", plateResult.getString("full_image_content"));
|
||||
// String repose = HttpUtil.createPost(jinjiangUrl + "file/uploadMinioCarBase64")
|
||||
// .body(JSON.toJSONString(paramMap))
|
||||
// .execute()
|
||||
// .body();
|
||||
// log.info("imgRsp:{}", repose);
|
||||
// JSONObject imgRsp = JSONObject.parseObject(repose);
|
||||
// if (null != imgRsp && imgRsp.getInteger("code") == 200) {
|
||||
// record.setUrl(imgRsp.getJSONObject("data").getString("url"));
|
||||
// }
|
||||
// if (plateResult.containsKey("start_time")) {
|
||||
// log.info("拿到了时间:{}", plateResult.getLong("start_time"));
|
||||
// record.setPassTime(DateUtil.date(plateResult.getLong("start_time")));
|
||||
record.setPassTime(new Date());
|
||||
record.setSn(sn);
|
||||
record.setUniqueNo(id);
|
||||
record.setTriggerType(plateResult.getString("triggerType"));
|
||||
record.setType(carBrand.getString("type"));
|
||||
carPassRecordService.save(record);
|
||||
|
||||
//保存/删除在场数据
|
||||
CarParkItem carParkItem = carParkItemService.selectBySn(sn);
|
||||
//入场新增数据
|
||||
if (StrUtil.equals(carParkItem.getWay(), "0")) {
|
||||
CarPassGather carPassGather = new CarPassGather();
|
||||
carPassGather.setLicense(license);
|
||||
carPassGather.setParkId(carParkItem.getParkId());
|
||||
carPassGather.setArea(carParkItem.getArea());
|
||||
carPassGather.setJoinTime(record.getPassTime());
|
||||
carPassGather.setSn(sn);
|
||||
carPassGatherService.save(carPassGather);
|
||||
} else {//出场删除数据
|
||||
carPassGatherService.deleteByLicense(license);
|
||||
}
|
||||
// } else {
|
||||
// log.info("没有拿到时间,默认当前时间");
|
||||
// record.setPassTime(DateUtil.date(new Date()));
|
||||
// }
|
||||
// record.setSn(sn);
|
||||
// record.setUniqueNo(id);
|
||||
// record.setParkId(carParkItem.getParkId());
|
||||
// record.setTriggerType(plateResult.getString("triggerType"));
|
||||
// record.setType(carBrand.getString("type"));
|
||||
// carPassRecordService.save(record);
|
||||
//
|
||||
// //保存/删除在场数据
|
||||
// boolean isExist = carPassGatherService.exists(new QueryWrapper<CarPassGather>().eq("license", license).eq("park_id", carParkItem.getParkId()));
|
||||
// //入场新增数据
|
||||
// if (StrUtil.equals(carParkItem.getWay(), "0") && !isExist) {
|
||||
// CarPassGather carPassGather = new CarPassGather();
|
||||
// carPassGather.setLicense(license);
|
||||
// carPassGather.setParkId(carParkItem.getParkId());
|
||||
// carPassGather.setArea(carParkItem.getArea());
|
||||
// carPassGather.setJoinTime(record.getPassTime());
|
||||
// carPassGather.setSn(sn);
|
||||
// carPassGatherService.save(carPassGather);
|
||||
//
|
||||
// //最后一辆车进场
|
||||
// if (carParkItem.getAutoLock() == 1 && (count + 1) >= carParkItem.getCarsNum()) {
|
||||
// List<String> snList = carParkItemService.selectSnByParkId(carParkItem.getParkId());
|
||||
// for (String s : snList) {
|
||||
// service.locked(s, 2, 0);
|
||||
// }
|
||||
// }
|
||||
// } else if (StrUtil.equals(carParkItem.getWay(), "1") && isExist) {//出场删除数据
|
||||
// carPassGatherService.deleteByLicense(license);
|
||||
// //出去一辆车,有空位
|
||||
// if (carParkItem.getAutoLock() == 1 && count == carParkItem.getCarsNum()) {
|
||||
// List<String> snList = carParkItemService.selectSnByParkId(carParkItem.getParkId());
|
||||
// for (String s : snList) {
|
||||
// service.locked(s, 0, 0);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -182,7 +216,7 @@ public class CarMessageListener {
|
||||
* @param topic
|
||||
* @param message
|
||||
*/
|
||||
@MqttServerFunction("device/${sn}/message/up/ivs_result_offline")
|
||||
/*@MqttServerFunction("device/${sn}/message/up/ivs_result_offline")
|
||||
public void ivs_result_offline(String topic, Map<String, String> topicVars, byte[] message) throws Exception {
|
||||
String sn = topicVars.get("sn");
|
||||
log.info("接收到车辆离线识别消息 -> Topic: {}", topic);
|
||||
@@ -225,14 +259,19 @@ public class CarMessageListener {
|
||||
if (null != imgRsp && imgRsp.getInteger("code") == 200) {
|
||||
record.setUrl(imgRsp.getJSONObject("data").getString("url"));
|
||||
}
|
||||
// record.setPassTime(DateUtil.date(plateResult.getLong("start_time")));
|
||||
record.setPassTime(new Date());
|
||||
if (plateResult.containsKey("start_time")) {
|
||||
log.info("拿到了离线时间:{}", plateResult.getLong("start_time"));
|
||||
record.setPassTime(DateUtil.date(plateResult.getLong("start_time")));
|
||||
} else {
|
||||
log.info("没有拿到离线时间,默认当前时间");
|
||||
record.setPassTime(DateUtil.date(new Date()));
|
||||
}
|
||||
record.setSn(sn);
|
||||
record.setUniqueNo(id);
|
||||
record.setTriggerType(plateResult.getString("triggerType"));
|
||||
record.setType(carBrand.getString("type"));
|
||||
carPassRecordService.save(record);
|
||||
}
|
||||
}*/
|
||||
|
||||
/**
|
||||
* IO输出事件监听
|
||||
@@ -258,9 +297,36 @@ public class CarMessageListener {
|
||||
public void set_io_lock_status(String topic, byte[] message) {
|
||||
log.info("IO锁定事件监听消息 -> Topic: {}, message: {}", topic, new String(message));
|
||||
String data = new String(message, StandardCharsets.UTF_8);
|
||||
log.info("IO锁定事件监听:{}", data);
|
||||
JSONObject jsonObject = JSONObject.parseObject(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发布获取IO锁定状态监听
|
||||
*
|
||||
* @param topic
|
||||
* @param message
|
||||
*/
|
||||
@MqttServerFunction("device/${sn}/message/down/get_io_lock_status/reply")
|
||||
public void get_io_lock_status(String topic, byte[] message) {
|
||||
log.info("发布获取IO锁定状态监听消息 -> Topic: {}, message: {}", topic, new String(message));
|
||||
String data = new String(message, StandardCharsets.UTF_8);
|
||||
JSONObject jsonObject = JSONObject.parseObject(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发布获取IO状态监听
|
||||
*
|
||||
* @param topic
|
||||
* @param message
|
||||
*/
|
||||
@MqttServerFunction("device/${sn}/message/down/get_io_status/reply")
|
||||
public void get_io_status(String topic, byte[] message) {
|
||||
log.info("发布获取IO状态监听消息 -> Topic: {}, message: {}", topic, new String(message));
|
||||
String data = new String(message, StandardCharsets.UTF_8);
|
||||
JSONObject jsonObject = JSONObject.parseObject(data);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 订阅离线数据数量
|
||||
*
|
||||
|
||||
@@ -16,13 +16,10 @@
|
||||
|
||||
package org.dromara.mica.mqtt.server.listener;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.mica.mqtt.core.server.event.IMqttConnectStatusListener;
|
||||
import org.dromara.mica.mqtt.server.constant.CacheConstants;
|
||||
import org.dromara.mica.mqtt.server.entity.Equipment;
|
||||
import org.dromara.mica.mqtt.server.enums.FlagEnums;
|
||||
import org.dromara.mica.mqtt.server.mapper.EquipmentMapper;
|
||||
import org.dromara.mica.mqtt.server.redis.RedisService;
|
||||
import org.dromara.mica.mqtt.server.service.IEquipmentService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -30,8 +27,6 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.tio.core.ChannelContext;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* mqtt 连接状态
|
||||
*
|
||||
|
||||
@@ -12,6 +12,9 @@ import java.util.List;
|
||||
@Mapper
|
||||
public interface CarParkItemMapper extends BaseMapper<CarParkItem> {
|
||||
|
||||
@Select("SELECT p.id,p.park_id parkId,p.way,p.equipment_id equipmentId,p.area FROM car_park_item p left join sys_equipment e on p.equipment_id = e.id where e.sequence = #{sn} and e.product_id = 4 limit 1")
|
||||
@Select("SELECT p.id,p.park_id parkId,k.auto_lock autoLock,k.cars_num carsNum,p.way,p.equipment_id equipmentId,p.area FROM car_park_item p left join sys_equipment e on p.equipment_id = e.id LEFT JOIN car_park k on p.park_id = k.id where e.sequence = #{sn} and e.product_id = 4 limit 1")
|
||||
CarParkItem selectBySn(@Param("sn") String sn);
|
||||
|
||||
@Select("SELECT e.sequence FROM car_park_item p left join sys_equipment e on p.equipment_id = e.id where p.park_id = #{parkId} and p.way = 0 and e.product_id = 4")
|
||||
List<String> selectSnByParkId(@Param("parkId") String parkId);
|
||||
}
|
||||
|
||||
@@ -2,10 +2,9 @@ package org.dromara.mica.mqtt.server.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.dromara.mica.mqtt.server.entity.CarInfo;
|
||||
import org.dromara.mica.mqtt.server.entity.Equipment;
|
||||
import org.dromara.mica.mqtt.server.entity.IoLockEquipment;
|
||||
|
||||
@Mapper
|
||||
public interface EquipmentMapper extends BaseMapper<Equipment> {
|
||||
public interface EquipmentMapper extends BaseMapper<IoLockEquipment> {
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package org.dromara.mica.mqtt.server.pojo;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class DeviceIOLockRequestPO {
|
||||
/**
|
||||
* 消息ID,用于关联具体消息
|
||||
*/
|
||||
@JsonProperty("id")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 设备序列号
|
||||
*/
|
||||
@JsonProperty("sn")
|
||||
private String sn;
|
||||
|
||||
/**
|
||||
* 消息名称
|
||||
*/
|
||||
@JsonProperty("name")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 消息版本,目前都填1.0
|
||||
*/
|
||||
@JsonProperty("version")
|
||||
private String version = "1.0";
|
||||
|
||||
/**
|
||||
* 时间戳
|
||||
*/
|
||||
@JsonProperty("timestamp")
|
||||
private long timestamp = System.currentTimeMillis() / 1000;
|
||||
|
||||
/**
|
||||
* 消息负载
|
||||
*/
|
||||
@JsonProperty("payload")
|
||||
private JSONObject payload;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package org.dromara.mica.mqtt.server.pojo;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
|
||||
@Data
|
||||
public class OpenFloodgatePO {
|
||||
/**
|
||||
* 消息ID,用于关联具体消息
|
||||
*/
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 设备序列号
|
||||
*/
|
||||
private String sn;
|
||||
|
||||
/**
|
||||
* 消息名称(固定为gpio_out)
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 消息版本(目前都填1.0)
|
||||
*/
|
||||
private String version = "1.0";
|
||||
|
||||
/**
|
||||
* 时间戳
|
||||
*/
|
||||
private Long timestamp = System.currentTimeMillis() / 1000;
|
||||
|
||||
/**
|
||||
* 消息负载
|
||||
*/
|
||||
private JSONObject payload;
|
||||
|
||||
}
|
||||
@@ -80,7 +80,11 @@ public class RedisService {
|
||||
*/
|
||||
public <T> void setCacheObject(final String key, final T value, final Long timeout, final TimeUnit timeUnit)
|
||||
{
|
||||
try {
|
||||
redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
|
||||
} catch (Exception e) {
|
||||
log.error("Redis setCacheObject error: key={}", key, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -127,7 +131,12 @@ public class RedisService {
|
||||
*/
|
||||
public Boolean hasKey(String key)
|
||||
{
|
||||
try {
|
||||
return redisTemplate.hasKey(key);
|
||||
} catch (Exception e) {
|
||||
log.error("Redis hasKey error: key={}", key, e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -138,8 +147,13 @@ public class RedisService {
|
||||
*/
|
||||
public <T> T getCacheObject(final String key)
|
||||
{
|
||||
try {
|
||||
ValueOperations<String, T> operation = redisTemplate.opsForValue();
|
||||
return operation.get(key);
|
||||
} catch (Exception e) {
|
||||
log.error("Redis getCacheObject error: key={}", key, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,7 +3,11 @@ package org.dromara.mica.mqtt.server.service;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.mica.mqtt.server.entity.CarParkItem;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ICarParkItemService extends IService<CarParkItem> {
|
||||
|
||||
CarParkItem selectBySn(String sn);
|
||||
|
||||
List<String> selectSnByParkId(String parkId);
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package org.dromara.mica.mqtt.server.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.mica.mqtt.server.entity.Equipment;
|
||||
import org.dromara.mica.mqtt.server.entity.IoLockEquipment;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IEquipmentService extends IService<Equipment> {
|
||||
public interface IEquipmentService extends IService<IoLockEquipment> {
|
||||
|
||||
Equipment selectEquipmentBySn(String sn);
|
||||
IoLockEquipment selectEquipmentBySn(String sn);
|
||||
|
||||
List<Equipment> selectAllSnFlag();
|
||||
List<IoLockEquipment> selectAllSnFlag();
|
||||
|
||||
void updateFlag(String sn, String flag);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package org.dromara.mica.mqtt.server.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.dromara.mica.mqtt.server.entity.CarParkItem;
|
||||
import org.dromara.mica.mqtt.server.mapper.CarParkItemMapper;
|
||||
@@ -8,6 +7,8 @@ import org.dromara.mica.mqtt.server.service.ICarParkItemService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class CarParkItemServiceImpl extends ServiceImpl<CarParkItemMapper, CarParkItem> implements ICarParkItemService {
|
||||
|
||||
@@ -18,4 +19,9 @@ public class CarParkItemServiceImpl extends ServiceImpl<CarParkItemMapper, CarPa
|
||||
public CarParkItem selectBySn(String sn) {
|
||||
return carParkItemMapper.selectBySn(sn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> selectSnByParkId(String parkId) {
|
||||
return carParkItemMapper.selectSnByParkId(parkId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ package org.dromara.mica.mqtt.server.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.dromara.mica.mqtt.server.entity.Equipment;
|
||||
import org.dromara.mica.mqtt.server.entity.IoLockEquipment;
|
||||
import org.dromara.mica.mqtt.server.mapper.EquipmentMapper;
|
||||
import org.dromara.mica.mqtt.server.service.IEquipmentService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -11,25 +11,25 @@ import org.springframework.stereotype.Service;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class EquipmentServiceImpl extends ServiceImpl<EquipmentMapper, Equipment> implements IEquipmentService {
|
||||
public class EquipmentServiceImpl extends ServiceImpl<EquipmentMapper, IoLockEquipment> implements IEquipmentService {
|
||||
|
||||
@Autowired
|
||||
EquipmentMapper equipmentMapper;
|
||||
|
||||
@Override
|
||||
public Equipment selectEquipmentBySn(String sn) {
|
||||
return equipmentMapper.selectOne(new QueryWrapper<Equipment>().eq("sequence", sn).eq("product_id", 4L).last("limit 1"));
|
||||
public IoLockEquipment selectEquipmentBySn(String sn) {
|
||||
return equipmentMapper.selectOne(new QueryWrapper<IoLockEquipment>().eq("sequence", sn).last("limit 1"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Equipment> selectAllSnFlag() {
|
||||
return equipmentMapper.selectList(new QueryWrapper<Equipment>().eq("product_id", 4L).select("sequence", "flag"));
|
||||
public List<IoLockEquipment> selectAllSnFlag() {
|
||||
return equipmentMapper.selectList(new QueryWrapper<IoLockEquipment>().select("sequence", "flag"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateFlag(String sn, String flag) {
|
||||
Equipment equipment = new Equipment();
|
||||
IoLockEquipment equipment = new IoLockEquipment();
|
||||
equipment.setFlag(flag);
|
||||
equipmentMapper.update(equipment, new QueryWrapper<Equipment>().eq("sequence", sn).eq("product_id", 4L));
|
||||
equipmentMapper.update(equipment, new QueryWrapper<IoLockEquipment>().eq("sequence", sn));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,18 @@
|
||||
package org.dromara.mica.mqtt.server.service.impl;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.mica.mqtt.server.pojo.DeviceIOLockRequestPO;
|
||||
import org.dromara.mica.mqtt.server.pojo.OpenFloodgatePO;
|
||||
import org.dromara.mica.mqtt.server.utils.UuidUtil;
|
||||
import org.dromara.mica.mqtt.spring.server.MqttServerTemplate;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
|
||||
/**
|
||||
* @author wsq
|
||||
@@ -55,4 +61,81 @@ public class ServerService {
|
||||
log.info("发布离线数据数量body:{},result:{}", body, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
public boolean gpio_out(String sn, Integer io, Integer value) {
|
||||
String operUrl = "device/%s/message/down/gpio_out";
|
||||
String topic = String.format(operUrl, sn);
|
||||
OpenFloodgatePO openFloodgatePO = new OpenFloodgatePO();
|
||||
String uuid = "open_" + UuidUtil.getUuid();
|
||||
openFloodgatePO.setId(uuid);
|
||||
openFloodgatePO.setSn(sn);
|
||||
openFloodgatePO.setName("gpio_out");
|
||||
openFloodgatePO.setTimestamp(System.currentTimeMillis() / 1000);
|
||||
openFloodgatePO.setPayload(this.buildGpioOut(io, value));
|
||||
boolean result = server.publish(sn,topic, JSON.toJSONString(openFloodgatePO).getBytes(StandardCharsets.UTF_8));
|
||||
log.info("gpio_out设备编码:{},result:{},请求体{}", sn,result,openFloodgatePO);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
private JSONObject buildGpioOut(Integer io, Integer value) {
|
||||
JSONObject body = new JSONObject();
|
||||
body.put("delay", 500);
|
||||
body.put("io", io);
|
||||
body.put("value", value);
|
||||
JSONObject payload = new JSONObject();
|
||||
payload.put("type", "gpio_out");
|
||||
payload.put("body", body);
|
||||
return payload;
|
||||
}
|
||||
|
||||
public boolean set_io_lock_status(String sn, Integer status, Integer ioout) {
|
||||
String operUrl = "device/%s/message/down/set_io_lock_status";
|
||||
String topic = String.format(operUrl, sn);
|
||||
DeviceIOLockRequestPO deviceIOLockRequestPO = new DeviceIOLockRequestPO();
|
||||
String uuid = "locked_" + UuidUtil.getUuid();
|
||||
deviceIOLockRequestPO.setId(uuid);
|
||||
deviceIOLockRequestPO.setSn(sn);
|
||||
deviceIOLockRequestPO.setName("set_io_lock_status");
|
||||
deviceIOLockRequestPO.setPayload(this.buildPayloadLocked(status, ioout));
|
||||
return server.publish(sn,topic, JSON.toJSONString(deviceIOLockRequestPO).getBytes(StandardCharsets.UTF_8));
|
||||
}
|
||||
|
||||
private JSONObject buildPayloadLocked(Integer status, Integer ioout) {
|
||||
JSONObject payload = new JSONObject();
|
||||
payload.put("type", "set_io_lock_status");
|
||||
JSONObject body = new JSONObject();
|
||||
//io口,摄像头接线口
|
||||
body.put("ioout", ioout);
|
||||
//0解锁 1高电平锁定(保持常抬) 2低电平锁定(保持常关)
|
||||
body.put("status", status);
|
||||
payload.put("body", body);
|
||||
return payload;
|
||||
}
|
||||
|
||||
public boolean lockOpen(String sn) {
|
||||
String operUrl = "device/%s/message/down/gpio_out";
|
||||
String topic = String.format(operUrl, sn);
|
||||
OpenFloodgatePO openFloodgatePO = new OpenFloodgatePO();
|
||||
String uuid = "open_" + UuidUtil.getUuid();
|
||||
openFloodgatePO.setId(uuid);
|
||||
openFloodgatePO.setSn(sn);
|
||||
openFloodgatePO.setName("gpio_out");
|
||||
openFloodgatePO.setTimestamp(System.currentTimeMillis() / 1000);
|
||||
openFloodgatePO.setPayload(this.buildGpioOut(0, 2));
|
||||
return server.publish(sn,topic, JSON.toJSONString(openFloodgatePO).getBytes(StandardCharsets.UTF_8));
|
||||
}
|
||||
|
||||
public boolean lockClose(String sn) {
|
||||
String operUrl = "device/%s/message/down/gpio_out";
|
||||
String topic = String.format(operUrl, sn);
|
||||
OpenFloodgatePO openFloodgatePO = new OpenFloodgatePO();
|
||||
String uuid = "open_" + UuidUtil.getUuid();
|
||||
openFloodgatePO.setId(uuid);
|
||||
openFloodgatePO.setSn(sn);
|
||||
openFloodgatePO.setName("gpio_out");
|
||||
openFloodgatePO.setTimestamp(System.currentTimeMillis() / 1000);
|
||||
openFloodgatePO.setPayload(this.buildGpioOut(1, 2));
|
||||
return server.publish(sn,topic, JSON.toJSONString(openFloodgatePO).getBytes(StandardCharsets.UTF_8));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
package org.dromara.mica.mqtt.server.task;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.mica.mqtt.server.constant.CacheConstants;
|
||||
import org.dromara.mica.mqtt.server.entity.Equipment;
|
||||
import org.dromara.mica.mqtt.server.entity.IoLockEquipment;
|
||||
import org.dromara.mica.mqtt.server.enums.FlagEnums;
|
||||
import org.dromara.mica.mqtt.server.mapper.EquipmentMapper;
|
||||
import org.dromara.mica.mqtt.server.redis.RedisService;
|
||||
import org.dromara.mica.mqtt.server.service.IEquipmentService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -32,9 +30,9 @@ public class HeartbeatOnLineTask {
|
||||
public void run() {
|
||||
log.info("===========心跳检测=============");
|
||||
//查询车辆摄像头的编码和在线状态
|
||||
List<Equipment> equipment = equipmentService.selectAllSnFlag();
|
||||
List<IoLockEquipment> equipment = equipmentService.selectAllSnFlag();
|
||||
|
||||
for (Equipment equip : equipment) {
|
||||
for (IoLockEquipment equip : equipment) {
|
||||
//缓存中有该设备心跳key
|
||||
if (redisService.hasKey(CacheConstants.EQUIPMENT_HEARTBEAT + equip.getSequence())) {
|
||||
String flag = redisService.getCacheObject(CacheConstants.EQUIPMENT_HEARTBEAT + equip.getSequence());
|
||||
|
||||
@@ -48,8 +48,10 @@ public class PlatePublishTask {
|
||||
/**
|
||||
* 定时查询数据库需要下发的车辆进行下发
|
||||
*/
|
||||
@Scheduled(fixedDelay = 8 * 1000)
|
||||
// @Scheduled(fixedDelay = 8 * 1000)
|
||||
public void run() {
|
||||
// 添加异常捕获,防止单个任务异常导致定时任务线程阻塞
|
||||
try {
|
||||
String whiteUrl = "device/%s/message/down/white_list_operator";
|
||||
|
||||
//新增&编辑车牌
|
||||
@@ -136,7 +138,10 @@ public class PlatePublishTask {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
// 捕获所有异常并记录日志,确保定时任务能继续执行
|
||||
log.error("PlatePublishTask 定时任务执行异常", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,12 +1,33 @@
|
||||
spring:
|
||||
datasource:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
url: jdbc:mysql://127.0.0.1:3306/xa_cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
url: jdbc:mysql://127.0.0.1:3306/td_cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&connectTimeout=5000&socketTimeout=30000
|
||||
username: root
|
||||
password: root
|
||||
# Druid 连接池配置
|
||||
druid:
|
||||
max-active: 20
|
||||
max-wait: 60000
|
||||
min-idle: 5
|
||||
initial-size: 5
|
||||
validation-query: SELECT 1
|
||||
test-while-idle: true
|
||||
test-on-borrow: false
|
||||
test-on-return: false
|
||||
time-between-eviction-runs-millis: 60000
|
||||
min-evictable-idle-time-millis: 300000
|
||||
data:
|
||||
redis:
|
||||
# host: 127.0.0.1
|
||||
host: 192.168.2.30
|
||||
password: redis2025
|
||||
database: 5
|
||||
port: 6379
|
||||
# Redis 超时配置,防止连接阻塞
|
||||
timeout: 5000ms
|
||||
lettuce:
|
||||
pool:
|
||||
max-active: 8
|
||||
max-idle: 8
|
||||
min-idle: 2
|
||||
max-wait: 5000ms
|
||||
|
||||
@@ -1,28 +1,33 @@
|
||||
spring:
|
||||
datasource:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
#xa
|
||||
# url: jdbc:mysql://127.0.0.1:3306/xa_cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
# username: root
|
||||
# password: Xahg2024.
|
||||
#jl
|
||||
# url: jdbc:mysql://127.0.0.1:3306/jl_cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
# username: root
|
||||
# password: JL202509jj
|
||||
#td
|
||||
# url: jdbc:mysql://127.0.0.1:3306/td_cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
# username: root
|
||||
# password: td@JJ2024
|
||||
#zr
|
||||
url: jdbc:mysql://192.168.155.42:3306/zr_cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
|
||||
url: jdbc:mysql://192.168.251.16:3306/td_cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&connectTimeout=5000&socketTimeout=30000
|
||||
username: root
|
||||
password: zr202407.J
|
||||
password: td@JJ2024
|
||||
# Druid 连接池配置
|
||||
druid:
|
||||
max-active: 20
|
||||
max-wait: 60000
|
||||
min-idle: 5
|
||||
initial-size: 5
|
||||
validation-query: SELECT 1
|
||||
test-while-idle: true
|
||||
test-on-borrow: false
|
||||
test-on-return: false
|
||||
time-between-eviction-runs-millis: 60000
|
||||
min-evictable-idle-time-millis: 300000
|
||||
data:
|
||||
redis:
|
||||
#zr
|
||||
host: 192.168.155.42
|
||||
#xa、jl、td
|
||||
# host: 127.0.0.1
|
||||
host: 192.168.251.16
|
||||
port: 6379
|
||||
password:
|
||||
database: 1
|
||||
database: 2
|
||||
# Redis 超时配置,防止连接阻塞
|
||||
timeout: 5000ms
|
||||
lettuce:
|
||||
pool:
|
||||
max-active: 8
|
||||
max-idle: 8
|
||||
min-idle: 2
|
||||
max-wait: 5000ms
|
||||
|
||||
@@ -127,3 +127,8 @@ logging:
|
||||
server: info # t-io 服务端默认日志
|
||||
org.tio: info # t-io 服务端默认日志
|
||||
org.dromara.mica.mqtt: info # mica-mqtt 日志
|
||||
org.dromara.mica.mqtt.server.task: debug # 定时任务日志级别
|
||||
|
||||
# 定时任务线程池配置
|
||||
scheduler:
|
||||
pool-size: 5
|
||||
|
||||
Reference in New Issue
Block a user