Compare commits

...

9 Commits

  1. 44
      pom.xml
  2. 36
      src/main/java/com/techsor/datacenter/sender/dao/TypeDAO.java
  3. 32
      src/main/java/com/techsor/datacenter/sender/entitiy/TypeEntity.java
  4. 40
      src/main/java/com/techsor/datacenter/sender/entitiy/kingio/KingIODataItemEntity.java
  5. 212
      src/main/java/com/techsor/datacenter/sender/service/KingIOServerService.java

44
pom.xml

@ -481,28 +481,7 @@
</authConfig>
<images>
<image>
<name>${aws.ecr.registry}/${aws.ecr.repository}:latest</name>
<registry>${aws.ecr.registry}</registry>
<build>
<dockerFile>${project.basedir}/Dockerfile</dockerFile>
</build>
</image>
</images>
</configuration>
</plugin>
<!-- 测试环境 -->
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.38.1</version>
<configuration>
<authConfig>
<username>AKIAQNYBBSGDVT3VF4ON</username>
<password>DEhPMTHAIsKK7L2klURQrmMe3r2Tqgbaa6z2FYQu</password>
</authConfig>
<images>
<image>
<name>${aws.ecr.registryTest}/aeon/${aws.ecr.repository}:latest</name>
<name>${aws.ecr.registry}/aeon-prod/${aws.ecr.repositoryProd}:latest</name>
<registry>${aws.ecr.registry}</registry>
<build>
<dockerFile>${project.basedir}/Dockerfile</dockerFile>
@ -511,6 +490,27 @@
</images>
</configuration>
</plugin>
<!-- &lt;!&ndash; 测试环境 &ndash;&gt;-->
<!-- <plugin>-->
<!-- <groupId>io.fabric8</groupId>-->
<!-- <artifactId>docker-maven-plugin</artifactId>-->
<!-- <version>0.38.1</version>-->
<!-- <configuration>-->
<!-- <authConfig>-->
<!-- <username>AKIAQNYBBSGDVT3VF4ON</username>-->
<!-- <password>DEhPMTHAIsKK7L2klURQrmMe3r2Tqgbaa6z2FYQu</password>-->
<!-- </authConfig>-->
<!-- <images>-->
<!-- <image>-->
<!-- <name>${aws.ecr.registryTest}/aeon/${aws.ecr.repository}:latest</name>-->
<!-- <registry>${aws.ecr.registry}</registry>-->
<!-- <build>-->
<!-- <dockerFile>${project.basedir}/Dockerfile</dockerFile>-->
<!-- </build>-->
<!-- </image>-->
<!-- </images>-->
<!-- </configuration>-->
<!-- </plugin>-->
</plugins>

36
src/main/java/com/techsor/datacenter/sender/dao/TypeDAO.java

@ -0,0 +1,36 @@
package com.techsor.datacenter.sender.dao;
import com.techsor.datacenter.sender.entitiy.DeviceEntity;
import com.techsor.datacenter.sender.entitiy.TypeEntity;
import jakarta.annotation.Resource;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class TypeDAO {
@Resource
private JdbcTemplate jdbcTemplate ;
//Get Wsclient info by deviceId
@Cacheable(value = "typeDAO::queryCategoryIdByTypeId", key = "#typeId")
public Long queryCategoryIdByTypeId(Integer typeId) {
String sql = "SELECT id,device_category_id FROM type WHERE id="+typeId+" and flag!=1";
List<TypeEntity> dataList = jdbcTemplate.query(sql,
(rs, rowNum) -> {
TypeEntity item = new TypeEntity();
item.setId(rs.getInt("id"));
item.setDeviceCategoryId(rs.getLong("device_category_id"));
return item;
});
if (dataList.size()==0){
return null;
}else{
return dataList.get(dataList.size()-1).getDeviceCategoryId();
}
}
}

32
src/main/java/com/techsor/datacenter/sender/entitiy/TypeEntity.java

