Browse Source

1、电表报文解析优化;

2、ai推送;
dev
3067418132@qq.com 3 weeks ago
parent
commit
d664a4df88
  1. 64
      user-service/src/main/java/com/mh/user/dto/PushAiDTO.java
  2. 65
      user-service/src/main/java/com/mh/user/job/PushDataToAIJob.java
  3. 17
      user-service/src/main/java/com/mh/user/mapper/EnergyDataMapper.java
  4. 3
      user-service/src/main/java/com/mh/user/service/EnergyDataService.java
  5. 13
      user-service/src/main/java/com/mh/user/service/impl/DataResultServiceImpl.java
  6. 7
      user-service/src/main/java/com/mh/user/service/impl/EnergyDataServiceImpl.java
  7. 4
      user-service/src/main/java/com/mh/user/strategy/EleProtocolStrategy.java
  8. 2
      user-service/src/main/resources/application-prod.yml
  9. 2
      user-service/src/main/resources/application.yml
  10. 9
      user-service/src/test/java/com/mh/user/UserServiceApplicationTests.java

64
user-service/src/main/java/com/mh/user/dto/PushAiDTO.java

@ -0,0 +1,64 @@
package com.mh.user.dto;
import java.util.StringJoiner;
/**
* @author LJF
* @version 1.0
* @project mh_esi
* @description 推送给王工AI数据
* @date 2026-04-02 09:38:05
*/
public class PushAiDTO {
private String curDate;
private Double cl;
private String projectId;
private String projectName;
public String getCurDate() {
return curDate;
}
public void setCurDate(String curDate) {
this.curDate = curDate;
}
public Double getCl() {
return cl;
}
public void setCl(Double cl) {
this.cl = cl;
}
public String getProjectId() {
return projectId;
}
public void setProjectId(String projectId) {
this.projectId = projectId;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
@Override
public String toString() {
return new StringJoiner(", ", PushAiDTO.class.getSimpleName() + "[", "]")
.add("curDate='" + curDate + "'")
.add("cl=" + cl)
.add("projectId='" + projectId + "'")
.add("projectName='" + projectName + "'")
.toString();
}
}

65
user-service/src/main/java/com/mh/user/job/PushDataToAIJob.java

@ -0,0 +1,65 @@
package com.mh.user.job;
import cn.hutool.core.date.DateUtil;
import com.mh.user.dto.PushAiDTO;
import com.mh.user.service.EnergyDataService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import java.util.Date;
import java.util.List;
/**
* @author LJF
* @version 1.0
* @project mh_esi
* @description 推送数据给王工AI进行数据分析
* @date 2026-04-02 08:54:43
*/
@Slf4j
@Component
public class PushDataToAIJob {
@Autowired
private EnergyDataService energyDataService;
// @Scheduled(cron = " 0 10 0/1 * * ? ")
public void pushDataToAIJob(){
log.info("推送数据给王工 AI 进行数据分析");
// 获取最近时间一个小时数据
// 获取前两小时前的时间
Date date = new Date();
Date date1 = DateUtils.addHours(date, -3);
String dateStr = DateUtil.format(date1, "yyyy-MM-dd HH");
List<PushAiDTO> list = energyDataService.queryPushAI(dateStr,"14");
// http 方式请求接口发送
String url = "http://192.168.1.222:8766/AIDataPush";
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
postData(url, restTemplate, headers, list);
List<PushAiDTO> list2 = energyDataService.queryPushAI(dateStr,"15");
postData(url, restTemplate, headers, list2);
}
private void postData(String url, RestTemplate restTemplate, HttpHeaders headers, List<PushAiDTO> list2) {
HttpEntity<List<PushAiDTO>> request2 = new HttpEntity<>(list2, headers);
ResponseEntity<String> response2 = null;
try {
response2 = restTemplate.postForEntity(url, request2, String.class);
} catch (RestClientException e) {
log.info("推送结果:{}", e.getMessage());
throw new RuntimeException(e);
}
log.info("推送结果:{}", response2.getBody());
}
}

17
user-service/src/main/java/com/mh/user/mapper/EnergyDataMapper.java

@ -2,6 +2,7 @@ package com.mh.user.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mh.user.dto.EnergyMomYoyDataDTO;
import com.mh.user.dto.PushAiDTO;
import com.mh.user.entity.EnergyDataEntity;
import com.mh.user.mapper.provider.EnergyDataProvider;
import org.apache.ibatis.annotations.*;
@ -178,4 +179,20 @@ public interface EnergyDataMapper extends BaseMapper<EnergyDataEntity> {
List<EnergyDataEntity> queryEnergyDataByDateRange(@Param("startDate") String startDate,
@Param("curDate") String curDate,
@Param("projectId") String projectId);
@Select("select " +
" edh.cur_date, " +
" edh.cl, " +
" edh.project_id, " +
" pi.project_name " +
"from " +
" energy_data_hour edh " +
"join project_info pi on " +
" edh.project_id = pi.id " +
"where " +
" edh.project_id = #{projectId} " +
" and edh.cur_date = #{dateStr} " +
"order by " +
" edh.cur_date ")
List<PushAiDTO> queryPushAI(String dateStr, String projectId);
}

3
user-service/src/main/java/com/mh/user/service/EnergyDataService.java

@ -1,6 +1,7 @@
package com.mh.user.service;
import com.mh.common.page.PageResult;
import com.mh.user.dto.PushAiDTO;
import com.mh.user.entity.EnergyDataEntity;
import com.mh.user.model.EnergyModel;
import java.util.List;
@ -18,4 +19,6 @@ public interface EnergyDataService {
EnergyDataEntity queryEnergyDataByDate(String curDate, String projectId);
List<EnergyDataEntity> queryEnergyDataByDateRange(String startDate, String curDate, String projectId);
List<PushAiDTO> queryPushAI(String dateStr, String projectId);
}

13
user-service/src/main/java/com/mh/user/service/impl/DataResultServiceImpl.java

@ -95,11 +95,17 @@ public class DataResultServiceImpl implements DataResultService {
data.setDeviceType(dataResultEntity.getDeviceType()); //设备类型
String curDate = sdf1.format(dataResultEntity.getCurDate());
data.setCurDate(sdf1.parse(curDate));//当前日期
data.setCurValue(dataResultEntity.getCurValue()); //当前读数
BigDecimal lastValue = meterManageEntity.getCurValue(); //安装基表上次读数
if (dataResultEntity.getCurValue().compareTo(meterManageEntity.getCurValue()) > 0) {
data.setCurValue(dataResultEntity.getCurValue()); //当前读数
data.setLastValue(lastValue);//上次读数
} else {
data.setCurValue(meterManageEntity.getCurValue());
data.setLastValue(dataResultEntity.getCurValue());
}
data.setProjectId(String.valueOf(meterManageEntity.getProjectId())); //楼栋编号
data.setRatio(BigDecimal.valueOf(meterManageEntity.getMtRatio())); //倍率
BigDecimal lastValue = meterManageEntity.getCurValue(); //安装基表上次读数
BigDecimal calcValue = dataResultEntity.getCurValue().subtract(lastValue); //计算用量
BigDecimal calcValue = dataResultEntity.getCurValue().subtract(lastValue).abs(); //计算用量
data.setCalcValue(calcValue);//用量
if (meterManageEntity.getCurTime() != null) {//上次抄表日期
String lastDate = sdf1.format(meterManageEntity.getCurTime());
@ -108,7 +114,6 @@ public class DataResultServiceImpl implements DataResultService {
String lastDate = sdf1.format(date);
data.setLastDate(sdf1.parse(lastDate));
}
data.setLastValue(lastValue);//上次读数
data.setGrade(dataResultEntity.getGrade());//级别
data.setRegisterAddr(dataResultEntity.getRegisterAddr());
data.setRegisterName(dataResultEntity.getRegisterName());

7
user-service/src/main/java/com/mh/user/service/impl/EnergyDataServiceImpl.java

@ -7,6 +7,7 @@ import com.mh.common.page.PageRequest;
import com.mh.common.page.PageResult;
import com.mh.common.utils.StringUtils;
import com.mh.user.dto.EnergyMomYoyDataDTO;
import com.mh.user.dto.PushAiDTO;
import com.mh.user.entity.DataResultChEntity;
import com.mh.user.entity.EnergyDataEntity;
import com.mh.user.mapper.EnergyDataMapper;
@ -23,6 +24,7 @@ import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
@ -411,4 +413,9 @@ public class EnergyDataServiceImpl implements EnergyDataService {
public List<EnergyDataEntity> queryEnergyDataByDateRange(String startDate, String curDate, String projectId) {
return energyDataMapper.queryEnergyDataByDateRange(startDate, curDate, projectId);
}
@Override
public List<PushAiDTO> queryPushAI(String dateStr, String projectId) {
return energyDataMapper.queryPushAI(dateStr, projectId);
}
}

4
user-service/src/main/java/com/mh/user/strategy/EleProtocolStrategy.java

@ -174,7 +174,7 @@ public class EleProtocolStrategy implements ProtocolStrategy {
* @param dataStr
*/
public void analysisMeterOrder485(final String dataStr, final DeviceCodeParamEntity deviceCodeParam) {
threadPoolService.execute(() -> {
// threadPoolService.execute(() -> {
Date date = new Date();
String dateStr = sdf1.format(date);
try {
@ -194,7 +194,7 @@ public class EleProtocolStrategy implements ProtocolStrategy {
} catch (Exception e) {
log.error("保存电表数据失败!", e);
}
});
// });
}
}

2
user-service/src/main/resources/application-prod.yml

@ -5,7 +5,7 @@ spring:
name: jnd-user-service
datasource:
#添加allowMultiQueries=true 在批量更新时才不会出错
url: jdbc:sqlserver://111.230.50.186:32012;DatabaseName=mh_jnd2;allowMultiQueries=true
url: jdbc:sqlserver://127.0.0.1:32012;DatabaseName=mh_jnd2;allowMultiQueries=true
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
username: jnd
password: Mh@803tech

2
user-service/src/main/resources/application.yml

@ -1,6 +1,6 @@
spring:
profiles:
active: dev
active: prod
servlet:
multipart:
max-file-size: 50MB

9
user-service/src/test/java/com/mh/user/UserServiceApplicationTests.java

@ -2,6 +2,7 @@ package com.mh.user;
import com.mh.user.entity.DeviceManageEntity;
import com.mh.user.entity.GaugeEntity;
import com.mh.user.job.PushDataToAIJob;
import com.mh.user.service.chillers.DealDataService;
import com.mh.user.service.chillers.DeviceManageService;
import com.mh.user.service.chillers.GaugeService;
@ -25,6 +26,14 @@ class UserServiceApplicationTests {
@Autowired
private DealDataService dealDataService;
@Autowired
private PushDataToAIJob pushDataToAIJob;
@Test
public void testPushAi() {
pushDataToAIJob.pushDataToAIJob();
}
@Test
public void testDealData() {
try {

Loading…
Cancel
Save