From 6ddfb0ce8f781457b59689d08218d2ea617c5925 Mon Sep 17 00:00:00 2001 From: zhibing.pu <393733352@qq.com> Date: 星期四, 05 九月 2024 10:02:43 +0800 Subject: [PATCH] 完善功能 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 277 ++++++++++++++---- ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/InviteUserFallbackFactory.java | 43 ++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyOrderMapper.java | 11 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/InviteUserClient.java | 48 +++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/AccountingStrategyOrderServiceImpl.java | 15 + ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/GetInviteUser.java | 19 + ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/AccountingStrategyDetailOrderClient.java | 26 + ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyFallbackFactory.java | 32 ++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/AccountingStrategyOrderService.java | 11 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java | 10 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/AccountingStrategyDetailOrderController.java | 39 ++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java | 8 ruoyi-api/ruoyi-api-order/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java | 13 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java | 12 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java | 8 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java | 25 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/AccountingStrategyDetailOrderService.java | 11 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java | 11 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyDetailOrderMapper.java | 11 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/AccountingStrategyDetailOrderMapper.xml | 17 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/AccountingStrategyDetailOrderServiceImpl.java | 15 + ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInviteUserController.java | 48 +++ ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyClient.java | 25 + ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/AccountingStrategyDetailOrderFallbackFactory.java | 37 ++ ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java | 5 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java | 21 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/AccountingStrategyOrderMapper.xml | 23 + ruoyi-api/ruoyi-api-account/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 | 19 31 files changed, 746 insertions(+), 103 deletions(-) diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/InviteUserFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/InviteUserFallbackFactory.java new file mode 100644 index 0000000..ef781d1 --- /dev/null +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/InviteUserFallbackFactory.java @@ -0,0 +1,43 @@ +package com.ruoyi.account.api.factory; + +import com.ruoyi.account.api.feignClient.InviteUserClient; +import com.ruoyi.account.api.model.TInviteUser; +import com.ruoyi.account.api.vo.GetInviteUser; +import com.ruoyi.common.core.domain.R; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + + +/** + * + * @author ruoyi + */ +@Component +public class InviteUserFallbackFactory implements org.springframework.cloud.openfeign.FallbackFactory<InviteUserClient> +{ + private static final Logger log = LoggerFactory.getLogger(InviteUserFallbackFactory.class); + + @Override + public InviteUserClient create(Throwable throwable) { + log.error("邀请用户调用失败:{}", throwable.getMessage()); + return new InviteUserClient() { + + + @Override + public R<TInviteUser> getInviteUser(GetInviteUser query) { + return R.fail("获取用户邀请数据失败:" + throwable.getMessage()); + } + + @Override + public void updateInviteUser(TInviteUser query) { + R.fail("修改用户邀请数据失败:" + throwable.getMessage()); + } + + @Override + public void saveInviteUser(TInviteUser query) { + R.fail("添加用户邀请数据失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/InviteUserClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/InviteUserClient.java new file mode 100644 index 0000000..6fa93d4 --- /dev/null +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/InviteUserClient.java @@ -0,0 +1,48 @@ +package com.ruoyi.account.api.feignClient; + +import com.ruoyi.account.api.factory.InviteUserFallbackFactory; +import com.ruoyi.account.api.model.TInviteUser; +import com.ruoyi.account.api.vo.GetInviteUser; +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.RequestBody; + +/** + * @author zhibing.pu + * @Date 2024/9/4 17:54 + */ +@FeignClient(contextId = "InviteUserClient", value = ServiceNameConstants.ACCOUNT_SERVICE, fallbackFactory = InviteUserFallbackFactory.class) +public interface InviteUserClient { + + + /** + * 获取用户邀请数据 + * @param query + * @return + */ + @PostMapping("/t-invite-user/getInviteUser") + R<TInviteUser> getInviteUser(@RequestBody GetInviteUser query); + + + + + /** + * 修改用户邀请数据 + * @param query + * @return + */ + @PostMapping("/t-invite-user/updateInviteUser") + void updateInviteUser(@RequestBody TInviteUser query); + + + + /** + * 添加用户邀请数据 + * @param query + * @return + */ + @PostMapping("/t-invite-user/saveInviteUser") + void saveInviteUser(@RequestBody TInviteUser query); +} diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/GetInviteUser.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/GetInviteUser.java new file mode 100644 index 0000000..b20556b --- /dev/null +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/GetInviteUser.java @@ -0,0 +1,19 @@ +package com.ruoyi.account.api.vo; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2024/9/4 17:58 + */ +@Data +public class GetInviteUser { + /** + * 用户id + */ + private Long appUserId; + /** + * 被邀请用户id + */ + private Long beInvitedAppUserId; +} diff --git a/ruoyi-api/ruoyi-api-account/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-account/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index a0abd5c..d32b3a0 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-account/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -3,4 +3,5 @@ com.ruoyi.account.api.factory.AppUserCarFallbackFactory com.ruoyi.account.api.factory.AppUserIntegralChangeFallbackFactory com.ruoyi.account.api.factory.AppUserAddressFallbackFactory -com.ruoyi.account.api.factory.AppUserVipDetailFallbackFactory \ No newline at end of file +com.ruoyi.account.api.factory.AppUserVipDetailFallbackFactory +com.ruoyi.account.api.factory.InviteUserFallbackFactory \ No newline at end of file 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..32d4226 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 @@ -22,11 +24,6 @@ public AccountingStrategyDetailClient create(Throwable throwable) { log.error("计费策略调用失败:{}", throwable.getMessage()); return new AccountingStrategyDetailClient(){ - - @Override - public R<TAccountingStrategyDetail> getNowData(Integer accountingStrategyId) { - return R.fail("获取当前有效的计费策略明细失败:" + throwable.getMessage()); - } @Override public R<TAccountingStrategyDetail> getDetailBySiteId(Integer siteId) { @@ -42,6 +39,11 @@ public R<Boolean> checkChargingStrategy(CheckChargingStrategyDTO dto) { return R.fail("校验充电桩计费模版是否准确失败:" + throwable.getMessage()); } + + @Override + public R<List<TAccountingStrategyDetail>> getListByAccountingStrategyId(Integer id) { + throw new RuntimeException("根据计费策略主表id策略明细失败:" + throwable.getMessage()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyFallbackFactory.java new file mode 100644 index 0000000..108ab7d --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyFallbackFactory.java @@ -0,0 +1,32 @@ +package com.ruoyi.chargingPile.api.factory; + +import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyClient; +import com.ruoyi.chargingPile.api.model.TAccountingStrategy; +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 AccountingStrategyFallbackFactory implements FallbackFactory<AccountingStrategyClient> { + private static final Logger log = LoggerFactory.getLogger(AccountingStrategyFallbackFactory.class); + + + @Override + public AccountingStrategyClient create(Throwable throwable) { + log.error("计费策略调用失败:{}", throwable.getMessage()); + return new AccountingStrategyClient(){ + + + @Override + public R<TAccountingStrategy> getAccountingStrategyById(Integer id) { + throw new RuntimeException("根据id查询计费策略失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyClient.java new file mode 100644 index 0000000..5e1afee --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyClient.java @@ -0,0 +1,25 @@ +package com.ruoyi.chargingPile.api.feignClient; + +import com.ruoyi.chargingPile.api.factory.AccountingStrategyFallbackFactory; +import com.ruoyi.chargingPile.api.model.TAccountingStrategy; +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/9/4 15:51 + */ +@FeignClient(contextId = "AccountingStrategyClient", value = ServiceNameConstants.CHARGINGPILE_SERVICE, fallbackFactory = AccountingStrategyFallbackFactory.class) +public interface AccountingStrategyClient { + + /** + * 根据id查询计费策略 + * @param id + * @return + */ + @PostMapping("/t-accounting-strategy/getAccountingStrategyById") + R<TAccountingStrategy> getAccountingStrategyById(@RequestParam("id") Integer id); +} 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..b6a231a 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 @@ -18,13 +20,7 @@ public interface AccountingStrategyDetailClient { - /** - * 获取当前有效的计费策略明细 - * @param accountingStrategyId - * @return - */ - @PostMapping("/t-accounting-strategy-detail/getNowData") - R<TAccountingStrategyDetail> getNowData(@RequestParam("accountingStrategyId") Integer accountingStrategyId); + /** * 通过站点id查询当前时段使用的策略明细 * @param siteId @@ -46,4 +42,13 @@ */ @PostMapping("/t-accounting-strategy-detail/checkChargingStrategy") R<Boolean> checkChargingStrategy(@RequestBody CheckChargingStrategyDTO dto); + + + /** + * 根据计费策略主表id策略明细 + * @param id + * @return + */ + @PostMapping("/t-accounting-strategy-detail/getListByAccountingStrategyId") + R<List<TAccountingStrategyDetail>> getListByAccountingStrategyId(@RequestParam("id") Integer id); } 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 f015cf5..5e160da 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 @@ -2,4 +2,5 @@ com.ruoyi.chargingPile.api.factory.SiteFallbackFactory com.ruoyi.chargingPile.api.factory.ParkingLotFallbackFactory com.ruoyi.chargingPile.api.factory.ChargingGunFallbackFactory -com.ruoyi.chargingPile.api.factory.AccountingStrategyDetailFallbackFactory \ No newline at end of file +com.ruoyi.chargingPile.api.factory.AccountingStrategyDetailFallbackFactory +com.ruoyi.chargingPile.api.factory.AccountingStrategyFallbackFactory \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/AccountingStrategyDetailOrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/AccountingStrategyDetailOrderFallbackFactory.java new file mode 100644 index 0000000..d08a51c --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/AccountingStrategyDetailOrderFallbackFactory.java @@ -0,0 +1,37 @@ +package com.ruoyi.order.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.order.api.feignClient.AccountingStrategyDetailOrderClient; +import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient; +import com.ruoyi.order.api.model.AccountingStrategyDetailOrder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 充电订单服务降级处理 + * + * @author ruoyi + */ +@Component +public class AccountingStrategyDetailOrderFallbackFactory implements org.springframework.cloud.openfeign.FallbackFactory<AccountingStrategyDetailOrderClient> +{ + private static final Logger log = LoggerFactory.getLogger(AccountingStrategyDetailOrderFallbackFactory.class); + + @Override + public AccountingStrategyDetailOrderClient create(Throwable throwable) { + log.error("计费策略调用失败:{}", throwable.getMessage()); + return new AccountingStrategyDetailOrderClient() { + + + @Override + public R<AccountingStrategyDetailOrder> getNowAccountingStrategyDetailOrder(Long orderId) { + return R.fail("根据订单id获取当前有效的策略失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java index 64b0022..688bc7f 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java @@ -73,6 +73,11 @@ public R<TChargingOrder> getOrderByCode(String code) { return R.fail("通过流水号查询订单调用失败:" + throwable.getMessage()); } + + @Override + public void endCharge(String code) { + + } }; } } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/AccountingStrategyDetailOrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/AccountingStrategyDetailOrderClient.java new file mode 100644 index 0000000..dd73fbc --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/AccountingStrategyDetailOrderClient.java @@ -0,0 +1,26 @@ +package com.ruoyi.order.api.feignClient; + +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.order.api.factory.AccountingStrategyDetailOrderFallbackFactory; +import com.ruoyi.order.api.model.AccountingStrategyDetailOrder; +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/9/4 16:11 + */ +@FeignClient(contextId = "AccountingStrategyDetailOrderClient", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = AccountingStrategyDetailOrderFallbackFactory.class) +public interface AccountingStrategyDetailOrderClient { + + + /** + * 根据订单id获取当前有效的策略 + * @param orderId + * @return + */ + @PostMapping("/accountingStrategyDetailOrder/getNowAccountingStrategyDetailOrder") + R<AccountingStrategyDetailOrder> getNowAccountingStrategyDetailOrder(@RequestParam("orderId") Long orderId); +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java index 6077804..db4dbb1 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java @@ -75,4 +75,12 @@ */ @PostMapping(value = "/t-charging-order/getOrderByCode/{code}") R<TChargingOrder> getOrderByCode(@PathVariable("code") String code); + + + /** + * 充电解释后处理逻辑 + * @param code + */ + @PostMapping("/t-charging-order/endCharge") + void endCharge(@RequestParam("code") String code); } diff --git a/ruoyi-api/ruoyi-api-order/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-order/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 1a46e82..d5bf5d5 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-order/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,4 +1,5 @@ com.ruoyi.order.api.factory.ChargingOrderFallbackFactory com.ruoyi.order.api.factory.OrderFallbackFactory com.ruoyi.order.api.factory.ExchangeOrderFallbackFactory -com.ruoyi.order.api.factory.ChargingOrderAccountingStrategyFallbackFactory \ No newline at end of file +com.ruoyi.order.api.factory.ChargingOrderAccountingStrategyFallbackFactory +com.ruoyi.order.api.factory.AccountingStrategyDetailOrderFallbackFactory \ No newline at end of file diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInviteUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInviteUserController.java index a9d9cd4..cb1aa05 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInviteUserController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInviteUserController.java @@ -1,8 +1,17 @@ package com.ruoyi.account.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.account.api.model.TInviteUser; +import com.ruoyi.account.api.vo.GetInviteUser; +import com.ruoyi.account.service.TInviteUserService; +import com.ruoyi.common.core.domain.R; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; /** * <p> @@ -15,6 +24,43 @@ @RestController @RequestMapping("/t-invite-user") public class TInviteUserController { - + + @Resource + private TInviteUserService inviteUserService; + + + + + /** + * 获取用户邀请数据 + * @param query + * @return + */ + @PostMapping("/getInviteUser") + public R<TInviteUser> getInviteUser(@RequestBody GetInviteUser query){ + TInviteUser one = inviteUserService.getOne(new LambdaQueryWrapper<TInviteUser>().eq(TInviteUser::getAppUserId, query.getBeInvitedAppUserId()) + .eq(TInviteUser::getBeInvitedAppUserId, query.getBeInvitedAppUserId())); + return R.ok(one); + } + + + /** + * 修改邀请数据 + * @param query + */ + @PostMapping("/updateInviteUser") + public void updateInviteUser(@RequestBody TInviteUser query){ + inviteUserService.updateById(query); + } + + + /** + * 添加邀请数据 + * @param query + */ + @PostMapping("/saveInviteUser") + public void saveInviteUser(@RequestBody TInviteUser query){ + inviteUserService.save(query); + } } 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 ed71ef3..dd60b9e 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 @@ -405,5 +405,18 @@ return R.ok(res); } + + + /** + * 根据id查询数据 + * @param id + * @return + */ + @PostMapping(value = "/getAccountingStrategyById") + public R<TAccountingStrategy> getAccountingStrategyById(@RequestParam("id") Integer id) { + TAccountingStrategy accountingStrategy = accountingStrategyService.getById(id); + return R.ok(accountingStrategy); + } + } 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..100cca8 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 @@ -84,18 +84,7 @@ } - /** - * 获取当前有效的计费模板 - * @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); - } + /** * 通过站点id查询当前时段使用的策略明细 @@ -153,5 +142,17 @@ .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time")); return R.ok(dto.getStrategyDetailId().equals(one.getId())); } + + + /** + * 根据计费策略主表id策略明细 + * @param id + * @return + */ + @PostMapping("/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); + } } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java index c6a325b..819768c 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java @@ -11,12 +11,15 @@ import com.ruoyi.integration.rocket.model.EndChargeMessage; import com.ruoyi.integration.rocket.model.PingMessage; import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; +import com.ruoyi.order.api.feignClient.ChargingOrderClient; 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 javax.annotation.Resource; @Slf4j @Component @@ -34,6 +37,12 @@ private MessageUtil messageUtil; @Autowired private IotMessageProduce iotMessageProduce; + + @Resource + private ChargingOrderClient chargingOrderClient; + + + @Override protected void handleMessage(EndChargeMessage message) throws Exception { // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 @@ -43,6 +52,7 @@ BeanUtils.copyProperties(message,endCharge); endChargeService.create(endCharge); // 业务处理 + chargingOrderClient.endCharge(endCharge.getTransaction_serial_number()); } @Override diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/AccountingStrategyDetailOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/AccountingStrategyDetailOrderController.java new file mode 100644 index 0000000..ce14d4a --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/AccountingStrategyDetailOrderController.java @@ -0,0 +1,39 @@ +package com.ruoyi.order.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.order.api.model.AccountingStrategyDetailOrder; +import com.ruoyi.order.service.AccountingStrategyDetailOrderService; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @author zhibing.pu + * @Date 2024/9/4 16:17 + */ +@RestController +@RequestMapping("/accountingStrategyDetailOrder") +public class AccountingStrategyDetailOrderController { + + @Resource + private AccountingStrategyDetailOrderService accountingStrategyDetailOrderService; + + + /** + * 根据订单id获取当前有效的策略 + * @param orderId + * @return + */ + @PostMapping("/getNowAccountingStrategyDetailOrder") + public R<AccountingStrategyDetailOrder> getNowAccountingStrategyDetailOrder(@RequestParam("orderId") Long orderId){ + AccountingStrategyDetailOrder one = accountingStrategyDetailOrderService.getOne(new LambdaQueryWrapper<AccountingStrategyDetailOrder>() + .eq(AccountingStrategyDetailOrder::getChargingOrderId, orderId) + .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/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java index a0e24bb..4c1927c 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java @@ -784,5 +784,16 @@ return resultList; } + + + /** + * 硬件充电结束后的处理逻辑 + * @param code + */ + @PostMapping("/endCharge") + public void endCharge(@RequestParam("code") String code){ + chargingOrderService.endCharge(code); + } + } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyDetailOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyDetailOrderMapper.java new file mode 100644 index 0000000..f40366d --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyDetailOrderMapper.java @@ -0,0 +1,11 @@ +package com.ruoyi.order.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.order.api.model.AccountingStrategyDetailOrder; + +/** + * @author zhibing.pu + * @Date 2024/9/4 15:42 + */ +public interface AccountingStrategyDetailOrderMapper extends BaseMapper<AccountingStrategyDetailOrder> { +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyOrderMapper.java new file mode 100644 index 0000000..db0c466 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyOrderMapper.java @@ -0,0 +1,11 @@ +package com.ruoyi.order.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.order.api.model.AccountingStrategyOrder; + +/** + * @author zhibing.pu + * @Date 2024/9/4 15:37 + */ +public interface AccountingStrategyOrderMapper extends BaseMapper<AccountingStrategyOrder> { +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/AccountingStrategyDetailOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/AccountingStrategyDetailOrderService.java new file mode 100644 index 0000000..dc430bb --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/AccountingStrategyDetailOrderService.java @@ -0,0 +1,11 @@ +package com.ruoyi.order.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.order.api.model.AccountingStrategyDetailOrder; + +/** + * @author zhibing.pu + * @Date 2024/9/4 15:41 + */ +public interface AccountingStrategyDetailOrderService extends IService<AccountingStrategyDetailOrder> { +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/AccountingStrategyOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/AccountingStrategyOrderService.java new file mode 100644 index 0000000..41e4657 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/AccountingStrategyOrderService.java @@ -0,0 +1,11 @@ +package com.ruoyi.order.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.order.api.model.AccountingStrategyOrder; + +/** + * @author zhibing.pu + * @Date 2024/9/4 15:36 + */ +public interface AccountingStrategyOrderService extends IService<AccountingStrategyOrder> { +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java index df5281e..fabf133 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java @@ -17,6 +17,7 @@ import com.ruoyi.order.dto.*; import com.ruoyi.order.vo.ChargingOrderListInfoVO; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; import java.math.BigDecimal; import java.time.LocalDate; @@ -140,4 +141,11 @@ * @param query */ void chargeMonitoring(UploadRealTimeMonitoringDataQuery query); + + + /** + * 自动结束充电后的处理逻辑 + * @param code + */ + void endCharge(String code); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/AccountingStrategyDetailOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/AccountingStrategyDetailOrderServiceImpl.java new file mode 100644 index 0000000..ae06c37 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/AccountingStrategyDetailOrderServiceImpl.java @@ -0,0 +1,15 @@ +package com.ruoyi.order.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.order.api.model.AccountingStrategyDetailOrder; +import com.ruoyi.order.mapper.AccountingStrategyDetailOrderMapper; +import com.ruoyi.order.service.AccountingStrategyDetailOrderService; +import org.springframework.stereotype.Service; + +/** + * @author zhibing.pu + * @Date 2024/9/4 15:42 + */ +@Service +public class AccountingStrategyDetailOrderServiceImpl extends ServiceImpl<AccountingStrategyDetailOrderMapper, AccountingStrategyDetailOrder> implements AccountingStrategyDetailOrderService { +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/AccountingStrategyOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/AccountingStrategyOrderServiceImpl.java new file mode 100644 index 0000000..44de5c8 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/AccountingStrategyOrderServiceImpl.java @@ -0,0 +1,15 @@ +package com.ruoyi.order.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.order.api.model.AccountingStrategyOrder; +import com.ruoyi.order.mapper.AccountingStrategyOrderMapper; +import com.ruoyi.order.service.AccountingStrategyOrderService; +import org.springframework.stereotype.Service; + +/** + * @author zhibing.pu + * @Date 2024/9/4 15:36 + */ +@Service +public class AccountingStrategyOrderServiceImpl extends ServiceImpl<AccountingStrategyOrderMapper, AccountingStrategyOrder> implements AccountingStrategyOrderService { +} 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 77bf7a4..ea7bafb 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 @@ -1,27 +1,17 @@ package com.ruoyi.order.service.impl; import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ruoyi.account.api.feignClient.AppCouponClient; -import com.ruoyi.account.api.feignClient.AppUserCarClient; -import com.ruoyi.account.api.feignClient.AppUserClient; -import com.ruoyi.account.api.feignClient.AppUserVipDetailClient; -import com.ruoyi.account.api.model.TAppCoupon; -import com.ruoyi.account.api.model.TAppUser; -import com.ruoyi.account.api.model.TAppUserCar; -import com.ruoyi.account.api.model.TAppUserVipDetail; +import com.ruoyi.account.api.feignClient.*; +import com.ruoyi.account.api.model.*; 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.account.api.vo.GetInviteUser; +import com.ruoyi.chargingPile.api.feignClient.*; +import com.ruoyi.chargingPile.api.model.*; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.dto.ChargingOrderGroup; import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; @@ -42,6 +32,7 @@ import com.ruoyi.integration.api.feignClient.*; import com.ruoyi.integration.api.model.*; import com.ruoyi.integration.api.vo.GetPlatformStopChargingReply; +import com.ruoyi.order.api.feignClient.AccountingStrategyDetailOrderClient; import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient; import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.query.ChargingOrderQuery; @@ -52,13 +43,12 @@ import com.ruoyi.order.api.vo.TCharingOrderVO; import com.ruoyi.order.dto.*; import com.ruoyi.order.mapper.TChargingOrderMapper; -import com.ruoyi.order.service.TChargingOrderAccountingStrategyService; -import com.ruoyi.order.service.TChargingOrderRefundService; -import com.ruoyi.order.service.TChargingOrderService; -import com.ruoyi.order.service.TOrderEvaluateService; +import com.ruoyi.order.service.*; import com.ruoyi.other.api.domain.TCoupon; import com.ruoyi.other.api.domain.TGoods; import com.ruoyi.order.vo.ChargingOrderListInfoVO; +import com.ruoyi.other.api.domain.TIntegralRule; +import com.ruoyi.other.api.feignClient.IntegralRuleClient; import com.ruoyi.other.api.feignClient.RoleSiteClient; import com.ruoyi.other.api.feignClient.UserSiteClient; import com.ruoyi.payment.api.feignClient.AliPaymentClient; @@ -71,6 +61,8 @@ import com.ruoyi.system.api.feignClient.SysUserClient; import io.seata.spring.annotation.GlobalTransactional; import io.swagger.annotations.ApiModelProperty; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -100,6 +92,8 @@ */ @Service public class TChargingOrderServiceImpl extends ServiceImpl<TChargingOrderMapper, TChargingOrder> implements TChargingOrderService { + + private Logger log = LoggerFactory.getLogger(TChargingOrderServiceImpl.class); @Resource private ChargingGunClient chargingGunClient; @@ -155,6 +149,12 @@ private AccountingStrategyDetailClient accountingStrategyDetailClient; @Resource + private AccountingStrategyDetailOrderClient accountingStrategyDetailOrderClient; + + @Resource + private AccountingStrategyClient accountingStrategyClient; + + @Resource private PlatformStartChargingReplyClient platformStartChargingReplyClient; @Resource @@ -162,6 +162,21 @@ @Resource private PlatformStopChargingReplyClient platformStopChargingReplyClient; + + @Resource + private AccountingStrategyOrderService accountingStrategyOrderService; + + @Resource + private AccountingStrategyDetailOrderService accountingStrategyDetailOrderService; + + @Resource + private InviteUserClient inviteUserClient; + + @Resource + private AppUserIntegralChangeClient appUserIntegralChangeClient; + + @Resource + private IntegralRuleClient integralRuleClient; //计数器 private Map<String, Integer> counter_map = new HashMap<>(); @@ -426,9 +441,25 @@ chargingOrder.setVipDiscountAmount(discountAmount); } } - } this.save(chargingOrder); + + //添加订单的计费策略 + TAccountingStrategy accountingStrategy = accountingStrategyClient.getAccountingStrategyById(tChargingGun.getAccountingStrategyId()).getData(); + List<TAccountingStrategyDetail> strategyDetailList = accountingStrategyDetailClient.getListByAccountingStrategyId(tChargingGun.getAccountingStrategyId()).getData(); + AccountingStrategyOrder accountingStrategyOrder = new AccountingStrategyOrder(); + BeanUtils.copyProperties(accountingStrategy, accountingStrategyOrder); + accountingStrategyOrder.setChargingOrderId(chargingOrder.getId()); + accountingStrategyOrderService.save(accountingStrategyOrder); + List<AccountingStrategyDetailOrder> list1 = new ArrayList<>(); + for (TAccountingStrategyDetail tAccountingStrategyDetail : strategyDetailList) { + AccountingStrategyDetailOrder accountingStrategyDetailOrder = new AccountingStrategyDetailOrder(); + BeanUtils.copyProperties(tAccountingStrategyDetail, accountingStrategyDetailOrder); + accountingStrategyDetailOrder.setChargingOrderId(chargingOrder.getId()); + list1.add(accountingStrategyDetailOrder); + } + accountingStrategyDetailOrderService.saveBatch(list1); + //会员优惠折扣将其计入增加充电时长(增加总充电金额) //如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额) if(1 == addChargingOrder.getPaymentType()){ @@ -490,7 +521,7 @@ BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); //计算充电金额,会员需要将折扣金额加入到充电总金额中 TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); - TAccountingStrategyDetail strategyDetail = accountingStrategyDetailClient.getNowData(chargingGun.getAccountingStrategyId()).getData(); + AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderClient.getNowAccountingStrategyDetailOrder(chargingOrder.getId()).getData(); //总单价 BigDecimal totalUnitPrice = strategyDetail.getServiceCharge().add(strategyDetail.getElectrovalence()); //计算能充电的度数 @@ -713,6 +744,7 @@ * @return */ @Override + @GlobalTransactional(rollbackFor = Exception.class) public AjaxResult stopCharging(String id) { TChargingOrder chargingOrder = this.getById(id); Integer status = chargingOrder.getStatus(); @@ -722,51 +754,98 @@ chargingOrder.setStatus(4); chargingOrder.setEndMode(1); this.updateById(chargingOrder); - //调用硬件停止充电,停止成功后开始计算费用退款 - TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingOrder.getChargingPileId()).getData(); - TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); - PlatformStopCharging platformStopCharging = new PlatformStopCharging(); - platformStopCharging.setCharging_pile_code(chargingPile.getCode()); - platformStopCharging.setCharging_gun_code(chargingGun.getCode()); - sendMessageClient.platformStopCharging(platformStopCharging); - //开始查询停机应答,成功后开始计费费用 - for (int i = 0; i < 60; i++) { - GetPlatformStopChargingReply query = new GetPlatformStopChargingReply(); - query.setCharging_gun_code(chargingGun.getCode()); - query.setCharging_pile_code(chargingPile.getCode()); - PlatformStopChargingReply reply = platformStopChargingReplyClient.getPlatformStopChargingReply(query).getData(); - if(null == reply){ - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - throw new RuntimeException(e); + + //异步线程处理停机 + ExecutorService cachedThreadPool = Executors.newFixedThreadPool(1); + cachedThreadPool.execute(()->{ + //调用硬件停止充电,停止成功后开始计算费用退款 + TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingOrder.getChargingPileId()).getData(); + TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); + PlatformStopCharging platformStopCharging = new PlatformStopCharging(); + platformStopCharging.setCharging_pile_code(chargingPile.getCode()); + platformStopCharging.setCharging_gun_code(chargingGun.getCode()); + sendMessageClient.platformStopCharging(platformStopCharging); + //开始查询停机应答,成功后开始计费费用 + for (int i = 0; i < 60; i++) { + GetPlatformStopChargingReply query = new GetPlatformStopChargingReply(); + query.setCharging_gun_code(chargingGun.getCode()); + query.setCharging_pile_code(chargingPile.getCode()); + PlatformStopChargingReply reply = platformStopChargingReplyClient.getPlatformStopChargingReply(query).getData(); + if(null == reply){ + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + continue; } - continue; - } - - if(0 == reply.getStop_result()){ - String failure_cause = ""; - switch (reply.getFailure_cause()){ - case 0: - failure_cause = "无"; - break; - case 1: - failure_cause = "设备编号不匹配"; - break; - case 2: - failure_cause = "枪未处于充电状态"; - break; - case 3: - failure_cause = "其他"; - break; + + if(0 == reply.getStop_result()){ + String failure_cause = ""; + switch (reply.getFailure_cause()){ + case 0: + failure_cause = "无"; + break; + case 1: + failure_cause = "设备编号不匹配"; + break; + case 2: + failure_cause = "枪未处于充电状态"; + break; + case 3: + failure_cause = "其他"; + break; + } + log.error("停机失败:订单号:{},失败原因:{}", chargingOrder.getCode(), failure_cause); + throw new RuntimeException(failure_cause); } - throw new RuntimeException(failure_cause); + + //计算费用,处理退款 + endCharge(chargingOrder); + break; } + }); + + + //处理推荐奖励(被推荐首单奖励) + TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); + long count = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId()) + .eq(TChargingOrder::getStatus, 5).isNull(TChargingOrder::getEndMode).eq(TChargingOrder::getDelFlag, 0)); + if(null != appUser.getInviteUserId() && 1 == count){ + TIntegralRule integralRule = integralRuleClient.getSet().getData(); + String inviteUsersToEarnPoints = integralRule.getInviteUsersToEarnPoints(); + JSONObject jsonObject = JSON.parseObject(inviteUsersToEarnPoints); + Integer num1 = jsonObject.getInteger("num1"); + GetInviteUser query = new GetInviteUser(); + query.setAppUserId(appUser.getInviteUserId()); + query.setBeInvitedAppUserId(chargingOrder.getAppUserId()); + TInviteUser inviteUser = inviteUserClient.getInviteUser(query).getData(); + if(null == inviteUser){ + inviteUser = new TInviteUser(); + inviteUser.setAppUserId(appUser.getInviteUserId()); + inviteUser.setBeInvitedAppUserId(chargingOrder.getAppUserId()); + inviteUser.setAward(num1); + inviteUser.setCreateTime(LocalDateTime.now()); + inviteUserClient.saveInviteUser(inviteUser); + }else{ + inviteUser.setAward(num1); + inviteUserClient.updateInviteUser(inviteUser); + } + TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData(); + TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); + String code = Math.random() * 1000 + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); + appUserIntegralChange.setCode(code); + appUserIntegralChange.setAppUserId(appUser.getInviteUserId()); + appUserIntegralChange.setChangeType(5); + appUserIntegralChange.setHistoricalIntegral(appUser1.getPoints()); + appUserIntegralChange.setCurrentIntegral(appUser1.getPoints() + num1); + appUserIntegralChange.setCreateTime(LocalDateTime.now()); + appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); - //计算费用,处理退款 - endCharge(chargingOrder); - break; + appUser1.setPoints(appUser1.getPoints() + num1); + appUserClient.updateAppUser(appUser1); } + return AjaxResult.success(); } @@ -798,6 +877,14 @@ chargingOrder.setOrderAmount(total); } + if(chargingOrder.getEndMode() != 1){ + chargingOrder.setEndMode(refundAmount.compareTo(BigDecimal.ZERO) > 0 ? 2 : 3); + } + chargingOrder.setStatus(5); + chargingOrder.setPaymentAmount(payAmount); + this.updateById(chargingOrder); + + //计算优惠券 if(null != chargingOrder.getAppCouponId()){ //判断实际充电金额是否满足优惠券使用条件,如果不满足则不适用优惠券。 TAppCoupon appCoupon = appCouponClient.getAppCouponById(chargingOrder.getAppCouponId()).getData(); @@ -838,9 +925,6 @@ chargingOrder.setVipDiscountAmount(subtract); payAmount = payAmount.subtract(subtract); } - chargingOrder.setPaymentAmount(payAmount); - this.updateById(chargingOrder); - //开始构建退款费用 if(refundAmount.compareTo(BigDecimal.ZERO) > 0){ Integer rechargePaymentType = chargingOrder.getRechargePaymentType(); @@ -1307,8 +1391,7 @@ if(com.ruoyi.common.core.utils.StringUtils.isNotEmpty(query.getCharging_gun_code())){ //获取当前的计费策略 TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, query.getCharging_gun_code())); - TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); - TAccountingStrategyDetail strategyDetail = accountingStrategyDetailClient.getNowData(chargingGun.getAccountingStrategyId()).getData(); + AccountingStrategyDetailOrder strategyDetail = accountingStrategyDetailOrderClient.getNowAccountingStrategyDetailOrder(chargingOrder.getId()).getData(); TChargingOrderAccountingStrategy chargingOrderAccountingStrategy = chargingOrderAccountingStrategyService.getOne(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>() .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()).orderByDesc(TChargingOrderAccountingStrategy::getCreateTime).last(" limit 0, 1")); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); @@ -1397,4 +1480,64 @@ this.updateById(chargingOrder); } } + + + /** + * 自动结束充电后的处理逻辑 + * @param orderCode + */ + @Override + @GlobalTransactional(rollbackFor = Exception.class) + public void endCharge(String orderCode) { + TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, orderCode)); + Integer status = chargingOrder.getStatus(); + if(status == 4 || status == 5){ + return; + } + chargingOrder.setStatus(5); + chargingOrder.setEndMode(2); + this.updateById(chargingOrder); + + //计算费用,处理退款 + endCharge(chargingOrder); + + //处理推荐奖励(被推荐首单奖励) + TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); + long count = this.count(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserId, chargingOrder.getAppUserId()) + .eq(TChargingOrder::getStatus, 5).isNull(TChargingOrder::getEndMode).eq(TChargingOrder::getDelFlag, 0)); + if(null != appUser.getInviteUserId() && 1 == count){ + TIntegralRule integralRule = integralRuleClient.getSet().getData(); + String inviteUsersToEarnPoints = integralRule.getInviteUsersToEarnPoints(); + JSONObject jsonObject = JSON.parseObject(inviteUsersToEarnPoints); + Integer num1 = jsonObject.getInteger("num1"); + GetInviteUser query = new GetInviteUser(); + query.setAppUserId(appUser.getInviteUserId()); + query.setBeInvitedAppUserId(chargingOrder.getAppUserId()); + TInviteUser inviteUser = inviteUserClient.getInviteUser(query).getData(); + if(null == inviteUser){ + inviteUser = new TInviteUser(); + inviteUser.setAppUserId(appUser.getInviteUserId()); + inviteUser.setBeInvitedAppUserId(chargingOrder.getAppUserId()); + inviteUser.setAward(num1); + inviteUser.setCreateTime(LocalDateTime.now()); + inviteUserClient.saveInviteUser(inviteUser); + }else{ + inviteUser.setAward(num1); + inviteUserClient.updateInviteUser(inviteUser); + } + TAppUser appUser1 = appUserClient.getUserById(appUser.getInviteUserId()).getData(); + TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange(); + String code = Math.random() * 1000 + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")); + appUserIntegralChange.setCode(code); + appUserIntegralChange.setAppUserId(appUser.getInviteUserId()); + appUserIntegralChange.setChangeType(5); + appUserIntegralChange.setHistoricalIntegral(appUser1.getPoints()); + appUserIntegralChange.setCurrentIntegral(appUser1.getPoints() + num1); + appUserIntegralChange.setCreateTime(LocalDateTime.now()); + appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange); + + appUser1.setPoints(appUser1.getPoints() + num1); + appUserClient.updateAppUser(appUser1); + } + } } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java index fdb077d..fea0c6d 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java @@ -16,19 +16,13 @@ import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.service.TokenService; -import com.ruoyi.order.api.model.TChargingOrder; -import com.ruoyi.order.api.model.TOrderInvoice; -import com.ruoyi.order.api.model.TOrderInvoiceDetail; -import com.ruoyi.order.api.model.TShoppingOrder; +import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.query.TOrderInvoiceQuery; import com.ruoyi.order.api.vo.TOrderEvaluateVO; import com.ruoyi.order.api.vo.TOrderInvoiceVO; import com.ruoyi.order.dto.*; import com.ruoyi.order.mapper.TOrderInvoiceMapper; -import com.ruoyi.order.service.TChargingOrderService; -import com.ruoyi.order.service.TOrderInvoiceDetailService; -import com.ruoyi.order.service.TOrderInvoiceService; -import com.ruoyi.order.service.TShoppingOrderService; +import com.ruoyi.order.service.*; import com.ruoyi.other.api.domain.TCoupon; import com.ruoyi.other.api.domain.TGoods; import com.ruoyi.other.api.domain.TInvoiceType; @@ -86,6 +80,9 @@ private CouponClient couponClient; @Resource private AppUserClient appUserClient; + + @Resource + private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService; @@ -128,6 +125,11 @@ //获取开票类型 TInvoiceType invoiceType = invoiceTypeClient.getInvoiceType(addOrderInvoice.getInvoiceTypeId()).getData(); for (Long orderId : orderIds) { + List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>() + .eq(TChargingOrderAccountingStrategy::getChargingOrderId, orderId)); + BigDecimal electrovalence = list.stream().map(TChargingOrderAccountingStrategy::getElectrovalence).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal serviceCharge = list.stream().map(TChargingOrderAccountingStrategy::getServiceCharge).reduce(BigDecimal.ZERO, BigDecimal::add); + TOrderInvoiceDetail orderInvoiceDetail = new TOrderInvoiceDetail(); orderInvoiceDetail.setOrderInvoiceId(addOrderInvoice.getId()); orderInvoiceDetail.setInvoiceAmount(map.get(orderId)); @@ -136,6 +138,9 @@ orderInvoiceDetail.setElectricityTariff(invoiceType.getElectricityTariff()); orderInvoiceDetail.setServiceTariff(invoiceType.getServiceTariff()); orderInvoiceDetail.setAddedServiceTariff(invoiceType.getAddedServiceTariff()); + orderInvoiceDetail.setElectrovalence(electrovalence); + orderInvoiceDetail.setServiceCharge(serviceCharge); + orderInvoiceDetail.setAddedService(serviceCharge.multiply(invoiceType.getAddedServiceTariff().divide(new BigDecimal(100)))); orderInvoiceDetailService.save(orderInvoiceDetail); } return AjaxResult.success(); diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/AccountingStrategyDetailOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/AccountingStrategyDetailOrderMapper.xml new file mode 100644 index 0000000..3408020 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/AccountingStrategyDetailOrderMapper.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.order.mapper.AccountingStrategyDetailOrderMapper"> + + <!-- 通用查询映射结果 --> + <resultMap id="BaseResultMap" type="com.ruoyi.order.api.model.AccountingStrategyDetailOrder"> + <id column="id" property="id" /> + <result column="accounting_strategy_id" property="accountingStrategyId" /> + <result column="`type`" property="type" /> + <result column="start_time" property="startTime" /> + <result column="end_time" property="endTime" /> + <result column="electrovalence" property="electrovalence" /> + <result column="service_charge" property="serviceCharge" /> + <result column="cost_service_charge" property="costServiceCharge" /> + </resultMap> + +</mapper> \ No newline at end of file diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/AccountingStrategyOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/AccountingStrategyOrderMapper.xml new file mode 100644 index 0000000..2d6f00c --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/AccountingStrategyOrderMapper.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.order.mapper.AccountingStrategyOrderMapper"> + + <!-- 通用查询映射结果 --> + <resultMap id="BaseResultMap" type="com.ruoyi.order.api.model.AccountingStrategyOrder"> + <id column="id" property="id" /> + <result column="site_id" property="siteId" /> + <result column="`name`" property="name" /> + <result column="description" property="description" /> + <result column="discount" property="discount" /> + <result column="first_user_id" property="firstUserId" /> + <result column="two_user_id" property="twoUserId" /> + <result column="first_remark" property="firstRemark" /> + <result column="two_remark" property="twoRemark" /> + <result column="audit_status" property="auditStatus" /> + <result column="first_audit_time" property="firstAuditTime" /> + <result column="two_audit_time" property="twoAuditTime" /> + <result column="create_time" property="createTime" /> + <result column="del_flag" property="delFlag" /> + </resultMap> + +</mapper> \ No newline at end of file -- Gitblit v1.7.1