From 5c3d044bb3b0bdaf170e683d97992d5773ea706d Mon Sep 17 00:00:00 2001 From: zhibing.pu <393733352@qq.com> Date: 星期六, 31 八月 2024 14:52:59 +0800 Subject: [PATCH] 完善功能 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 55 +++++++++++++---- ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TInvoiceTypeController.java | 2 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java | 31 ++++++++++ ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java | 26 ++++++++ ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java | 23 ++++++- ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java | 1 7 files changed, 119 insertions(+), 22 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 new file mode 100644 index 0000000..cdc9f16 --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java @@ -0,0 +1,31 @@ +package com.ruoyi.chargingPile.api.factory; + +import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; +import com.ruoyi.common.core.domain.R; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +/** + * @author zhibing.pu + * @Date 2024/8/28 18:33 + */ +@Component +public class AccountingStrategyDetailFallbackFactory implements FallbackFactory<AccountingStrategyDetailClient> { + private static final Logger log = LoggerFactory.getLogger(AccountingStrategyDetailFallbackFactory.class); + + + @Override + public AccountingStrategyDetailClient create(Throwable throwable) { + log.error("计费策略调用失败:{}", throwable.getMessage()); + return new AccountingStrategyDetailClient(){ + + @Override + public R<TAccountingStrategyDetail> getNowData(Integer accountingStrategyId) { + 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 new file mode 100644 index 0000000..b63175e --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java @@ -0,0 +1,26 @@ +package com.ruoyi.chargingPile.api.feignClient; + +import com.ruoyi.chargingPile.api.factory.AccountingStrategyDetailFallbackFactory; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; +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.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author zhibing.pu + * @Date 2024/8/28 18:33 + */ +@FeignClient(contextId = "AccountingStrategyDetailClient", value = ServiceNameConstants.CHARGINGPILE_SERVICE, fallbackFactory = AccountingStrategyDetailFallbackFactory.class) +public interface AccountingStrategyDetailClient { + + + /** + * 获取当前有效的计费策略明细 + * @param accountingStrategyId + * @return + */ + @PostMapping("/t-accounting-strategy-detail/getNowData") + R<TAccountingStrategyDetail> getNowData(@RequestParam("accountingStrategyId") Integer accountingStrategyId); +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index e5e3ae5..f015cf5 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,4 +1,5 @@ com.ruoyi.chargingPile.api.factory.ChargingPileFallbackFactory com.ruoyi.chargingPile.api.factory.SiteFallbackFactory com.ruoyi.chargingPile.api.factory.ParkingLotFallbackFactory -com.ruoyi.chargingPile.api.factory.ChargingGunFallbackFactory \ No newline at end of file +com.ruoyi.chargingPile.api.factory.ChargingGunFallbackFactory +com.ruoyi.chargingPile.api.factory.AccountingStrategyDetailFallbackFactory \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java index 0657802..c2c27be 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java @@ -2,7 +2,6 @@ import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.integration.api.factory.SendMessageFallbackFactory; -import com.ruoyi.integration.api.model.EndCharge; import com.ruoyi.integration.api.model.PlatformStartCharging; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; 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 ffc0dfa..5234673 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 @@ -1,23 +1,23 @@ package com.ruoyi.chargingPile.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.model.TAccountingStrategy; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; import com.ruoyi.chargingPile.api.vo.StrategyPriceVO; import com.ruoyi.chargingPile.api.vo.TAccountingStrategyDetailVO; import com.ruoyi.chargingPile.service.ISiteService; import com.ruoyi.chargingPile.service.TAccountingStrategyDetailService; import com.ruoyi.chargingPile.service.TAccountingStrategyService; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.web.domain.AjaxResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Objects; @@ -77,6 +77,19 @@ public AjaxResult<StrategyPriceVO> queryPrice(@RequestParam("siteId") Integer siteId) { return AjaxResult.ok(accountingStrategyDetailService.queryPrice(siteId)); } - + + + /** + * 获取当前有效的计费模板 + * @param accountingStrategyId + * @return + */ + @PostMapping("/getNowData") + public R<TAccountingStrategyDetail> getNowData(@RequestParam("accountingStrategyId") Integer accountingStrategyId){ + TAccountingStrategyDetail one = accountingStrategyDetailService.getOne(new LambdaQueryWrapper<TAccountingStrategyDetail>() + .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategyId) + .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time")); + return R.ok(one); + } } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java index 5fda815..ad94c84 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java @@ -10,10 +10,12 @@ import com.ruoyi.account.api.model.TAppUserCar; import com.ruoyi.account.api.model.TAppUserVipDetail; import com.ruoyi.account.api.vo.GetAppUserVipDetail; +import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient; import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient; import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; import com.ruoyi.chargingPile.api.feignClient.SiteClient; import com.ruoyi.chargingPile.api.model.Site; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.common.core.domain.R; @@ -114,6 +116,9 @@ @Resource private TOrderEvaluateService orderEvaluateService; + + @Resource + private AccountingStrategyDetailClient accountingStrategyDetailClient; @@ -435,21 +440,43 @@ //根据当前充值的金额和计费模板算出充电的金额 BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); //计算充电金额,会员需要将折扣金额加入到充电总金额中 + TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); + TAccountingStrategyDetail strategyDetail = accountingStrategyDetailClient.getNowData(chargingGun.getAccountingStrategyId()).getData(); + //总单价 + BigDecimal totalUnitPrice = strategyDetail.getServiceCharge().add(strategyDetail.getElectrovalence()); + //计算能充电的度数 + BigDecimal degrees = rechargeAmount.divide(totalUnitPrice); + //计算电费金额和服务费 + BigDecimal serviceCharge = strategyDetail.getServiceCharge().multiply(degrees); + BigDecimal electrovalence = strategyDetail.getElectrovalence().multiply(degrees); -// TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); -// if(){ -// appUser.getVipId() -// } -// -// -// //调用远程启动充电消息 -// PlatformStartCharging platformStartCharging = new PlatformStartCharging(); -// platformStartCharging.setTransaction_serial_number(chargingOrder.getCode()); -// platformStartCharging.setCharging_pile_code(); -// platformStartCharging.setCharging_gun_code(); -// platformStartCharging.setCard_number(); -// platformStartCharging.setAccount_balance() -// sendMessageClient.platformStartCharging(platformStartCharging); + //再处理会员折扣 + BigDecimal discount = BigDecimal.ZERO; + TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); + if(null != appUser.getVipId()){ + GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); + getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId()); + getAppUserVipDetail.setVipId(appUser.getVipId()); + TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData(); + if(data.getChargeNum() > 0){ + discount = serviceCharge.multiply(data.getDiscount().divide(new BigDecimal(10))); + data.setChargeNum(data.getChargeNum() - 1); + appUserVipDetailClient. + } + } + electrovalence = electrovalence.add(discount); + + //调用远程启动充电消息 + PlatformStartCharging platformStartCharging = new PlatformStartCharging(); + platformStartCharging.setTransaction_serial_number(chargingOrder.getCode()); + platformStartCharging.setCharging_pile_code(); + platformStartCharging.setCharging_gun_code(); + platformStartCharging.setCard_number(); + platformStartCharging.setAccount_balance(electrovalence); + sendMessageClient.platformStartCharging(platformStartCharging); + //异步线程检测远程启动的应答结果。如果失败,则需要全额退款 + + return AjaxResult.success(); } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TInvoiceTypeController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TInvoiceTypeController.java index f69c779..7f4effd 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TInvoiceTypeController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TInvoiceTypeController.java @@ -80,7 +80,7 @@ @ResponseBody - @DeleteMapping("/getInvoiceTypeList") + @GetMapping("/getInvoiceTypeList") @ApiOperation(value = "获取开票类型", tags = {"小程序-充电发票"}) public AjaxResult<List<TInvoiceType>> getInvoiceTypeList(){ List<TInvoiceType> list = invoiceTypeService.list(new LambdaQueryWrapper<TInvoiceType>() -- Gitblit v1.7.1