From e473b5ae42cded953f330d54dead49cddfbe457f Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期三, 04 九月 2024 19:13:36 +0800 Subject: [PATCH] 计费模板处理 --- ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java | 29 ++++ ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java | 7 + ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java | 9 + 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/tools/StrategyUtil.java | 258 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 318 insertions(+), 6 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 2bf71a7..9ffd23e 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 @@ -9,6 +9,8 @@ import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; +import java.util.List; + /** * @author zhibing.pu * @Date 2024/8/28 18:33 @@ -42,6 +44,11 @@ public R<Boolean> checkChargingStrategy(CheckChargingStrategyDTO dto) { return R.fail("校验充电桩计费模版是否准确失败:" + 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 613cd1b..1a11b6d 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 @@ -10,6 +10,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; +import java.util.List; + /** * @author zhibing.pu * @Date 2024/8/28 18:33 @@ -46,4 +48,11 @@ */ @PostMapping("/t-accounting-strategy-detail/checkChargingStrategy") R<Boolean> checkChargingStrategy(@RequestBody CheckChargingStrategyDTO dto); + /** + * 通过桩编号查询当前使用的策略明细列表 + * @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/TAccountingStrategyDetailController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java index 09c646a..f54d98a 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 @@ -153,5 +153,26 @@ .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time")); return R.ok(dto.getStrategyDetailId().equals(one.getId())); } + + /** + * 通过桩编号查询当前使用的策略明细列表 + * @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-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 4a41768..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,8 +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 -- Gitblit v1.7.1