From cfc72c5a140e6f3dd750b28b9566c64c713806bc Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期四, 05 九月 2024 13:50:25 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 544 +++++++ ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java | 16 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BmsAbortMessageListener.java | 10 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TRepair.java | 6 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/AccountingStrategyOrderServiceImpl.java | 15 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppCoupon.java | 3 ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/AccountingStrategyDetailOrderClient.java | 26 ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java | 83 + ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TRepairService.java | 13 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java | 29 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java | 7 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml | 128 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderDto.java | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/OrderInvoiceExport.java | 79 + ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml | 1 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/AccountingStrategyDetailOrderServiceImpl.java | 15 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java | 13 ruoyi-service/ruoyi-order/pom.xml | 12 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/PlatformStopChargingReplyController.java | 34 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java | 102 + ruoyi-api/ruoyi-api-account/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java | 15 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java | 12 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/TimingSettingMessage.java | 17 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderVO.java | 5 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java | 19 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java | 1 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyOrderMapper.java | 11 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java | 16 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java | 24 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/controller/AccountingStrategyDetailOrderController.java | 39 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java | 25 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java | 10 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java | 29 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java | 7 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TFaultMessageMapper.java | 13 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java | 50 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyDetailOrderMapper.java | 11 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java | 271 ++++ ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java | 8 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppCouponFallbackFactory.java | 6 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/AccountingStrategyOrder.java | 81 + ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInviteUserController.java | 48 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java | 18 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IntegrationClient.java | 4 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java | 91 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingListQuery.java | 32 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/AccountingStrategyDetailOrderFallbackFactory.java | 37 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStopChargingReplyService.java | 8 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java | 46 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java | 5 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java | 43 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TRepairMapper.xml | 19 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/PlatformStopChargingReplyClient.java | 27 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserRoleController.java | 33 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java | 12 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/InviteUserFallbackFactory.java | 43 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java | 2 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/InviteUserClient.java | 48 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TRepairServiceImpl.java | 21 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java | 6 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/GetInviteUser.java | 19 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/CP56Time2aConverter.java | 39 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/SysUserRoleVo.java | 49 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java | 6 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoiceDetail.java | 10 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderInvoiceQuery.java | 41 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java | 27 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IntegrationFallbackFactory.java | 8 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/AccountingStrategyDetailOrderService.java | 11 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/CheckChargingStrategyDTO.java | 19 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml | 1 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStopChargingReplyFallbackFactory.java | 35 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillVO.java | 33 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java | 36 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingLot.java | 12 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/MotorAbortMessageListener.java | 11 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderInvoiceMapper.java | 29 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java | 15 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TFaultMessageMapper.xml | 16 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java | 13 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingMessageListener.java | 93 + ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserRoleFallbackFactory.java | 26 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java | 11 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java | 15 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderInvoiceVO.java | 31 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BillingModeVerifyMessageListener.java | 36 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TransactionRecordMessageListener.java | 12 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java | 7 ruoyi-service/ruoyi-integration/pom.xml | 4 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceMapper.xml | 110 + ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java | 8 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java | 45 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java | 20 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 | 98 + ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderInvoiceService.java | 26 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java | 21 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java | 15 ruoyi-api/ruoyi-api-order/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java | 28 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ChargingOrderListInfoVO.java | 13 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/AccountingStrategyDetailOrder.java | 53 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java | 98 + ruoyi-service/ruoyi-order/src/main/resources/mapper/order/AccountingStrategyDetailOrderMapper.xml | 17 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppCouponClient.java | 17 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyDetailMapper.xml | 4 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyClient.java | 25 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceDetailMapper.xml | 5 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserRoleClient.java | 28 ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 1 /dev/null | 78 - ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderAccountingStrategy.java | 13 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingBillQuery.java | 37 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java | 28 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java | 11 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/AccountingStrategyOrderMapper.xml | 23 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderQueryDto.java | 5 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java | 7 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TFaultMessageService.java | 12 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java | 6 124 files changed, 3,569 insertions(+), 354 deletions(-) diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppCouponFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppCouponFallbackFactory.java index fb8ff40..ab1d385 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppCouponFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppCouponFallbackFactory.java @@ -3,6 +3,7 @@ import com.ruoyi.account.api.dto.GrantCouponDto; import com.ruoyi.account.api.feignClient.AppCouponClient; import com.ruoyi.account.api.feignClient.AppUserClient; +import com.ruoyi.account.api.model.TAppCoupon; import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery; import com.ruoyi.account.api.vo.ExchangeRecordVO; import com.ruoyi.common.core.domain.R; @@ -53,6 +54,11 @@ public R refund(String id) { return R.fail("后台退款 退回优惠券失败:"+throwable.getMessage()); } + + @Override + public R<TAppCoupon> getAppCouponById(Long id) { + return R.fail("根据id获取优惠券领取记录失败:" + throwable.getMessage()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java index 71dc82f..ab00b84 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java @@ -64,6 +64,11 @@ } @Override + public R<List<TAppUser>> selectByPhoneLike(String phone) { + return R.fail("通过手机号模糊查询用户失败:"+throwable.getMessage()); + } + + @Override public R refundPoints(String param) { return R.fail("后台兑换订单退款回退用户积分失败:"+throwable.getMessage()); } 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/AppCouponClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppCouponClient.java index a2d36ea..00990ee 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppCouponClient.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppCouponClient.java @@ -3,6 +3,7 @@ import com.ruoyi.account.api.dto.GrantCouponDto; import com.ruoyi.account.api.factory.AppCouponFallbackFactory; import com.ruoyi.account.api.factory.AppUserFallbackFactory; +import com.ruoyi.account.api.model.TAppCoupon; import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery; import com.ruoyi.account.api.vo.ExchangeRecordVO; import com.ruoyi.common.core.constant.ServiceNameConstants; @@ -12,6 +13,7 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -46,7 +48,18 @@ * 后台远程调用 给用户发放优惠券 */ @PostMapping("/t-app-coupon/grantCoupon") - R grantCoupon(@RequestBody GrantCouponDto dto); + R grantCoupon(@RequestBody GrantCouponDto dto); + + @PostMapping(value = "/t-app-coupon/refund/{id}") - R refund(@PathVariable("id") String id); + R refund(@PathVariable("id") String id); + + + /** + * 根据id获取优惠券领取记录 + * @param id + * @return + */ + @PostMapping(value = "/t-app-coupon/getAppCouponById") + R<TAppCoupon> getAppCouponById(@RequestParam("id") Long id); } diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java index f7c1da1..f52c5d9 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java @@ -69,6 +69,13 @@ @GetMapping("/t-app-user/user/selectByPhone") R<TAppUser> selectByPhone(@RequestParam("phone") String phone); /** + * 通过手机号模糊查询用户 + * @param phone + * @return + */ + @GetMapping("/t-app-user/user/selectByPhoneLike") + R<List<TAppUser>> selectByPhoneLike(@RequestParam("phone") String phone); + /** * 远程调用 积分兑换订单 退款回退积分 * @return */ 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/model/TAppCoupon.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppCoupon.java index b3bea84..519c74a 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppCoupon.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppCoupon.java @@ -76,9 +76,6 @@ @ApiModelProperty(value = "状态(1=未使用,2=已使用)") @TableField("status") private Integer status; - @ApiModelProperty(value = "订单id 后台发放的优惠券没有订单id") - @TableField("orderId") - private Long orderId; @ApiModelProperty(value = "当前领取优惠卷的json记录") @TableField("coupon_json") 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/dto/CheckChargingStrategyDTO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/CheckChargingStrategyDTO.java new file mode 100644 index 0000000..79adcf8 --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/CheckChargingStrategyDTO.java @@ -0,0 +1,19 @@ +package com.ruoyi.chargingPile.api.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel(value = "校验计费模版是否准确DTO") +public class CheckChargingStrategyDTO implements Serializable { + + @ApiModelProperty(value = "桩编号code") + private String code; + + @ApiModelProperty(value = "计费模型编号 id") + private Integer strategyDetailId; + +} 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 cdc9f16..844dbb9 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java @@ -1,5 +1,6 @@ package com.ruoyi.chargingPile.api.factory; +import com.ruoyi.chargingPile.api.dto.CheckChargingStrategyDTO; import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient; import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; import com.ruoyi.common.core.domain.R; @@ -7,6 +8,8 @@ import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; + +import java.util.List; /** * @author zhibing.pu @@ -21,10 +24,30 @@ public AccountingStrategyDetailClient create(Throwable throwable) { log.error("计费策略调用失败:{}", throwable.getMessage()); return new AccountingStrategyDetailClient(){ + + @Override + public R<TAccountingStrategyDetail> getDetailBySiteId(Integer siteId) { + return R.fail("通过站点id查询当前时段使用的策略明细失败:" + throwable.getMessage()); + } + + @Override + public R<TAccountingStrategyDetail> getDetailByCode(String code) { + return R.fail("通过桩编号查询当前时段使用的策略明细失败:" + throwable.getMessage()); + } + + @Override + public R<Boolean> checkChargingStrategy(CheckChargingStrategyDTO dto) { + return R.fail("校验充电桩计费模版是否准确失败:" + throwable.getMessage()); + } @Override - public R<TAccountingStrategyDetail> getNowData(Integer accountingStrategyId) { - return R.fail("获取当前有效的计费策略明细失败:" + throwable.getMessage()); + public R<List<TAccountingStrategyDetail>> getListByAccountingStrategyId(Integer id) { + throw new RuntimeException("根据计费策略主表id策略明细失败:" + throwable.getMessage()); + } + + @Override + public R<List<TAccountingStrategyDetail>> getDetailListByCode(String code) { + return R.fail("通过桩编号查询当前使用的策略明细列表失败:" + throwable.getMessage()); } }; } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/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 b63175e..94a055e 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java @@ -1,12 +1,16 @@ package com.ruoyi.chargingPile.api.feignClient; +import com.ruoyi.chargingPile.api.dto.CheckChargingStrategyDTO; 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.RequestBody; import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; /** * @author zhibing.pu @@ -16,11 +20,42 @@ public interface AccountingStrategyDetailClient { + /** - * 获取当前有效的计费策略明细 - * @param accountingStrategyId + * 通过站点id查询当前时段使用的策略明细 + * @param siteId * @return */ - @PostMapping("/t-accounting-strategy-detail/getNowData") - R<TAccountingStrategyDetail> getNowData(@RequestParam("accountingStrategyId") Integer accountingStrategyId); + @PostMapping("/t-accounting-strategy-detail/getDetailBySiteId") + R<TAccountingStrategyDetail> getDetailBySiteId(@RequestParam("siteId") Integer siteId); + /** + * 通过桩编号查询当前时段使用的策略明细 + * @param code + * @return + */ + @PostMapping("/t-accounting-strategy-detail/getDetailByCode") + R<TAccountingStrategyDetail> getDetailByCode(@RequestParam("code") String code); + /** + * 校验充电桩计费模版是否准确 + * @param + * @return + */ + @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); + /** + * 通过桩编号查询当前使用的策略明细列表 + * @param code + * @return + */ + @PostMapping("/t-accounting-strategy-detail/getDetailListByCode") + R<List<TAccountingStrategyDetail>> getDetailListByCode(@RequestParam("code") String code); } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java index 3301e51..2fd9933 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TFaultMessage.java @@ -38,10 +38,16 @@ @ApiModelProperty(value = "站点id") @TableField("site_id") private Integer siteId; + + @TableField(exist = false) + private String siteName; @ApiModelProperty(value = "充电桩id") @TableField("charging_pile_id") private Integer chargingPileId; + + @TableField(exist = false) + private String chargingPileName; @ApiModelProperty(value = "状态(1=离线,2=故障)") @TableField("status") diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingLot.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingLot.java index 15ecaff..288c211 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingLot.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingLot.java @@ -33,6 +33,10 @@ @ApiModelProperty(value = "主键") @TableId(value = "id", type = IdType.AUTO) private Integer id; + + @ApiModelProperty(value = "类型(1=自营,2=合作)") + @TableField("type") + private Integer type; @ApiModelProperty(value = "车场名称") @TableField("name") @@ -41,6 +45,14 @@ @ApiModelProperty(value = "第三方停车场编号") @TableField("code") private String code; + + @ApiModelProperty(value = "停车场标识") + @TableField("app_Key") + private String appKey; + + @ApiModelProperty(value = "停车场秘钥") + @TableField("secret_Key") + private String secretKey; @ApiModelProperty(value = "站点id") @TableField("site_id") diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TRepair.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TRepair.java index 49f609b..bc77f15 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TRepair.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TRepair.java @@ -37,10 +37,16 @@ @ApiModelProperty(value = "站点id") @TableField("site_id") private Integer siteId; + + @TableField(exist = false) + private String siteName; @ApiModelProperty(value = "充电桩id") @TableField("charging_pile_id") private Integer chargingPileId; + + @TableField(exist = false) + private String chargingPileName; @ApiModelProperty(value = "报修内容") @TableField("content") 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-integration/src/main/java/com/ruoyi/integration/api/factory/IntegrationFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IntegrationFallbackFactory.java index 195a34c..87a7d65 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IntegrationFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IntegrationFallbackFactory.java @@ -48,10 +48,10 @@ return R.fail("读取实时监测数据调用失败:" + throwable.getMessage()); } - @Override - public R<String> endCharge(EndCharge endCharge) { - return R.fail("充电结束调用失败:" + throwable.getMessage()); - } +// @Override +// public R<String> endCharge(EndCharge endCharge) { +// return R.fail("充电结束调用失败:" + throwable.getMessage()); +// } @Override public R<String> platformConfirmationCharging(PlatformConfirmationCharging platformConfirmationCharging) { diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStopChargingReplyFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStopChargingReplyFallbackFactory.java new file mode 100644 index 0000000..95601bc --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStopChargingReplyFallbackFactory.java @@ -0,0 +1,35 @@ +package com.ruoyi.integration.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.integration.api.feignClient.PlatformStopChargingReplyClient; +import com.ruoyi.integration.api.feignClient.SendMessageClient; +import com.ruoyi.integration.api.model.PlatformStartCharging; +import com.ruoyi.integration.api.model.PlatformStopCharging; +import com.ruoyi.integration.api.model.PlatformStopChargingReply; +import com.ruoyi.integration.api.vo.GetPlatformStopChargingReply; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * 充电桩服务降级处理 + * + * @author ruoyi + */ +@Component +public class PlatformStopChargingReplyFallbackFactory implements org.springframework.cloud.openfeign.FallbackFactory<PlatformStopChargingReplyClient> { + private static final Logger log = LoggerFactory.getLogger(PlatformStopChargingReplyFallbackFactory.class); + + @Override + public PlatformStopChargingReplyClient create(Throwable throwable) { + log.error("远程停机命令应答失败:{}", throwable.getMessage()); + return new PlatformStopChargingReplyClient() { + + + @Override + public R<PlatformStopChargingReply> getPlatformStopChargingReply(GetPlatformStopChargingReply query) { + return R.fail("获取远程停机命令应答失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java index 8b9c02b..9db561c 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java @@ -5,6 +5,7 @@ import com.ruoyi.integration.api.feignClient.SendMessageClient; import com.ruoyi.integration.api.model.ChargingHandshake; import com.ruoyi.integration.api.model.PlatformStartCharging; +import com.ruoyi.integration.api.model.PlatformStopCharging; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; @@ -27,9 +28,14 @@ @Override - public void platformStartCharging(PlatformStartCharging platformStartCharging) { + public String platformStartCharging(PlatformStartCharging platformStartCharging) { throw new RuntimeException("远程启机失败" + throwable.getMessage()); } + + @Override + public String platformStopCharging(PlatformStopCharging platformStopCharging) { + throw new RuntimeException("远程停机失败" + throwable.getMessage()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IntegrationClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IntegrationClient.java index f8255a7..a6f1d64 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IntegrationClient.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IntegrationClient.java @@ -61,8 +61,8 @@ * @param endCharge 实体对象 * @return */ - @PostMapping("/sendMessage/sendMessageendCharge") - public R<String> endCharge(@RequestBody EndCharge endCharge); +// @PostMapping("/sendMessage/sendMessageendCharge") +// public R<String> endCharge(@RequestBody EndCharge endCharge); /** * 运营平台确认启动充电 diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/PlatformStopChargingReplyClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/PlatformStopChargingReplyClient.java new file mode 100644 index 0000000..5de9b29 --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/PlatformStopChargingReplyClient.java @@ -0,0 +1,27 @@ +package com.ruoyi.integration.api.feignClient; + +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.integration.api.factory.PlatformStopChargingReplyFallbackFactory; +import com.ruoyi.integration.api.model.PlatformStopChargingReply; +import com.ruoyi.integration.api.vo.GetPlatformStopChargingReply; +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/2 17:05 + */ +@FeignClient(contextId = "PlatformStopChargingReplyClient", value = ServiceNameConstants.INTEGRATION_SERVICE, fallbackFactory = PlatformStopChargingReplyFallbackFactory.class) +public interface PlatformStopChargingReplyClient { + + + /** + * 获取远程停机命令应答 + * @param query + * @return + */ + @PostMapping("/platformStopChargingReply/getPlatformStopChargingReply") + R<PlatformStopChargingReply> getPlatformStopChargingReply(@RequestBody GetPlatformStopChargingReply query); +} 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 c2c27be..df4db22 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 @@ -3,6 +3,7 @@ import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.integration.api.factory.SendMessageFallbackFactory; import com.ruoyi.integration.api.model.PlatformStartCharging; +import com.ruoyi.integration.api.model.PlatformStopCharging; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -21,5 +22,14 @@ * @return */ @PostMapping("/sendMessage/platformStartCharging") - void platformStartCharging(@RequestBody PlatformStartCharging platformStartCharging); + String platformStartCharging(@RequestBody PlatformStartCharging platformStartCharging); + + + /** + * 远程控制停机 + * @param platformStopCharging + * @return + */ + @PostMapping("/sendMessage/platformStopCharging") + String platformStopCharging(@RequestBody PlatformStopCharging platformStopCharging); } diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java new file mode 100644 index 0000000..dab2854 --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java @@ -0,0 +1,19 @@ +package com.ruoyi.integration.api.vo; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2024/9/2 17:00 + */ +@Data +public class GetPlatformStopChargingReply { + /** + * 充电桩编号 + */ + private String charging_pile_code; + /** + * 充电枪编号 + */ + private String charging_gun_code; +} diff --git a/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 6cc32c5..a17191b 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -2,4 +2,5 @@ com.ruoyi.integration.api.factory.UploadRealTimeMonitoringDataFallbackFactory com.ruoyi.integration.api.factory.ChargingHandshakeFallbackFactory com.ruoyi.integration.api.factory.SendMessageFallbackFactory -com.ruoyi.integration.api.factory.PlatformStartChargingReplyFallbackFactory \ No newline at end of file +com.ruoyi.integration.api.factory.PlatformStartChargingReplyFallbackFactory +com.ruoyi.integration.api.factory.PlatformStopChargingReplyFallbackFactory \ 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 8738bb2..d53879f 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 @@ -68,6 +68,21 @@ @Override public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) { } + + @Override + public R<TChargingOrder> getOrderByCode(String code) { + return R.fail("通过流水号查询订单调用失败:" + throwable.getMessage()); + } + + @Override + public void endCharge(String code) { + + } + + @Override + public void excelEndCharge(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 96340a0..591a275 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 @@ -9,10 +9,7 @@ import com.ruoyi.order.api.query.TChargingCountQuery; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -70,4 +67,28 @@ */ @PostMapping(value = "/t-charging-order/chargeMonitoring") void chargeMonitoring(@RequestBody UploadRealTimeMonitoringDataQuery query); + + /** + * 通过流水号查询订单 + * @param code + * @return + */ + @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); + + + /** + * 硬件异常结束充电后的处理逻辑 + * @param code + */ + @PostMapping("/t-charging-order/excelEndCharge") + void excelEndCharge(@RequestParam("code") String code); } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/AccountingStrategyDetailOrder.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/AccountingStrategyDetailOrder.java new file mode 100644 index 0000000..abe6a4f --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/AccountingStrategyDetailOrder.java @@ -0,0 +1,53 @@ +package com.ruoyi.order.api.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author zhibing.pu + * @Date 2024/9/3 14:00 + */ +@Data +@TableName("t_accounting_strategy_detail_order") +public class AccountingStrategyDetailOrder { + /** + * 主键 + */ + @TableField(value = "id") + private Integer id; + @ApiModelProperty(value = "策略id") + @TableField("accounting_strategy_id") + private Integer accountingStrategyId; + + @ApiModelProperty(value = "阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)") + @TableField("type") + private Integer type; + + @ApiModelProperty(value = "开始时间") + @TableField("start_time") + private String startTime; + + @ApiModelProperty(value = "结束时间") + @TableField("end_time") + private String endTime; + + @ApiModelProperty(value = "电价") + @TableField("electrovalence") + private BigDecimal electrovalence; + + @ApiModelProperty(value = "服务费") + @TableField("service_charge") + private BigDecimal serviceCharge; + + @ApiModelProperty(value = "原价服务费") + @TableField("cost_service_charge") + private BigDecimal costServiceCharge; + + @ApiModelProperty(value = "充电订单id") + @TableField("charging_order_id") + private Long chargingOrderId; +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/AccountingStrategyOrder.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/AccountingStrategyOrder.java new file mode 100644 index 0000000..f8d1dcf --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/AccountingStrategyOrder.java @@ -0,0 +1,81 @@ +package com.ruoyi.order.api.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.web.domain.BasePojo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author zhibing.pu + * @Date 2024/9/3 14:13 + */ +@Data +@TableName("t_accounting_strategy_order") +public class AccountingStrategyOrder extends BasePojo { + + @ApiModelProperty(value = "主键") + @TableField(value = "id") + private Integer id; + + @ApiModelProperty(value = "站点id") + @TableField("site_id") + private Integer siteId; + + @ApiModelProperty(value = "申请人id") + @TableField("user_id") + private Long userId; + + @ApiModelProperty(value = "策略名称") + @TableField("name") + private String name; + + @ApiModelProperty(value = "策略说明") + @TableField("description") + private String description; + + @ApiModelProperty(value = "会员折扣") + @TableField("discount") + private BigDecimal discount; + + @ApiModelProperty(value = "一级审核用户id") + @TableField("first_user_id") + private Long firstUserId; + + @ApiModelProperty(value = "二级审核用户id") + @TableField("two_user_id") + private Long twoUserId; + + @ApiModelProperty(value = "一级审核备注") + @TableField("first_remark") + private String firstRemark; + + @ApiModelProperty(value = "二级审核备注") + @TableField("two_remark") + private String twoRemark; + + @ApiModelProperty(value = "审核状态(1=待审核一级,2=待审核二级,3=审核通过,4=驳回)") + @TableField("audit_status") + private Integer auditStatus; + + @ApiModelProperty(value = "一级审核时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @TableField("first_audit_time") + private LocalDateTime firstAuditTime; + + @ApiModelProperty(value = "二级审核时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @TableField("two_audit_time") + private LocalDateTime twoAuditTime; + + @ApiModelProperty(value = "充电订单id") + @TableField("charging_order_id") + private Long chargingOrderId; +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java index 894820f..0059cad 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java @@ -122,7 +122,11 @@ @ApiModelProperty(value = "充值支付第三方流水号") @TableField("recharge_serial_number") private String rechargeSerialNumber; - + + @ApiModelProperty(value = "充电金额(传给硬件方的金额)") + @TableField("charge_amount") + private BigDecimal chargeAmount; + @ApiModelProperty(value = "剩余金额(用于前端展示)") @TableField("residual_amount") private BigDecimal residualAmount; @@ -185,4 +189,5 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @TableField("pay_time") private LocalDateTime payTime; + } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderAccountingStrategy.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderAccountingStrategy.java index 68c2568..b616194 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderAccountingStrategy.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrderAccountingStrategy.java @@ -11,6 +11,7 @@ import java.io.Serializable; import java.math.BigDecimal; +import java.time.LocalDateTime; /** * <p> @@ -35,6 +36,10 @@ @ApiModelProperty(value = "充电订单id") @TableField("charging_order_id") private Long chargingOrderId; + + @ApiModelProperty(value = "计费策略明细id") + @TableField("accounting_strategy_detail_id") + private Integer accountingStrategyDetailId; @ApiModelProperty(value = "阶段(1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段)") @TableField("type") @@ -71,6 +76,14 @@ @ApiModelProperty(value = "时段服务费") @TableField("period_service_price") private BigDecimal periodServicePrice; + + @ApiModelProperty(value = "时段原服务费(不含折扣)") + @TableField("period_original_service_price") + private BigDecimal periodOriginalServicePrice; + + @ApiModelProperty(value = "首次添加时间") + @TableField("create_time") + private LocalDateTime createTime; @ApiModelProperty(value = "会员抵扣") @TableField(exist = false) diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java index 280b1b0..5eef671 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -114,6 +115,7 @@ private LocalDateTime createTime; @ApiModelProperty(value = "开票时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @TableField("billing_time") private LocalDateTime billingTime; diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoiceDetail.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoiceDetail.java index 6566de9..c28f9ce 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoiceDetail.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoiceDetail.java @@ -59,6 +59,14 @@ @ApiModelProperty(value = "增值服务费税率") @TableField("added_service_tariff") private BigDecimal addedServiceTariff; - + @ApiModelProperty(value = "'电费'") + @TableField("electrovalence") + private BigDecimal electrovalence; + @ApiModelProperty(value = "'服务费'") + @TableField("service_charge") + private BigDecimal serviceCharge; + @ApiModelProperty(value = "'增值服务费'") + @TableField("added_service") + private BigDecimal addedService; } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderInvoiceQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderInvoiceQuery.java new file mode 100644 index 0000000..f1bad4a --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/TOrderInvoiceQuery.java @@ -0,0 +1,41 @@ +package com.ruoyi.order.api.query; + +import com.ruoyi.common.core.query.TimeRangePageQuery; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +@ApiModel(value = "发票管理Query") +public class TOrderInvoiceQuery extends TimeRangePageQuery { + + @ApiModelProperty(value = "开票公司") + private String invoicingCompany; + + @ApiModelProperty(value = "发票类型") + private String invoiceType; + + @ApiModelProperty(value = "抬头类型(1=个人,2=企业)") + private Integer invoicingObjectType; + + @ApiModelProperty(value = "发票种类(1=纸质发票,2=电子发票)") + private Integer invoiceMaterial; + + @ApiModelProperty(value = "开票方式(1=人工,2=自动)") + private Integer invoicingMethod; + + @ApiModelProperty(value = "申请人电话") + private String userPhone; + + @ApiModelProperty(value = "申请人姓名") + private String nickName; + + @ApiModelProperty(value = "公司名称") + private String name; + + @ApiModelProperty(value = "用户id 前端忽略") + private List<Long> userIds; + +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillVO.java new file mode 100644 index 0000000..ab1c46f --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingBillVO.java @@ -0,0 +1,33 @@ +package com.ruoyi.order.api.vo; + +import com.ruoyi.common.core.web.page.PageInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel(value = "ChargingBillVO对象",description = "充电算帐单") +public class ChargingBillVO { + @ApiModelProperty(value = "充电总度数") + private BigDecimal chargingCapacity; + @ApiModelProperty(value = "实收金额") + private BigDecimal paymentAmount; + @ApiModelProperty(value = "订单总金额") + private BigDecimal orderAmount; + @ApiModelProperty(value = "累计电费") + private BigDecimal electrovalence; + @ApiModelProperty(value = "累计服务费") + private BigDecimal serviceCharge; + @ApiModelProperty(value = "订单数量") + private Integer orderCount; + @ApiModelProperty(value = "平台手续费") + private String commissionAmount; + @ApiModelProperty(value = "三方平台分佣") + private String sharingAmount; + @ApiModelProperty(value = "优惠抵扣") + private String discount; + @ApiModelProperty(value = "列表数据") + private PageInfo<ChargingOrderListVO> list; +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderVO.java index 1c5ba30..61ba66b 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderVO.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ChargingOrderVO.java @@ -30,10 +30,7 @@ @ApiModelProperty(value = "手机号") private String phone; - @ApiModelProperty(value = "累计电费") - private BigDecimal electrovalence; - @ApiModelProperty(value = "累计服务费") - private BigDecimal serviceCharge; + @ApiModelProperty(value = "时段数") private Integer count; @ApiModelProperty(value = "1明星充电 2快电 3新电途") diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderInvoiceVO.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderInvoiceVO.java new file mode 100644 index 0000000..690a19c --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/TOrderInvoiceVO.java @@ -0,0 +1,31 @@ +package com.ruoyi.order.api.vo; + +import com.ruoyi.order.api.model.TOrderInvoice; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel(value = "发票管理VO") +public class TOrderInvoiceVO extends TOrderInvoice { + + @ApiModelProperty(value = "电费税率") + private BigDecimal electricityTariff; + + @ApiModelProperty(value = "服务费税率") + private BigDecimal serviceTariff; + + @ApiModelProperty(value = "增值服务费税率") + private BigDecimal addedServiceTariff; + @ApiModelProperty(value = "电费") + private BigDecimal electrovalence; + @ApiModelProperty(value = "服务费") + private BigDecimal serviceCharge; + @ApiModelProperty(value = "增值服务费") + private BigDecimal addedService; + @ApiModelProperty(value = "用户电话") + private String userPhone; + +} 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-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserRoleFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserRoleFallbackFactory.java new file mode 100644 index 0000000..6e743e9 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserRoleFallbackFactory.java @@ -0,0 +1,26 @@ +package com.ruoyi.system.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.api.domain.SysRole; +import com.ruoyi.system.api.domain.SysUser; +import com.ruoyi.system.api.feignClient.SysUserClient; +import com.ruoyi.system.api.feignClient.SysUserRoleClient; +import com.ruoyi.system.api.model.*; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class SysUserRoleFallbackFactory implements org.springframework.cloud.openfeign.FallbackFactory<SysUserRoleClient> { + @Override + public SysUserRoleClient create(Throwable cause) { + return new SysUserRoleClient(){ + + + @Override + public R<List<SysUserRoleVo>> getRoleByUserId(Long userId) { + return R.fail("根据用户id获取角色失败:" + cause.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserRoleClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserRoleClient.java new file mode 100644 index 0000000..c14542b --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserRoleClient.java @@ -0,0 +1,28 @@ +package com.ruoyi.system.api.feignClient; + +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.api.factory.SysUserRoleFallbackFactory; +import com.ruoyi.system.api.model.SysUserRoleVo; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +/** + * @author zhibing.pu + * @date 2024/9/4 9:49 + */ +@FeignClient(contextId = "SysUserRoleClient", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = SysUserRoleFallbackFactory.class) +public interface SysUserRoleClient { + + + /** + * 根据用户id获取角色 + * @param userId + * @return + */ + @PostMapping("/userRole/getRoleByUserId") + R<List<SysUserRoleVo>> getRoleByUserId(@RequestParam("userId") Long userId); +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/SysUserRoleVo.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/SysUserRoleVo.java new file mode 100644 index 0000000..9c850d1 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/SysUserRoleVo.java @@ -0,0 +1,49 @@ +package com.ruoyi.system.api.model; + +import com.baomidou.mybatisplus.annotation.TableField; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 用户和角色关联 sys_user_role + * + * @author ruoyi + */ +public class SysUserRoleVo +{ + /** 用户ID */ + @TableField("user_id") + private Long userId; + + /** 角色ID */ + @TableField("role_id") + private Long roleId; + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("roleId", getRoleId()) + .toString(); + } +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 4dfeaf3..89b7d3a 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -4,3 +4,4 @@ com.ruoyi.system.api.factory.SysUserFallbackFactory com.ruoyi.system.api.factory.SysRoleFallbackFactory com.ruoyi.system.api.factory.SysLoginLogFallbackFactory +com.ruoyi.system.api.factory.SysUserRoleFallbackFactory diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java index 9c314ca..230ce8a 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java @@ -372,5 +372,16 @@ return LocalTime.parse(time, formatter); } + /** + * localdatetime转为字符串 + * + * @param time localdatetime + * @return 字符串 + */ + public static String localDateTimeToString(LocalDateTime time) { + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + return df.format(time); + } + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserRoleController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserRoleController.java index b0ef148..4bd9ba1 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserRoleController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserRoleController.java @@ -1,20 +1,19 @@ package com.ruoyi.system.controller; +import java.util.ArrayList; import java.util.List; import java.io.IOException; import javax.servlet.http.HttpServletResponse; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.api.model.SysUserRoleVo; import com.ruoyi.system.domain.SysUserRole; import com.ruoyi.system.service.ISysUserRoleService; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.security.annotation.RequiresPermissions; @@ -96,4 +95,22 @@ public AjaxResult remove(@PathVariable Long[] userIds) { return toAjax(sysUserRoleService.deleteSysUserRoleByUserIds(userIds)); } + + + /** + * 根据用户id获取角色 + * @param userId + * @return + */ + @PostMapping("/getRoleByUserId") + public R<List<SysUserRoleVo>> getRoleByUserId(@RequestParam("userId") Long userId){ + List<SysUserRole> list = sysUserRoleService.list(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, userId)); + List<SysUserRoleVo> data = new ArrayList<>(); + for (SysUserRole sysUserRole : list) { + SysUserRoleVo vo = new SysUserRoleVo(); + BeanUtils.copyProperties(sysUserRole, vo); + data.add(vo); + } + return R.ok(data); + } } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java index 6288f56..283a412 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java @@ -65,13 +65,18 @@ private TAppUserCarService appUserCarService; @Autowired private TokenService tokenService; - @Autowired + @Resource private ChargingPileClient chargingPileClient; - @Autowired + @Resource private ChargingOrderClient chargingOrderClient; - @Resource private ChargingGunClient chargingGunClient; + + @Autowired + private TAppUserTagService appUserTagService; + @Autowired + private TAppUserService appUserService; + /** * 后台退款 回退优惠券使用状态 @@ -208,10 +213,7 @@ return R.ok(tAppCouponService.lambdaQuery().le(TAppCoupon::getStartTime, now).ge(TAppCoupon::getEndTime, now).eq(TAppCoupon::getStatus, 1).count()); } - @Autowired - private TAppUserTagService appUserTagService; - @Autowired - private TAppUserService appUserService; + /** * 后台远程调用 给用户发放优惠券 @@ -275,5 +277,17 @@ return R.ok(); } + + + /** + * 根据id获取优惠券领取记录 + * @param id + * @return + */ + @PostMapping("/getAppCouponById") + public R<TAppCoupon> getAppCouponById(@RequestParam("id") Long id){ + TAppCoupon appCoupon = tAppCouponService.getById(id); + return R.ok(appCoupon); + } } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java index 93d83d5..c40aeb7 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java @@ -725,6 +725,16 @@ .eq(TAppUser::getPhone,phone) .last("LIMIT 1"))); } + /** + * 通过手机号模糊查询用户 + * @param phone + * @return + */ + @GetMapping("/user/selectByPhoneLike") + public R<List<TAppUser>> selectByPhoneLike(@RequestParam("phone") String phone){ + return R.ok(appUserService.list(Wrappers.lambdaQuery(TAppUser.class) + .eq(TAppUser::getPhone,phone))); + } @ApiOperation(value = "签到", tags = {"小程序-个人中心-签到"}) @GetMapping(value = "/user/sign") 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 bac569b..e326bf4 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 @@ -92,7 +92,7 @@ public AjaxResult<List<TAccountingStrategyDetailVO>> queryAccountingStrategyDetailByStrategyId(@RequestParam("strategyId") Integer strategyId) { List<TAccountingStrategyDetailVO> list = accountingStrategyDetailService.queryAccountingStrategyDetailByStrategyId(strategyId); list.forEach(detail -> { - detail.setTotalPrice(detail.getElectrovalence().add(detail.getElectrovalence())); + detail.setTotalPrice(detail.getElectrovalence().add(detail.getServiceCharge())); }); return AjaxResult.ok(list); } @@ -110,6 +110,11 @@ Boolean flag = accountingStrategyDetailService.isStrategy24Hour(dto.getAccountingStrategyDetails()); if(flag){ return AjaxResult.error("计费模板时间设置有误差"); + } + // 判断同阶段是否价格不一致 + Boolean flag1 = accountingStrategyDetailService.isStrategyPriceConsistent(dto.getAccountingStrategyDetails()); + if(!flag1){ + return AjaxResult.error("同阶段费率值需一致"); } Long userId = SecurityUtils.getLoginUser().getUserid(); dto.setUserId(userId); @@ -130,6 +135,11 @@ Boolean flag = accountingStrategyDetailService.isStrategy24Hour(dto.getAccountingStrategyDetails()); if(flag){ return AjaxResult.error("计费模板时间设置有误差"); + } + // 判断同阶段是否价格不一致 + Boolean flag1 = accountingStrategyDetailService.isStrategyPriceConsistent(dto.getAccountingStrategyDetails()); + if(!flag1){ + return AjaxResult.error("同阶段费率值需一致"); } // 判断修改的计费策略是否为已通过 if(dto.getAuditStatus() == 3 || dto.getAuditStatus() == 4){ @@ -411,5 +421,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 5234673..35c031e 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java @@ -3,14 +3,17 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.chargingPile.api.dto.CheckChargingStrategyDTO; 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.model.TChargingPile; 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.chargingPile.service.TChargingPileService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.web.domain.AjaxResult; @@ -36,12 +39,14 @@ public class TAccountingStrategyDetailController { private final ISiteService siteService; + private final TChargingPileService chargingPileService; private final TAccountingStrategyService accountingStrategyService; private final TAccountingStrategyDetailService accountingStrategyDetailService; @Autowired - public TAccountingStrategyDetailController(ISiteService siteService, TAccountingStrategyService accountingStrategyService, TAccountingStrategyDetailService accountingStrategyDetailService) { + public TAccountingStrategyDetailController(ISiteService siteService, TChargingPileService chargingPileService, TAccountingStrategyService accountingStrategyService, TAccountingStrategyDetailService accountingStrategyDetailService) { this.siteService = siteService; + this.chargingPileService = chargingPileService; this.accountingStrategyService = accountingStrategyService; this.accountingStrategyDetailService = accountingStrategyDetailService; } @@ -79,17 +84,96 @@ } + + /** - * 获取当前有效的计费模板 - * @param accountingStrategyId + * 通过站点id查询当前时段使用的策略明细 + * @param siteId * @return */ - @PostMapping("/getNowData") - public R<TAccountingStrategyDetail> getNowData(@RequestParam("accountingStrategyId") Integer accountingStrategyId){ - TAccountingStrategyDetail one = accountingStrategyDetailService.getOne(new LambdaQueryWrapper<TAccountingStrategyDetail>() - .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategyId) + @PostMapping("/getDetailBySiteId") + public R<TAccountingStrategyDetail> getDetailBySiteId(@RequestParam("siteId") Integer siteId){ + Site site = siteService.getById(siteId); + TAccountingStrategy accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId()); + TAccountingStrategyDetail one = accountingStrategyDetailService.getOne(Wrappers.<TAccountingStrategyDetail>lambdaQuery() + .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId()) .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time")); return R.ok(one); } + /** + * 通过桩id查询当前时段使用的策略明细 + * @param code 设备编号 + * @return + */ + @PostMapping("/getDetailByCode") + public R<TAccountingStrategyDetail> getDetailByPileId(@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()); + TAccountingStrategyDetail one = accountingStrategyDetailService.getOne(Wrappers.<TAccountingStrategyDetail>lambdaQuery() + .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId()) + .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time")); + return R.ok(one); + } + /** + * 校验充电桩计费模版是否准确 + * @param + * @return + */ + @PostMapping("/checkChargingStrategy") + public R<Boolean> checkChargingStrategy(@RequestBody CheckChargingStrategyDTO dto){ + // 查询桩 + TChargingPile chargingPile = chargingPileService.getOne(Wrappers.lambdaQuery(TChargingPile.class) + .eq(TChargingPile::getCode,dto.getCode()) + .last("LIMIT 1")); + if(Objects.isNull(chargingPile)){ + return R.ok(false); + } + Site site = siteService.getById(chargingPile.getSiteId()); + TAccountingStrategy accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId()); + TAccountingStrategyDetail one = accountingStrategyDetailService.getOne(Wrappers.<TAccountingStrategyDetail>lambdaQuery() + .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId()) + .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); + } + + /** + * 通过桩编号查询当前使用的策略明细列表 + * @param code + * @return + */ + @PostMapping("/t-accounting-strategy-detail/getDetailListByCode") + public R<List<TAccountingStrategyDetail>> getDetailListByCode(@RequestParam("code") String code){ + // 查询桩 + TChargingPile chargingPile = chargingPileService.getOne(Wrappers.lambdaQuery(TChargingPile.class) + .eq(TChargingPile::getCode,code) + .last("LIMIT 1")); + if(Objects.isNull(chargingPile)){ + return R.fail("未查询到该桩设备"); + } + Site site = siteService.getById(chargingPile.getSiteId()); + TAccountingStrategy accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId()); + List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailService.list(Wrappers.<TAccountingStrategyDetail>lambdaQuery() + .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId())); + return R.ok(accountingStrategyDetails); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java index fe5e167..9d3546f 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java @@ -21,6 +21,8 @@ import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.OperatorType; +import com.ruoyi.integration.api.feignClient.IntegrationClient; +import com.ruoyi.integration.api.model.EndCharge; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -51,18 +53,16 @@ @RequestMapping("/t-charging-gun") public class TChargingGunController { - private final TChargingGunService chargingGunService; - + @Autowired + private TChargingGunService chargingGunService; + @Autowired + private IntegrationClient integrationClient; + @Resource private TChargingPileService chargingPileService; @Resource private ISiteService siteService; - @Autowired - public TChargingGunController(TChargingGunService chargingGunService) { - this.chargingGunService = chargingGunService; - } - /** * 查询充电枪列表 */ @@ -132,6 +132,8 @@ @PutMapping(value = "/stopCharging") public AjaxResult<String> stopCharging(@RequestParam("id") Integer id) { // TODO 硬件 结束充电 +// EndCharge endCharge = new EndCharge(); +// integrationClient.endCharge(endCharge); return AjaxResult.success(); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java index 9acebda..fade8ba 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TFaultMessageController.java @@ -6,16 +6,17 @@ import com.ruoyi.chargingPile.service.TChargingPileService; import com.ruoyi.chargingPile.service.TFaultMessageService; import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.core.web.page.BasePage; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.log.enums.OperatorType; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; -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 org.springframework.web.bind.annotation.*; + +import java.util.List; /** * <p> @@ -46,7 +47,40 @@ faultMessageService.add(dto); return AjaxResult.success(); } - - + + + /** + * 获取故障信息列表 + * @param siteId + * @param basePage + * @return + */ + @ResponseBody + @GetMapping("/getFaultMessageList") + @ApiOperation(value = "获取故障信息列表数据", tags = {"管理后台-设备监控"}) + public AjaxResult<PageInfo<TFaultMessage>> getFaultMessageList(Integer siteId, BasePage basePage){ + PageInfo<TFaultMessage> pageInfo = new PageInfo<>(basePage.getPageCurr(), basePage.getPageSize()); + List<TFaultMessage> faultMessageList = faultMessageService.getFaultMessageList(pageInfo, siteId); + pageInfo.setRecords(faultMessageList); + return AjaxResult.success(pageInfo); + } + + + @ResponseBody + @PostMapping("/addFaultMessage") + @ApiOperation(value = "添加故障信息", tags = {"管理后台-设备监控"}) + public AjaxResult addFaultMessage(@RequestBody TFaultMessage faultMessage){ + faultMessageService.save(faultMessage); + return AjaxResult.success(); + } + + + @ResponseBody + @DeleteMapping("/delFaultMessage/{id}") + @ApiOperation(value = "删除故障信息", tags = {"管理后台-设备监控"}) + public AjaxResult delFaultMessage(@PathVariable Integer id){ + faultMessageService.removeById(id); + return AjaxResult.success(); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java index e67572d..981cc4b 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TRepairController.java @@ -1,8 +1,17 @@ package com.ruoyi.chargingPile.controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.chargingPile.api.model.TFaultMessage; +import com.ruoyi.chargingPile.api.model.TRepair; +import com.ruoyi.chargingPile.service.TRepairService; +import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.core.web.page.BasePage; +import com.ruoyi.common.core.web.page.PageInfo; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; /** * <p> @@ -16,5 +25,37 @@ @RequestMapping("/t-repair") public class TRepairController { + @Resource + private TRepairService repairService; + + + @ResponseBody + @GetMapping("/getRepairList") + @ApiOperation(value = "获取报修记录列表数据", tags = {"管理后台-设备监控"}) + public AjaxResult<PageInfo<TRepair>> getRepairList(String name, String siteId, BasePage basePage){ + PageInfo<TRepair> pageInfo = new PageInfo<>(basePage.getPageCurr(), basePage.getPageSize()); + List<TRepair> repairList = repairService.getRepairList(pageInfo, name, siteId); + return AjaxResult.success(repairList); + } + + + + + @ResponseBody + @PostMapping("/addRepair") + @ApiOperation(value = "添加报修记录", tags = {"管理后台-设备监控"}) + public AjaxResult addRepair(@RequestBody TRepair repair){ + repairService.save(repair); + return AjaxResult.success(); + } + + + @ResponseBody + @DeleteMapping("/delRepair/{id}") + @ApiOperation(value = "删除报修记录", tags = {"管理后台-设备监控"}) + public AjaxResult delRepair(@PathVariable Integer id){ + repairService.removeById(id); + return AjaxResult.success(); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TFaultMessageMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TFaultMessageMapper.java index 1b2b56e..70c0e9c 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TFaultMessageMapper.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TFaultMessageMapper.java @@ -2,6 +2,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.chargingPile.api.model.TFaultMessage; +import com.ruoyi.common.core.web.page.PageInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * <p> @@ -12,5 +16,12 @@ * @since 2024-08-08 */ public interface TFaultMessageMapper extends BaseMapper<TFaultMessage> { - + + /** + * 获取故障信息列表 + * @param pageInfo + * @param siteId + * @return + */ + List<TFaultMessage> getFaultMessageList(PageInfo<TFaultMessage> pageInfo, @Param("siteId") Integer siteId); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java index e649544..afe8e9f 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TRepairMapper.java @@ -2,6 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.chargingPile.api.model.TRepair; +import com.ruoyi.common.core.web.page.PageInfo; + +import java.util.List; /** * <p> @@ -12,5 +15,15 @@ * @since 2024-08-08 */ public interface TRepairMapper extends BaseMapper<TRepair> { + + + /** + * 获取列表数据 + * @param pageInfo + * @param name + * @param siteId + * @return + */ + List<TRepair> getRepairList(PageInfo<TRepair> pageInfo, String name, String siteId); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java index 245e8d3..835a46c 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java @@ -44,4 +44,12 @@ * @return */ Boolean isStrategy24Hour(List<TAccountingStrategyDetail> accountingStrategyDetails); + + /** + * 判断同阶段是否价格不一致 + * @param accountingStrategyDetails + * @return + */ + Boolean isStrategyPriceConsistent(List<TAccountingStrategyDetail> accountingStrategyDetails); + } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TFaultMessageService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TFaultMessageService.java index 62fc81e..4c72b29 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TFaultMessageService.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TFaultMessageService.java @@ -2,6 +2,9 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.chargingPile.api.model.TFaultMessage; +import com.ruoyi.common.core.web.page.PageInfo; + +import java.util.List; /** * <p> @@ -19,4 +22,13 @@ * @return */ void add(TFaultMessage dto); + + + /** + * 获取故障信息列表 + * @param pageInfo + * @param siteId + * @return + */ + List<TFaultMessage> getFaultMessageList(PageInfo<TFaultMessage> pageInfo, Integer siteId); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TRepairService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TRepairService.java index 8f2487a..4f85479 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TRepairService.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TRepairService.java @@ -2,6 +2,10 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.chargingPile.api.model.TRepair; +import com.ruoyi.common.core.web.page.BasePage; +import com.ruoyi.common.core.web.page.PageInfo; + +import java.util.List; /** * <p> @@ -12,5 +16,12 @@ * @since 2024-08-08 */ public interface TRepairService extends IService<TRepair> { - + + /** + * 获取报修记录列表 + * @param name + * @param siteId + * @return + */ + List<TRepair> getRepairList(PageInfo<TRepair> pageInfo, String name, String siteId); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java index 38e0916..7cf4f33 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java @@ -31,6 +31,8 @@ import com.ruoyi.other.api.feignClient.VipClient; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; +import com.ruoyi.system.api.feignClient.SysUserRoleClient; +import com.ruoyi.system.api.model.SysUserRoleVo; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -68,6 +70,8 @@ private AppUserClient appUserClient; @Resource private VipClient vipClient; + @Resource + private SysUserRoleClient sysUserRoleClient; @@ -90,8 +94,11 @@ //非管理员需要根据角色和用户配置查询允许的站点数据 if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){ List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData(); - List<Integer> data1 = roleSiteClient.getSiteIds(sysUser.getRoleId()).getData(); - data.addAll(data1); + List<SysUserRoleVo> data2 = sysUserRoleClient.getRoleByUserId(sysUser.getUserId()).getData(); + if(data2.size() > 0){ + List<Integer> data1 = roleSiteClient.getSiteIds(data2.get(0).getRoleId()).getData(); + data.addAll(data1); + } ids = new HashSet<>(data); } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java index 9b2aaab..2412c8c 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java @@ -24,10 +24,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalTime; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -146,4 +143,23 @@ return isFirstElementValid || !isTimeContinuous; } + + @Override + public Boolean isStrategyPriceConsistent(List<TAccountingStrategyDetail> accountingStrategyDetails) { + Map<Integer, BigDecimal> phaseToServiceFee = new HashMap<>(); + for (TAccountingStrategyDetail detail : accountingStrategyDetails) { + Integer type = detail.getType(); + BigDecimal serviceFee = detail.getServiceCharge(); + + if (phaseToServiceFee.containsKey(type)) { + BigDecimal existingFee = phaseToServiceFee.get(type); + if (!existingFee.equals(serviceFee)) { + return false; // 发现不一致的服务费 + } + } else { + phaseToServiceFee.put(type, serviceFee); + } + } + return true; // 所有相同阶段的服务费一致 + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java index 2b2bbd5..ad0bc26 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyServiceImpl.java @@ -1,5 +1,6 @@ package com.ruoyi.chargingPile.service.impl; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.chargingPile.api.model.TAccountingStrategy; import com.ruoyi.chargingPile.api.query.TAccountingStrategyQuery; @@ -12,9 +13,13 @@ import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import java.util.Arrays; +import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; /** * <p> @@ -33,6 +38,10 @@ public PageInfo<TAccountingStrategyVO> pageList(TAccountingStrategyQuery query) { PageInfo<TAccountingStrategyVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize()); List<TAccountingStrategyVO> list = this.baseMapper.pageList(query,pageInfo); + List<Integer> parentIds = list.stream().map(TAccountingStrategyVO::getId).collect(Collectors.toList()); + List<TAccountingStrategy> list1 = this.list(Wrappers.lambdaQuery(TAccountingStrategy.class) + .in(TAccountingStrategy::getParentId, parentIds) + .in(TAccountingStrategy::getAuditStatus, Arrays.asList(1,2))); for (TAccountingStrategyVO tAccountingStrategyVO : list) { SysUser data = sysUserClient.getSysUser(tAccountingStrategyVO.getUserId()).getData(); tAccountingStrategyVO.setUserName(data.getNickName()); @@ -44,6 +53,13 @@ SysUser two = sysUserClient.getSysUser(tAccountingStrategyVO.getUserId()).getData(); tAccountingStrategyVO.setTwoUserName(two==null?null:two.getNickName()); } + // 匹配编辑后的未审核的 + List<TAccountingStrategy> accountingStrategies = list1.stream().filter(e -> e.getParentId().equals(tAccountingStrategyVO.getId())) + .sorted(Comparator.comparing(TAccountingStrategy::getCreateTime).reversed()).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(accountingStrategies)){ + TAccountingStrategy tAccountingStrategy = accountingStrategies.get(0); + tAccountingStrategyVO.setAuditStatus(tAccountingStrategy.getAuditStatus()); + } } pageInfo.setRecords(list); return pageInfo; diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java index 01dff45..88a97d7 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TFaultMessageServiceImpl.java @@ -11,9 +11,12 @@ import com.ruoyi.chargingPile.service.TChargingPileService; import com.ruoyi.chargingPile.service.TFaultMessageService; import com.ruoyi.common.core.utils.MsgUtil; +import com.ruoyi.common.core.web.page.PageInfo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + +import java.util.List; /** * <p> @@ -48,4 +51,16 @@ chargingPileNotificationService.saveData(4,dto.getSiteId(),dto.getChargingPileId(),site.getPhone(),"检测到"+siteName+"..."+chargingPile.getNumber()+"号桩设备离线,请及时查看处理!"); this.save(dto); } + + + /** + * 获取故障信息列表 + * @param pageInfo + * @param siteId + * @return + */ + @Override + public List<TFaultMessage> getFaultMessageList(PageInfo<TFaultMessage> pageInfo, Integer siteId) { + return this.baseMapper.getFaultMessageList(pageInfo, siteId); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TRepairServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TRepairServiceImpl.java index c2a86c8..d348ebb 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TRepairServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TRepairServiceImpl.java @@ -1,10 +1,18 @@ package com.ruoyi.chargingPile.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.chargingPile.api.feignClient.SiteClient; +import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.model.TRepair; import com.ruoyi.chargingPile.mapper.TRepairMapper; import com.ruoyi.chargingPile.service.TRepairService; +import com.ruoyi.common.core.web.page.BasePage; +import com.ruoyi.common.core.web.page.PageInfo; import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; /** * <p> @@ -16,5 +24,16 @@ */ @Service public class TRepairServiceImpl extends ServiceImpl<TRepairMapper, TRepair> implements TRepairService { - + + + /** + * 获取报修记录列表 + * @param name + * @param siteId + * @return + */ + @Override + public List<TRepair> getRepairList(PageInfo<TRepair> pageInfo, String name, String siteId) { + return this.baseMapper.getRepairList(pageInfo, name, siteId); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyDetailMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyDetailMapper.xml index 488daf7..d347895 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyDetailMapper.xml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyDetailMapper.xml @@ -20,8 +20,8 @@ </sql> <select id="queryAccountingStrategyDetailByStrategyId" resultType="com.ruoyi.chargingPile.api.vo.TAccountingStrategyDetailVO"> SELECT - tasd.id, tasd.accounting_strategy_id, tasd.`type`, tasd.start_time, tasd.end_time, tasd.electrovalence, tasd.service_charge, - tasd.cost_service_charge,tas.discount + tasd.id, tasd.accounting_strategy_id, tasd.`type`, tasd.start_time, tasd.end_time, ROUND(tasd.electrovalence,4) AS electrovalence, + ROUND(tasd.service_charge,4) AS serviceCharge,ROUND(tasd.cost_service_charge,4) AS costServiceCharge,tas.discount FROM t_accounting_strategy_detail tasd LEFT JOIN t_accounting_strategy tas ON tas.id = tasd.accounting_strategy_id <where> diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml index 521ac63..e218c2a 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyMapper.xml @@ -37,6 +37,7 @@ AND audit_status = #{query.auditStatus} </if> AND site_id IS NULL + AND (parent_id IS NULL OR audit_status = 3 OR audit_status = 4) AND del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} </where> ORDER BY create_time DESC diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TFaultMessageMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TFaultMessageMapper.xml index fc21cd6..b3acfec 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TFaultMessageMapper.xml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TFaultMessageMapper.xml @@ -19,4 +19,20 @@ id, app_user_id, site_id, charging_pile_id, status, down_time, create_time, del_flag </sql> + + + <select id="getFaultMessageList" resultType="com.ruoyi.chargingPile.api.model.TFaultMessage"> + select + a.*, + b.name as chargingPileName, + c.name as siteName + from t_fault_message a + left join t_charging_pile b on (a.charging_pile_id = b.id) + left join t_site c on (a.site_id = c.id) + where a.del_flag = 0 + <if test="null != siteId"> + and a.site_id = #{siteId} + </if> + order by a.create_time desc + </select> </mapper> diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TRepairMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TRepairMapper.xml index 526a1ba..6c7b52f 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TRepairMapper.xml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TRepairMapper.xml @@ -19,4 +19,23 @@ id, repairman, site_id, charging_pile_id, content, repair_time, create_time, del_flag </sql> + + + <select id="getRepairList" resultType="com.ruoyi.chargingPile.api.model.TRepair"> + select + a.*, + b.name as chargingPileName, + c.name as siteName + from t_repair a + left join t_charging_pile b on (a.charging_pile_id = b.id) + left join t_site c on (a.site_id = c.id) + where a.del_flag = 0 + <if test="null != name and '' != name"> + and a.repairman like CONCAT('%', #{name}, '%') + </if> + <if test="null != siteId"> + and a.site_id = #{siteId} + </if> + order by a.create_time desc + </select> </mapper> diff --git a/ruoyi-service/ruoyi-integration/pom.xml b/ruoyi-service/ruoyi-integration/pom.xml index 4c146a8..571bf94 100644 --- a/ruoyi-service/ruoyi-integration/pom.xml +++ b/ruoyi-service/ruoyi-integration/pom.xml @@ -169,6 +169,10 @@ <groupId>com.ruoyi</groupId> <artifactId>ruoyi-api-order</artifactId> </dependency> + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-api-chargingPile</artifactId> + </dependency> </dependencies> <build> diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/PlatformStopChargingReplyController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/PlatformStopChargingReplyController.java new file mode 100644 index 0000000..c9a9385 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/PlatformStopChargingReplyController.java @@ -0,0 +1,34 @@ +package com.ruoyi.integration.controller; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.integration.api.model.PlatformStopChargingReply; +import com.ruoyi.integration.api.vo.GetPlatformStopChargingReply; +import com.ruoyi.integration.mongodb.service.PlatformStopChargingReplyService; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @author zhibing.pu + * @Date 2024/9/2 16:52 + */ +@RestController +@RequestMapping("/platformStopChargingReply") +public class PlatformStopChargingReplyController { + + @Resource + private PlatformStopChargingReplyService platformStopChargingReplyService; + + /** + * 获取远程停机命令应答 + * @param query + * @return + */ + @PostMapping("/getPlatformStopChargingReply") + public R<PlatformStopChargingReply> getPlatformStopChargingReply(@RequestBody GetPlatformStopChargingReply query){ + PlatformStopChargingReply platformStopChargingReply = platformStopChargingReplyService.getPlatformStopChargingReply(query); + return R.ok(platformStopChargingReply); + } + + +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java index 9088d1e..8466119 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java @@ -15,6 +15,10 @@ */ public static final String PING ="ping"; /** + * 充电结束 + */ + public static final String END_CHARGE = "end_charge"; + /** * 计费模型验证请求 */ public static final String BILLING_MODE_VERIFY ="billing_mode_verify"; @@ -85,7 +89,7 @@ /** * 对时设置应答 */ - public static final String TIMING_SETTING_REPLY ="timing_setting_reply"; + public static final String TIMING_SETTING ="timing_setting"; /** * 计费模型应答 */ diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java index 2857dfc..9a27b45 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java @@ -76,10 +76,10 @@ * @param endCharge 实体对象 * @return */ - @PostMapping("/endCharge") - public String endCharge(@RequestBody EndCharge endCharge){ - return iotMessageProduce.sendMessage(endCharge.getCharging_pile_code(), ServiceIdMenu.END_CHARGE.getKey(),messageUtil.endCharge(endCharge)); - } +// @PostMapping("/endCharge") +// public String endCharge(@RequestBody EndCharge endCharge){ +// return iotMessageProduce.sendMessage(endCharge.getCharging_pile_code(), ServiceIdMenu.END_CHARGE.getKey(),messageUtil.endCharge(endCharge)); +// } /** * 运营平台确认启动充电 @@ -172,13 +172,13 @@ } /** - * 对时设置 - * @param timingSetting 实体对象 + * 对时设置应答 + * @param timingSettingReply 实体对象 * @return */ - @PostMapping("/timingSetting") - public String timingSetting(@RequestBody TimingSetting timingSetting){ - return iotMessageProduce.sendMessage(timingSetting.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING.getKey(),messageUtil.timingSetting(timingSetting)); + @PostMapping("/timingSettingReply") + public String timingSettingReply(@RequestBody TimingSettingReply timingSettingReply){ + return iotMessageProduce.sendMessage(timingSettingReply.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING_REPLY.getKey(),messageUtil.timingSettingReply(timingSettingReply)); } /** diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java index 2445ebf..12ea9d4 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java @@ -26,10 +26,10 @@ * 读取实时监测数据 */ READ_REAL_TIME_MONITORING_DATA ("读取实时监测数据","read_real_time_monitoring_data"), - /** - * 充电结束 - */ - END_CHARGE ("充电结束","end_charge"), +// /** +// * 充电结束 +// */ +// END_CHARGE ("充电结束","end_charge"), /** * 运营平台确认启动充电 */ @@ -67,9 +67,9 @@ */ WORKING_PARAMETER_SETTING ("充电桩工作参数设置","working_parameter_setting"), /** - * 对时设置 + * 对时设置应答 */ - TIMING_SETTING ("对时设置","timing_setting"), + TIMING_SETTING_REPLY ("对时设置应答","timing_setting_reply"), /** * 计费模型设置 */ diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java index 3640b42..51caba0 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java @@ -44,6 +44,9 @@ case SendTagConstant.PING: sendResult = enhanceProduce.pingMessage(content); break; + case SendTagConstant.END_CHARGE: + sendResult = enhanceProduce.endChargeMessage(content); + break; case SendTagConstant.BILLING_MODE_VERIFY: sendResult = enhanceProduce.billingModeVerifyMessage(content); break; @@ -92,8 +95,8 @@ case SendTagConstant.WORKING_PARAMETER_SETTING_REPLY: sendResult = enhanceProduce.workingParameterSettingReplyMessage(content); break; - case SendTagConstant.TIMING_SETTING_REPLY: - sendResult = enhanceProduce.timingSettingReplyMessage(content); + case SendTagConstant.TIMING_SETTING: + sendResult = enhanceProduce.timingSettingMessage(content); break; case SendTagConstant.SETUP_BILLING_MODEL_REPLY: sendResult = enhanceProduce.setupBillingModelReplyMessage(content); diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/CP56Time2aConverter.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/CP56Time2aConverter.java new file mode 100644 index 0000000..3a6b0c5 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/CP56Time2aConverter.java @@ -0,0 +1,39 @@ +package com.ruoyi.integration.iotda.utils.tools; + +import javax.xml.datatype.DatatypeConfigurationException; +import javax.xml.datatype.DatatypeFactory; +import javax.xml.datatype.XMLGregorianCalendar; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.TimeZone; + +public class CP56Time2aConverter { + + public static String convertToCP56Time2a(Date date) { + try { + DatatypeFactory datatypeFactory = DatatypeFactory.newInstance(); + GregorianCalendar calendar = new GregorianCalendar(); + calendar.setTime(date); + TimeZone timeZone = calendar.getTimeZone(); + XMLGregorianCalendar xmlGregorianCalendar = datatypeFactory.newXMLGregorianCalendar( + calendar.get(Calendar.YEAR), + calendar.get(Calendar.MONTH)+1, + calendar.get(Calendar.DAY_OF_MONTH), + calendar.get(Calendar.HOUR_OF_DAY), + calendar.get(Calendar.MINUTE), + calendar.get(Calendar.SECOND), + calendar.get(Calendar.MILLISECOND), + (timeZone.getRawOffset() / (60 * 1000))); + return xmlGregorianCalendar.toXMLFormat(); + } catch (DatatypeConfigurationException e) { + throw new RuntimeException("Error creating DatatypeFactory", e); + } + } + + public static void main(String[] args) { + Date now = new Date(); + String cp56Time2a = convertToCP56Time2a(now); + System.out.println("CP56Time2a: " + cp56Time2a); + } +} \ No newline at end of file diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java index 7610a47..c7c76bd 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java @@ -44,7 +44,7 @@ @Autowired private WorkingParameterSettingService workingParameterSettingService; @Autowired - private TimingSettingService timingSettingService; + private TimingSettingReplyService timingSettingReplyService; @Autowired private SetupBillingModelService setupBillingModelService; @Autowired @@ -109,10 +109,10 @@ * @param endCharge 实体对象 * @return */ - public String endCharge(EndCharge endCharge){ - endChargeService.create(endCharge); - return getMessageJsonString(endCharge, ServiceIdMenu.END_CHARGE.getValue()); - } +// public String endCharge(EndCharge endCharge){ +// endChargeService.create(endCharge); +// return getMessageJsonString(endCharge, ServiceIdMenu.END_CHARGE.getValue()); +// } /** * 运营平台确认启动充电 @@ -205,13 +205,13 @@ } /** - * 对时设置 - * @param timingSetting 实体对象 + * 对时设置应答 + * @param timingSettingReply 实体对象 * @return */ - public String timingSetting(TimingSetting timingSetting){ - timingSettingService.create(timingSetting); - return getMessageJsonString(timingSetting, ServiceIdMenu.TIMING_SETTING.getValue()); + public String timingSettingReply(TimingSettingReply timingSettingReply){ + timingSettingReplyService.create(timingSettingReply); + return getMessageJsonString(timingSettingReply, ServiceIdMenu.TIMING_SETTING_REPLY.getValue()); } /** diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java new file mode 100644 index 0000000..4ebf980 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java @@ -0,0 +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 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/mongodb/service/PlatformStopChargingReplyService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStopChargingReplyService.java index a618614..2e5f241 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStopChargingReplyService.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStopChargingReplyService.java @@ -1,7 +1,15 @@ package com.ruoyi.integration.mongodb.service; import com.ruoyi.integration.api.model.PlatformStopChargingReply; +import com.ruoyi.integration.api.vo.GetPlatformStopChargingReply; import com.ruoyi.integration.mongodb.base.BaseService; public interface PlatformStopChargingReplyService extends BaseService<PlatformStopChargingReply> { + + /** + * 根据枪编号获取停机应答 + * @return + */ + PlatformStopChargingReply getPlatformStopChargingReply(GetPlatformStopChargingReply query); + } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java index e142505..f5b92c3 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java @@ -17,4 +17,11 @@ List<UploadRealTimeMonitoringData> getDataByOrderCode(String code); List<UploadRealTimeMonitoringData> getDataAll(Set<String> values, Integer page, Integer size); + /** + * 查询订单最新一条数据 + * @param transaction_serial_number + * @return + */ + UploadRealTimeMonitoringData getLastDataById(String transaction_serial_number); + } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java index 357de01..08535ed 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.java @@ -1,10 +1,13 @@ package com.ruoyi.integration.mongodb.service.impl; +import com.ruoyi.integration.api.vo.GetPlatformStopChargingReply; import com.ruoyi.integration.iotda.constant.IotConstant; import com.ruoyi.integration.api.model.PlatformStopChargingReply; import com.ruoyi.integration.mongodb.service.PlatformStopChargingReplyService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import java.util.List; @@ -28,4 +31,16 @@ public List<PlatformStopChargingReply> findAll() { return mongoTemplate.findAll(PlatformStopChargingReply.class); } + + + /** + * 根据枪编号获取 + * @return + */ + @Override + public PlatformStopChargingReply getPlatformStopChargingReply(GetPlatformStopChargingReply query) { + List<PlatformStopChargingReply> platformStopChargingReplies = mongoTemplate.find(new Query().addCriteria(Criteria.where("charging_pile_code").is(query.getCharging_pile_code()) + .and("charging_gun_code").is(query.getCharging_gun_code())), PlatformStopChargingReply.class); + return platformStopChargingReplies.size() > 0 ? platformStopChargingReplies.get(0) : null; + } } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java index 89cf4d0..cbed3aa 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java @@ -73,4 +73,17 @@ return uploadRealTimeMonitoringData; } + @Override + public UploadRealTimeMonitoringData getLastDataById(String transaction_serial_number) { + Query query = new Query(); + if (StringUtils.isNotEmpty(transaction_serial_number)){ + query.addCriteria(Criteria.where("transaction_serial_number").is(transaction_serial_number)); + } + // 按照 createdAt 字段降序排序 + query.with(Sort.by(Sort.Direction.DESC, "create_time")); + // 限制结果只返回一条记录 + query.limit(1); + return mongoTemplate.findOne(query, UploadRealTimeMonitoringData.class); + } + } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java index 28b3de3..cc9a8cc 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/AcquisitionBillingModeMessageListener.java @@ -1,7 +1,14 @@ package com.ruoyi.integration.rocket.listener; +import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; import com.ruoyi.integration.api.model.AcquisitionBillingMode; +import com.ruoyi.integration.api.model.AcquisitionBillingModeReply; import com.ruoyi.integration.api.model.Online; +import com.ruoyi.integration.iotda.enums.ServiceIdMenu; +import com.ruoyi.integration.iotda.utils.produce.IotMessageProduce; +import com.ruoyi.integration.iotda.utils.tools.MessageUtil; +import com.ruoyi.integration.iotda.utils.tools.StrategyUtil; import com.ruoyi.integration.mongodb.service.AcquisitionBillingModeService; import com.ruoyi.integration.rocket.model.AcquisitionBillingModeMessage; import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; @@ -11,6 +18,10 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; +import java.util.Objects; @Slf4j @Component @@ -24,7 +35,12 @@ @Autowired private AcquisitionBillingModeService acquisitionBillingModeService; - + @Autowired + private AccountingStrategyDetailClient accountingStrategyDetailClient; + @Autowired + private IotMessageProduce iotMessageProduce; + @Autowired + private MessageUtil messageUtil; @Override protected void handleMessage(AcquisitionBillingModeMessage message) throws Exception { // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 @@ -33,7 +49,15 @@ AcquisitionBillingMode acquisitionBillingMode = new AcquisitionBillingMode(); BeanUtils.copyProperties(message,acquisitionBillingMode); acquisitionBillingModeService.create(acquisitionBillingMode); - // 业务处理 + // 业务处理 计费模型请求应答 1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段 + List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode(message.getCharging_pile_code()).getData(); + Map<Integer, TAccountingStrategyDetail> strategyPrice = StrategyUtil.getStrategyPrice(accountingStrategyDetails); + // 价格设置 + AcquisitionBillingModeReply acquisitionBillingModeReply = new AcquisitionBillingModeReply(); + StrategyUtil.setStrategyPrice(strategyPrice,acquisitionBillingModeReply); + // 时段设置 + StrategyUtil.setTime(accountingStrategyDetails,acquisitionBillingModeReply); + iotMessageProduce.sendMessage(acquisitionBillingModeReply.getCharging_pile_code(), ServiceIdMenu.ACQUISITION_BILLING_MODE_REPLY.getKey(),messageUtil.acquisitionBillingModeReply(acquisitionBillingModeReply)); } @Override diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BillingModeVerifyMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BillingModeVerifyMessageListener.java index 49dcc6b..6f6e9ad 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BillingModeVerifyMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BillingModeVerifyMessageListener.java @@ -1,7 +1,15 @@ package com.ruoyi.integration.rocket.listener; +import com.ruoyi.chargingPile.api.dto.CheckChargingStrategyDTO; +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.BillingModeVerify; +import com.ruoyi.integration.api.model.BillingModeVerifyReply; +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.mongodb.service.BillingModeVerifyReplyService; import com.ruoyi.integration.mongodb.service.BillingModeVerifyService; import com.ruoyi.integration.rocket.model.BillingModeVerifyMessage; import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; @@ -24,6 +32,12 @@ @Autowired private BillingModeVerifyService billingModeVerifyService; + @Autowired + private IotMessageProduce iotMessageProduce; + @Autowired + private MessageUtil messageUtil; + @Autowired + private AccountingStrategyDetailClient accountingStrategyDetailClient; @Override protected void handleMessage(BillingModeVerifyMessage message) throws Exception { @@ -34,6 +48,28 @@ BeanUtils.copyProperties(message,billingModeVerify); billingModeVerifyService.create(billingModeVerify); // 业务处理 + BillingModeVerifyReply billingModeVerifyReply = new BillingModeVerifyReply(); + if(message.getBilling_model_code().equals("0")){ + // 首次 + billingModeVerifyReply.setCharging_pile_code(billingModeVerify.getCharging_pile_code()); + billingModeVerifyReply.setBilling_model_code("0"); + billingModeVerifyReply.setBilling_model_result(1); + }else { + // 查询桩使用的模版 + CheckChargingStrategyDTO dto = new CheckChargingStrategyDTO(); + dto.setCode(message.getBilling_model_code()); + dto.setStrategyDetailId(Integer.valueOf(message.getBilling_model_code())); + Boolean check = accountingStrategyDetailClient.checkChargingStrategy(dto).getData(); + // 校验计费模版是否准确 + billingModeVerifyReply.setCharging_pile_code(billingModeVerify.getCharging_pile_code()); + billingModeVerifyReply.setBilling_model_code(message.getBilling_model_code()); + if(check){ + billingModeVerifyReply.setBilling_model_result(0); + }else { + billingModeVerifyReply.setBilling_model_result(1); + } + } + iotMessageProduce.sendMessage(billingModeVerifyReply.getCharging_pile_code(), ServiceIdMenu.BILLING_MODE_VERIFY_REPLY.getKey(),messageUtil.billingModeVerifyReply(billingModeVerifyReply)); } @Override diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BmsAbortMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BmsAbortMessageListener.java index 9c0e654..9d6f37c 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BmsAbortMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BmsAbortMessageListener.java @@ -5,12 +5,15 @@ import com.ruoyi.integration.mongodb.service.BmsAbortService; import com.ruoyi.integration.rocket.model.BmsAbortMessage; 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 @@ -24,6 +27,12 @@ @Autowired private BmsAbortService bmsAbortService; + + @Resource + private ChargingOrderClient chargingOrderClient; + + + @Override protected void handleMessage(BmsAbortMessage message) throws Exception { // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 @@ -33,6 +42,7 @@ BeanUtils.copyProperties(message,bmsAbort); bmsAbortService.create(bmsAbort); // 业务处理 + chargingOrderClient.excelEndCharge(bmsAbort.getTransaction_serial_number()); } @Override 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 new file mode 100644 index 0000000..819768c --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java @@ -0,0 +1,98 @@ +package com.ruoyi.integration.rocket.listener; + +import com.ruoyi.integration.api.model.EndCharge; +import com.ruoyi.integration.api.model.Ping; +import com.ruoyi.integration.api.model.Pong; +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.mongodb.service.EndChargeService; +import com.ruoyi.integration.mongodb.service.PingService; +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 +@RocketMQMessageListener( + consumerGroup = "enhance_consumer_group", + topic = "rocket_enhance", + selectorExpression = "*", + consumeThreadMax = 5 //默认是64个线程并发消息,配置 consumeThreadMax 参数指定并发消费线程数,避免太大导致资源不够 +) +public class EndChargeMessageListener extends EnhanceMessageHandler<EndChargeMessage> implements RocketMQListener<EndChargeMessage> { + + @Autowired + private EndChargeService endChargeService; + @Autowired + private MessageUtil messageUtil; + @Autowired + private IotMessageProduce iotMessageProduce; + + @Resource + private ChargingOrderClient chargingOrderClient; + + + + @Override + protected void handleMessage(EndChargeMessage message) throws Exception { + // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 + log.info("充电结束-业务消息处理:{}",message); + // 持久化消息 + EndCharge endCharge = new EndCharge(); + BeanUtils.copyProperties(message,endCharge); + endChargeService.create(endCharge); + // 业务处理 + chargingOrderClient.endCharge(endCharge.getTransaction_serial_number()); + } + + @Override + protected void handleMaxRetriesExceeded(EndChargeMessage message) { + // 当超过指定重试次数消息时此处方法会被调用 + // 生产中可以进行回退或其他业务操作 + log.error("消息消费失败,请执行后续处理"); + } + + + /** + * 是否执行重试机制 + */ + @Override + protected boolean isRetry() { + return true; + } + + @Override + protected boolean throwException() { + // 是否抛出异常,false搭配retry自行处理异常 + return false; + } + + /** + * 若需要处理消息过滤,在父级中进行统一处理,或者在此处实现之后,自行处理 + * @param message 待处理消息 + * @return true: 本次消息被过滤,false:不过滤 + */ + @Override + protected boolean filter(EndChargeMessage message) { + // 此处可做消息过滤 + return false; + } + + /** + * 监听消费消息,不需要执行业务处理,委派给父类做基础操作,父类做完基础操作后会调用子类的实际处理类型 + */ + @Override + public void onMessage(EndChargeMessage message) { + super.dispatchMessage(message); + } +} \ No newline at end of file diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/MotorAbortMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/MotorAbortMessageListener.java index 9ffff0f..8b96993 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/MotorAbortMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/MotorAbortMessageListener.java @@ -5,12 +5,15 @@ import com.ruoyi.integration.mongodb.service.MotorAbortService; import com.ruoyi.integration.rocket.model.MotorAbortMessage; 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 @@ -24,6 +27,13 @@ @Autowired private MotorAbortService motorAbortService; + + @Resource + private ChargingOrderClient chargingOrderClient; + + + + @Override protected void handleMessage(MotorAbortMessage message) throws Exception { // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 @@ -33,6 +43,7 @@ BeanUtils.copyProperties(message,motorAbort); motorAbortService.create(motorAbort); // 业务处理 + chargingOrderClient.excelEndCharge(motorAbort.getTransaction_serial_number()); } @Override diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingMessageListener.java new file mode 100644 index 0000000..4269c93 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingMessageListener.java @@ -0,0 +1,93 @@ +package com.ruoyi.integration.rocket.listener; + +import com.ruoyi.integration.api.model.TimingSetting; +import com.ruoyi.integration.api.model.TimingSettingReply; +import com.ruoyi.integration.iotda.enums.ServiceIdMenu; +import com.ruoyi.integration.iotda.utils.produce.IotMessageProduce; +import com.ruoyi.integration.iotda.utils.tools.CP56Time2aConverter; +import com.ruoyi.integration.iotda.utils.tools.MessageUtil; +import com.ruoyi.integration.mongodb.service.TimingSettingReplyService; +import com.ruoyi.integration.mongodb.service.TimingSettingService; +import com.ruoyi.integration.rocket.model.TimingSettingMessage; +import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Slf4j +@Component +@RocketMQMessageListener( + consumerGroup = "enhance_consumer_group", + topic = "rocket_enhance", + selectorExpression = "*", + consumeThreadMax = 5 //默认是64个线程并发消息,配置 consumeThreadMax 参数指定并发消费线程数,避免太大导致资源不够 +) +public class TimingSettingMessageListener extends EnhanceMessageHandler<TimingSettingMessage> implements RocketMQListener<TimingSettingMessage> { + + @Autowired + private TimingSettingService timingSettingService; + @Autowired + private IotMessageProduce iotMessageProduce; + @Autowired + private MessageUtil messageUtil; + @Override + protected void handleMessage(TimingSettingMessage message) throws Exception { + // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 + log.info("对时设置-业务消息处理:{}",message); + // 持久化消息 + TimingSetting timingSetting = new TimingSetting(); + BeanUtils.copyProperties(message,timingSetting); + timingSettingService.create(timingSetting); + // 业务处理 对时设置应答 + TimingSettingReply timingSettingReply = new TimingSettingReply(); + timingSettingReply.setCharging_pile_code(message.getCharging_pile_code()); + timingSettingReply.setCurrent_time(CP56Time2aConverter.convertToCP56Time2a(new Date())); + iotMessageProduce.sendMessage(timingSettingReply.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING_REPLY.getKey(),messageUtil.timingSettingReply(timingSettingReply)); + } + + @Override + protected void handleMaxRetriesExceeded(TimingSettingMessage message) { + // 当超过指定重试次数消息时此处方法会被调用 + // 生产中可以进行回退或其他业务操作 + log.error("消息消费失败,请执行后续处理"); + } + + + /** + * 是否执行重试机制 + */ + @Override + protected boolean isRetry() { + return true; + } + + @Override + protected boolean throwException() { + // 是否抛出异常,false搭配retry自行处理异常 + return false; + } + + /** + * 若需要处理消息过滤,在父级中进行统一处理,或者在此处实现之后,自行处理 + * @param message 待处理消息 + * @return true: 本次消息被过滤,false:不过滤 + */ + @Override + protected boolean filter(TimingSettingMessage message) { + // 此处可做消息过滤 + return false; + } + + /** + * 监听消费消息,不需要执行业务处理,委派给父类做基础操作,父类做完基础操作后会调用子类的实际处理类型 + */ + @Override + public void onMessage(TimingSettingMessage message) { + super.dispatchMessage(message); + } +} \ No newline at end of file diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingReplyMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingReplyMessageListener.java deleted file mode 100644 index 09cdf0d..0000000 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TimingSettingReplyMessageListener.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.ruoyi.integration.rocket.listener; - -import com.ruoyi.integration.api.model.Online; -import com.ruoyi.integration.api.model.TimingSettingReply; -import com.ruoyi.integration.mongodb.service.TimingSettingReplyService; -import com.ruoyi.integration.rocket.model.TimingSettingReplyMessage; -import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; -import lombok.extern.slf4j.Slf4j; -import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; -import org.apache.rocketmq.spring.core.RocketMQListener; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Slf4j -@Component -@RocketMQMessageListener( - consumerGroup = "enhance_consumer_group", - topic = "rocket_enhance", - selectorExpression = "*", - consumeThreadMax = 5 //默认是64个线程并发消息,配置 consumeThreadMax 参数指定并发消费线程数,避免太大导致资源不够 -) -public class TimingSettingReplyMessageListener extends EnhanceMessageHandler<TimingSettingReplyMessage> implements RocketMQListener<TimingSettingReplyMessage> { - - @Autowired - private TimingSettingReplyService timingSettingReplyService; - @Override - protected void handleMessage(TimingSettingReplyMessage message) throws Exception { - // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 - log.info("对时设置应答-业务消息处理:{}",message); - // 持久化消息 - TimingSettingReply timingSettingReply = new TimingSettingReply(); - BeanUtils.copyProperties(message,timingSettingReply); - timingSettingReplyService.create(timingSettingReply); - // 业务处理 - } - - @Override - protected void handleMaxRetriesExceeded(TimingSettingReplyMessage message) { - // 当超过指定重试次数消息时此处方法会被调用 - // 生产中可以进行回退或其他业务操作 - log.error("消息消费失败,请执行后续处理"); - } - - - /** - * 是否执行重试机制 - */ - @Override - protected boolean isRetry() { - return true; - } - - @Override - protected boolean throwException() { - // 是否抛出异常,false搭配retry自行处理异常 - return false; - } - - /** - * 若需要处理消息过滤,在父级中进行统一处理,或者在此处实现之后,自行处理 - * @param message 待处理消息 - * @return true: 本次消息被过滤,false:不过滤 - */ - @Override - protected boolean filter(TimingSettingReplyMessage message) { - // 此处可做消息过滤 - return false; - } - - /** - * 监听消费消息,不需要执行业务处理,委派给父类做基础操作,父类做完基础操作后会调用子类的实际处理类型 - */ - @Override - public void onMessage(TimingSettingReplyMessage message) { - super.dispatchMessage(message); - } -} \ No newline at end of file diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TransactionRecordMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TransactionRecordMessageListener.java index bc3780f..d0c6380 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TransactionRecordMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TransactionRecordMessageListener.java @@ -1,7 +1,11 @@ package com.ruoyi.integration.rocket.listener; +import com.ruoyi.integration.api.model.ConfirmTransactionRecord; import com.ruoyi.integration.api.model.Online; import com.ruoyi.integration.api.model.TransactionRecord; +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.mongodb.service.TransactionRecordService; import com.ruoyi.integration.rocket.model.TransactionRecordMessage; import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; @@ -24,6 +28,10 @@ @Autowired private TransactionRecordService transactionRecordService; + @Autowired + private IotMessageProduce iotMessageProduce; + @Autowired + private MessageUtil messageUtil; @Override protected void handleMessage(TransactionRecordMessage message) throws Exception { // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 @@ -33,6 +41,10 @@ BeanUtils.copyProperties(message,transactionRecord); transactionRecordService.create(transactionRecord); // 业务处理 + ConfirmTransactionRecord confirmTransactionRecord = new ConfirmTransactionRecord(); + confirmTransactionRecord.setTransaction_serial_number(message.getTransaction_serial_number()); + confirmTransactionRecord.setConfirm_result(0); + iotMessageProduce.sendMessage(confirmTransactionRecord.getTransaction_serial_number(), ServiceIdMenu.CONFIRM_TRANSACTION_RECORD.getKey(),messageUtil.confirmTransactionRecord(confirmTransactionRecord)); } @Override diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java index f28993e..dc6342c 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java @@ -1,11 +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.Online; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService; import com.ruoyi.integration.rocket.model.UploadRealTimeMonitoringDataMessage; import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; import com.ruoyi.order.api.feignClient.ChargingOrderClient; +import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; @@ -15,6 +18,9 @@ import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Objects; @Slf4j @Component @@ -31,12 +37,10 @@ @Resource private ChargingOrderClient chargingOrderClient; - - - - - - + @Resource + private AccountingStrategyDetailClient accountingStrategyDetailClient; + + @Override protected void handleMessage(UploadRealTimeMonitoringDataMessage message) throws Exception { // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 @@ -44,11 +48,31 @@ // 持久化消息 UploadRealTimeMonitoringData uploadRealTimeMonitoringData = new UploadRealTimeMonitoringData(); BeanUtils.copyProperties(message,uploadRealTimeMonitoringData); + // 查询mogondb上一条数据 + UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataService.getLastDataById(message.getTransaction_serial_number()); + // 查询订单 + TChargingOrder chargingOrder = chargingOrderClient.getOrderByCode(message.getTransaction_serial_number()).getData(); + // 查询当前时间段的计费策略 + TAccountingStrategyDetail accountingStrategyDetail = accountingStrategyDetailClient.getDetailBySiteId(chargingOrder.getSiteId()).getData(); + uploadRealTimeMonitoringData.setElectrovalence_all(accountingStrategyDetail.getElectrovalence()); + uploadRealTimeMonitoringData.setService_charge(accountingStrategyDetail.getServiceCharge()); + if (Objects.nonNull(data)) { + uploadRealTimeMonitoringData.setLast_time(data.getLast_time()); + uploadRealTimeMonitoringData.setPeriod_electric_price(message.getPaid_amount().divide(data.getPaid_amount())); + uploadRealTimeMonitoringData.setPeriod_charging_degree(message.getCharging_degree().divide(data.getCharging_degree())); + uploadRealTimeMonitoringData.setPeriod_service_price(message.getCharging_degree().multiply(accountingStrategyDetail.getServiceCharge()).setScale(4, RoundingMode.HALF_UP)); + }else { + log.info("首次上传实时监测数据"); + uploadRealTimeMonitoringData.setPeriod_electric_price(message.getPaid_amount()); + uploadRealTimeMonitoringData.setPeriod_charging_degree(message.getCharging_degree()); + uploadRealTimeMonitoringData.setPeriod_service_price(message.getCharging_degree().multiply(accountingStrategyDetail.getServiceCharge()).setScale(4, RoundingMode.HALF_UP)); + } uploadRealTimeMonitoringDataService.create(uploadRealTimeMonitoringData); // 业务处理 UploadRealTimeMonitoringDataQuery query = new UploadRealTimeMonitoringDataQuery(); BeanUtils.copyProperties(uploadRealTimeMonitoringData, query); chargingOrderClient.chargeMonitoring(query); + } @Override diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java new file mode 100644 index 0000000..4cfaafa --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/EndChargeMessage.java @@ -0,0 +1,29 @@ +package com.ruoyi.integration.rocket.model; + +import com.ruoyi.integration.rocket.base.BaseMessage; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 充电结束 + **/ + +@Data +public class EndChargeMessage extends BaseMessage { + + private String transaction_serial_number; // 交易流水号 + private String charging_pile_code; // 桩编码 + private String charging_gun_code; // 抢号 + private BigDecimal bms_battery_charging_status; // BMS 中止荷电状态 SOC + private BigDecimal bms_minimum_battery_voltage; // BMS 动力蓄电池单体最低电压 + private BigDecimal bms_maximum_battery_voltage; // BMS 动力蓄电池单体最高电压 + private Integer bms_minimum_battery_temperature; // BMS 动力蓄电池最低温度 + private Integer bms_maximum_battery_temperature; // BMS 动力蓄电池最高温度 + private BigDecimal cumulative_charging_time; // 电桩累计充电时间 + private BigDecimal output_energy; // 电桩输出能量 + private String charger_code; // 电桩充电机编号 + +} + + diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/TimingSettingMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/TimingSettingMessage.java new file mode 100644 index 0000000..6b7186c --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/TimingSettingMessage.java @@ -0,0 +1,17 @@ +package com.ruoyi.integration.rocket.model; + +import com.ruoyi.integration.rocket.base.BaseMessage; +import lombok.Data; + +/** + * 对时设置 + **/ + +@Data +public class TimingSettingMessage extends BaseMessage { + + private String charging_pile_code; //桩编码 + private String current_time; //当前时间 +} + + diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java index 5586e13..a851ff7 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java @@ -48,6 +48,17 @@ message.setSource(SendTagConstant.PING); return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.PING, message); } + /** + * 充电结束 + */ + public SendResult endChargeMessage(JSONObject jsonObject) { + PingMessage message = JSON.parseObject(jsonObject.toJSONString(),PingMessage.class); + // 设置业务key + message.setKey(UUID.randomUUID().toString()); + // 设置消息来源,便于查询 + message.setSource(SendTagConstant.END_CHARGE); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.END_CHARGE, message); + } /** * 计费模型验证请求 @@ -242,15 +253,15 @@ } /** - * 对时设置应答 + * 对时设置 */ - public SendResult timingSettingReplyMessage(JSONObject jsonObject) { - TimingSettingReplyMessage message = JSON.parseObject(jsonObject.toJSONString(),TimingSettingReplyMessage.class); + public SendResult timingSettingMessage(JSONObject jsonObject) { + TimingSettingMessage message = JSON.parseObject(jsonObject.toJSONString(),TimingSettingMessage.class); // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagConstant.TIMING_SETTING_REPLY); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.TIMING_SETTING_REPLY, message); + message.setSource(SendTagConstant.TIMING_SETTING); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.TIMING_SETTING, message); } /** diff --git a/ruoyi-service/ruoyi-order/pom.xml b/ruoyi-service/ruoyi-order/pom.xml index 51c211d..f5641e4 100644 --- a/ruoyi-service/ruoyi-order/pom.xml +++ b/ruoyi-service/ruoyi-order/pom.xml @@ -140,6 +140,18 @@ <scope>test</scope> </dependency> + <dependency> + <groupId>cn.afterturn</groupId> + <artifactId>easypoi-spring-boot-starter</artifactId> + <version>4.0.0</version> + <exclusions> + <exclusion> + <artifactId>guava</artifactId> + <groupId>com.google.guava</groupId> + </exclusion> + </exclusions> + </dependency> + </dependencies> <build> 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/ChargingBillController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java new file mode 100644 index 0000000..cfed3a4 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChargingBillController.java @@ -0,0 +1,91 @@ +package com.ruoyi.order.controller; + + +import com.ruoyi.account.api.feignClient.AppUserCarClient; +import com.ruoyi.account.api.feignClient.AppUserClient; +import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient; +import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; +import com.ruoyi.chargingPile.api.feignClient.ParkingLotClient; +import com.ruoyi.chargingPile.api.feignClient.SiteClient; +import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.common.security.service.TokenService; +import com.ruoyi.order.api.vo.ChargingBillVO; +import com.ruoyi.order.api.vo.ChargingOrderTimeVO; +import com.ruoyi.order.dto.ChargingBillQuery; +import com.ruoyi.order.dto.ChargingListQuery; +import com.ruoyi.order.service.*; +import com.ruoyi.order.vo.ChargingOrderListInfoVO; +import com.ruoyi.payment.api.feignClient.AliPaymentClient; +import com.ruoyi.payment.api.feignClient.WxPaymentClient; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * <p> + * 前端控制器 + * </p> + * + * @author xiaochen + * @since 2024-08-07 + */ +@Api(tags = "充电算帐单") +@RestController +@RequestMapping("/chargingBill") +public class ChargingBillController { + + @Resource + private TChargingOrderService chargingOrderService; + @Autowired + private TokenService tokenService; + @Autowired + private TOrderEvaluateService orderEvaluateService; + + @Resource + private WxPaymentClient wxPaymentClient; + + @Resource + private RedisService redisService; + + @Resource + private AliPaymentClient aliPaymentClient; + @Resource + private TShoppingOrderService shoppingOrderService; + + @Resource + private AppUserClient appUserClient; + + @Resource + private TVipOrderService vipOrderService; + @Resource + private ParkingLotClient parkingLotClient; + @Resource + private TChargingOrderRefundService chargingOrderRefundService; + + @Resource + private TShoppingOrderRefundService shoppingOrderRefundService; + @Resource + private TVipOrderRefundService vipOrderRefundService; + @Resource + private SiteClient siteClient; + @Resource + private ChargingPileClient chargingPileClient; + @Resource + private ChargingGunClient chargingGunClient; + @Resource + private AppUserCarClient appUserCarClient; + @Resource + private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService; + @ResponseBody + @PostMapping(value = "/chargingList") + @ApiOperation(value = "充电算帐单列表查询", tags = {"管理后台-充电算账单"}) + public AjaxResult<ChargingBillVO> chargingList(@RequestBody ChargingListQuery dto) { + + return AjaxResult.success(null); + } +} + 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 63e7ff5..9e67183 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 @@ -1,4 +1,5 @@ package com.ruoyi.order.controller; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.google.common.collect.Lists; import java.math.BigDecimal; @@ -457,7 +458,24 @@ } - + /** + * 远程启动失败后退款回调 + * @param request + */ + @ResponseBody + @PostMapping(value = "/chargingOrderStartupFailureWxRefund") + public void chargingOrderStartupFailureWxRefund(HttpServletRequest request){ + WxRefundNotifyResp data = wxPaymentClient.refundNotify(request).getData(); + if(null != data){ + String out_refund_no = data.getOut_refund_no(); + String refund_id = data.getRefund_id(); + String tradeState = data.getTradeState(); + String success_time = data.getSuccess_time(); + chargingOrderService.chargingOrderStartupFailureWxRefund(out_refund_no, refund_id, tradeState, success_time); + } + } + + @@ -627,7 +645,17 @@ public void chargeMonitoring(@RequestBody UploadRealTimeMonitoringDataQuery query){ chargingOrderService.chargeMonitoring(query); } - + /** + * 通过流水号查询订单 + * @param code + * @return + */ + @PostMapping(value = "/getOrderByCode/{code}") + public R<TChargingOrder> getOrderByCode(@PathVariable("code") String code){ + return R.ok(chargingOrderService.getOne(Wrappers.lambdaQuery(TChargingOrder.class) + .eq(TChargingOrder::getCode,code))); + } + @@ -760,4 +788,22 @@ return resultList; } + + /** + * 硬件充电结束后的处理逻辑 + * @param code + */ + @PostMapping("/endCharge") + public void endCharge(@RequestParam("code") String code){ + chargingOrderService.endCharge(code, 2); + } + + /** + * 硬件异常结束充电后的处理逻辑 + * @param code + */ + @PostMapping("/excelEndCharge") + public void excelEndCharge(@RequestParam("code") String code){ + chargingOrderService.excelEndCharge(code); + } } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java index 2a771c7..9a12758 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java @@ -84,6 +84,7 @@ public R manageFeedback(@RequestBody ManageFeedbackDto manageFeedbackDto) { TOrderAppeal byId = orderAppealService.getById(manageFeedbackDto.getId()); byId.setFeedback(manageFeedbackDto.getFeedback()); + byId.setStatus(2); orderAppealService.updateById(byId); return R.ok(); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java index 8e2cd80..5bbdf95 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java @@ -1,18 +1,37 @@ package com.ruoyi.order.controller; +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.common.core.utils.WebUtils; import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.order.api.model.TOrderInvoice; +import com.ruoyi.order.api.query.TOrderInvoiceQuery; +import com.ruoyi.order.api.vo.TOrderInvoiceVO; import com.ruoyi.order.dto.AddOrderInvoice; import com.ruoyi.order.dto.GetOrderInvoiceList; import com.ruoyi.order.dto.MyOrderInvoiceInfo; import com.ruoyi.order.dto.OrderInvoiceList; +import com.ruoyi.order.export.OrderInvoiceExport; import com.ruoyi.order.service.TOrderInvoiceService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.poi.ss.usermodel.Workbook; +import org.springframework.beans.BeanUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * <p> @@ -39,8 +58,68 @@ public AjaxResult addOrderInvoice(@RequestBody AddOrderInvoice addOrderInvoice){ return orderInvoiceService.addOrderInvoice(addOrderInvoice); } - - + + @PostMapping("/pageList") + @ApiOperation(value = "查询开票分页列表", tags = {"管理后台-发票管理"}) + public AjaxResult<PageInfo<TOrderInvoiceVO>> pageList(@RequestBody TOrderInvoiceQuery query){ + return AjaxResult.success(orderInvoiceService.pageList(query)); + } + + @GetMapping("/uploadPdf") + @ApiOperation(value = "上传发票", tags = {"管理后台-发票管理"}) + public AjaxResult<String> uploadPdf(@RequestParam("id") Long id, + @RequestParam("invoiceUrl") String invoiceUrl){ + TOrderInvoice orderInvoice = orderInvoiceService.getById(id); + orderInvoice.setInvoiceUrl(invoiceUrl); + orderInvoiceService.updateById(orderInvoice); + return AjaxResult.success(); + } + + @PostMapping("/statusCount") + @ApiOperation(value = "查询开票状态数量", tags = {"管理后台-发票管理"}) + public AjaxResult<Map<String,Integer>> statusCount(@RequestBody TOrderInvoiceQuery query){ + return AjaxResult.success(orderInvoiceService.statusCount(query)); + } + + /** + * 发票管理导出 + */ + @ApiOperation(value = "发票管理导出") + @Log(title = "发票管理导出", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(@RequestBody TOrderInvoiceQuery query) + { + List<TOrderInvoiceVO> list = orderInvoiceService.export(query); + List<OrderInvoiceExport> orderInvoiceExports = new ArrayList<>(); + for (TOrderInvoiceVO orderInvoiceVO : list) { + OrderInvoiceExport orderInvoiceExport = new OrderInvoiceExport(); + BeanUtils.copyProperties(orderInvoiceVO,orderInvoiceExport); + orderInvoiceExport.setBillingTime(DateUtils.localDateTimeToString(orderInvoiceVO.getBillingTime())); + orderInvoiceExports.add(orderInvoiceExport); + } + Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), OrderInvoiceExport.class, orderInvoiceExports); + HttpServletResponse response = WebUtils.response(); + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + ServletOutputStream outputStream = null; + try { + String fileName = URLEncoder.encode("发票导出.xls", "utf-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.setHeader("Pragma", "no-cache"); + response.setHeader("Cache-Control", "no-cache"); + outputStream = response.getOutputStream(); + workbook.write(outputStream); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } @ResponseBody @GetMapping("/getMyOrderInvoiceList") diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingBillQuery.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingBillQuery.java new file mode 100644 index 0000000..92add42 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingBillQuery.java @@ -0,0 +1,37 @@ +package com.ruoyi.order.dto; + +import com.ruoyi.common.core.web.page.BasePage; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class ChargingBillQuery extends BasePage { + @ApiModelProperty("订单编号") + private String code; + + @ApiModelProperty("电站id") + private Integer siteId; + @ApiModelProperty("状态(0=未知,1=等待中,2=启动中,3=充电中,4=停止中,5=已结束)") + private Integer status; + + @ApiModelProperty("手机号") + private String phone; + @ApiModelProperty("车牌号") + private String licensePlate; + + @ApiModelProperty("订单类型(1=充电订单(小程序),2=充电订单(刷卡))") + private Integer orderType; + + @ApiModelProperty("开始时间 2020-01-01 12:00:00 - 2020-01-01 23:00:00") + private String startTime; + + @ApiModelProperty("结束时间 2020-01-01 12:00:00 - 2020-01-01 23:00:00") + private String endTime; + @ApiModelProperty("用户ids 前端忽略") + private List<Long> userIds; + @ApiModelProperty("车辆ids 前端忽略") + private List<Long> carIds; + +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingListQuery.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingListQuery.java index e9187bb..875df2f 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingListQuery.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingListQuery.java @@ -1,6 +1,7 @@ package com.ruoyi.order.dto; import com.ruoyi.common.core.web.page.BasePage; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -8,31 +9,12 @@ import java.util.List; @Data +@ApiModel(value = "充电账单列表查询参数") public class ChargingListQuery extends BasePage { - @ApiModelProperty("订单编号") - private String code; - - @ApiModelProperty("电站id") - private Integer siteId; - @ApiModelProperty("状态(0=未知,1=等待中,2=启动中,3=充电中,4=停止中,5=已结束)") - private Integer status; - - @ApiModelProperty("手机号") - private String phone; - @ApiModelProperty("车牌号") - private String licensePlate; - - @ApiModelProperty("订单类型(1=充电订单(小程序),2=充电订单(刷卡))") - private Integer orderType; - - @ApiModelProperty("开始时间 2020-01-01 12:00:00 - 2020-01-01 23:00:00") + @ApiModelProperty("订单分类 1全站 2各个站点") + private String category; + @ApiModelProperty("账单周期2020-01-01 - 2020-01-01") private String startTime; - - @ApiModelProperty("结束时间 2020-01-01 12:00:00 - 2020-01-01 23:00:00") - private String endTime; - @ApiModelProperty("用户ids 前端忽略") - private List<Long> userIds; - @ApiModelProperty("车辆ids 前端忽略") - private List<Long> carIds; - + @ApiModelProperty("1已出账 2未出账") + private Integer state; } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderDto.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderDto.java index 762d550..6fd7392 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderDto.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderDto.java @@ -1,11 +1,13 @@ package com.ruoyi.order.dto; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; @Data +@ApiModel("支付订单返回Dto") public class PayOrderDto { private String id; @ApiModelProperty("1充电订单2购物订单3vip订单4停车订单") diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderQueryDto.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderQueryDto.java index f79abb4..392cebb 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderQueryDto.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderQueryDto.java @@ -1,12 +1,15 @@ package com.ruoyi.order.dto; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.web.page.BasePage; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; @Data +@ApiModel("支付订单查询dto") public class PayOrderQueryDto extends BasePage { @ApiModelProperty("订单编号") private String code; @@ -18,8 +21,10 @@ private Integer isRefund; @ApiModelProperty("下单时间1") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime1; @ApiModelProperty("下单时间2") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime2; } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/OrderInvoiceExport.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/OrderInvoiceExport.java new file mode 100644 index 0000000..9434e69 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/export/OrderInvoiceExport.java @@ -0,0 +1,79 @@ +package com.ruoyi.order.export; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import io.swagger.annotations.ApiModel; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@ApiModel(value = "导出发票") +public class OrderInvoiceExport implements Serializable { + + @Excel(name = "申请单编号",width = 30) + private String code; + + @Excel(name = "申请日期",width = 30) + private String billingTime; + + @Excel(name = "开票公司",width = 30) + private String invoicingCompany; + + @Excel(name = "发票类型",width = 30) + private String invoiceType; + + @Excel(name = "发票种类",replace = {"纸质发票_1","电子发票_2"},width = 30) + private Integer invoiceMaterial; + + @Excel(name = "开票方式",replace = {"人工_1","自动_2"},width = 30) + private Integer invoicingMethod; + + @Excel(name = "开票总金额",width = 30) + private BigDecimal totalAmount; + + @Excel(name = "服务费",width = 30) + private BigDecimal serviceCharge; + + @Excel(name = "服务费税率",width = 30) + private BigDecimal serviceTariff; + + @Excel(name = "增值服务费",width = 30) + private BigDecimal addedService; + + @Excel(name = "增值服务费税率",width = 30) + private BigDecimal addedServiceTariff; + +// @Excel(name = "开票订单类型",replace = {"充电订单_1","购物订单_2","兑换订单_3","会员订单_4"},width = 30) +// private Integer orderType; + + @Excel(name = "抬头类型",replace = {"个人_1","企业_2"},width = 30) + private Integer invoicingObjectType; + + @Excel(name = "发票抬头",width = 30) + private String name; + + @Excel(name = "开户银行",width = 30) + private String depositBank; + + @Excel(name = "银行账户",width = 30) + private String bankAccount; + + @Excel(name = "公司电话",width = 30) + private String companyPhone; + + @Excel(name = "纳税识别号",width = 30) + private String taxIdentificationNumber; + + @Excel(name = "公司地址",width = 30) + private String companyAddress; + + @Excel(name = "邮箱",width = 30) + private String mailbox; + + @Excel(name = "状态",replace = {"待开票_1","开票中_2","已开票_3"},width = 30) + private Integer status; + + @Excel(name = "用户电话",width = 30) + private String userPhone; +} 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/mapper/TOrderInvoiceMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderInvoiceMapper.java index 224b5dd..9a6fdad 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderInvoiceMapper.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TOrderInvoiceMapper.java @@ -1,8 +1,15 @@ package com.ruoyi.order.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.model.TOrderInvoice; +import com.ruoyi.order.api.query.TOrderInvoiceQuery; +import com.ruoyi.order.api.vo.TOrderInvoiceVO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; /** * <p> @@ -15,4 +22,26 @@ @Mapper public interface TOrderInvoiceMapper extends BaseMapper<TOrderInvoice> { + /** + * 发票分页查询 + * @param query + * @param pageInfo + * @return + */ + List<TOrderInvoiceVO> pageList(@Param("query") TOrderInvoiceQuery query, @Param("pageInfo")PageInfo<TOrderInvoiceVO> pageInfo); + + /** + * 查询开票状态数量 + * @param query + * @return + */ + Map<String, Integer> statusCount(@Param("query")TOrderInvoiceQuery query); + + /** + * 导出 + * @param query + * @return + */ + List<TOrderInvoiceVO> export(@Param("query")TOrderInvoiceQuery query); + } 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..78d11b6 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,18 @@ * @param query */ void chargeMonitoring(UploadRealTimeMonitoringDataQuery query); + + + /** + * 自动结束充电后的处理逻辑 + * @param code + */ + void endCharge(String code, Integer endMode); + + + /** + * 异常结束充电处理逻辑 + * @param orderCode + */ + void excelEndCharge(String orderCode); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderInvoiceService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderInvoiceService.java index d44196e..366df75 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderInvoiceService.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderInvoiceService.java @@ -2,13 +2,17 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.model.TOrderInvoice; +import com.ruoyi.order.api.query.TOrderInvoiceQuery; +import com.ruoyi.order.api.vo.TOrderInvoiceVO; import com.ruoyi.order.dto.AddOrderInvoice; import com.ruoyi.order.dto.GetOrderInvoiceList; import com.ruoyi.order.dto.MyOrderInvoiceInfo; import com.ruoyi.order.dto.OrderInvoiceList; import java.util.List; +import java.util.Map; /** * <p> @@ -43,4 +47,26 @@ * @return */ MyOrderInvoiceInfo getMyOrderInvoiceInfo(String id); + + /** + * 查询开票分页列表 + * @param query + * @return + */ + PageInfo<TOrderInvoiceVO> pageList(TOrderInvoiceQuery query); + + /** + * 查询开票状态数量 + * @param query + * @return + */ + Map<String,Integer> statusCount(TOrderInvoiceQuery query); + + /** + * 发票管理导出 + * @param query + * @return + */ + List<TOrderInvoiceVO> export(TOrderInvoiceQuery query); + } 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 1f127de..98e14d6 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,24 +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.AppUserCarClient; -import com.ruoyi.account.api.feignClient.AppUserClient; -import com.ruoyi.account.api.feignClient.AppUserVipDetailClient; -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; @@ -27,6 +20,7 @@ import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.service.TokenService; +import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.integration.api.feignClient.ChargingHandshakeClient; import com.ruoyi.integration.api.feignClient.PlatformStartChargingReplyClient; import com.ruoyi.integration.api.feignClient.SendMessageClient; @@ -35,6 +29,11 @@ import com.ruoyi.integration.api.model.PlatformStartCharging; import com.ruoyi.integration.api.model.PlatformStartChargingReply; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; +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; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; @@ -44,27 +43,35 @@ 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; import com.ruoyi.payment.api.feignClient.WxPaymentClient; import com.ruoyi.payment.api.model.RefundReq; import com.ruoyi.payment.api.model.RefundResp; import com.ruoyi.payment.api.model.WxPaymentRefundModel; import com.ruoyi.payment.api.vo.*; +import com.ruoyi.system.api.domain.SysUser; +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; import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.math.BigDecimal; +import java.math.MathContext; +import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; @@ -86,6 +93,8 @@ @Service public class TChargingOrderServiceImpl extends ServiceImpl<TChargingOrderMapper, TChargingOrder> implements TChargingOrderService { + private Logger log = LoggerFactory.getLogger(TChargingOrderServiceImpl.class); + @Resource private ChargingGunClient chargingGunClient; @@ -114,7 +123,8 @@ private AliPaymentClient aliPaymentClient; - + @Resource + private AppCouponClient appCouponClient; @Resource private AppUserVipDetailClient appUserVipDetailClient; @@ -139,10 +149,34 @@ private AccountingStrategyDetailClient accountingStrategyDetailClient; @Resource + private AccountingStrategyDetailOrderClient accountingStrategyDetailOrderClient; + + @Resource + private AccountingStrategyClient accountingStrategyClient; + + @Resource private PlatformStartChargingReplyClient platformStartChargingReplyClient; @Resource private TChargingOrderRefundService chargingOrderRefundService; + + @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<>(); @@ -410,6 +444,23 @@ } 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()){ @@ -457,7 +508,6 @@ chargingOrder.setRechargePaymentStatus(2); chargingOrder.setRechargeSerialNumber(transaction_id); chargingOrder.setStatus(2); - this.updateById(chargingOrder); //添加安全检测数据到缓存中,每步安全检测完成后需要更新缓存数据 PreChargeCheck preChargeCheck = new PreChargeCheck(); @@ -472,7 +522,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()); //计算能充电的度数 @@ -496,6 +546,8 @@ } } electrovalence = electrovalence.add(discount); + chargingOrder.setChargeAmount(electrovalence); + this.updateById(chargingOrder); TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingGun.getChargingPileId()).getData(); @@ -693,6 +745,7 @@ * @return */ @Override + @GlobalTransactional(rollbackFor = Exception.class) public AjaxResult stopCharging(String id) { TChargingOrder chargingOrder = this.getById(id); Integer status = chargingOrder.getStatus(); @@ -702,14 +755,229 @@ chargingOrder.setStatus(4); chargingOrder.setEndMode(1); this.updateById(chargingOrder); - //调用硬件停止充电,停止成功后开始计算费用退款 - // todo 待完善 + + //异步线程处理停机 + 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; + } + + 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); + } + + //计算费用,处理退款 + 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); + + appUser1.setPoints(appUser1.getPoints() + num1); + appUserClient.updateAppUser(appUser1); + } + return AjaxResult.success(); } + /** + * 手动结束后的费用计算和退款逻辑 + */ + @GlobalTransactional(rollbackFor = Exception.class) + public void endCharge(TChargingOrder chargingOrder){ + //如果使用优惠券需要判断优惠券是否满足使用条件 + //根据实际的充电金额计算退款金额 退回费用=(原金额/总金额)*(总金额-实际充电金额) + //退款金额=优惠券金额+剩余充电金额 + List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId())); + BigDecimal total = BigDecimal.ZERO; + for (TChargingOrderAccountingStrategy chargingOrderAccountingStrategy : list) { + BigDecimal periodElectricPrice = chargingOrderAccountingStrategy.getPeriodElectricPrice(); + BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodOriginalServicePrice(); + total = total.add(periodElectricPrice).add(periodServicePrice); + } + BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); + BigDecimal vipDiscountAmount = chargingOrder.getVipDiscountAmount(); + BigDecimal decimal = rechargeAmount.add(vipDiscountAmount); + //退款金额(已经计算了折扣优惠部分) + BigDecimal refundAmount = rechargeAmount.divide(decimal, new MathContext(4, RoundingMode.HALF_EVEN)).multiply(decimal.subtract(total)); + BigDecimal payAmount = BigDecimal.valueOf(total.doubleValue()); + BigDecimal orderAmount = BigDecimal.valueOf(total.doubleValue()); + if(null != chargingOrder.getVipDiscount()){ + orderAmount = orderAmount.divide(chargingOrder.getVipDiscount().divide(new BigDecimal(10))); + chargingOrder.setOrderAmount(total); + } - public void endCharge(){ + if(chargingOrder.getEndMode() == 2){ + 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(); + String couponJson = appCoupon.getCouponJson(); + TCoupon tCoupon = JSON.parseObject(couponJson, TCoupon.class); + Integer preferentialMode = tCoupon.getPreferentialMode(); + if(1 == preferentialMode){ + //满减 + if(total.compareTo(tCoupon.getMeetTheConditions()) >= 0){ + refundAmount = refundAmount.add(tCoupon.getDiscountAmount()); + chargingOrder.setCouponDiscountAmount(tCoupon.getDiscountAmount()); + payAmount = payAmount.subtract(tCoupon.getDiscountAmount()); + }else{ + chargingOrder.setAppCouponId(null); + chargingOrder.setCouponDiscountAmount(BigDecimal.ZERO); + appCouponClient.refund(chargingOrder.getAppCouponId().toString()); + } + } + if(2 == preferentialMode){ + //抵扣 + if(total.compareTo(tCoupon.getMeetTheConditions()) >= 0){ + //折扣金额 + BigDecimal divide = total.multiply(new BigDecimal(10).subtract(tCoupon.getDiscount())).divide(new BigDecimal(10)); + divide = divide.compareTo(tCoupon.getMaximumDiscountAmount()) > 0 ? tCoupon.getMaximumDiscountAmount() : divide; + refundAmount = refundAmount.add(divide); + chargingOrder.setCouponDiscountAmount(divide); + payAmount = payAmount.subtract(divide); + }else{ + chargingOrder.setAppCouponId(null); + chargingOrder.setCouponDiscountAmount(BigDecimal.ZERO); + appCouponClient.refund(chargingOrder.getAppCouponId().toString()); + } + } + } + + if(null != chargingOrder.getVipDiscount()){ + BigDecimal subtract = orderAmount.subtract(total); + chargingOrder.setVipDiscountAmount(subtract); + payAmount = payAmount.subtract(subtract); + } + //开始构建退款费用 + if(refundAmount.compareTo(BigDecimal.ZERO) > 0){ + Integer rechargePaymentType = chargingOrder.getRechargePaymentType(); + //构建退款明细 + TChargingOrderRefund chargingOrderRefund = new TChargingOrderRefund(); + chargingOrderRefund.setChargingOrderId(chargingOrder.getId()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + chargingOrderRefund.setRefundCode("CDF" + sdf.format(new Date()) + (Math.random() * 1000)); + chargingOrderRefund.setRefundAmount(refundAmount); + chargingOrderRefund.setRefundStatus(1); + chargingOrderRefund.setPayType(rechargePaymentType); + chargingOrderRefund.setRefundStatus(1); + chargingOrderRefund.setCode(chargingOrder.getCode()); + chargingOrderRefund.setRefundTitle("充电完成退款"); + chargingOrderRefund.setRefundContent("充电完成退款"); + chargingOrderRefund.setRefundReason("充电完成退款"); + chargingOrderRefund.setRefundRemark("充电完成退款"); + chargingOrderRefund.setRefundTotalAmount(refundAmount); + chargingOrderRefund.setPayAmount(rechargeAmount); + if(1 == rechargePaymentType){ + WxPaymentRefundModel model = new WxPaymentRefundModel(); + model.setOut_trade_no(chargingOrder.getCode()); + model.setOut_refund_no(chargingOrderRefund.getRefundCode()); + model.setReason("充电完成退款"); + model.setNotify_url("http://127.0.0.1:9000/order/t-charging-order/chargingOrderStartupFailureWxRefund"); + WxPaymentRefundModel.RefundAmount amount = new WxPaymentRefundModel.RefundAmount(); + amount.setRefund(refundAmount.multiply(new BigDecimal(100)).intValue()); + amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue()); + amount.setCurrency("CNY"); + model.setAmount(amount); + R<String> orderR = wxPaymentClient.refundOrderR(model); + if(200 == orderR.getCode()){ + chargingOrderRefundService.save(chargingOrderRefund); + } + } + if(2 == rechargePaymentType){ + RefundReq dto = new RefundReq(); + dto.setOutTradeNo(chargingOrder.getCode()); + dto.setOutRequestNo(chargingOrderRefund.getCode()); + dto.setRefundAmount(rechargeAmount.toString()); + dto.setRefundReason("充电完成退款"); + RefundResp resp = aliPaymentClient.refund(dto).getData(); + if(null != resp){ + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE"); + AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", sdf1.format(new Date())); + if(success.isSuccess()){ + chargingOrderRefundService.save(chargingOrderRefund); + } + } + } + + } } @@ -881,7 +1149,13 @@ public List<Map<String, BigDecimal>> getYearData(List<Long> chargingOrderIds) { return this.baseMapper.getYearData(chargingOrderIds); } + @Resource + private SysUserClient sysUserClient; + @Resource + private UserSiteClient userSiteClient; + @Resource + private RoleSiteClient roleSiteClient; @Override public ChargingOrderTimeVO chargingList(ChargingListQuery dto) { String startTime1 = null; @@ -894,13 +1168,7 @@ startTime1 = split[0]; startTime2 = split[1]; } - if (StringUtils.hasLength(dto.getEndTime())){ - String[] split = dto.getEndTime().split(" - "); - endTime1 = split[0]; - endTime2 = split[1]; - } ChargingOrderTimeVO chargingOrderTimeVO = new ChargingOrderTimeVO(); - PageInfo<ChargingOrderListVO> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize()); List<ChargingOrderListVO> list = this.baseMapper.chargingList(pageInfo,dto,startTime1,startTime2,endTime1,endTime2); @@ -1060,6 +1328,11 @@ } @Override + public R payRefund(PayOrderRefundDto payOrderQueryDto) { + return null; + } + + @Override public ChargingOrderListInfoVO chargingInfo(String uid) { TChargingOrder chargingOrder= this.getById(uid); @@ -1079,29 +1352,35 @@ } chargingOrderListInfoVO.setEndMode(chargingOrder.getEndMode()); // todo 周一完善 -// chargingOrderListInfoVO.setStartSoc(); -// chargingOrderListInfoVO.setEndSoc(); -// chargingOrderListInfoVO.setChargingCapacity(); -// chargingOrderListInfoVO.setSiteId(); -// chargingOrderListInfoVO.setChargingPileId(); -// chargingOrderListInfoVO.setAppUserId(); -// chargingOrderListInfoVO.setAppUserCarId(); -// chargingOrderListInfoVO.setChargingGunId(); -// chargingOrderListInfoVO.setOrderType(); -// chargingOrderListInfoVO.setChargingSecond(); -// chargingOrderListInfoVO.setLicensePlate(); -// chargingOrderListInfoVO.setPhone(); -// chargingOrderListInfoVO.setPaymentAmount(); -// chargingOrderListInfoVO.setElectrovalence(); -// chargingOrderListInfoVO.setServiceCharge(); -// chargingOrderListInfoVO.setStartTime(); -// chargingOrderListInfoVO.setEndTime(); -// chargingOrderListInfoVO.setId(); -// chargingOrderListInfoVO.setUid(); -// chargingOrderListInfoVO.setList(); + // 获取开始SOC 结束soc + List<UploadRealTimeMonitoringData> data6 = uploadRealTimeMonitoringDataClient.getDataByOrderCode(chargingOrder.getCode()).getData(); + if (!data6.isEmpty()){ + // 第一条数据soc为开始 最后一条数据soc为结束soc + chargingOrderListInfoVO.setStartSoc(data6.get(0).getSoc().toString()); + chargingOrderListInfoVO.setEndSoc(data6.get(data6.size()-1).getSoc().toString()); + chargingOrderListInfoVO.setChargingCapacity(data6.get(data6.size()-1).getCharging_degree()); + chargingOrderListInfoVO.setChargingSecond(data6.get(data6.size()-1).getCumulative_charging_time()*60+""); - - return null; + } + if (chargingOrder.getAppUserCarId()!=null){ + List<TAppUserCar> data3 = appUserCarClient.getCarByIds(Collections.singletonList(chargingOrder.getAppUserCarId())).getData(); + if (!data3.isEmpty())chargingOrderListInfoVO.setLicensePlate(data3.get(0).getLicensePlate()); + } + chargingOrderListInfoVO.setStartTime(chargingOrder.getStartTime()); + chargingOrderListInfoVO.setEndTime(chargingOrder.getEndTime()); + chargingOrderListInfoVO.setId(chargingOrder.getId()); + chargingOrderListInfoVO.setUid(chargingOrder.getId().toString()); + chargingOrderListInfoVO.setList(data6); + chargingOrderListInfoVO.setCouponDiscountAmount(chargingOrder.getCouponDiscountAmount()); + chargingOrderListInfoVO.setVipDiscountAmount(chargingOrder.getVipDiscountAmount()); + chargingOrderListInfoVO.setSharingAmount(chargingOrder.getSharingAmount()); + chargingOrderListInfoVO.setCommissionAmount(chargingOrder.getCommissionAmount()); + // 查询费用明细列表 + List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.lambdaQuery() + .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId()) + .list(); + chargingOrderListInfoVO.setList1(list); + return chargingOrderListInfoVO; } @@ -1111,7 +1390,166 @@ */ @Override public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) { - // todo 需完善 + 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())); + 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"); + if(null == chargingOrderAccountingStrategy){ + chargingOrderAccountingStrategy = new TChargingOrderAccountingStrategy(); + chargingOrderAccountingStrategy.setChargingOrderId(chargingOrder.getId()); + chargingOrderAccountingStrategy.setAccountingStrategyDetailId(strategyDetail.getId()); + chargingOrderAccountingStrategy.setType(strategyDetail.getType()); + chargingOrderAccountingStrategy.setStartTime(sdf.format(chargingOrder.getStartTime())); + chargingOrderAccountingStrategy.setEndTime(sdf.format(new Date())); + chargingOrderAccountingStrategy.setElectrovalence(strategyDetail.getElectrovalence()); + chargingOrderAccountingStrategy.setServiceCharge(strategyDetail.getServiceCharge()); + chargingOrderAccountingStrategy.setCostServiceCharge(strategyDetail.getCostServiceCharge()); + BigDecimal charging_degree = query.getCharging_degree(); + BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(charging_degree); + BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(charging_degree); + BigDecimal serviceCharge = originalServicePrice; + //计算优惠金额 + if(null != chargingOrder.getVipDiscount()){ + serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10))); + } + chargingOrderAccountingStrategy.setChargingCapacity(charging_degree); + chargingOrderAccountingStrategy.setPeriodElectricPrice(electrovalenc); + chargingOrderAccountingStrategy.setPeriodServicePrice(serviceCharge); + chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(originalServicePrice); + chargingOrderAccountingStrategy.setCreateTime(LocalDateTime.now()); + chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy); + }else{ + if(chargingOrderAccountingStrategy.getAccountingStrategyDetailId().equals(strategyDetail.getId())){ + BigDecimal periodServicePrice = chargingOrderAccountingStrategy.getPeriodServicePrice(); + BigDecimal periodElectricPrice = chargingOrderAccountingStrategy.getPeriodElectricPrice(); + BigDecimal periodOriginalServicePrice = chargingOrderAccountingStrategy.getPeriodOriginalServicePrice(); + BigDecimal charging_degree = query.getCharging_degree(); + BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(charging_degree); + BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(charging_degree); + BigDecimal serviceCharge = originalServicePrice; + //计算优惠金额 + if(null != chargingOrder.getVipDiscount()){ + serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10))); + } + periodServicePrice = periodServicePrice.add(serviceCharge); + periodOriginalServicePrice = periodOriginalServicePrice.add(originalServicePrice); + periodElectricPrice = periodElectricPrice.add(electrovalenc); + chargingOrderAccountingStrategy.setPeriodServicePrice(periodServicePrice); + chargingOrderAccountingStrategy.setPeriodOriginalServicePrice(periodOriginalServicePrice); + chargingOrderAccountingStrategy.setPeriodElectricPrice(periodElectricPrice); + chargingOrderAccountingStrategy.setEndTime(sdf.format(new Date())); + chargingOrderAccountingStrategyService.updateById(chargingOrderAccountingStrategy); + }else{ + TChargingOrderAccountingStrategy chargingOrderAccountingStrategy1 = new TChargingOrderAccountingStrategy(); + chargingOrderAccountingStrategy1.setChargingOrderId(chargingOrder.getId()); + chargingOrderAccountingStrategy1.setAccountingStrategyDetailId(strategyDetail.getId()); + chargingOrderAccountingStrategy1.setType(strategyDetail.getType()); + chargingOrderAccountingStrategy1.setStartTime(sdf.format(chargingOrderAccountingStrategy.getEndTime())); + chargingOrderAccountingStrategy1.setEndTime(sdf.format(new Date())); + chargingOrderAccountingStrategy1.setElectrovalence(strategyDetail.getElectrovalence()); + chargingOrderAccountingStrategy1.setServiceCharge(strategyDetail.getServiceCharge()); + chargingOrderAccountingStrategy1.setCostServiceCharge(strategyDetail.getCostServiceCharge()); + BigDecimal charging_degree = query.getCharging_degree(); + BigDecimal electrovalenc = strategyDetail.getElectrovalence().multiply(charging_degree); + BigDecimal originalServicePrice = strategyDetail.getServiceCharge().multiply(charging_degree); + BigDecimal serviceCharge = originalServicePrice; + //计算优惠金额 + if(null != chargingOrder.getVipDiscount()){ + serviceCharge = serviceCharge.multiply(chargingOrder.getVipDiscount().divide(new BigDecimal(10))); + } + chargingOrderAccountingStrategy1.setChargingCapacity(charging_degree); + chargingOrderAccountingStrategy1.setPeriodElectricPrice(electrovalenc); + chargingOrderAccountingStrategy1.setPeriodOriginalServicePrice(originalServicePrice); + chargingOrderAccountingStrategy1.setPeriodServicePrice(serviceCharge); + chargingOrderAccountingStrategy1.setCreateTime(LocalDateTime.now()); + chargingOrderAccountingStrategyService.save(chargingOrderAccountingStrategy1); + } + } + + List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>() + .eq(TChargingOrderAccountingStrategy::getChargingOrderId, chargingOrder.getId())); + BigDecimal t = BigDecimal.ZERO; + for (TChargingOrderAccountingStrategy coas : list) { + t = t.add(coas.getPeriodServicePrice()).add(coas.getPeriodElectricPrice()); + } + BigDecimal residualAmount = chargingOrder.getRechargeAmount().subtract(t).setScale(2, RoundingMode.HALF_EVEN); + chargingOrder.setResidualAmount(residualAmount); + BigDecimal divide = query.getOutput_current().multiply(query.getOutput_voltage()).divide(new BigDecimal(1000)); + chargingOrder.setChargingPower(divide); + this.updateById(chargingOrder); + } + } + + + /** + * 自动结束充电后的处理逻辑 + * @param orderCode + */ + @Override + @GlobalTransactional(rollbackFor = Exception.class) + public void endCharge(String orderCode, Integer endMode) { + 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(endMode); + 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); + } + } + + /** + * 异常结束充电处理逻辑 + * @param orderCode + */ + @Override + public void excelEndCharge(String orderCode) { + endCharge(orderCode, 0); } 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 61431f4..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 @@ -4,23 +4,25 @@ import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.account.api.feignClient.AppUserClient; +import com.ruoyi.account.api.model.TAppUser; +import com.ruoyi.account.api.model.TAppUserCar; import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient; import com.ruoyi.chargingPile.api.feignClient.SiteClient; import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.common.core.utils.StringUtils; 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; @@ -30,6 +32,7 @@ import io.seata.spring.annotation.GlobalTransactional; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; @@ -75,7 +78,12 @@ @Resource private CouponClient couponClient; + @Resource + private AppUserClient appUserClient; + @Resource + private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService; + @@ -117,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)); @@ -125,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(); @@ -228,4 +244,74 @@ } return myOrderInvoiceInfo; } + + @Override + public PageInfo<TOrderInvoiceVO> pageList(TOrderInvoiceQuery query) { + // 查询申请用户 + List<TAppUser> userList = appUserClient.selectByPhoneLike(query.getUserPhone()).getData(); + if(CollectionUtils.isEmpty(userList)){ + return new PageInfo<>(); + } + query.setUserIds(userList.stream().map(TAppUser::getId).collect(Collectors.toList())); + PageInfo<TOrderInvoiceVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize()); + List<TOrderInvoiceVO> list = this.baseMapper.pageList(query,pageInfo); + + List<Long> ids = list.stream().map(TOrderInvoiceVO::getId).collect(Collectors.toList()); + + List<TOrderInvoiceDetail> orderInvoiceDetailList = orderInvoiceDetailService.list(new LambdaQueryWrapper<TOrderInvoiceDetail>() + .in(TOrderInvoiceDetail::getOrderInvoiceId, ids)); + + list.forEach(e->{ + e.setServiceTariff(orderInvoiceDetailList.get(0).getServiceTariff()); + e.setElectricityTariff(orderInvoiceDetailList.get(0).getElectricityTariff()); + e.setAddedServiceTariff(orderInvoiceDetailList.get(0).getAddedServiceTariff()); + e.setAddedService(orderInvoiceDetailList.stream().map(TOrderInvoiceDetail::getAddedService).reduce(BigDecimal::add).get()); + e.setElectrovalence(orderInvoiceDetailList.stream().map(TOrderInvoiceDetail::getElectrovalence).reduce(BigDecimal::add).get()); + e.setServiceCharge(orderInvoiceDetailList.stream().map(TOrderInvoiceDetail::getServiceCharge).reduce(BigDecimal::add).get()); + e.setUserPhone(userList.stream().filter(m->m.getId().equals(Long.parseLong(e.getBillingUserId().toString()))).findFirst().get().getPhone()); + }); + + pageInfo.setRecords(list); + return pageInfo; + } + + @Override + public Map<String, Integer> statusCount(TOrderInvoiceQuery query) { + Map<String, Integer> map = new HashMap<>(); + List<TAppUser> userList = appUserClient.selectByPhoneLike(query.getUserPhone()).getData(); + if(CollectionUtils.isEmpty(userList)){ + map.put("notAccepted",0); + map.put("processing",0); + map.put("finished",0); + return map; + } + query.setUserIds(userList.stream().map(TAppUser::getId).collect(Collectors.toList())); + map = this.baseMapper.statusCount(query); + return map; + } + + @Override + public List<TOrderInvoiceVO> export(TOrderInvoiceQuery query) { + // 查询申请用户 + List<TAppUser> userList = appUserClient.selectByPhoneLike(query.getUserPhone()).getData(); + if(CollectionUtils.isEmpty(userList)){ + return new ArrayList<>(); + } + query.setUserIds(userList.stream().map(TAppUser::getId).collect(Collectors.toList())); + PageInfo<TOrderInvoiceVO> pageInfo = new PageInfo<>(query.getPageCurr(),query.getPageSize()); + List<TOrderInvoiceVO> list = this.baseMapper.export(query); + List<Long> ids = list.stream().map(TOrderInvoiceVO::getId).collect(Collectors.toList()); + List<TOrderInvoiceDetail> orderInvoiceDetailList = orderInvoiceDetailService.list(new LambdaQueryWrapper<TOrderInvoiceDetail>() + .in(TOrderInvoiceDetail::getOrderInvoiceId, ids)); + list.forEach(e->{ + e.setServiceTariff(orderInvoiceDetailList.get(0).getServiceTariff()); + e.setElectricityTariff(orderInvoiceDetailList.get(0).getElectricityTariff()); + e.setAddedServiceTariff(orderInvoiceDetailList.get(0).getAddedServiceTariff()); + e.setAddedService(orderInvoiceDetailList.stream().map(TOrderInvoiceDetail::getAddedService).reduce(BigDecimal::add).get()); + e.setElectrovalence(orderInvoiceDetailList.stream().map(TOrderInvoiceDetail::getElectrovalence).reduce(BigDecimal::add).get()); + e.setServiceCharge(orderInvoiceDetailList.stream().map(TOrderInvoiceDetail::getServiceCharge).reduce(BigDecimal::add).get()); + e.setUserPhone(userList.stream().filter(m->m.getId().equals(Long.parseLong(e.getBillingUserId().toString()))).findFirst().get().getPhone()); + }); + return list; + } } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ChargingOrderListInfoVO.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ChargingOrderListInfoVO.java index 1611e8c..1e75523 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ChargingOrderListInfoVO.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/ChargingOrderListInfoVO.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; +import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -44,7 +45,7 @@ @ApiModelProperty(value = "订单类型(1=充电订单(小程序),2=充电订单(刷卡))") private String orderType; @ApiModelProperty(value = "充电时间 秒") - private Long chargingSecond; + private String chargingSecond; @ApiModelProperty(value = "车牌号") private String licensePlate; @ApiModelProperty(value = "客户手机号") @@ -65,6 +66,16 @@ private Long id; @ApiModelProperty(value = "订单uid") private String uid; + @ApiModelProperty(value = "费用明细-优惠券优惠金额") + private BigDecimal couponDiscountAmount; + @ApiModelProperty(value = "费用明细-会员优惠金额") + private BigDecimal vipDiscountAmount; + @ApiModelProperty(value = "费用明细-平台分佣") + private BigDecimal sharingAmount; + @ApiModelProperty(value = "费用明细-手续费") + private BigDecimal commissionAmount; @ApiModelProperty(value = "充电信息") List<UploadRealTimeMonitoringData> list; + @ApiModelProperty(value = "费用明细-费用列表") + List<TChargingOrderAccountingStrategy> list1; } diff --git a/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml index 9a41659..a08183e 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml @@ -24,6 +24,7 @@ namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb username: nacos password: nacos + ip: 192.168.110.85 config: # 配置中心地址 server-addr: 192.168.110.169:8848 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 diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml index e7b466a..a320601 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml @@ -105,62 +105,75 @@ </select> <select id="payOrderQuery" resultType="com.ruoyi.order.dto.PayOrderDto"> SELECT * FROM (SELECT - id, - `code`, - 1 as type, - title, - phone, - `status`, - order_amount, - payment_amount , - create_time, - end_time, - pay_time - FROM - charging_pile_order.t_charging_order UNION ALL - SELECT - id, - `code`, - 2 as type, - title, - phone, - `status`, - order_amount, - payment_amount , - create_time, - receiving_time as end_time, - pay_time - FROM - charging_pile_order.t_shopping_order UNION ALL - SELECT - id, - `code`, - 3 as type, - title, - phone, - payment_status AS `status`, - order_amount, - payment_amount , - create_time, - create_time as end_time, - pay_time - FROM - charging_pile_order.t_vip_order UNION ALL - SELECT - id, - `code`, - 4 as type, - title, - phone, - `status`, - order_amount , - order_amount as payment_amount, - create_time, - out_parking_time as end_time, - out_parking_time as pay_time - FROM - charging_pile_service.t_parking_record ) o + id, + `code`, + 1 as type, + title, + phone, + `status`, + order_amount, + payment_amount , + create_time, + end_time, + pay_time, + refund_status, + (payment_amount-refund_amount) as final_amount, + del_flag + FROM + charging_pile_order.t_charging_order UNION ALL + SELECT + id, + `code`, + 2 as type, + title, + phone, + `status`, + order_amount, + payment_amount , + create_time, + receiving_time as end_time, + pay_time, + refund_status, + (payment_amount-refund_amount) as final_amount, + del_flag + FROM + charging_pile_order.t_shopping_order UNION ALL + SELECT + id, + `code`, + 3 as type, + title, + phone, + payment_status AS `status`, + order_amount, + payment_amount , + create_time, + create_time as end_time, + pay_time, + refund_status, + (payment_amount-refund_amount) as final_amount, + del_flag + FROM + charging_pile_order.t_vip_order UNION ALL + SELECT + id, + `code`, + 4 as type, + title, + phone, + `status`, + order_amount , + order_amount as payment_amount, + create_time, + out_parking_time as end_time, + out_parking_time as pay_time, + null as refund_status, + 0 as final_amount, + 0 as del_flag + FROM + charging_pile_service.t_parking_record ) o <where> + o.del_flag = 0 <if test="data.code != null and data.code != ''"> AND o.code LIKE CONCAT('%',#{data.code},'%') </if> @@ -170,9 +183,6 @@ <if test="data.type != null"> AND o.type = #{data.type} </if> - <if test="data.status != null"> - AND o.status = #{data.status} - </if> <if test="data.createTime1 != null"> AND o.create_time >= #{data.createTime1} </if> @@ -180,7 +190,7 @@ AND o.create_time <= #{data.createTime2} </if> </where> - + ORDER BY o.create_time desc </select> <select id="getRefundList" resultType="com.ruoyi.order.api.model.TChargingOrderRefund"> diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceDetailMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceDetailMapper.xml index b668acb..c9db30f 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceDetailMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceDetailMapper.xml @@ -12,11 +12,14 @@ <result column="electricity_tariff" property="electricityTariff" /> <result column="service_tariff" property="serviceTariff" /> <result column="added_service_tariff" property="addedServiceTariff" /> + <result column="electrovalence" property="electrovalence" /> + <result column="service_charge" property="serviceCharge" /> + <result column="added_service" property="addedService" /> </resultMap> <!-- 通用查询结果列 --> <sql id="Base_Column_List"> - id, order_invoice_id, order_type, order_id, invoice_amount, electricity_tariff, service_tariff, added_service_tariff + id, order_invoice_id, order_type, order_id, invoice_amount, electricity_tariff, service_tariff, added_service_tariff,electrovalence,service_charge,added_service </sql> </mapper> diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceMapper.xml index d7fddbe..c7fdb2d 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TOrderInvoiceMapper.xml @@ -33,5 +33,115 @@ <sql id="Base_Column_List"> id, code, app_user_id, order_type, invoicing_company, invoice_type_id, invoice_type, invoice_material, invoicing_method, invoicing_object_type, name, tax_identification_number, company_address, company_phone, deposit_bank, bank_account, total_amount, invoice_url, mailbox, status, create_time, billing_time, billing_user_id </sql> + <select id="pageList" resultType="com.ruoyi.order.api.vo.TOrderInvoiceVO"> + select toi.id, toi.code, toi.app_user_id, toi.order_type, toi.invoicing_company, toi.invoice_type_id, toi.invoice_type, toi.invoice_material, + toi.invoicing_method, toi.invoicing_object_type, toi.name, toi.tax_identification_number, toi.company_address, toi.company_phone, + toi.deposit_bank, toi.bank_account, toi.total_amount, toi.invoice_url, toi.mailbox, toi.status, toi.create_time, toi.billing_time, + toi.billing_user_id + from t_order_invoice toi + <where> + <if test="query.invoicingCompany != null and query.invoicingCompany != ''"> + AND toi.invoicing_company LIKE concat('%',#{query.invoicingCompany},'%') + </if> + <if test="query.invoiceType != null and query.invoiceType != ''"> + AND toi.invoice_type LIKE concat('%',#{query.invoiceType},'%') + </if> + <if test="query.invoicingObjectType != null"> + AND toi.invoicing_object_type = #{query.invoicingObjectType} + </if> + <if test="query.invoiceMaterial != null"> + AND toi.invoice_material = #{query.invoiceMaterial} + </if> + <if test="query.invoicingMethod != null"> + AND toi.invoicing_method = #{query.invoicingMethod} + </if> + <if test="query.name != null and query.name != ''"> + AND toi.name LIKE concat('%',#{query.name},'%') + </if> + <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''"> + AND toi.billing_time BETWEEN #{query.startTime} AND #{query.endTime} + </if> + <if test="query.userIds != null and query.userIds.size()>0"> + AND toi.billing_user_id IN + <foreach collection="query.userIds" close=")" open="(" item="userId" separator=","> + #{userId} + </foreach> + </if> + </where> + ORDER BY toi.billing_time DESC + </select> + <select id="statusCount" resultType="java.util.Map"> + select + COUNT(CASE WHEN status = 1 THEN 1 END) AS `notAccepted`, + COUNT(CASE WHEN status = 2 THEN 1 END) AS `processing`, + COUNT(CASE WHEN status = 3 THEN 1 END) AS `finished` + from t_order_invoice toi + <where> + <if test="query.invoicingCompany != null and query.invoicingCompany != ''"> + AND toi.invoicing_company LIKE concat('%',#{query.invoicingCompany},'%') + </if> + <if test="query.invoiceType != null and query.invoiceType != ''"> + AND toi.invoice_type LIKE concat('%',#{query.invoiceType},'%') + </if> + <if test="query.invoicingObjectType != null"> + AND toi.invoicing_object_type = #{query.invoicingObjectType} + </if> + <if test="query.invoiceMaterial != null"> + AND toi.invoice_material = #{query.invoiceMaterial} + </if> + <if test="query.invoicingMethod != null"> + AND toi.invoicing_method = #{query.invoicingMethod} + </if> + <if test="query.name != null and query.name != ''"> + AND toi.name LIKE concat('%',#{query.name},'%') + </if> + <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''"> + AND toi.billing_time BETWEEN #{query.startTime} AND #{query.endTime} + </if> + <if test="query.userIds != null and query.userIds.size()>0"> + AND toi.billing_user_id IN + <foreach collection="query.userIds" close=")" open="(" item="userId" separator=","> + #{userId} + </foreach> + </if> + </where> + </select> + <select id="export" resultType="com.ruoyi.order.api.vo.TOrderInvoiceVO"> + select toi.id, toi.code, toi.app_user_id, toi.order_type, toi.invoicing_company, toi.invoice_type_id, toi.invoice_type, toi.invoice_material, + toi.invoicing_method, toi.invoicing_object_type, toi.name, toi.tax_identification_number, toi.company_address, toi.company_phone, + toi.deposit_bank, toi.bank_account, toi.total_amount, toi.invoice_url, toi.mailbox, toi.status, toi.create_time, toi.billing_time, + toi.billing_user_id + from t_order_invoice toi + <where> + <if test="query.invoicingCompany != null and query.invoicingCompany != ''"> + AND toi.invoicing_company LIKE concat('%',#{query.invoicingCompany},'%') + </if> + <if test="query.invoiceType != null and query.invoiceType != ''"> + AND toi.invoice_type LIKE concat('%',#{query.invoiceType},'%') + </if> + <if test="query.invoicingObjectType != null"> + AND toi.invoicing_object_type = #{query.invoicingObjectType} + </if> + <if test="query.invoiceMaterial != null"> + AND toi.invoice_material = #{query.invoiceMaterial} + </if> + <if test="query.invoicingMethod != null"> + AND toi.invoicing_method = #{query.invoicingMethod} + </if> + <if test="query.name != null and query.name != ''"> + AND toi.name LIKE concat('%',#{query.name},'%') + </if> + <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''"> + AND toi.billing_time BETWEEN #{query.startTime} AND #{query.endTime} + </if> + <if test="query.userIds != null and query.userIds.size()>0"> + AND toi.billing_user_id IN + <foreach collection="query.userIds" close=")" open="(" item="userId" separator=","> + #{userId} + </foreach> + </if> + </where> + ORDER BY toi.billing_time DESC + </select> </mapper> diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java index a2a4ee5..9a1207d 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java @@ -194,7 +194,11 @@ total = total.add(vip.getMaximumDeduction().multiply(BigDecimal.valueOf(vip.getDiscountTimes()))); for (VipCouponDto vipCouponDto : vipCouponDtos) { TCoupon tCoupon = vipCouponDto.getTCoupon(); - total.add(tCoupon.getMaximumDiscountAmount()); + if (tCoupon.getPreferentialMode()==2) { + total.add(tCoupon.getMaximumDiscountAmount()); + }else { + total.add(tCoupon.getDiscountAmount()); + } } vipInfoDto.setTotalDiscount(total); vipInfoDto.setTimeAmount(vip.getMaximumDeduction().multiply(BigDecimal.valueOf(vip.getDiscountTimes()))); -- Gitblit v1.7.1