@ -0,0 +1,32 @@
package com.techsor.datacenter.sender.entitiy;
import lombok.Data;
import java.io.Serializable;
@Data
public class TypeEntity implements Serializable {
private Integer id;
private String name;
private String description;
private String deviceType; // 设备类别
private String deviceDataSrc; // 设备数据来源
private String originJsonFormat; // 原始数据来源
private String expressionMap; // 表达式映射
private String expressionVariableMap; // 表达式变量map
private String targetJsonFormat; // 转发数据格式
private Long targetForwardId; // 转发目标ID
private String targetForwardCode; // 转发识别代码 (修正了原表中的拼写错误)
private Long createdBy; // 创建人
private Long updatedBy; // 更新人
private Long companyId; // 公司ID
private Long spaceId; // 空间ID
private Integer flag; // 标志位:0:正常;1:删除
private String dbmId; // dbmId,{"[deviceId][dbm_id]":value}
private String nameZh; // name中文
private String nameEn; // name英文
private Long deviceCategoryId; // 设备大类ID
private String unit; // 单位信息
}

40
src/main/java/com/techsor/datacenter/sender/entitiy/kingio/KingIODataItemEntity.java

@ -19,4 +19,44 @@ public class KingIODataItemEntity {
this.timestamp = formattedTimestamp;
this.quality = s;
}
/**
* 自定义的 getter 方法根据原始 value 的类型返回预处理后的值
* 注意这里返回 Float 而不是 float因为 Object 不能持有原始类型
*/
public Object getValue() {
if (this.value instanceof Number) { // 检查是否为数字类型
Number num = (Number) this.value;
// 检查是否为整数类型 (Integer, Long, Short, Byte)
if (this.value instanceof Integer ||
this.value instanceof Long ||
this.value instanceof Short ||
this.value instanceof Byte) {
// 返回 Integer (intValue() 返回 int,自动装箱为 Integer)
// 如果 value 本身就是 Integer,直接返回即可
if (this.value instanceof Integer) {
return this.value;
} else {
// 如果是 Long, Short, Byte,转换为 Integer
return num.intValue();
}
} else {
// 其他数字类型 (Double, Float 等) 视为小数
// 你要求返回 float,所以即使是 Double 也转换为 float
// 注意:从 Double 转换为 Float 可能会有精度损失
if (this.value instanceof Float) {
return this.value; // 如果 value 本身就是 Float,直接返回
} else {
return num.floatValue(); // 返回 Float (如从 Double 转换)
}
}
} else if (this.value instanceof String) {
return this.value; // 如果是 String,直接返回
} else if (this.value instanceof Boolean) {
return this.value; // 如果是 Boolean,直接返回
}
// 如果是其他类型(如 Character 等),也可以按需处理
// 或者保持原样返回
return this.value;
}
}

212
src/main/java/com/techsor/datacenter/sender/service/KingIOServerService.java

