From 52c55330438818ba36a76450e3c9edf3461bd078 Mon Sep 17 00:00:00 2001 From: andy <1042025947@qq.com> Date: Tue, 8 Apr 2025 15:17:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=85=E7=94=B5=E7=AB=99=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E4=BA=91=E7=AB=AF=E7=9A=84=E7=AD=96=E7=95=A5=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cloud-manage-server/pom.xml | 2 +- .../message/dto/newer/req/MqttResponse.java | 53 +++++++++++++++++++ .../MqttMessageRequestExchangeProcessor.java | 49 +++++++++++++++++ ...ttMessageRequestExchangeProcessorImpl.java | 53 +++++++++++++++++++ .../BatteryStationCdStrategyService.java | 2 + .../BatteryStationCdStrategyServiceImpl.java | 15 ++++++ .../evotech/hd/cloud/utils/SpringUtil.java | 51 ++++++++++++++++++ .../com/evotech/hd/cloud/AddTestData.java | 19 ++++++- 8 files changed, 241 insertions(+), 3 deletions(-) create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/MqttResponse.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/MqttMessageRequestExchangeProcessor.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/impl/StrategyMqttMessageRequestExchangeProcessorImpl.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/SpringUtil.java diff --git a/cloud-manage-server/pom.xml b/cloud-manage-server/pom.xml index 04bbc8e..d8cae23 100644 --- a/cloud-manage-server/pom.xml +++ b/cloud-manage-server/pom.xml @@ -82,7 +82,7 @@ cn.hutool hutool-crypto - + diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/MqttResponse.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/MqttResponse.java new file mode 100644 index 0000000..20864fb --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/MqttResponse.java @@ -0,0 +1,53 @@ +package com.evotech.hd.cloud.mqtt.message.dto.newer.req; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @desc: + * @ClassName:MqttResponse + * @date: 2025年04月08日 12:44 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +public class MqttResponse implements Serializable { + + private Integer code; + + private String msg; + + private T data; + + + static final Integer SUCCESS = 1; + + static final Integer ERROR = 0; + + static final Integer PARAMS_ERROR = 2; + + public MqttResponse() { + } + + public MqttResponse success(T data){ + this.code=SUCCESS; + this.msg="成功"; + this.data=data; + return this; + } + + public MqttResponse error(String errorMessage){ + this.code=ERROR; + this.msg=errorMessage; + return this; + } + + public MqttResponse paramsError(String errorMessage){ + this.code=PARAMS_ERROR; + this.msg=errorMessage; + return this; + } + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/MqttMessageRequestExchangeProcessor.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/MqttMessageRequestExchangeProcessor.java new file mode 100644 index 0000000..b5d44e2 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/MqttMessageRequestExchangeProcessor.java @@ -0,0 +1,49 @@ +package com.evotech.hd.cloud.mqtt.message.processor; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.json.JSONConfig; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; +import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; +import com.evotech.hd.cloud.mqtt.message.MessageTopic; +import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; +import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse; +import com.evotech.hd.cloud.mqtt.message.dto.newer.req.order.CancelOrderReq; +import com.evotech.hd.cloud.mqtt.message.handle.MessageUtilService; +import com.evotech.hd.cloud.utils.SpringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Date; + + +/** + * @desc: 处理mqtt请求接口 + * @ClassName:MqttMessageRequestExchangeProcessor + * @date: 2025年04月08日 11:28 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +public interface MqttMessageRequestExchangeProcessor { + + Logger logger = LoggerFactory.getLogger(MqttMessageRequestExchangeProcessor.class); + + boolean accept(String functionName); + + void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody); + + default void sendAESMessage(MessageTopic topic, MqttMessageHeader header, RequestFunctionTypesEnum typesEnum, MqttResponse response){ + MessageUtilService messageUtilService = SpringUtil.getBean(MessageUtilService.class); + // 发送 + topic.setDataDirection("M2S"); + topic.setMessageType(MqttMessageTypeEnum.RESPONSE.getType()); + header.setFunction(typesEnum.getReFunction()); + header.setTimeStamp(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMATTER)); + logger.info("\r\n=====>>>站端取消订单--MQTT发送到消息主题:{},头部信息:{},message:{}", topic,header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN))); + messageUtilService.publishAESMessage(topic, header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN))); + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/impl/StrategyMqttMessageRequestExchangeProcessorImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/impl/StrategyMqttMessageRequestExchangeProcessorImpl.java new file mode 100644 index 0000000..9cd31fa --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/impl/StrategyMqttMessageRequestExchangeProcessorImpl.java @@ -0,0 +1,53 @@ +package com.evotech.hd.cloud.mqtt.message.processor.impl; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; +import com.evotech.hd.cloud.mqtt.message.MessageTopic; +import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; +import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse; +import com.evotech.hd.cloud.mqtt.message.processor.MqttMessageRequestExchangeProcessor; +import com.evotech.hd.cloud.service.BatteryStationCdStrategyService; +import com.evotech.hd.common.core.entity.cloud.BatteryStationCdStrategy; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.List; + +/** + * Mqtt查询充电策略 + * @ClassName:StrategyMqttMessageRequestExchangeProcessorImpl + * @date: 2025年04月08日 11:36 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Slf4j +@Service +public class StrategyMqttMessageRequestExchangeProcessorImpl implements MqttMessageRequestExchangeProcessor { + @Resource + BatteryStationCdStrategyService batteryStationCdStrategyService; + + @Override + public boolean accept(String functionName) { + return RequestFunctionTypesEnum.FUN_STRATEGY_INFO.getReFunction().equals(functionName); + } + + @Override + public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) { + log.info("StrategyMqttMessageRequestExchangeProcessorImpl-->>>>> 请求参数{}", JSONUtil.toJsonStr(dataBody)); + MqttResponse response = null; + String stationCode = dataBody.getStr("stationCode"); + if(StringUtils.isEmpty(stationCode)){ + log.error("StrategyMqttMessageRequestExchangeProcessorImpl-->>>>> stationCode is null"); + response = new MqttResponse<>().paramsError("stationCode is null"); + }else{ + List list = batteryStationCdStrategyService.chargeStationFindList(stationCode); + log.info("StrategyMqttMessageRequestExchangeProcessorImpl-->>>>> 查询到的策略信息{}", JSONUtil.toJsonStr(list)); + response = new MqttResponse>().success(list); + } + sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_STRATEGY_INFO, response); + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationCdStrategyService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationCdStrategyService.java index 7ac5403..7e9a5db 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationCdStrategyService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/BatteryStationCdStrategyService.java @@ -24,4 +24,6 @@ public interface BatteryStationCdStrategyService { public Result> listDetail(Integer strategyId); + public List chargeStationFindList(String stationCode); + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationCdStrategyServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationCdStrategyServiceImpl.java index e408b87..e1a2487 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationCdStrategyServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationCdStrategyServiceImpl.java @@ -1,8 +1,10 @@ package com.evotech.hd.cloud.service.impl; +import java.util.ArrayList; import java.util.Date; import java.util.List; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -106,4 +108,17 @@ public class BatteryStationCdStrategyServiceImpl implements BatteryStationCdStra return new Result>().success(list); } + @Override + public List chargeStationFindList(String stationCode) { + List list = strategyDao.listCdStrategy(stationCode, 1); + if (list.isEmpty()) { + return new ArrayList<>(); + } + list.stream().forEach(data ->{ + data.setDetailList(strategyDetailDao.selectList(new LambdaQueryWrapper() + .eq(BatteryStationCdStrategyDetail::getStrategyId, data.getPkId()))); + }); + return list; + } + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/SpringUtil.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/SpringUtil.java new file mode 100644 index 0000000..1deb3f3 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/SpringUtil.java @@ -0,0 +1,51 @@ +package com.evotech.hd.cloud.utils; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +/** + * @desc: + * @ClassName:SpringUtil + * @date: 2025年04月08日 12:33 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Slf4j +@Component +public class SpringUtil implements ApplicationContextAware { + + private static ApplicationContext applicationContext = null; + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + setGlobalApplicationContext(applicationContext); + } + + private synchronized static void setGlobalApplicationContext(ApplicationContext applicationContext) { + if(SpringUtil.applicationContext == null){ + SpringUtil.applicationContext = applicationContext; + } + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + public static Object getBean(String name) { + return getApplicationContext().getBean(name); + } + + public static T getBean(Class clazz) { + T b = null; + try { + b=getApplicationContext().getBean(clazz); + } catch (BeansException e) { + log.info(e.getMessage()); + } + return b; + } + +} diff --git a/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AddTestData.java b/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AddTestData.java index 6463f91..4c017f0 100644 --- a/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AddTestData.java +++ b/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AddTestData.java @@ -6,6 +6,11 @@ import java.util.Date; import java.util.LinkedList; import java.util.List; import java.util.stream.Collectors; + +import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; +import com.evotech.hd.cloud.mqtt.message.MessageTopic; +import com.evotech.hd.cloud.mqtt.message.handle.RequestMessageService; +import com.evotech.hd.cloud.service.BatteryStationCdStrategyService; import org.eclipse.paho.client.mqttv3.MqttClient; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @@ -70,7 +75,7 @@ import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import jakarta.annotation.Resource; -@SpringBootTest +@SpringBootTest(classes = CloudManageServerApplication.class) public class AddTestData { @Resource @@ -121,7 +126,17 @@ public class AddTestData { private MqttClient testClient; - + + + @Resource + private BatteryStationCdStrategyService batteryStationCdStrategyService; + + @Test + void strategyFind(){ + System.out.println(batteryStationCdStrategyService.chargeStationFindList("123456")); + } + + // @Test