Browse Source

1、增加设备采集参数增删查改接口;

2、接入mqtt设备更新兼容;
dev
25604 4 days ago
parent
commit
097a9e6c81
  1. 22
      pom.xml
  2. 11
      user-service/pom.xml
  3. 2
      user-service/src/main/java/com/mh/user/config/CorsConfig.java
  4. 62
      user-service/src/main/java/com/mh/user/config/mqtt/InboundMessageRouter.java
  5. 99
      user-service/src/main/java/com/mh/user/config/mqtt/MqttConfig.java
  6. 91
      user-service/src/main/java/com/mh/user/config/mqtt/MqttInboundConfig.java
  7. 55
      user-service/src/main/java/com/mh/user/config/mqtt/MqttMessageChannel.java
  8. 51
      user-service/src/main/java/com/mh/user/config/mqtt/MqttOutboundConfig.java
  9. 2
      user-service/src/main/java/com/mh/user/constants/TopicEnum.java
  10. 7
      user-service/src/main/java/com/mh/user/controller/CodeTableController.java
  11. 71
      user-service/src/main/java/com/mh/user/controller/CollectionParamsManageController.java
  12. 108
      user-service/src/main/java/com/mh/user/entity/CollectionParamsManageEntity.java
  13. 7
      user-service/src/main/java/com/mh/user/factory/BackTempControl.java
  14. 18
      user-service/src/main/java/com/mh/user/factory/Device.java
  15. 7
      user-service/src/main/java/com/mh/user/factory/EleMeter.java
  16. 7
      user-service/src/main/java/com/mh/user/factory/HeatPump.java
  17. 7
      user-service/src/main/java/com/mh/user/factory/HeatPumpStatus.java
  18. 8
      user-service/src/main/java/com/mh/user/factory/MultiControl.java
  19. 8
      user-service/src/main/java/com/mh/user/factory/PressureTrans.java
  20. 8
      user-service/src/main/java/com/mh/user/factory/StatusCheck.java
  21. 8
      user-service/src/main/java/com/mh/user/factory/TempControl.java
  22. 8
      user-service/src/main/java/com/mh/user/factory/TempTrans.java
  23. 8
      user-service/src/main/java/com/mh/user/factory/TimeControl.java
  24. 8
      user-service/src/main/java/com/mh/user/factory/WaterLevelSwitch.java
  25. 8
      user-service/src/main/java/com/mh/user/factory/WtMeter.java
  26. 2
      user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java
  27. 2
      user-service/src/main/java/com/mh/user/job/GetWeatherInfoJob.java
  28. 3
      user-service/src/main/java/com/mh/user/mapper/CodeTableMapper.java
  29. 128
      user-service/src/main/java/com/mh/user/mapper/CollectionParamsManageMapper.java
  30. 3
      user-service/src/main/java/com/mh/user/mapper/GatewayManageMapper.java
  31. 2
      user-service/src/main/java/com/mh/user/mapper/MqttSubscriptionMapper.java
  32. 10
      user-service/src/main/java/com/mh/user/model/SanShiFengDatas.java
  33. 10
      user-service/src/main/java/com/mh/user/model/SanShiFengReceiver.java
  34. 2
      user-service/src/main/java/com/mh/user/service/CodeTableService.java
  35. 32
      user-service/src/main/java/com/mh/user/service/CollectionParamsManageService.java
  36. 2
      user-service/src/main/java/com/mh/user/service/GatewayManageService.java
  37. 6
      user-service/src/main/java/com/mh/user/service/impl/CodeTableServiceImpl.java
  38. 84
      user-service/src/main/java/com/mh/user/service/impl/CollectionParamsManageServiceImpl.java
  39. 5
      user-service/src/main/java/com/mh/user/service/impl/GatewayManageServiceImpl.java
  40. 4
      user-service/src/main/java/com/mh/user/service/mqtt/config/MqttConfig.java
  41. 59
      user-service/src/main/java/com/mh/user/service/mqtt/service/impl/EventsServiceImpl.java
  42. 5
      user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttTopicServiceImpl.java
  43. 4
      user-service/src/main/java/com/mh/user/strategy/BackTempControlStrategy.java
  44. 4
      user-service/src/main/java/com/mh/user/strategy/DeviceStrategy.java
  45. 20
      user-service/src/main/java/com/mh/user/strategy/EleMeterStrategy.java
  46. 4
      user-service/src/main/java/com/mh/user/strategy/HeatPumpStatusStrategy.java
  47. 67
      user-service/src/main/java/com/mh/user/strategy/HeatPumpStrategy.java
  48. 3
      user-service/src/main/java/com/mh/user/strategy/MultiControlStrategy.java
  49. 4
      user-service/src/main/java/com/mh/user/strategy/PressureTransStrategy.java
  50. 4
      user-service/src/main/java/com/mh/user/strategy/StatusCheckStrategy.java
  51. 4
      user-service/src/main/java/com/mh/user/strategy/TempControlStrategy.java
  52. 4
      user-service/src/main/java/com/mh/user/strategy/TempTransStrategy.java
  53. 52
      user-service/src/main/java/com/mh/user/strategy/TimeControlStrategy.java
  54. 8
      user-service/src/main/java/com/mh/user/strategy/WaterLevelSwitchStrategy.java
  55. 4
      user-service/src/main/java/com/mh/user/strategy/WtMeterStrategy.java
  56. 2
      user-service/src/main/resources/application-dev.yml
  57. 39
      user-service/src/main/resources/application-prod.yml
  58. 5
      user-service/src/main/resources/application.yml
  59. 48
      user-service/src/test/java/com/mh/user/device/CRC16Test.java

22
pom.xml

@ -17,7 +17,7 @@
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version> <version>2.7.18</version>
<relativePath/> <!-- lookup parent from repository --> <relativePath/> <!-- lookup parent from repository -->
</parent> </parent>
@ -50,21 +50,33 @@
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId> <artifactId>spring-messaging</artifactId>
<version>6.2.1</version> <version>5.3.39</version>
</dependency> </dependency>
<!-- spring-integration-mqtt --> <!-- spring-integration-mqtt -->
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-core</artifactId>
<version>5.5.18</version>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.integration</groupId> <groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId> <artifactId>spring-integration-mqtt</artifactId>
<version>6.3.4</version> <version>5.5.18</version>
</dependency> </dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-integration</artifactId>-->
<!-- <version>3.4.2</version>-->
<!-- </dependency>-->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-integration</artifactId> <artifactId>spring-boot-starter-validation</artifactId>
<version>3.4.2</version>
</dependency> </dependency>
</dependencies> </dependencies>
<dependencyManagement> <dependencyManagement>

11
user-service/pom.xml

@ -58,6 +58,11 @@
<artifactId>mybatis-spring-boot-starter</artifactId> <artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version> <version>2.3.0</version>
</dependency> </dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.2.3</version>
</dependency>
<!-- druid配置--> <!-- druid配置-->
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
@ -119,12 +124,6 @@
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.3.9</version>
</dependency>
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId> <artifactId>commons-pool2</artifactId>

2
user-service/src/main/java/com/mh/user/config/CorsConfig.java

