package com.ruoyi.integration.iotda.utils.listener;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.ruoyi.chargingPile.api.dto.CheckChargingStrategyDTO;
|
import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient;
|
import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail;
|
import com.ruoyi.common.core.web.domain.AjaxResult;
|
import com.ruoyi.integration.api.model.*;
|
import com.ruoyi.integration.iotda.constant.SendTagConstant;
|
import com.ruoyi.integration.iotda.enums.ServiceIdMenu;
|
import com.ruoyi.integration.iotda.utils.produce.IotMessageProduce;
|
import com.ruoyi.integration.iotda.utils.tools.CP56Time2aConverter;
|
import com.ruoyi.integration.iotda.utils.tools.MessageUtil;
|
import com.ruoyi.integration.iotda.utils.tools.StrategyUtil;
|
import com.ruoyi.integration.rocket.model.*;
|
import com.ruoyi.integration.rocket.produce.EnhanceProduce;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.rocketmq.client.producer.SendResult;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import java.io.IOException;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* iotda消息监听
|
*/
|
@Slf4j
|
@RestController
|
public class IotMessageListener {
|
|
@Autowired
|
private EnhanceProduce enhanceProduce;
|
@Autowired
|
private MessageUtil messageUtil;
|
@Autowired
|
private IotMessageProduce iotMessageProduce;
|
@Autowired
|
private AccountingStrategyDetailClient accountingStrategyDetailClient;
|
/**
|
* 设备消息监听
|
* @param jsonObject
|
* @return
|
* @throws IOException
|
*/
|
@PostMapping(value = "/message")
|
public AjaxResult<String> message(@RequestBody JSONObject jsonObject) throws IOException {
|
log.info("接收到消息中转:{}",jsonObject);
|
JSONObject content = jsonObject.getJSONObject("notify_data").getJSONObject("body").getJSONObject("content");
|
JSONObject header = jsonObject.getJSONObject("notify_data").getJSONObject("header");
|
String deviceId = header.getString("device_id"); // 设备id
|
String nodeId = header.getString("node_id"); // 设备编号
|
String productId = header.getString("product_id"); // 产品id
|
String service_id = content.getString("service_id");
|
log.info("服务id:{}",service_id);
|
SendResult sendResult;
|
// 设备消息下发
|
String result;
|
switch (service_id){
|
case SendTagConstant.ONLINE:
|
OnlineMessage onlineMessage = JSON.parseObject(jsonObject.toJSONString(),OnlineMessage.class);
|
sendResult = enhanceProduce.onlineMessage(onlineMessage);
|
// 响应硬件
|
// 业务处理 登录认证应答
|
OnlineReply onlineReply = new OnlineReply();
|
onlineReply.setCharging_pile_code(onlineMessage.getCharging_pile_code());
|
onlineReply.setOnline_result(0);
|
result = iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.ONLINE_REPLY.getKey(), messageUtil.onlineReply(onlineReply));
|
log.info("充电桩登录认证-返回结果:{}",result);
|
break;
|
case SendTagConstant.PING:
|
PingMessage pingMessage = JSON.parseObject(jsonObject.toJSONString(),PingMessage.class);
|
sendResult = enhanceProduce.pingMessage(pingMessage);
|
// 响应硬件
|
Pong pong = new Pong();
|
pong.setCharging_pile_code(pingMessage.getCharging_pile_code());
|
pong.setCharging_gun_code(pingMessage.getCharging_gun_code());
|
pong.setCharging_gun_status(0);
|
result = iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.PONG.getKey(), messageUtil.pong(pong));
|
log.info("充电桩心跳包-返回结果:{}",result);
|
break;
|
case SendTagConstant.END_CHARGE:
|
EndChargeMessage endChargeMessage = JSON.parseObject(jsonObject.toJSONString(),EndChargeMessage.class);
|
sendResult = enhanceProduce.endChargeMessage(endChargeMessage);
|
// 响应硬件
|
break;
|
case SendTagConstant.BILLING_MODE_VERIFY:
|
BillingModeVerifyMessage billingModeVerifyMessage = JSON.parseObject(jsonObject.toJSONString(),BillingModeVerifyMessage.class);
|
sendResult = enhanceProduce.billingModeVerifyMessage(billingModeVerifyMessage);
|
// 响应硬件
|
BillingModeVerifyReply billingModeVerifyReply = new BillingModeVerifyReply();
|
if(billingModeVerifyMessage.getBilling_model_code().equals("0")){
|
// 首次
|
billingModeVerifyReply.setCharging_pile_code(billingModeVerifyMessage.getCharging_pile_code());
|
billingModeVerifyReply.setBilling_model_code("0");
|
billingModeVerifyReply.setBilling_model_result(1);
|
}else {
|
// 查询桩使用的模版
|
CheckChargingStrategyDTO dto = new CheckChargingStrategyDTO();
|
dto.setCode(billingModeVerifyMessage.getBilling_model_code());
|
dto.setStrategyDetailId(Integer.valueOf(billingModeVerifyMessage.getBilling_model_code()));
|
Boolean check = accountingStrategyDetailClient.checkChargingStrategy(dto).getData();
|
// 校验计费模版是否准确
|
billingModeVerifyReply.setCharging_pile_code(billingModeVerifyMessage.getCharging_pile_code());
|
billingModeVerifyReply.setBilling_model_code(billingModeVerifyMessage.getBilling_model_code());
|
if(check){
|
billingModeVerifyReply.setBilling_model_result(0);
|
}else {
|
billingModeVerifyReply.setBilling_model_result(1);
|
}
|
}
|
iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.BILLING_MODE_VERIFY_REPLY.getKey(),messageUtil.billingModeVerifyReply(billingModeVerifyReply));
|
break;
|
case SendTagConstant.ACQUISITION_BILLING_MODE:
|
AcquisitionBillingModeMessage acquisitionBillingModeMessage = JSON.parseObject(jsonObject.toJSONString(),AcquisitionBillingModeMessage.class);
|
sendResult = enhanceProduce.acquisitionBillingModeMessage(acquisitionBillingModeMessage);
|
// 响应硬件 计费模型请求应答 1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段
|
List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode(acquisitionBillingModeMessage.getCharging_pile_code()).getData();
|
Map<Integer, TAccountingStrategyDetail> strategyPrice = StrategyUtil.getStrategyPrice(accountingStrategyDetails);
|
// 价格设置
|
AcquisitionBillingModeReply acquisitionBillingModeReply = new AcquisitionBillingModeReply();
|
StrategyUtil.setStrategyPrice(strategyPrice,acquisitionBillingModeReply);
|
// 时段设置
|
StrategyUtil.setTime(accountingStrategyDetails,acquisitionBillingModeReply);
|
iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.ACQUISITION_BILLING_MODE_REPLY.getKey(),messageUtil.acquisitionBillingModeReply(acquisitionBillingModeReply));
|
break;
|
case SendTagConstant.UPLOAD_REAL_TIME_MONITORING_DATA:
|
UploadRealTimeMonitoringDataMessage uploadRealTimeMonitoringDataMessage = JSON.parseObject(jsonObject.toJSONString(),UploadRealTimeMonitoringDataMessage.class);
|
sendResult = enhanceProduce.uploadRealTimeMonitoringDataMessage(uploadRealTimeMonitoringDataMessage);
|
// 响应硬件
|
break;
|
case SendTagConstant.CHARGING_HANDSHAKE:
|
ChargingHandshakeMessage chargingHandshakeMessage = JSON.parseObject(jsonObject.toJSONString(),ChargingHandshakeMessage.class);
|
sendResult = enhanceProduce.chargingHandshakeMessage(chargingHandshakeMessage);
|
// 响应硬件
|
break;
|
case SendTagConstant.PARAMETER_SETTING:
|
ParameterSettingMessage parameterSettingMessage = JSON.parseObject(jsonObject.toJSONString(),ParameterSettingMessage.class);
|
sendResult = enhanceProduce.parameterSettingMessage(parameterSettingMessage);
|
break;
|
case SendTagConstant.BMS_ABORT:
|
BmsAbortMessage bmsAbortMessage = JSON.parseObject(jsonObject.toJSONString(),BmsAbortMessage.class);
|
sendResult = enhanceProduce.bmsAbortMessage(bmsAbortMessage);
|
// 响应硬件
|
break;
|
case SendTagConstant.MOTOR_ABORT:
|
MotorAbortMessage motorAbortMessage = JSON.parseObject(jsonObject.toJSONString(),MotorAbortMessage.class);
|
sendResult = enhanceProduce.motorAbortMessage(motorAbortMessage);
|
break;
|
case SendTagConstant.BMS_DEMAND_AND_CHARGER_EXPORTATION:
|
BmsDemandAndChargerExportationMessage bmsDemandAndChargerExportationMessage = JSON.parseObject(jsonObject.toJSONString(),BmsDemandAndChargerExportationMessage.class);
|
sendResult = enhanceProduce.bmsDemandAndChargerExportationMessage(bmsDemandAndChargerExportationMessage);
|
// 响应硬件
|
break;
|
case SendTagConstant.BMS_INFORMATION:
|
BmsInformationMessage bmsInformationMessage = JSON.parseObject(jsonObject.toJSONString(),BmsInformationMessage.class);
|
sendResult = enhanceProduce.bmsInformationMessage(bmsInformationMessage);
|
// 响应硬件
|
break;
|
case SendTagConstant.CHARGING_PILE_STARTS_CHARGING:
|
ChargingPileStartsChargingMessage chargingPileStartsChargingMessage = JSON.parseObject(jsonObject.toJSONString(),ChargingPileStartsChargingMessage.class);
|
sendResult = enhanceProduce.chargingPileStartsChargingMessage(chargingPileStartsChargingMessage);
|
// 响应硬件
|
break;
|
case SendTagConstant.PLATFORM_START_CHARGING_REPLY:
|
PlatformStartChargingReplyMessage platformStartChargingReplyMessage = JSON.parseObject(jsonObject.toJSONString(),PlatformStartChargingReplyMessage.class);
|
sendResult = enhanceProduce.platformStartChargingReplyMessage(platformStartChargingReplyMessage);
|
// 响应硬件
|
break;
|
case SendTagConstant.PLATFORM_STOP_CHARGING_REPLY:
|
PlatformStopChargingReplyMessage platformStopChargingReplyMessage = JSON.parseObject(jsonObject.toJSONString(),PlatformStopChargingReplyMessage.class);
|
sendResult = enhanceProduce.platformStopChargingReplyMessage(platformStopChargingReplyMessage);
|
// 响应硬件
|
break;
|
case SendTagConstant.TRANSACTION_RECORD:
|
TransactionRecordMessage transactionRecordMessage = JSON.parseObject(jsonObject.toJSONString(),TransactionRecordMessage.class);
|
sendResult = enhanceProduce.transactionRecordMessage(transactionRecordMessage);
|
// 响应硬件
|
ConfirmTransactionRecord confirmTransactionRecord = new ConfirmTransactionRecord();
|
confirmTransactionRecord.setTransaction_serial_number(transactionRecordMessage.getTransaction_serial_number());
|
confirmTransactionRecord.setConfirm_result(0);
|
iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.CONFIRM_TRANSACTION_RECORD.getKey(),messageUtil.confirmTransactionRecord(confirmTransactionRecord));
|
break;
|
case SendTagConstant.UPDATE_BALANCE_REPLY:
|
UpdateBalanceReplyMessage updateBalanceReplyMessage = JSON.parseObject(jsonObject.toJSONString(),UpdateBalanceReplyMessage.class);
|
sendResult = enhanceProduce.updateBalanceReplyMessage(updateBalanceReplyMessage);
|
// 响应硬件
|
break;
|
case SendTagConstant.SYNCHRONIZE_OFFLINE_CARD_REPLY:
|
SynchronizeOfflineCardReplyMessage synchronizeOfflineCardReplyMessage = JSON.parseObject(jsonObject.toJSONString(),SynchronizeOfflineCardReplyMessage.class);
|
sendResult = enhanceProduce.synchronizeOfflineCardReplyMessage(synchronizeOfflineCardReplyMessage);
|
// 响应硬件
|
break;
|
case SendTagConstant.CLEAR_OFFLINE_CARD_REPLY:
|
ClearOfflineCardReplyMessage clearOfflineCardReplyMessage = JSON.parseObject(jsonObject.toJSONString(),ClearOfflineCardReplyMessage.class);
|
sendResult = enhanceProduce.clearOfflineCardReplyMessage(clearOfflineCardReplyMessage);
|
// 响应硬件
|
break;
|
case SendTagConstant.WORKING_PARAMETER_SETTING_REPLY:
|
WorkingParameterSettingReplyMessage workingParameterSettingReplyMessage = JSON.parseObject(jsonObject.toJSONString(),WorkingParameterSettingReplyMessage.class);
|
sendResult = enhanceProduce.workingParameterSettingReplyMessage(workingParameterSettingReplyMessage);
|
// 响应硬件
|
break;
|
case SendTagConstant.TIMING_SETTING:
|
TimingSettingMessage timingSettingMessage = JSON.parseObject(jsonObject.toJSONString(),TimingSettingMessage.class);
|
sendResult = enhanceProduce.timingSettingMessage(timingSettingMessage);
|
// 响应硬件 对时设置应答
|
TimingSettingReply timingSettingReply = new TimingSettingReply();
|
timingSettingReply.setCharging_pile_code(timingSettingMessage.getCharging_pile_code());
|
timingSettingReply.setCurrent_time(CP56Time2aConverter.convertToCP56Time2a(new Date()));
|
iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.TIMING_SETTING_REPLY.getKey(),messageUtil.timingSettingReply(timingSettingReply));
|
break;
|
case SendTagConstant.SETUP_BILLING_MODEL_REPLY:
|
SetupBillingModelReplyMessage setupBillingModelReplyMessage = JSON.parseObject(jsonObject.toJSONString(),SetupBillingModelReplyMessage.class);
|
sendResult = enhanceProduce.setupBillingModelReplyMessage(setupBillingModelReplyMessage);
|
// 响应硬件
|
break;
|
case SendTagConstant.GROUND_LOCK_REAL_TIME_DATA:
|
GroundLockRealTimeDataMessage groundLockRealTimeDataMessage = JSON.parseObject(jsonObject.toJSONString(),GroundLockRealTimeDataMessage.class);
|
sendResult = enhanceProduce.groundLockRealTimeDataMessage(groundLockRealTimeDataMessage);
|
// 响应硬件
|
break;
|
case SendTagConstant.CHARGING_PILE_RETURNS_GROUND_LOCK_DATA:
|
ChargingPileReturnsGroundLockDataMessage chargingPileReturnsGroundLockDataMessage = JSON.parseObject(jsonObject.toJSONString(),ChargingPileReturnsGroundLockDataMessage.class);
|
sendResult = enhanceProduce.chargingPileReturnsGroundLockDataMessage(chargingPileReturnsGroundLockDataMessage);
|
// 响应硬件
|
break;
|
case SendTagConstant.PLATFORM_RESTART_REPLY:
|
PlatformRestartReplyMessage platformRestartReplyMessage = JSON.parseObject(jsonObject.toJSONString(),PlatformRestartReplyMessage.class);
|
sendResult = enhanceProduce.platformRestartReplyMessage(platformRestartReplyMessage);
|
// 响应硬件
|
break;
|
default:
|
PlatformRemoteUpdateReplyMessage platformRemoteUpdateReplyMessage = JSON.parseObject(jsonObject.toJSONString(),PlatformRemoteUpdateReplyMessage.class);
|
sendResult = enhanceProduce.platformRemoteUpdateReplyMessage(platformRemoteUpdateReplyMessage);
|
// 响应硬件
|
break;
|
}
|
log.info("rocketmq消息下发结果:{}",sendResult);
|
return AjaxResult.success();
|
}
|
|
}
|