diff --git a/device_cars/pom.xml b/device_cars/pom.xml
index 530a228..ac4909f 100644
--- a/device_cars/pom.xml
+++ b/device_cars/pom.xml
@@ -413,6 +413,14 @@
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 8
+ 8
+
+
diff --git a/device_cars/src/main/java/com/xr/device_car/config/udp/UdbConfig.java b/device_cars/src/main/java/com/xr/device_car/config/udp/UdbConfig.java
index 9efbac5..7f368bf 100644
--- a/device_cars/src/main/java/com/xr/device_car/config/udp/UdbConfig.java
+++ b/device_cars/src/main/java/com/xr/device_car/config/udp/UdbConfig.java
@@ -16,17 +16,24 @@ public class UdbConfig {
public static String getUdbConfig(List list){
StringBuffer buffer=new StringBuffer();
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- buffer.append(new Date().getTime()+ new Random().nextInt(9000)+1000).append("\t");
- buffer.append("");
+ //buffer.append(new Date().getTime()+ new Random().nextInt(9000)+1000).append("\t");
+ buffer.append("");
buffer.append("");
+ int i=1;
+ buffer.append("@序号").append("\t").append("站序号").append("\t").append("监控索引号").append("\t").append("设备名称").append("\t").append("设备类型")
+ .append("\t").append("实物ID").append("\t").append("是否联动信号").append("\n");
for(MeterConfig config:list){
- buffer.append("站序号").append("\t");//站序号
+ buffer.append("#"+i).append("\t"); //序号
+ buffer.append("1").append("\t");//站序号
buffer.append(config.getId()).append("\t");//监控索引号
buffer.append("中山站").append("/").append(config.getOwningInterval()).append("/").append(config.getDeviceName()).append("/").append(config.getMeterName()).append("\t");//设备名称=站名称+间隔名称+设备名称+开关名称
- buffer.append(config.getMeterCode()).append("\t");//实物ID目前取表计ID
- buffer.append("否").append(";");//是否联动信号目前取否,目前结尾符号位;
+ buffer.append("遥测").append("\t");
+ buffer.append(config.getId()).append("\t");//实物ID目前取表计ID
+ buffer.append("否").append("\n");//是否联动信号目前取否,目前结尾符号位;
+ i++;
}
buffer.append("");
+ System.out.println(buffer.toString());
return buffer.toString();
}
diff --git a/device_cars/src/main/java/com/xr/device_car/config/utils/EnumUtil.java b/device_cars/src/main/java/com/xr/device_car/config/utils/EnumUtil.java
index 568b5ea..e831f80 100644
--- a/device_cars/src/main/java/com/xr/device_car/config/utils/EnumUtil.java
+++ b/device_cars/src/main/java/com/xr/device_car/config/utils/EnumUtil.java
@@ -1,5 +1,7 @@
package com.xr.device_car.config.utils;
+import io.netty.buffer.ByteBuf;
+
import java.util.Arrays;
import java.util.Map;
import java.util.Optional;
@@ -39,4 +41,12 @@ public class EnumUtil {
}
return Arrays.stream(ts).filter(predicate).findAny();
}
+
+ public static String byteBufTo16Str(ByteBuf byteBuf){
+ StringBuilder sb = new StringBuilder();
+ for (int i = byteBuf.readerIndex(); i < byteBuf.writerIndex(); i++) {
+ sb.append(String.format("%02X", byteBuf.getByte(i))+" ");
+ }
+ return sb.toString();
+ }
}
diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/MeterConfigController.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/MeterConfigController.java
index a370df7..181ddd0 100644
--- a/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/MeterConfigController.java
+++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/controller/MeterConfigController.java
@@ -13,6 +13,8 @@ import com.xr.device_car.modules.analysis.scheduled.TaskScheduler;
import com.xr.device_car.modules.analysis.service.*;
import com.xr.device_car.modules.analysis.vo.MeterMaxMinSaveVo;
import com.xr.device_car.modules.system.entity.UserInfo;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
@@ -28,9 +30,12 @@ import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
+import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import java.util.zip.CRC32;
+import java.util.zip.Checksum;
@RestController
@RequestMapping("analysis/meterConfig")
@@ -257,11 +262,57 @@ public class MeterConfigController {
@RequestMapping("/sendSynchronizationUdp")
public Result> sendSynchronizationUdp(){
try{
+ // 每次发送的最大长度
+ final int MAX_LENGTH = 200;
QueryWrapper query=new QueryWrapper<>();
query.eq("status",1);
List list = meterConfigService.list(query);
String sendMsg = UdbConfig.getUdbConfig(list);
- udpClientService.sendData(sendMsg);
+ byte[]b = sendMsg.getBytes("GB2312");
+
+ // 计算需要分成多少段发送
+ int parts = b.length / MAX_LENGTH + (b.length % MAX_LENGTH == 0 ? 0 : 1);
+ int s = 1;
+ for (int i = 0; i < parts; i++) {
+ if(i==parts-1){
+ s=0;
+ }else{
+ s=1;
+ }
+ // 计算每一段的起始索引和结束索引
+ int start = i * MAX_LENGTH;
+ System.out.println(start);
+ int end = Math.min((i + 1) * MAX_LENGTH, b.length);
+
+ // 根据起始索引和结束索引截取字节数组的一部分
+ byte[] segment = java.util.Arrays.copyOfRange(b, start, end);
+ ByteBuf buf = Unpooled.buffer();
+ buf.writeBytes(new byte[]{(byte) 0xEB, (byte) 0x90,(byte) 0xEB, (byte) 0x90,(byte)0x43});
+ buf.writeShortLE(0x03);
+ buf.writeByte(s);
+ buf.writeShort(i);
+ buf.writeInt(start);
+ buf.writeByte(segment.length);
+ buf.writeBytes(segment);
+ //Checksum checksum = new CRC32();
+ byte c = 0;
+ int startIndex = 5; // 从第6位开始,索引是5(因为索引从0开始)
+ int endIndex = buf.readableBytes() - 1; // 到倒数第二位结束
+ // 截取并处理指定范围内的字节
+ if (startIndex <= endIndex) {
+ // 临时存放截取的字节
+ byte[] slice = new byte[endIndex - startIndex + 1];
+ // 从ByteBuf中获取数据
+ buf.getBytes(startIndex, slice);
+ c=checksum8(slice);
+ // 更新Checksum对象
+ //checksum.update(slice, 0, slice.length);
+ }
+ buf.writeByte(c);
+ System.out.println(EnumUtil.byteBufTo16Str(buf));
+ udpClientService.sendData(buf);
+ Thread.sleep(100);
+ }
}catch (Exception e){
e.printStackTrace();
return Result.OK("同步失败!");
@@ -269,4 +320,25 @@ public class MeterConfigController {
return Result.OK("同步成功!");
}
+
+
+ public List getConfigList(List list,int min,int max){
+ List list1=new ArrayList<>();
+ for(MeterConfig config:list){
+ if(config.getId()>min && config.getId()<=max){
+ list1.add(config);
+ }
+ }
+ return list1;
+ }
+
+ // 8位和校验实现
+ private byte checksum8(byte[] data) {
+ byte sum = 0;
+ for (byte b : data) {
+ sum += b&0xff;
+ }
+ return sum;
+ }
+
}
diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/MeterReadingRecordMapper.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/MeterReadingRecordMapper.java
index c226bf0..fe27af7 100644
--- a/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/MeterReadingRecordMapper.java
+++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/mapper/MeterReadingRecordMapper.java
@@ -11,6 +11,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface MeterReadingRecordMapper extends BaseMapper {
+ void deleteToZt();
+
+ void deleteToLog();
+
+
}
diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/scheduled/Task.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/scheduled/Task.java
new file mode 100644
index 0000000..91e0692
--- /dev/null
+++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/scheduled/Task.java
@@ -0,0 +1,20 @@
+package com.xr.device_car.modules.analysis.scheduled;
+
+import com.xr.device_car.modules.analysis.service.MeterReadingRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+@Component
+public class Task {
+
+ @Autowired
+ private MeterReadingRecordService meterReadingRecordService;
+
+ @Scheduled(cron = "0 0 18 * * ?")
+ public void runTask(){
+ meterReadingRecordService.deleteToZt();
+ meterReadingRecordService.deleteToLog();
+ }
+
+}
diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/MeterReadingRecordService.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/MeterReadingRecordService.java
index 17892c0..19a5cba 100644
--- a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/MeterReadingRecordService.java
+++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/MeterReadingRecordService.java
@@ -10,4 +10,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface MeterReadingRecordService extends IService {
+ void deleteToZt();
+ void deleteToLog();
+
}
diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/UdpClientService.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/UdpClientService.java
index 2019a7b..aac09a5 100644
--- a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/UdpClientService.java
+++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/UdpClientService.java
@@ -1,7 +1,9 @@
package com.xr.device_car.modules.analysis.service;
+import io.netty.buffer.ByteBuf;
+
public interface UdpClientService {
- void sendData(String data);
+ void sendData(ByteBuf data);
}
diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/MeterReadingRecordServiceImpl.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/MeterReadingRecordServiceImpl.java
index a4be538..bbd3a09 100644
--- a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/MeterReadingRecordServiceImpl.java
+++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/MeterReadingRecordServiceImpl.java
@@ -17,6 +17,15 @@ import org.springframework.stereotype.Service;
public class MeterReadingRecordServiceImpl extends ServiceImpl
implements MeterReadingRecordService{
+ @Override
+ public void deleteToZt() {
+ ((MeterReadingRecordMapper)this.baseMapper).deleteToZt();
+ }
+
+ @Override
+ public void deleteToLog() {
+ ((MeterReadingRecordMapper)this.baseMapper).deleteToLog();
+ }
}
diff --git a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/UdpClientServiceImpl.java b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/UdpClientServiceImpl.java
index 3a99836..ddaabed 100644
--- a/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/UdpClientServiceImpl.java
+++ b/device_cars/src/main/java/com/xr/device_car/modules/analysis/service/impl/UdpClientServiceImpl.java
@@ -3,6 +3,7 @@ package com.xr.device_car.modules.analysis.service.impl;
import com.xr.device_car.modules.analysis.entity.SendUdpLog;
import com.xr.device_car.modules.analysis.service.SendUdpLogService;
import com.xr.device_car.modules.analysis.service.UdpClientService;
+import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.socket.DatagramChannel;
import io.netty.channel.socket.DatagramPacket;
@@ -28,14 +29,14 @@ public class UdpClientServiceImpl implements UdpClientService {
@Override
- public void sendData(String data) {
+ public void sendData(ByteBuf byteBuf) {
SendUdpLog sendUdpLog =new SendUdpLog();
- sendUdpLog.setRequestMsg(data);
+ sendUdpLog.setRequestMsg(byteBuf.toString());
sendUdpLog.setRequestTime(new Date());
- sendUdpLog.setMessageId(data.split("\t")[0]);
+ sendUdpLog.setMessageId(new Date().getTime()+"");
try {
udpChannel.writeAndFlush(new DatagramPacket(
- Unpooled.copiedBuffer(data, CharsetUtil.UTF_8), udpServerAddress)).sync();
+ Unpooled.copiedBuffer(byteBuf), udpServerAddress)).sync();
sendUdpLog.setRequestStatus("0");
} catch (Exception e) {
sendUdpLog.setRequestStatus("1");
diff --git a/device_cars/src/main/resources/application-dev.yml b/device_cars/src/main/resources/application-dev.yml
index 6788324..3aa2509 100644
--- a/device_cars/src/main/resources/application-dev.yml
+++ b/device_cars/src/main/resources/application-dev.yml
@@ -90,5 +90,5 @@ minio:
secretKey: minioadmin
udp:
server:
- host: localhost
+ host: 192.168.1.100
port: 9300
\ No newline at end of file
diff --git a/device_cars/src/main/resources/application-prod.yml b/device_cars/src/main/resources/application-prod.yml
index c805c60..9ba8158 100644
--- a/device_cars/src/main/resources/application-prod.yml
+++ b/device_cars/src/main/resources/application-prod.yml
@@ -13,13 +13,13 @@ spring:
db1:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
- url: jdbc:mysql://192.168.1.252:3306/device_system?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
+ url: jdbc:mysql://192.168.1.94:3306/device_system?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: 123456
db2:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
- url: jdbc:mysql://192.168.1.252:3306/image_analysis_zs?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
+ url: jdbc:mysql://192.168.1.94:3306/image_analysis?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: 123456
#Hikari连接池配置
@@ -31,13 +31,13 @@ spring:
#自动提交从池中返回的连接
auto-commit: true
#连接允许在池中闲置的最长时间
- idle-timeout: 300000
+ idle-timeout: 30000
#连接池的用户定义名称,主要出现在日志记录和JMX管理控制台中以识别池和池配置
pool-name: DatebookHikariCP
#池中连接最长生命周期
max-lifetime: 18000000
#等待来自池的连接的最大毫秒数
- connection-timeout: 300000
+ connection-timeout: 30000
#验证该连接是否是有效的查询语句
connection-test-query: select 1 from dual
cloud:
@@ -47,9 +47,9 @@ spring:
enabled: false
# redis 相关
redis:
- host: ${REDIS_URL:192.168.1.252}
+ host: ${REDIS_URL:localhost}
port: ${REDIS_PORT:6379}
- password: ${REDIS_PWD:}
+ password: ${REDIS_PWD:111111}
timeout: 10000
jedis:
pool:
@@ -60,27 +60,21 @@ spring:
swagger:
show: true
analysis:
- url: http://192.168.1.252:9000/vi/syncrec
+ url: http://192.168.1.123:9000/vi/syncrec
upLoad:
- path: /home/project/upload
- url: http://192.168.1.252:85/upload/
+ path: D:\\images\\images\\
+ url: http://localhost:85/upload/
+ file: D:\\images\\images\\
python:
path: C:\\Users\\admin\\Anaconda3\\envs\\myconda310\\python.exe
modelPath: D:\\smartGrid\\smartGrid\\models
netty:
- address: 192.168.1.252
- port: 2405
+ address: 192.168.3.20
+ port: 2404
data:
- pathUrl: http://192.168.1.252:8081/api/dataAnalysisCamera/getComer
-udp:
- server:
- host: localhost
- port: 9300
-minio:
- url: http://192.168.1.210:9000
- accessKey: minioadmin
- secretKey: minioadmin
+ pathUrl: http://192.168.1.82:8081/api/dataAnalysisCamera/getComer
+ #pathUrl: http://192.168.1.44:8081/api/dataAnalysisCamera/getComer
eureka:
instance:
instance-id: ${spring.cloud.client.ip-address}:${server.port}
@@ -89,4 +83,12 @@ eureka:
healthcheck:
enabled: true
service-url:
- defaultZone: http://localhost:8084/eureka
\ No newline at end of file
+ defaultZone: http://localhost:8084/eureka
+minio:
+ url: http://192.168.1.210:9000
+ accessKey: minioadmin
+ secretKey: minioadmin
+udp:
+ server:
+ host: 192.168.1.100
+ port: 9300
\ No newline at end of file
diff --git a/device_cars/src/main/resources/application.yml b/device_cars/src/main/resources/application.yml
index 8d7945b..c854e41 100644
--- a/device_cars/src/main/resources/application.yml
+++ b/device_cars/src/main/resources/application.yml
@@ -2,7 +2,7 @@ spring:
profiles:
#active: dev #开发环境
# active: test #测试环境5
- active: dev #生产环境
+ active: prod #生产环境
# active: prod #生产环境
application:
name: deviceCars
diff --git a/device_cars/src/main/resources/modules/analysis/MeterReadingRecordMapper.xml b/device_cars/src/main/resources/modules/analysis/MeterReadingRecordMapper.xml
index d3d7e83..98d50db 100644
--- a/device_cars/src/main/resources/modules/analysis/MeterReadingRecordMapper.xml
+++ b/device_cars/src/main/resources/modules/analysis/MeterReadingRecordMapper.xml
@@ -25,4 +25,12 @@
reading_time,reading_value,create_user,
create_time,update_user,update_time
+
+
+ delete from meter_reading_record WHERE DATE(create_time) = DATE(NOW() - INTERVAL 1 DAY);
+
+
+
+ delete from send_udp_log WHERE DATE(request_time) = DATE(NOW() - INTERVAL 1 DAY);
+
diff --git a/device_iec104/pom.xml b/device_iec104/pom.xml
index f092840..886e829 100644
--- a/device_iec104/pom.xml
+++ b/device_iec104/pom.xml
@@ -97,6 +97,14 @@
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 6
+ 6
+
+
diff --git a/device_iec61850clent/pom.xml b/device_iec61850clent/pom.xml
index 26d7703..479c8d6 100644
--- a/device_iec61850clent/pom.xml
+++ b/device_iec61850clent/pom.xml
@@ -13,7 +13,7 @@
device_iec61850clent
Demo project for Spring Boot
- 8
+ 1.8
@@ -123,6 +123,14 @@
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 8
+ 8
+
+
diff --git a/device_iec61850clent/src/main/java/com/xr/iec61850clent/Iec61850ClentApplication.java b/device_iec61850clent/src/main/java/com/xr/iec61850clent/Iec61850ClentApplication.java
index 242f3a8..9b0ff9b 100644
--- a/device_iec61850clent/src/main/java/com/xr/iec61850clent/Iec61850ClentApplication.java
+++ b/device_iec61850clent/src/main/java/com/xr/iec61850clent/Iec61850ClentApplication.java
@@ -30,7 +30,7 @@ public class Iec61850ClentApplication implements CommandLineRunner {
@Override
@Async
public void run(String[] args){
- Iec61850clent iec61850clent=new Iec61850clent(args,"192.168.1.83",102);
+ Iec61850clent iec61850clent=new Iec61850clent(args,"192.168.1.93",102);
executor.execute(iec61850clent);
// Iec61850clent iec61850clent1=new Iec61850clent(args,"192.168.1.138",102);
// executor.submit(iec61850clent1);
diff --git a/device_iec61850clent/src/main/java/com/xr/iec61850clent/common/util/IEC61850Config.java b/device_iec61850clent/src/main/java/com/xr/iec61850clent/common/util/IEC61850Config.java
index 0a6b804..925d529 100644
--- a/device_iec61850clent/src/main/java/com/xr/iec61850clent/common/util/IEC61850Config.java
+++ b/device_iec61850clent/src/main/java/com/xr/iec61850clent/common/util/IEC61850Config.java
@@ -21,7 +21,7 @@ import java.util.List;
@Component
public class IEC61850Config {
- private static final ThreadLocal> CURRENT_CONFIG = new ThreadLocal<>();
+ private static final ThreadLocal> CURRENT_CONFIG = new ThreadLocal>();
@PostConstruct
public void setExcelConfig(){
@@ -33,7 +33,7 @@ public class IEC61850Config {
InputStream inputStream = IEC61850Config.class.getClassLoader().getResourceAsStream("IEC61850.xlsx");
XSSFWorkbook wb = null;
XSSFSheet sheet = null; // 创建工作sheet
- List dataList = new ArrayList<>();
+ List dataList = new ArrayList();
try {
wb = ExcelUtil.getWorkbook(inputStream);
sheet = ExcelUtil.getFirstSheet(wb);
@@ -140,7 +140,8 @@ public class IEC61850Config {
CURRENT_CONFIG.set(list);
}
for(ExcelConfig config:list){
- String node1 = config.getName()+config.getConnectId()+config.getAddress()+config.getGgio()+"."+config.getAng();
+ float address = Float.valueOf(config.getAddress());
+ String node1 = config.getName()+config.getConnectId()+(int)address+config.getGgio()+"."+config.getAng();
if(ip.equals(config.getDeviceIp()) && node.equals(node1)){
return config;
}
diff --git a/device_iec61850clent/src/main/java/com/xr/iec61850clent/common/util/ModeUtil.java b/device_iec61850clent/src/main/java/com/xr/iec61850clent/common/util/ModeUtil.java
index dffddc3..e1d309b 100644
--- a/device_iec61850clent/src/main/java/com/xr/iec61850clent/common/util/ModeUtil.java
+++ b/device_iec61850clent/src/main/java/com/xr/iec61850clent/common/util/ModeUtil.java
@@ -32,7 +32,7 @@ public class ModeUtil {
lds5000.setClentIp(eunm.getDeviceIp());
lds5000.setNode(node.getReference().toString());
lds5000.setFc(node.getFc().toString());
- List modelNodes=new ArrayList<>(node.getChildren());
+ List modelNodes=new ArrayList(node.getChildren());
for (ModelNode modelNode:modelNodes){
FcModelNode fcModelNode=(FcModelNode) modelNode;
if(fcModelNode.toString().contains("f:")){
diff --git a/device_iec61850clent/src/main/java/com/xr/iec61850clent/models/controller/AiInterfaceController.java b/device_iec61850clent/src/main/java/com/xr/iec61850clent/models/controller/AiInterfaceController.java
index 053715d..ddf20ed 100644
--- a/device_iec61850clent/src/main/java/com/xr/iec61850clent/models/controller/AiInterfaceController.java
+++ b/device_iec61850clent/src/main/java/com/xr/iec61850clent/models/controller/AiInterfaceController.java
@@ -62,7 +62,7 @@ public class AiInterfaceController {
meterReadingRecord.setMeterTypeId(meterConfig.getTypeId());
meterReadingRecord.setOwningInterval(meterConfig.getOwningInterval());
String meterType = MapUtil.getStr(map,"meter_type");
- QueryWrapper queryWrapper=new QueryWrapper<>();
+ QueryWrapper queryWrapper=new QueryWrapper();
queryWrapper.eq("meter_id",meterId);
Integer meterT = null;
if(meterType.equals("floatocr")){//数值型
diff --git a/device_iec61850clent/src/main/java/com/xr/iec61850clent/models/entity/MeterConfig.java b/device_iec61850clent/src/main/java/com/xr/iec61850clent/models/entity/MeterConfig.java
index 3126703..739a454 100644
--- a/device_iec61850clent/src/main/java/com/xr/iec61850clent/models/entity/MeterConfig.java
+++ b/device_iec61850clent/src/main/java/com/xr/iec61850clent/models/entity/MeterConfig.java
@@ -19,19 +19,9 @@ public class MeterConfig implements Serializable {
/**
* 主键
*/
- @TableId(type = IdType.AUTO)
+ @TableId(value = "id", type = IdType.AUTO)
private Integer id;
- /**
- * ids5000表id
- */
- private Integer ids5000Id;
-
- /**
- * 间隔类型 1 分钟 2 小时 3 天
- */
- private Integer intervalType;
-
/**
* 电压等级(1安全电压2低压3高压4超高压5特高压)
*/
@@ -52,16 +42,6 @@ public class MeterConfig implements Serializable {
*/
private String deviceName;
- /**
- * y坐标
- */
- private Double locationY;
-
- /**
- * x坐标
- */
- private Double locationX;
-
/**
* 设备类型
*/
@@ -82,15 +62,11 @@ public class MeterConfig implements Serializable {
*/
private Integer cameraId;
- /**
- * 告警最小值
- */
- private Double warningMax;
+ @TableField(exist = false)
+ private String cameraType;
- /**
- * 告警最大值
- */
- private Double warningMin;
+ @TableField(exist = false)
+ private String cameraName;
/**
* 表计类型配置编号
@@ -108,15 +84,30 @@ public class MeterConfig implements Serializable {
private Date firstTime;
/**
- * 焦距类型 1定焦2变焦
+ * 算法类型 1usb2mipi 3内部算法
*/
- private String focalLength;
+ private String algorithmType;
/**
* 执行间隔时间
*/
private Integer intervalTime;
+ /**
+ * 执行间隔类型 1分钟 2 小时 3 天
+ */
+ private Integer intervalType;
+
+ /**
+ * 告警最大值
+ */
+ private Double warningMax;
+
+ /**
+ * 告警最小值
+ */
+ private Double warningMin;
+
/**
* 焦距数量
*/
@@ -133,9 +124,9 @@ public class MeterConfig implements Serializable {
private String remarks;
/**
- * 61850读数模型
+ * 初始化状态
*/
- private String iec61850mx;
+ private String initStatus;
/**
* 创建人
@@ -152,11 +143,116 @@ public class MeterConfig implements Serializable {
*/
private String updateUser;
+ private int isJz;
+
+ private String jzVal;
+
/**
* 修改时间
*/
private Date updateTime;
+ @TableField(exist = false)
+ private String ip;
+
+ @TableField(exist = false)
+ private String typeAlias;
+
@TableField(exist = false)
private static final long serialVersionUID = 1L;
+
+ @Override
+ public boolean equals(Object that) {
+ if (this == that) {
+ return true;
+ }
+ if (that == null) {
+ return false;
+ }
+ if (getClass() != that.getClass()) {
+ return false;
+ }
+ MeterConfig other = (MeterConfig) that;
+ return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+ && (this.getVoltageClass() == null ? other.getVoltageClass() == null : this.getVoltageClass().equals(other.getVoltageClass()))
+ && (this.getOwningInterval() == null ? other.getOwningInterval() == null : this.getOwningInterval().equals(other.getOwningInterval()))
+ && (this.getIdentificationInterval() == null ? other.getIdentificationInterval() == null : this.getIdentificationInterval().equals(other.getIdentificationInterval()))
+ && (this.getDeviceName() == null ? other.getDeviceName() == null : this.getDeviceName().equals(other.getDeviceName()))
+ && (this.getDeviceType() == null ? other.getDeviceType() == null : this.getDeviceType().equals(other.getDeviceType()))
+ && (this.getMeterCode() == null ? other.getMeterCode() == null : this.getMeterCode().equals(other.getMeterCode()))
+ && (this.getMeterName() == null ? other.getMeterName() == null : this.getMeterName().equals(other.getMeterName()))
+ && (this.getCameraId() == null ? other.getCameraId() == null : this.getCameraId().equals(other.getCameraId()))
+ && (this.getTypeId() == null ? other.getTypeId() == null : this.getTypeId().equals(other.getTypeId()))
+ && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
+ && (this.getFirstTime() == null ? other.getFirstTime() == null : this.getFirstTime().equals(other.getFirstTime()))
+ && (this.getAlgorithmType() == null ? other.getAlgorithmType() == null : this.getAlgorithmType().equals(other.getAlgorithmType()))
+ && (this.getIntervalTime() == null ? other.getIntervalTime() == null : this.getIntervalTime().equals(other.getIntervalTime()))
+ && (this.getFocalNumber() == null ? other.getFocalNumber() == null : this.getFocalNumber().equals(other.getFocalNumber()))
+ && (this.getParameterConfig() == null ? other.getParameterConfig() == null : this.getParameterConfig().equals(other.getParameterConfig()))
+ && (this.getRemarks() == null ? other.getRemarks() == null : this.getRemarks().equals(other.getRemarks()))
+ && (this.getCreateUser() == null ? other.getCreateUser() == null : this.getCreateUser().equals(other.getCreateUser()))
+ && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()))
+ && (this.getUpdateUser() == null ? other.getUpdateUser() == null : this.getUpdateUser().equals(other.getUpdateUser()))
+ && (this.getUpdateTime() == null ? other.getUpdateTime() == null : this.getUpdateTime().equals(other.getUpdateTime()));
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+ result = prime * result + ((getVoltageClass() == null) ? 0 : getVoltageClass().hashCode());
+ result = prime * result + ((getOwningInterval() == null) ? 0 : getOwningInterval().hashCode());
+ result = prime * result + ((getIdentificationInterval() == null) ? 0 : getIdentificationInterval().hashCode());
+ result = prime * result + ((getDeviceName() == null) ? 0 : getDeviceName().hashCode());
+ result = prime * result + ((getDeviceType() == null) ? 0 : getDeviceType().hashCode());
+ result = prime * result + ((getMeterCode() == null) ? 0 : getMeterCode().hashCode());
+ result = prime * result + ((getMeterName() == null) ? 0 : getMeterName().hashCode());
+ result = prime * result + ((getCameraId() == null) ? 0 : getCameraId().hashCode());
+ result = prime * result + ((getTypeId() == null) ? 0 : getTypeId().hashCode());
+ result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
+ result = prime * result + ((getFirstTime() == null) ? 0 : getFirstTime().hashCode());
+ result = prime * result + ((getAlgorithmType() == null) ? 0 : getAlgorithmType().hashCode());
+ result = prime * result + ((getIntervalTime() == null) ? 0 : getIntervalTime().hashCode());
+ result = prime * result + ((getFocalNumber() == null) ? 0 : getFocalNumber().hashCode());
+ result = prime * result + ((getParameterConfig() == null) ? 0 : getParameterConfig().hashCode());
+ result = prime * result + ((getRemarks() == null) ? 0 : getRemarks().hashCode());
+ result = prime * result + ((getCreateUser() == null) ? 0 : getCreateUser().hashCode());
+ result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
+ result = prime * result + ((getUpdateUser() == null) ? 0 : getUpdateUser().hashCode());
+ result = prime * result + ((getUpdateTime() == null) ? 0 : getUpdateTime().hashCode());
+ return result;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(getClass().getSimpleName());
+ sb.append(" [");
+ sb.append("Hash = ").append(hashCode());
+ sb.append(", id=").append(id);
+ sb.append(", voltageClass=").append(voltageClass);
+ sb.append(", owningInterval=").append(owningInterval);
+ sb.append(", identificationInterval=").append(identificationInterval);
+ sb.append(", deviceName=").append(deviceName);
+ sb.append(", deviceType=").append(deviceType);
+ sb.append(", meterCode=").append(meterCode);
+ sb.append(", meterName=").append(meterName);
+ sb.append(", cameraId=").append(cameraId);
+ sb.append(", typeId=").append(typeId);
+ sb.append(", status=").append(status);
+ sb.append(", firstTime=").append(firstTime);
+ sb.append(", algorithmType=").append(algorithmType);
+ sb.append(", intervalTime=").append(intervalTime);
+ sb.append(", focalNumber=").append(focalNumber);
+ sb.append(", parameterConfig=").append(parameterConfig);
+ sb.append(", remarks=").append(remarks);
+ sb.append(", createUser=").append(createUser);
+ sb.append(", createTime=").append(createTime);
+ sb.append(", updateUser=").append(updateUser);
+ sb.append(", updateTime=").append(updateTime);
+ sb.append(", serialVersionUID=").append(serialVersionUID);
+ sb.append("]");
+ return sb.toString();
+ }
}
\ No newline at end of file
diff --git a/device_iec61850clent/src/main/java/com/xr/iec61850clent/models/iec61850run/Iec61850clent.java b/device_iec61850clent/src/main/java/com/xr/iec61850clent/models/iec61850run/Iec61850clent.java
index 0b8496d..5e0ad9c 100644
--- a/device_iec61850clent/src/main/java/com/xr/iec61850clent/models/iec61850run/Iec61850clent.java
+++ b/device_iec61850clent/src/main/java/com/xr/iec61850clent/models/iec61850run/Iec61850clent.java
@@ -130,17 +130,12 @@ public class Iec61850clent extends Thread{
MeterConfigService meterConfigService=SpringUtils.getBean(MeterConfigService.class);
MeterReadingRecordService meterReadingRecordService=SpringUtils.getBean(MeterReadingRecordService.class);
MeterTypeService meterTypeService=SpringUtils.getBean(MeterTypeService.class);
- int i=0;
while (true){
try {
- if(i>0){
- sleep(2*60*1000);
- association.getAllDataValues();
- System.out.println("更新模型成功!");
- System.out.println(Arrays.toString(new Collection[]{serverModel.getDataSets()}));
- }else{
- i++;
- }
+ DataSet dSet = serverModel.getDataSet("TEMPLATELD0/LLN0.dsMeasureInfo1");
+ association.getDataSetValues(dSet);
+ System.out.println("更新模型成功!");
+ System.out.println(Arrays.toString(new Collection[]{serverModel.getDataSets()}));
List dataSets=new ArrayList<>(serverModel.getDataSets());
for (DataSet dataSet:dataSets){
List fas=dataSet.getMembers();
@@ -154,12 +149,6 @@ public class Iec61850clent extends Thread{
queryWrapper.eq("clent_ip",host);
Lds5000 lds=lds5000Service.getOne(queryWrapper);
if (lds != null) {
- QueryWrapper q=new QueryWrapper<>();
- q.eq("f",lds5000.getF());
- q.eq("node",lds5000.getNode());
- q.eq("clent_ip",host);
- Lds5000 l=lds5000Service.getOne(q);
- if(l==null){//值发生改变
lds.setUpdateTime(new Date());
lds.setF(lds5000.getF());
lds5000Service.updateById(lds);
@@ -172,7 +161,47 @@ public class Iec61850clent extends Thread{
meterReadingRecord.setMeterId(config.getId());
meterReadingRecord.setReadingType(lds5000.getType());
if(node.getFc().name().equals("MX")){
- meterReadingRecord.setReadingValue(lds5000.getF());
+ String value = "0";
+ float f = Float.valueOf(lds5000.getF());
+ if(config.getTypeId() == 3 || config.getTypeId() == 5 || config.getTypeId() == 7){//油位计,保留2位小数
+ value = String.format("%.2f", f);
+ }
+ if(config.getTypeId() == 4 || config.getTypeId() == 11){//开关计数器
+ //处理为整数
+ int s = (int) f;
+ value = s+"";
+ }
+ if(config.getTypeId() == 8){//档位数据处理
+ //处理为整数
+ int s = (int) f;
+ if(s>7){
+ int t = s-7;
+ if(t == 9){
+ value = "9A";
+ }
+ if(t == 10){
+ value = "9B";
+ }
+ if(t == 11){
+ value = "9C";
+ }
+ if(t>11){
+ value = t-2+"";
+ }
+ }else {
+ value=s+"";
+ }
+ }
+ if(config.getTypeId() == 10){//放电计数器
+ int s = Math.round(f);
+ if(s>=10){
+ value = 0+"";
+ }
+ }
+ if(config.getIsJz() == 1){
+ value = config.getJzVal();
+ }
+ meterReadingRecord.setReadingValue(value);
}else{
meterReadingRecord.setReadingValue(lds5000.getStVal());
}
@@ -183,9 +212,10 @@ public class Iec61850clent extends Thread{
meterReadingRecord.setCreateTime(new Date());
meterReadingRecord.setMeterTypeId(config.getTypeId());
meterReadingRecord.setOwningInterval(config.getOwningInterval());
- meterReadingRecordService.save(meterReadingRecord);
- abnormalReadingJudgment(meterReadingRecord);
- }
+ if(config.getIsJz()!=1){
+ meterReadingRecordService.save(meterReadingRecord);
+ }
+ //abnormalReadingJudgment(meterReadingRecord);
}
}else{
lds5000.setCreateTime(new Date());
@@ -193,6 +223,26 @@ public class Iec61850clent extends Thread{
}
}
}
+ QueryWrapper queryWrapper=new QueryWrapper<>();
+ queryWrapper.eq("is_jz",1);
+ List meterConfigs=meterConfigService.list(queryWrapper);
+ for (MeterConfig config:meterConfigs){
+ MeterReadingRecord meterReadingRecord=new MeterReadingRecord();
+ meterReadingRecord.setMeterId(config.getId());
+ meterReadingRecord.setReadingType(config.getTypeId());
+ meterReadingRecord.setReadingTime(new Date());
+ meterReadingRecord.setReadingType(2);
+ meterReadingRecord.setReadingValue(config.getJzVal());
+ meterReadingRecord.setMeterTypeName("");
+ meterReadingRecord.setMeterCode(config.getMeterCode());
+ meterReadingRecord.setReadingTime(new Date());
+ meterReadingRecord.setCreateUser("SYSTEM");
+ meterReadingRecord.setCreateTime(new Date());
+ meterReadingRecord.setMeterTypeId(config.getTypeId());
+ meterReadingRecord.setOwningInterval(config.getOwningInterval());
+ meterReadingRecordService.save(meterReadingRecord);
+ }
+ sleep(10*60*1000);
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/device_iec61850clent/src/main/resources/IEC61850.xlsx b/device_iec61850clent/src/main/resources/IEC61850.xlsx
index 90e4037..df2be4b 100644
Binary files a/device_iec61850clent/src/main/resources/IEC61850.xlsx and b/device_iec61850clent/src/main/resources/IEC61850.xlsx differ
diff --git a/device_iec61850clent/src/main/resources/application-prod.yml b/device_iec61850clent/src/main/resources/application-prod.yml
index 04106c4..351fd73 100644
--- a/device_iec61850clent/src/main/resources/application-prod.yml
+++ b/device_iec61850clent/src/main/resources/application-prod.yml
@@ -11,39 +11,21 @@ spring:
db1:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
- url: jdbc:mysql://192.168.1.93:3306/device_system?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
+ url: jdbc:mysql://192.168.1.94:3306/device_system?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: 123456
db2:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
- url: jdbc:mysql://192.168.1.93:3306/image_analysis_zs?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
+ url: jdbc:mysql://192.168.1.94:3306/image_analysis?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: 123456
db3:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
- url: jdbc:mysql://192.168.1.93:3306/modbusrtu?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
+ url: jdbc:mysql://192.168.1.94:3306/modbusrtu?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: 123456
-# db1:
-# driver-class-name: com.mysql.jdbc.Driver
-# type: com.zaxxer.hikari.HikariDataSource
-# url: jdbc:mysql://localhost:3306/device_system?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
-# username: root
-# password: 123456
-# db2:
-# driver-class-name: com.mysql.jdbc.Driver
-# type: com.zaxxer.hikari.HikariDataSource
-# url: jdbc:mysql://localhost:3306/image_analysis?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
-# username: root
-# password: 123456
-# db3:
-# driver-class-name: com.mysql.jdbc.Driver
-# type: com.zaxxer.hikari.HikariDataSource
-# url: jdbc:mysql://localhost:3306/modbusrtu?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
-# username: root
-# password: 123456
#Hikari连接池配置
hikari:
#池中维护的最小空闲连接数
@@ -63,7 +45,7 @@ spring:
#验证该连接是否是有效的查询语句
connection-test-query: select 1 from dual
mybatis-plus:
- mapper-locations: classpath:mappers/*Mapper.xml
+ mapper-locations: classpath:mappers/**/*Mapper.xml
type-aliases-package: com.xr.iec61850clent
# 在查询语句的是否,对Map或者是entity进行映射赋值的时候null也进行映射。默认false,不进行映射
configuration:
diff --git a/device_iec61850server/pom.xml b/device_iec61850server/pom.xml
index 5168b4f..060f077 100644
--- a/device_iec61850server/pom.xml
+++ b/device_iec61850server/pom.xml
@@ -118,6 +118,14 @@
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 7
+ 7
+
+
diff --git a/device_udpclent/pom.xml b/device_udpclent/pom.xml
index 73f3db6..f9ce4bf 100644
--- a/device_udpclent/pom.xml
+++ b/device_udpclent/pom.xml
@@ -162,7 +162,15 @@
-
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 8
+ 8
+
+
+
diff --git a/device_udpclent/src/main/java/com/xr/device_udpclent/common/UdpClientConfig.java b/device_udpclent/src/main/java/com/xr/device_udpclent/common/UdpClientConfig.java
deleted file mode 100644
index 1890b46..0000000
--- a/device_udpclent/src/main/java/com/xr/device_udpclent/common/UdpClientConfig.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.xr.device_udpclent.common;
-
-import io.netty.bootstrap.Bootstrap;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelOption;
-import io.netty.channel.EventLoopGroup;
-import io.netty.channel.SimpleChannelInboundHandler;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.DatagramChannel;
-import io.netty.channel.socket.DatagramPacket;
-import io.netty.channel.socket.nio.NioDatagramChannel;
-import io.netty.util.CharsetUtil;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import java.net.InetSocketAddress;
-
-@Configuration
-public class UdpClientConfig {
-
- @Value("${udp.server.host}")
- private String serverHost;
-
- @Value("${udp.server.port}")
- private int serverPort;
-
- @Bean
- public DatagramChannel udpChannel() {
- EventLoopGroup group = new NioEventLoopGroup();
- try {
- Bootstrap bootstrap = new Bootstrap();
- bootstrap.group(group)
- .channel(NioDatagramChannel.class)
- .option(ChannelOption.SO_BROADCAST, true)
- .handler(new SimpleChannelInboundHandler() {
- @Override
- protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket msg) throws Exception {
- // 处理接收到的数据
- String data = msg.content().toString(CharsetUtil.UTF_8);
- System.out.println("Received data: " + data);
- }
- });
-
- return (DatagramChannel) bootstrap.bind(0).sync().channel();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
-
- @Bean
- public InetSocketAddress udpServerAddress() {
- return new InetSocketAddress(serverHost, serverPort);
- }
-
-}
diff --git a/device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/EnumUtil.java b/device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/EnumUtil.java
new file mode 100644
index 0000000..08b2716
--- /dev/null
+++ b/device_udpclent/src/main/java/com/xr/device_udpclent/common/utils/EnumUtil.java
@@ -0,0 +1,52 @@
+package com.xr.device_udpclent.common.utils;
+
+import io.netty.buffer.ByteBuf;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Predicate;
+
+/**
+ * @Classname EnumUtil
+ * @Description TODO
+ * @Author Created by gaoby
+ * @Date 2023/3/8 16:28 下午
+ * @Version 1.0
+ */
+public class EnumUtil {
+
+ private static Map map = new ConcurrentHashMap<>();
+
+ /**
+ * 根据条件获取枚举对象
+ *
+ * @param className 枚举类
+ * @param predicate 筛选条件
+ * @param
+ * @return
+ */
+ public static Optional getEnumObject(Class className, Predicate predicate) {
+ if (!className.isEnum()) {
+ return null;
+ }
+ Object obj = map.get(className);
+ T[] ts = null;
+ if (obj == null) {
+ ts = className.getEnumConstants();
+ map.put(className, ts);
+ } else {
+ ts = (T[]) obj;
+ }
+ return Arrays.stream(ts).filter(predicate).findAny();
+ }
+
+ public static String byteBufTo16Str(ByteBuf byteBuf){
+ StringBuilder sb = new StringBuilder();
+ for (int i = byteBuf.readerIndex(); i < byteBuf.writerIndex(); i++) {
+ sb.append(String.format("%02X", byteBuf.getByte(i))+" ");
+ }
+ return sb.toString();
+ }
+}
diff --git a/device_udpclent/src/main/java/com/xr/device_udpclent/models/controller/UdpClentController.java b/device_udpclent/src/main/java/com/xr/device_udpclent/models/controller/UdpClentController.java
deleted file mode 100644
index 7bf3db0..0000000
--- a/device_udpclent/src/main/java/com/xr/device_udpclent/models/controller/UdpClentController.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.xr.device_udpclent.models.controller;
-
-import com.xr.device_udpclent.models.service.UdpClientService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("udp")
-public class UdpClentController {
-
- @Autowired
- private UdpClientService udpClientService;
-
- @GetMapping("/sendData")
- public void sendData(String data) {
- udpClientService.sendData(data);
- }
-
-}
diff --git a/device_udpclent/src/main/java/com/xr/device_udpclent/models/scheduled/UdpClentScheduled.java b/device_udpclent/src/main/java/com/xr/device_udpclent/models/scheduled/UdpClentScheduled.java
index a13934b..98424e7 100644
--- a/device_udpclent/src/main/java/com/xr/device_udpclent/models/scheduled/UdpClentScheduled.java
+++ b/device_udpclent/src/main/java/com/xr/device_udpclent/models/scheduled/UdpClentScheduled.java
@@ -2,14 +2,21 @@ package com.xr.device_udpclent.models.scheduled;
import cn.hutool.extra.spring.SpringUtil;
import com.xr.device_udpclent.common.config.udp.UdbConfig;
+import com.xr.device_udpclent.common.utils.EnumUtil;
import com.xr.device_udpclent.models.entity.MeterReadingRecord;
import com.xr.device_udpclent.models.service.MeterReadingRecordService;
import com.xr.device_udpclent.models.service.UdpClientService;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
+import java.io.UnsupportedEncodingException;
+import java.util.Calendar;
import java.util.List;
+import java.util.zip.CRC32;
+import java.util.zip.Checksum;
@Component
@@ -24,15 +31,80 @@ public class UdpClentScheduled {
@Scheduled(cron = "0 0/3 * * * ?")
//定时发送监测数据
- public void udpTask(){
+ public void udpTask() throws UnsupportedEncodingException, InterruptedException {
if(meterReadingRecordService == null){
meterReadingRecordService = SpringUtil.getBean(MeterReadingRecordService.class);
}
List list = meterReadingRecordService.selectMaxReading();
for (MeterReadingRecord record:list){
- String writeValue = UdbConfig.getTestMsg(record);
- udpClientService.sendData(writeValue);
+ ByteBuf buf = Unpooled.buffer();
+ ByteBuf checksumBuffer = Unpooled.buffer(Long.BYTES);
+ buf.writeBytes(new byte[]{(byte) 0xEB, (byte) 0x90,(byte) 0xEB, (byte) 0x90,(byte)0x55});
+ buf.writeShortLE(3);
+ buf.writeShort(record.getMeterId());
+ buf.writeByte(2);
+ String s="在线监测";
+ byte [] sx=s.getBytes("GB2312");
+ buf.writeByte(sx.length);
+ buf.writeBytes(sx);
+ byte [] sz = record.getReadingValue().getBytes("GB2312");
+ buf.writeByte(sz.length);
+ buf.writeBytes(sz);
+ buf.writeBytes(generateCP56Time2a());
+
+ // 计算要校验的部分的开始索引和结束索引
+ byte c = 0;
+ int startIndex = 5; // 从第6位开始,索引是5(因为索引从0开始)
+ int endIndex = buf.readableBytes() - 1; // 到倒数第二位结束
+ // 截取并处理指定范围内的字节
+ if (startIndex <= endIndex) {
+ // 临时存放截取的字节
+ byte[] slice = new byte[endIndex - startIndex + 1];
+ // 从ByteBuf中获取数据
+ buf.getBytes(startIndex, slice);
+ c=checksum8(slice);
+ // 更新Checksum对象
+ //checksum.update(slice, 0, slice.length);
+ }
+ buf.writeByte(c);
+ // 将checksumBuffer追加到buffer末尾
+ buf.writeBytes(checksumBuffer);
+ System.out.println(EnumUtil.byteBufTo16Str(buf));
+ udpClientService.sendData(buf);
+ Thread.sleep(100);
+ }
+ }
+
+
+ private byte[] generateCP56Time2a() {
+ Calendar calendar = Calendar.getInstance();
+
+ int milliseconds = calendar.get(Calendar.MILLISECOND);
+ int minute = calendar.get(Calendar.MINUTE);
+ int hour = calendar.get(Calendar.HOUR_OF_DAY);
+ int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
+ int month = calendar.get(Calendar.MONTH) + 1; // Calendar.MONTH is zero based
+ int year = calendar.get(Calendar.YEAR) % 100; // Last two digits of the year
+
+ byte[] cp56Time2a = new byte[7];
+ cp56Time2a[0] = (byte)(milliseconds & 0xFF);
+ cp56Time2a[1] = (byte)((milliseconds >> 8) & 0xFF);
+ cp56Time2a[2] = (byte)(minute & 0xFF);
+ cp56Time2a[3] = (byte)(hour & 0xFF);
+ cp56Time2a[4] = (byte)(dayOfMonth & 0xFF);
+ cp56Time2a[5] = (byte)(month & 0xFF);
+ cp56Time2a[6] = (byte)(year & 0xFF);
+
+ return cp56Time2a;
+ }
+
+ // 8位和校验实现
+ private byte checksum8(byte[] data) {
+ byte sum = 0;
+ for (byte b : data) {
+ sum += b&0xff;
}
+ return sum;
}
}
diff --git a/device_udpclent/src/main/java/com/xr/device_udpclent/models/service/UdpClientService.java b/device_udpclent/src/main/java/com/xr/device_udpclent/models/service/UdpClientService.java
index b6ceb15..c62e78c 100644
--- a/device_udpclent/src/main/java/com/xr/device_udpclent/models/service/UdpClientService.java
+++ b/device_udpclent/src/main/java/com/xr/device_udpclent/models/service/UdpClientService.java
@@ -1,7 +1,9 @@
package com.xr.device_udpclent.models.service;
+import io.netty.buffer.ByteBuf;
+
public interface UdpClientService {
- void sendData(String data);
+ void sendData(ByteBuf byteBuf);
}
diff --git a/device_udpclent/src/main/java/com/xr/device_udpclent/models/service/impl/UdpClientServiceImpl.java b/device_udpclent/src/main/java/com/xr/device_udpclent/models/service/impl/UdpClientServiceImpl.java
index 9b4ac2e..d360045 100644
--- a/device_udpclent/src/main/java/com/xr/device_udpclent/models/service/impl/UdpClientServiceImpl.java
+++ b/device_udpclent/src/main/java/com/xr/device_udpclent/models/service/impl/UdpClientServiceImpl.java
@@ -3,6 +3,7 @@ package com.xr.device_udpclent.models.service.impl;
import com.xr.device_udpclent.models.entity.SendUdpLog;
import com.xr.device_udpclent.models.service.SendUdpLogService;
import com.xr.device_udpclent.models.service.UdpClientService;
+import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.socket.DatagramChannel;
import io.netty.channel.socket.DatagramPacket;
@@ -26,14 +27,14 @@ public class UdpClientServiceImpl implements UdpClientService {
private SendUdpLogService sendUdpLogService;
@Override
- public void sendData(String data) {
+ public void sendData(ByteBuf byteBuf) {
SendUdpLog sendUdbLog=new SendUdpLog();
- sendUdbLog.setRequestMsg(data);
+ sendUdbLog.setRequestMsg(byteBuf.toString());
sendUdbLog.setRequestTime(new Date());
- sendUdbLog.setMessageId(data.split("\t")[0]);
+ sendUdbLog.setMessageId(new Date().getTime()+"");
try {
udpChannel.writeAndFlush(new DatagramPacket(
- Unpooled.copiedBuffer(data, CharsetUtil.UTF_8), udpServerAddress)).sync();
+ Unpooled.copiedBuffer(byteBuf), udpServerAddress)).sync();
sendUdbLog.setRequestStatus("0");
} catch (Exception e) {
sendUdbLog.setRequestStatus("1");
diff --git a/device_udpclent/src/main/resources/application-dev.yml b/device_udpclent/src/main/resources/application-dev.yml
index 0e4a957..95a2024 100644
--- a/device_udpclent/src/main/resources/application-dev.yml
+++ b/device_udpclent/src/main/resources/application-dev.yml
@@ -88,7 +88,7 @@ logging:
logging: debug
udp:
server:
- host: localhost
+ host: 192.168.1.100
port: 9300
upLoad:
path: D:\\images\\images\\
diff --git a/device_udpclent/src/main/resources/application-prod.yml b/device_udpclent/src/main/resources/application-prod.yml
index bfe21b6..63591d8 100644
--- a/device_udpclent/src/main/resources/application-prod.yml
+++ b/device_udpclent/src/main/resources/application-prod.yml
@@ -1,5 +1,5 @@
server:
- port: 8081
+ port: 8091
servlet:
context-path: /api
spring:
@@ -11,13 +11,13 @@ spring:
db1:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
- url: jdbc:mysql://192.168.1.252:3306/device_system?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
+ url: jdbc:mysql://192.168.1.94:3306/device_system?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: 123456
db2:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
- url: jdbc:mysql://192.168.1.252:3306/image_analysis_zs?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
+ url: jdbc:mysql://192.168.1.94:3306/image_analysis?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: 123456
#Hikari连接池配置
@@ -43,18 +43,30 @@ spring:
timeout-seconds: 1000
config:
enabled: false
- # redis 相关
- redis:
- host: ${REDIS_URL:localhost}
- port: ${REDIS_PORT:6379}
- password: ${REDIS_PWD:111111}
- timeout: 10000
- jedis:
- pool:
- max-active: 1000
- max-wait: -1ms
- max-idle: 10
- min-idle: 5
+ stream:
+ kafka:
+ binder:
+ brokers: localhost:9092 #Kafka的消息中间件服务器
+ zk-nodes: localhost:2181 #Zookeeper的节点,如果集群,后面加,号分隔
+ auto-create-topics: false #如果设置为false,就不会自动创建Topic 有可能你Topic还没创建就直接调用了。
+# kafka:
+# bootstrap-servers: localhost:9092
+# consumer:
+# group-id: ai-consumer-group
+#kafka:
+# topic: ai-topic
+# # redis 相关
+# redis:
+# host: ${REDIS_URL:localhost}
+# port: ${REDIS_PORT:6379}
+# password: ${REDIS_PWD:111111}
+# timeout: 10000
+# jedis:
+# pool:
+# max-active: 1000
+# max-wait: -1ms
+# max-idle: 10
+# min-idle: 5
mybatis-plus:
mapper-locations: classpath:mapper/*Mapper.xml
type-aliases-package: com.xr.device_udpclent
@@ -76,14 +88,14 @@ logging:
logging: debug
udp:
server:
- host: localhost
+ host: 192.168.1.100
port: 9300
-python:
- path: C:\\Users\\admin\\Anaconda3\\envs\\myconda310\\python.exe
- modelPath: D:\\smartGrid\\smartGrid\\models
upLoad:
path: D:\\images\\images\\
url: http://localhost:85/upload/
+python:
+ path: C:\\Users\\admin\\Anaconda3\\envs\\myconda310\\python.exe
+ modelPath: D:\\smartGrid\\smartGrid\\models
eureka:
instance:
instance-id: ${spring.cloud.client.ip-address}:${server.port}
diff --git a/device_udpclent/src/main/resources/application.yml b/device_udpclent/src/main/resources/application.yml
index 9297701..0be90c8 100644
--- a/device_udpclent/src/main/resources/application.yml
+++ b/device_udpclent/src/main/resources/application.yml
@@ -1,6 +1,6 @@
spring:
profiles:
- active: dev #开发环境
+ active: prod #开发环境
# active: test #测试环境5
#active: prod #生产环境
application:
diff --git a/device_udpclent/src/main/resources/logback.xml b/device_udpclent/src/main/resources/logback.xml
new file mode 100644
index 0000000..8c2587c
--- /dev/null
+++ b/device_udpclent/src/main/resources/logback.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
+
+
+
+
+
+
+
+ ${LOG_HOME}/udpClient.log.%d{yyyy-MM-dd}.log
+
+ 30
+
+
+
+ %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
+
+
+
+ 10MB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/device_udpclent/src/main/resources/mapper/MeterReadingRecordMapper.xml b/device_udpclent/src/main/resources/mapper/MeterReadingRecordMapper.xml
index 3ecbaf2..de8091f 100644
--- a/device_udpclent/src/main/resources/mapper/MeterReadingRecordMapper.xml
+++ b/device_udpclent/src/main/resources/mapper/MeterReadingRecordMapper.xml
@@ -30,8 +30,10 @@