@ -30,7 +30,7 @@ public class CorsConfig implements WebMvcConfigurer {
@Override @Override
public void addCorsMappings(CorsRegistry registry) { public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 允许跨域访问的路径 registry.addMapping("/**") // 允许跨域访问的路径
.allowedOrigins("*") // 允许跨域访问的源 .allowedOriginPatterns("*") // 使用allowedOriginPatterns代替allowedOrigins
.allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") // 允许请求方法 .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") // 允许请求方法
.maxAge(168000) // 预检间隔时间 .maxAge(168000) // 预检间隔时间
.allowedHeaders("*") // 允许头部设置 .allowedHeaders("*") // 允许头部设置

62
user-service/src/main/java/com/mh/user/config/mqtt/InboundMessageRouter.java

@ -1,62 +0,0 @@
package com.mh.user.config.mqtt;
import com.mh.user.config.MHConfig;
import com.mh.user.constants.ChannelName;
import com.mh.user.constants.TopicEnum;
import com.mh.user.utils.SpringBeanUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.integration.annotation.Router;
import org.springframework.integration.mqtt.support.MqttHeaders;
import org.springframework.integration.router.AbstractMessageRouter;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHeaders;
import org.springframework.stereotype.Component;
import java.util.Collection;
import java.util.Collections;
import java.util.Objects;
/**
* @author LJF
* @version 1.0
* @project springboot-mqtt-demo
* @description 入站消息路由分发中心
* @date 2024-10-29 17:04:17
*/
@Slf4j
@Component
public class InboundMessageRouter extends AbstractMessageRouter {
/** 系统基础配置 */
@Autowired
private MHConfig mHConfig;
/**
* 目前只需要这个方式后期在拓展使用IntegrationFlow方式
* @param message
* @return
*/
@Router(inputChannel = ChannelName.INBOUND)
@Override
protected Collection<MessageChannel> determineTargetChannels(Message<?> message) {
MessageHeaders headers = message.getHeaders();
String topic = Objects.requireNonNull(headers.get(MqttHeaders.RECEIVED_TOPIC)).toString();
// byte[] payload = (byte[]) message.getPayload();
// log.info("从当前主题 topic: {}, 接收到的消息:{}", topic, new String(payload));
// 判断当前主题是否是当前项目的,温湿度目前写死的
if (!topic.startsWith(mHConfig.getName()) && !topic.contains("/temp")) {
log.info("当前主题 topic: {} 不是当前项目的,直接丢弃", topic);
return Collections.singleton((MessageChannel) SpringBeanUtil.getBean(ChannelName.DEFAULT_BOUND));
}
// 找到对应的主题消息通道
if (topic.contains("/temp")) {
return Collections.singleton((MessageChannel) SpringBeanUtil.getBean(ChannelName.EVENTS_UPLOAD_INBOUND));
} else {
TopicEnum topicEnum = TopicEnum.find(mHConfig.getName() + "/", topic);
MessageChannel bean = (MessageChannel) SpringBeanUtil.getBean(topicEnum.getBeanName());
return Collections.singleton(bean);
}
}
}

99
user-service/src/main/java/com/mh/user/config/mqtt/MqttConfig.java

@ -1,99 +0,0 @@
package com.mh.user.config.mqtt;
import com.mh.user.constants.MqttClientOptions;
import com.mh.user.constants.MqttProtocolEnum;
import com.mh.user.constants.MqttUseEnum;
import lombok.Data;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;
import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
import org.springframework.util.StringUtils;
import java.util.Map;
/**
* @author LJF
* @version 1.0
* @project springboot-mqtt-demo
* @description mqtt连接配置
* @date 2024-10-29 14:44:51
*/
@Configuration
@Data
@ConfigurationProperties
public class MqttConfig {
private static Map<MqttUseEnum, MqttClientOptions> mqttSpring;
public void setMqttSpring(Map<MqttUseEnum, MqttClientOptions> mqtt) {
MqttConfig.mqttSpring = mqtt;
}
/**
* 获取mqtt基本配置
* @return
*/
static MqttClientOptions getBasicMqttClientOptions() {
if (!mqttSpring.containsKey(MqttUseEnum.BASIC)) {
throw new Error("请先配置MQTT的基本连接参数,否则无法启动项目");
}
return mqttSpring.get(MqttUseEnum.BASIC);
}
/**
* 拼接获取对应mqtt的连接地址
* @param options
* @return
*/
public static String getMqttAddress(MqttClientOptions options) {
StringBuilder addr = new StringBuilder();
addr.append(options.getProtocol().getProtocolAddr())
.append(options.getHost().trim())
.append(":")
.append(options.getPort());
if ((options.getProtocol() == MqttProtocolEnum.WS || options.getProtocol() == MqttProtocolEnum.WSS)
&& StringUtils.hasText(options.getPath())) {
addr.append(options.getPath());
}
return addr.toString();
}
public static String getBasicMqttAddress() {
return getMqttAddress(getBasicMqttClientOptions());
}
/**
* 获取连接参数注入到spring中
* @return
*/
@Bean
public MqttConnectOptions mqttConnectionOptions() {
MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
MqttClientOptions customizeOptions = getBasicMqttClientOptions();
String basicMqttAddress = getBasicMqttAddress();
mqttConnectOptions.setServerURIs(new String[]{basicMqttAddress});
mqttConnectOptions.setUserName(StringUtils.hasText(customizeOptions.getUsername()) ?
customizeOptions.getUsername() : "");
mqttConnectOptions.setPassword(StringUtils.hasText(customizeOptions.getPassword()) ?
customizeOptions.getPassword().toCharArray() : new char[0]);
// 直接进行自动连接
mqttConnectOptions.setAutomaticReconnect(true);
// 时间间隔时间10s
mqttConnectOptions.setKeepAliveInterval(10);
return mqttConnectOptions;
}
@Bean
public MqttPahoClientFactory mqttClientFactory() {
DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
factory.setConnectionOptions(mqttConnectionOptions());
return factory;
}
}

91
user-service/src/main/java/com/mh/user/config/mqtt/MqttInboundConfig.java

@ -1,91 +0,0 @@
package com.mh.user.config.mqtt;
import com.mh.user.constants.ChannelName;
import com.mh.user.constants.MqttClientOptions;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.IntegrationComponentScan;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.endpoint.MessageProducerSupport;
import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter;
import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter;
import org.springframework.integration.mqtt.support.MqttHeaders;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;
import javax.annotation.Resource;
/**
* @author LJF
* @version 1.0
* @project springboot-mqtt-demo
* @description 入站配置
* @date 2024-10-29 16:22:10
*/
@Slf4j
@Configuration
@IntegrationComponentScan
public class MqttInboundConfig {
@Autowired
private MqttPahoClientFactory mqttClientFactory;
@Resource(name = ChannelName.INBOUND)
private MessageChannel inboundChannel;
private String clientId;
/**
* 入站适配器
* @return
*/
@Bean(name = "adapter")
public MessageProducerSupport mqttInbound() {
MqttClientOptions options = MqttConfig.getBasicMqttClientOptions();
// 此处初始化的时候,默认订阅了配置文件中已经写好的topic
// 如果需要订阅多个,可以自己手动订阅,会写一个addTopic()进行添加订阅
clientId = options.getClientId() + "_consumer_" + System.currentTimeMillis();
MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter(
clientId,
mqttClientFactory,
options.getInboundTopic().split(","));
// System.out.println("每一次都会入站适配器吗?"+clientId);
DefaultPahoMessageConverter converter = new DefaultPahoMessageConverter();
// 统一是字节处理
converter.setPayloadAsBytes(true);
// 设置消息转换器
adapter.setConverter(converter);
// 设置qos(quality of service)
// 0:最多一次传输(消息会丢失),
// 1:至少一次传输(消息会重复),
// 2:只有当消息发送成功时才确认(消息不回丢,但延迟高)。
adapter.setQos(0);
// 设置在接收已经订阅的主题信息后,发送给哪个通道,具体的发送方法需要翻上层的抽象类
adapter.setOutputChannel(inboundChannel);
return adapter;
}
/**
* 默认声明一个消息处理器用于处理无效的消息
* @return
*/
@Bean
@ServiceActivator(inputChannel = ChannelName.DEFAULT_BOUND)
public MessageHandler handler() {
return message -> {
log.info("The default channel does not handle messages." +
"\nTopic: {}" +
"\nPayload: {}",
message.getHeaders().get(MqttHeaders.RECEIVED_TOPIC),
message.getPayload());
};
}
public String getClientId() {
return clientId;
}
}

55
user-service/src/main/java/com/mh/user/config/mqtt/MqttMessageChannel.java

@ -1,55 +0,0 @@
package com.mh.user.config.mqtt;
import com.mh.user.constants.ChannelName;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.messaging.MessageChannel;
/**
* @author LJF
* @version 1.0
* @project springboot-mqtt-demo
* @description 声明所有通道的定义类
* @date 2024-10-29 16:23:32
*/
@Slf4j
@Configuration
public class MqttMessageChannel {
@Bean(name = ChannelName.OUTBOUND)
public MessageChannel outboundChannel() {
return new DirectChannel();
}
@Bean(name = ChannelName.INBOUND)
public MessageChannel inboundChannel() {
return new DirectChannel();
}
/**
* 事件主动上报通道
* @return
*/
@Bean(name = ChannelName.EVENTS_UPLOAD_INBOUND)
public MessageChannel eventsUploadInbound() {
return new DirectChannel();
}
@Bean(name = ChannelName.EVENTS_COLLECTION_INBOUND)
public MessageChannel eventsCollectionInbound() {
return new DirectChannel();
}
@Bean(name = ChannelName.EVENTS_CONTROL_INBOUND)
public MessageChannel eventsControlInbound() {
return new DirectChannel();
}
@Bean(name = ChannelName.EVENTS_SEND_INBOUND)
public MessageChannel eventsSendInbound() {
return new DirectChannel();
}
}

51
user-service/src/main/java/com/mh/user/config/mqtt/MqttOutboundConfig.java

@ -1,51 +0,0 @@
package com.mh.user.config.mqtt;
import com.mh.user.constants.ChannelName;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.IntegrationComponentScan;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter;
import org.springframework.messaging.MessageHandler;
/**
* @author LJF
* @version 1.0
* @project springboot-mqtt-demo
* @description 入站配置
* @date 2024-10-29 16:22:10
*/
@Slf4j
@Configuration
@IntegrationComponentScan
public class MqttOutboundConfig {
@Autowired
private MqttPahoClientFactory mqttClientFactory;
/**
* 默认声明一个出站处理器用于处理无效的消息
* @return
*/
@Bean
@ServiceActivator(inputChannel = ChannelName.OUTBOUND)
public MessageHandler mqttOutbound() {
MqttPahoMessageHandler messageHandler = new MqttPahoMessageHandler(
MqttConfig.getBasicMqttClientOptions().getClientId() + "_producer_" + System.currentTimeMillis(),
mqttClientFactory);
DefaultPahoMessageConverter converter = new DefaultPahoMessageConverter();
// use byte types uniformly
converter.setPayloadAsBytes(true);
messageHandler.setAsync(true);
messageHandler.setDefaultQos(0);
messageHandler.setConverter(converter);
return messageHandler;
}
}

2
user-service/src/main/java/com/mh/user/constants/TopicEnum.java

@ -14,7 +14,7 @@ import static com.mh.user.constants.TopicConst.*;
public enum TopicEnum { public enum TopicEnum {
/** /**
* 冷水机组客户端主动上报数据 * 客户端主动上报数据
*/ */
CLIENT_UPLOAD_DATA(Pattern.compile("^" + MH_UPLOAD + EVENTS_UPLOAD + REGEX_SN + "$"), ChannelName.EVENTS_UPLOAD_INBOUND), CLIENT_UPLOAD_DATA(Pattern.compile("^" + MH_UPLOAD + EVENTS_UPLOAD + REGEX_SN + "$"), ChannelName.EVENTS_UPLOAD_INBOUND),

7
user-service/src/main/java/com/mh/user/controller/CodeTableController.java

@ -29,4 +29,11 @@ public class CodeTableController {
list=codeTableService.queryBrand(); list=codeTableService.queryBrand();
return HttpResult.ok(list); return HttpResult.ok(list);
} }
@PostMapping("/paramType")
public HttpResult queryParamType(){
List<DeviceTypeModel> list;
list=codeTableService.queryDataByName("paramType");
return HttpResult.ok(list);
}
} }

71
user-service/src/main/java/com/mh/user/controller/CollectionParamsManageController.java

