diff --git a/pom.xml b/pom.xml index 8706cff..fe2e390 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ org.springframework.boot spring-boot-starter-parent - 2.2.5.RELEASE + 2.7.18 @@ -50,21 +50,33 @@ org.springframework spring-messaging - 6.2.1 + 5.3.39 + + org.springframework.integration + spring-integration-core + 5.5.18 + org.springframework.integration spring-integration-mqtt - 6.3.4 + 5.5.18 + + + + + + + org.springframework.boot - spring-boot-starter-integration - 3.4.2 + spring-boot-starter-validation + diff --git a/user-service/pom.xml b/user-service/pom.xml index c706553..9aa85c2 100644 --- a/user-service/pom.xml +++ b/user-service/pom.xml @@ -58,6 +58,11 @@ mybatis-spring-boot-starter 2.3.0 + + tk.mybatis + mapper + 4.2.3 + com.alibaba @@ -119,12 +124,6 @@ true - - tk.mybatis - mapper - 3.3.9 - - org.apache.commons commons-pool2 diff --git a/user-service/src/main/java/com/mh/user/config/CorsConfig.java b/user-service/src/main/java/com/mh/user/config/CorsConfig.java index d288e08..050c5ed 100644 --- a/user-service/src/main/java/com/mh/user/config/CorsConfig.java +++ b/user-service/src/main/java/com/mh/user/config/CorsConfig.java @@ -29,12 +29,12 @@ public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**") // 允许跨域访问的路径 - .allowedOrigins("*") // 允许跨域访问的源 - .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") // 允许请求方法 - .maxAge(168000) // 预检间隔时间 - .allowedHeaders("*") // 允许头部设置 - .allowCredentials(true); // 是否发送cookie + registry.addMapping("/**") // 允许跨域访问的路径 + .allowedOriginPatterns("*") // 使用allowedOriginPatterns代替allowedOrigins + .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") // 允许请求方法 + .maxAge(168000) // 预检间隔时间 + .allowedHeaders("*") // 允许头部设置 + .allowCredentials(true); // 是否发送cookie } } diff --git a/user-service/src/main/java/com/mh/user/config/mqtt/InboundMessageRouter.java b/user-service/src/main/java/com/mh/user/config/mqtt/InboundMessageRouter.java deleted file mode 100644 index ccc4804..0000000 --- a/user-service/src/main/java/com/mh/user/config/mqtt/InboundMessageRouter.java +++ /dev/null @@ -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 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); - } - } -} diff --git a/user-service/src/main/java/com/mh/user/config/mqtt/MqttConfig.java b/user-service/src/main/java/com/mh/user/config/mqtt/MqttConfig.java deleted file mode 100644 index 1595c23..0000000 --- a/user-service/src/main/java/com/mh/user/config/mqtt/MqttConfig.java +++ /dev/null @@ -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 mqttSpring; - - public void setMqttSpring(Map 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; - } - -} diff --git a/user-service/src/main/java/com/mh/user/config/mqtt/MqttInboundConfig.java b/user-service/src/main/java/com/mh/user/config/mqtt/MqttInboundConfig.java deleted file mode 100644 index 27dcf3e..0000000 --- a/user-service/src/main/java/com/mh/user/config/mqtt/MqttInboundConfig.java +++ /dev/null @@ -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; - } - -} diff --git a/user-service/src/main/java/com/mh/user/config/mqtt/MqttMessageChannel.java b/user-service/src/main/java/com/mh/user/config/mqtt/MqttMessageChannel.java deleted file mode 100644 index 3a3c382..0000000 --- a/user-service/src/main/java/com/mh/user/config/mqtt/MqttMessageChannel.java +++ /dev/null @@ -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(); - } - -} diff --git a/user-service/src/main/java/com/mh/user/config/mqtt/MqttOutboundConfig.java b/user-service/src/main/java/com/mh/user/config/mqtt/MqttOutboundConfig.java deleted file mode 100644 index 6805a05..0000000 --- a/user-service/src/main/java/com/mh/user/config/mqtt/MqttOutboundConfig.java +++ /dev/null @@ -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; - } - - -} diff --git a/user-service/src/main/java/com/mh/user/constants/TopicEnum.java b/user-service/src/main/java/com/mh/user/constants/TopicEnum.java index 8f41357..afbd397 100644 --- a/user-service/src/main/java/com/mh/user/constants/TopicEnum.java +++ b/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 { /** - * 冷水机组客户端主动上报数据 + * 客户端主动上报数据 */ CLIENT_UPLOAD_DATA(Pattern.compile("^" + MH_UPLOAD + EVENTS_UPLOAD + REGEX_SN + "$"), ChannelName.EVENTS_UPLOAD_INBOUND), diff --git a/user-service/src/main/java/com/mh/user/controller/CodeTableController.java b/user-service/src/main/java/com/mh/user/controller/CodeTableController.java index 2e4b60b..5a46b02 100644 --- a/user-service/src/main/java/com/mh/user/controller/CodeTableController.java +++ b/user-service/src/main/java/com/mh/user/controller/CodeTableController.java @@ -29,4 +29,11 @@ public class CodeTableController { list=codeTableService.queryBrand(); return HttpResult.ok(list); } + + @PostMapping("/paramType") + public HttpResult queryParamType(){ + List list; + list=codeTableService.queryDataByName("paramType"); + return HttpResult.ok(list); + } } diff --git a/user-service/src/main/java/com/mh/user/controller/CollectionParamsManageController.java b/user-service/src/main/java/com/mh/user/controller/CollectionParamsManageController.java new file mode 100644 index 0000000..300a4cd --- /dev/null +++ b/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 records=collectionParamsManageService.selectCPMList(buildingId, deviceInstallId,otherName, page, limit); + return HttpResult.ok(count,records); + }catch (Exception e){ + return HttpResult.error(e.getMessage()); + } + } + +} diff --git a/user-service/src/main/java/com/mh/user/entity/CollectionParamsManageEntity.java b/user-service/src/main/java/com/mh/user/entity/CollectionParamsManageEntity.java new file mode 100644 index 0000000..d785b62 --- /dev/null +++ b/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(); + } +} diff --git a/user-service/src/main/java/com/mh/user/factory/BackTempControl.java b/user-service/src/main/java/com/mh/user/factory/BackTempControl.java index 4849b0c..2e9f65e 100644 --- a/user-service/src/main/java/com/mh/user/factory/BackTempControl.java +++ b/user-service/src/main/java/com/mh/user/factory/BackTempControl.java @@ -1,6 +1,8 @@ package com.mh.user.factory; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; +import com.mh.user.entity.DeviceInstallEntity; 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) { 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); + } } diff --git a/user-service/src/main/java/com/mh/user/factory/Device.java b/user-service/src/main/java/com/mh/user/factory/Device.java index d48feaa..0a9f9d8 100644 --- a/user-service/src/main/java/com/mh/user/factory/Device.java +++ b/user-service/src/main/java/com/mh/user/factory/Device.java @@ -1,6 +1,8 @@ package com.mh.user.factory; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; +import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.strategy.DeviceStrategy; /** @@ -17,4 +19,20 @@ public interface Device { String createOrders(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); } diff --git a/user-service/src/main/java/com/mh/user/factory/EleMeter.java b/user-service/src/main/java/com/mh/user/factory/EleMeter.java index 2adaec8..90ef785 100644 --- a/user-service/src/main/java/com/mh/user/factory/EleMeter.java +++ b/user-service/src/main/java/com/mh/user/factory/EleMeter.java @@ -1,6 +1,8 @@ package com.mh.user.factory; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; +import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.strategy.DeviceStrategy; 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) { 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); + } } diff --git a/user-service/src/main/java/com/mh/user/factory/HeatPump.java b/user-service/src/main/java/com/mh/user/factory/HeatPump.java index ed21aec..c5f3345 100644 --- a/user-service/src/main/java/com/mh/user/factory/HeatPump.java +++ b/user-service/src/main/java/com/mh/user/factory/HeatPump.java @@ -1,6 +1,8 @@ package com.mh.user.factory; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; +import com.mh.user.entity.DeviceInstallEntity; 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) { 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); + } } diff --git a/user-service/src/main/java/com/mh/user/factory/HeatPumpStatus.java b/user-service/src/main/java/com/mh/user/factory/HeatPumpStatus.java index 6a1633d..ca770fe 100644 --- a/user-service/src/main/java/com/mh/user/factory/HeatPumpStatus.java +++ b/user-service/src/main/java/com/mh/user/factory/HeatPumpStatus.java @@ -1,6 +1,8 @@ package com.mh.user.factory; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; +import com.mh.user.entity.DeviceInstallEntity; 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) { 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); + } } diff --git a/user-service/src/main/java/com/mh/user/factory/MultiControl.java b/user-service/src/main/java/com/mh/user/factory/MultiControl.java index 89959d5..10c2495 100644 --- a/user-service/src/main/java/com/mh/user/factory/MultiControl.java +++ b/user-service/src/main/java/com/mh/user/factory/MultiControl.java @@ -1,6 +1,8 @@ package com.mh.user.factory; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; +import com.mh.user.entity.DeviceInstallEntity; 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) { 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); + } + } diff --git a/user-service/src/main/java/com/mh/user/factory/PressureTrans.java b/user-service/src/main/java/com/mh/user/factory/PressureTrans.java index 3289a3e..f9e1fe5 100644 --- a/user-service/src/main/java/com/mh/user/factory/PressureTrans.java +++ b/user-service/src/main/java/com/mh/user/factory/PressureTrans.java @@ -1,6 +1,8 @@ package com.mh.user.factory; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; +import com.mh.user.entity.DeviceInstallEntity; 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) { 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); + } + } diff --git a/user-service/src/main/java/com/mh/user/factory/StatusCheck.java b/user-service/src/main/java/com/mh/user/factory/StatusCheck.java index 8e8afca..644364f 100644 --- a/user-service/src/main/java/com/mh/user/factory/StatusCheck.java +++ b/user-service/src/main/java/com/mh/user/factory/StatusCheck.java @@ -1,6 +1,8 @@ package com.mh.user.factory; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; +import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.strategy.DeviceStrategy; 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) { 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); + } + } diff --git a/user-service/src/main/java/com/mh/user/factory/TempControl.java b/user-service/src/main/java/com/mh/user/factory/TempControl.java index 52b130b..d745d66 100644 --- a/user-service/src/main/java/com/mh/user/factory/TempControl.java +++ b/user-service/src/main/java/com/mh/user/factory/TempControl.java @@ -1,6 +1,8 @@ package com.mh.user.factory; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; +import com.mh.user.entity.DeviceInstallEntity; 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) { 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); + } + } diff --git a/user-service/src/main/java/com/mh/user/factory/TempTrans.java b/user-service/src/main/java/com/mh/user/factory/TempTrans.java index 90bef12..ed5ef0c 100644 --- a/user-service/src/main/java/com/mh/user/factory/TempTrans.java +++ b/user-service/src/main/java/com/mh/user/factory/TempTrans.java @@ -1,6 +1,8 @@ package com.mh.user.factory; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; +import com.mh.user.entity.DeviceInstallEntity; 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) { 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); + } + } diff --git a/user-service/src/main/java/com/mh/user/factory/TimeControl.java b/user-service/src/main/java/com/mh/user/factory/TimeControl.java index f0c7cf8..ac8cfdc 100644 --- a/user-service/src/main/java/com/mh/user/factory/TimeControl.java +++ b/user-service/src/main/java/com/mh/user/factory/TimeControl.java @@ -1,6 +1,8 @@ package com.mh.user.factory; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; +import com.mh.user.entity.DeviceInstallEntity; 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) { 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); + } + } diff --git a/user-service/src/main/java/com/mh/user/factory/WaterLevelSwitch.java b/user-service/src/main/java/com/mh/user/factory/WaterLevelSwitch.java index f3874b2..f2a3886 100644 --- a/user-service/src/main/java/com/mh/user/factory/WaterLevelSwitch.java +++ b/user-service/src/main/java/com/mh/user/factory/WaterLevelSwitch.java @@ -1,6 +1,8 @@ package com.mh.user.factory; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; +import com.mh.user.entity.DeviceInstallEntity; 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) { 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); + } + } diff --git a/user-service/src/main/java/com/mh/user/factory/WtMeter.java b/user-service/src/main/java/com/mh/user/factory/WtMeter.java index ab6bb4e..30fd58c 100644 --- a/user-service/src/main/java/com/mh/user/factory/WtMeter.java +++ b/user-service/src/main/java/com/mh/user/factory/WtMeter.java @@ -1,6 +1,8 @@ package com.mh.user.factory; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; +import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.strategy.DeviceStrategy; 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) { 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); + } + } diff --git a/user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java b/user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java index 144f81f..33c6cbc 100644 --- a/user-service/src/main/java/com/mh/user/job/CollectionLoopRunner.java +++ b/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.bind(8098); // 初始化mqtt订阅记录 - initializeMqttSubscription(); +// initializeMqttSubscription(); } /** diff --git a/user-service/src/main/java/com/mh/user/job/GetWeatherInfoJob.java b/user-service/src/main/java/com/mh/user/job/GetWeatherInfoJob.java index e609b74..6921041 100644 --- a/user-service/src/main/java/com/mh/user/job/GetWeatherInfoJob.java +++ b/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() { // 从系统参数中获取对应的项目区域 SysParamEntity sysParam = sysParamService.selectSysParam(); diff --git a/user-service/src/main/java/com/mh/user/mapper/CodeTableMapper.java b/user-service/src/main/java/com/mh/user/mapper/CodeTableMapper.java index 86c1573..595db22 100644 --- a/user-service/src/main/java/com/mh/user/mapper/CodeTableMapper.java +++ b/user-service/src/main/java/com/mh/user/mapper/CodeTableMapper.java @@ -18,4 +18,7 @@ public interface CodeTableMapper { //从code_table表查询品牌 @Select("select * from code_table where name='brand' ") List queryBrand(); + + @Select("select * from code_table where name=#{name} ") + List queryDataByName(String name); } diff --git a/user-service/src/main/java/com/mh/user/mapper/CollectionParamsManageMapper.java b/user-service/src/main/java/com/mh/user/mapper/CollectionParamsManageMapper.java new file mode 100644 index 0000000..4504a9a --- /dev/null +++ b/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 { + + @Select("") + @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 selectCPMList(String buildingId,String deviceInstallId, String otherName, Integer pageNum, Integer pageSize); + + @Select("") + 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("") + void updateById(CollectionParamsManageEntity cpmEntity); + + @Delete("delete from collection_params_manage where id = #{msId}") + void deleteById(String msId); +} diff --git a/user-service/src/main/java/com/mh/user/mapper/GatewayManageMapper.java b/user-service/src/main/java/com/mh/user/mapper/GatewayManageMapper.java index 75df764..125d129 100644 --- a/user-service/src/main/java/com/mh/user/mapper/GatewayManageMapper.java +++ b/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} ") 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); } diff --git a/user-service/src/main/java/com/mh/user/mapper/MqttSubscriptionMapper.java b/user-service/src/main/java/com/mh/user/mapper/MqttSubscriptionMapper.java index cccb641..1260d8b 100644 --- a/user-service/src/main/java/com/mh/user/mapper/MqttSubscriptionMapper.java +++ b/user-service/src/main/java/com/mh/user/mapper/MqttSubscriptionMapper.java @@ -22,7 +22,7 @@ public interface MqttSubscriptionMapper extends BaseMapperAND topic = #{topic}" + "AND status = #{status}" + - "ORDER BY crate_time DESC " + + "ORDER BY create_time DESC " + "") List selectListByTopic(@Param("topic") String topic, @Param("status") String status); diff --git a/user-service/src/main/java/com/mh/user/model/SanShiFengDatas.java b/user-service/src/main/java/com/mh/user/model/SanShiFengDatas.java index cc9c63e..28e0772 100644 --- a/user-service/src/main/java/com/mh/user/model/SanShiFengDatas.java +++ b/user-service/src/main/java/com/mh/user/model/SanShiFengDatas.java @@ -15,16 +15,16 @@ public class SanShiFengDatas { /** * 对应研华的标签值 */ - private String tag; + private String name; /** * 上报值 */ private T value; - /** - * 质量值 - */ - private T quality; +// /** +// * 质量值 +// */ +// private T quality; } diff --git a/user-service/src/main/java/com/mh/user/model/SanShiFengReceiver.java b/user-service/src/main/java/com/mh/user/model/SanShiFengReceiver.java index b76c17b..297f0b8 100644 --- a/user-service/src/main/java/com/mh/user/model/SanShiFengReceiver.java +++ b/user-service/src/main/java/com/mh/user/model/SanShiFengReceiver.java @@ -19,11 +19,17 @@ public class SanShiFengReceiver { /** * 数据集合 */ - private List d; + private List datas; /** * 主动上报数据时间(带T类型) */ - private String ts; + private String sn; + + private String plcName; + + private String projectName; + + private String time; } diff --git a/user-service/src/main/java/com/mh/user/service/CodeTableService.java b/user-service/src/main/java/com/mh/user/service/CodeTableService.java index ce8850c..548ee6a 100644 --- a/user-service/src/main/java/com/mh/user/service/CodeTableService.java +++ b/user-service/src/main/java/com/mh/user/service/CodeTableService.java @@ -9,4 +9,6 @@ public interface CodeTableService { List queryDeviceType(); List queryBrand(); + + List queryDataByName(String name); } diff --git a/user-service/src/main/java/com/mh/user/service/CollectionParamsManageService.java b/user-service/src/main/java/com/mh/user/service/CollectionParamsManageService.java new file mode 100644 index 0000000..ffa0625 --- /dev/null +++ b/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 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); +} diff --git a/user-service/src/main/java/com/mh/user/service/GatewayManageService.java b/user-service/src/main/java/com/mh/user/service/GatewayManageService.java index 12bbf3a..e2924f7 100644 --- a/user-service/src/main/java/com/mh/user/service/GatewayManageService.java +++ b/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 updateGatewayManageOnlineByImei(String imei, int status); + + void updateGatewayManageOnlineBySn(String sn, int grade); } diff --git a/user-service/src/main/java/com/mh/user/service/impl/CodeTableServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/CodeTableServiceImpl.java index 5978de9..97c3ce0 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/CodeTableServiceImpl.java +++ b/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.stereotype.Service; +import java.util.Collections; import java.util.List; @Service @@ -23,4 +24,9 @@ public class CodeTableServiceImpl implements CodeTableService { public List queryBrand() { return codeTableMapper.queryBrand(); } + + @Override + public List queryDataByName(String name) { + return codeTableMapper.queryDataByName(name); + } } diff --git a/user-service/src/main/java/com/mh/user/service/impl/CollectionParamsManageServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/CollectionParamsManageServiceImpl.java new file mode 100644 index 0000000..1af7755 --- /dev/null +++ b/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 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; + } +} diff --git a/user-service/src/main/java/com/mh/user/service/impl/GatewayManageServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/GatewayManageServiceImpl.java index e8ef4ea..fefffc1 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/GatewayManageServiceImpl.java +++ b/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) { gatewayManageMapper.updateGatewayManageOnlineByImei(imei, status); } + + @Override + public void updateGatewayManageOnlineBySn(String sn, int grade) { + gatewayManageMapper.updateGatewayManageOnlineBySn(sn, grade); + } } diff --git a/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttConfig.java b/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttConfig.java index a307097..afce38d 100644 --- a/user-service/src/main/java/com/mh/user/service/mqtt/config/MqttConfig.java +++ b/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()) ? customizeOptions.getPassword().toCharArray() : new char[0]); // 直接进行自动连接 - mqttConnectOptions.setAutomaticReconnect(true); + mqttConnectOptions.setAutomaticReconnect(false); // 时间间隔时间10s - mqttConnectOptions.setKeepAliveInterval(10); + mqttConnectOptions.setKeepAliveInterval(1000); return mqttConnectOptions; } diff --git a/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/EventsServiceImpl.java b/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/EventsServiceImpl.java index 29f04ca..5765ed1 100644 --- a/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/EventsServiceImpl.java +++ b/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.fasterxml.jackson.databind.ObjectMapper; 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.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.strategy.DeviceStrategy; +import com.mh.user.strategy.DeviceStrategyFactory; import io.netty.util.CharsetUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -13,6 +23,7 @@ import org.springframework.messaging.MessageHeaders; import org.springframework.stereotype.Service; import java.io.IOException; +import java.util.List; import java.util.Objects; /** @@ -29,6 +40,15 @@ public class EventsServiceImpl implements IEventsService { @Autowired private ObjectMapper mapper; + @Autowired + private GatewayManageService gatewayManageService; + + @Autowired + private CollectionParamsManageService collectionParamManageService; + + @Autowired + private DeviceInstallService deviceInstallService; + @ServiceActivator(inputChannel = ChannelName.EVENTS_UPLOAD_INBOUND) @Override 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) { try { - SanShiFengReceiver commonTopicReceiver = new SanShiFengReceiver(); - commonTopicReceiver = mapper.readValue(receiver, SanShiFengReceiver.class); - log.info("主题:{},类型:{}: ,数据:{}", topic, logMessage, commonTopicReceiver.toString()); - // 不使用消息队列,查询属于哪种设备类型,然后通过策略进行数据解析 + SanShiFengReceiver datas = new SanShiFengReceiver(); + datas = mapper.readValue(receiver, SanShiFengReceiver.class); + 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 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) { log.error("处理数据时发生错误: ", e); } diff --git a/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttTopicServiceImpl.java b/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttTopicServiceImpl.java index 5eba529..f66f7b5 100644 --- a/user-service/src/main/java/com/mh/user/service/mqtt/service/impl/MqttTopicServiceImpl.java +++ b/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; -import com.mh.framework.mqtt.service.IMqttTopicService; -import jakarta.annotation.Resource; +import com.mh.user.service.mqtt.service.IMqttTopicService; import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter; import org.springframework.stereotype.Service; +import javax.annotation.Resource; + /** * @author LJF * @version 1.0 diff --git a/user-service/src/main/java/com/mh/user/strategy/BackTempControlStrategy.java b/user-service/src/main/java/com/mh/user/strategy/BackTempControlStrategy.java index 94df221..3b296eb 100644 --- a/user-service/src/main/java/com/mh/user/strategy/BackTempControlStrategy.java +++ b/user-service/src/main/java/com/mh/user/strategy/BackTempControlStrategy.java @@ -1,6 +1,7 @@ package com.mh.user.strategy; import com.mh.user.constants.Constant; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.NowPublicDataEntity; @@ -107,7 +108,8 @@ public class BackTempControlStrategy implements DeviceStrategy { String registerAddr, String dataStr, String operateType, - DeviceInstallEntity deviceInstallEntity) { + DeviceInstallEntity deviceInstallEntity, + CollectionParamsManageEntity collectionParamsManageEntity) { String result = Constant.FAIL; if (Integer.parseInt(dataStr) < 0) { log.info("回水温控报文检验失败: " + dataStr); diff --git a/user-service/src/main/java/com/mh/user/strategy/DeviceStrategy.java b/user-service/src/main/java/com/mh/user/strategy/DeviceStrategy.java index 1a848c2..173afcd 100644 --- a/user-service/src/main/java/com/mh/user/strategy/DeviceStrategy.java +++ b/user-service/src/main/java/com/mh/user/strategy/DeviceStrategy.java @@ -1,5 +1,6 @@ package com.mh.user.strategy; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceInstallEntity; @@ -32,5 +33,6 @@ public interface DeviceStrategy { String registerAddr, String dataStr, String operateType, - DeviceInstallEntity deviceInstallEntity); + DeviceInstallEntity deviceInstallEntity, + CollectionParamsManageEntity collectionParamsManageEntity); } diff --git a/user-service/src/main/java/com/mh/user/strategy/EleMeterStrategy.java b/user-service/src/main/java/com/mh/user/strategy/EleMeterStrategy.java index d3feb43..498858e 100644 --- a/user-service/src/main/java/com/mh/user/strategy/EleMeterStrategy.java +++ b/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.user.constants.Constant; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DataResultEntity; import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceInstallEntity; @@ -46,22 +47,15 @@ public class EleMeterStrategy implements DeviceStrategy { String deviceAddr = deviceCodeParamEntity.getDeviceAddr(); if (deviceAddr != null && deviceAddr.length() > 0) { try { - // 增加一个判断,判断是否是广仪电表modbus协议 - if ("广仪MODBUS协议".equals(deviceCodeParamEntity.getBrand())) { + // 增加一个判断,判断是否是广仪电表modbus协议 广仪MODBUS协议 + if ("广仪MODBUS协议".equals(deviceCodeParamEntity.getBrand()) || deviceCodeParamEntity.getBrand().contains("广仪MODBUS")) { str = ExchangeStringUtil.decToHex(deviceAddr); 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校验 str = str + checkWord; - } if ("广仪07规约".equals(deviceCodeParamEntity.getBrand())) { + return str.toUpperCase(); + } else if ("广仪07规约".equals(deviceCodeParamEntity.getBrand())) { //0代表前面补充0,12代表长度为12,d代表参数为正数型,基表通讯号 str = String.format("%012d", Long.parseLong(deviceAddr)); //转换位置 @@ -74,6 +68,7 @@ public class EleMeterStrategy implements DeviceStrategy { //检验和 String checkSum = ExchangeStringUtil.makeChecksum(str); str = "FEFEFE" + str + checkSum + "16"; + return str.toUpperCase(); } else { //0代表前面补充0,12代表长度为12,d代表参数为正数型,基表通讯号 str = String.format("%012d", Long.parseLong(deviceAddr)); @@ -160,7 +155,8 @@ public class EleMeterStrategy implements DeviceStrategy { } @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; if (Integer.parseInt(dataStr) < 0) { return data; diff --git a/user-service/src/main/java/com/mh/user/strategy/HeatPumpStatusStrategy.java b/user-service/src/main/java/com/mh/user/strategy/HeatPumpStatusStrategy.java index e3a35d8..53a59ca 100644 --- a/user-service/src/main/java/com/mh/user/strategy/HeatPumpStatusStrategy.java +++ b/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.mh.common.utils.StringUtils; import com.mh.user.constants.Constant; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.service.BuildingService; @@ -241,7 +242,8 @@ public class HeatPumpStatusStrategy implements DeviceStrategy { } @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 ""; } } diff --git a/user-service/src/main/java/com/mh/user/strategy/HeatPumpStrategy.java b/user-service/src/main/java/com/mh/user/strategy/HeatPumpStrategy.java index e5afbc3..35fd41b 100644 --- a/user-service/src/main/java/com/mh/user/strategy/HeatPumpStrategy.java +++ b/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.user.constants.Constant; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.NowPublicDataEntity; @@ -673,7 +674,69 @@ public class HeatPumpStrategy implements DeviceStrategy { } @Override - public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity) { - return ""; + public String analysisMQTTReceiveData(String dateStr, String registerAddr, String dataStr, String operateType, DeviceInstallEntity deviceInstallEntity, + 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; } } diff --git a/user-service/src/main/java/com/mh/user/strategy/MultiControlStrategy.java b/user-service/src/main/java/com/mh/user/strategy/MultiControlStrategy.java index b7f90b8..79dd462 100644 --- a/user-service/src/main/java/com/mh/user/strategy/MultiControlStrategy.java +++ b/user-service/src/main/java/com/mh/user/strategy/MultiControlStrategy.java @@ -392,7 +392,8 @@ public class MultiControlStrategy implements DeviceStrategy { } @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 ""; } } diff --git a/user-service/src/main/java/com/mh/user/strategy/PressureTransStrategy.java b/user-service/src/main/java/com/mh/user/strategy/PressureTransStrategy.java index 0a9a1d4..8ab87bb 100644 --- a/user-service/src/main/java/com/mh/user/strategy/PressureTransStrategy.java +++ b/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.user.constants.Constant; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.service.*; @@ -130,7 +131,8 @@ public class PressureTransStrategy implements DeviceStrategy { } @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"; if (Integer.parseInt(dataStr) < 0) { return result; diff --git a/user-service/src/main/java/com/mh/user/strategy/StatusCheckStrategy.java b/user-service/src/main/java/com/mh/user/strategy/StatusCheckStrategy.java index 7632bfd..deb8a86 100644 --- a/user-service/src/main/java/com/mh/user/strategy/StatusCheckStrategy.java +++ b/user-service/src/main/java/com/mh/user/strategy/StatusCheckStrategy.java @@ -1,6 +1,7 @@ package com.mh.user.strategy; import com.mh.user.constants.Constant; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.NowPublicDataEntity; @@ -127,7 +128,8 @@ public class StatusCheckStrategy implements DeviceStrategy { } @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 ""; } } diff --git a/user-service/src/main/java/com/mh/user/strategy/TempControlStrategy.java b/user-service/src/main/java/com/mh/user/strategy/TempControlStrategy.java index 5572c2f..23517b7 100644 --- a/user-service/src/main/java/com/mh/user/strategy/TempControlStrategy.java +++ b/user-service/src/main/java/com/mh/user/strategy/TempControlStrategy.java @@ -1,6 +1,7 @@ package com.mh.user.strategy; import com.mh.user.constants.Constant; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.NowPublicDataEntity; @@ -116,7 +117,8 @@ public class TempControlStrategy implements DeviceStrategy { } @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; if (Integer.parseInt(dataStr) < 0) { log.info("温控报文检验失败: " + dataStr); diff --git a/user-service/src/main/java/com/mh/user/strategy/TempTransStrategy.java b/user-service/src/main/java/com/mh/user/strategy/TempTransStrategy.java index e860274..8170333 100644 --- a/user-service/src/main/java/com/mh/user/strategy/TempTransStrategy.java +++ b/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.mh.user.constants.Constant; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.entity.NowPublicDataEntity; @@ -120,7 +121,8 @@ public class TempTransStrategy implements DeviceStrategy { } @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 ""; } } diff --git a/user-service/src/main/java/com/mh/user/strategy/TimeControlStrategy.java b/user-service/src/main/java/com/mh/user/strategy/TimeControlStrategy.java index 61dcb05..cd0d13c 100644 --- a/user-service/src/main/java/com/mh/user/strategy/TimeControlStrategy.java +++ b/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.user.constants.Constant; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceInstallEntity; import com.mh.user.service.NowDataService; @@ -182,14 +183,14 @@ public class TimeControlStrategy implements DeviceStrategy { // 开关时间 // 发送:0603001E0001E5BB // 返回:0603020041CDB4 - if (rec == 14 && (isExactlyDivisible("001E", registerAddr) - || isExactlyDivisible("001F", registerAddr) - || isExactlyDivisible("0020", registerAddr) - || isExactlyDivisible("0021", registerAddr) - || isExactlyDivisible("0022", registerAddr) - || isExactlyDivisible("0023", registerAddr) - || isExactlyDivisible("0024", registerAddr) - || isExactlyDivisible("0025", registerAddr) + if (rec == 14 && (isExactlyDivisibleMH("001E", registerAddr) + || isExactlyDivisibleMH("001F", registerAddr) + || isExactlyDivisibleMH("0020", registerAddr) + || isExactlyDivisibleMH("0021", registerAddr) + || isExactlyDivisibleMH("0022", registerAddr) + || isExactlyDivisibleMH("0023", registerAddr) + || isExactlyDivisibleMH("0024", registerAddr) + || isExactlyDivisibleMH("0025", registerAddr) )) { // 开关时间 data = ExchangeStringUtil.hexToDec(checkStr.substring(6, 10)); @@ -198,12 +199,12 @@ public class TimeControlStrategy implements DeviceStrategy { int hours = totalMinutes / 60; int minutes = totalMinutes % 60; data = String.format("%02d%02d", hours, minutes); - } else if (rec == 14 && isExactlyDivisible("0018", registerAddr)) { + } else if (rec == 14 && (isExactlyDivisibleMH("0018", registerAddr))) { // 星期掩码 // 截取时间 // 发送:06030018000105BA // 返回: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); } else if (rec == 38 && isExactlyDivisible("0000", registerAddr)) { @@ -233,7 +234,7 @@ public class TimeControlStrategy implements DeviceStrategy { } 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); } else if (rec == 18 && isExactlyDivisible("0044", registerAddr)) { @@ -278,7 +279,6 @@ public class TimeControlStrategy implements DeviceStrategy { return result; } - // 判断是否可以整除 private static boolean isExactlyDivisible(String baseAddr, String registerAddr) { // 16进制转十进制 int baseAddrInt = ExchangeStringUtil.hexToDecimal(baseAddr); @@ -293,8 +293,34 @@ public class TimeControlStrategy implements DeviceStrategy { 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 - 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 ""; } } diff --git a/user-service/src/main/java/com/mh/user/strategy/WaterLevelSwitchStrategy.java b/user-service/src/main/java/com/mh/user/strategy/WaterLevelSwitchStrategy.java index 1320dd4..a240211 100644 --- a/user-service/src/main/java/com/mh/user/strategy/WaterLevelSwitchStrategy.java +++ b/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.mh.common.utils.StringUtils; import com.mh.user.constants.Constant; -import com.mh.user.entity.DeviceCodeParamEntity; -import com.mh.user.entity.DeviceInstallEntity; -import com.mh.user.entity.NowPublicDataEntity; -import com.mh.user.entity.SysParamEntity; +import com.mh.user.entity.*; import com.mh.user.service.*; import com.mh.user.utils.ExchangeStringUtil; import com.mh.user.utils.SpringBeanUtil; @@ -578,7 +575,8 @@ public class WaterLevelSwitchStrategy implements DeviceStrategy { } @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 ""; } } diff --git a/user-service/src/main/java/com/mh/user/strategy/WtMeterStrategy.java b/user-service/src/main/java/com/mh/user/strategy/WtMeterStrategy.java index 5f7d50b..5e6269a 100644 --- a/user-service/src/main/java/com/mh/user/strategy/WtMeterStrategy.java +++ b/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.user.constants.Constant; +import com.mh.user.entity.CollectionParamsManageEntity; import com.mh.user.entity.DataResultEntity; import com.mh.user.entity.DeviceCodeParamEntity; import com.mh.user.entity.DeviceInstallEntity; @@ -22,7 +23,7 @@ import java.util.Date; * @date 2024-03-18 09:51:17 */ @Slf4j -public class WtMeterStrategy implements DeviceStrategy { +public class WtMeterStrategy implements DeviceStrategy { ApplicationContext context = SpringBeanUtil.getApplicationContext(); @@ -136,7 +137,8 @@ public class WtMeterStrategy implements DeviceStrategy { } @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; if (Integer.parseInt(dataStr) < 0) { return data; diff --git a/user-service/src/main/resources/application-dev.yml b/user-service/src/main/resources/application-dev.yml index 90fa9f5..ea05b9a 100644 --- a/user-service/src/main/resources/application-dev.yml +++ b/user-service/src/main/resources/application-dev.yml @@ -8,7 +8,7 @@ spring: type: com.alibaba.druid.pool.DruidDataSource druid: #添加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 username: sa password: mh@803 diff --git a/user-service/src/main/resources/application-prod.yml b/user-service/src/main/resources/application-prod.yml index ff10893..eb33eba 100644 --- a/user-service/src/main/resources/application-prod.yml +++ b/user-service/src/main/resources/application-prod.yml @@ -14,10 +14,10 @@ spring: # password: mh@803 ## 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 - driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver - username: test - password: minghan123456@ +# url: jdbc:sqlserver://111.230.50.186:32012;DatabaseName=CHWS;allowMultiQueries=true;encrypt=false +# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver +# username: test +# password: minghan123456@ # #华厦云服务器 # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=CHWS;allowMultiQueries=true # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver @@ -29,10 +29,10 @@ spring: # username: chws_gsh # password: Mhtech@803 #广商服务器 -# url: jdbc:sqlserver://175.178.153.91:8033;DatabaseName=chws_gsh;allowMultiQueries=true -# driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver -# username: chws_gsh -# password: Mhtech@803gsh + url: jdbc:sqlserver://175.178.153.91:8033;DatabaseName=chws_gsh;allowMultiQueries=true;encrypt=false + driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver + username: chws_gsh + password: Mhtech@803gsh #本机 # url: jdbc:sqlserver://127.0.0.1:9956;DatabaseName=CHWS;allowMultiQueries=true # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver @@ -143,4 +143,27 @@ logging: amap: 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 + diff --git a/user-service/src/main/resources/application.yml b/user-service/src/main/resources/application.yml index 3d7808a..081dc84 100644 --- a/user-service/src/main/resources/application.yml +++ b/user-service/src/main/resources/application.yml @@ -1,3 +1,6 @@ spring: profiles: - active: dev + active: prod + mvc: + pathmatch: + matching-strategy: ant_path_matcher diff --git a/user-service/src/test/java/com/mh/user/device/CRC16Test.java b/user-service/src/test/java/com/mh/user/device/CRC16Test.java index a26eec9..77185c4 100644 --- a/user-service/src/test/java/com/mh/user/device/CRC16Test.java +++ b/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 { - String lastHourTime = "2020-06-03 01:00:00"; - // lastHourTime转换成LocalDateTime - LocalDateTime lastHour1 = null; - if(lastHourTime != null && !"".equals(lastHourTime)){ - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - lastHour1 = LocalDateTime.parse(lastHourTime, formatter); - System.out.println(lastHour1); +// String lastHourTime = "2020-06-03 01:00:00"; +// // lastHourTime转换成LocalDateTime +// LocalDateTime lastHour1 = null; +// if(lastHourTime != null && !"".equals(lastHourTime)){ +// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); +// lastHour1 = LocalDateTime.parse(lastHourTime, formatter); +// 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; - LocalDateTime lastHour = now.minusHours(1); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00:00"); - lastHourTime = lastHour.format(formatter); - System.out.println(lastHourTime); + // 如果registerAddrInt大于baseAddrInt,持续减16,看是否等于baseAddrInt + if (registerAddrInt > baseAddrInt) { + int temp = registerAddrInt; + while (temp > baseAddrInt) { + temp -= 18; + } + // 判断是否等于baseAddrInt + return temp == baseAddrInt; + } + return false; } }