Browse Source

Merge branch 'master' of http://47.100.114.196:3001/jwy/aeon_sender into zhczh_c

zhczh_c
zhczyx@163.com 2 weeks ago
parent
commit
24f66efba9
  1. 1
      .java-version
  2. 5
      Dockerfile
  3. 0
      mvnw
  4. 64
      pom.xml
  5. 19
      src/main/java/com/techsor/datacenter/sender/controllers/MainReceiverController.java
  6. 33
      src/main/java/com/techsor/datacenter/sender/dao/DashboardAlertDao.java
  7. 17
      src/main/java/com/techsor/datacenter/sender/dao/DeviceDao.java
  8. 82
      src/main/java/com/techsor/datacenter/sender/dao/F10Dao.java
  9. 87
      src/main/java/com/techsor/datacenter/sender/entitiy/f10/F10JournalLog.java
  10. 13
      src/main/java/com/techsor/datacenter/sender/entitiy/f10/RedisStreamEntity.java
  11. 6
      src/main/java/com/techsor/datacenter/sender/service/AlarmDataPushLambda.java
  12. 246
      src/main/java/com/techsor/datacenter/sender/service/F10Service.java
  13. 8
      src/main/java/com/techsor/datacenter/sender/service/impl/DataProcessServiceImpl.java
  14. 4
      src/main/resources/application-dev.properties
  15. 4
      src/main/resources/application-prd.properties

1
.java-version

@ -0,0 +1 @@
17

5
Dockerfile

@ -1,7 +1,8 @@
# FROM registry.ap-northeast-1.aliyuncs.com/southwave/jdk17-template:latest
FROM amazoncorretto:17-alpine
# 安装 fontconfig 和 DejaVu 字体 (这是一个通用且免费的字体包)
RUN apk --no-cache upgrade && \
# 更新系统包并安装 fontconfig 和 DejaVu 字体 (这是一个通用且免费的字体包)
RUN apk --no-cache update && \
apk --no-cache upgrade && \
apk --no-cache add fontconfig ttf-dejavu
WORKDIR /app

0
mvnw

64
pom.xml

@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.7</version>
<version>3.5.13</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.techsor</groupId>
@ -42,7 +42,7 @@
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-bom</artifactId>
<version>4.2.9.Final</version>
<version>4.2.12.Final</version>
<type>pom</type>
<scope>import</scope>
</dependency>
@ -67,7 +67,7 @@
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>10.1.49</version>
<version>10.1.54</version>
</dependency>
<dependency>
@ -382,12 +382,12 @@
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.25.3</version>
<version>2.25.4</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.25.3</version>
<version>2.25.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.minidev/json-smart -->
@ -469,40 +469,19 @@
</configuration>
</plugin>
<!--&lt;!&ndash; 正式环境 &ndash;&gt;-->
<!-- <plugin>-->
<!-- <groupId>io.fabric8</groupId>-->
<!-- <artifactId>docker-maven-plugin</artifactId>-->
<!-- <version>0.38.1</version>-->
<!-- <configuration>-->
<!-- <authConfig>-->
<!-- <username>AKIAR26KHSVRUEAKRBPZ</username>-->
<!-- <password>wmMPx9vypaNi5ZIlyz4c018hKCb2M1dnGBdA+oh2</password>-->
<!-- </authConfig>-->
<!-- <images>-->
<!-- <image>-->
<!-- <name>${aws.ecr.registry}/aeon-prod/${aws.ecr.repositoryProd}:latest</name>-->
<!-- <registry>${aws.ecr.registry}</registry>-->
<!-- <build>-->
<!-- <dockerFile>${project.basedir}/Dockerfile</dockerFile>-->
<!-- </build>-->
<!-- </image>-->
<!-- </images>-->
<!-- </configuration>-->
<!-- </plugin>-->
<!-- 测试环境 -->
<plugin>
<!-- 正式环境 -->
<!-- <plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.38.1</version>
<configuration>
<authConfig>
<username>AKIAVSKFRQDPNWHJDSHL</username>
<password>DqGyOiVFKI50/Ix+cjvj25vPL2tC7NJrJ7fqzn/g</password>
<username>AKIAR26KHSVRUEAKRBPZ</username>
<password>wmMPx9vypaNi5ZIlyz4c018hKCb2M1dnGBdA+oh2</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>
@ -510,7 +489,28 @@
</image>
</images>
</configuration>
</plugin>
</plugin> -->
<!-- &lt;!&ndash; 测试环境 &ndash;&gt;-->
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.38.1</version>
<configuration>
<authConfig>
<username>AKIAVSKFRQDPNWHJDSHL</username>
<password>DqGyOiVFKI50/Ix+cjvj25vPL2tC7NJrJ7fqzn/g</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>