@ -6,6 +6,7 @@ import com.google.gson.Gson;
import com.techsor.datacenter.sender.components.CommonOpt;
import com.techsor.datacenter.sender.config.DataSourceContextHolder;
import com.techsor.datacenter.sender.dao.KingIOServerDAO;
import com.techsor.datacenter.sender.dao.TypeDAO;
import com.techsor.datacenter.sender.entitiy.DeviceEntity;
import com.techsor.datacenter.sender.entitiy.kingio.KingIODataModel;
import com.techsor.datacenter.sender.entitiy.kingio.KingIODataItemEntity;
@ -35,6 +36,8 @@ import java.util.Map;
@Component("kingIOServerService")
public class KingIOServerService {
@Resource
TypeDAO typeDAO;
@Resource
KingIOServerDAO kingIOServerDAO;
@Autowired
@ -110,18 +113,19 @@ public class KingIOServerService {
}
//Process the number value. keep 4 ecimal places
// Process the number value. Keep 2 decimal places for floats, otherwise keep as integer.
if (value instanceof Number) {
DecimalFormat df = new DecimalFormat("#.####"); // 保留四位小数的格式
String formatted = df.format((Number)value);
value = Double.parseDouble(formatted);
}else if (value instanceof Boolean){
if((Boolean)value==true){
value = 1;
}else{
value = 0;
double doubleVal = ((Number) value).doubleValue();
if (doubleVal % 1 == 0) { // Check if the numeric value is a whole number (e.g., 1.0, 5.0)
value = (int) doubleVal; // Represent whole numbers as Integer
} else {
// Format non-whole numbers to 2 decimal places
DecimalFormat df = new DecimalFormat("#.##");
String formatted = df.format(doubleVal);
value = Double.parseDouble(formatted); // Result is Double
}
} else if (value instanceof Boolean) {
value = (Boolean) value ? 1 : 0;
}
// 输出数据解读
@ -182,6 +186,7 @@ public class KingIOServerService {
private String generateDBMStr(DeviceEntity deviceItem,KingIODataItemEntity dataItem){
String finalStr = "";
String tempKey;
switch (deviceItem.getTypeId()){
case 80:
finalStr = String.format("{\"onoffmonitor_ios_%s\":%s",dataItem.getDeviceName(),dataItem.getValue().toString()+"}");
@ -215,6 +220,193 @@ public class KingIOServerService {
tempKey = "delta_status";
finalStr = String.format("{\"%s_"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Present_Value == 85
case 100101:
case 100201:
case 100301:
case 100321:
case 100401:
case 100421:
case 100441:
case 100461:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Status_Flags == 111
case 100102:
case 100202:
case 100302:
case 100322:
case 100402:
case 100422:
case 100442:
case 100462:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Event_State == 36
case 100103:
case 100203:
case 100303:
case 100323:
case 100403:
case 100423:
case 100443:
case 100463:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//High_Limit == 45
case 100304:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Low_Limit == 59
case 100305:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Deadband == 25
case 100306:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Limit_Enable == 52
case 100307:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Event_Timestamp == 250.1
case 100108:
case 100308:
case 100325:
case 100408:
case 100428:
case 100446:
case 100467:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":\"%s\"",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Event_Type == 250.2
case 100109:
case 100309:
case 100326:
case 100409:
case 100429:
case 100447:
case 100468:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Nofity_Type == 250.3
case 100110:
case 100310:
case 100327:
case 100410:
case 100430:
case 100448:
case 100469:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//From_State == 250.4
case 100111:
case 100311:
case 100328:
case 100411:
case 100431:
case 100449:
case 100470:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//To_State == 250.5
case 100112:
case 100312:
case 100329:
case 100412:
case 100432:
case 100450:
case 100471:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Event_Value == 250.6
case 100113:
case 100313:
case 100330:
case 100413:
case 100433:
case 100451:
case 100472:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Reliability == 103
case 100104:
case 100204:
case 100324:
case 100404:
case 100424:
case 100444:
case 100464:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Out_Of_Service == 81
case 100105:
case 100206:
case 100405:
case 100425:
case 100445:
case 100465:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Change_Of_State_Count == 15
case 100106:
case 100426:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Elapsed_Active_Time == 33
case 100107:
case 100427:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Polaroty == 84
case 100406:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Feedback_Value == 40
case 100407:
case 100466:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Buffer_Size == 126
case 100601:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Log_Buffer == 131
case 100602:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":\"%s\"",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Record_Count == 141
case 100603:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
//Total_Record_Count == 145
case 100604:
tempKey = "";
finalStr = String.format("{\"%s"+tempKey+"\":%s",deviceItem.getDeviceSN(),dataItem.getValue().toString()+"}");
break;
default:
log.error("Unsupported typeId: " + deviceItem.getTypeId());
return "";

Loading…
Cancel
Save