@ -0,0 +1,71 @@
package com.mh.user.controller;
import com.mh.common.http.HttpResult;
import com.mh.common.utils.StringUtils;
import com.mh.user.annotation.SysLogger;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.model.DeviceModel;
import com.mh.user.service.*;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* 基表参数信息管理
*/
@RestController
@RequestMapping("cpm")
public class CollectionParamsManageController {
@Autowired
private CollectionParamsManageService collectionParamsManageService;
//保存
@SysLogger(title="基表采集信息",optDesc = "保存基表采集参数信息")
@PostMapping(value="/save")
public HttpResult saveDevice(@RequestBody CollectionParamsManageEntity collectionParamsManageEntity) {
return HttpResult.ok(collectionParamsManageService.insertCPM(collectionParamsManageEntity));
}
//修改
@SysLogger(title="基表采集参数信息",optDesc = "修改基表采集参数信息")
@PostMapping(value="/update")
public HttpResult updateDevice(@RequestBody CollectionParamsManageEntity collectionParamsManageEntity) {
return HttpResult.ok(collectionParamsManageService.updateCPM(collectionParamsManageEntity));
}
// 删除多
@PostMapping(value="/deletes")
public HttpResult deleteDevices(@RequestBody String[] ids) {
return HttpResult.ok(collectionParamsManageService.deleteByIds(ids));
}
// 按条件查询
@SysLogger(title="基表采集信息",optDesc = "按条件查询基表采集参数信息")
@PostMapping(value="/query")
public HttpResult queryDevice( @RequestParam(value = "deviceInstallId", required = false)String deviceInstallId,
@RequestParam(value = "buildingId", required = false)String buildingId,
@RequestParam(value = "otherName", required = false)String otherName,
@RequestParam(value = "page", required=true)Integer page,
@RequestParam(value = "limit", required=true)Integer limit) {
try{
int count=collectionParamsManageService.selectCPMListCount(buildingId, deviceInstallId,otherName, page, limit);
List<CollectionParamsManageEntity> records=collectionParamsManageService.selectCPMList(buildingId, deviceInstallId,otherName, page, limit);
return HttpResult.ok(count,records);
}catch (Exception e){
return HttpResult.error(e.getMessage());
}
}
}

108
user-service/src/main/java/com/mh/user/entity/CollectionParamsManageEntity.java

@ -0,0 +1,108 @@
package com.mh.user.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.StringJoiner;
/**
* @author LJF
* @version 1.0
* @project CHWS
* @description 采集参数实体类
* @date 2025-12-10 10:53:33
*/
@Getter
@Setter
public class CollectionParamsManageEntity implements Serializable {
static final long serialVersionUID = 42L;
private Long id;
/** 当前时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** 当前时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
private Long buildingId;
/** 设备id */
private Long deviceInstallId;
/** 寄存器地址 */
private String registerAddr;
/** 功能码 */
private String funcCode;
/** 倍率 */
private Integer mtRatio;
/** 初始值 */
private BigDecimal mtInitValue;
/** 小数点 */
private Integer digits;
/** 数据类型 */
private Integer dataType;
/** 当前值 */
private BigDecimal curValue;
/** 当前时间 */
/** 当前时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date curTime;
/** 是否是总表 (0: 是, 1: 否) */
private Integer mtIsSum;
/** 单位 */
private String unit;
/** 排序 */
private Long orderNum;
/** 备注 */
private String remark;
/** 读取的寄存器大小 */
private Integer registerSize;
/** 是否使用 */
private Integer isUse;
/** 别名:mqtt上传名,唯一值 */
private String otherName;
/** 40,累计值,140瞬时值 */
private Integer grade;
/** 参数id */
private Integer paramTypeId;
/** 遥测、遥信数据类型 */
private Integer collectionType;
/** 上报质量 */
private String quality;
@Override
public String toString() {
return new StringJoiner(", ", CollectionParamsManageEntity.class.getSimpleName() + "[", "]")
.add("deviceInstallId=" + deviceInstallId)
.add("registerAddr='" + registerAddr + "'")
.add("funcCode='" + funcCode + "'")
.add("mtRatio=" + mtRatio)
.add("mtInitValue=" + mtInitValue)
.add("digits=" + digits)
.add("dataType=" + dataType)
.add("curValue=" + curValue)
.add("curTime=" + curTime)
.add("mtIsSum=" + mtIsSum)
.add("unit='" + unit + "'")
.add("orderNum=" + orderNum)
.add("remark='" + remark + "'")
.add("registerSize=" + registerSize)
.add("isUse=" + isUse)
.add("otherName='" + otherName + "'")
.add("grade=" + grade)
.add("paramTypeId=" + paramTypeId)
.add("collectionType=" + collectionType)
.add("quality='" + quality + "'")
.toString();
}
}

7
user-service/src/main/java/com/mh/user/factory/BackTempControl.java

@ -1,6 +1,8 @@
package com.mh.user.factory; package com.mh.user.factory;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.strategy.DeviceStrategy; import com.mh.user.strategy.DeviceStrategy;
/** /**
@ -40,4 +42,9 @@ public class BackTempControl implements Device {
public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) { public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) {
return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity); return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity);
} }
@Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity, CollectionParamsManageEntity collectionParamsManageEntity) {
return strategy.analysisMQTTReceiveData(dateStr, registerAddr, dataStr, operateType, deviceInstallEntity, collectionParamsManageEntity);
}
} }

18
user-service/src/main/java/com/mh/user/factory/Device.java

@ -1,6 +1,8 @@
package com.mh.user.factory; package com.mh.user.factory;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.strategy.DeviceStrategy; import com.mh.user.strategy.DeviceStrategy;
/** /**
@ -17,4 +19,20 @@ public interface Device {
String createOrders(DeviceCodeParamEntity deviceCodeParamEntity); String createOrders(DeviceCodeParamEntity deviceCodeParamEntity);
String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity); String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity);
/**
* 解析MQTT报文
* @param dateStr
* @param registerAddr
* @param dataStr 已经是解析好的数据
* @param operateType 操作类型读取/设置
* @param deviceInstallEntity
* @return
*/
String analysisMQTTReceiveData(String dateStr,
String registerAddr,
String dataStr,
String operateType,
DeviceInstallEntity deviceInstallEntity,
CollectionParamsManageEntity collectionParamsManageEntity);
} }

7
user-service/src/main/java/com/mh/user/factory/EleMeter.java

@ -1,6 +1,8 @@
package com.mh.user.factory; package com.mh.user.factory;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.strategy.DeviceStrategy; import com.mh.user.strategy.DeviceStrategy;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -43,4 +45,9 @@ public class EleMeter implements Device {
public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) { public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) {
return eleMeterStrategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity); return eleMeterStrategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity);
} }
@Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity, CollectionParamsManageEntity collectionParamsManageEntity) {
return eleMeterStrategy.analysisMQTTReceiveData(dateStr, registerAddr, dataStr, operateType, deviceInstallEntity, collectionParamsManageEntity);
}
} }

7
user-service/src/main/java/com/mh/user/factory/HeatPump.java

