From 09cf27cc000267a7d23e3cf5d78ef690e603bdf3 Mon Sep 17 00:00:00 2001 From: puzhibing <393733352@qq.com> Date: 星期五, 20 九月 2024 10:49:58 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java | 4 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java | 2 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/UploadRealTimeMonitoringDataMessage.java | 4 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/ErrorMessageMessageListener.java | 80 +++++++++++++ ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java | 4 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java | 10 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/ErrorMessageMessageService.java | 8 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ErrorMessageMessage.java | 35 +++++ ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java | 2 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java | 11 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsDemandAndChargerExportationMessage.java | 3 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java | 11 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ParameterSettingMessage.java | 2 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java | 16 +- ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java | 9 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/ErrorMessageMessageServiceImpl.java | 35 +++++ ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java | 10 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java | 4 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java | 82 +++++++++++++ ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java | 9 + 20 files changed, 313 insertions(+), 28 deletions(-) diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java index 94a055e..e12602d 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java @@ -6,6 +6,7 @@ import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; @@ -26,14 +27,14 @@ * @param siteId * @return */ - @PostMapping("/t-accounting-strategy-detail/getDetailBySiteId") + @GetMapping("/t-accounting-strategy-detail/getDetailBySiteId") R<TAccountingStrategyDetail> getDetailBySiteId(@RequestParam("siteId") Integer siteId); /** * 通过桩编号查询当前时段使用的策略明细 * @param code * @return */ - @PostMapping("/t-accounting-strategy-detail/getDetailByCode") + @GetMapping("/t-accounting-strategy-detail/getDetailByCode") R<TAccountingStrategyDetail> getDetailByCode(@RequestParam("code") String code); /** * 校验充电桩计费模版是否准确 @@ -49,13 +50,13 @@ * @param id * @return */ - @PostMapping("/t-accounting-strategy-detail/getListByAccountingStrategyId") + @GetMapping("/t-accounting-strategy-detail/getListByAccountingStrategyId") R<List<TAccountingStrategyDetail>> getListByAccountingStrategyId(@RequestParam("id") Integer id); /** * 通过桩编号查询当前使用的策略明细列表 * @param code * @return */ - @PostMapping("/t-accounting-strategy-detail/getDetailListByCode") + @GetMapping("/t-accounting-strategy-detail/getDetailListByCode") R<List<TAccountingStrategyDetail>> getDetailListByCode(@RequestParam("code") String code); } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java index ea4fc09..7f2650b 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java @@ -71,7 +71,7 @@ @Override public R vipCallBack(String code, String outTradeNo) { - return null; + return R.fail("会员订单回调失败:" + cause.getMessage()); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java index 35c031e..b87e9de 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java @@ -91,7 +91,7 @@ * @param siteId * @return */ - @PostMapping("/getDetailBySiteId") + @GetMapping("/getDetailBySiteId") public R<TAccountingStrategyDetail> getDetailBySiteId(@RequestParam("siteId") Integer siteId){ Site site = siteService.getById(siteId); TAccountingStrategy accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId()); @@ -105,8 +105,8 @@ * @param code 设备编号 * @return */ - @PostMapping("/getDetailByCode") - public R<TAccountingStrategyDetail> getDetailByPileId(@RequestParam("code") String code){ + @GetMapping("/getDetailByCode") + public R<TAccountingStrategyDetail> getDetailByCode(@RequestParam("code") String code){ // 查询桩 TChargingPile chargingPile = chargingPileService.getOne(Wrappers.lambdaQuery(TChargingPile.class) .eq(TChargingPile::getCode,code) @@ -149,7 +149,7 @@ * @param id * @return */ - @PostMapping("/getListByAccountingStrategyId") + @GetMapping("/getListByAccountingStrategyId") public R<List<TAccountingStrategyDetail>> getListByAccountingStrategyId(@RequestParam("id") Integer id){ List<TAccountingStrategyDetail> list = accountingStrategyDetailService.list(new LambdaQueryWrapper<TAccountingStrategyDetail>().eq(TAccountingStrategyDetail::getAccountingStrategyId, id)); return R.ok(list); @@ -160,7 +160,7 @@ * @param code * @return */ - @PostMapping("/t-accounting-strategy-detail/getDetailListByCode") + @GetMapping("/getDetailListByCode") public R<List<TAccountingStrategyDetail>> getDetailListByCode(@RequestParam("code") String code){ // 查询桩 TChargingPile chargingPile = chargingPileService.getOne(Wrappers.lambdaQuery(TChargingPile.class) diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java index 3c83fca..3062d45 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java @@ -19,6 +19,10 @@ */ public static final String END_CHARGE = "end_charge"; /** + * 错误报文 + */ + public static final String ERROR_MESSAGE = "error_message"; + /** * 计费模型验证请求 */ public static final String BILLING_MODE_VERIFY ="billing_mode_verify"; diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java index 9a27b45..53b62e4 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java @@ -172,6 +172,16 @@ } /** + * 对时设置 + * @param timingSetting 实体对象 + * @return + */ + @PostMapping("/timingSetting") + public String timingSetting(@RequestBody TimingSetting timingSetting){ + return iotMessageProduce.sendMessage(timingSetting.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING.getKey(),messageUtil.timingSetting(timingSetting)); + } + + /** * 对时设置应答 * @param timingSettingReply 实体对象 * @return diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java index 12ea9d4..5146187 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java @@ -67,6 +67,10 @@ */ WORKING_PARAMETER_SETTING ("充电桩工作参数设置","working_parameter_setting"), /** + * 对时设置 + */ + TIMING_SETTING ("对时设置","timing_setting"), + /** * 对时设置应答 */ TIMING_SETTING_REPLY ("对时设置应答","timing_setting_reply"), diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java index 491377c..77aeab2 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java @@ -114,7 +114,7 @@ * 创建设备 * @param productId 产品ID * @param nodeId 设备标识码 通常使用IMEI、MAC地址或Serial No作为node_id - * @param deviceId 设备ID 使用CodeGenerateUtils.generateVolumeSn() + * @param deviceId 设备ID 使用设备标识码 * @param deviceName 设备名称 * @param description 设备描述 * @return AddDeviceResponse diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java index cb36d98..c29b1a2 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java @@ -5,6 +5,7 @@ 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.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.integration.api.model.*; import com.ruoyi.integration.iotda.constant.SendTagConstant; @@ -17,15 +18,18 @@ import com.ruoyi.integration.rocket.produce.EnhanceProduce; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.client.producer.SendResult; +import org.springframework.beans.BeanUtils; 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.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Objects; /** * iotda消息监听 @@ -89,6 +93,11 @@ sendResult = enhanceProduce.endChargeMessage(endChargeMessage); // 响应硬件 break; + case SendTagConstant.ERROR_MESSAGE: + ErrorMessageMessage errorMessageMessage = JSON.parseObject(content.toJSONString(),ErrorMessageMessage.class); + sendResult = enhanceProduce.errorMessageMessage(errorMessageMessage); + // 响应硬件 + break; case SendTagConstant.BILLING_MODE_VERIFY: BillingModeVerifyMessage billingModeVerifyMessage = JSON.parseObject(content.toJSONString(),BillingModeVerifyMessage.class); sendResult = enhanceProduce.billingModeVerifyMessage(billingModeVerifyMessage); @@ -102,7 +111,7 @@ }else { // 查询桩使用的模版 CheckChargingStrategyDTO dto = new CheckChargingStrategyDTO(); - dto.setCode(billingModeVerifyMessage.getBilling_model_code()); + dto.setCode(billingModeVerifyMessage.getCharging_pile_code()); dto.setStrategyDetailId(Integer.valueOf(billingModeVerifyMessage.getBilling_model_code())); Boolean check = accountingStrategyDetailClient.checkChargingStrategy(dto).getData(); // 校验计费模版是否准确 @@ -127,6 +136,10 @@ StrategyUtil.setStrategyPrice(strategyPrice,acquisitionBillingModeReply); // 时段设置 StrategyUtil.setTime(accountingStrategyDetails,acquisitionBillingModeReply); + TAccountingStrategyDetail accountingStrategyDetail = accountingStrategyDetailClient.getDetailByCode(acquisitionBillingModeMessage.getCharging_pile_code()).getData(); + acquisitionBillingModeReply.setBilling_model_code(accountingStrategyDetail.getId().toString()); + acquisitionBillingModeReply.setCharging_pile_code(acquisitionBillingModeMessage.getCharging_pile_code()); + acquisitionBillingModeReply.setLoss_ratio(BigDecimal.ZERO); iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.ACQUISITION_BILLING_MODE_REPLY.getKey(),messageUtil.acquisitionBillingModeReply(acquisitionBillingModeReply)); break; case SendTagConstant.UPLOAD_REAL_TIME_MONITORING_DATA: @@ -166,6 +179,14 @@ ChargingPileStartsChargingMessage chargingPileStartsChargingMessage = JSON.parseObject(content.toJSONString(),ChargingPileStartsChargingMessage.class); sendResult = enhanceProduce.chargingPileStartsChargingMessage(chargingPileStartsChargingMessage); // 响应硬件 + PlatformConfirmationCharging platformConfirmationCharging = new PlatformConfirmationCharging(); + platformConfirmationCharging.setCharging_pile_code(chargingPileStartsChargingMessage.getCharging_pile_code()); + platformConfirmationCharging.setCharging_gun_code(chargingPileStartsChargingMessage.getCharging_gun_code()); + platformConfirmationCharging.setCard_number(chargingPileStartsChargingMessage.getAccount()); + platformConfirmationCharging.setAccount_balance(BigDecimal.ZERO); + platformConfirmationCharging.setAuthentication(1); + // TODO 若是失败,给出失败原因 + iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.PLATFORM_CONFIRMATION_CHARGING.getKey(),messageUtil.platformConfirmationCharging(platformConfirmationCharging)); break; case SendTagConstant.PLATFORM_START_CHARGING_REPLY: PlatformStartChargingReplyMessage platformStartChargingReplyMessage = JSON.parseObject(content.toJSONString(),PlatformStartChargingReplyMessage.class); @@ -245,4 +266,63 @@ return AjaxResult.success(); } + @PostMapping(value = "/message/sendMessage") + public R sendMessage() { + // 运营平台远程控制启机 +// PlatformStartCharging platformStartCharging = new PlatformStartCharging(); +// platformStartCharging.setTransaction_serial_number("4200002375202409185150427245"); +// platformStartCharging.setCharging_pile_code("3401231001200202"); +// platformStartCharging.setCharging_gun_code("1"); +// platformStartCharging.setCard_number("1833063878153543681"); +// platformStartCharging.setAccount_balance(new BigDecimal(50)); +// String message = iotMessageProduce.sendMessage(platformStartCharging.getCharging_pile_code(), ServiceIdMenu.PLATFORM_START_CHARGING.getKey(), messageUtil.platformStartCharging(platformStartCharging)); + // 运营平台远程停机 +// PlatformStopCharging platformStopCharging = new PlatformStopCharging(); +// platformStopCharging.setCharging_pile_code("3401231001200202"); +// platformStopCharging.setCharging_gun_code("1"); +// String message = iotMessageProduce.sendMessage(platformStopCharging.getCharging_pile_code(), ServiceIdMenu.PLATFORM_STOP_CHARGING.getKey(),messageUtil.platformStopCharging(platformStopCharging)); + // 修改余额 +// UpdateBalance updateBalance = new UpdateBalance(); +// updateBalance.setCharging_pile_code("3401231001200202"); +// updateBalance.setCharging_gun_code("1"); +// updateBalance.setPhysical_card_number("1833063878153543681"); +// updateBalance.setAccount_balance(new BigDecimal(20)); +// String message = iotMessageProduce.sendMessage(updateBalance.getCharging_pile_code(), ServiceIdMenu.UPDATE_BALANCE.getKey(),messageUtil.updateBalance(updateBalance)); + // 充电桩工作参数设置 +// WorkingParameterSetting workingParameterSetting = new WorkingParameterSetting(); +// workingParameterSetting.setCharging_pile_code("3401231001200202"); +// workingParameterSetting.setAllow_work(0); +// workingParameterSetting.setMaximum_output_power(220); +// String message = iotMessageProduce.sendMessage(workingParameterSetting.getCharging_pile_code(), ServiceIdMenu.WORKING_PARAMETER_SETTING.getKey(),messageUtil.workingParameterSetting(workingParameterSetting)); + // 对时设置 +// TimingSetting timingSetting = new TimingSetting(); +// timingSetting.setCharging_pile_code("3401231001200202"); +// System.err.println(CP56Time2aConverter.convertToCP56Time2a(new Date())); +// timingSetting.setCurrent_time(CP56Time2aConverter.convertToCP56Time2a(new Date())); +// String message = iotMessageProduce.sendMessage(timingSetting.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING.getKey(),messageUtil.timingSetting(timingSetting)); + // TODO 罗 计费模型设置 +// SetupBillingModel setupBillingModel = new SetupBillingModel(); +// // 计费模型 +// List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode("3401231001200202").getData(); +// Map<Integer, TAccountingStrategyDetail> strategyPrice = StrategyUtil.getStrategyPrice(accountingStrategyDetails); +// // 价格设置 +// AcquisitionBillingModeReply acquisitionBillingModeReply = new AcquisitionBillingModeReply(); +// StrategyUtil.setStrategyPrice(strategyPrice,acquisitionBillingModeReply); +// // 时段设置 +// StrategyUtil.setTime(accountingStrategyDetails,acquisitionBillingModeReply); +// TAccountingStrategyDetail accountingStrategyDetail = accountingStrategyDetailClient.getDetailByCode("3401231001200202").getData(); +// acquisitionBillingModeReply.setBilling_model_code(accountingStrategyDetail.getId().toString()); +// acquisitionBillingModeReply.setCharging_pile_code("3401231001200202"); +// acquisitionBillingModeReply.setLoss_ratio(BigDecimal.ZERO); +// BeanUtils.copyProperties(acquisitionBillingModeReply,setupBillingModel); +// System.err.println(setupBillingModel); +// String message = iotMessageProduce.sendMessage(setupBillingModel.getCharging_pile_code(), ServiceIdMenu.SETUP_BILLING_MODEL.getKey(),messageUtil.setupBillingModel(setupBillingModel)); + // 远程重启 + PlatformRestart platformRestart = new PlatformRestart(); + platformRestart.setCharging_pile_code("3401231001200202"); + platformRestart.setOperate(2); + String message = iotMessageProduce.sendMessage(platformRestart.getCharging_pile_code(), ServiceIdMenu.PLATFORM_RESTART.getKey(),messageUtil.platformRestart(platformRestart)); + return R.ok(message); + } + } \ No newline at end of file diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java index c7c76bd..5fdcac0 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java @@ -44,6 +44,8 @@ @Autowired private WorkingParameterSettingService workingParameterSettingService; @Autowired + private TimingSettingService timingSettingService; + @Autowired private TimingSettingReplyService timingSettingReplyService; @Autowired private SetupBillingModelService setupBillingModelService; @@ -205,6 +207,15 @@ } /** + * 对时设置 + * @param timingSetting 实体对象 + * @return + */ + public String timingSetting(TimingSetting timingSetting){ + timingSettingService.create(timingSetting); + return getMessageJsonString(timingSetting, ServiceIdMenu.TIMING_SETTING.getValue()); + } + /** * 对时设置应答 * @param timingSettingReply 实体对象 * @return diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java index 4ebf980..e935937 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java @@ -67,8 +67,13 @@ } accountingStrategyDetails = accountingStrategyDetails.stream().sorted(Comparator.comparing(TAccountingStrategyDetail::getStartTime)).collect(Collectors.toList()); for (TAccountingStrategyDetail accountingStrategyDetail : accountingStrategyDetails) { - if(DateUtils.string2LocalTime(accountingStrategyDetail.getStartTime()).isBefore(time) - && DateUtils.string2LocalTime(accountingStrategyDetail.getEndTime()).isAfter(time)){ + String startTime = accountingStrategyDetail.getStartTime(); + String endTime = accountingStrategyDetail.getEndTime(); + if("00:00".equals(endTime)){ + endTime = "23:59"; + } + if(DateUtils.string2LocalTime(startTime + ":00").isBefore(time) + && DateUtils.string2LocalTime(endTime + ":00").isAfter(time)){ switch (i){ case 1: acquisitionBillingModeReply.setTime1(accountingStrategyDetail.getType().equals(1)?0 diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/ErrorMessageMessageService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/ErrorMessageMessageService.java new file mode 100644 index 0000000..180eaa3 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/ErrorMessageMessageService.java @@ -0,0 +1,8 @@ +package com.ruoyi.integration.mongodb.service; + +import com.ruoyi.integration.mongodb.base.BaseService; +import com.ruoyi.integration.rocket.model.ErrorMessageMessage; + +public interface ErrorMessageMessageService extends BaseService<ErrorMessageMessage> { + +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/ErrorMessageMessageServiceImpl.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/ErrorMessageMessageServiceImpl.java new file mode 100644 index 0000000..6443f1f --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/ErrorMessageMessageServiceImpl.java @@ -0,0 +1,35 @@ +package com.ruoyi.integration.mongodb.service.impl; + +import com.ruoyi.integration.api.model.EndCharge; +import com.ruoyi.integration.iotda.constant.IotConstant; +import com.ruoyi.integration.mongodb.service.EndChargeService; +import com.ruoyi.integration.mongodb.service.ErrorMessageMessageService; +import com.ruoyi.integration.rocket.model.ErrorMessageMessage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.stereotype.Service; + +import java.util.List; + + +@Service +public class ErrorMessageMessageServiceImpl implements ErrorMessageMessageService { + @Autowired + private MongoTemplate mongoTemplate; + + @Override + public int create(ErrorMessageMessage errorMessageMessage) { + mongoTemplate.save(errorMessageMessage); + return IotConstant.SUCCESS; + } + + @Override + public ErrorMessageMessage findById(String id) { + return mongoTemplate.findById(id, ErrorMessageMessage.class); + } + + @Override + public List<ErrorMessageMessage> findAll() { + return mongoTemplate.findAll(ErrorMessageMessage.class); + } +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java index 6286373..0dc777d 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java @@ -52,14 +52,14 @@ BeanUtils.copyProperties(message,acquisitionBillingMode); acquisitionBillingModeService.create(acquisitionBillingMode); // 业务处理 计费模型请求应答 1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段 - List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode(message.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(acquisitionBillingModeReply.getCharging_pile_code(), ServiceIdMenu.ACQUISITION_BILLING_MODE_REPLY.getKey(),messageUtil.acquisitionBillingModeReply(acquisitionBillingModeReply)); +// List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode(message.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(acquisitionBillingModeReply.getCharging_pile_code(), ServiceIdMenu.ACQUISITION_BILLING_MODE_REPLY.getKey(),messageUtil.acquisitionBillingModeReply(acquisitionBillingModeReply)); } @Override diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/ErrorMessageMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/ErrorMessageMessageListener.java new file mode 100644 index 0000000..8c67b98 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/ErrorMessageMessageListener.java @@ -0,0 +1,80 @@ +package com.ruoyi.integration.rocket.listener; + +import com.ruoyi.integration.mongodb.service.ErrorMessageMessageService; +import com.ruoyi.integration.rocket.model.ErrorMessageMessage; +import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.annotation.MessageModel; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RocketMQMessageListener( + messageModel = MessageModel.CLUSTERING, + consumerGroup = "charge_error_message", + topic = "charge_error_message", + selectorExpression = "error_message", + consumeThreadMax = 5 //默认是64个线程并发消息,配置 consumeThreadMax 参数指定并发消费线程数,避免太大导致资源不够 +) +public class ErrorMessageMessageListener extends EnhanceMessageHandler<ErrorMessageMessage> implements RocketMQListener<ErrorMessageMessage> { + + @Autowired + private ErrorMessageMessageService errorMessageMessageService; + + + @Override + protected void handleMessage(ErrorMessageMessage message) throws Exception { + // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 + log.info("错误报文-业务消息处理:{}",message); + // 持久化消息 + ErrorMessageMessage errorMessageMessage = new ErrorMessageMessage(); + BeanUtils.copyProperties(message,errorMessageMessage); + errorMessageMessageService.create(errorMessageMessage); + // 业务处理 + } + + @Override + protected void handleMaxRetriesExceeded(ErrorMessageMessage message) { + // 当超过指定重试次数消息时此处方法会被调用 + // 生产中可以进行回退或其他业务操作 + log.error("消息消费失败,请执行后续处理"); + } + + + /** + * 是否执行重试机制 + */ + @Override + protected boolean isRetry() { + return true; + } + + @Override + protected boolean throwException() { + // 是否抛出异常,false搭配retry自行处理异常 + return false; + } + + /** + * 若需要处理消息过滤,在父级中进行统一处理,或者在此处实现之后,自行处理 + * @param message 待处理消息 + * @return true: 本次消息被过滤,false:不过滤 + */ + @Override + protected boolean filter(ErrorMessageMessage message) { + // 此处可做消息过滤 + return false; + } + + /** + * 监听消费消息,不需要执行业务处理,委派给父类做基础操作,父类做完基础操作后会调用子类的实际处理类型 + */ + @Override + public void onMessage(ErrorMessageMessage message) { + super.dispatchMessage(message); + } +} \ No newline at end of file diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsDemandAndChargerExportationMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsDemandAndChargerExportationMessage.java index 8e958b7..f7ac9d4 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsDemandAndChargerExportationMessage.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/BmsDemandAndChargerExportationMessage.java @@ -22,7 +22,8 @@ private Integer bms_charging_mode; // BMS 充电模式(1:恒压充电;2:恒流充电) private BigDecimal bms_voltage_measurement_value; // BMS 充电电压测量值 private BigDecimal bms_current_measurement_value; // BMS 充电电流测量值 - private Integer bms_battery_voltage_and_group_number; // BMS 最高单体动力蓄电池电压及组号(1-12 位:最高单体动力蓄电池电压,数据分辨率:0.01 V/位,0 V 偏移量;数据范围:0~24 V;13-16 位:最高单体动力蓄电池电压所在组号,数据分辨率:1/位,0 偏移量;数据范围:0~15) + private BigDecimal bms_battery_voltage; // 最高电压 BMS 最高单体动力蓄电池电压及组号(1-12 位:最高单体动力蓄电池电压,数据分辨率:0.01 V/位,0 V 偏移量;数据范围:0~24 V;13-16 位:最高单体动力蓄电池电压所在组号,数据分辨率:1/位,0 偏移量;数据范围:0~15) + private Integer bms_group_number; // 所在组号 BMS 最高单体动力蓄电池电压及组号(1-12 位:最高单体动力蓄电池电压,数据分辨率:0.01 V/位,0 V 偏移量;数据范围:0~24 V;13-16 位:最高单体动力蓄电池电压所在组号,数据分辨率:1/位,0 偏移量;数据范围:0~15) private BigDecimal bms_charged_status; // BMS 当前荷电状态 SOC( %) private Integer bms_remaining_charging_time; // BMS 估算剩余充电时间 private BigDecimal voltage_output_value; // 电桩电压输出值 diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java index 4cfaafa..7231ba4 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java @@ -18,8 +18,8 @@ private BigDecimal bms_battery_charging_status; // BMS 中止荷电状态 SOC private BigDecimal bms_minimum_battery_voltage; // BMS 动力蓄电池单体最低电压 private BigDecimal bms_maximum_battery_voltage; // BMS 动力蓄电池单体最高电压 - private Integer bms_minimum_battery_temperature; // BMS 动力蓄电池最低温度 - private Integer bms_maximum_battery_temperature; // BMS 动力蓄电池最高温度 + private BigDecimal bms_minimum_battery_temperature; // BMS 动力蓄电池最低温度 + private BigDecimal bms_maximum_battery_temperature; // BMS 动力蓄电池最高温度 private BigDecimal cumulative_charging_time; // 电桩累计充电时间 private BigDecimal output_energy; // 电桩输出能量 private String charger_code; // 电桩充电机编号 diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ErrorMessageMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ErrorMessageMessage.java new file mode 100644 index 0000000..97f289e --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ErrorMessageMessage.java @@ -0,0 +1,35 @@ +package com.ruoyi.integration.rocket.model; + +import com.ruoyi.integration.rocket.base.BaseMessage; +import lombok.Data; + +@Data +public class ErrorMessageMessage extends BaseMessage { + + private String transaction_serial_number; // 交易流水号 + private String charging_pile_code; // 桩编码 + private String charging_gun_code; // 抢号 + private Integer charger_identification_0; // 接收 SPN2560=0x00 的充电机辨识报文超时(0=正常,1=超时,10=不可信状态) + private Integer charger_identification_170; // 接收 SPN2560=0xAA 的充电机辨识报文超时(0=正常,1=超时,10=不可信状态) + private String charger_identification_reserve; // 预留位 + private Integer time_synchronization_and_maximum_output_charger; // 接收充电机的时间同步和充电机最大输出能力报文超时(0=正常,1=超时,10=不可信状态) + private Integer charge_preparation; // 接收充电机完成充电准备报文超时(0=正常,1=超时,10=不可信状态) + private String charge_preparation_reserve; // 预留位 + private Integer charging_status; // 接收充电机充电状态报文超时(0=正常,1=超时,10=不可信状态) + private Integer stop_charging; // 接收充电机中止充电报文超时(0=正常,1=超时,10=不可信状态) + private String charge_reserve; // 预留位 + private Integer charging_statistics; // 接收充电机充电统计报文超时(0=正常,1=超时,10=不可信状态) + private String bms_other; // BMS 其他 + private Integer bms_and_vehicle_identification; // 接收 BMS 和车辆的辨识报文超时(0=正常,1=超时,10=不可信状态) + private String bms_and_vehicle_identification_reserve; // 预留位 + private Integer battery_charging_parameter; // 接收电池充电参数报文超时(0=正常,1=超时,10=不可信状态) + private Integer bms_completes_charging_preparation; // 接收 BMS 完成充电准备报文超时(0=正常,1=超时,10=不可信状态) + private String bms_completes_charging_preparation_reserve; // 预留位 + private Integer total_battery_charging_status; // 接收电池充电总状态报文超时(0=正常,1=超时,10=不可信状态) + private Integer battery_charging_requirements; // 接收电池充电要求报文超时(0=正常,1=超时,10=不可信状态) + private Integer bms_stop_charging; // 接收 BMS 中止充电报文超时(0=正常,1=超时,10=不可信状态) + private Integer bms_reserve; // 预留位 + private Integer bms_charging_statistics; // 接收 BMS 充电统计报文超时0=正常,1=超时,10=不可信状态) + private String charger_other; // 充电机其他 + +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ParameterSettingMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ParameterSettingMessage.java index 9a40e77..6efffe2 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ParameterSettingMessage.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/ParameterSettingMessage.java @@ -21,7 +21,7 @@ private BigDecimal bms_maximum_charging_current; // BMS 最高允许充电电流 private BigDecimal bms_battery_total_energy; // BMS 动力蓄电池标称总能量 private BigDecimal bms_total_charging_voltage; // BMS 最高允许充电总电压 - private Integer bms_maximum_temperature; // BMS 最高允许温度 + private BigDecimal bms_maximum_temperature; // BMS 最高允许温度 private BigDecimal bms_battery_charging_status; // BMS 整车动力蓄电池荷电状态 (soc) private BigDecimal bms_battery_voltage; // BMS 整车动力蓄电池当前电池 电压 private BigDecimal maximum_output_voltage; // 电桩最高输出电压 diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/UploadRealTimeMonitoringDataMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/UploadRealTimeMonitoringDataMessage.java index 8a8f765..dd1c034 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/UploadRealTimeMonitoringDataMessage.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/UploadRealTimeMonitoringDataMessage.java @@ -22,10 +22,10 @@ private Integer insertion_status; // 是否插枪(0:否,1:是) private BigDecimal output_voltage; // 输出电压,精确到小数点后一位;待机置零 private BigDecimal output_current; // 输出电流,精确到小数点后一位;待机置零 - private Integer gun_line_temperature; // 枪线温度,整形,偏移量-50;待机置零 + private BigDecimal gun_line_temperature; // 枪线温度,整形,偏移量-50;待机置零 private String gun_line_code; // 枪线编码,没有置零 private Integer soc; // SOC待机置零;交流桩置零 - private Integer battery_temperature; // 电池组最高温度,整形,偏移量-50 ºC;待机置零;交流桩置零 + private BigDecimal battery_temperature; // 电池组最高温度,整形,偏移量-50 ºC;待机置零;交流桩置零 private Integer cumulative_charging_time; // 累计充电时间,单位:min;待机置零 private Integer time_remaining; // 剩余时间,单位:min;待机置零、交流桩置零 private BigDecimal charging_degree; // 充电度数,精确到小数点后四位;待机置零 diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java index ba614a5..a3a2137 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java @@ -2,6 +2,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.ruoyi.integration.api.model.ErrorMessage; import com.ruoyi.integration.api.model.ParameterSetting; import com.ruoyi.integration.iotda.constant.SendTagConstant; import com.ruoyi.integration.rocket.model.*; @@ -55,6 +56,16 @@ message.setSource(SendTagConstant.END_CHARGE); return rocketMQEnhanceTemplate.send(TOPIC+SendTagConstant.END_CHARGE, SendTagConstant.END_CHARGE, message); } + /** + * 错误报文 + */ + public SendResult errorMessageMessage(ErrorMessageMessage message) { + // 设置业务key + message.setKey(UUID.randomUUID().toString()); + // 设置消息来源,便于查询 + message.setSource(SendTagConstant.ERROR_MESSAGE); + return rocketMQEnhanceTemplate.send(TOPIC+SendTagConstant.ERROR_MESSAGE, SendTagConstant.ERROR_MESSAGE, message); + } /** * 计费模型验证请求 -- Gitblit v1.7.1