diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/thirdparty/ThirdPartyMQController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/thirdparty/ThirdPartyMQController.java new file mode 100644 index 000000000..b5ecaae4a --- /dev/null +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/thirdparty/ThirdPartyMQController.java @@ -0,0 +1,161 @@ +package com.jsowell.web.controller.thirdparty; + +import com.alibaba.fastjson2.JSON; +import com.jsowell.common.core.controller.BaseController; +import com.jsowell.common.core.domain.AjaxResult; +import com.jsowell.common.constant.mq.ThirdPartyRabbitConstants; +import com.jsowell.common.dto.JCTRealTimeMonitorData; +import com.jsowell.common.vo.thirdParty.JCTOrderBasicInfo; +import com.jsowell.pile.domain.OrderBasicInfo; +import com.jsowell.pile.service.OrderBasicInfoService; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * 第三方平台MQ消息发送Controller + * 用于发送MQ消息让thirdparty执行业务 + * + * @author jsowell + * @date 2024 + */ +@RestController +@RequestMapping("/thirdparty/mq") +public class ThirdPartyMQController extends BaseController { + + @Autowired + private RabbitTemplate rabbitTemplate; + + @Autowired + private OrderBasicInfoService orderBasicInfoService; + + // TODO 需优化 + /** + * 发送实时监测数据MQ消息 + * + * @param data 实时监测数据 + * @return 操作结果 + */ + @PostMapping("/sendRealtimeData") + public AjaxResult sendRealtimeData(@RequestBody JCTRealTimeMonitorData data) { + try { + if (data == null) { + return AjaxResult.error("实时监测数据不能为空"); + } + logger.info("发送实时监测数据MQ消息: {}", JSON.toJSONString(data)); + rabbitTemplate.convertAndSend( + ThirdPartyRabbitConstants.WCC_THIRDPARTY_NAME, + ThirdPartyRabbitConstants.ROUTING_KEY_REALTIME_DATA_PUSH, + data + ); + return AjaxResult.success("实时监测数据MQ消息发送成功"); + } catch (Exception e) { + logger.error("发送实时监测数据MQ消息失败", e); + return AjaxResult.error("发送实时监测数据MQ消息失败: " + e.getMessage()); + } + } + + /** + * 发送告警数据MQ消息 + * + * @param data 告警数据(实时监测数据格式) + * @return 操作结果 + */ + @PostMapping("/sendAlarmData") + public AjaxResult sendAlarmData(@RequestBody JCTRealTimeMonitorData data) { + try { + if (data == null) { + return AjaxResult.error("告警数据不能为空"); + } + logger.info("发送告警数据MQ消息: {}", JSON.toJSONString(data)); + // 注意:告警消息发送的是realTimeMonitorData.getPutGunType(),这里发送整个对象 + // 如果需要只发送putGunType,可以单独处理 + rabbitTemplate.convertAndSend( + ThirdPartyRabbitConstants.WCC_THIRDPARTY_NAME, + ThirdPartyRabbitConstants.ROUTING_KEY_ALARM_PUSH, + data + ); + return AjaxResult.success("告警数据MQ消息发送成功"); + } catch (Exception e) { + logger.error("发送告警数据MQ消息失败", e); + return AjaxResult.error("发送告警数据MQ消息失败: " + e.getMessage()); + } + } + + /** + * 发送启动充电结果MQ消息 + * + * @param orderBasicInfo 订单基本信息 + * @return 操作结果 + */ + @PostMapping("/sendChargeResult") + public AjaxResult sendChargeResult(@RequestBody JCTOrderBasicInfo orderBasicInfo) { + try { + if (orderBasicInfo == null) { + return AjaxResult.error("订单基本信息不能为空"); + } + logger.info("发送启动充电结果MQ消息: {}", JSON.toJSONString(orderBasicInfo)); + rabbitTemplate.convertAndSend( + ThirdPartyRabbitConstants.WCC_THIRDPARTY_NAME, + ThirdPartyRabbitConstants.ROUTING_KEY_CHARGE_RESULT_PUSH, + orderBasicInfo + ); + return AjaxResult.success("启动充电结果MQ消息发送成功"); + } catch (Exception e) { + logger.error("发送启动充电结果MQ消息失败", e); + return AjaxResult.error("发送启动充电结果MQ消息失败: " + e.getMessage()); + } + } + + /** + * 发送启动充电失败MQ消息 + * + * @param orderBasicInfo 订单基本信息 + * @return 操作结果 + */ + @PostMapping("/sendStartupChargingFailed") + public AjaxResult sendStartupChargingFailed(@RequestBody JCTOrderBasicInfo orderBasicInfo) { + try { + if (orderBasicInfo == null) { + return AjaxResult.error("订单基本信息不能为空"); + } + logger.info("发送启动充电失败MQ消息: {}", JSON.toJSONString(orderBasicInfo)); + rabbitTemplate.convertAndSend( + ThirdPartyRabbitConstants.WCC_THIRDPARTY_NAME, + ThirdPartyRabbitConstants.ROUTING_KEY_STARTUP_CHARGING_FAILED_PUSH, + orderBasicInfo + ); + return AjaxResult.success("启动充电失败MQ消息发送成功"); + } catch (Exception e) { + logger.error("发送启动充电失败MQ消息失败", e); + return AjaxResult.error("发送启动充电失败MQ消息失败: " + e.getMessage()); + } + } + + /** + * 发送充电订单MQ消息 + * + * + * @return 操作结果 + */ + @PostMapping("/sendChargeOrder/{orderCode}}") + public AjaxResult sendChargeOrder(@PathVariable("orderCode") String orderCode) { + try { + OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByOrderCode(orderCode); + if (orderBasicInfo == null) { + return AjaxResult.error("订单基本信息不能为空"); + } + logger.info("发送充电订单MQ消息: {}", JSON.toJSONString(orderBasicInfo)); + rabbitTemplate.convertAndSend( + ThirdPartyRabbitConstants.WCC_THIRDPARTY_NAME, + ThirdPartyRabbitConstants.ROUTING_KEY_CHARGE_ORDER_PUSH, + orderBasicInfo + ); + return AjaxResult.success("充电订单MQ消息发送成功"); + } catch (Exception e) { + logger.error("发送充电订单MQ消息失败", e); + return AjaxResult.error("发送充电订单MQ消息失败: " + e.getMessage()); + } + } +} +