@ -1,6 +1,8 @@
package com.mh.user.factory; package com.mh.user.factory;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.strategy.DeviceStrategy; import com.mh.user.strategy.DeviceStrategy;
/** /**
@ -40,4 +42,9 @@ public class HeatPump implements Device {
public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) { public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) {
return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity); return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity);
} }
@Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity, CollectionParamsManageEntity collectionParamsManageEntity) {
return strategy.analysisMQTTReceiveData(dateStr, registerAddr, dataStr, operateType, deviceInstallEntity, collectionParamsManageEntity);
}
} }

7
user-service/src/main/java/com/mh/user/factory/HeatPumpStatus.java

@ -1,6 +1,8 @@
package com.mh.user.factory; package com.mh.user.factory;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.strategy.DeviceStrategy; import com.mh.user.strategy.DeviceStrategy;
/** /**
@ -40,4 +42,9 @@ public class HeatPumpStatus implements Device {
public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) { public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) {
return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity); return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity);
} }
@Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity, CollectionParamsManageEntity collectionParamsManageEntity) {
return strategy.analysisMQTTReceiveData(dateStr, registerAddr, dataStr, operateType, deviceInstallEntity, collectionParamsManageEntity);
}
} }

8
user-service/src/main/java/com/mh/user/factory/MultiControl.java

@ -1,6 +1,8 @@
package com.mh.user.factory; package com.mh.user.factory;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.strategy.DeviceStrategy; import com.mh.user.strategy.DeviceStrategy;
/** /**
@ -40,4 +42,10 @@ public class MultiControl implements Device {
public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) { public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) {
return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity); return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity);
} }
@Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity, CollectionParamsManageEntity collectionParamsManageEntity) {
return strategy.analysisMQTTReceiveData(dateStr, registerAddr, dataStr, operateType, deviceInstallEntity, collectionParamsManageEntity);
}
} }

8
user-service/src/main/java/com/mh/user/factory/PressureTrans.java

@ -1,6 +1,8 @@
package com.mh.user.factory; package com.mh.user.factory;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.strategy.DeviceStrategy; import com.mh.user.strategy.DeviceStrategy;
/** /**
@ -40,4 +42,10 @@ public class PressureTrans implements Device {
public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) { public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) {
return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity); return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity);
} }
@Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity, CollectionParamsManageEntity collectionParamsManageEntity) {
return strategy.analysisMQTTReceiveData(dateStr, registerAddr, dataStr, operateType, deviceInstallEntity, collectionParamsManageEntity);
}
} }

8
user-service/src/main/java/com/mh/user/factory/StatusCheck.java

@ -1,6 +1,8 @@
package com.mh.user.factory; package com.mh.user.factory;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.strategy.DeviceStrategy; import com.mh.user.strategy.DeviceStrategy;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -44,4 +46,10 @@ public class StatusCheck implements Device {
public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) { public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) {
return wtMeterStrategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity); return wtMeterStrategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity);
} }
@Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity, CollectionParamsManageEntity collectionParamsManageEntity) {
return wtMeterStrategy.analysisMQTTReceiveData(dateStr, registerAddr, dataStr, operateType, deviceInstallEntity, collectionParamsManageEntity);
}
} }

8
user-service/src/main/java/com/mh/user/factory/TempControl.java

@ -1,6 +1,8 @@
package com.mh.user.factory; package com.mh.user.factory;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.strategy.DeviceStrategy; import com.mh.user.strategy.DeviceStrategy;
/** /**
@ -40,4 +42,10 @@ public class TempControl implements Device {
public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) { public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) {
return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity); return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity);
} }
@Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity, CollectionParamsManageEntity collectionParamsManageEntity) {
return strategy.analysisMQTTReceiveData(dateStr, registerAddr, dataStr, operateType, deviceInstallEntity, collectionParamsManageEntity);
}
} }

8
user-service/src/main/java/com/mh/user/factory/TempTrans.java

@ -1,6 +1,8 @@
package com.mh.user.factory; package com.mh.user.factory;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.strategy.DeviceStrategy; import com.mh.user.strategy.DeviceStrategy;
/** /**
@ -40,4 +42,10 @@ public class TempTrans implements Device {
public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) { public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) {
return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity); return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity);
} }
@Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity, CollectionParamsManageEntity collectionParamsManageEntity) {
return strategy.analysisMQTTReceiveData(dateStr, registerAddr, dataStr, operateType, deviceInstallEntity, collectionParamsManageEntity);
}
} }

8
user-service/src/main/java/com/mh/user/factory/TimeControl.java

@ -1,6 +1,8 @@
package com.mh.user.factory; package com.mh.user.factory;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.strategy.DeviceStrategy; import com.mh.user.strategy.DeviceStrategy;
/** /**
@ -40,4 +42,10 @@ public class TimeControl implements Device {
public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) { public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) {
return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity); return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity);
} }
@Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity, CollectionParamsManageEntity collectionParamsManageEntity) {
return strategy.analysisMQTTReceiveData(dateStr, registerAddr, dataStr, operateType, deviceInstallEntity , collectionParamsManageEntity);
}
} }

8
user-service/src/main/java/com/mh/user/factory/WaterLevelSwitch.java

@ -1,6 +1,8 @@
package com.mh.user.factory; package com.mh.user.factory;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.strategy.DeviceStrategy; import com.mh.user.strategy.DeviceStrategy;
/** /**
@ -40,4 +42,10 @@ public class WaterLevelSwitch implements Device {
public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) { public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) {
return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity); return strategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity);
} }
@Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity, CollectionParamsManageEntity collectionParamsManageEntity) {
return strategy.analysisMQTTReceiveData(dateStr, registerAddr, dataStr, operateType, deviceInstallEntity, collectionParamsManageEntity);
}
} }

8
user-service/src/main/java/com/mh/user/factory/WtMeter.java

@ -1,6 +1,8 @@
package com.mh.user.factory; package com.mh.user.factory;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.strategy.DeviceStrategy; import com.mh.user.strategy.DeviceStrategy;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -44,4 +46,10 @@ public class WtMeter implements Device {
public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) { public String analysisReceiveData(String dateStr, String deviceType, String registerAddr, String brand, String buildingId, String buildingName, String dataStr, DeviceCodeParamEntity deviceCodeParamEntity) {
return wtMeterStrategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity); return wtMeterStrategy.analysisReceiveData(dateStr, deviceType, registerAddr, brand, buildingId, buildingName, dataStr, deviceCodeParamEntity);
} }
@Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity, CollectionParamsManageEntity collectionParamsManageEntity) {
return wtMeterStrategy.analysisMQTTReceiveData(dateStr, registerAddr, dataStr, operateType, deviceInstallEntity, collectionParamsManageEntity);
}
} }

2
user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java

@ -67,7 +67,7 @@ public class CollectionLoopRunner implements ApplicationRunner {
// NettyEchoServer nettyEchoServer = new NettyEchoServer(); // NettyEchoServer nettyEchoServer = new NettyEchoServer();
// nettyEchoServer.bind(8098); // nettyEchoServer.bind(8098);
// 初始化mqtt订阅记录 // 初始化mqtt订阅记录
initializeMqttSubscription(); // initializeMqttSubscription();
} }
/** /**

2
user-service/src/main/java/com/mh/user/job/GetWeatherInfoJob.java

@ -42,7 +42,7 @@ public class GetWeatherInfoJob {
/** /**
* 定时获取每天天气 * 定时获取每天天气
*/ */
@Scheduled(cron = "0 0 0 0/1 * ? ") @Scheduled(cron = "0 0 0 1/1 * ?")
public void getWeatherInfo() { public void getWeatherInfo() {
// 从系统参数中获取对应的项目区域 // 从系统参数中获取对应的项目区域
SysParamEntity sysParam = sysParamService.selectSysParam(); SysParamEntity sysParam = sysParamService.selectSysParam();

3
user-service/src/main/java/com/mh/user/mapper/CodeTableMapper.java

@ -18,4 +18,7 @@ public interface CodeTableMapper {
//从code_table表查询品牌 //从code_table表查询品牌
@Select("select * from code_table where name='brand' ") @Select("select * from code_table where name='brand' ")
List<DeviceTypeModel> queryBrand(); List<DeviceTypeModel> queryBrand();
@Select("select * from code_table where name=#{name} ")
List<DeviceTypeModel> queryDataByName(String name);
} }

128
user-service/src/main/java/com/mh/user/mapper/CollectionParamsManageMapper.java

@ -0,0 +1,128 @@
package com.mh.user.mapper;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceInstallEntity;
import org.apache.ibatis.annotations.*;
import tk.mybatis.mapper.common.BaseMapper;
import java.util.List;
/**
* @author LJF
* @version 1.0
* @project CHWS
* @description 采集参数设备mapper类
* @date 2025-12-10 11:31:42
*/
@Mapper
public interface CollectionParamsManageMapper extends BaseMapper<CollectionParamsManageEntity> {
@Select("<script>" +
"SELECT * FROM (" +
"SELECT cpm.*, ROW_NUMBER() OVER (ORDER BY cpm.device_install_id) AS row_num " +
"FROM collection_params_manage cpm join device_install di on cpm.device_install_id = di.id where 1=1" +
"<if test='deviceInstallId != null and deviceInstallId != \"\"'>" +
"AND cpm.device_install_id = #{deviceInstallId} " +
"</if>" +
"<if test='buildingId != null and buildingId != \"\"'>" +
"AND di.building_id = #{buildingId} " +
"</if>" +
"<if test='otherName != null and otherName != \"\"'>" +
"AND cpm.other_name LIKE CONCAT('%', #{otherName}, '%') " +
"</if>" +
") AS t WHERE t.row_num BETWEEN (#{pageNum}-1)*#{pageSize} AND #{pageNum}*#{pageSize}" +
"</script>")
@Results({
@Result(column = "id", property = "id"),
@Result(column = "create_time", property = "createTime"),
@Result(column = "update_time", property = "updateTime"),
@Result(column = "device_install_id", property = "deviceInstallId"),
@Result(column = "register_addr", property = "registerAddr"),
@Result(column = "func_code", property = "funcCode"),
@Result(column = "mt_ratio", property = "mtRatio"),
@Result(column = "mt_init_value", property = "mtInitValue"),
@Result(column = "digits", property = "digits"),
@Result(column = "data_type", property = "dataType"),
@Result(column = "cur_value", property = "curValue"),
@Result(column = "cur_time", property = "curTime"),
@Result(column = "mt_is_sum", property = "mtIsSum"),
@Result(column = "unit", property = "unit"),
@Result(column = "order_num", property = "orderNum"),
@Result(column = "remark", property = "remark"),
@Result(column = "register_size", property = "registerSize"),
@Result(column = "is_use", property = "isUse"),
@Result(column = "other_name", property = "otherName"),
@Result(column = "grade", property = "grade"),
@Result(column = "param_type_id", property = "paramTypeId"),
@Result(column = "collection_type", property = "collectionType"),
@Result(column = "quality", property = "quality")
})
List<CollectionParamsManageEntity> selectCPMList(String buildingId,String deviceInstallId, String otherName, Integer pageNum, Integer pageSize);
@Select("<script>" +
"SELECT count(1) " +
"FROM collection_params_manage cpm join device_install di on cpm.device_install_id = di.id where 1=1" +
"<if test='deviceInstallId != null and deviceInstallId != \"\"'>" +
"AND cpm.device_install_id = #{deviceInstallId} " +
"</if>" +
"<if test='buildingId != null and buildingId != \"\"'>" +
"AND di.building_id = #{buildingId} " +
"</if>" +
"<if test='otherName != null and otherName != \"\"'>" +
"AND cpm.other_name LIKE CONCAT('%', #{otherName}, '%') " +
"</if>" +
"</script>")
int selectCPMListCount(String buildingId, String deviceInstallId, String otherName, Integer pageNum, Integer pageSize);
@Select("select count(1) from collection_params_manage where other_name = #{otherName} ")
int selectCountByOtherName(String otherName);
@Update("update collection_params_manage set cur_value = #{value}, cur_time = #{time} where other_name = #{name}")
void updateCPMByOtherName(String name, float value, String time);
@Select("select top 1 * from collection_params_manage where other_name = #{name}")
CollectionParamsManageEntity selectDeviceInstallByOtherName(String name);
@Insert("insert into collection_params_manage(" +
"device_install_id, register_addr, func_code, mt_ratio, mt_init_value, digits, data_type, " +
"mt_is_sum, unit, order_num, remark, register_size, is_use, " +
"other_name, grade, param_type_id, collection_type, quality, create_time, building_id, cur_value, cur_time) " +
"values(#{deviceInstallId}, #{registerAddr}, #{funcCode}, #{mtRatio}, #{mtInitValue}, " +
"#{digits}, #{dataType}, #{mtIsSum}, #{unit}, #{orderNum}, " +
"#{remark}, #{registerSize}, #{isUse}, #{otherName}, #{grade}, #{paramTypeId}, " +
"#{collectionType}, #{quality}, getdate(), #{buildingId}, #{curValue}, #{curTime})")
void insertCPM(CollectionParamsManageEntity cpmEntity);
@Update("<script>" +
"update collection_params_manage " +
"<set>" +
"<if test='deviceInstallId != null'>device_install_id = #{deviceInstallId},</if>" +
"<if test='registerAddr != null'>register_addr = #{registerAddr},</if>" +
"<if test='funcCode != null'>func_code = #{funcCode},</if>" +
"<if test='mtRatio != null'>mt_ratio = #{mtRatio},</if>" +
"<if test='mtInitValue != null'>mt_init_value = #{mtInitValue},</if>" +
"<if test='digits != null'>digits = #{digits},</if>" +
"<if test='dataType != null'>data_type = #{dataType},</if>" +
"<if test='curValue != null'>cur_value = #{curValue},</if>" +
"<if test='curTime != null'>cur_time = #{curTime},</if>" +
"<if test='mtIsSum != null'>mt_is_sum = #{mtIsSum},</if>" +
"<if test='unit != null'>unit = #{unit},</if>" +
"<if test='orderNum != null'>order_num = #{orderNum},</if>" +
"<if test='remark != null'>remark = #{remark},</if>" +
"<if test='registerSize != null'>register_size = #{registerSize},</if>" +
"<if test='isUse != null'>is_use = #{isUse},</if>" +
"<if test='otherName != null'>other_name = #{otherName},</if>" +
"<if test='grade != null'>grade = #{grade},</if>" +
"<if test='paramTypeId != null'>param_type_id = #{paramTypeId},</if>" +
"<if test='collectionType != null'>collection_type = #{collectionType},</if>" +
"<if test='quality != null'>quality = #{quality},</if>" +
"<if test='buildingId != null'>building_id = #{buildingId},</if>" +
" update_time = getdate() " +
"</set>" +
"where id = #{id}" +
"</script>")
void updateById(CollectionParamsManageEntity cpmEntity);
@Delete("delete from collection_params_manage where id = #{msId}")
void deleteById(String msId);
}

3
user-service/src/main/java/com/mh/user/mapper/GatewayManageMapper.java

@ -115,4 +115,7 @@ public interface GatewayManageMapper {
@Select("select top 1 grade from gateway_manage where data_com = #{dataCom} ") @Select("select top 1 grade from gateway_manage where data_com = #{dataCom} ")
int queryGatewayByDataCom(@Param("dataCom") String dataCom); int queryGatewayByDataCom(@Param("dataCom") String dataCom);
@Update("update gateway_manage set grade = #{grade}, connect_date = getdate() where sn = #{sn}")
void updateGatewayManageOnlineBySn(String sn, int grade);
} }

