From 7320cba2abc7beb1f990fb4fd52dc577b8d609dc Mon Sep 17 00:00:00 2001 From: zhibing.pu <393733352@qq.com> Date: 星期四, 05 九月 2024 10:44:10 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java | 8 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/constant/SendTagConstant.java | 2 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/iotda/utils/tools/MessageUtil.java | 12 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/CP56Time2aConverter.java | 39 +++ ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java | 24 + /dev/null | 78 ------- ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingMessageListener.java | 93 ++++++++ ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java | 10 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java | 10 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java | 28 ++ ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java | 5 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java | 7 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java | 21 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java | 4 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/TimingSettingMessage.java | 17 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java | 258 +++++++++++++++++++++++ 18 files changed, 522 insertions(+), 108 deletions(-) diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java index 32d4226..844dbb9 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java @@ -44,6 +44,11 @@ public R<List<TAccountingStrategyDetail>> getListByAccountingStrategyId(Integer id) { throw new RuntimeException("根据计费策略主表id策略明细失败:" + throwable.getMessage()); } + + @Override + public R<List<TAccountingStrategyDetail>> getDetailListByCode(String code) { + return R.fail("通过桩编号查询当前使用的策略明细列表失败:" + throwable.getMessage()); + } }; } } 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 b6a231a..94a055e 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 @@ -51,4 +51,11 @@ */ @PostMapping("/t-accounting-strategy-detail/getListByAccountingStrategyId") R<List<TAccountingStrategyDetail>> getListByAccountingStrategyId(@RequestParam("id") Integer id); + /** + * 通过桩编号查询当前使用的策略明细列表 + * @param code + * @return + */ + @PostMapping("/t-accounting-strategy-detail/getDetailListByCode") + R<List<TAccountingStrategyDetail>> getDetailListByCode(@RequestParam("code") String code); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java index dd60b9e..2a28707 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java @@ -111,6 +111,11 @@ if(flag){ return AjaxResult.error("计费模板时间设置有误差"); } + // 判断同阶段是否价格不一致 + Boolean flag1 = accountingStrategyDetailService.isStrategyPriceConsistent(dto.getAccountingStrategyDetails()); + if(!flag1){ + return AjaxResult.error("同阶段费率值需一致"); + } Long userId = SecurityUtils.getLoginUser().getUserid(); dto.setUserId(userId); accountingStrategyService.save(dto); @@ -131,6 +136,11 @@ if(flag){ return AjaxResult.error("计费模板时间设置有误差"); } + // 判断同阶段是否价格不一致 + Boolean flag1 = accountingStrategyDetailService.isStrategyPriceConsistent(dto.getAccountingStrategyDetails()); + if(!flag1){ + return AjaxResult.error("同阶段费率值需一致"); + } // 判断修改的计费策略是否为已通过 if(dto.getAuditStatus() == 3 || dto.getAuditStatus() == 4){ // 查询是否有下级审核中的策略 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 100cca8..35c031e 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 @@ -154,5 +154,26 @@ List<TAccountingStrategyDetail> list = accountingStrategyDetailService.list(new LambdaQueryWrapper<TAccountingStrategyDetail>().eq(TAccountingStrategyDetail::getAccountingStrategyId, id)); return R.ok(list); } + + /** + * 通过桩编号查询当前使用的策略明细列表 + * @param code + * @return + */ + @PostMapping("/t-accounting-strategy-detail/getDetailListByCode") + public R<List<TAccountingStrategyDetail>> getDetailListByCode(@RequestParam("code") String code){ + // 查询桩 + TChargingPile chargingPile = chargingPileService.getOne(Wrappers.lambdaQuery(TChargingPile.class) + .eq(TChargingPile::getCode,code) + .last("LIMIT 1")); + if(Objects.isNull(chargingPile)){ + return R.fail("未查询到该桩设备"); + } + Site site = siteService.getById(chargingPile.getSiteId()); + TAccountingStrategy accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId()); + List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailService.list(Wrappers.<TAccountingStrategyDetail>lambdaQuery() + .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId())); + return R.ok(accountingStrategyDetails); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java index 245e8d3..835a46c 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java @@ -44,4 +44,12 @@ * @return */ Boolean isStrategy24Hour(List<TAccountingStrategyDetail> accountingStrategyDetails); + + /** + * 判断同阶段是否价格不一致 + * @param accountingStrategyDetails + * @return + */ + Boolean isStrategyPriceConsistent(List<TAccountingStrategyDetail> accountingStrategyDetails); + } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java index 9b2aaab..2412c8c 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java @@ -24,10 +24,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalTime; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -146,4 +143,23 @@ return isFirstElementValid || !isTimeContinuous; } + + @Override + public Boolean isStrategyPriceConsistent(List<TAccountingStrategyDetail> accountingStrategyDetails) { + Map<Integer, BigDecimal> phaseToServiceFee = new HashMap<>(); + for (TAccountingStrategyDetail detail : accountingStrategyDetails) { + Integer type = detail.getType(); + BigDecimal serviceFee = detail.getServiceCharge(); + + if (phaseToServiceFee.containsKey(type)) { + BigDecimal existingFee = phaseToServiceFee.get(type); + if (!existingFee.equals(serviceFee)) { + return false; // 发现不一致的服务费 + } + } else { + phaseToServiceFee.put(type, serviceFee); + } + } + return true; // 所有相同阶段的服务费一致 + } } 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 8708f9f..8466119 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 @@ -89,7 +89,7 @@ /** * 对时设置应答 */ - public static final String TIMING_SETTING_REPLY ="timing_setting_reply"; + public static final String TIMING_SETTING ="timing_setting"; /** * 计费模型应答 */ 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 1dde7c6..9a27b45 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,13 +172,13 @@ } /** - * 对时设置 - * @param timingSetting 实体对象 + * 对时设置应答 + * @param timingSettingReply 实体对象 * @return */ - @PostMapping("/timingSetting") - public String timingSetting(@RequestBody TimingSetting timingSetting){ - return iotMessageProduce.sendMessage(timingSetting.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING.getKey(),messageUtil.timingSetting(timingSetting)); + @PostMapping("/timingSettingReply") + public String timingSettingReply(@RequestBody TimingSettingReply timingSettingReply){ + return iotMessageProduce.sendMessage(timingSettingReply.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING_REPLY.getKey(),messageUtil.timingSettingReply(timingSettingReply)); } /** 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 6acaba3..12ea9d4 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,9 +67,9 @@ */ 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/listener/IotMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java index 3883fad..51caba0 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 @@ -95,8 +95,8 @@ case SendTagConstant.WORKING_PARAMETER_SETTING_REPLY: sendResult = enhanceProduce.workingParameterSettingReplyMessage(content); break; - case SendTagConstant.TIMING_SETTING_REPLY: - sendResult = enhanceProduce.timingSettingReplyMessage(content); + case SendTagConstant.TIMING_SETTING: + sendResult = enhanceProduce.timingSettingMessage(content); break; case SendTagConstant.SETUP_BILLING_MODEL_REPLY: sendResult = enhanceProduce.setupBillingModelReplyMessage(content); diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/CP56Time2aConverter.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/CP56Time2aConverter.java new file mode 100644 index 0000000..3a6b0c5 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/CP56Time2aConverter.java @@ -0,0 +1,39 @@ +package com.ruoyi.integration.iotda.utils.tools; + +import javax.xml.datatype.DatatypeConfigurationException; +import javax.xml.datatype.DatatypeFactory; +import javax.xml.datatype.XMLGregorianCalendar; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.TimeZone; + +public class CP56Time2aConverter { + + public static String convertToCP56Time2a(Date date) { + try { + DatatypeFactory datatypeFactory = DatatypeFactory.newInstance(); + GregorianCalendar calendar = new GregorianCalendar(); + calendar.setTime(date); + TimeZone timeZone = calendar.getTimeZone(); + XMLGregorianCalendar xmlGregorianCalendar = datatypeFactory.newXMLGregorianCalendar( + calendar.get(Calendar.YEAR), + calendar.get(Calendar.MONTH)+1, + calendar.get(Calendar.DAY_OF_MONTH), + calendar.get(Calendar.HOUR_OF_DAY), + calendar.get(Calendar.MINUTE), + calendar.get(Calendar.SECOND), + calendar.get(Calendar.MILLISECOND), + (timeZone.getRawOffset() / (60 * 1000))); + return xmlGregorianCalendar.toXMLFormat(); + } catch (DatatypeConfigurationException e) { + throw new RuntimeException("Error creating DatatypeFactory", e); + } + } + + public static void main(String[] args) { + Date now = new Date(); + String cp56Time2a = convertToCP56Time2a(now); + System.out.println("CP56Time2a: " + cp56Time2a); + } +} \ 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 ff62d42..c7c76bd 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,7 +44,7 @@ @Autowired private WorkingParameterSettingService workingParameterSettingService; @Autowired - private TimingSettingService timingSettingService; + private TimingSettingReplyService timingSettingReplyService; @Autowired private SetupBillingModelService setupBillingModelService; @Autowired @@ -205,13 +205,13 @@ } /** - * 对时设置 - * @param timingSetting 实体对象 + * 对时设置应答 + * @param timingSettingReply 实体对象 * @return */ - public String timingSetting(TimingSetting timingSetting){ - timingSettingService.create(timingSetting); - return getMessageJsonString(timingSetting, ServiceIdMenu.TIMING_SETTING.getValue()); + public String timingSettingReply(TimingSettingReply timingSettingReply){ + timingSettingReplyService.create(timingSettingReply); + return getMessageJsonString(timingSettingReply, ServiceIdMenu.TIMING_SETTING_REPLY.getValue()); } /** 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 732dec1..4ebf980 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 @@ -1,19 +1,271 @@ package com.ruoyi.integration.iotda.utils.tools; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; +import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.integration.api.model.AcquisitionBillingModeReply; import lombok.extern.slf4j.Slf4j; import java.io.Serializable; +import java.time.LocalTime; +import java.util.*; +import java.util.stream.Collectors; @Slf4j public class StrategyUtil implements Serializable { /** - * 校验计费模版是否准确 + * 获取计费模版的价格 * @return */ - public static boolean checkStrategy() { - return true; + public static Map<Integer, TAccountingStrategyDetail> getStrategyPrice(List<TAccountingStrategyDetail> accountingStrategyDetails) { + Map<Integer, TAccountingStrategyDetail> phaseToServiceFee = new HashMap<>(); + for (TAccountingStrategyDetail detail : accountingStrategyDetails) { + Integer type = detail.getType(); + if (!phaseToServiceFee.containsKey(type)) { + phaseToServiceFee.put(type, detail); + } + } + return phaseToServiceFee; + } + /** + * 计费模版的价格设置 + * @return + */ + public static void setStrategyPrice(Map<Integer, TAccountingStrategyDetail> accountingStrategyDetails,AcquisitionBillingModeReply acquisitionBillingModeReply) { + accountingStrategyDetails.forEach((k,v)->{ + switch (k){ + case 1: + acquisitionBillingModeReply.setSharp_peak_electricity_rate(v.getElectrovalence()); +// acquisitionBillingModeReply.setSharp_peak_service_rate(v.getServiceCharge()); + break; + case 2: + acquisitionBillingModeReply.setPeak_electricity_rate(v.getElectrovalence()); +// acquisitionBillingModeReply.setPeak_service_rate(v.getServiceCharge()); + break; + case 3: + acquisitionBillingModeReply.setFlat_peak_electricity_rate(v.getElectrovalence()); +// acquisitionBillingModeReply.setFlat_peak_service_rate(v.getServiceCharge()); + break; + default: + acquisitionBillingModeReply.setLow_peak_electricity_rate(v.getElectrovalence()); +// acquisitionBillingModeReply.setLow_peak_service_rate(v.getServiceCharge()); + break; + } + }); + } + + /** + * 计费模版的时段设置 + * @return + */ + public static void setTime(List<TAccountingStrategyDetail> accountingStrategyDetails,AcquisitionBillingModeReply acquisitionBillingModeReply) { + LocalTime time = LocalTime.of(0, 15, 0); + for (int i = 1; i <= 48; i++) { + if(i != 1){ + time = time.plusMinutes(30); + } + 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)){ + switch (i){ + case 1: + acquisitionBillingModeReply.setTime1(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 2: + acquisitionBillingModeReply.setTime2(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 3: + acquisitionBillingModeReply.setTime3(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 4: + acquisitionBillingModeReply.setTime4(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 5: + acquisitionBillingModeReply.setTime5(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 6: + acquisitionBillingModeReply.setTime6(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 7: + acquisitionBillingModeReply.setTime7(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 8: + acquisitionBillingModeReply.setTime8(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 9: + acquisitionBillingModeReply.setTime9(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 10: + acquisitionBillingModeReply.setTime10(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 11: + acquisitionBillingModeReply.setTime11(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 12: + acquisitionBillingModeReply.setTime12(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 13: + acquisitionBillingModeReply.setTime13(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 14: + acquisitionBillingModeReply.setTime14(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 15: + acquisitionBillingModeReply.setTime15(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 16: + acquisitionBillingModeReply.setTime16(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 17: + acquisitionBillingModeReply.setTime17(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 18: + acquisitionBillingModeReply.setTime18(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 19: + acquisitionBillingModeReply.setTime19(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 20: + acquisitionBillingModeReply.setTime20(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 21: + acquisitionBillingModeReply.setTime21(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 22: + acquisitionBillingModeReply.setTime22(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 23: + acquisitionBillingModeReply.setTime23(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 24: + acquisitionBillingModeReply.setTime24(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 25: + acquisitionBillingModeReply.setTime25(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 26: + acquisitionBillingModeReply.setTime26(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 27: + acquisitionBillingModeReply.setTime27(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 28: + acquisitionBillingModeReply.setTime28(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 29: + acquisitionBillingModeReply.setTime29(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 30: + acquisitionBillingModeReply.setTime30(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 31: + acquisitionBillingModeReply.setTime31(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 32: + acquisitionBillingModeReply.setTime32(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 33: + acquisitionBillingModeReply.setTime33(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 34: + acquisitionBillingModeReply.setTime34(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 35: + acquisitionBillingModeReply.setTime35(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 36: + acquisitionBillingModeReply.setTime36(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 37: + acquisitionBillingModeReply.setTime37(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 38: + acquisitionBillingModeReply.setTime38(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 39: + acquisitionBillingModeReply.setTime39(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 40: + acquisitionBillingModeReply.setTime40(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 41: + acquisitionBillingModeReply.setTime41(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 42: + acquisitionBillingModeReply.setTime42(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 43: + acquisitionBillingModeReply.setTime43(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 44: + acquisitionBillingModeReply.setTime44(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 45: + acquisitionBillingModeReply.setTime45(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 46: + acquisitionBillingModeReply.setTime46(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 47: + acquisitionBillingModeReply.setTime47(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + case 48: + acquisitionBillingModeReply.setTime48(accountingStrategyDetail.getType().equals(1)?0 + :accountingStrategyDetail.getType().equals(2)?1:accountingStrategyDetail.getType().equals(3)?2:3); + break; + } + } + } + } } } 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 28b3de3..cc9a8cc 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 @@ -1,7 +1,14 @@ package com.ruoyi.integration.rocket.listener; +import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; import com.ruoyi.integration.api.model.AcquisitionBillingMode; +import com.ruoyi.integration.api.model.AcquisitionBillingModeReply; import com.ruoyi.integration.api.model.Online; +import com.ruoyi.integration.iotda.enums.ServiceIdMenu; +import com.ruoyi.integration.iotda.utils.produce.IotMessageProduce; +import com.ruoyi.integration.iotda.utils.tools.MessageUtil; +import com.ruoyi.integration.iotda.utils.tools.StrategyUtil; import com.ruoyi.integration.mongodb.service.AcquisitionBillingModeService; import com.ruoyi.integration.rocket.model.AcquisitionBillingModeMessage; import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; @@ -11,6 +18,10 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; +import java.util.Objects; @Slf4j @Component @@ -24,7 +35,12 @@ @Autowired private AcquisitionBillingModeService acquisitionBillingModeService; - + @Autowired + private AccountingStrategyDetailClient accountingStrategyDetailClient; + @Autowired + private IotMessageProduce iotMessageProduce; + @Autowired + private MessageUtil messageUtil; @Override protected void handleMessage(AcquisitionBillingModeMessage message) throws Exception { // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 @@ -33,7 +49,15 @@ AcquisitionBillingMode acquisitionBillingMode = new AcquisitionBillingMode(); 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)); } @Override diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingMessageListener.java new file mode 100644 index 0000000..4269c93 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingMessageListener.java @@ -0,0 +1,93 @@ +package com.ruoyi.integration.rocket.listener; + +import com.ruoyi.integration.api.model.TimingSetting; +import com.ruoyi.integration.api.model.TimingSettingReply; +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.mongodb.service.TimingSettingReplyService; +import com.ruoyi.integration.mongodb.service.TimingSettingService; +import com.ruoyi.integration.rocket.model.TimingSettingMessage; +import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; +import lombok.extern.slf4j.Slf4j; +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; + +import java.util.Date; + +@Slf4j +@Component +@RocketMQMessageListener( + consumerGroup = "enhance_consumer_group", + topic = "rocket_enhance", + selectorExpression = "*", + consumeThreadMax = 5 //默认是64个线程并发消息,配置 consumeThreadMax 参数指定并发消费线程数,避免太大导致资源不够 +) +public class TimingSettingMessageListener extends EnhanceMessageHandler<TimingSettingMessage> implements RocketMQListener<TimingSettingMessage> { + + @Autowired + private TimingSettingService timingSettingService; + @Autowired + private IotMessageProduce iotMessageProduce; + @Autowired + private MessageUtil messageUtil; + @Override + protected void handleMessage(TimingSettingMessage message) throws Exception { + // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 + log.info("对时设置-业务消息处理:{}",message); + // 持久化消息 + TimingSetting timingSetting = new TimingSetting(); + BeanUtils.copyProperties(message,timingSetting); + timingSettingService.create(timingSetting); + // 业务处理 对时设置应答 + TimingSettingReply timingSettingReply = new TimingSettingReply(); + timingSettingReply.setCharging_pile_code(message.getCharging_pile_code()); + timingSettingReply.setCurrent_time(CP56Time2aConverter.convertToCP56Time2a(new Date())); + iotMessageProduce.sendMessage(timingSettingReply.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING_REPLY.getKey(),messageUtil.timingSettingReply(timingSettingReply)); + } + + @Override + protected void handleMaxRetriesExceeded(TimingSettingMessage 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(TimingSettingMessage message) { + // 此处可做消息过滤 + return false; + } + + /** + * 监听消费消息,不需要执行业务处理,委派给父类做基础操作,父类做完基础操作后会调用子类的实际处理类型 + */ + @Override + public void onMessage(TimingSettingMessage message) { + super.dispatchMessage(message); + } +} \ No newline at end of file diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingReplyMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingReplyMessageListener.java deleted file mode 100644 index 09cdf0d..0000000 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingReplyMessageListener.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.ruoyi.integration.rocket.listener; - -import com.ruoyi.integration.api.model.Online; -import com.ruoyi.integration.api.model.TimingSettingReply; -import com.ruoyi.integration.mongodb.service.TimingSettingReplyService; -import com.ruoyi.integration.rocket.model.TimingSettingReplyMessage; -import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; -import lombok.extern.slf4j.Slf4j; -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( - consumerGroup = "enhance_consumer_group", - topic = "rocket_enhance", - selectorExpression = "*", - consumeThreadMax = 5 //默认是64个线程并发消息,配置 consumeThreadMax 参数指定并发消费线程数,避免太大导致资源不够 -) -public class TimingSettingReplyMessageListener extends EnhanceMessageHandler<TimingSettingReplyMessage> implements RocketMQListener<TimingSettingReplyMessage> { - - @Autowired - private TimingSettingReplyService timingSettingReplyService; - @Override - protected void handleMessage(TimingSettingReplyMessage message) throws Exception { - // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 - log.info("对时设置应答-业务消息处理:{}",message); - // 持久化消息 - TimingSettingReply timingSettingReply = new TimingSettingReply(); - BeanUtils.copyProperties(message,timingSettingReply); - timingSettingReplyService.create(timingSettingReply); - // 业务处理 - } - - @Override - protected void handleMaxRetriesExceeded(TimingSettingReplyMessage 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(TimingSettingReplyMessage message) { - // 此处可做消息过滤 - return false; - } - - /** - * 监听消费消息,不需要执行业务处理,委派给父类做基础操作,父类做完基础操作后会调用子类的实际处理类型 - */ - @Override - public void onMessage(TimingSettingReplyMessage 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/TimingSettingMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/TimingSettingMessage.java new file mode 100644 index 0000000..6b7186c --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/TimingSettingMessage.java @@ -0,0 +1,17 @@ +package com.ruoyi.integration.rocket.model; + +import com.ruoyi.integration.rocket.base.BaseMessage; +import lombok.Data; + +/** + * 对时设置 + **/ + +@Data +public class TimingSettingMessage extends BaseMessage { + + private String charging_pile_code; //桩编码 + private String current_time; //当前时间 +} + + 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 611c3b3..a851ff7 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 @@ -253,15 +253,15 @@ } /** - * 对时设置应答 + * 对时设置 */ - public SendResult timingSettingReplyMessage(JSONObject jsonObject) { - TimingSettingReplyMessage message = JSON.parseObject(jsonObject.toJSONString(),TimingSettingReplyMessage.class); + public SendResult timingSettingMessage(JSONObject jsonObject) { + TimingSettingMessage message = JSON.parseObject(jsonObject.toJSONString(),TimingSettingMessage.class); // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagConstant.TIMING_SETTING_REPLY); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.TIMING_SETTING_REPLY, message); + message.setSource(SendTagConstant.TIMING_SETTING); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.TIMING_SETTING, message); } /** -- Gitblit v1.7.1