From a3aa8bd77b4a9a74601238cc467cfd115b0821b6 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期四, 05 九月 2024 15:49:39 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile --- ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java | 4 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 474 ++++++++++ ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/InviteUserFallbackFactory.java | 43 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-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 | 2 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 | 1 ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/GetInviteUser.java | 19 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/AccountingStrategyDetailOrderClient.java | 26 ruoyi-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-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TRepairService.java | 13 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java | 28 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java | 16 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java | 6 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-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStopChargingReplyFallbackFactory.java | 35 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-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-integration/src/main/java/com/ruoyi/integration/controller/PlatformStopChargingReplyController.java | 34 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java | 10 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-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java | 21 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-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStopChargingReplyServiceImpl.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-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/BillingModeVerifyMessageListener.java | 21 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/GetPlatformStopChargingReply.java | 19 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/TransactionRecordMessageListener.java | 12 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyOrderMapper.java | 11 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 | 12 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/service/AccountingStrategyOrderService.java | 11 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java | 10 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/AccountingStrategyDetailOrderController.java | 39 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java | 10 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java | 16 ruoyi-api/ruoyi-api-order/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java | 23 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java | 28 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 | 100 + 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 | 22 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyDetailOrderMapper.java | 11 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/AccountingStrategyDetailOrderMapper.xml | 17 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppCouponClient.java | 17 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-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TAccountingStrategyDetailMapper.xml | 4 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 | 10 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyClient.java | 25 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/AccountingStrategyDetailOrderFallbackFactory.java | 37 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserRoleClient.java | 28 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-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-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-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java | 42 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/utils/listener/IotMessageListener.java | 4 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 89 files changed, 2,424 insertions(+), 213 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/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/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 721ae65..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 @@ -77,7 +77,6 @@ @TableField("status") private Integer status; - @ApiModelProperty(value = "当前领取优惠卷的json记录") @TableField("coupon_json") private String couponJson; 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 10f44fe..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,16 +24,31 @@ public AccountingStrategyDetailClient create(Throwable throwable) { log.error("计费策略调用失败:{}", throwable.getMessage()); return new AccountingStrategyDetailClient(){ - - @Override - public R<TAccountingStrategyDetail> getNowData(Integer accountingStrategyId) { - return R.fail("获取当前有效的计费策略明细失败:" + throwable.getMessage()); - } @Override public R<TAccountingStrategyDetail> getDetailBySiteId(Integer siteId) { 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<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 cddb45e..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,13 +20,7 @@ public interface AccountingStrategyDetailClient { - /** - * 获取当前有效的计费策略明细 - * @param accountingStrategyId - * @return - */ - @PostMapping("/t-accounting-strategy-detail/getNowData") - R<TAccountingStrategyDetail> getNowData(@RequestParam("accountingStrategyId") Integer accountingStrategyId); + /** * 通过站点id查询当前时段使用的策略明细 * @param siteId @@ -30,4 +28,34 @@ */ @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/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/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 3887a67..e713d31 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 @@ -80,6 +80,16 @@ 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 11fe605..225e498 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 @@ -79,4 +79,20 @@ */ @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 f09f67f..5cfac91 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; 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/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-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/TInviteUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInviteUserController.java index a9d9cd4..cb1aa05 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInviteUserController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInviteUserController.java @@ -1,8 +1,17 @@ package com.ruoyi.account.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.account.api.model.TInviteUser; +import com.ruoyi.account.api.vo.GetInviteUser; +import com.ruoyi.account.service.TInviteUserService; +import com.ruoyi.common.core.domain.R; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; /** * <p> @@ -15,6 +24,43 @@ @RestController @RequestMapping("/t-invite-user") public class TInviteUserController { - + + @Resource + private TInviteUserService inviteUserService; + + + + + /** + * 获取用户邀请数据 + * @param query + * @return + */ + @PostMapping("/getInviteUser") + public R<TInviteUser> getInviteUser(@RequestBody GetInviteUser query){ + TInviteUser one = inviteUserService.getOne(new LambdaQueryWrapper<TInviteUser>().eq(TInviteUser::getAppUserId, query.getBeInvitedAppUserId()) + .eq(TInviteUser::getBeInvitedAppUserId, query.getBeInvitedAppUserId())); + return R.ok(one); + } + + + /** + * 修改邀请数据 + * @param query + */ + @PostMapping("/updateInviteUser") + public void updateInviteUser(@RequestBody TInviteUser query){ + inviteUserService.updateById(query); + } + + + /** + * 添加邀请数据 + * @param query + */ + @PostMapping("/saveInviteUser") + public void saveInviteUser(@RequestBody TInviteUser query){ + inviteUserService.save(query); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java index ed71ef3..2a28707 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java @@ -111,6 +111,11 @@ if(flag){ return AjaxResult.error("计费模板时间设置有误差"); } + // 判断同阶段是否价格不一致 + Boolean flag1 = accountingStrategyDetailService.isStrategyPriceConsistent(dto.getAccountingStrategyDetails()); + if(!flag1){ + return AjaxResult.error("同阶段费率值需一致"); + } Long userId = SecurityUtils.getLoginUser().getUserid(); dto.setUserId(userId); accountingStrategyService.save(dto); @@ -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){ @@ -405,5 +415,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 f8558c5..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,24 +84,8 @@ } - /** - * 获取当前有效的计费模板 - * @param accountingStrategyId - * @return - */ - @PostMapping("/getNowData") - public R<TAccountingStrategyDetail> getNowData(@RequestParam("accountingStrategyId") Integer accountingStrategyId){ - TAccountingStrategyDetail one = accountingStrategyDetailService.getOne(new LambdaQueryWrapper<TAccountingStrategyDetail>() - .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategyId) - .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time")); - return R.ok(one); - } + - /** - * 获取当前有效的计费模板 - * @param accountingStrategyId - * @return - */ /** * 通过站点id查询当前时段使用的策略明细 * @param siteId @@ -111,5 +100,80 @@ .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/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/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/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/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 8708f9f..8466119 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java @@ -89,7 +89,7 @@ /** * 对时设置应答 */ - public static final String TIMING_SETTING_REPLY ="timing_setting_reply"; + public static final String TIMING_SETTING ="timing_setting"; /** * 计费模型应答 */ diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java index 1dde7c6..9a27b45 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java @@ -172,13 +172,13 @@ } /** - * 对时设置 - * @param timingSetting 实体对象 + * 对时设置应答 + * @param timingSettingReply 实体对象 * @return */ - @PostMapping("/timingSetting") - public String timingSetting(@RequestBody TimingSetting timingSetting){ - return iotMessageProduce.sendMessage(timingSetting.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING.getKey(),messageUtil.timingSetting(timingSetting)); + @PostMapping("/timingSettingReply") + public String timingSettingReply(@RequestBody TimingSettingReply timingSettingReply){ + return iotMessageProduce.sendMessage(timingSettingReply.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING_REPLY.getKey(),messageUtil.timingSettingReply(timingSettingReply)); } /** diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java index 6acaba3..12ea9d4 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java @@ -67,9 +67,9 @@ */ WORKING_PARAMETER_SETTING ("充电桩工作参数设置","working_parameter_setting"), /** - * 对时设置 + * 对时设置应答 */ - TIMING_SETTING ("对时设置","timing_setting"), + TIMING_SETTING_REPLY ("对时设置应答","timing_setting_reply"), /** * 计费模型设置 */ diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java index 3883fad..51caba0 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java @@ -95,8 +95,8 @@ case SendTagConstant.WORKING_PARAMETER_SETTING_REPLY: sendResult = enhanceProduce.workingParameterSettingReplyMessage(content); break; - case SendTagConstant.TIMING_SETTING_REPLY: - sendResult = enhanceProduce.timingSettingReplyMessage(content); + case SendTagConstant.TIMING_SETTING: + sendResult = enhanceProduce.timingSettingMessage(content); break; case SendTagConstant.SETUP_BILLING_MODEL_REPLY: sendResult = enhanceProduce.setupBillingModelReplyMessage(content); diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/CP56Time2aConverter.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/CP56Time2aConverter.java new file mode 100644 index 0000000..3a6b0c5 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/CP56Time2aConverter.java @@ -0,0 +1,39 @@ +package com.ruoyi.integration.iotda.utils.tools; + +import javax.xml.datatype.DatatypeConfigurationException; +import javax.xml.datatype.DatatypeFactory; +import javax.xml.datatype.XMLGregorianCalendar; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.TimeZone; + +public class CP56Time2aConverter { + + public static String convertToCP56Time2a(Date date) { + try { + DatatypeFactory datatypeFactory = DatatypeFactory.newInstance(); + GregorianCalendar calendar = new GregorianCalendar(); + calendar.setTime(date); + TimeZone timeZone = calendar.getTimeZone(); + XMLGregorianCalendar xmlGregorianCalendar = datatypeFactory.newXMLGregorianCalendar( + calendar.get(Calendar.YEAR), + calendar.get(Calendar.MONTH)+1, + calendar.get(Calendar.DAY_OF_MONTH), + calendar.get(Calendar.HOUR_OF_DAY), + calendar.get(Calendar.MINUTE), + calendar.get(Calendar.SECOND), + calendar.get(Calendar.MILLISECOND), + (timeZone.getRawOffset() / (60 * 1000))); + return xmlGregorianCalendar.toXMLFormat(); + } catch (DatatypeConfigurationException e) { + throw new RuntimeException("Error creating DatatypeFactory", e); + } + } + + public static void main(String[] args) { + Date now = new Date(); + String cp56Time2a = convertToCP56Time2a(now); + System.out.println("CP56Time2a: " + cp56Time2a); + } +} \ No newline at end of file diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java index ff62d42..c7c76bd 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java @@ -44,7 +44,7 @@ @Autowired private WorkingParameterSettingService workingParameterSettingService; @Autowired - private TimingSettingService timingSettingService; + private TimingSettingReplyService timingSettingReplyService; @Autowired private SetupBillingModelService setupBillingModelService; @Autowired @@ -205,13 +205,13 @@ } /** - * 对时设置 - * @param timingSetting 实体对象 + * 对时设置应答 + * @param timingSettingReply 实体对象 * @return */ - public String timingSetting(TimingSetting timingSetting){ - timingSettingService.create(timingSetting); - return getMessageJsonString(timingSetting, ServiceIdMenu.TIMING_SETTING.getValue()); + public String timingSettingReply(TimingSettingReply timingSettingReply){ + timingSettingReplyService.create(timingSettingReply); + return getMessageJsonString(timingSettingReply, ServiceIdMenu.TIMING_SETTING_REPLY.getValue()); } /** diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/StrategyUtil.java 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/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/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 5001d80..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,5 +1,8 @@ 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; @@ -33,6 +36,8 @@ private IotMessageProduce iotMessageProduce; @Autowired private MessageUtil messageUtil; + @Autowired + private AccountingStrategyDetailClient accountingStrategyDetailClient; @Override protected void handleMessage(BillingModeVerifyMessage message) throws Exception { @@ -49,12 +54,22 @@ billingModeVerifyReply.setCharging_pile_code(billingModeVerify.getCharging_pile_code()); billingModeVerifyReply.setBilling_model_code("0"); billingModeVerifyReply.setBilling_model_result(1); - iotMessageProduce.sendMessage(billingModeVerifyReply.getCharging_pile_code(), ServiceIdMenu.BILLING_MODE_VERIFY_REPLY.getKey(),messageUtil.billingModeVerifyReply(billingModeVerifyReply)); }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 index c6a325b..819768c 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/EndChargeMessageListener.java @@ -11,12 +11,15 @@ import com.ruoyi.integration.rocket.model.EndChargeMessage; import com.ruoyi.integration.rocket.model.PingMessage; import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; +import com.ruoyi.order.api.feignClient.ChargingOrderClient; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; + +import javax.annotation.Resource; @Slf4j @Component @@ -34,6 +37,12 @@ private MessageUtil messageUtil; @Autowired private IotMessageProduce iotMessageProduce; + + @Resource + private ChargingOrderClient chargingOrderClient; + + + @Override protected void handleMessage(EndChargeMessage message) throws Exception { // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 @@ -43,6 +52,7 @@ BeanUtils.copyProperties(message,endCharge); endChargeService.create(endCharge); // 业务处理 + chargingOrderClient.endCharge(endCharge.getTransaction_serial_number()); } @Override diff --git a/ruoyi-service/ruoyi-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/model/TimingSettingMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/TimingSettingMessage.java new file mode 100644 index 0000000..6b7186c --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/TimingSettingMessage.java @@ -0,0 +1,17 @@ +package com.ruoyi.integration.rocket.model; + +import com.ruoyi.integration.rocket.base.BaseMessage; +import lombok.Data; + +/** + * 对时设置 + **/ + +@Data +public class TimingSettingMessage extends BaseMessage { + + private String charging_pile_code; //桩编码 + private String current_time; //当前时间 +} + + diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java index 611c3b3..a851ff7 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java @@ -253,15 +253,15 @@ } /** - * 对时设置应答 + * 对时设置 */ - public SendResult timingSettingReplyMessage(JSONObject jsonObject) { - TimingSettingReplyMessage message = JSON.parseObject(jsonObject.toJSONString(),TimingSettingReplyMessage.class); + public SendResult timingSettingMessage(JSONObject jsonObject) { + TimingSettingMessage message = JSON.parseObject(jsonObject.toJSONString(),TimingSettingMessage.class); // 设置业务key message.setKey(UUID.randomUUID().toString()); // 设置消息来源,便于查询 - message.setSource(SendTagConstant.TIMING_SETTING_REPLY); - return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.TIMING_SETTING_REPLY, message); + message.setSource(SendTagConstant.TIMING_SETTING); + return rocketMQEnhanceTemplate.send(TOPIC, SendTagConstant.TIMING_SETTING, message); } /** diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/AccountingStrategyDetailOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/AccountingStrategyDetailOrderController.java new file mode 100644 index 0000000..ce14d4a --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/AccountingStrategyDetailOrderController.java @@ -0,0 +1,39 @@ +package com.ruoyi.order.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.order.api.model.AccountingStrategyDetailOrder; +import com.ruoyi.order.service.AccountingStrategyDetailOrderService; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @author zhibing.pu + * @Date 2024/9/4 16:17 + */ +@RestController +@RequestMapping("/accountingStrategyDetailOrder") +public class AccountingStrategyDetailOrderController { + + @Resource + private AccountingStrategyDetailOrderService accountingStrategyDetailOrderService; + + + /** + * 根据订单id获取当前有效的策略 + * @param orderId + * @return + */ + @PostMapping("/getNowAccountingStrategyDetailOrder") + public R<AccountingStrategyDetailOrder> getNowAccountingStrategyDetailOrder(@RequestParam("orderId") Long orderId){ + AccountingStrategyDetailOrder one = accountingStrategyDetailOrderService.getOne(new LambdaQueryWrapper<AccountingStrategyDetailOrder>() + .eq(AccountingStrategyDetailOrder::getChargingOrderId, orderId) + .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time")); + return R.ok(one); + } +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java index 13df8be..edce507 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 @@ -460,7 +460,7 @@ * @param request */ @ResponseBody - @PostMapping(value = "/chargingOrderALICallback") + @PostMapping(value = "/chargingOrderStartupFailureWxRefund") public void chargingOrderStartupFailureWxRefund(HttpServletRequest request){ WxRefundNotifyResp data = wxPaymentClient.refundNotify(request).getData(); if(null != data){ @@ -784,5 +784,23 @@ 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/mapper/AccountingStrategyDetailOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyDetailOrderMapper.java new file mode 100644 index 0000000..f40366d --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyDetailOrderMapper.java @@ -0,0 +1,11 @@ +package com.ruoyi.order.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.order.api.model.AccountingStrategyDetailOrder; + +/** + * @author zhibing.pu + * @Date 2024/9/4 15:42 + */ +public interface AccountingStrategyDetailOrderMapper extends BaseMapper<AccountingStrategyDetailOrder> { +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyOrderMapper.java new file mode 100644 index 0000000..db0c466 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/AccountingStrategyOrderMapper.java @@ -0,0 +1,11 @@ +package com.ruoyi.order.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.order.api.model.AccountingStrategyOrder; + +/** + * @author zhibing.pu + * @Date 2024/9/4 15:37 + */ +public interface AccountingStrategyOrderMapper extends BaseMapper<AccountingStrategyOrder> { +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/AccountingStrategyDetailOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/AccountingStrategyDetailOrderService.java new file mode 100644 index 0000000..dc430bb --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/AccountingStrategyDetailOrderService.java @@ -0,0 +1,11 @@ +package com.ruoyi.order.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.order.api.model.AccountingStrategyDetailOrder; + +/** + * @author zhibing.pu + * @Date 2024/9/4 15:41 + */ +public interface AccountingStrategyDetailOrderService extends IService<AccountingStrategyDetailOrder> { +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/AccountingStrategyOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/AccountingStrategyOrderService.java new file mode 100644 index 0000000..41e4657 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/AccountingStrategyOrderService.java @@ -0,0 +1,11 @@ +package com.ruoyi.order.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.order.api.model.AccountingStrategyOrder; + +/** + * @author zhibing.pu + * @Date 2024/9/4 15:36 + */ +public interface AccountingStrategyOrderService extends IService<AccountingStrategyOrder> { +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java index bf56e36..baf3390 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 @@ -15,6 +15,8 @@ import com.ruoyi.order.api.vo.TCharingOrderVO; 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; @@ -138,4 +140,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/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 28c6ca0..b672bec 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,23 +1,16 @@ 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.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; @@ -33,6 +26,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; @@ -46,7 +44,12 @@ 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; @@ -57,11 +60,18 @@ import com.ruoyi.payment.api.vo.*; 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; @@ -82,6 +92,8 @@ @Service public class TChargingOrderServiceImpl extends ServiceImpl<TChargingOrderMapper, TChargingOrder> implements TChargingOrderService { + private Logger log = LoggerFactory.getLogger(TChargingOrderServiceImpl.class); + @Resource private ChargingGunClient chargingGunClient; @@ -110,7 +122,8 @@ private AliPaymentClient aliPaymentClient; - + @Resource + private AppCouponClient appCouponClient; @Resource private AppUserVipDetailClient appUserVipDetailClient; @@ -135,10 +148,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<>(); @@ -403,9 +440,25 @@ chargingOrder.setVipDiscountAmount(discountAmount); } } - } this.save(chargingOrder); + + //添加订单的计费策略 + TAccountingStrategy accountingStrategy = accountingStrategyClient.getAccountingStrategyById(tChargingGun.getAccountingStrategyId()).getData(); + List<TAccountingStrategyDetail> strategyDetailList = accountingStrategyDetailClient.getListByAccountingStrategyId(tChargingGun.getAccountingStrategyId()).getData(); + AccountingStrategyOrder accountingStrategyOrder = new AccountingStrategyOrder(); + BeanUtils.copyProperties(accountingStrategy, accountingStrategyOrder); + accountingStrategyOrder.setChargingOrderId(chargingOrder.getId()); + accountingStrategyOrderService.save(accountingStrategyOrder); + List<AccountingStrategyDetailOrder> list1 = new ArrayList<>(); + for (TAccountingStrategyDetail tAccountingStrategyDetail : strategyDetailList) { + AccountingStrategyDetailOrder accountingStrategyDetailOrder = new AccountingStrategyDetailOrder(); + BeanUtils.copyProperties(tAccountingStrategyDetail, accountingStrategyDetailOrder); + accountingStrategyDetailOrder.setChargingOrderId(chargingOrder.getId()); + list1.add(accountingStrategyDetailOrder); + } + accountingStrategyDetailOrderService.saveBatch(list1); + //会员优惠折扣将其计入增加充电时长(增加总充电金额) //如果充电总金额未使用完,则需要退回费用=(原金额/总金额)*(总金额-实际充电金额) if(1 == addChargingOrder.getPaymentType()){ @@ -453,7 +506,6 @@ chargingOrder.setRechargePaymentStatus(2); chargingOrder.setRechargeSerialNumber(transaction_id); chargingOrder.setStatus(2); - this.updateById(chargingOrder); //添加安全检测数据到缓存中,每步安全检测完成后需要更新缓存数据 PreChargeCheck preChargeCheck = new PreChargeCheck(); @@ -468,7 +520,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()); //计算能充电的度数 @@ -492,6 +544,8 @@ } } electrovalence = electrovalence.add(discount); + chargingOrder.setChargeAmount(electrovalence); + this.updateById(chargingOrder); TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingGun.getChargingPileId()).getData(); @@ -689,6 +743,7 @@ * @return */ @Override + @GlobalTransactional(rollbackFor = Exception.class) public AjaxResult stopCharging(String id) { TChargingOrder chargingOrder = this.getById(id); Integer status = chargingOrder.getStatus(); @@ -698,14 +753,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); + } + } + } + + } } @@ -1060,7 +1330,6 @@ return null; } - @Override public ChargingOrderListInfoVO chargingInfo(String uid) { TChargingOrder chargingOrder= this.getById(uid); @@ -1118,6 +1387,165 @@ */ @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 fdb077d..fea0c6d 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java @@ -16,19 +16,13 @@ import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.service.TokenService; -import com.ruoyi.order.api.model.TChargingOrder; -import com.ruoyi.order.api.model.TOrderInvoice; -import com.ruoyi.order.api.model.TOrderInvoiceDetail; -import com.ruoyi.order.api.model.TShoppingOrder; +import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.query.TOrderInvoiceQuery; import com.ruoyi.order.api.vo.TOrderEvaluateVO; import com.ruoyi.order.api.vo.TOrderInvoiceVO; import com.ruoyi.order.dto.*; import com.ruoyi.order.mapper.TOrderInvoiceMapper; -import com.ruoyi.order.service.TChargingOrderService; -import com.ruoyi.order.service.TOrderInvoiceDetailService; -import com.ruoyi.order.service.TOrderInvoiceService; -import com.ruoyi.order.service.TShoppingOrderService; +import com.ruoyi.order.service.*; import com.ruoyi.other.api.domain.TCoupon; import com.ruoyi.other.api.domain.TGoods; import com.ruoyi.other.api.domain.TInvoiceType; @@ -86,6 +80,9 @@ private CouponClient couponClient; @Resource private AppUserClient appUserClient; + + @Resource + private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService; @@ -128,6 +125,11 @@ //获取开票类型 TInvoiceType invoiceType = invoiceTypeClient.getInvoiceType(addOrderInvoice.getInvoiceTypeId()).getData(); for (Long orderId : orderIds) { + List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>() + .eq(TChargingOrderAccountingStrategy::getChargingOrderId, orderId)); + BigDecimal electrovalence = list.stream().map(TChargingOrderAccountingStrategy::getElectrovalence).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal serviceCharge = list.stream().map(TChargingOrderAccountingStrategy::getServiceCharge).reduce(BigDecimal.ZERO, BigDecimal::add); + TOrderInvoiceDetail orderInvoiceDetail = new TOrderInvoiceDetail(); orderInvoiceDetail.setOrderInvoiceId(addOrderInvoice.getId()); orderInvoiceDetail.setInvoiceAmount(map.get(orderId)); @@ -136,6 +138,9 @@ orderInvoiceDetail.setElectricityTariff(invoiceType.getElectricityTariff()); orderInvoiceDetail.setServiceTariff(invoiceType.getServiceTariff()); orderInvoiceDetail.setAddedServiceTariff(invoiceType.getAddedServiceTariff()); + orderInvoiceDetail.setElectrovalence(electrovalence); + orderInvoiceDetail.setServiceCharge(serviceCharge); + orderInvoiceDetail.setAddedService(serviceCharge.multiply(invoiceType.getAddedServiceTariff().divide(new BigDecimal(100)))); orderInvoiceDetailService.save(orderInvoiceDetail); } return AjaxResult.success(); diff --git a/ruoyi-service/ruoyi-order/src/main/resources/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-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 b60c3de..cefe4a4 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 @@ -191,7 +191,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