2
user-service/src/main/java/com/mh/user/mapper/MqttSubscriptionMapper.java

@ -22,7 +22,7 @@ public interface MqttSubscriptionMapper extends BaseMapper<MqttSubscriptionEntit
"SELECT * FROM mqtt_subscription WHERE 1=1 " + "SELECT * FROM mqtt_subscription WHERE 1=1 " +
"<if test='topic != null and topic != \"\"'>AND topic = #{topic}</if>" + "<if test='topic != null and topic != \"\"'>AND topic = #{topic}</if>" +
"<if test='status != null and status != \"\"'>AND status = #{status}</if>" + "<if test='status != null and status != \"\"'>AND status = #{status}</if>" +
"ORDER BY crate_time DESC " + "ORDER BY create_time DESC " +
"</script>") "</script>")
List<MqttSubscriptionEntity> selectListByTopic(@Param("topic") String topic, List<MqttSubscriptionEntity> selectListByTopic(@Param("topic") String topic,
@Param("status") String status); @Param("status") String status);

10
user-service/src/main/java/com/mh/user/model/SanShiFengDatas.java

@ -15,16 +15,16 @@ public class SanShiFengDatas<T extends Number> {
/** /**
* 对应研华的标签值 * 对应研华的标签值
*/ */
private String tag; private String name;
/** /**
* 上报值 * 上报值
*/ */
private T value; private T value;
/** // /**
* 质量值 // * 质量值
*/ // */
private T quality; // private T quality;
} }

10
user-service/src/main/java/com/mh/user/model/SanShiFengReceiver.java

@ -19,11 +19,17 @@ public class SanShiFengReceiver<T> {
/** /**
* 数据集合 * 数据集合
*/ */
private List<T> d; private List<T> datas;
/** /**
* 主动上报数据时间带T类型 * 主动上报数据时间带T类型
*/ */
private String ts; private String sn;
private String plcName;
private String projectName;
private String time;
} }

2
user-service/src/main/java/com/mh/user/service/CodeTableService.java

@ -9,4 +9,6 @@ public interface CodeTableService {
List<DeviceTypeModel> queryDeviceType(); List<DeviceTypeModel> queryDeviceType();
List<DeviceTypeModel> queryBrand(); List<DeviceTypeModel> queryBrand();
List<DeviceTypeModel> queryDataByName(String name);
} }

32
user-service/src/main/java/com/mh/user/service/CollectionParamsManageService.java

@ -0,0 +1,32 @@
package com.mh.user.service;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceInstallEntity;
import java.util.List;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 采集参数管理
* @date 2025-02-14 13:58:37
*/
public interface CollectionParamsManageService {
List<CollectionParamsManageEntity> selectCPMList(String buildingId, String deviceInstallId, String otherName, Integer pageNum, Integer pageSize);
int selectCPMListCount(String buildingId, String deviceInstallId, String otherName, Integer pageNum, Integer pageSize);
CollectionParamsManageEntity selectById(String msId);
String insertCPM(CollectionParamsManageEntity mqttSubscription);
String updateCPM(CollectionParamsManageEntity mqttSubscription);
int deleteByIds(String[] msIds);
void updateCPMByOtherName(String name, float value, String time);
CollectionParamsManageEntity selectDeviceInstallByOtherName(String name);
}

2
user-service/src/main/java/com/mh/user/service/GatewayManageService.java

@ -53,4 +53,6 @@ public interface GatewayManageService {
void updateGatewayManageOnlineByHeartBeatCode(String heartBeat, int status); void updateGatewayManageOnlineByHeartBeatCode(String heartBeat, int status);
void updateGatewayManageOnlineByImei(String imei, int status); void updateGatewayManageOnlineByImei(String imei, int status);
void updateGatewayManageOnlineBySn(String sn, int grade);
} }

6
user-service/src/main/java/com/mh/user/service/impl/CodeTableServiceImpl.java

@ -6,6 +6,7 @@ import com.mh.user.service.CodeTableService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List; import java.util.List;
@Service @Service
@ -23,4 +24,9 @@ public class CodeTableServiceImpl implements CodeTableService {
public List<DeviceTypeModel> queryBrand() { public List<DeviceTypeModel> queryBrand() {
return codeTableMapper.queryBrand(); return codeTableMapper.queryBrand();
} }
@Override
public List<DeviceTypeModel> queryDataByName(String name) {
return codeTableMapper.queryDataByName(name);
}
} }

84
user-service/src/main/java/com/mh/user/service/impl/CollectionParamsManageServiceImpl.java

@ -0,0 +1,84 @@
package com.mh.user.service.impl;
import com.mh.user.constants.Constant;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.mapper.CollectionParamsManageMapper;
import com.mh.user.service.CollectionParamsManageService;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
/**
* @author LJF
* @version 1.0
* @project CHWS
* @description 采集参数设备实现类
* @date 2025-12-10 11:30:54
*/
@Service
public class CollectionParamsManageServiceImpl implements CollectionParamsManageService {
private final CollectionParamsManageMapper collectionParamsManageMapper;
public CollectionParamsManageServiceImpl(CollectionParamsManageMapper collectionParamsManageMapper) {
this.collectionParamsManageMapper = collectionParamsManageMapper;
}
@Override
public CollectionParamsManageEntity selectDeviceInstallByOtherName(String name) {
return collectionParamsManageMapper.selectDeviceInstallByOtherName(name);
}
@Override
public void updateCPMByOtherName(String name, float value, String time) {
collectionParamsManageMapper.updateCPMByOtherName(name, value, time);
}
@Override
public List<CollectionParamsManageEntity> selectCPMList(String buildingId, String deviceInstallId, String otherName, Integer pageNum, Integer pageSize) {
return collectionParamsManageMapper.selectCPMList(buildingId, deviceInstallId, otherName, pageNum, pageSize);
}
@Override
public int selectCPMListCount(String buildingId, String deviceInstallId, String otherName, Integer pageNum, Integer pageSize) {
return collectionParamsManageMapper.selectCPMListCount(buildingId, deviceInstallId, otherName, pageNum, pageSize);
}
@Override
public CollectionParamsManageEntity selectById(String msId) {
return collectionParamsManageMapper.selectByPrimaryKey(msId);
}
@Override
public String insertCPM(CollectionParamsManageEntity cpmEntity) {
// 判断是否存在otherName
if (collectionParamsManageMapper.selectCountByOtherName(cpmEntity.getOtherName()) > 0) {
return "存在相同参数名称";
}
collectionParamsManageMapper.insertCPM(cpmEntity);
return Constant.SUCCESS;
}
@Override
public String updateCPM(CollectionParamsManageEntity cpmEntity) {
// 判断是否存在otherName
// if (collectionParamsManageMapper.selectCountByOtherName(cpmEntity.getOtherName()) > 0) {
// return "存在相同参数名称";
// }
collectionParamsManageMapper.updateById(cpmEntity);
return Constant.SUCCESS;
}
@Override
public int deleteByIds(String[] msIds) {
if (msIds != null && msIds.length > 0) {
for (String msId : msIds) {
collectionParamsManageMapper.deleteById(msId);
}
return msIds.length;
}
return 0;
}
}

5
user-service/src/main/java/com/mh/user/service/impl/GatewayManageServiceImpl.java

@ -108,4 +108,9 @@ public class GatewayManageServiceImpl implements GatewayManageService {
public void updateGatewayManageOnlineByImei(String imei, int status) { public void updateGatewayManageOnlineByImei(String imei, int status) {
gatewayManageMapper.updateGatewayManageOnlineByImei(imei, status); gatewayManageMapper.updateGatewayManageOnlineByImei(imei, status);
} }
@Override
public void updateGatewayManageOnlineBySn(String sn, int grade) {
gatewayManageMapper.updateGatewayManageOnlineBySn(sn, grade);
}
} }

4
user-service/src/main/java/com/mh/user/service/mqtt/config/MqttConfig.java