19
src/main/java/com/techsor/datacenter/sender/controllers/MainReceiverController.java

@ -1,10 +1,12 @@
package com.techsor.datacenter.sender.controllers;
import com.alibaba.fastjson2.JSON;
import com.google.gson.Gson;
import com.techsor.datacenter.sender.components.CommonOpt;
import com.techsor.datacenter.sender.config.DataSourceContextHolder;
import com.techsor.datacenter.sender.constants.CompanyConstants;
import com.techsor.datacenter.sender.entitiy.*;
import com.techsor.datacenter.sender.entitiy.f10.RedisStreamEntity;
import com.techsor.datacenter.sender.entitiy.zaiot.ProcessZAIoTRAWEntity;
import com.techsor.datacenter.sender.processers.*;
import com.techsor.datacenter.sender.service.*;
@ -58,6 +60,9 @@ public class MainReceiverController {
@Resource
ZAIoTInnerService zaIoTInnerService;
@Resource
F10Service f10Service;
@Autowired
private AsyncDataProcessor asyncDataProcessor;
@ -190,6 +195,20 @@ public class MainReceiverController {
return JsonResponse.buildSuccess(resultJson);
}
@RequestMapping(value = "generic/f10", method = RequestMethod.POST)
public JsonResponse f10Process(@RequestBody RedisStreamEntity rawEntity){
logger.debug("f10 data:{}", JSON.toJSONString(rawEntity));
//处理数据,转发数据
String resultJson="";
try{
//解析数据
this.f10Service.handle(rawEntity);
}catch (Exception e){
logger.error("f10Process error", e);
}
return JsonResponse.buildSuccess(resultJson);
}
@RequestMapping(value = "generic/mockJsonData", method = RequestMethod.POST)
public JsonResponse mockJsonData(@RequestBody ProcessRAWEntity rawEntity){
logger.warn("Received: "+new Gson().toJson(rawEntity));

33
src/main/java/com/techsor/datacenter/sender/dao/DashboardAlertDao.java

@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -19,6 +20,8 @@ import org.apache.commons.lang.StringUtils;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
import org.springframework.stereotype.Component;
import jakarta.annotation.Resource;
@ -150,16 +153,36 @@ public class DashboardAlertDao {
public void insertAlertHistory(DynamodbEntity entity) {
String sql = "INSERT INTO alert_history (" +
"device_id, receive_ts, retain_alert" +
") VALUES (?, ?, ?)";
"device_id, receive_ts, retain_alert" +
") VALUES (?, ?, ?)";
jdbcTemplate.update(sql,
entity.getDeviceId(),
entity.getReceive_ts(),
entity.getRetainAlert()
entity.getDeviceId(),
entity.getReceive_ts(),
entity.getRetainAlert()
);
}
public Long insertAlertHistory(DynamodbEntity entity, int sourceType) {
String sql = "INSERT INTO alert_history (" +
"device_id, receive_ts, source_type" +
") VALUES (?, ?, ?)";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(connection -> {
PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ps.setString(1, entity.getDeviceId());
ps.setLong(2, entity.getReceive_ts());
ps.setInt(3, sourceType);
return ps;
}, keyHolder);
// 获取主键ID
return keyHolder.getKey() != null ? keyHolder.getKey().longValue() : null;
}
public void updateLatestAlertToAutoRecovered(DynamodbEntity entity) {
String sql = "SELECT * FROM alert_history WHERE device_id = ? ORDER BY id DESC LIMIT 1";

17
src/main/java/com/techsor/datacenter/sender/dao/DeviceDao.java

@ -80,11 +80,18 @@ public class DeviceDao {
}
case "basic_monitoring_asset":{
try{
String sql="select basic_monitoring_asset.*,basic_asset_class_big.class_name as classBigName,basic_asset_class_medium.class_name as classMediumName,basic_asset_class_small.class_name as classSmallName from " +
"basic_monitoring_asset,basic_asset_class_big,basic_asset_class_medium,basic_asset_class_small where basic_monitoring_asset.equipment_id ="+id+" and basic_monitoring_asset.class_big_id = basic_asset_class_big.id" +
" and basic_monitoring_asset.class_medium_id = basic_asset_class_medium.id " +
" and basic_monitoring_asset.class_small_id = basic_asset_class_small.id ";
resultList=this.jdbcTemplate.query(sql,(rs,rowNum)->{
String sql =
"SELECT " +
"a.*, " +
"b.class_name AS classBigName, " +
"c.class_name AS classMediumName, " +
"d.class_name AS classSmallName " +
"FROM basic_monitoring_asset a " +
"LEFT JOIN basic_asset_class_big b ON a.class_big_id = b.id " +
"LEFT JOIN basic_asset_class_medium c ON a.class_medium_id = c.id " +
"LEFT JOIN basic_asset_class_small d ON a.class_small_id = d.id " +
"WHERE a.equipment_id = ?";
resultList=this.jdbcTemplate.query(sql,new Object[]{id},(rs,rowNum)->{
UdfCommonJsonInfo commonJsonInfo = new UdfCommonJsonInfo();
UdfAssetInfo udfAssetInfo=new UdfAssetInfo();
udfAssetInfo.setId(rs.getString("udf_equipment_id"));

82
src/main/java/com/techsor/datacenter/sender/dao/F10Dao.java

@ -0,0 +1,82 @@
package com.techsor.datacenter.sender.dao;
import com.techsor.datacenter.sender.entitiy.f10.F10JournalLog;
import jakarta.annotation.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class F10Dao {
@Resource
private JdbcTemplate jdbcTemplate ;
public void insertF10Log(F10JournalLog f10JournalLog) {
String sql = "INSERT IGNORE INTO f10_journal_log (" +
"device_id, company_id, raw_hex, raw_text, serial_no, mode, " +
"signal_seq, receive_date, receive_time, channel_no, test_flag, block_no, block_name, " +
"signal_type1, signal_type2, signal_label, signal_status, " +
"course_no, area_code, course_code, standby_name, physical_addr, " +
"customer_name, phone, remark, display_color, error_reason, line_type, area_name, " +
"send_date, send_time, customer_no, display_data1, display_data2, " +
"instruction_flag, signal_code, card_no, card_type, mansion_building, mansion_room, option_field, " +
"created_at, created_time, receive_timestamp, expired_flag, alert_history_id" +
") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
jdbcTemplate.update(sql,
f10JournalLog.getDeviceId(),
f10JournalLog.getCompanyId(),
f10JournalLog.getRawHex(),
f10JournalLog.getRawText(),
f10JournalLog.getSerialNo(),
f10JournalLog.getMode(),
f10JournalLog.getSignalSeq(),
f10JournalLog.getReceiveDate(),
f10JournalLog.getReceiveTime(),
f10JournalLog.getChannelNo(),
f10JournalLog.getTestFlag(),
f10JournalLog.getBlockNo(),
f10JournalLog.getBlockName(),
f10JournalLog.getSignalType1(),
f10JournalLog.getSignalType2(),
f10JournalLog.getSignalLabel(),
f10JournalLog.getSignalStatus(),
f10JournalLog.getCourseNo(),
f10JournalLog.getAreaCode(),
f10JournalLog.getCourseCode(),
f10JournalLog.getStandbyName(),
f10JournalLog.getPhysicalAddr(),
f10JournalLog.getCustomerName(),
f10JournalLog.getPhone(),
f10JournalLog.getRemark(),
f10JournalLog.getDisplayColor(),
f10JournalLog.getErrorReason(),
f10JournalLog.getLineType(),
f10JournalLog.getAreaName(),
f10JournalLog.getSendDate(),
f10JournalLog.getSendTime(),
f10JournalLog.getCustomerNo(),
f10JournalLog.getDisplayData1(),
f10JournalLog.getDisplayData2(),
f10JournalLog.getInstructionFlag(),
f10JournalLog.getSignalCode(),
f10JournalLog.getCardNo(),
f10JournalLog.getCardType(),
f10JournalLog.getMansionBuilding(),
f10JournalLog.getMansionRoom(),
f10JournalLog.getOptionField(),
f10JournalLog.getCreatedAt(),
new java.sql.Timestamp(f10JournalLog.getCreatedAt()),
f10JournalLog.getReceiveTimestamp(),
f10JournalLog.getExpiredFlag(),
f10JournalLog.getAlertHistoryId()
);
}
}

87
src/main/java/com/techsor/datacenter/sender/entitiy/f10/F10JournalLog.java

@ -0,0 +1,87 @@
package com.techsor.datacenter.sender.entitiy.f10;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class F10JournalLog {
// ===== 主键 =====
private Long id;
// ===== 设备 =====
private String deviceId;
private Long companyId;
// ===== 原始数据 =====
private String rawHex;
private String rawText;
// ===== 报文头 =====
private String serialNo;
private String mode;
// ===== 1~35字段 =====
private String signalSeq;
private String receiveDate;
private String receiveTime;
private String channelNo;
private String testFlag;
private String blockNo;
private String blockName;
private String signalType1;
private String signalType2;
private String signalLabel;
private String signalStatus;
private String courseNo;
private String areaCode;
private String courseCode;
private String standbyName;
private String physicalAddr;
private String customerName;
private String phone;
private String remark;
private String displayColor;
private String errorReason;
private String lineType;
private String areaName;
private String sendDate;
private String sendTime;
private String customerNo;
private String displayData1;
private String displayData2;
private String instructionFlag;
private String signalCode;
private String cardNo;
private String cardType;
private String mansionBuilding;
private String mansionRoom;
private String optionField;
// ===== 系统字段 =====
private Long createdAt; // 毫秒时间戳
private LocalDateTime createdTime; // 标准时间
// 接收时间戳(JST)
private Long receiveTimestamp;
// 是否过期告警(0=正常,1=过期)
private Integer expiredFlag;
private Long alertHistoryId;
}

13
src/main/java/com/techsor/datacenter/sender/entitiy/f10/RedisStreamEntity.java

@ -0,0 +1,13 @@
package com.techsor.datacenter.sender.entitiy.f10;
import lombok.Data;
@Data
public class RedisStreamEntity {
private int partition;;
private String hexRawData;
private String payload;
private long ts;
}

6
src/main/java/com/techsor/datacenter/sender/service/AlarmDataPushLambda.java

@ -469,9 +469,9 @@ public class AlarmDataPushLambda {
String receiver = emailList.get(0);
String cc = String.join(",", emailList.subList(1, emailList.size()));
String errorMsg = "";
try{
new SendMail().sendMail(subject, content, receiver, cc);
} catch(Exception e) {
try{
new SendMail().sendMail(subject, content.replace("\r\n", "<br>").replace("\n", "<br>"), receiver, cc);
} catch(Exception e) {
log.error("[SendMail Error] email send failed", e);
errorMsg = e.getMessage();
}

246
src/main/java/com/techsor/datacenter/sender/service/F10Service.java

@ -0,0 +1,246 @@
package com.techsor.datacenter.sender.service;
import cn.hutool.core.collection.CollectionUtil;
import com.techsor.datacenter.sender.components.CommonOpt;
import com.techsor.datacenter.sender.components.GuavaRedisCache;
import com.techsor.datacenter.sender.config.DataSourceContextHolder;
import com.techsor.datacenter.sender.dao.DashboardAlertDao;
import com.techsor.datacenter.sender.dao.DeviceDao;
import com.techsor.datacenter.sender.dao.F10Dao;
import com.techsor.datacenter.sender.entitiy.DeviceEntity;
import com.techsor.datacenter.sender.entitiy.DynamodbEntity;
import com.techsor.datacenter.sender.entitiy.f10.F10JournalLog;
import com.techsor.datacenter.sender.entitiy.f10.RedisStreamEntity;
import com.techsor.datacenter.sender.utils.RedisUtils;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.nio.charset.Charset;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
@Slf4j
@Service("F10Service")
public class F10Service {
private static final Charset SHIFT_JIS = Charset.forName("Shift-JIS");
private static final ZoneId JST = ZoneId.of("Asia/Tokyo");
@Autowired
private CommonOpt commonOpt;
@Resource
private GuavaRedisCache guavaRedisCache;
@Resource
private RedisUtils redisUtils;
@Autowired
private F10Dao f10Dao;
@Autowired
private DeviceDao deviceDao;
@Autowired
private DashboardAlertDao dashboardAlertDao;
public void handle(RedisStreamEntity rawEntity) {
String hexLog = rawEntity.getHexRawData().trim();
byte[] src = hexStringToByteArray(hexLog);
//(STX:1 + Serial:4 + Mode:2 + 正文:320 + ETX:1)
if (src.length < 328) {
log.warn("原始报文长度不足328字节");
return;
}
try {
long currentTs = System.currentTimeMillis();
F10JournalLog f10JournalLog = parseToEntity(rawEntity.getHexRawData());
f10JournalLog.setCreatedAt(currentTs);
//前缀_26契約先番号_4チャンネル番号
//前缀还没定,先【26契約先番号_4チャンネル番号】
f10JournalLog.setDeviceId(f10JournalLog.getCustomerNo() + "_" + f10JournalLog.getChannelNo());
long receivedCurrentTs = parseToTimestamp(f10JournalLog.getReceiveDate(), f10JournalLog.getReceiveTime());
f10JournalLog.setReceiveTimestamp(receivedCurrentTs);
String redisKey = getLatestAlarmKey(f10JournalLog.getDeviceId());
// 从 Redis 取值
String latestTsStr = redisUtils.get(redisKey);
Long latestTs = null;
if (latestTsStr != null) {
try {
latestTs = Long.parseLong(latestTsStr);
} catch (Exception e) {
log.error("Redis数据异常,无法转换为Long: key={}, value={}", redisKey, latestTsStr);
}
}
boolean isExpired = false;
// ===== 判断逻辑 =====
if (latestTs == null) {
// 首次
redisUtils.add(redisKey, String.valueOf(receivedCurrentTs));
} else {
if (receivedCurrentTs > latestTs) {
// 新数据
redisUtils.add(redisKey, String.valueOf(receivedCurrentTs));
} else if (receivedCurrentTs == latestTs) {
// 重复数据 → 直接丢弃
log.warn("重复告警,丢弃 deviceId={}", f10JournalLog.getDeviceId());
return;
} else {
// 旧数据 → 标记过期
isExpired = true;
}
}
f10JournalLog.setExpiredFlag(isExpired ? 1 : 0);
String topCompanyId= commonOpt.getTopCompanyId(f10JournalLog.getDeviceId());
if (topCompanyId==null || topCompanyId.equals("0")){
log.error("no companyId is found========================>>>> {}",f10JournalLog.getDeviceId());
return;
}
DataSourceContextHolder.clearCurrentDataSourceKey();
DataSourceContextHolder.setCurrentDataSourceKey("dataSourceForCompany_"+topCompanyId);
log.info("Use datasource for company:"+topCompanyId);
List<DeviceEntity> deviceEntity=this.deviceDao.getDeviceInfoByDeviceId(f10JournalLog.getDeviceId());
this.guavaRedisCache.incrementDailyDeviceIdCount(f10JournalLog.getDeviceId());
if (CollectionUtil.isEmpty(deviceEntity)){
log.error("no deviceEntity is found========================>>>> {}",f10JournalLog.getDeviceId());
return;
}
Long companyId = deviceEntity.get(0).getCompanyId();
f10JournalLog.setCompanyId(companyId);
if (!isExpired){
DynamodbEntity entity = new DynamodbEntity();
entity.setDeviceId(f10JournalLog.getDeviceId());
entity.setReceive_ts(currentTs);
Long dbId = dashboardAlertDao.insertAlertHistory(entity, 2);
f10JournalLog.setAlertHistoryId(dbId);
}
f10Dao.insertF10Log(f10JournalLog);
} catch (Exception e) {
log.error("F10解析入库失败", e);
}
}
public static String getLatestAlarmKey(String deviceId) {
return "f10:latest_alarm:" + deviceId;
}
public static F10JournalLog parseToEntity(String hexLog) {
byte[] src = hexStringToByteArray(hexLog);
int offset = 0;
// 跳过 STX
offset += 1;
String serialNo = new String(Arrays.copyOfRange(src, offset, offset + 4), SHIFT_JIS);
String mode = new String(Arrays.copyOfRange(src, offset, offset + 2), SHIFT_JIS);
int bodyStart = 7;
int bodyEnd = src.length - 1;
byte[] body = Arrays.copyOfRange(src, bodyStart, bodyEnd);
String rawText = new String(body, SHIFT_JIS).trim();
F10JournalLog f10JournalLog = new F10JournalLog();
f10JournalLog.setRawHex(hexLog);
f10JournalLog.setRawText(rawText);
f10JournalLog.setSerialNo(serialNo);
f10JournalLog.setMode(mode);
offset = 7;
f10JournalLog.setSignalSeq(getTargetData(src, offset, 9)); offset += 9;
f10JournalLog.setReceiveDate(getTargetData(src, offset, 8)); offset += 8;
f10JournalLog.setReceiveTime(getTargetData(src, offset, 6)); offset += 6;
f10JournalLog.setChannelNo(getTargetData(src, offset, 3)); offset += 3;
f10JournalLog.setTestFlag(getTargetData(src, offset, 1)); offset += 1;
f10JournalLog.setBlockNo(getTargetData(src, offset, 2)); offset += 2;
f10JournalLog.setBlockName(getTargetData(src, offset, 30)); offset += 30;
f10JournalLog.setSignalType1(getTargetData(src, offset, 2)); offset += 2;
f10JournalLog.setSignalType2(getTargetData(src, offset, 2)); offset += 2;
f10JournalLog.setSignalLabel(getTargetData(src, offset, 2)); offset += 2;
f10JournalLog.setSignalStatus(getTargetData(src, offset, 1)); offset += 1;
f10JournalLog.setCourseNo(getTargetData(src, offset, 3)); offset += 3;
f10JournalLog.setAreaCode(getTargetData(src, offset, 2)); offset += 2;
f10JournalLog.setCourseCode(getTargetData(src, offset, 3)); offset += 3;
f10JournalLog.setStandbyName(getTargetData(src, offset, 20)); offset += 20;
f10JournalLog.setPhysicalAddr(getTargetData(src, offset, 8)); offset += 8;
f10JournalLog.setCustomerName(getTargetData(src, offset, 30)); offset += 30;
f10JournalLog.setPhone(getTargetData(src, offset, 20)); offset += 20;
f10JournalLog.setRemark(getTargetData(src, offset, 60)); offset += 60;
f10JournalLog.setDisplayColor(getTargetData(src, offset, 2)); offset += 2;
f10JournalLog.setErrorReason(getTargetData(src, offset, 1)); offset += 1;
f10JournalLog.setLineType(getTargetData(src, offset, 2)); offset += 2;
f10JournalLog.setAreaName(getTargetData(src, offset, 12)); offset += 12;
f10JournalLog.setSendDate(getTargetData(src, offset, 8)); offset += 8;
f10JournalLog.setSendTime(getTargetData(src, offset, 6)); offset += 6;
f10JournalLog.setCustomerNo(getTargetData(src, offset, 8)); offset += 8;
f10JournalLog.setDisplayData1(getTargetData(src, offset, 20)); offset += 20;
f10JournalLog.setDisplayData2(getTargetData(src, offset, 20)); offset += 20;
f10JournalLog.setInstructionFlag(getTargetData(src, offset, 1)); offset += 1;
f10JournalLog.setSignalCode(getTargetData(src, offset, 4)); offset += 4;
f10JournalLog.setCardNo(getTargetData(src, offset, 7)); offset += 7;
f10JournalLog.setCardType(getTargetData(src, offset, 1)); offset += 1;
f10JournalLog.setMansionBuilding(getTargetData(src, offset, 2)); offset += 2;
f10JournalLog.setMansionRoom(getTargetData(src, offset, 4)); offset += 4;
f10JournalLog.setOptionField(getTargetData(src, offset, 10));
return f10JournalLog;
}
private static String getTargetData(byte[] src, int start, int len) {
return new String(Arrays.copyOfRange(src, start, start + len), SHIFT_JIS).trim();
}
private static byte[] hexStringToByteArray(String s) {
s = s.replace(" ", "");
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i + 1), 16));
}
return data;
}
public static long parseToTimestamp(String date, String time) {
LocalDateTime ldt = LocalDateTime.parse(
date + time,
DateTimeFormatter.ofPattern("yyyyMMddHHmmss")
);
return ldt.atZone(JST).toInstant().toEpochMilli();
}
}

8
src/main/java/com/techsor/datacenter/sender/service/impl/DataProcessServiceImpl.java

@ -136,6 +136,9 @@ public class DataProcessServiceImpl implements IDataProcessService {
@Value("${category.id.accumulate}")
private List<Long> categoryIdAccumulate;
@Value("${category.id.trendLog}")
private List<Long> categoryIdTrendLog;
@Value("${category.id.status}")
private List<Long> categoryIdStatus;
@ -152,6 +155,7 @@ public class DataProcessServiceImpl implements IDataProcessService {
ALL_CATEGORY_ID.addAll(categoryIdMeasure);
ALL_CATEGORY_ID.addAll(categoryIdAccumulate);
ALL_CATEGORY_ID.addAll(categoryIdStatus);
ALL_CATEGORY_ID.addAll(categoryIdTrendLog);
}
private static final String REDIS_DASHBOARD_DEVICE_STATUS_KEY = "dashboard_device_status";
@ -735,6 +739,10 @@ public class DataProcessServiceImpl implements IDataProcessService {
if (categoryIdMeasure.contains(baseTransDataEntity.getCategoryId())) {
storageMeasure(DeviceAttrCode.COMMON, uploadValue, baseTransDataEntity);
}
//20260401 类型1006暂时先用计测
if (categoryIdTrendLog.contains(baseTransDataEntity.getCategoryId())) {
storageAccumulate(DeviceAttrCode.COMMON, uploadValue, baseTransDataEntity);
}
}
}
}

4
src/main/resources/application-dev.properties

@ -106,9 +106,11 @@ category.id.alarm=1001
# 计测类设备类型ID
category.id.measure=1003
# 累积类设备类型ID
category.id.accumulate=1002,1006
category.id.accumulate=1002
# 状态类设备类型ID
category.id.status=1004
# trendLog设备类型ID
category.id.trendLog=1006
data.operation.batch-size=${dataOperationBatchSize:100}

4
src/main/resources/application-prd.properties

@ -100,9 +100,11 @@ category.id.alarm=1001
# 计测类设备类型ID
category.id.measure=1003
# 累积类设备类型ID
category.id.accumulate=1002,1006
category.id.accumulate=1002
# 状态类设备类型ID
category.id.status=1004
# trendLog设备类型ID
category.id.trendLog=1006
data.operation.batch-size=${dataOperationBatchSize:100}

Loading…
Cancel
Save