From 5489c2cc4d35970ca8fe4d30cf8ac374eef17ca4 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期六, 31 八月 2024 18:02:39 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile --- ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ChargingOrderGroup.java | 13 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 306 ++++++ ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java | 6 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java | 14 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/feignClient/AppUserVipDetailClient.java | 7 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java | 7 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java | 5 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/UploadRealTimeMonitoringDataQuery.java | 36 ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/PlatformStartChargingReplyClient.java | 28 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java | 11 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixCircleDto.java | 11 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java | 2 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TParkingRecordMapper.java | 5 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java | 9 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java | 31 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java | 24 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java | 25 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml | 260 ++++- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TVipOrderMapper.java | 6 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ChargingPercentProvinceDto.java | 13 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixChargingDto.java | 19 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderDto.java | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixVipDto.java | 13 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java | 16 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStartChargingReplyService.java | 11 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java | 20 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/BaseModel.java | 1 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/PreviousSixMonths.java | 20 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java | 3 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java | 18 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java | 19 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderAccountingStrategyServiceImpl.java | 6 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/PlatformStartChargingReplyController.java | 35 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderAccountingStrategyClient.java | 2 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java | 5 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ChargingPercentBack.java | 14 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java | 6 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java | 1 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java | 13 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java | 6 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java | 39 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixShopDto.java | 13 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java | 4 ruoyi-service/ruoyi-integration/pom.xml | 7 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java | 22 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java | 1 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderAppeal.java | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TVipOrderService.java | 9 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java | 10 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java | 11 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TParkingRecordService.java | 4 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java | 42 + ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/InvoiceInformationVo.java | 62 + ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java | 119 ++ ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java | 7 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TShoppingOrderMapper.java | 6 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PreChargeCheck.java | 4 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java | 4 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java | 23 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStartChargingReplyFallbackFactory.java | 34 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java | 7 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java | 388 ++++++++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingStatisticsQueryDto.java | 18 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixMonthTotal.java | 5 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml | 3 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TVipOrderMapper.xml | 41 + ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java | 47 + ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml | 36 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ChargingOrderAndUploadRealTimeMonitoringDataDto.java | 209 +++++ ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java | 2 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserVipDetailFallbackFactory.java | 7 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStartChargingReplyServiceImpl.java | 16 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java | 44 + ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java | 26 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordPageQuery.java | 16 77 files changed, 2,166 insertions(+), 177 deletions(-) diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java index bb60f76..71dc82f 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java @@ -35,7 +35,7 @@ @Override public R<TAppUser> getUserById(Long id) { - return R.fail("根据id查询用户失败:"+throwable.getMessage()); + throw new RuntimeException("根据id查询用户失败:"+throwable.getMessage()); } @Override diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserVipDetailFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserVipDetailFallbackFactory.java index f22b61a..ebd90f7 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserVipDetailFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserVipDetailFallbackFactory.java @@ -26,7 +26,12 @@ @Override public R<TAppUserVipDetail> getAppUserVipDetail(GetAppUserVipDetail getAppUserVipDetail) { - return R.fail("获取用户当前有效的VIP明细调用失败:" + throwable.getMessage()); + throw new RuntimeException("获取用户当前有效的VIP明细调用失败:" + throwable.getMessage()); + } + + @Override + public void updateAppUserVipDetail(TAppUserVipDetail appUserVipDetail) { + throw new RuntimeException(throwable.getMessage()); } }; } diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserVipDetailClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserVipDetailClient.java index 37f0dbb..2470569 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserVipDetailClient.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserVipDetailClient.java @@ -7,6 +7,7 @@ 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 @@ -24,4 +25,10 @@ R<TAppUserVipDetail> getAppUserVipDetail(GetAppUserVipDetail getAppUserVipDetail); + /** + * 修改会员明细 + * @param appUserVipDetail + */ + @PostMapping("/appUserVipDetail/updateAppUserVipDetail") + void updateAppUserVipDetail(@RequestBody TAppUserVipDetail appUserVipDetail); } diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/InvoiceInformationVo.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/InvoiceInformationVo.java new file mode 100644 index 0000000..6a6b7c6 --- /dev/null +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/InvoiceInformationVo.java @@ -0,0 +1,62 @@ +package com.ruoyi.account.api.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.core.web.domain.BasePojo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * + * </p> + * + * @author luodangjia + * @since 2024-08-06 + */ +@Data +public class InvoiceInformationVo { + + + private String id; + + @ApiModelProperty(value = "用户id") + private Long appUserId; + + @ApiModelProperty(value = "发票类型(1=增值税普通发票,2=增值税专用发票)") + private String invoiceType; + + @ApiModelProperty(value = "发票类型id") + private Integer invoiceTypeId; + + @ApiModelProperty(value = "抬头类型(1=个人,2=企业)") + private Integer invoicingObjectType; + + @ApiModelProperty(value = "名称") + private String name; + + @ApiModelProperty(value = "纳税识别号") + private String taxIdentificationNumber; + + @ApiModelProperty(value = "公司地址") + private String companyAddress; + + @ApiModelProperty(value = "公司电话") + private String companyPhone; + + @ApiModelProperty(value = "开户银行") + private String depositBank; + + @ApiModelProperty(value = "银行账户") + private String bankAccount; + + @ApiModelProperty(value = "设置默认(0=否,1=是)") + private Integer isDefault; + + + + +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java new file mode 100644 index 0000000..cdc9f16 --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/AccountingStrategyDetailFallbackFactory.java @@ -0,0 +1,31 @@ +package com.ruoyi.chargingPile.api.factory; + +import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; +import com.ruoyi.common.core.domain.R; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +/** + * @author zhibing.pu + * @Date 2024/8/28 18:33 + */ +@Component +public class AccountingStrategyDetailFallbackFactory implements FallbackFactory<AccountingStrategyDetailClient> { + private static final Logger log = LoggerFactory.getLogger(AccountingStrategyDetailFallbackFactory.class); + + + @Override + public AccountingStrategyDetailClient create(Throwable throwable) { + log.error("计费策略调用失败:{}", throwable.getMessage()); + return new AccountingStrategyDetailClient(){ + + @Override + public R<TAccountingStrategyDetail> getNowData(Integer accountingStrategyId) { + return R.fail("获取当前有效的计费策略明细失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java index 3c9c594..f5a89cc 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java @@ -35,7 +35,7 @@ @Override public R<TChargingGun> getChargingGunById(Integer id) { - return R.fail("根据id获取充电枪失败:" + throwable.getMessage()); + throw new RuntimeException("根据id获取充电枪失败:" + throwable.getMessage()); } @Override diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java index ef7c322..d66b799 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java @@ -11,6 +11,8 @@ import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; +import java.math.BigDecimal; +import java.time.LocalDate; import java.util.List; /** @@ -37,6 +39,11 @@ public R<TParkingRecord> getRecordById(Long siteId) { return R.fail("通过id查询停车场记录:" + throwable.getMessage()); } + + @Override + public R<BigDecimal> getRecordAmount(LocalDate sixBefore) { + return null; + } }; } } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java index ed6ce4b..b4cdc47 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/SiteFallbackFactory.java @@ -1,5 +1,6 @@ package com.ruoyi.chargingPile.api.factory; +import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; import com.ruoyi.chargingPile.api.feignClient.SiteClient; import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.common.core.domain.R; @@ -34,6 +35,11 @@ public R<List<Site>> getSiteAll() { return R.fail("获取所有站点调用失败:" + throwable.getMessage()); } + + @Override + public R<List<GetSiteListDTO>> getSiteListByUserId(Long userId) { + return null; + } }; } } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java new file mode 100644 index 0000000..b63175e --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/AccountingStrategyDetailClient.java @@ -0,0 +1,26 @@ +package com.ruoyi.chargingPile.api.feignClient; + +import com.ruoyi.chargingPile.api.factory.AccountingStrategyDetailFallbackFactory; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author zhibing.pu + * @Date 2024/8/28 18:33 + */ +@FeignClient(contextId = "AccountingStrategyDetailClient", value = ServiceNameConstants.CHARGINGPILE_SERVICE, fallbackFactory = AccountingStrategyDetailFallbackFactory.class) +public interface AccountingStrategyDetailClient { + + + /** + * 获取当前有效的计费策略明细 + * @param accountingStrategyId + * @return + */ + @PostMapping("/t-accounting-strategy-detail/getNowData") + R<TAccountingStrategyDetail> getNowData(@RequestParam("accountingStrategyId") Integer accountingStrategyId); +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java index 5c45bcf..bc3338a 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java @@ -12,6 +12,8 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; +import java.math.BigDecimal; +import java.time.LocalDate; import java.util.List; /** @@ -30,4 +32,7 @@ @PostMapping(value = "/t-parking-lot/getRecordById") public R<TParkingRecord> getRecordById(@RequestParam("id") Long siteId); + @PostMapping(value = "/t-parking-lot/getRecordAmount") + public R<BigDecimal> getRecordAmount(@RequestParam("sixBefore") LocalDate sixBefore); + } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java index 2412cf2..a56392f 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/SiteClient.java @@ -1,12 +1,15 @@ package com.ruoyi.chargingPile.api.feignClient; +import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; import com.ruoyi.chargingPile.api.factory.SiteFallbackFactory; import com.ruoyi.chargingPile.api.model.Site; 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.GetMapping; 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; @@ -31,4 +34,7 @@ */ @PostMapping("/site/getSiteAll") R<List<Site>> getSiteAll(); + + @GetMapping("/site/getSiteList/byUserId") + R<List<GetSiteListDTO>> getSiteListByUserId(@RequestParam("userId") Long userId); } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java index 69bfa7e..889907b 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java @@ -39,6 +39,11 @@ @ApiModelProperty(value = "车牌号") @TableField("license_plate") private String licensePlate; + @TableField(exist = false) + private String name; + @TableField(exist = false) + + private String uid; @ApiModelProperty(value = "订单编号") @TableField("code") private String code; diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index e5e3ae5..f015cf5 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,4 +1,5 @@ com.ruoyi.chargingPile.api.factory.ChargingPileFallbackFactory com.ruoyi.chargingPile.api.factory.SiteFallbackFactory com.ruoyi.chargingPile.api.factory.ParkingLotFallbackFactory -com.ruoyi.chargingPile.api.factory.ChargingGunFallbackFactory \ No newline at end of file +com.ruoyi.chargingPile.api.factory.ChargingGunFallbackFactory +com.ruoyi.chargingPile.api.factory.AccountingStrategyDetailFallbackFactory \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStartChargingReplyFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStartChargingReplyFallbackFactory.java new file mode 100644 index 0000000..e0c2990 --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/PlatformStartChargingReplyFallbackFactory.java @@ -0,0 +1,34 @@ +package com.ruoyi.integration.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.integration.api.feignClient.PlatformStartChargingReplyClient; +import com.ruoyi.integration.api.model.PlatformStartChargingReply; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2024/8/31 15:16 + */ +@Component +public class PlatformStartChargingReplyFallbackFactory implements FallbackFactory<PlatformStartChargingReplyClient> { + + private static final Logger log = LoggerFactory.getLogger(PlatformStartChargingReplyFallbackFactory.class); + + + @Override + public PlatformStartChargingReplyClient create(Throwable throwable) { + log.error("远程启机应答调用失败:{}", throwable.getMessage()); + return new PlatformStartChargingReplyClient(){ + + @Override + public R<List<PlatformStartChargingReply>> getPlatformStartChargingReply(String code) { + 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 863530b..8b9c02b 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 @@ -28,6 +28,7 @@ @Override public void platformStartCharging(PlatformStartCharging platformStartCharging) { + throw new RuntimeException("远程启机失败" + throwable.getMessage()); } }; } diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java index cd5fa43..2586a69 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/UploadRealTimeMonitoringDataFallbackFactory.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Component; import java.util.List; +import java.util.Set; /** * 充电桩服务降级处理 @@ -35,6 +36,11 @@ public R<List<UploadRealTimeMonitoringData>> getDataByOrderCode(String code) { return R.fail("根据订单编号获取所有监测数据失败:" + throwable.getMessage()); } + + @Override + public R<List<UploadRealTimeMonitoringData>> getAll(Set<String> values, Integer page, Integer size) { + return null; + } }; } } diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/PlatformStartChargingReplyClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/PlatformStartChargingReplyClient.java new file mode 100644 index 0000000..e3856e6 --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/PlatformStartChargingReplyClient.java @@ -0,0 +1,28 @@ +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.PlatformStartChargingReplyFallbackFactory; +import com.ruoyi.integration.api.model.PlatformStartChargingReply; +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/8/31 15:16 + */ +@FeignClient(contextId = "PlatformStartChargingReplyClient", value = ServiceNameConstants.INTEGRATION_SERVICE, fallbackFactory = PlatformStartChargingReplyFallbackFactory.class) +public interface PlatformStartChargingReplyClient { + + + /** + * 根据订单编号查询远程启机应答结果 + * @param code + * @return + */ + @PostMapping("/platformStartChargingReply/getPlatformStartChargingReply") + R<List<PlatformStartChargingReply>> getPlatformStartChargingReply(@RequestParam("code") String code); +} diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java index 0657802..c2c27be 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java @@ -2,7 +2,6 @@ import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.integration.api.factory.SendMessageFallbackFactory; -import com.ruoyi.integration.api.model.EndCharge; import com.ruoyi.integration.api.model.PlatformStartCharging; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java index d6da53d..902dff5 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/UploadRealTimeMonitoringDataClient.java @@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestParam; import java.util.List; +import java.util.Set; /** * @author zhibing.pu @@ -32,4 +33,7 @@ */ @PostMapping("/uploadRealTimeMonitoringData/getDataByOrderCode") R<List<UploadRealTimeMonitoringData>> getDataByOrderCode(@RequestParam("code") String code); + + @PostMapping("/uploadRealTimeMonitoringData/getAll") + R<List<UploadRealTimeMonitoringData>> getAll(@RequestParam("values") Set<String> values, @RequestParam("page") Integer page, @RequestParam("size")Integer size); } diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/BaseModel.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/BaseModel.java index 3ec6eb0..fe393ff 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/BaseModel.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/BaseModel.java @@ -10,6 +10,7 @@ */ @Data public class BaseModel { + private Date last_time = new Date(); private Date create_time = new Date(); } diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ChargingOrderAndUploadRealTimeMonitoringDataDto.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ChargingOrderAndUploadRealTimeMonitoringDataDto.java new file mode 100644 index 0000000..3090700 --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/ChargingOrderAndUploadRealTimeMonitoringDataDto.java @@ -0,0 +1,209 @@ +package com.ruoyi.integration.api.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 上传实时监测数据 + **/ + +@Data +@Document(collection = "upload_real_time_monitoring_data") //指定要对应的文档名(表名) +@Accessors(chain = true) +public class ChargingOrderAndUploadRealTimeMonitoringDataDto extends BaseModel { + + @Id + private String id; + private String transaction_serial_number; // 交易流水号 + private String charging_pile_code; // 桩编码 + private String charging_gun_code; // 抢号 + private Integer charging_gun_status; // 状态(0:离线,1:故障,2:空闲,3:充电) + private Integer homing_status; // 枪是否归位(0:否,1:是,2:未知) + private Integer insertion_status; // 是否插枪(0:否,1:是) + private BigDecimal output_voltage; // 输出电压,精确到小数点后一位;待机置零 + private BigDecimal output_current; // 输出电流,精确到小数点后一位;待机置零 + private Integer gun_line_temperature; // 枪线温度,整形,偏移量-50;待机置零 + private String gun_line_code; // 枪线编码,没有置零 + private Integer soc; // SOC待机置零;交流桩置零 + private Integer battery_temperature; // 电池组最高温度,整形,偏移量-50 ºC;待机置零;交流桩置零 + private Integer cumulative_charging_time; // 累计充电时间,单位:min;待机置零 + private Integer time_remaining; // 剩余时间,单位:min;待机置零、交流桩置零 + @ApiModelProperty("充电度数") + private BigDecimal charging_degree; // 充电度数,精确到小数点后四位;待机置零 + private BigDecimal loss_of_charging_degree; // 计损充电度数,精确到小数点后四位;待机置零,未设置计损比例时等于充电度数 + private BigDecimal paid_amount; // 已充金额,精确到小数点后四位;待机置零(电费+服务费)*计损充电度数 + + @ApiModelProperty("时段电价") + private BigDecimal electrovalence_all; + @ApiModelProperty("时段服务费单价") + private BigDecimal service_charge; + @ApiModelProperty("时段电费") + private BigDecimal period_electric_price; + @ApiModelProperty("时段服务费") + private BigDecimal period_service_price; + private Integer hardware_fault; // 硬件故障(1:急停按钮动作故障;2:无可用整流模块;3:出风口温度过高;4:交流防雷故障;5:交直流模块 DC20 通信中断;6:绝缘检测模块 FC08 通信中断;7:电度表通信中断;8:读卡器通信中断;9:RC10 通信中断;10:风扇调速板故障;11:直流熔断器故障;12:高压接触器故障;13:门打开)、 + + @ApiModelProperty(value = "订单编号") + @TableField("code") + private String code; + + @ApiModelProperty(value = "订单类型(1=充电订单(小程序),2=充电订单(刷卡))") + @TableField("order_type") + private Integer orderType; + @ApiModelProperty(value = "0平台1其他") + @TableField("order_source") + private Integer orderSource; + + @ApiModelProperty(value = "平台或其他第三分名字") + @TableField("source_name") + private String sourceName; + @ApiModelProperty(value = "手续费") + @TableField("commission_amount") + private BigDecimal commissionAmount; + @ApiModelProperty(value = "分佣") + @TableField("sharing_amount") + private BigDecimal sharingAmount; + + @ApiModelProperty(value = "订单分类(1=线上,2=线下)") + @TableField("order_classification") + private Integer orderClassification; + + @ApiModelProperty(value = "用户id") + @TableField("app_user_id") + private Long appUserId; + + @ApiModelProperty(value = "充电车辆 id") + @TableField("app_user_car_id") + private Long appUserCarId; + + @ApiModelProperty(value = "站点 id") + @TableField("site_id") + private Integer siteId; + + @ApiModelProperty(value = "停车场id") + @TableField("parking_lot_id") + private Integer parkingLotId; + + @ApiModelProperty(value = "充电桩id") + @TableField("charging_pile_id") + private Integer chargingPileId; + + @ApiModelProperty(value = "充电枪id") + @TableField("charging_gun_id") + private Integer chargingGunId; + + @ApiModelProperty(value = "充电总度数") + @TableField("charging_capacity") + private BigDecimal chargingCapacity; + + @ApiModelProperty(value = "充电功率") + @TableField("charging_power") + private BigDecimal chargingPower; + + @ApiModelProperty(value = "充电开始时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @TableField("start_time") + private LocalDateTime startTime; + + @ApiModelProperty(value = "充电结束时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @TableField("end_time") + private LocalDateTime endTime; + + @ApiModelProperty(value = "状态(0=未知,1=等待中/已插枪,2=启动中,3=充电中,4=停止中,5=已结束)") + @TableField("status") + private Integer status; + + @ApiModelProperty(value = "结束方式(0=异常终止,1=主动终止,2=满电终止,3=费用不足终止)") + @TableField("end_mode") + private Integer endMode; + + @ApiModelProperty(value = "充值金额") + @TableField("recharge_amount") + private BigDecimal rechargeAmount; + + @ApiModelProperty(value = "充值支付方式(1=微信,2=支付宝)") + @TableField("recharge_payment_type") + private Integer rechargePaymentType; + + @ApiModelProperty(value = "充值支付状态(1=待支付,2=已支付)") + @TableField("recharge_payment_status") + private Integer rechargePaymentStatus; + + @ApiModelProperty(value = "充值支付第三方流水号") + @TableField("recharge_serial_number") + private String rechargeSerialNumber; + + @ApiModelProperty(value = "订单金额(总金额)") + @TableField("order_amount") + private BigDecimal orderAmount; + + @ApiModelProperty(value = "优惠券id") + @TableField("app_coupon_id") + private Long appCouponId; + + @ApiModelProperty(value = "优惠券抵扣金额") + @TableField("coupon_discount_amount") + private BigDecimal couponDiscountAmount; + + @ApiModelProperty(value = "会员折扣") + @TableField("vip_discount") + private BigDecimal vipDiscount; + + @ApiModelProperty(value = "会员优惠金额") + @TableField("vip_discount_amount") + private BigDecimal vipDiscountAmount; + + @ApiModelProperty(value = "支付金额(实付)") + @TableField("payment_amount") + private BigDecimal paymentAmount; + + @ApiModelProperty(value = "退款流水号") + @TableField("refund_code") + private String refundCode; + + @ApiModelProperty(value = "退款金额") + @TableField("refund_amount") + private BigDecimal refundAmount; + + @ApiModelProperty(value = "累计服务费") + @TableField("service_charge") + private BigDecimal serviceCharge; + + @ApiModelProperty(value = "累计电费") + @TableField("electrovalence") + private BigDecimal electrovalence; + + @ApiModelProperty(value = "退款状态(1=退款中,2=退款成功)") + @TableField("refund_status") + private Integer refundStatus; + + @ApiModelProperty(value = "退款第三方流水号") + @TableField("refund_serial_number") + private String refundSerialNumber; + + @ApiModelProperty(value = "退款成功时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @TableField("refund_time") + private LocalDateTime refundTime; + + + @ApiModelProperty(value = "支付时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @TableField("pay_time") + private LocalDateTime payTime; + + +} + + diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java index b131c91..5338fa8 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/UploadRealTimeMonitoringData.java @@ -1,8 +1,8 @@ package com.ruoyi.integration.api.model; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; -import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import java.math.BigDecimal; @@ -16,7 +16,6 @@ @Accessors(chain = true) public class UploadRealTimeMonitoringData extends BaseModel { - @Id private String transaction_serial_number; // 交易流水号 private String charging_pile_code; // 桩编码 private String charging_gun_code; // 抢号 @@ -36,6 +35,14 @@ private BigDecimal paid_amount; // 已充金额,精确到小数点后四位;待机置零(电费+服务费)*计损充电度数 private Integer hardware_fault; // 硬件故障(1:急停按钮动作故障;2:无可用整流模块;3:出风口温度过高;4:交流防雷故障;5:交直流模块 DC20 通信中断;6:绝缘检测模块 FC08 通信中断;7:电度表通信中断;8:读卡器通信中断;9:RC10 通信中断;10:风扇调速板故障;11:直流熔断器故障;12:高压接触器故障;13:门打开) + private BigDecimal electrovalence_all;// @ApiModelProperty("时段电价") + + private BigDecimal service_charge;//@ApiModelProperty("时段服务费单价") + + private BigDecimal period_electric_price;// @ApiModelProperty("时段电费") + + private BigDecimal period_service_price;// @ApiModelProperty("时段服务费") + } 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 5d5cc8f..6cc32c5 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 @@ -1,4 +1,5 @@ com.ruoyi.integration.api.factory.IntegrationFallbackFactory com.ruoyi.integration.api.factory.UploadRealTimeMonitoringDataFallbackFactory com.ruoyi.integration.api.factory.ChargingHandshakeFallbackFactory -com.ruoyi.integration.api.factory.SendMessageFallbackFactory \ No newline at end of file +com.ruoyi.integration.api.factory.SendMessageFallbackFactory +com.ruoyi.integration.api.factory.PlatformStartChargingReplyFallbackFactory \ No newline at end of file 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 ee6192f..8738bb2 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 @@ -1,13 +1,18 @@ package com.ruoyi.order.api.factory; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.dto.ChargingOrderGroup; +import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.query.TChargingCountQuery; +import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; + +import java.util.List; /** * 充电订单服务降级处理 @@ -36,6 +41,16 @@ } @Override + public R<List<TChargingOrder>> getList(Integer siteId) { + return R.fail("根据站点id查询充电订单:" + throwable.getMessage()); + } + + @Override + public R<List<ChargingOrderGroup>> getBySiteIdAndTime(ChargingPercentProvinceDto chargingPercentProvinceDto) { + return null; + } + + @Override public R<Integer> getChargingCount(TChargingCountQuery req) { return R.fail("根据会员id和有效期查询有效期内享受充电折扣次数:" + throwable.getMessage()); } @@ -49,6 +64,10 @@ public R<Long> getCar() { return R.fail("获取用户最近使用车辆充电的车辆id:" + throwable.getMessage()); } + + @Override + public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) { + } }; } } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderAccountingStrategyClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderAccountingStrategyClient.java index 5d51fbc..2f98b2c 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderAccountingStrategyClient.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderAccountingStrategyClient.java @@ -36,6 +36,6 @@ * @param days * @return */ - @PostMapping("/t-charging-order-getDailyChargingDegree-strategy/getUtilizationTrend/{days}") + @PostMapping("/t-charging-order-accounting-strategy/getDailyChargingDegree/{days}") R<List<Double>> getDailyChargingDegree(@PathVariable("days") Integer days, @RequestParam("siteIds") Set<Integer> siteIds); } 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 5d19dd8..96340a0 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 @@ -2,14 +2,19 @@ import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.dto.ChargingOrderGroup; +import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; import com.ruoyi.order.api.factory.ChargingOrderFallbackFactory; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.query.TChargingCountQuery; +import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; /** * 充电订单服务 @@ -22,6 +27,16 @@ @PostMapping(value = "/t-charging-order/detail") R<TChargingOrder> orderDetail(@RequestParam("orderId") Long orderId); + + + @PostMapping(value = "/t-charging-order/getList") + R<List<TChargingOrder>> getList(@RequestParam("siteId") Integer siteId); + + @PostMapping(value = "/t-charging-order/getBySiteIdAndTime") + R<List<ChargingOrderGroup>> getBySiteIdAndTime(@RequestBody ChargingPercentProvinceDto chargingPercentProvinceDto); + + + /** * 查询会员在本月有多少次享受了充电折扣 @@ -46,4 +61,13 @@ */ @GetMapping(value = "/t-charging-order/getCar") public R<Long> getCar(); + + + /** + * 处理充电订单实时监控数据相关的业务逻辑 + * @param query + * @return + */ + @PostMapping(value = "/t-charging-order/chargeMonitoring") + void chargeMonitoring(@RequestBody UploadRealTimeMonitoringDataQuery query); } 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 9351b4e..9c48083 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 @@ -39,6 +39,19 @@ @ApiModelProperty(value = "订单类型(1=充电订单(小程序),2=充电订单(刷卡))") @TableField("order_type") private Integer orderType; + @ApiModelProperty(value = "0平台1其他") + @TableField("order_source") + private Integer orderSource; + + @ApiModelProperty(value = "平台或其他第三分名字") + @TableField("source_name") + private String sourceName; + @ApiModelProperty(value = "手续费") + @TableField("commission_amount") + private BigDecimal commissionAmount; + @ApiModelProperty(value = "分佣") + @TableField("sharing_amount") + private BigDecimal sharingAmount; @ApiModelProperty(value = "订单分类(1=线上,2=线下)") @TableField("order_classification") @@ -109,6 +122,10 @@ @ApiModelProperty(value = "充值支付第三方流水号") @TableField("recharge_serial_number") private String rechargeSerialNumber; + + @ApiModelProperty(value = "剩余金额(用于前端展示)") + @TableField("residual_amount") + private BigDecimal residualAmount; @ApiModelProperty(value = "订单金额(总金额)") @TableField("order_amount") @@ -142,6 +159,14 @@ @TableField("refund_amount") private BigDecimal refundAmount; + @ApiModelProperty(value = "累计服务费") + @TableField("service_charge") + private BigDecimal serviceCharge; + + @ApiModelProperty(value = "累计电费") + @TableField("electrovalence") + private BigDecimal electrovalence; + @ApiModelProperty(value = "退款状态(1=退款中,2=退款成功)") @TableField("refund_status") private Integer refundStatus; diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderAppeal.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderAppeal.java index 29320fa..344daa0 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderAppeal.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderAppeal.java @@ -70,6 +70,8 @@ @ApiModelProperty(value = "申诉反馈") @TableField("feedback") private String feedback; + @TableField(exist = false) + private String uid; @ApiModelProperty(value = "反馈人id") @TableField("feedback_user_id") diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/UploadRealTimeMonitoringDataQuery.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/UploadRealTimeMonitoringDataQuery.java new file mode 100644 index 0000000..33b0426 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/query/UploadRealTimeMonitoringDataQuery.java @@ -0,0 +1,36 @@ +package com.ruoyi.order.api.query; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 上传实时监测数据 + **/ + +@Data +public class UploadRealTimeMonitoringDataQuery { + private String transaction_serial_number; // 交易流水号 + private String charging_pile_code; // 桩编码 + private String charging_gun_code; // 抢号 + private Integer charging_gun_status; // 状态(0:离线,1:故障,2:空闲,3:充电) + private Integer homing_status; // 枪是否归位(0:否,1:是,2:未知) + private Integer insertion_status; // 是否插枪(0:否,1:是) + private BigDecimal output_voltage; // 输出电压,精确到小数点后一位;待机置零 + private BigDecimal output_current; // 输出电流,精确到小数点后一位;待机置零 + private Integer gun_line_temperature; // 枪线温度,整形,偏移量-50;待机置零 + private String gun_line_code; // 枪线编码,没有置零 + private Integer soc; // SOC待机置零;交流桩置零 + private Integer battery_temperature; // 电池组最高温度,整形,偏移量-50 ºC;待机置零;交流桩置零 + private Integer cumulative_charging_time; // 累计充电时间,单位:min;待机置零 + private Integer time_remaining; // 剩余时间,单位:min;待机置零、交流桩置零 + private BigDecimal charging_degree; // 充电度数,精确到小数点后四位;待机置零 + private BigDecimal loss_of_charging_degree; // 计损充电度数,精确到小数点后四位;待机置零,未设置计损比例时等于充电度数 + private BigDecimal paid_amount; // 已充金额,精确到小数点后四位;待机置零(电费+服务费)*计损充电度数 + private Integer hardware_fault; // 硬件故障(1:急停按钮动作故障;2:无可用整流模块;3:出风口温度过高;4:交流防雷故障;5:交直流模块 DC20 通信中断;6:绝缘检测模块 FC08 通信中断;7:电度表通信中断;8:读卡器通信中断;9:RC10 通信中断;10:风扇调速板故障;11:直流熔断器故障;12:高压接触器故障;13:门打开) + private Date create_time; + +} + + diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ChargingOrderGroup.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ChargingOrderGroup.java new file mode 100644 index 0000000..ada209c --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ChargingOrderGroup.java @@ -0,0 +1,13 @@ +package com.ruoyi.common.core.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +@Data +public class ChargingOrderGroup { + @ApiModelProperty("充电量") + BigDecimal chargingCapacity; + @ApiModelProperty("站点") + Integer siteId; +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ChargingPercentProvinceDto.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ChargingPercentProvinceDto.java new file mode 100644 index 0000000..08b4f8c --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/dto/ChargingPercentProvinceDto.java @@ -0,0 +1,13 @@ +package com.ruoyi.common.core.dto; + +import lombok.Data; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Data +public class ChargingPercentProvinceDto { + String provinceCode; + LocalDate date1; + LocalDate date2; +} diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java index 42de42e..690629f 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserVipDetailController.java @@ -56,6 +56,15 @@ } return R.ok(list); } - + + + /** + * 修改会员明细 + * @param appUserVipDetail + */ + @PostMapping("/updateAppUserVipDetail") + public void updateAppUserVipDetail(@RequestBody TAppUserVipDetail appUserVipDetail){ + appUserVipDetailService.updateById(appUserVipDetail); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java index e073766..d49f395 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java @@ -11,6 +11,9 @@ import com.ruoyi.chargingPile.api.query.SiteQuery; import com.ruoyi.chargingPile.api.vo.*; import com.ruoyi.chargingPile.domain.SiteMenu; +import com.ruoyi.chargingPile.dto.ChargingPercentBack; +import com.ruoyi.common.core.dto.ChargingOrderGroup; +import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; import com.ruoyi.chargingPile.service.*; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.GeodesyUtil; @@ -18,6 +21,8 @@ import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.order.api.feignClient.ChargingOrderClient; +import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.other.api.feignClient.RoleSiteClient; import com.ruoyi.other.api.feignClient.UserSiteClient; import com.ruoyi.system.api.domain.SysUser; @@ -33,8 +38,11 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; +import java.time.LocalDate; import java.time.LocalTime; +import java.time.temporal.ChronoUnit; import java.util.*; +import java.util.stream.Collectors; /** * @author zhibing.pu @@ -72,6 +80,9 @@ @Autowired private TAccountingStrategyDetailService accountingStrategyDetailService; + @Resource + private ChargingOrderClient chargingOrderClient; + /** * 小程序扫一扫 @@ -105,6 +116,112 @@ PageInfo<GetSiteListDTO> list = siteService.getSiteList(siteList); return AjaxResult.success(list); } + @GetMapping("/getSiteList/byUserId") + @ApiOperation(value = "获取站点列表", tags = {"管理后台-站点管理"}) + public R<List<GetSiteListDTO>> getSiteListByUserId(@RequestParam("userId") Long userId){ + PageInfo<GetSiteListDTO> list = siteService.getSiteList1(userId); + return R.ok(list.getRecords()); + } + + + + @GetMapping("/map/getSiteList") + @ApiOperation(value = "获取站点", tags = {"管理后台-数据分析-电站分析"}) + public R<List<GetSiteListDTO>> getMapSiteList(GetSiteList siteList){ + siteList.setPageCurr(1); + siteList.setPageCurr(99999); + PageInfo<GetSiteListDTO> list = siteService.getSiteList(siteList); + return R.ok(list.getRecords()); + } + + + @GetMapping("/map/getPercent") + @ApiOperation(value = "获取该充电站的利用率", tags = {"管理后台-数据分析-电站分析"}) + public R getPercent(Integer siteId){ + BigDecimal bigDecimal = new BigDecimal("0"); + //获取该站点的总充电度数 + List<TChargingOrder> chargingOrders = chargingOrderClient.getList(siteId).getData(); + for (TChargingOrder chargingOrder : chargingOrders) { + bigDecimal = bigDecimal.add(chargingOrder.getChargingCapacity()); + } + //获取该站点的所有充电桩 + List<TChargingPile> chargingPiles = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, siteId).list(); + BigDecimal bigDecimal1 = new BigDecimal("0"); + for (TChargingPile chargingPile : chargingPiles) { + bigDecimal1 = bigDecimal1.add(chargingPile.getRatedPower()); + } + BigDecimal multiply = bigDecimal1.multiply(new BigDecimal("24")); + + BigDecimal divide = bigDecimal.divide(multiply, 0, BigDecimal.ROUND_HALF_UP); + + + return R.ok(divide); + } + + + + + @PostMapping("/map/getPercentByprovinceCode") + @ApiOperation(value = "获取该充电站的利用率", tags = {"管理后台-数据分析-电站分析"}) + public R getPercentByCityCode(@RequestBody ChargingPercentProvinceDto chargingPercentProvinceDto){ + + if (chargingPercentProvinceDto.getDate1()==null){ + LocalDate today = LocalDate.now(); + LocalDate lastMonth = today.minusMonths(1); + LocalDate firstDayOfLastMonth = lastMonth.withDayOfMonth(1); + LocalDate lastDayOfLastMonth =lastMonth.withDayOfMonth(lastMonth.lengthOfMonth()); + chargingPercentProvinceDto.setDate1(firstDayOfLastMonth); + chargingPercentProvinceDto.setDate2(lastDayOfLastMonth); + } + + + + GetSiteList siteList = new GetSiteList(); + siteList.setProvinceCode(chargingPercentProvinceDto.getProvinceCode()); + siteList.setPageCurr(1); + siteList.setPageCurr(9999); + ChargingPercentBack chargingPercentBack = new ChargingPercentBack(); + + //通过省编码获取充电站id + List<GetSiteListDTO> records = siteService.getSiteList(siteList).getRecords(); + List<Integer> collect = records.stream().map(GetSiteListDTO::getId).collect(Collectors.toList()); + // 通过时间段获取和充电桩id获取各个充电站的充电订单 + List<ChargingOrderGroup> data = chargingOrderClient.getBySiteIdAndTime(chargingPercentProvinceDto).getData(); + // 计算利用率展示 + for (ChargingOrderGroup datum : data) { + List<TChargingPile> chargingPiles = chargingPileService.lambdaQuery().eq(TChargingPile::getSiteId, datum.getSiteId()).list(); + BigDecimal bigDecimal1 = new BigDecimal("0"); + for (TChargingPile chargingPile : chargingPiles) { + bigDecimal1 = bigDecimal1.add(chargingPile.getRatedPower()); + } + + long daysBetween = ChronoUnit.DAYS.between(chargingPercentProvinceDto.getDate1(), chargingPercentProvinceDto.getDate2()) + 1; + BigDecimal multiply = bigDecimal1.multiply(new BigDecimal("24")).multiply(BigDecimal.valueOf(daysBetween)); + //得到利用率 + BigDecimal divide = datum.getChargingCapacity().divide(multiply, 0, BigDecimal.ROUND_HALF_UP); + //如果利用率大于等于10 + if (divide.compareTo(BigDecimal.valueOf(10))>=0){ + chargingPercentBack.setCount1(chargingPercentBack.getCount1()+1); + } + + //如果利用率大于等于5小于10 + if (divide.compareTo(BigDecimal.valueOf(5))>=0 && divide.compareTo(BigDecimal.valueOf(10))<0){ + chargingPercentBack.setCount2(chargingPercentBack.getCount2()+1); + } + //如果利用率大于等于1小于5 + if (divide.compareTo(BigDecimal.valueOf(1))>=0 && divide.compareTo(BigDecimal.valueOf(5))<0){ + chargingPercentBack.setCount3(chargingPercentBack.getCount3()+1); + } + //如果利用率小于1 + if (divide.compareTo(BigDecimal.valueOf(1))<0){ + chargingPercentBack.setCount4(chargingPercentBack.getCount4()+1); + } + + } + return R.ok(chargingPercentBack); + } + + @GetMapping("/getSiteList1") @ApiOperation(value = "获取站点列表 不分页", tags = {"管理后台-活动费用统计"}) public AjaxResult<List<Site>> getSiteList1(){ @@ -162,7 +279,7 @@ return AjaxResult.success(chargingPileService.getChargingGunList(siteId,type)); } - @ApiOperation(value = "获取站点下充电枪数量统计", tags = {"小程序-站点管理-站点详情"}) + @ApiOperation(value = "获取站点下充电枪数量统计", tags = {"小程序-站点管理-站点详情","管理后台-数据分析-电站分析"}) @GetMapping("/getChargingGunCount") public AjaxResult<Map<String,ChargingGunCountVO>> getChargingGunCount(@RequestParam(value = "siteId")@ApiParam(value = "站点id", required = true)Integer siteId){ return AjaxResult.success(chargingGunService.getChargingGunCount(siteId)); diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java index ffc0dfa..5234673 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java @@ -1,23 +1,23 @@ package com.ruoyi.chargingPile.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.model.TAccountingStrategy; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; import com.ruoyi.chargingPile.api.vo.StrategyPriceVO; import com.ruoyi.chargingPile.api.vo.TAccountingStrategyDetailVO; import com.ruoyi.chargingPile.service.ISiteService; import com.ruoyi.chargingPile.service.TAccountingStrategyDetailService; import com.ruoyi.chargingPile.service.TAccountingStrategyService; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.web.domain.AjaxResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Objects; @@ -77,6 +77,19 @@ public AjaxResult<StrategyPriceVO> queryPrice(@RequestParam("siteId") Integer siteId) { return AjaxResult.ok(accountingStrategyDetailService.queryPrice(siteId)); } - + + + /** + * 获取当前有效的计费模板 + * @param accountingStrategyId + * @return + */ + @PostMapping("/getNowData") + public R<TAccountingStrategyDetail> getNowData(@RequestParam("accountingStrategyId") Integer accountingStrategyId){ + TAccountingStrategyDetail one = accountingStrategyDetailService.getOne(new LambdaQueryWrapper<TAccountingStrategyDetail>() + .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategyId) + .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time")); + return R.ok(one); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java index 08e5674..22746d3 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java @@ -26,6 +26,8 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDate; import java.util.Arrays; import java.util.List; @@ -149,5 +151,10 @@ public R<TParkingRecord> getRecordById(@RequestParam("id") Long id){ return R.ok(parkingRecordService.getById(id)); } + @PostMapping(value = "/getRecordAmount") + public R<BigDecimal> getRecordAmount(@RequestParam("sixBefore") LocalDate sixBefore){ + BigDecimal sum = parkingRecordService.getSum(sixBefore); + return R.ok(); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java index dbe9c26..433728e 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java @@ -1,8 +1,18 @@ package com.ruoyi.chargingPile.controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.chargingPile.api.model.TParkingLot; +import com.ruoyi.chargingPile.api.model.TParkingRecord; +import com.ruoyi.chargingPile.dto.ParkingRecordPageQuery; +import com.ruoyi.chargingPile.service.TParkingLotService; +import com.ruoyi.chargingPile.service.TParkingRecordService; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.web.domain.AjaxResult; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; /** * <p> @@ -15,6 +25,39 @@ @RestController @RequestMapping("/t-parking-record") public class TParkingRecordController { + @Resource + private TParkingRecordService parkingRecordService; + @Resource + private TParkingLotService parkingLotService; + + @ApiOperation(tags = {"后台-订单管理-停车记录"},value = "列表") + @PostMapping(value = "/page") + public R<Page<TParkingRecord>> page(@RequestBody ParkingRecordPageQuery query) { + Page<TParkingRecord> page = parkingRecordService.lambdaQuery().ge(query.getStart() != null, TParkingRecord::getCreateTime, query.getStart()) + .le(query.getEnd() != null, TParkingRecord::getCreateTime, query.getEnd()) + .like(query.getLicensePlate() != null, TParkingRecord::getLicensePlate, query.getLicensePlate()) + .eq(query.getStatus() != null, TParkingRecord::getStatus, query.getStatus()) + .eq(query.getOutParkingType() != null, TParkingRecord::getOutParkingType, query.getOutParkingType()) + .page(Page.of(query.getPageCurr(), query.getPageSize())); + + for (TParkingRecord record : page.getRecords()) { + record.setName(parkingLotService.getById(record.getParkingLotId()).getName()); + record.setUid(record.getId().toString()); + } + return R.ok(page); + } + + @ApiOperation(tags = {"后台-订单管理-停车记录"},value = "出场") + @GetMapping(value = "/out") + public R out(Long id) { + TParkingRecord byId = parkingRecordService.getById(id); + byId.setStatus(2); + parkingRecordService.updateById(byId); + return R.ok(); + + } + + } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ChargingPercentBack.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ChargingPercentBack.java new file mode 100644 index 0000000..5ea0ad0 --- /dev/null +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ChargingPercentBack.java @@ -0,0 +1,14 @@ +package com.ruoyi.chargingPile.dto; + +import lombok.Data; +import org.apache.poi.hpsf.Decimal; + +import java.math.BigDecimal; + +@Data +public class ChargingPercentBack { + private Long count1 = 0L; + private Long count2= 0L; + private Long count3= 0L; + private Long count4= 0L; +} diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordPageQuery.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordPageQuery.java new file mode 100644 index 0000000..0062f60 --- /dev/null +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/dto/ParkingRecordPageQuery.java @@ -0,0 +1,16 @@ +package com.ruoyi.chargingPile.dto; + +import com.ruoyi.common.core.web.page.BasePage; +import lombok.Data; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Data +public class ParkingRecordPageQuery extends BasePage { + LocalDate start; + LocalDate end; + String licensePlate; + Integer status; + Integer outParkingType; +} diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TParkingRecordMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TParkingRecordMapper.java index 0876ee7..248c63f 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TParkingRecordMapper.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TParkingRecordMapper.java @@ -2,6 +2,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.chargingPile.api.model.TParkingRecord; +import org.apache.ibatis.annotations.Param; + +import java.math.BigDecimal; +import java.time.LocalDate; /** * <p> @@ -13,4 +17,5 @@ */ public interface TParkingRecordMapper extends BaseMapper<TParkingRecord> { + BigDecimal getSum(@Param("sixBefore") LocalDate sixBefore); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java index b24a0eb..15cf0c5 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java @@ -28,7 +28,8 @@ * @return */ PageInfo<GetSiteListDTO> getSiteList(GetSiteList siteList); - + PageInfo<GetSiteListDTO> getSiteList1(Long userId); + /** * 添加站点信息 diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TParkingRecordService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TParkingRecordService.java index 1a1b349..2af1069 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TParkingRecordService.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TParkingRecordService.java @@ -3,6 +3,9 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.chargingPile.api.model.TParkingRecord; +import java.math.BigDecimal; +import java.time.LocalDate; + /** * <p> * 服务类 @@ -13,4 +16,5 @@ */ public interface TParkingRecordService extends IService<TParkingRecord> { + BigDecimal getSum(LocalDate sixBefore); } 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 1a3a90f..38e0916 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 @@ -107,10 +107,46 @@ } return pageInfo.setRecords(list); } - - - - + + + @Override + public PageInfo<GetSiteListDTO> getSiteList1(Long userId) { + GetSiteList siteList = new GetSiteList(); + siteList.setPageCurr(1); + siteList.setPageSize(9999); + Set<Integer> ids = null; + //校验合作商权限 + SysUser sysUser = sysUserClient.getSysUser(userId).getData(); + Integer roleType = sysUser.getRoleType(); + Integer objectId = sysUser.getObjectId(); + //合作商 + if(roleType == 2){ + ids = partnerService.authSite(objectId, SiteMenu.SITE_LIST); + }else{ + //非管理员需要根据角色和用户配置查询允许的站点数据 + if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){ + List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData(); + List<Integer> data1 = roleSiteClient.getSiteIds(sysUser.getRoleId()).getData(); + data.addAll(data1); + ids = new HashSet<>(data); + } + } + PageInfo<GetSiteListDTO> pageInfo = new PageInfo<>(siteList.getPageCurr(), siteList.getPageSize()); + List<GetSiteListDTO> list = this.baseMapper.getSiteList(pageInfo, siteList, ids); + for (GetSiteListDTO getSiteListDTO : list) { + Integer siteId = getSiteListDTO.getId(); + getSiteListDTO.setAuthAccountingStrategy(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.SITE_ACCOUNTING_STRATEGY)); + //平台账号才有此权限 + getSiteListDTO.setAuthPartner(roleType == 1 ? true : false); + getSiteListDTO.setAuthUpdate(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.SITE_UPDATE)); + getSiteListDTO.setAuthDelete(roleType == 1 ? true : partnerService.authMenu(objectId, siteId, SiteMenu.SITE_DELETE)); + } + return pageInfo.setRecords(list); + } + + + + /** * 添加站点信息 * @param site diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java index a567303..d497796 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java @@ -40,6 +40,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; +import java.math.MathContext; import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.util.*; @@ -304,8 +305,13 @@ chargeMonitoring.setNotCharged(total.size() - charging.size()); chargeMonitoring.setRatedPower(ratedPower.setScale(4, RoundingMode.HALF_EVEN)); chargeMonitoring.setRealTimePower(realTimePower.setScale(4, RoundingMode.HALF_EVEN)); - chargeMonitoring.setDemandPowerSatisfactionRate(realTimePower.divide(ratedPower).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN)); - + if(ratedPower.equals(BigDecimal.ZERO)){ + chargeMonitoring.setDemandPowerSatisfactionRate(BigDecimal.ZERO); + }else{ + chargeMonitoring.setDemandPowerSatisfactionRate(realTimePower.divide(ratedPower, new MathContext(2, RoundingMode.HALF_EVEN)) + .multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN)); + } + List<String> dates = new ArrayList<>(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MMM-dd"); Calendar calendar = Calendar.getInstance(); @@ -325,8 +331,12 @@ List<Double> data = chargingOrderAccountingStrategyClient.getDailyChargingDegree(6, siteIds).getData(); List<Double> value2 = new ArrayList<>(); for (Double datum : data) { - Double datum1 = new BigDecimal(datum).divide(new BigDecimal(list.size()).multiply(v).multiply(new BigDecimal(24))).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); - value2.add(datum1); + if(list.size() == 0){ + value2.add(0D); + }else{ + Double datum1 = new BigDecimal(datum).divide(new BigDecimal(list.size()).multiply(v).multiply(new BigDecimal(24))).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); + value2.add(datum1); + } } Map<String, Object> utilizationTrend = new HashMap<>(); utilizationTrend.put("date", dates); diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java index 12d98fa..73fccbb 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TParkingRecordServiceImpl.java @@ -6,6 +6,9 @@ import com.ruoyi.chargingPile.service.TParkingRecordService; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.time.LocalDate; + /** * <p> * 服务实现类 @@ -17,4 +20,8 @@ @Service public class TParkingRecordServiceImpl extends ServiceImpl<TParkingRecordMapper, TParkingRecord> implements TParkingRecordService { + @Override + public BigDecimal getSum(LocalDate sixBefore) { + return this.baseMapper.getSum(sixBefore); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml index 1ef7f1a..defbedf 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TParkingRecordMapper.xml @@ -23,5 +23,8 @@ <sql id="Base_Column_List"> id, app_user_id, license_plate, vehicle_color, charging_order_id, parking_lot_id, in_parking_time, out_parking_time, parking_duration, order_amount, status, out_parking_type, create_time </sql> + <select id="getSum" resultType="java.math.BigDecimal"> + select sum(timeout_amount) from t_parking_record where in_parking_time >= #{sixBefore} + </select> </mapper> diff --git a/ruoyi-service/ruoyi-integration/pom.xml b/ruoyi-service/ruoyi-integration/pom.xml index 0ee4a2f..4c146a8 100644 --- a/ruoyi-service/ruoyi-integration/pom.xml +++ b/ruoyi-service/ruoyi-integration/pom.xml @@ -164,8 +164,11 @@ <artifactId>huaweicloud-sdk-bundle</artifactId> <version>3.1.87</version> </dependency> - - + + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-api-order</artifactId> + </dependency> </dependencies> <build> diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/PlatformStartChargingReplyController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/PlatformStartChargingReplyController.java new file mode 100644 index 0000000..b5224d7 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/PlatformStartChargingReplyController.java @@ -0,0 +1,35 @@ +package com.ruoyi.integration.controller; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.integration.api.model.PlatformStartChargingReply; +import com.ruoyi.integration.mongodb.service.PlatformStartChargingReplyService; +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; +import java.util.List; + +/** + * @author zhibing.pu + * @Date 2024/8/31 15:09 + */ +@RestController +@RequestMapping("/platformStartChargingReply") +public class PlatformStartChargingReplyController { + + @Resource + private PlatformStartChargingReplyService platformStartChargingReplyService; + + /** + * 根据订单编号查询远程启机应答结果 + * @param code + * @return + */ + @PostMapping("/getPlatformStartChargingReply") + public R<List<PlatformStartChargingReply>> getPlatformStartChargingReply(@RequestParam("code") String code){ + List<PlatformStartChargingReply> platformStartChargingReply = platformStartChargingReplyService.getPlatformStartChargingReply(code); + return R.ok(platformStartChargingReply); + } +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java index 7928fbe..aedff15 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/UploadRealTimeMonitoringDataController.java @@ -10,6 +10,7 @@ import javax.annotation.Resource; import java.util.List; +import java.util.Set; /** * <p> @@ -51,6 +52,14 @@ List<UploadRealTimeMonitoringData> list = uploadRealTimeMonitoringDataService.getDataByOrderCode(code); return R.ok(list); } + + + @PostMapping(value = "/getAll") + public R<List<UploadRealTimeMonitoringData>> getAll(@RequestParam("values") Set<String> values,@RequestParam("page") Integer page, @RequestParam("size")Integer size){ + List<UploadRealTimeMonitoringData> list = uploadRealTimeMonitoringDataService.getDataAll(values,page,size); + return R.ok(list); + } + } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStartChargingReplyService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStartChargingReplyService.java index da31586..c07b517 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStartChargingReplyService.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/PlatformStartChargingReplyService.java @@ -2,6 +2,17 @@ import com.ruoyi.integration.api.model.PlatformStartChargingReply; import com.ruoyi.integration.mongodb.base.BaseService; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; public interface PlatformStartChargingReplyService extends BaseService<PlatformStartChargingReply> { + + /** + * 根据订单编号查询远程启机应答数据 + * @param code + * @return + */ + List<PlatformStartChargingReply> getPlatformStartChargingReply(String code); + } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java index c63f3f5..e142505 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/UploadRealTimeMonitoringDataService.java @@ -5,6 +5,7 @@ import com.ruoyi.integration.mongodb.base.BaseService; import java.util.List; +import java.util.Set; public interface UploadRealTimeMonitoringDataService extends BaseService<UploadRealTimeMonitoringData> { @@ -14,5 +15,6 @@ * @return */ List<UploadRealTimeMonitoringData> getDataByOrderCode(String code); - + List<UploadRealTimeMonitoringData> getDataAll(Set<String> values, Integer page, Integer size); + } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStartChargingReplyServiceImpl.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStartChargingReplyServiceImpl.java index fcbe760..78fa5c2 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStartChargingReplyServiceImpl.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/PlatformStartChargingReplyServiceImpl.java @@ -5,6 +5,8 @@ import com.ruoyi.integration.mongodb.service.PlatformStartChargingReplyService; 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; @@ -29,4 +31,18 @@ public List<PlatformStartChargingReply> findAll() { return mongoTemplate.findAll(PlatformStartChargingReply.class); } + + + /** + * 根据订单编号查询远程启机应答数据 + * @param code + * @return + */ + @Override + public List<PlatformStartChargingReply> getPlatformStartChargingReply(String code) { + Query query = new Query(); + query.addCriteria(Criteria.where("transaction_serial_number").is(code)); + List<PlatformStartChargingReply> platformStartChargingReplies = mongoTemplate.find(query, PlatformStartChargingReply.class); + return platformStartChargingReplies; + } } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java index adfda0b..89cf4d0 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java @@ -6,6 +6,8 @@ import com.ruoyi.integration.iotda.constant.IotConstant; import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; @@ -13,6 +15,7 @@ import org.springframework.stereotype.Service; import java.util.List; +import java.util.Set; @Service public class UploadRealTimeMonitoringDataServiceImpl implements UploadRealTimeMonitoringDataService { @@ -53,4 +56,21 @@ , UploadRealTimeMonitoringData.class); return uploadRealTimeMonitoringData; } + + @Override + public List<UploadRealTimeMonitoringData> getDataAll(Set<String> values, Integer page, Integer size) { + Query query = new Query(); + if (!values.isEmpty()){ + query.addCriteria(Criteria.where("transaction_serial_number").in(values)); + } + // 设置分页 + Pageable pageable = PageRequest.of(page, size); + query.with(pageable); + + List<UploadRealTimeMonitoringData> uploadRealTimeMonitoringData = mongoTemplate.find( + query.with(Sort.by("create_time")) + , UploadRealTimeMonitoringData.class); + return uploadRealTimeMonitoringData; + } + } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java index 31a7501..f28993e 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/listener/UploadRealTimeMonitoringDataMessageListener.java @@ -5,12 +5,16 @@ import com.ruoyi.integration.mongodb.service.UploadRealTimeMonitoringDataService; import com.ruoyi.integration.rocket.model.UploadRealTimeMonitoringDataMessage; import com.ruoyi.integration.rocket.util.EnhanceMessageHandler; +import com.ruoyi.order.api.feignClient.ChargingOrderClient; +import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; 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 +28,15 @@ @Autowired private UploadRealTimeMonitoringDataService uploadRealTimeMonitoringDataService; + + @Resource + private ChargingOrderClient chargingOrderClient; + + + + + + @Override protected void handleMessage(UploadRealTimeMonitoringDataMessage message) throws Exception { // 此时这里才是最终的业务处理,代码只需要处理资源类关闭异常,其他的可以交给父类重试 @@ -33,6 +46,9 @@ BeanUtils.copyProperties(message,uploadRealTimeMonitoringData); uploadRealTimeMonitoringDataService.create(uploadRealTimeMonitoringData); // 业务处理 + UploadRealTimeMonitoringDataQuery query = new UploadRealTimeMonitoringDataQuery(); + BeanUtils.copyProperties(uploadRealTimeMonitoringData, query); + chargingOrderClient.chargeMonitoring(query); } @Override 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 9c19079..ca25338 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 @@ -2,6 +2,8 @@ import com.google.common.collect.Lists; import java.math.BigDecimal; +import java.time.DayOfWeek; +import java.time.LocalDate; import java.time.LocalDateTime; @@ -9,6 +11,7 @@ import com.ruoyi.account.api.feignClient.AppUserCarClient; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.TAppUserCar; +import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient; import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; import com.ruoyi.chargingPile.api.feignClient.ParkingLotClient; @@ -19,14 +22,23 @@ import com.ruoyi.chargingPile.api.model.TParkingRecord; import com.ruoyi.chargingPile.api.vo.SiteVO; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.dto.ChargingOrderGroup; +import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; +import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.service.TokenService; 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.integration.api.model.UploadRealTimeMonitoringData; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; +import com.ruoyi.integration.api.model.ChargingOrderAndUploadRealTimeMonitoringDataDto; +import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.query.ChargingOrderQuery; import com.ruoyi.order.api.query.TChargingCountQuery; +import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import com.ruoyi.order.api.vo.ChargingOrderInfoVO; import com.ruoyi.order.api.vo.ChargingOrderVO; import com.ruoyi.order.api.vo.TCharingOrderVO; @@ -37,12 +49,16 @@ import com.ruoyi.order.dto.OrderEvaluateVo; import com.ruoyi.order.dto.*; import com.ruoyi.order.service.*; +import com.ruoyi.order.util.PreviousSixMonths; import com.ruoyi.payment.api.feignClient.AliPaymentClient; import com.ruoyi.payment.api.feignClient.WxPaymentClient; import com.ruoyi.payment.api.vo.AliQueryOrder; +import com.ruoyi.payment.api.vo.WxRefundNotifyResp; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; +import jdk.nashorn.internal.runtime.ListAdapter; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; @@ -51,12 +67,17 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; +import java.time.YearMonth; +import java.time.temporal.ChronoUnit; +import java.time.temporal.TemporalAdjusters; +import java.util.*; import java.util.*; import java.util.List; +import java.util.stream.Collectors; /** * <p> - * 前端控制器 + * 前端控制器 * </p> * * @author xiaochen @@ -73,20 +94,21 @@ private TokenService tokenService; @Autowired private TOrderEvaluateService orderEvaluateService; - + @Resource private WxPaymentClient wxPaymentClient; - + @Resource private RedisService redisService; - + @Resource private AliPaymentClient aliPaymentClient; @Resource private TShoppingOrderService shoppingOrderService; - - @Autowired + + @Resource private AppUserClient appUserClient; + @Resource private TVipOrderService vipOrderService; @@ -109,6 +131,9 @@ private AppUserCarClient appUserCarClient; @Resource private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService; + + + @ResponseBody @PostMapping(value = "/pay/order/list") @@ -168,11 +193,12 @@ // payOrderInfoDto3.setRefundAmount(new BigDecimal("0")); - } + + + } return R.ok(); } - @ResponseBody @GetMapping(value = "/pay/order/refund/detail") @ApiOperation(value = "退款信息", tags = {"管理后台-支付订单-订单信息"}) @@ -205,8 +231,10 @@ payOrderChargingInfo.setChargingName(data1.getName()); TChargingGun data2 = chargingGunClient.getChargingGunById(byId.getChargingGunId()).getData(); payOrderChargingInfo.setGunName(data2.getName()); - List<TAppUserCar> data3 = appUserCarClient.getCarByIds(Collections.singletonList(byId.getAppUserCarId())).getData(); - payOrderChargingInfo.setCarNum(data3.get(0).getLicensePlate()); + if (byId.getAppUserCarId()!=null) { + List<TAppUserCar> data3 = appUserCarClient.getCarByIds(Collections.singletonList(byId.getAppUserCarId())).getData(); + payOrderChargingInfo.setCarNum(data3.get(0).getLicensePlate()); + } return R.ok(); } @@ -219,6 +247,7 @@ } + @ResponseBody @PostMapping(value = "/pay/order/refund/list") @ApiOperation(value = "充电信息", tags = {"管理后台-支付订单-退款订单"}) @@ -226,6 +255,9 @@ return chargingOrderService.getRefundList(chargingRefundDto); } + + + @ResponseBody @@ -264,7 +296,6 @@ orderEvaluateService.addOrderEvaluate(dto); return AjaxResult.success(); } - /** * 查询用户最近一次充电记录使用的车辆 * @@ -276,18 +307,17 @@ List<TChargingOrder> list = chargingOrderService.list(new LambdaQueryWrapper<TChargingOrder>() .eq(TChargingOrder::getAppUserId, tokenService.getLoginUserApplet().getUserId()) .isNotNull(TChargingOrder::getAppUserCarId)); - if (!list.isEmpty()) { + if (!list.isEmpty()){ // 最近使用的车辆id Long size = list.get(0).getAppUserCarId(); return R.ok(size); - } else { + }else{ return R.ok(-1L); } } /** * 查询会员在本月有多少次享受了充电折扣 - * * @param req * @return */ @@ -299,7 +329,6 @@ .between(TChargingOrder::getStartTime, req.getStartTime(), req.getEndTime())).size(); return R.ok(size); } - //用户订单数量 @PostMapping(value = "/useOrderCount") public R<Long> useOrderCount(@RequestParam("userId") Long userId) { @@ -314,9 +343,22 @@ return R.ok(chargingOrderService.getById(orderId)); } + @PostMapping(value = "/getList") + public R<List<TChargingOrder>> getList(@RequestParam("siteId") Integer siteId) { + + List<TChargingOrder> list = chargingOrderService.lambdaQuery().eq(TChargingOrder::getSiteId, siteId).list(); + return R.ok(list); + } + + @PostMapping(value = "/getBySiteIdAndTime") + public R<List<ChargingOrderGroup>> getBySiteIdAndTime(@RequestBody ChargingPercentProvinceDto chargingPercentProvinceDto) { + + List<ChargingOrderGroup> groups = chargingOrderService.chargingOrderGroup(chargingPercentProvinceDto); + return R.ok(groups); + } + /** * 根据充电枪id获取正在进行中的订单 - * * @param chargingGunId 充电枪id * @return */ @@ -326,8 +368,10 @@ .eq(TChargingOrder::getDelFlag, 0).eq(TChargingOrder::getStatus, 3)); return R.ok(one); } - - + + + + @ResponseBody @GetMapping(value = "/getMyChargingOrderList") @ApiOperation(value = "获取充电记录列表", tags = {"小程序-充电记录"}) @@ -335,8 +379,8 @@ Map<String, Object> orderList = chargingOrderService.getMyChargingOrderList(query); return AjaxResult.success(orderList); } - - + + @ResponseBody @GetMapping(value = "/getMyChargingOrderInfo") @ApiOperation(value = "获取充电记订单明细", tags = {"小程序-充电记录"}) @@ -344,8 +388,9 @@ MyChargingOrderInfo myChargingOrderInfo = chargingOrderService.getMyChargingOrderInfo(id); return AjaxResult.success(myChargingOrderInfo); } - - + + + @ResponseBody @GetMapping(value = "/getNoInvoicedOrder") @ApiOperation(value = "获取未开票的订单数据", tags = {"小程序-充电发票"}) @@ -353,18 +398,18 @@ List<MyChargingOrderList> list = chargingOrderService.getNoInvoicedOrder(query); return AjaxResult.success(list); } - - + + + @ResponseBody @PostMapping(value = "/paymentChargingOrder") @ApiOperation(value = "支付充电充值费用", tags = {"小程序-扫一扫"}) public AjaxResult paymentChargingOrder(@RequestBody AddChargingOrder addChargingOrder) { return chargingOrderService.paymentChargingOrder(addChargingOrder); } - + /** * 充电充值支付回调 - * * @param request */ @ResponseBody @@ -404,6 +449,27 @@ e.printStackTrace(); } } + + + /** + * 远程启动失败后退款回调 + * @param request + */ + @ResponseBody + @PostMapping(value = "/chargingOrderALICallback") + public void chargingOrderStartupFailureWxRefund(HttpServletRequest request){ + WxRefundNotifyResp data = wxPaymentClient.refundNotify(request).getData(); + if(null != data){ + String out_refund_no = data.getOut_refund_no(); + String refund_id = data.getRefund_id(); + String tradeState = data.getTradeState(); + String success_time = data.getSuccess_time(); + chargingOrderService.chargingOrderStartupFailureWxRefund(out_refund_no, refund_id, tradeState, success_time); + } + } + + + @ResponseBody @@ -417,8 +483,9 @@ Object cacheObject = redisService.getCacheObject(key); return AjaxResult.success(cacheObject); } - - + + + @ResponseBody @GetMapping(value = "/getChargingDetails/{id}") @ApiOperation(value = "获取充电中页面数据", tags = {"小程序-扫一扫"}) @@ -440,5 +507,268 @@ public AjaxResult stopCharging(@PathVariable String id) { return chargingOrderService.stopCharging(id); } -} + @ResponseBody + @GetMapping(value = "/six/charge") + @ApiOperation(value = "电站收入分析", tags = {"后台-数据分析-平台收入分析"}) + public R<List<SixChargingDto>> charge(Integer siteId) { + Long userId = SecurityUtils.getUserId(); + //如果没传siteId,获取当前登陆人所有的siteIds + List<Integer> siteIds = new ArrayList<>(); + if (siteId==null){ + List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData(); + for (GetSiteListDTO datum : data) { + siteIds.add(datum.getId()); + } + }else { + siteIds.add(siteId); + } + LocalDate sixBefore = PreviousSixMonths.get(); + //通过siteIds进行sql查询统计 + List<SixChargingDto> chargingDtos = chargingOrderService.charge(sixBefore, siteIds); + + return R.ok(chargingDtos); + + } + + @ResponseBody + @GetMapping(value = "/six/circle") + @ApiOperation(value = "电站收入占比", tags = {"后台-数据分析-平台收入分析"}) + public R<List<SixCircleDto>> circle() { + Long userId = SecurityUtils.getUserId(); + //获取当前登录的siteIds + List<Integer> siteIds = new ArrayList<>(); + List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData(); + for (GetSiteListDTO datum : data) { + siteIds.add(datum.getId()); + } + //进行统计groupBySiteId + LocalDate sixBefore = PreviousSixMonths.get(); + + List<SixCircleDto> sixCircleDtos = chargingOrderService.circle(siteIds,sixBefore); + for (SixCircleDto sixCircleDto : sixCircleDtos) { + Site site = siteClient.getSiteByIds(Arrays.asList(sixCircleDto.getSiteId())).getData().get(0); + sixCircleDto.setSiteName(site.getName()); + } + return R.ok(sixCircleDtos); + + } + + + @ResponseBody + @GetMapping(value = "/six/shop") + @ApiOperation(value = "购物收入", tags = {"后台-数据分析-平台收入分析"}) + public R<List<SixShopDto>> shop(Integer status) { + //count近6个月的数据 + LocalDate sixBefore = PreviousSixMonths.get(); + List<SixShopDto> sixShopDtos = shoppingOrderService.sixBefore(sixBefore,status); + return R.ok(sixShopDtos); + } + + @ResponseBody + @GetMapping(value = "/six/vip") + @ApiOperation(value = "vip收入", tags = {"后台-数据分析-平台收入分析"}) + public R<List<SixVipDto>> vip() { + //count近6个月的数据 + LocalDate sixBefore = PreviousSixMonths.get(); + List<SixVipDto> vipDtos = vipOrderService.sixBefore(sixBefore); + return R.ok(vipDtos); + } + + @ResponseBody + @GetMapping(value = "/six/total") + @ApiOperation(value = "底部数据分类", tags = {"后台-数据分析-平台收入分析"}) + public R<Map<String,BigDecimal>> total() { + //count近6个月的数据 + LocalDate sixBefore = PreviousSixMonths.get(); + Map<String,BigDecimal> map = chargingOrderService.countAll(sixBefore); + BigDecimal data = parkingLotClient.getRecordAmount(sixBefore).getData(); + map.put("parkingAmount",data); + BigDecimal data1 = shoppingOrderService.getSumAmount(sixBefore); + map.put("shopAmount",data1); + BigDecimal data2 = vipOrderService.getSumAmout(sixBefore); + map.put("vipAmount",data2); + + return R.ok(map); + } + + @Resource + private UploadRealTimeMonitoringDataClient uploadRealTimeMonitoringDataClient; + @ResponseBody + @PostMapping(value = "/watch/chargingOrder") + @ApiOperation(value = "监控订单", tags = {"管理后台-订单管理"}) + public AjaxResult<TCharingOrderVO> watchChargingOrder(@RequestBody ChargingOrderQuery dto) { + Integer page = dto.getPageCurr(); + Integer pageSize = dto.getPageSize(); + List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData(); + dto.setUserIds(data); + dto.setPageCurr(1); + dto.setPageSize(99999); + TCharingOrderVO res = chargingOrderService.chargingOrder(dto); + Map<String,TChargingOrder> map = new HashMap<>(); + //吧list放入map中 + for (ChargingOrderVO record : res.getList().getRecords()) { + map.put(record.getCode(),record); + } + Set<String> strings = map.keySet(); + + + List<UploadRealTimeMonitoringData> data1 = uploadRealTimeMonitoringDataClient.getAll(strings, page, pageSize).getData(); + + List<ChargingOrderAndUploadRealTimeMonitoringDataDto> dtos = new ArrayList<>(); + for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data1) { + ChargingOrderAndUploadRealTimeMonitoringDataDto dataDto = new ChargingOrderAndUploadRealTimeMonitoringDataDto(); + BeanUtils.copyProperties(uploadRealTimeMonitoringData,dataDto); + BeanUtils.copyProperties(map.get(uploadRealTimeMonitoringData.getCharging_pile_code()),dataDto); + dtos.add(dataDto); + } + + + return AjaxResult.success(res); + } + + + + + /** + * 处理充电订单实时监控数据相关的业务逻辑 + * @param query + */ + @PostMapping("/chargeMonitoring") + public void chargeMonitoring(@RequestBody UploadRealTimeMonitoringDataQuery query){ + chargingOrderService.chargeMonitoring(query); + } + + + + + +// @ResponseBody +// @PostMapping(value = "/charging/statistics") +// @ApiOperation(value = "统计", tags = {"管理后台-数据分析-充电运营分析"}) +// public R<TCharingOrderVO> watchChargingOrder(@RequestBody ChargingStatisticsQueryDto statisticsQueryDto){ +// List<Integer> siteIds =new ArrayList<>(); +// if (statisticsQueryDto.getSiteId()==null) { +// Long userId = SecurityUtils.getUserId(); +// //获取当前登录的siteIds +// List<GetSiteListDTO> data = siteClient.getSiteListByUserId(userId).getData(); +// for (GetSiteListDTO datum : data) { +// siteIds.add(datum.getId()); +// } +// }else { +// siteIds.add(statisticsQueryDto.getSiteId()); +// } +// +// +// LocalDate start = null; +// LocalDate end = null; +// if (statisticsQueryDto.getDayType()==1){ +// start = LocalDate.now(); +// +// }else if (statisticsQueryDto.getDayType()==2){ +// LocalDate today = LocalDate.now(); +// +// // 获取本周一的日期 +// LocalDate mondayThisWeek = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); +// +// System.out.println("本周一是: " + mondayThisWeek); +// } +// else if (statisticsQueryDto.getDayType()==3){ +// // 获取当前日期 +// LocalDate today = LocalDate.now(); +// +// // 获取本月1号的日期 +// YearMonth yearMonth = YearMonth.from(today); +// start = yearMonth.atDay(1); +// +// System.out.println("本月1号是: " + start); +// }else if (statisticsQueryDto.getDayType()==4){ +// LocalDate today = LocalDate.now(); +// // 获取当前年份 +// int currentYear = today.getYear(); +// // 获取今年1月1日的日期 +// start = LocalDate.of(currentYear, 1, 1); +// System.out.println("今年1月1日是: " + start); +// }else if (statisticsQueryDto.getDayType()==5){ +// +// // 获取今年1月1日的日期 +// start = statisticsQueryDto.getStartTime(); +// end = statisticsQueryDto.getEndTime(); +// } +// List<TChargingOrder> list = chargingOrderService.lambdaQuery().ge(TChargingOrder::getStartTime, start).le(TChargingOrder::getEndTime, end).in(TChargingOrder::getSiteId, siteIds).list(); +// List<Long> chargingOrderIds = list.stream().map(TChargingOrder::getId).collect(Collectors.toList()); +// //上方饼图 +// List<Map<String,BigDecimal>> maps = chargingOrderService.getSumByType(chargingOrderIds); +// +// if (statisticsQueryDto.getDayType()==1){ +// List<Map<String,BigDecimal>> maps1 = chargingOrderService.getDateData(chargingOrderIds); +// +// }else if (statisticsQueryDto.getDayType()==2){ +// List<Map<String,BigDecimal>> maps1 = chargingOrderService.getWeekData(chargingOrderIds); +// }else if (statisticsQueryDto.getDayType()==3){ +// List<Map<String,BigDecimal>> maps1 = chargingOrderService.getMonthData(chargingOrderIds); +// }else if (statisticsQueryDto.getDayType()==4){ +// List<Map<String,BigDecimal>> maps1 = chargingOrderService.getYearData(chargingOrderIds); +// } +// +// +// +// +// +// +// } + + public static void main(String[] args) { + // 示例数据 + List<TChargingOrder> list = getSampleData(); + System.err.println(list); + List<Map<String, BigDecimal>> result = processData(list); + + result.forEach(System.out::println); + } + + + private static List<TChargingOrder> getSampleData() { + // 这里可以替换为实际查询逻辑 + List<TChargingOrder> list = new ArrayList<>(); + // 示例数据 + for (int i = 0; i < 24; i++) { + TChargingOrder order = new TChargingOrder(); + order.setStartTime(LocalDateTime.now().minusHours(23 - i)); + order.setOrderAmount(BigDecimal.valueOf(i + 1)); + list.add(order); + } + return list; + } + + private static List<Map<String, BigDecimal>> processData(List<TChargingOrder> list) { + Map<LocalDateTime, BigDecimal> hourlySum = new HashMap<>(); + + // 按每个小时分组并求和 + for (TChargingOrder order : list) { + LocalDateTime hour = order.getStartTime().truncatedTo(ChronoUnit.HOURS); + BigDecimal amount = order.getOrderAmount(); + hourlySum.merge(hour, amount, BigDecimal::add); + } + + // 创建结果列表 + List<Map<String, BigDecimal>> resultList = new ArrayList<>(); + for (int i = 1; i <= 23; i++) { + LocalDateTime keyHour = LocalDateTime.now().withHour(i); + BigDecimal sum = BigDecimal.ZERO; + + // 计算键之后的一小时的数据之和 + for (int j = i + 1; j <= 23; j++) { + LocalDateTime nextHour = LocalDateTime.now().withHour(j); + sum = sum.add(hourlySum.getOrDefault(nextHour, BigDecimal.ZERO)); + } + + Map<String, BigDecimal> entry = new HashMap<>(); + entry.put(String.valueOf(i), sum); + resultList.add(entry); + } + + return resultList; + } + +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java index e64f518..2a771c7 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java @@ -9,18 +9,19 @@ import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; -import com.ruoyi.order.api.model.TOrderAppeal; +import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.query.TOrderAppealQuery; import com.ruoyi.order.api.vo.TOrderAppealVO; import com.ruoyi.order.dto.ManageFeedbackDto; import com.ruoyi.order.dto.ManageOrderAppealQuery; -import com.ruoyi.order.service.TOrderAppealService; +import com.ruoyi.order.service.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.Arrays; /** * <p> @@ -38,6 +39,16 @@ private final TokenService tokenService; @Resource private AppUserClient appUserClient; + @Resource + private TChargingOrderService chargingOrderService; + @Resource + private TShoppingOrderService shoppingOrderService; + @Resource + private TExchangeOrderService exchangeOrderService; + + @Resource + private TVipOrderService vipOrderService; + @Autowired public TOrderAppealController(TOrderAppealService orderAppealService, TokenService tokenService) { @@ -53,9 +64,19 @@ .like(manageOrderAppealQuery.getPhone() != null, TOrderAppeal::getPhone, manageOrderAppealQuery.getPhone()) .eq(manageOrderAppealQuery.getOrderType() != null, TOrderAppeal::getOrderType, manageOrderAppealQuery.getOrderType()) .in(TOrderAppeal::getOrderType, 1, 2).page(Page.of(manageOrderAppealQuery.getPageCurr(), manageOrderAppealQuery.getPageSize())); + + for (TOrderAppeal record : page.getRecords()) { + record.setUid(record.getId().toString()); + } return R.ok(page); + } + @ApiOperation(tags = {"后台-订单管理-订单申诉"},value = "删除") + @DeleteMapping (value = "/manage/delete") + public R<Page<TOrderAppeal>> delete(String ids) { + orderAppealService.removeBatchByIds(Arrays.asList(ids.split(","))); + return R.ok(); } @ApiOperation(tags = {"后台-订单管理-订单申诉"},value = "后台-订单管理-订单申诉") @@ -98,6 +119,20 @@ orderAppeal.setAppUserId(appUserId); orderAppeal.setStatus(1); orderAppeal.setPhone(data.getPhone()); + + if (orderAppeal.getOrderType()==1){ + TChargingOrder byId = chargingOrderService.getById(orderAppeal.getOrderId()); + orderAppeal.setCode(byId.getCode()); + }else if(orderAppeal.getOrderType()==2){ + TShoppingOrder byId = shoppingOrderService.getById(orderAppeal.getOrderId()); + orderAppeal.setCode(byId.getCode()); + }else if(orderAppeal.getOrderType()==3){ + TExchangeOrder byId = exchangeOrderService.getById(orderAppeal.getOrderId()); + orderAppeal.setCode(byId.getCode()); + }else if(orderAppeal.getOrderType()==4){ + TVipOrder byId = vipOrderService.getById(orderAppeal.getOrderId()); + orderAppeal.setCode(byId.getCode()); + } orderAppealService.save(orderAppeal); return AjaxResult.success(); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingStatisticsQueryDto.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingStatisticsQueryDto.java new file mode 100644 index 0000000..c75710d --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ChargingStatisticsQueryDto.java @@ -0,0 +1,18 @@ +package com.ruoyi.order.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDate; + +@Data +public class ChargingStatisticsQueryDto { + @ApiModelProperty("电站id") + private Integer siteId; + @ApiModelProperty("1今日2本周3本月4今年5自定义") + private Integer dayType; + @ApiModelProperty("开始时间") + private LocalDate startTime; + @ApiModelProperty("结束时间") + private LocalDate endTime; +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderDto.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderDto.java index db5a856..762d550 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderDto.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PayOrderDto.java @@ -31,5 +31,7 @@ private LocalDateTime endTime; @ApiModelProperty("支付时间") private LocalDateTime payTime; + private Integer refundStatus; + private Double finalAmount; } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PreChargeCheck.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PreChargeCheck.java index 3620ddf..4ed552c 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PreChargeCheck.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/PreChargeCheck.java @@ -17,4 +17,8 @@ private Boolean insulationTesting; @ApiModelProperty("电子锁锁止") private Boolean electronicLockLock; + @ApiModelProperty("启动成功(1=启动中,2=启动成功,3=启动失败,退款)") + private Integer startupSuccess; + @ApiModelProperty("失败原因(0:无,1:设备编号不匹配,2:枪已在充电,3:设备故障,4:设备离线,5:未插枪桩在收到启充命令后,检测到未插枪则发送 0x33 报文回复充电失败。若在 60 秒(以收到 0x34 时间开始计算)内检测到枪重新连接,则补送 0x33 成功报文;超时或者离线等其他异常,桩不启充、不补发 0x33 报文)") + private Integer failureCause; } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixChargingDto.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixChargingDto.java new file mode 100644 index 0000000..1d0784b --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixChargingDto.java @@ -0,0 +1,19 @@ +package com.ruoyi.order.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Data +public class SixChargingDto { + private String month; + @ApiModelProperty("电费") + private BigDecimal electrovalence; + @ApiModelProperty("服务费") + private BigDecimal serviceCharge; + + +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixCircleDto.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixCircleDto.java new file mode 100644 index 0000000..e87b6ed --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixCircleDto.java @@ -0,0 +1,11 @@ +package com.ruoyi.order.dto; + +import lombok.Data; + +import java.math.BigDecimal; +@Data +public class SixCircleDto { + Integer siteId; + BigDecimal paymentAmount; + String siteName; +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixMonthTotal.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixMonthTotal.java new file mode 100644 index 0000000..060b7bf --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixMonthTotal.java @@ -0,0 +1,5 @@ +package com.ruoyi.order.dto; + +public class SixMonthTotal { + +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixShopDto.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixShopDto.java new file mode 100644 index 0000000..28ea1b6 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixShopDto.java @@ -0,0 +1,13 @@ +package com.ruoyi.order.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class SixShopDto { + private String month; + private Long count; + private BigDecimal paymentAmount; +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixVipDto.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixVipDto.java new file mode 100644 index 0000000..52df141 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/SixVipDto.java @@ -0,0 +1,13 @@ +package com.ruoyi.order.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class SixVipDto { + private String month; + private String vipName; + private Integer vipId; + private BigDecimal paymentAmount; +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java index 13d6c92..d9bad70 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java @@ -1,6 +1,8 @@ package com.ruoyi.order.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.common.core.dto.ChargingOrderGroup; +import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.model.TChargingOrderRefund; @@ -11,6 +13,8 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.math.BigDecimal; +import java.time.LocalDate; import java.util.List; import java.util.Map; @@ -54,6 +58,24 @@ List<TChargingOrderRefund> getRefundList(@Param("pageInfo")PageInfo<TChargingOrderRefund> pageInfo,@Param("data") ChargingRefundDto chargingRefundDto); + List<ChargingOrderGroup> chargingOrderGroup(@Param("chargingPercentProvinceDto")ChargingPercentProvinceDto chargingPercentProvinceDto); + + List<SixChargingDto> charge(@Param("sixBefore")LocalDate sixBefore,@Param("siteIds") List<Integer> siteIds); + + List<SixCircleDto> circle(@Param("siteIds")List<Integer> siteIds,@Param("sixBefore")LocalDate sixBefore); + + Map<String, BigDecimal> countAll(@Param("sixBefore")LocalDate sixBefore); + + List<Map<String, BigDecimal>> getSumByType(@Param("chargingOrderIds")List<Long> chargingOrderIds); + + List<Map<String, BigDecimal>> getDateData(List<Long> chargingOrderIds); + + List<Map<String, BigDecimal>> getWeekData(List<Long> chargingOrderIds); + + List<Map<String, BigDecimal>> getMonthData(List<Long> chargingOrderIds); + + List<Map<String, BigDecimal>> getYearData(List<Long> chargingOrderIds); + List<ChargingOrderListVO> chargingList(@Param("pageInfo")PageInfo<ChargingOrderListVO> pageInfo, @Param("req")ChargingListQuery dto, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2, @Param("endTime1")String endTime1, @Param("endTime2")String endTime2); List<ChargingOrderListVO> chargingList1( @Param("req")ChargingListQuery dto, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2, @Param("endTime1")String endTime1, @Param("endTime2")String endTime2); diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TShoppingOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TShoppingOrderMapper.java index ca946f5..4dd50d6 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TShoppingOrderMapper.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TShoppingOrderMapper.java @@ -6,9 +6,12 @@ import com.ruoyi.order.api.query.ShoppingOrderQuery; import com.ruoyi.order.api.query.TActivityStatisticsQuery; import com.ruoyi.order.api.vo.TActivityStatisticslVO; +import com.ruoyi.order.dto.SixShopDto; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.math.BigDecimal; +import java.time.LocalDate; import java.util.List; /** @@ -38,4 +41,7 @@ List<TShoppingOrder> pageList(@Param("pageInfo")PageInfo<TShoppingOrder> pageInfo, @Param("req")ShoppingOrderQuery query, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2); + List<SixShopDto> sixBefore(@Param("sixBefore")LocalDate sixBefore,@Param("status") Integer status); + + BigDecimal getSumAmount(@Param("sixBefore")LocalDate sixBefore); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TVipOrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TVipOrderMapper.java index 5f85ad8..67c387d 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TVipOrderMapper.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TVipOrderMapper.java @@ -6,9 +6,12 @@ import com.ruoyi.order.api.model.TVipOrder; import com.ruoyi.order.api.query.ShoppingOrderQuery; import com.ruoyi.order.api.query.VipShoppingOrderQuery; +import com.ruoyi.order.dto.SixVipDto; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.math.BigDecimal; +import java.time.LocalDate; import java.util.List; /** @@ -25,4 +28,7 @@ List<TVipOrder> pageList(@Param("pageInfo")PageInfo<TVipOrder> pageInfo, @Param("req") VipShoppingOrderQuery query, @Param("startTime1")String startTime1, @Param("startTime2")String startTime2); + List<SixVipDto> sixBefore(@Param("sixBefore")LocalDate sixBefore); + + BigDecimal getSumAmout(@Param("sixBefore")LocalDate sixBefore); } 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 7640c10..ff03857 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 @@ -2,12 +2,15 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.dto.ChargingOrderGroup; +import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; 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.order.api.model.TChargingOrder; import com.ruoyi.order.api.model.TChargingOrderRefund; import com.ruoyi.order.api.query.ChargingOrderQuery; +import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import com.ruoyi.order.api.vo.ChargingOrderTimeVO; import com.ruoyi.order.api.vo.ChargingOrderVO; import com.ruoyi.order.api.vo.TCharingOrderVO; @@ -15,6 +18,8 @@ import com.ruoyi.order.vo.ChargingOrderListInfoVO; import org.springframework.web.bind.annotation.RequestBody; +import java.math.BigDecimal; +import java.time.LocalDate; import java.util.List; import java.util.Map; @@ -73,6 +78,18 @@ /** + * 充电启动失败后的退款回调处理 + * @param out_refund_no + * @param refund_id + * @param tradeState + * @param success_time + * @return + */ + AjaxResult chargingOrderStartupFailureWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time); + + + + /** * 获取充电中的详情 * @param id * @return @@ -93,7 +110,32 @@ R<PageInfo<TChargingOrderRefund>> getRefundList(ChargingRefundDto chargingRefundDto); + List<ChargingOrderGroup> chargingOrderGroup(ChargingPercentProvinceDto chargingPercentProvinceDto); + + List<SixChargingDto> charge(LocalDate sixBefore, List<Integer> siteIds); + + List<SixCircleDto> circle(List<Integer> siteIds,LocalDate sixBefore); + + Map<String, BigDecimal> countAll(LocalDate sixBefore); + + List<Map<String, BigDecimal>> getSumByType(List<Long> chargingOrderIds); + + List<Map<String, BigDecimal>> getDateData(List<Long> chargingOrderIds); + + List<Map<String, BigDecimal>> getWeekData(List<Long> chargingOrderIds); + + List<Map<String, BigDecimal>> getMonthData(List<Long> chargingOrderIds); + + List<Map<String, BigDecimal>> getYearData(List<Long> chargingOrderIds); + ChargingOrderTimeVO chargingList(ChargingListQuery dto); ChargingOrderListInfoVO chargingInfo(String uid); + + + /** + * 处理充电订单实时监控数据相关的业务逻辑 + * @param query + */ + void chargeMonitoring(UploadRealTimeMonitoringDataQuery query); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java index 4615b05..0412e97 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TShoppingOrderService.java @@ -8,13 +8,12 @@ import com.ruoyi.order.api.query.TActivityStatisticsQuery; import com.ruoyi.order.api.vo.TActivityStatisticslVO; import com.ruoyi.order.api.vo.TActivityVO; -import com.ruoyi.order.dto.GetMyShoppingOrderList; -import com.ruoyi.order.dto.GetNoInvoicedOrder; -import com.ruoyi.order.dto.MyShoppingOrderInfo; -import com.ruoyi.order.dto.MyShoppingOrderList; +import com.ruoyi.order.dto.*; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; +import java.math.BigDecimal; +import java.time.LocalDate; import java.util.List; import java.util.Map; @@ -78,4 +77,7 @@ PageInfo<TShoppingOrder> pageList(ShoppingOrderQuery query); + List<SixShopDto> sixBefore(LocalDate sixBefore, Integer status); + + BigDecimal getSumAmount(LocalDate sixBefore); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TVipOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TVipOrderService.java index 7090ba3..88ab8e6 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TVipOrderService.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TVipOrderService.java @@ -4,6 +4,11 @@ import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.model.TVipOrder; import com.ruoyi.order.api.query.VipShoppingOrderQuery; +import com.ruoyi.order.dto.SixVipDto; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; /** * <p> @@ -16,4 +21,8 @@ public interface TVipOrderService extends IService<TVipOrder> { PageInfo<TVipOrder> pageList(VipShoppingOrderQuery query); + + List<SixVipDto> sixBefore(LocalDate sixBefore); + + BigDecimal getSumAmout(LocalDate sixBefore); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderAccountingStrategyServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderAccountingStrategyServiceImpl.java index 413fa9b..f242070 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderAccountingStrategyServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderAccountingStrategyServiceImpl.java @@ -71,21 +71,21 @@ map2.put("name", "峰"); BigDecimal value2 = list1.stream().filter(s -> orderIds.contains(s.getChargingOrderId()) && s.getType() == 2) .map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add); - map1.put("value", value2.setScale(2, RoundingMode.HALF_EVEN)); + map2.put("value", value2.setScale(2, RoundingMode.HALF_EVEN)); datas.add(map2); Map<String, Object> map3 = new HashMap<>(); map3.put("name", "平"); BigDecimal value3 = list1.stream().filter(s -> orderIds.contains(s.getChargingOrderId()) && s.getType() == 3) .map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add); - map1.put("value", value3.setScale(2, RoundingMode.HALF_EVEN)); + map3.put("value", value3.setScale(2, RoundingMode.HALF_EVEN)); datas.add(map3); Map<String, Object> map4 = new HashMap<>(); map4.put("name", "谷"); BigDecimal value4 = list1.stream().filter(s -> orderIds.contains(s.getChargingOrderId()) && s.getType() == 4) .map(TChargingOrderAccountingStrategy::getChargingCapacity).reduce(BigDecimal.ZERO, BigDecimal::add); - map1.put("value", value4.setScale(2, RoundingMode.HALF_EVEN)); + map4.put("value", value4.setScale(2, RoundingMode.HALF_EVEN)); datas.add(map4); list2.add(datas); } 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 db24942..b992b12 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 @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.api.feignClient.AppUserCarClient; import com.ruoyi.account.api.feignClient.AppUserClient; @@ -10,29 +11,33 @@ import com.ruoyi.account.api.model.TAppUserCar; import com.ruoyi.account.api.model.TAppUserVipDetail; import com.ruoyi.account.api.vo.GetAppUserVipDetail; +import com.ruoyi.chargingPile.api.feignClient.AccountingStrategyDetailClient; import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient; import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient; import com.ruoyi.chargingPile.api.feignClient.SiteClient; import com.ruoyi.chargingPile.api.model.Site; +import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TChargingPile; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.dto.ChargingOrderGroup; +import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; 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.redis.service.RedisService; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.integration.api.feignClient.ChargingHandshakeClient; +import com.ruoyi.integration.api.feignClient.PlatformStartChargingReplyClient; import com.ruoyi.integration.api.feignClient.SendMessageClient; import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; import com.ruoyi.integration.api.model.ChargingHandshake; import com.ruoyi.integration.api.model.PlatformStartCharging; +import com.ruoyi.integration.api.model.PlatformStartChargingReply; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; -import com.ruoyi.order.api.model.TChargingOrder; -import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy; -import com.ruoyi.order.api.model.TChargingOrderRefund; -import com.ruoyi.order.api.model.TOrderEvaluate; +import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.query.ChargingOrderQuery; +import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import com.ruoyi.order.api.vo.ChargingOrderListVO; import com.ruoyi.order.api.vo.ChargingOrderTimeVO; import com.ruoyi.order.api.vo.ChargingOrderVO; @@ -40,11 +45,17 @@ import com.ruoyi.order.dto.*; import com.ruoyi.order.mapper.TChargingOrderMapper; import com.ruoyi.order.service.TChargingOrderAccountingStrategyService; +import com.ruoyi.order.service.TChargingOrderRefundService; import com.ruoyi.order.service.TChargingOrderService; import com.ruoyi.order.service.TOrderEvaluateService; +import com.ruoyi.other.api.domain.TCoupon; +import com.ruoyi.other.api.domain.TGoods; import com.ruoyi.order.vo.ChargingOrderListInfoVO; import com.ruoyi.payment.api.feignClient.AliPaymentClient; import com.ruoyi.payment.api.feignClient.WxPaymentClient; +import com.ruoyi.payment.api.model.RefundReq; +import com.ruoyi.payment.api.model.RefundResp; +import com.ruoyi.payment.api.model.WxPaymentRefundModel; import com.ruoyi.payment.api.vo.*; import io.seata.spring.annotation.GlobalTransactional; import io.swagger.annotations.ApiModelProperty; @@ -55,11 +66,13 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.*; +import java.util.concurrent.*; import java.util.stream.Collectors; /** @@ -87,7 +100,7 @@ @Resource private ChargingPileClient chargingPileClient; - + @Resource private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService; @@ -101,6 +114,8 @@ private AliPaymentClient aliPaymentClient; + + @Resource private AppUserVipDetailClient appUserVipDetailClient; @@ -112,15 +127,28 @@ @Resource private ChargingHandshakeClient chargingHandshakeClient; - + @Resource private SendMessageClient sendMessageClient; - + @Resource private TOrderEvaluateService orderEvaluateService; - - - + + + @Resource + private AccountingStrategyDetailClient accountingStrategyDetailClient; + + @Resource + private PlatformStartChargingReplyClient platformStartChargingReplyClient; + + @Resource + private TChargingOrderRefundService chargingOrderRefundService; + + //计数器 + private Map<String, Integer> counter_map = new HashMap<>(); + + + /** * 获取小程序充电记录列表数据 @@ -420,6 +448,7 @@ * @return */ @Override + @GlobalTransactional(rollbackFor = Exception.class) public AjaxResult chargingOrderCallback(Integer paymentType, String out_trade_no, String transaction_id, String attach) { TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, out_trade_no)); if(chargingOrder.getRechargePaymentStatus() == 2){ @@ -427,37 +456,191 @@ } chargingOrder.setRechargePaymentStatus(2); chargingOrder.setRechargeSerialNumber(transaction_id); + chargingOrder.setStatus(2); this.updateById(chargingOrder); + //添加安全检测数据到缓存中,每步安全检测完成后需要更新缓存数据 PreChargeCheck preChargeCheck = new PreChargeCheck(); preChargeCheck.setElectronicLockLock(false); preChargeCheck.setInsulationTesting(false); preChargeCheck.setSecureConnectionDetection(false); + preChargeCheck.setStartupSuccess(1); String key = "AQJC_" + chargingOrder.getChargingGunId(); redisService.setCacheObject(key, preChargeCheck); //根据当前充值的金额和计费模板算出充电的金额 BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); //计算充电金额,会员需要将折扣金额加入到充电总金额中 - -// TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); -// if(){ -// appUser.getVipId() -// } -// -// -// //调用远程启动充电消息 -// PlatformStartCharging platformStartCharging = new PlatformStartCharging(); -// platformStartCharging.setTransaction_serial_number(chargingOrder.getCode()); -// platformStartCharging.setCharging_pile_code(); -// platformStartCharging.setCharging_gun_code(); -// platformStartCharging.setCard_number(); -// platformStartCharging.setAccount_balance() -// sendMessageClient.platformStartCharging(platformStartCharging); + TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData(); + TAccountingStrategyDetail strategyDetail = accountingStrategyDetailClient.getNowData(chargingGun.getAccountingStrategyId()).getData(); + //总单价 + BigDecimal totalUnitPrice = strategyDetail.getServiceCharge().add(strategyDetail.getElectrovalence()); + //计算能充电的度数 + BigDecimal degrees = rechargeAmount.divide(totalUnitPrice); + //计算电费金额和服务费 + BigDecimal serviceCharge = strategyDetail.getServiceCharge().multiply(degrees); + BigDecimal electrovalence = strategyDetail.getElectrovalence().multiply(degrees); + + //再处理会员折扣 + BigDecimal discount = BigDecimal.ZERO; + TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); + if(null != appUser.getVipId()){ + GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail(); + getAppUserVipDetail.setAppUserId(chargingOrder.getAppUserId()); + getAppUserVipDetail.setVipId(appUser.getVipId()); + TAppUserVipDetail data = appUserVipDetailClient.getAppUserVipDetail(getAppUserVipDetail).getData(); + if(data.getChargeNum() > 0){ + discount = serviceCharge.multiply(data.getDiscount().divide(new BigDecimal(10))); + data.setChargeNum(data.getChargeNum() - 1); + appUserVipDetailClient.updateAppUserVipDetail(data); + } + } + electrovalence = electrovalence.add(discount); + + + TChargingPile chargingPile = chargingPileClient.getChargingPileById(chargingGun.getChargingPileId()).getData(); + //调用远程启动充电消息 + PlatformStartCharging platformStartCharging = new PlatformStartCharging(); + platformStartCharging.setTransaction_serial_number(chargingOrder.getCode()); + platformStartCharging.setCharging_pile_code(chargingPile.getCode()); + platformStartCharging.setCharging_gun_code(chargingGun.getCode()); + //使用订单id作为逻辑卡号 + platformStartCharging.setCard_number(chargingOrder.getId().toString()); + platformStartCharging.setAccount_balance(electrovalence); + sendMessageClient.platformStartCharging(platformStartCharging); + //异步线程检测远程启动的应答结果。如果失败,则需要全额退款 + String code = chargingOrder.getCode(); + //执行5分钟的定时任务检测 + ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + scheduler.scheduleAtFixedRate(()->{ + List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData(); + if(data.size() != 0){ + PlatformStartChargingReply platformStartChargingReply = data.get(1); + Integer startup_result = platformStartChargingReply.getStartup_result(); + Integer failure_cause = platformStartChargingReply.getFailure_cause(); + Integer counter = counter_map.get(code); + PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key); + //状态为5的时候,硬件会间隔60秒后再次检测,依然未插枪,则不启动充电 + //因这里是间隔5秒执行检测,所以累计次数在30次以上 + if(failure_cause == 5 && null == counter || counter < 35){ + counter++; + counter_map.put(code, counter); + //启动失败 + preChargeCheck1.setStartupSuccess(3); + preChargeCheck1.setFailureCause(failure_cause); + redisService.setCacheObject(key, preChargeCheck1); + return; + } + //清除计时器中的无效数据 + counter_map.remove(code); + //开始处理退款 + TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code)); + if(0 == startup_result){ + //启动失败 + preChargeCheck1.setStartupSuccess(3); + preChargeCheck1.setFailureCause(failure_cause); + //启动失败后取消订单,退款操作 + refund(code); + order.setStatus(5); + order.setEndMode(0); + }else{ + preChargeCheck1.setStartupSuccess(2); + order.setStatus(3); + order.setStartTime(LocalDateTime.now()); + } + this.updateById(order); + redisService.setCacheObject(key, preChargeCheck1); + //提前结束定时任务 + scheduler.shutdown(); + } + }, 5, 300, TimeUnit.SECONDS); return AjaxResult.success(); } + /** + * 启动失败后的退款,取消订单 + * @param code + */ + public void refund(String code){ + TChargingOrder chargingOrder = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code)); + if(chargingOrder.getStatus() == 2){ + Integer rechargePaymentType = chargingOrder.getRechargePaymentType(); + BigDecimal rechargeAmount = chargingOrder.getRechargeAmount(); + //构建退款明细 + 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(rechargeAmount); + chargingOrderRefund.setRefundStatus(1); + chargingOrderRefund.setPayType(rechargePaymentType); + chargingOrderRefund.setRefundStatus(1); + chargingOrderRefund.setCode(code); + chargingOrderRefund.setRefundTitle("充电失败"); + chargingOrderRefund.setRefundContent("充电失败"); + chargingOrderRefund.setRefundReason("充电失败"); + chargingOrderRefund.setRefundRemark("全额退款"); + chargingOrderRefund.setRefundTotalAmount(rechargeAmount); + 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(rechargeAmount.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); + } + } + } + + } + } + + + /** + * 启动失败后微信退款的回调处理 + * @param out_refund_no + * @param refund_id + * @param tradeState + * @param success_time + * @return + */ + public AjaxResult chargingOrderStartupFailureWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time){ + if("SUCCESS".equals(tradeState)){ + TChargingOrderRefund one = chargingOrderRefundService.getOne(new LambdaQueryWrapper<TChargingOrderRefund>().eq(TChargingOrderRefund::getRefundCode, out_refund_no)); + one.setRefundSerialNumber(refund_id); + one.setRefundStatus(2); + one.setRefundTime(LocalDateTime.parse(success_time, DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE"))); + chargingOrderRefundService.updateById(one); + } + return AjaxResult.success(); + } + + + + /** * 获取充电中的详情 * @param id @@ -479,6 +662,7 @@ chargingDetails.setName(site.getName() + "-" + chargingPile.getName()); chargingDetails.setCode(one.getCode()); chargingDetails.setStatus(one.getStatus()); + chargingDetails.setChargingCost(one.getResidualAmount()); UploadRealTimeMonitoringData data = uploadRealTimeMonitoringDataClient.chargingOrderInfo(one.getCode()).getData(); if(null != data){ chargingDetails.setChargeCurrent(data.getOutput_current()); @@ -489,7 +673,6 @@ chargingDetails.setRemainingChargeTime(data.getTime_remaining()); chargingDetails.setChargedDegrees(data.getCharging_degree()); chargingDetails.setChargedTime(data.getCumulative_charging_time()); - chargingDetails.setChargingCost(data.getPaid_amount()); } ChargingHandshake chargingHandshake = chargingHandshakeClient.getDataByOrderCode(one.getCode()).getData(); if(null != chargingHandshake && null != data && null != one.getAppUserCarId()){ @@ -520,21 +703,18 @@ chargingOrder.setEndMode(1); this.updateById(chargingOrder); //调用硬件停止充电,停止成功后开始计算费用退款 - - - // todo 待完善 return AjaxResult.success(); } - - + + public void endCharge(){ - + } - - - + + + @Override public TCharingOrderVO chargingOrder(ChargingOrderQuery dto) { @@ -654,6 +834,52 @@ pageInfo.setRecords(list); return R.ok(pageInfo); + } + + @Override + public List<ChargingOrderGroup> chargingOrderGroup(ChargingPercentProvinceDto chargingPercentProvinceDto) { + + return this.baseMapper.chargingOrderGroup(chargingPercentProvinceDto); + } + + @Override + public List<SixChargingDto> charge(LocalDate sixBefore, List<Integer> siteIds) { + return this.baseMapper.charge(sixBefore,siteIds); + } + + @Override + public List<SixCircleDto> circle(List<Integer> siteIds,LocalDate sixBefore) { + return this.baseMapper.circle(siteIds,sixBefore); + } + + @Override + public Map<String, BigDecimal> countAll(LocalDate sixBefore) { + return this.baseMapper.countAll(sixBefore); + } + + @Override + public List<Map<String, BigDecimal>> getSumByType(List<Long> chargingOrderIds) { + return this.baseMapper.getSumByType(chargingOrderIds); + } + + @Override + public List<Map<String, BigDecimal>> getDateData(List<Long> chargingOrderIds) { + return this.baseMapper.getDateData(chargingOrderIds); + } + + @Override + public List<Map<String, BigDecimal>> getWeekData(List<Long> chargingOrderIds) { + return this.baseMapper.getWeekData(chargingOrderIds); + } + + @Override + public List<Map<String, BigDecimal>> getMonthData(List<Long> chargingOrderIds) { + return this.baseMapper.getMonthData(chargingOrderIds); + } + + @Override + public List<Map<String, BigDecimal>> getYearData(List<Long> chargingOrderIds) { + return this.baseMapper.getYearData(chargingOrderIds); } @@ -878,4 +1104,14 @@ return null; } + + + /** + * 处理充电订单实时监控数据相关的业务逻辑 + * @param query + */ + @Override + public void chargeMonitoring(UploadRealTimeMonitoringDataQuery query) { + // todo 需完善 + } } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java index cad99dd..1ea0979 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java @@ -44,6 +44,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; @@ -405,6 +406,7 @@ public AjaxResult cancelShoppingOrderWxRefund(String out_refund_no, String refund_id, String refund_status, String success_time) { if("SUCCESS".equals(refund_status)){ TShoppingOrderRefund one = shoppingOrderRefundService.getOne(new LambdaQueryWrapper<TShoppingOrderRefund>().eq(TShoppingOrderRefund::getRefundCode, out_refund_no)); + one.setRefundStatus(2); one.setRefundSerialNumber(refund_id); one.setRefundTime(LocalDateTime.parse(success_time, DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE"))); shoppingOrderRefundService.updateById(one); @@ -533,4 +535,16 @@ pageInfo.setRecords(list); return pageInfo; } + + @Override + public List<SixShopDto> sixBefore(LocalDate sixBefore, Integer status) { + return this.baseMapper.sixBefore(sixBefore,status); + } + + @Override + public BigDecimal getSumAmount(LocalDate sixBefore) { + return this.baseMapper.getSumAmount(sixBefore); + } + + } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java index bce2fae..c96a21f 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java @@ -5,6 +5,7 @@ import com.ruoyi.order.api.model.TShoppingOrder; import com.ruoyi.order.api.model.TVipOrder; import com.ruoyi.order.api.query.VipShoppingOrderQuery; +import com.ruoyi.order.dto.SixVipDto; import com.ruoyi.order.mapper.TVipOrderMapper; import com.ruoyi.order.service.TVipOrderService; import com.ruoyi.other.api.domain.TVip; @@ -12,6 +13,8 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import java.math.BigDecimal; +import java.time.LocalDate; import javax.annotation.Resource; import java.util.List; @@ -52,4 +55,14 @@ pageInfo.setRecords(list); return pageInfo; } + + @Override + public List<SixVipDto> sixBefore(LocalDate sixBefore) { + return this.baseMapper.sixBefore(sixBefore); + } + + @Override + public BigDecimal getSumAmout(LocalDate sixBefore) { + return this.baseMapper.getSumAmout(sixBefore); + } } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/PreviousSixMonths.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/PreviousSixMonths.java new file mode 100644 index 0000000..809b978 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/PreviousSixMonths.java @@ -0,0 +1,20 @@ +package com.ruoyi.order.util; + +import java.time.LocalDate; +import java.time.Period; +import java.time.temporal.TemporalAdjusters; + +public class PreviousSixMonths { + public static LocalDate get() { + // 获取当前日期 + LocalDate currentDate = LocalDate.now(); + + // 计算六个月前的日期 + LocalDate sixMonthsAgo = currentDate.minusMonths(6); + + // 调整为该月的第一天 + LocalDate firstDayOfSixMonthsAgo = sixMonthsAgo.with(TemporalAdjusters.firstDayOfMonth()); + return firstDayOfSixMonthsAgo; + + } +} diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml index 916ea2b..ae55626 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml @@ -24,6 +24,7 @@ <result column="recharge_payment_type" property="rechargePaymentType" /> <result column="recharge_payment_status" property="rechargePaymentStatus" /> <result column="recharge_serial_number" property="rechargeSerialNumber" /> + <result column="residual_amount" property="residualAmount" /> <result column="order_amount" property="orderAmount" /> <result column="app_coupon_id" property="appCouponId" /> <result column="coupon_discount_amount" property="couponDiscountAmount" /> @@ -96,10 +97,10 @@ and t1.charging_gun_id = #{req.gunId} </if> <if test="startTime1 != null and startTime1!=''"> - and (t1.start_time between #{startTime1} and #{startTime2}) + and (t1.start_time between #{startTime1} and #{startTime2} </if> <if test="endTime1 != null and endTime1!=''"> - and (t1.end_time between #{endTime1} and #{endTime2}) + and (t1.end_time between #{endTime1} and #{endTime2} </if> </select> <select id="payOrderQuery" resultType="com.ruoyi.order.dto.PayOrderDto"> @@ -233,78 +234,189 @@ </select> - <select id="chargingList" resultType="com.ruoyi.order.api.vo.ChargingOrderListVO"> - select t1.* from t_charging_order t1 - where 1=1 - <if test="null != req.code and req.code!=''"> - and t1.code LIKE CONCAT('%',#{req.code},'%') - </if> - <if test="null != req.carIds and req.carIds.size()>0" > - and t1.app_user_car_id in - <foreach collection="req.carIds" item="item" index="index" separator="," open="(" close=")"> - #{item} - </foreach> - </if> - <if test="null != req.userIds and req.userIds.size()>0" > - and t1.app_user_id in - <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")"> - #{item} - </foreach> - </if> - <if test="req.orderType != null "> - and t1.order_type = #{req.orderType} - </if> - <if test="req.status != null "> - and t1.status = #{status} - </if> - <if test="req.status != null "> - and t1.status = #{req.status} - </if> - <if test="req.siteId != null "> - and t1.site_id = #{req.siteId} - </if> - <if test="startTime1 != null and startTime1!=''"> - and (t1.start_time between #{startTime1} and #{startTime2}) - </if> - <if test="endTime1 != null and endTime1!=''"> - and (t1.end_time between #{endTime1} and #{endTime2}) - </if> + <select id="chargingOrderGroup" resultType="com.ruoyi.common.core.dto.ChargingOrderGroup"> + SELECT SUM(charging_capacity) ,site_id + FROM t_charging_order + GROUP BY site_id + <where> + <if test="chargingPercentProvinceDto.date1 != null"> + AND create_time >= #{chargingPercentProvinceDto.date1} + </if> + <if test="chargingPercentProvinceDto.date2 != null"> + AND create_time <= #{chargingPercentProvinceDto.date2} + </if> + <if test="chargingPercentProvinceDto.provinceCode != null"> + AND province_code = #{chargingPercentProvinceDto.provinceCode} + </if> + </where> + + </select> - <select id="chargingList1" resultType="com.ruoyi.order.api.vo.ChargingOrderListVO"> - select t1.* from t_charging_order t1 - where 1=1 - <if test="null != req.code and req.code!=''"> - and t1.code LIKE CONCAT('%',#{req.code},'%') - </if> - <if test="null != req.carIds and req.carIds.size()>0" > - and t1.app_user_car_id in - <foreach collection="req.carIds" item="item" index="index" separator="," open="(" close=")"> - #{item} - </foreach> - </if> - <if test="null != req.userIds and req.userIds.size()>0" > - and t1.app_user_id in - <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")"> - #{item} - </foreach> - </if> - <if test="req.orderType != null "> - and t1.order_type = #{req.orderType} - </if> - <if test="req.status != null "> - and t1.status = #{status} - </if> - <if test="req.status != null "> - and t1.status = #{req.status} - </if> - <if test="req.siteId != null "> - and t1.site_id = #{req.siteId} - </if> - <if test="startTime1 != null and startTime1!=''"> - and (t1.start_time between #{startTime1} and #{startTime2}) - </if> - <if test="endTime1 != null and endTime1!=''"> - and (t1.end_time between #{endTime1} and #{endTime2}) - </if> + <select id="charge" resultType="com.ruoyi.order.dto.SixChargingDto"> + SELECT + DATE_FORMAT( subquery.create_time, '%m' ) AS MONTH, + SUM(electrovalence) AS electrovalence, + SUM(service_charge) AS service_charge + FROM + ( + SELECT + create_time, + electrovalence, + service_charge + FROM + t_charging_order + <where> + del_flag = 0 and recharge_payment_status = 2 and ISNULL(refund_status) + <if test="sixBefore != null"> + AND create_time >= #{sixBefore} + </if> + <if test="siteIds != null and siteIds.size() > 0"> + AND site_id IN + <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> + #{siteId} + </foreach> + </if> + </where> + ) AS subquery + GROUP BY + DATE_FORMAT( subquery.create_time, '%m' ) + + </select> + <select id="circle" resultType="com.ruoyi.order.dto.SixCircleDto"> + SELECT + site_id as siteId,SUM(payment_amount) as paymentAmount + FROM + t_charging_order + <where> + del_flag = 0 and recharge_payment_status = 2 and ISNULL(refund_status) + <if test="siteIds != null and siteIds.size() > 0"> + AND site_id IN + <foreach collection="siteIds" item="siteId" open="(" separator="," close=")"> + #{siteId} + </foreach> + </if> + <if test="sixBefore != null"> + AND create_time >= #{sixBefore} + </if> + </where> + GROUP BY + site_id + + + </select> + <select id="countAll" resultType="java.util.Map"> + select sum(electrovalence),sum(service_charge),sum(commission_amount),sum(sharing_amount) + from t_charging_order + where create_time >= #{sixBefore} and del_flag = 0 and recharge_payment_status = 2 and ISNULL(refund_status) + </select> + <select id="getSumByType" resultType="java.util.Map"> + SELECT + type, + SUM( charging_capacity ) as charging_capacity , + SUM( period_service_price ) as period_electric_price, + SUM(period_electric_price+period_service_price) as total_amount + FROM + t_charging_order_accounting_strategy + <where> + <if test="chargingOrderIds != null and chargingOrderIds.size() > 0"> + AND charging_order_id IN + <foreach collection="chargingOrderIds" item="chargingOrderId" open="(" separator="," close=")"> + #{chargingOrderId} + </foreach> + </if> + </where> + GROUP BY + type + </select> + <select id="getDateData" resultType="java.util.Map"> + SELECT + DATE_FORMAT( create_time, '%Y-%m-%d %H' ) as time, + SUM(service_charge) as servicecharge, + SUM(electrovalence) as electrovalence + FROM + t_charging_order + <where> + del_flag = 0 and recharge_payment_status = 2 and ISNULL(refund_status) and DATE(create_time) = CURDATE() + <if test="chargingOrderIds != null and chargingOrderIds.size() > 0"> + AND id IN + <foreach collection="chargingOrderIds" item="chargingOrderId" open="(" separator="," close=")"> + #{chargingOrderId} + </foreach> + </if> + </where> + GROUP BY + time + ORDER BY + time + + </select> + <select id="getWeekData" resultType="java.util.Map"> + SELECT + DATE_FORMAT( create_time, '%Y-%m-%d' ) as time, + SUM(service_charge) as servicecharge, + SUM(electrovalence) as electrovalence + FROM + t_charging_order + <where> + del_flag = 0 and recharge_payment_status = 2 and ISNULL(refund_status) and YEARWEEK(DATE_FORMAT(create_time, '%Y-%m-%d'), 1) = YEARWEEK(NOW(), 1) + <if test="chargingOrderIds != null and chargingOrderIds.size() > 0"> + AND id IN + <foreach collection="chargingOrderIds" item="chargingOrderId" open="(" separator="," close=")"> + #{chargingOrderId} + </foreach> + </if> + </where> + GROUP BY + time + ORDER BY + time + + </select> + <select id="getMonthData" resultType="java.util.Map"> + SELECT + DATE_FORMAT( create_time, '%Y-%m-%d' ) as time, + SUM(service_charge) as servicecharge, + SUM(electrovalence) as electrovalence + FROM + t_charging_order + <where> + del_flag = 0 and recharge_payment_status = 2 and ISNULL(refund_status) and MONTH(create_time) = MONTH(NOW()) AND YEAR(create_time) = YEAR(NOW()) + <if test="chargingOrderIds != null and chargingOrderIds.size() > 0"> + AND id IN + <foreach collection="chargingOrderIds" item="chargingOrderId" open="(" separator="," close=")"> + #{chargingOrderId} + </foreach> + </if> + </where> + GROUP BY + time + ORDER BY + time + + </select> + <select id="getYearData" resultType="java.util.Map"> + SELECT + DATE_FORMAT( create_time, '%Y-%m-%d' ) as time, + SUM(service_charge) as servicecharge, + SUM(electrovalence) as electrovalence + FROM + t_charging_order + <where> + del_flag = 0 and recharge_payment_status = 2 and ISNULL(refund_status) and YEAR(createTime) = YEAR(NOW()) + <if test="chargingOrderIds != null and chargingOrderIds.size() > 0"> + AND id IN + <foreach collection="chargingOrderIds" item="chargingOrderId" open="(" separator="," close=")"> + #{chargingOrderId} + </foreach> + </if> + </where> + GROUP BY + time + ORDER BY + time + + + </select> + </mapper> diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml index c81d371..4aa2f35 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml @@ -256,4 +256,40 @@ and t1.payment_status = 2 AND t1.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} </select> + <select id="sixBefore" resultType="com.ruoyi.order.dto.SixShopDto"> + SELECT + DATE_FORMAT( subquery.create_time, '%m' ) AS MONTH, + count(1) AS orderNum, + SUM(payment_amount) AS paymentAmount + FROM + ( + SELECT + create_time, + payment_amount + FROM + t_shopping_order + <where> + WHERE del_flag = 0 and payment_status = 2 and ISNULL(refund_status) and status!=4 + <if test="null != sixBefore"> + and DATE_FORMAT(create_time, '%Y-%m-%d') >= DATE_FORMAT(#{sixBefore}, '%Y-%m-%d') + </if> + <if test="null != status"> + and status = #{status} + </if> + </where> + + ) AS subquery + GROUP BY + DATE_FORMAT( subquery.create_time, '%m' ); + + + </select> + <select id="getSumAmount" resultType="java.math.BigDecimal"> + select sum(payment_amount) + from t_shopping_order + where del_flag = 0 and payment_status = 2 and ISNULL(refund_status) and status!=4 + <if test="null != sixBefore"> + and DATE_FORMAT(create_time, '%Y-%m-%d') >= DATE_FORMAT(#{sixBefore}, '%Y-%m-%d') + </if> + </select> </mapper> diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TVipOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TVipOrderMapper.xml index 724cef3..70127f8 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TVipOrderMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TVipOrderMapper.xml @@ -46,5 +46,46 @@ </if> AND t1.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} </select> + <select id="sixBefore" resultType="com.ruoyi.order.dto.SixVipDto"> + SELECT + DATE_FORMAT(subquery.create_time, '%Y-%m') AS MONTH, + subquery.vip_id, + COUNT(1) AS orderNum, + SUM(subquery.payment_amount) AS paymentAmount + FROM ( + SELECT + vip_id, + create_time, + payment_amount + FROM + t_vip_order + <where> + del_flag = 0 AND + payment_status = 2 AND + refund_amount IS NULL + <if test="sixBefore != null"> + AND create_time > #{sixBefore} + </if> + </where> + ) AS subquery + GROUP BY + DATE_FORMAT(subquery.create_time, '%Y-%m'), + subquery.vip_id; + + + </select> + <select id="getSumAmout" resultType="java.math.BigDecimal"> + SELECT + SUM(payment_amount) AS paymentAmount + FROM + t_vip_order + WHERE + del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} AND + payment_status = 2 AND + refund_amount IS NULL + <if test="sixBefore != null"> + AND create_time > #{sixBefore} + </if> + </select> </mapper> -- Gitblit v1.7.1