@ -82,9 +82,9 @@ public class MqttConfig {
mqttConnectOptions.setPassword(StringUtils.hasText(customizeOptions.getPassword()) ? mqttConnectOptions.setPassword(StringUtils.hasText(customizeOptions.getPassword()) ?
customizeOptions.getPassword().toCharArray() : new char[0]); customizeOptions.getPassword().toCharArray() : new char[0]);
// 直接进行自动连接 // 直接进行自动连接
mqttConnectOptions.setAutomaticReconnect(true); mqttConnectOptions.setAutomaticReconnect(false);
// 时间间隔时间10s // 时间间隔时间10s
mqttConnectOptions.setKeepAliveInterval(10); mqttConnectOptions.setKeepAliveInterval(1000);
return mqttConnectOptions; return mqttConnectOptions;
} }

59
user-service/src/main/java/com/mh/user/service/mqtt/service/impl/EventsServiceImpl.java

@ -3,8 +3,18 @@ package com.mh.user.service.mqtt.service.impl;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.mh.user.constants.ChannelName; import com.mh.user.constants.ChannelName;
import com.mh.user.constants.Constant;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.factory.Device;
import com.mh.user.factory.DeviceFactory;
import com.mh.user.model.SanShiFengReceiver; import com.mh.user.model.SanShiFengReceiver;
import com.mh.user.service.CollectionParamsManageService;
import com.mh.user.service.DeviceInstallService;
import com.mh.user.service.GatewayManageService;
import com.mh.user.service.mqtt.service.IEventsService; import com.mh.user.service.mqtt.service.IEventsService;
import com.mh.user.strategy.DeviceStrategy;
import com.mh.user.strategy.DeviceStrategyFactory;
import io.netty.util.CharsetUtil; import io.netty.util.CharsetUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -13,6 +23,7 @@ import org.springframework.messaging.MessageHeaders;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.Objects; import java.util.Objects;
/** /**
@ -29,6 +40,15 @@ public class EventsServiceImpl implements IEventsService {
@Autowired @Autowired
private ObjectMapper mapper; private ObjectMapper mapper;
@Autowired
private GatewayManageService gatewayManageService;
@Autowired
private CollectionParamsManageService collectionParamManageService;
@Autowired
private DeviceInstallService deviceInstallService;
@ServiceActivator(inputChannel = ChannelName.EVENTS_UPLOAD_INBOUND) @ServiceActivator(inputChannel = ChannelName.EVENTS_UPLOAD_INBOUND)
@Override @Override
public void handleInboundUpload(byte[] receiver, MessageHeaders headers) { public void handleInboundUpload(byte[] receiver, MessageHeaders headers) {
@ -62,10 +82,43 @@ public class EventsServiceImpl implements IEventsService {
private void handleInboundData(byte[] receiver,String topic, String logMessage) { private void handleInboundData(byte[] receiver,String topic, String logMessage) {
try { try {
SanShiFengReceiver commonTopicReceiver = new SanShiFengReceiver(); SanShiFengReceiver datas = new SanShiFengReceiver();
commonTopicReceiver = mapper.readValue(receiver, SanShiFengReceiver.class); datas = mapper.readValue(receiver, SanShiFengReceiver.class);
log.info("主题:{},类型:{}: ,数据:{}", topic, logMessage, commonTopicReceiver.toString()); log.info("主题:{},类型:{}: ,数据:{}", topic, logMessage, datas.toString());
// 开始遍历 数据
String sn = datas.getSn();
String plcName = datas.getPlcName();
String projectName = datas.getProjectName();
String time = datas.getTime();
// 更新网关设备在线状态
gatewayManageService.updateGatewayManageOnlineBySn(sn, 0);
List<JSONObject> datasList = datas.getDatas();
for (JSONObject data : datasList) {
// 不使用消息队列,查询属于哪种设备类型,然后通过策略进行数据解析 // 不使用消息队列,查询属于哪种设备类型,然后通过策略进行数据解析
log.info("设备SN:{},PLC名称:{},项目名称:{},时间:{},数据:{}", sn, plcName, projectName, time, data.toString());
// 获取点位参数名称
String name = data.getString("name");
// 获取点位值
float value = data.getFloatValue("value");
// 直接更新collectionParamManage参数值
collectionParamManageService.updateCPMByOtherName(name, value, time);
// 查询device_install表,走之前的逻辑
CollectionParamsManageEntity collectionParamsManageEntity = collectionParamManageService.selectDeviceInstallByOtherName(name);
if (collectionParamsManageEntity.getDeviceInstallId() != null) {
DeviceInstallEntity deviceInstallEntity = deviceInstallService.selectDeviceById(collectionParamsManageEntity.getDeviceInstallId());
if (deviceInstallEntity != null) {
// 开始走策略判断
String deviceType = deviceInstallEntity.getDeviceType();
Device device = DeviceFactory.createDevice(deviceType);
DeviceStrategy strategy = DeviceStrategyFactory.createStrategy(deviceType);
if (null == strategy) {
continue;
}
device.setStrategy(strategy);
device.analysisMQTTReceiveData(time, deviceInstallEntity.getDeviceAddr(), String.valueOf(value), Constant.READ, deviceInstallEntity, collectionParamsManageEntity);
}
}
}
} catch (IOException e) { } catch (IOException e) {
log.error("处理数据时发生错误: ", e); log.error("处理数据时发生错误: ", e);
} }

5
user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttTopicServiceImpl.java

@ -1,10 +1,11 @@
package com.mh.user.service.mqtt.service.impl; package com.mh.user.service.mqtt.service.impl;
import com.mh.framework.mqtt.service.IMqttTopicService; import com.mh.user.service.mqtt.service.IMqttTopicService;
import jakarta.annotation.Resource;
import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter; import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/** /**
* @author LJF * @author LJF
* @version 1.0 * @version 1.0

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

@ -1,6 +1,7 @@
package com.mh.user.strategy; package com.mh.user.strategy;
import com.mh.user.constants.Constant; import com.mh.user.constants.Constant;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.entity.NowPublicDataEntity; import com.mh.user.entity.NowPublicDataEntity;
@ -107,7 +108,8 @@ public class BackTempControlStrategy implements DeviceStrategy {
String registerAddr, String registerAddr,
String dataStr, String dataStr,
String operateType, String operateType,
DeviceInstallEntity deviceInstallEntity) { DeviceInstallEntity deviceInstallEntity,
CollectionParamsManageEntity collectionParamsManageEntity) {
String result = Constant.FAIL; String result = Constant.FAIL;
if (Integer.parseInt(dataStr) < 0) { if (Integer.parseInt(dataStr) < 0) {
log.info("回水温控报文检验失败: " + dataStr); log.info("回水温控报文检验失败: " + dataStr);

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

@ -1,5 +1,6 @@
package com.mh.user.strategy; package com.mh.user.strategy;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.DeviceInstallEntity;
@ -32,5 +33,6 @@ public interface DeviceStrategy {
String registerAddr, String registerAddr,
String dataStr, String dataStr,
String operateType, String operateType,
DeviceInstallEntity deviceInstallEntity); DeviceInstallEntity deviceInstallEntity,
CollectionParamsManageEntity collectionParamsManageEntity);
} }

20
user-service/src/main/java/com/mh/user/strategy/EleMeterStrategy.java

@ -2,6 +2,7 @@ package com.mh.user.strategy;
import com.mh.common.utils.StringUtils; import com.mh.common.utils.StringUtils;
import com.mh.user.constants.Constant; import com.mh.user.constants.Constant;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DataResultEntity; import com.mh.user.entity.DataResultEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.DeviceInstallEntity;
@ -46,22 +47,15 @@ public class EleMeterStrategy implements DeviceStrategy {
String deviceAddr = deviceCodeParamEntity.getDeviceAddr(); String deviceAddr = deviceCodeParamEntity.getDeviceAddr();
if (deviceAddr != null && deviceAddr.length() > 0) { if (deviceAddr != null && deviceAddr.length() > 0) {
try { try {
// 增加一个判断,判断是否是广仪电表modbus协议 // 增加一个判断,判断是否是广仪电表modbus协议 广仪MODBUS协议
if ("广仪MODBUS协议".equals(deviceCodeParamEntity.getBrand())) { if ("广仪MODBUS协议".equals(deviceCodeParamEntity.getBrand()) || deviceCodeParamEntity.getBrand().contains("广仪MODBUS")) {
str = ExchangeStringUtil.decToHex(deviceAddr); str = ExchangeStringUtil.decToHex(deviceAddr);
str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位 str = ExchangeStringUtil.addZeroForNum(str, 2); //以0补位
// if(registerAddr.equals("")){
// str=str+"0300000002";
// }else if(registerAddr.equals("")){
// str=str+"0300000002";
// }
// String funCode = ExchangeStringUtil.addZeroForNum(deviceCodeParamEntity.getFunCode(), 2);
// if ("04".equals(funCode)) {
str = str + "04" + "00010002"; str = str + "04" + "00010002";
// }
String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验 String checkWord = ExchangeStringUtil.getStrCRC16(str); //CRC16校验
str = str + checkWord; str = str + checkWord;
} if ("广仪07规约".equals(deviceCodeParamEntity.getBrand())) { return str.toUpperCase();
} else if ("广仪07规约".equals(deviceCodeParamEntity.getBrand())) {
//0代表前面补充0,12代表长度为12,d代表参数为正数型,基表通讯号 //0代表前面补充0,12代表长度为12,d代表参数为正数型,基表通讯号
str = String.format("%012d", Long.parseLong(deviceAddr)); str = String.format("%012d", Long.parseLong(deviceAddr));
//转换位置 //转换位置
@ -74,6 +68,7 @@ public class EleMeterStrategy implements DeviceStrategy {
//检验和 //检验和
String checkSum = ExchangeStringUtil.makeChecksum(str); String checkSum = ExchangeStringUtil.makeChecksum(str);
str = "FEFEFE" + str + checkSum + "16"; str = "FEFEFE" + str + checkSum + "16";
return str.toUpperCase();
} else { } else {
//0代表前面补充0,12代表长度为12,d代表参数为正数型,基表通讯号 //0代表前面补充0,12代表长度为12,d代表参数为正数型,基表通讯号
str = String.format("%012d", Long.parseLong(deviceAddr)); str = String.format("%012d", Long.parseLong(deviceAddr));
@ -160,7 +155,8 @@ public class EleMeterStrategy implements DeviceStrategy {
} }
@Override @Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity) { public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity,
CollectionParamsManageEntity collectionParamsManageEntity) {
String data = Constant.FAIL; String data = Constant.FAIL;
if (Integer.parseInt(dataStr) < 0) { if (Integer.parseInt(dataStr) < 0) {
return data; return data;

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

@ -3,6 +3,7 @@ package com.mh.user.strategy;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.mh.common.utils.StringUtils; import com.mh.common.utils.StringUtils;
import com.mh.user.constants.Constant; import com.mh.user.constants.Constant;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.service.BuildingService; import com.mh.user.service.BuildingService;
@ -241,7 +242,8 @@ public class HeatPumpStatusStrategy implements DeviceStrategy {
} }
@Override @Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity) { public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity,
CollectionParamsManageEntity collectionParamsManageEntity) {
return ""; return "";
} }
} }

67
user-service/src/main/java/com/mh/user/strategy/HeatPumpStrategy.java

@ -2,6 +2,7 @@ package com.mh.user.strategy;
import com.mh.common.utils.StringUtils; import com.mh.common.utils.StringUtils;
import com.mh.user.constants.Constant; import com.mh.user.constants.Constant;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.entity.NowPublicDataEntity; import com.mh.user.entity.NowPublicDataEntity;
@ -673,7 +674,69 @@ public class HeatPumpStrategy implements DeviceStrategy {
} }
@Override @Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity) { public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity,
return ""; CollectionParamsManageEntity collectionParamsManageEntity) {
String dataType = "";
String sValue = "";
long paramTypeId = collectionParamsManageEntity.getParamTypeId();
if (paramTypeId == 0) {
return null;
}
if (paramTypeId == 2) { //运行状态
dataType = "runState";
if (dataStr.equalsIgnoreCase("2")) { //0
sValue = "运行"; //关机
} else {//2
sValue = "不运行"; //制冷
}
//计算热泵运行时间,按分钟
nowDataService.proPumpMinutes(deviceInstallEntity.getBuildingId(), deviceInstallEntity.getDeviceAddr(), sValue);
log.info("计算热泵运行时长,楼栋名称:" + deviceInstallEntity.getBuildingName() + ",热泵编号:" + deviceInstallEntity.getDeviceAddr() + ",状态:" + sValue);
} else if (paramTypeId == 7 || paramTypeId == 10) {
//7设定温度,10水箱水温
if (paramTypeId == 7) {
dataType = "tempSet";
} else {
dataType = "waterTemp";
}
//读数
sValue = dataStr;
if (dataType.equals("waterTemp")) {
String avgTemp = nowDataService.selectAve(deviceInstallEntity.getBuildingId());
NowPublicDataEntity publicData = new NowPublicDataEntity();
publicData.setBuildingId(deviceInstallEntity.getBuildingId());
publicData.setUseWaterTemp(avgTemp);
publicData.setBackWaterTemp(avgTemp);
String pumpId = nowDataService.selectMinPumpId(deviceInstallEntity.getBuildingId());
// 如果是华夏,则取新增得字段标识为热泵ID
String name = dealDataService.customName();
if (name.contains(Constant.CUSTOM_NAME_HUAXIA) || name.contains(Constant.CUSTOM_NAME_HUARUAN)) {
pumpId = deviceInstallService.selectSinglePumpId(deviceInstallEntity.getBuildingId(), deviceInstallEntity.getDeviceAddr());
}
log.info("---------------addr:" + deviceInstallEntity.getDeviceAddr() + ",pumpId:" + pumpId + " ---------------");
if (deviceInstallEntity.getDeviceAddr().equals(pumpId)) { //取ID最小的热泵为单箱温度
publicData.setSingleTemp(sValue);
log.info("---------------单箱温度:" + sValue + "---------------");
}
nowPublicDataService.saveNowHistoryPublicData(publicData);
log.info("楼栋名称:" + deviceInstallEntity.getBuildingName() + ",热泵编号:" + deviceInstallEntity.getDeviceAddr());
} else {
pumpSetService.updatePumpSetTemp(sValue, deviceInstallEntity.getBuildingId(), deviceInstallEntity.getDeviceAddr()); //更新设定温度
}
} else if (paramTypeId == 3) { //故障状态
dataType = "isFault";
if (dataStr.equals("0")) {
sValue = "无故障";
} else {
sValue = "有故障";
}
}
if (!StringUtils.isBlank(sValue)) {
nowDataService.saveNowHistoryData(deviceInstallEntity.getDeviceAddr(), "热泵", sValue, dataType.toString(), deviceInstallEntity.getBuildingId());
log.info("时间: " + dateStr + "热泵ID:" + deviceInstallEntity.getDeviceAddr() + ",数据: " + dataStr + ",保存数据库成功!楼栋名称:" + deviceInstallEntity.getBuildingName());
}
nowDataService.proWaterTemp(dateStr, deviceInstallEntity.getBuildingId(), deviceInstallEntity.getDeviceAddr()); //保存楼栋时间点温度变化
log.info("----------------保存楼栋时间点温度变化值!----------------");
return sValue;
} }
} }

3
user-service/src/main/java/com/mh/user/strategy/MultiControlStrategy.java

@ -392,7 +392,8 @@ public class MultiControlStrategy implements DeviceStrategy {
} }
@Override @Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity) { public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity,
CollectionParamsManageEntity collectionParamsManageEntity) {
return ""; return "";
} }
} }

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

@ -2,6 +2,7 @@ package com.mh.user.strategy;
import com.mh.common.utils.StringUtils; import com.mh.common.utils.StringUtils;
import com.mh.user.constants.Constant; import com.mh.user.constants.Constant;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.service.*; import com.mh.user.service.*;
@ -130,7 +131,8 @@ public class PressureTransStrategy implements DeviceStrategy {
} }
@Override @Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity) { public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity,
CollectionParamsManageEntity collectionParamsManageEntity) {
String result = "fail"; String result = "fail";
if (Integer.parseInt(dataStr) < 0) { if (Integer.parseInt(dataStr) < 0) {
return result; return result;

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

@ -1,6 +1,7 @@
package com.mh.user.strategy; package com.mh.user.strategy;
import com.mh.user.constants.Constant; import com.mh.user.constants.Constant;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.entity.NowPublicDataEntity; import com.mh.user.entity.NowPublicDataEntity;
@ -127,7 +128,8 @@ public class StatusCheckStrategy implements DeviceStrategy {
} }
@Override @Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity) { public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity,
CollectionParamsManageEntity collectionParamsManageEntity) {
return ""; return "";
} }
} }

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

@ -1,6 +1,7 @@
package com.mh.user.strategy; package com.mh.user.strategy;
import com.mh.user.constants.Constant; import com.mh.user.constants.Constant;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.entity.NowPublicDataEntity; import com.mh.user.entity.NowPublicDataEntity;
@ -116,7 +117,8 @@ public class TempControlStrategy implements DeviceStrategy {
} }
@Override @Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity) { public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity,
CollectionParamsManageEntity collectionParamsManageEntity) {
String result = Constant.FAIL; String result = Constant.FAIL;
if (Integer.parseInt(dataStr) < 0) { if (Integer.parseInt(dataStr) < 0) {
log.info("温控报文检验失败: " + dataStr); log.info("温控报文检验失败: " + dataStr);

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

@ -2,6 +2,7 @@ package com.mh.user.strategy;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.mh.user.constants.Constant; import com.mh.user.constants.Constant;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.entity.NowPublicDataEntity; import com.mh.user.entity.NowPublicDataEntity;
@ -120,7 +121,8 @@ public class TempTransStrategy implements DeviceStrategy {
} }
@Override @Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity) { public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity,
CollectionParamsManageEntity collectionParamsManageEntity) {
return ""; return "";
} }
} }

52
user-service/src/main/java/com/mh/user/strategy/TimeControlStrategy.java

@ -2,6 +2,7 @@ package com.mh.user.strategy;
import com.mh.common.utils.StringUtils; import com.mh.common.utils.StringUtils;
import com.mh.user.constants.Constant; import com.mh.user.constants.Constant;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.service.NowDataService; import com.mh.user.service.NowDataService;
@ -182,14 +183,14 @@ public class TimeControlStrategy implements DeviceStrategy {
// 开关时间 // 开关时间
// 发送:0603001E0001E5BB // 发送:0603001E0001E5BB
// 返回:0603020041CDB4 // 返回:0603020041CDB4
if (rec == 14 && (isExactlyDivisible("001E", registerAddr) if (rec == 14 && (isExactlyDivisibleMH("001E", registerAddr)
|| isExactlyDivisible("001F", registerAddr) || isExactlyDivisibleMH("001F", registerAddr)
|| isExactlyDivisible("0020", registerAddr) || isExactlyDivisibleMH("0020", registerAddr)
|| isExactlyDivisible("0021", registerAddr) || isExactlyDivisibleMH("0021", registerAddr)
|| isExactlyDivisible("0022", registerAddr) || isExactlyDivisibleMH("0022", registerAddr)
|| isExactlyDivisible("0023", registerAddr) || isExactlyDivisibleMH("0023", registerAddr)
|| isExactlyDivisible("0024", registerAddr) || isExactlyDivisibleMH("0024", registerAddr)
|| isExactlyDivisible("0025", registerAddr) || isExactlyDivisibleMH("0025", registerAddr)
)) { )) {
// 开关时间 // 开关时间
data = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); data = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10));
@ -198,12 +199,12 @@ public class TimeControlStrategy implements DeviceStrategy {
int hours = totalMinutes / 60; int hours = totalMinutes / 60;
int minutes = totalMinutes % 60; int minutes = totalMinutes % 60;
data = String.format("%02d%02d", hours, minutes); data = String.format("%02d%02d", hours, minutes);
} else if (rec == 14 && isExactlyDivisible("0018", registerAddr)) { } else if (rec == 14 && (isExactlyDivisibleMH("0018", registerAddr))) {
// 星期掩码 // 星期掩码
// 截取时间 // 截取时间
// 发送:06030018000105BA // 发送:06030018000105BA
// 返回:060302007F4C64 // 返回:060302007F4C64
data = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)), 8); data = ExchangeStringUtil.addZeroForNum(new StringBuilder(ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10))).reverse().toString(), 8);
// 截取七天 // 截取七天
data = new StringBuilder(data).reverse().substring(0, 7); data = new StringBuilder(data).reverse().substring(0, 7);
} else if (rec == 38 && isExactlyDivisible("0000", registerAddr)) { } else if (rec == 38 && isExactlyDivisible("0000", registerAddr)) {
@ -233,7 +234,7 @@ public class TimeControlStrategy implements DeviceStrategy {
} else if (rec == 14 && isExactlyDivisible("0043", registerAddr)) { } else if (rec == 14 && isExactlyDivisible("0043", registerAddr)) {
// 星期掩码 // 星期掩码
// 截取时间 // 截取时间
data = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10)), 8); data = ExchangeStringUtil.addZeroForNum(new StringBuilder(ExchangeStringUtil.hexString2binaryString(checkStr.substring(8, 10))).reverse().toString(), 8);
// 截取七天 // 截取七天
data = new StringBuilder(data).reverse().substring(0, 7); data = new StringBuilder(data).reverse().substring(0, 7);
} else if (rec == 18 && isExactlyDivisible("0044", registerAddr)) { } else if (rec == 18 && isExactlyDivisible("0044", registerAddr)) {
@ -278,7 +279,6 @@ public class TimeControlStrategy implements DeviceStrategy {
return result; return result;
} }
// 判断是否可以整除
private static boolean isExactlyDivisible(String baseAddr, String registerAddr) { private static boolean isExactlyDivisible(String baseAddr, String registerAddr) {
// 16进制转十进制 // 16进制转十进制
int baseAddrInt = ExchangeStringUtil.hexToDecimal(baseAddr); int baseAddrInt = ExchangeStringUtil.hexToDecimal(baseAddr);
@ -293,8 +293,34 @@ public class TimeControlStrategy implements DeviceStrategy {
return false; return false;
} }
// 判断是否可以整除
private static boolean isExactlyDivisibleMH(String baseAddr, String registerAddr) {
// 16进制转十进制
int baseAddrInt = ExchangeStringUtil.hexToDecimal(baseAddr);
int registerAddrInt = ExchangeStringUtil.hexToDecimal(registerAddr);
// 如果registerAddrInt等于baseAddrInt,直接返回true
if (registerAddrInt == baseAddrInt) {
return true;
}
// 如果registerAddrInt大于baseAddrInt,持续减18,看是否等于baseAddrInt
if (registerAddrInt > baseAddrInt) {
int temp = registerAddrInt;
while (temp > baseAddrInt) {
temp -= 18;
}
// 判断是否等于baseAddrInt
return temp == baseAddrInt;
}
return false;
}
@Override @Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity) { public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity,
CollectionParamsManageEntity collectionParamsManageEntity) {
return ""; return "";
} }
} }

8
user-service/src/main/java/com/mh/user/strategy/WaterLevelSwitchStrategy.java

@ -3,10 +3,7 @@ package com.mh.user.strategy;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.mh.common.utils.StringUtils; import com.mh.common.utils.StringUtils;
import com.mh.user.constants.Constant; import com.mh.user.constants.Constant;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.*;
import com.mh.user.entity.DeviceInstallEntity;
import com.mh.user.entity.NowPublicDataEntity;
import com.mh.user.entity.SysParamEntity;
import com.mh.user.service.*; import com.mh.user.service.*;
import com.mh.user.utils.ExchangeStringUtil; import com.mh.user.utils.ExchangeStringUtil;
import com.mh.user.utils.SpringBeanUtil; import com.mh.user.utils.SpringBeanUtil;
@ -578,7 +575,8 @@ public class WaterLevelSwitchStrategy implements DeviceStrategy {
} }
@Override @Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity) { public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity,
CollectionParamsManageEntity collectionParamsManageEntity) {
return ""; return "";
} }
} }

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

@ -2,6 +2,7 @@ package com.mh.user.strategy;
import com.mh.common.utils.StringUtils; import com.mh.common.utils.StringUtils;
import com.mh.user.constants.Constant; import com.mh.user.constants.Constant;
import com.mh.user.entity.CollectionParamsManageEntity;
import com.mh.user.entity.DataResultEntity; import com.mh.user.entity.DataResultEntity;
import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceCodeParamEntity;
import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.DeviceInstallEntity;
@ -136,7 +137,8 @@ public class WtMeterStrategy implements DeviceStrategy {
} }
@Override @Override
public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity) { public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity,
CollectionParamsManageEntity collectionParamsManageEntity) {
String data = Constant.FAIL; String data = Constant.FAIL;
if (Integer.parseInt(dataStr) < 0) { if (Integer.parseInt(dataStr) < 0) {
return data; return data;

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

@ -8,7 +8,7 @@ spring:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
druid: druid:
#添加allowMultiQueries=true 在批量更新时才不会出错 #添加allowMultiQueries=true 在批量更新时才不会出错
url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=chws_bsdz;allowMultiQueries=true url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=chws_bsdz;allowMultiQueries=true;encrypt=false
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
username: sa username: sa
password: mh@803 password: mh@803

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

@ -14,10 +14,10 @@ spring:
# password: mh@803 # password: mh@803
## url: jdbc:sqlserver://120.25.220.177:32012;DatabaseName=M_CHWS;allowMultiQueries=true ## url: jdbc:sqlserver://120.25.220.177:32012;DatabaseName=M_CHWS;allowMultiQueries=true
#阿里云服务器-广州理工 #阿里云服务器-广州理工
url: jdbc:sqlserver://111.230.50.186:32012;DatabaseName=CHWS;allowMultiQueries=true # url: jdbc:sqlserver://111.230.50.186:32012;DatabaseName=CHWS;allowMultiQueries=true;encrypt=false
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
username: test # username: test
password: minghan123456@ # password: minghan123456@
# #华厦云服务器 # #华厦云服务器
# url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=CHWS;allowMultiQueries=true # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=CHWS;allowMultiQueries=true
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
@ -29,10 +29,10 @@ spring:
# username: chws_gsh # username: chws_gsh
# password: Mhtech@803 # password: Mhtech@803
#广商服务器 #广商服务器
# url: jdbc:sqlserver://175.178.153.91:8033;DatabaseName=chws_gsh;allowMultiQueries=true url: jdbc:sqlserver://175.178.153.91:8033;DatabaseName=chws_gsh;allowMultiQueries=true;encrypt=false
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
# username: chws_gsh username: chws_gsh
# password: Mhtech@803gsh password: Mhtech@803gsh
#本机 #本机
# url: jdbc:sqlserver://127.0.0.1:9956;DatabaseName=CHWS;allowMultiQueries=true # url: jdbc:sqlserver://127.0.0.1:9956;DatabaseName=CHWS;allowMultiQueries=true
# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
@ -143,4 +143,27 @@ logging:
amap: amap:
key: 984603bf28ef94ac78765a3ea27a6c26 key: 984603bf28ef94ac78765a3ea27a6c26
mqttSpring:
# BASIC parameters are required.
BASIC:
protocol: MQTT
host: 192.168.1.79
port: 1883
username: test
password: test123456
client-id: chws_nfxy_mqtt_dev
# If the protocol is ws/wss, this value is required.
path:
# Topics that need to be subscribed when initially connecting to mqtt, multiple topics are divided by ",".
inbound-topic: chws_nfxy_mqtt_dev/read/events_upload/devices
# 此部分是提供给后端生成token返回给前端,让前端使用websocket方式去和MQTT实现交互的,笔者此文的案例中并没有去实现
# 无人机远程控制模式(drone remote control)
DRC:
protocol: WS
host: 192.168.1.79
port: 8083
path: /mqtt
control:
topic: chws_nfxy_mqtt_dev/control/events_upload/devices

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

@ -1,3 +1,6 @@
spring: spring:
profiles: profiles:
active: dev active: prod
mvc:
pathmatch:
matching-strategy: ant_path_matcher

48
user-service/src/test/java/com/mh/user/device/CRC16Test.java

@ -69,21 +69,45 @@ public class CRC16Test {
} }
//测试 //测试
public static void main(String[] args) throws IOException { public static void main(String[] args) throws IOException {
String lastHourTime = "2020-06-03 01:00:00"; // String lastHourTime = "2020-06-03 01:00:00";
// lastHourTime转换成LocalDateTime // // lastHourTime转换成LocalDateTime
LocalDateTime lastHour1 = null; // LocalDateTime lastHour1 = null;
if(lastHourTime != null && !"".equals(lastHourTime)){ // if(lastHourTime != null && !"".equals(lastHourTime)){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
lastHour1 = LocalDateTime.parse(lastHourTime, formatter); // lastHour1 = LocalDateTime.parse(lastHourTime, formatter);
System.out.println(lastHour1); // System.out.println(lastHour1);
// }
//
// LocalDateTime now = lastHour1;
// LocalDateTime lastHour = now.minusHours(1);
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00:00");
// lastHourTime = lastHour.format(formatter);
// System.out.println(lastHourTime);
System.out.println(isExactlyDivisible("0018", "002A"));
}
private static boolean isExactlyDivisible(String baseAddr, String registerAddr) {
// 16进制转十进制
int baseAddrInt = ExchangeStringUtil.hexToDecimal(baseAddr);
int registerAddrInt = ExchangeStringUtil.hexToDecimal(registerAddr);
// 如果registerAddrInt等于baseAddrInt,直接返回true
if (registerAddrInt == baseAddrInt) {
return true;
} }
LocalDateTime now = lastHour1; // 如果registerAddrInt大于baseAddrInt,持续减16,看是否等于baseAddrInt
LocalDateTime lastHour = now.minusHours(1); if (registerAddrInt > baseAddrInt) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00:00"); int temp = registerAddrInt;
lastHourTime = lastHour.format(formatter); while (temp > baseAddrInt) {
System.out.println(lastHourTime); temp -= 18;
}
// 判断是否等于baseAddrInt
return temp == baseAddrInt;
}
return false;
} }
} }

Loading…
Cancel
Save