From 3caf63c1a6c3943ab7d4e5d2f5beaf15e916dd66 Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期六, 02 十一月 2024 20:32:25 +0800
Subject: [PATCH] merge
---
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java | 153 ++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 132 insertions(+), 21 deletions(-)
diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
index 8338962..ec6ab63 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
@@ -1,18 +1,25 @@
package com.ruoyi.chargingPile.service.impl;
+import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.api.feignClient.AppUserClient;
+import com.ruoyi.account.api.feignClient.AppUserVipDetailClient;
import com.ruoyi.account.api.model.TAppUser;
+import com.ruoyi.account.api.model.TAppUserVipDetail;
+import com.ruoyi.account.api.vo.GetAppUserVipDetail;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.chargingPile.api.model.TAccountingStrategy;
import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail;
+import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.chargingPile.api.vo.StrategyPriceVO;
import com.ruoyi.chargingPile.api.vo.TAccountingStrategyDetailVO;
import com.ruoyi.chargingPile.mapper.TAccountingStrategyDetailMapper;
import com.ruoyi.chargingPile.mapper.TAccountingStrategyMapper;
import com.ruoyi.chargingPile.service.ISiteService;
import com.ruoyi.chargingPile.service.TAccountingStrategyDetailService;
+import com.ruoyi.chargingPile.service.TChargingGunService;
+import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.security.service.TokenService;
@@ -24,10 +31,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalTime;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -50,7 +54,11 @@
@Autowired
private ISiteService siteService;
@Autowired
+ private TChargingGunService chargingGunService;
+ @Autowired
private AppUserClient appUserClient;
+ @Resource
+ private AppUserVipDetailClient vipDetailClient;
@Override
public List<TAccountingStrategyDetailVO> queryAccountingStrategyDetailByStrategyId(Integer strategyId) {
return this.baseMapper.queryAccountingStrategyDetailByStrategyId(strategyId);
@@ -64,30 +72,49 @@
throw new ServiceException("未查询到计费策略");
}
List<TAccountingStrategyDetailVO> list = this.queryAccountingStrategyDetailByStrategyId(accountingStrategy.getId());
- list.stream().filter(item -> "24:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59"));
+ list.stream().filter(item -> "00:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59:59"));
// 获取当前登录用户id
Long userId = tokenService.getLoginUserApplet().getUserId();
// 根据id查询用户信息
TAppUser appUser = appUserClient.getUserById(userId).getData();
if(Objects.nonNull(appUser)){
// 查询会员信息
- TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
+// TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
+
+ GetAppUserVipDetail getAppUserVipDetail = new GetAppUserVipDetail();
+ getAppUserVipDetail.setAppUserId(userId);
+ getAppUserVipDetail.setVipId(appUser.getVipId());
+ R<TAppUserVipDetail> appUserVipDetail = vipDetailClient.getAppUserVipDetail(getAppUserVipDetail);
+ TAppUserVipDetail data1 = appUserVipDetail.getData();
+ String vipJson = data1.getVipJson();
+ TVip vip = JSON.parseObject(vipJson, TVip.class);
+
TAccountingStrategyDetailVO accountingStrategyDetailVO;
TAccountingStrategyDetailVO accountingStrategyDetailNext;
// 获取当前时间段的计费策略明细
accountingStrategyDetailVO = list.stream().filter(detail -> DateUtils.string2LocalTime(detail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0
- && DateUtils.string2LocalTime(detail.getEndTime() + ":00").compareTo(LocalTime.now()) > 0)
+ && DateUtils.string2LocalTime(detail.getEndTime() + ("23:59:59".equals(detail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0)
.findFirst().orElseThrow(() -> new ServiceException("当前时间段未查询到计费策略明细"));
// 获取后一次的计费策略明细
- accountingStrategyDetailVO.setEndTime("23:59".equals(accountingStrategyDetailVO.getEndTime())? "24:00":accountingStrategyDetailVO.getEndTime());
+ accountingStrategyDetailVO.setEndTime("23:59:59".equals(accountingStrategyDetailVO.getEndTime())? "00:00":accountingStrategyDetailVO.getEndTime());
accountingStrategyDetailNext = list.stream().filter(detail -> detail.getStartTime().compareTo(accountingStrategyDetailVO.getEndTime()) == 0)
.findFirst().orElseThrow(() -> new ServiceException("未查询到下一时间段的计费策略明细"));
- if(Objects.nonNull(vip) && vip.getType() == 2){
- accountingStrategyDetailVO.setDiscount(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge()).multiply(vip.getDiscount()));
- accountingStrategyDetailNext.setDiscount(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge()).multiply(vip.getDiscount()));
+ if(Objects.nonNull(vip)) {
+ if (vip.getType() == 2) {
+ accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge().multiply(vip.getDiscount())));
+ accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge().multiply(vip.getDiscount())));
+ } else {
+ if(Objects.isNull(accountingStrategy.getDiscount())){
+ accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge().multiply(new BigDecimal(1))));
+ accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge().multiply(new BigDecimal(1))));
+ }else {
+ accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge().multiply(accountingStrategy.getDiscount())));
+ accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge().multiply(accountingStrategy.getDiscount())));
+ }
+ }
}else {
- accountingStrategyDetailVO.setDiscount(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge()).multiply(accountingStrategy.getDiscount()));
- accountingStrategyDetailNext.setDiscount(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge()).multiply(accountingStrategy.getDiscount()));
+ accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge()));
+ accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge()));
}
list = new ArrayList<>();
list.add(accountingStrategyDetailVO);
@@ -108,22 +135,30 @@
StrategyPriceVO strategyPriceVO = new StrategyPriceVO();
List<TAccountingStrategyDetailVO> list = this.queryAccountingStrategyDetailByStrategyId(accountingStrategy.getId());
- list.stream().filter(item -> "24:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59"));
+ list.stream().filter(item -> "24:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59:59"));
// 获取当前时间段的计费策略明细
TAccountingStrategyDetailVO accountingStrategyDetailVO = list.stream().filter(detail -> DateUtils.string2LocalTime(detail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0
- && DateUtils.string2LocalTime(detail.getEndTime() + ":00").compareTo(LocalTime.now()) > 0)
+ && DateUtils.string2LocalTime(detail.getEndTime() + ("23:59:59".equals(detail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0)
.findFirst().orElseThrow(() -> new ServiceException("当前时间段未查询到计费策略明细"));
- strategyPriceVO.setDiscountAmount(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge())
- .subtract(accountingStrategyDetailVO.getServiceCharge().multiply(accountingStrategy.getDiscount())).setScale(2, BigDecimal.ROUND_HALF_UP));
- // 查询最高抵扣的会员
+// strategyPriceVO.setDiscountAmount(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge())
+// .subtract(accountingStrategyDetailVO.getServiceCharge().multiply(accountingStrategy.getDiscount())).setScale(2, BigDecimal.ROUND_HALF_UP));
+ if(Objects.isNull(accountingStrategy.getDiscount())){
+ strategyPriceVO.setDiscountAmount(BigDecimal.ZERO);
+ }else {
+ strategyPriceVO.setDiscountAmount(accountingStrategyDetailVO.getServiceCharge()
+ .subtract(accountingStrategyDetailVO.getServiceCharge().multiply(accountingStrategy.getDiscount())).setScale(2, BigDecimal.ROUND_HALF_UP));
+ }
+ // 查询最高折扣的会员
+ TVip monthlyCardDiscount = vipClient.getVipInfoByType(3).getData();
+ strategyPriceVO.setServiceFeeDiscount(monthlyCardDiscount.getMonthlyCardDiscount());
+ // 查询最高优惠的会员
TVip maximumDeduction = vipClient.getVipInfoByType(1).getData();
strategyPriceVO.setMaxDiscountAmount(maximumDeduction.getMaximumDeduction());
// 查询最低起步价会员
TVip monthlyCard = vipClient.getVipInfoByType(2).getData();
strategyPriceVO.setVipStartPrice(monthlyCard.getMonthlyCard());
- // 查询最高折扣的会员
- TVip monthlyCardDiscount = vipClient.getVipInfoByType(3).getData();
- strategyPriceVO.setServiceFeeDiscount(monthlyCardDiscount.getMonthlyCardDiscount());
+ // 模板折扣
+ strategyPriceVO.setDiscount(accountingStrategy.getDiscount());
return strategyPriceVO;
}
@@ -141,4 +176,80 @@
return isFirstElementValid || !isTimeContinuous;
}
+
+ @Override
+ public Boolean isStrategyPriceConsistent(List<TAccountingStrategyDetail> accountingStrategyDetails) {
+ Map<Integer, BigDecimal> phaseToServiceFee = new HashMap<>();
+ Map<Integer, BigDecimal> phaseToCostServiceFee = new HashMap<>();
+ for (TAccountingStrategyDetail detail : accountingStrategyDetails) {
+ Integer type = detail.getType();
+ BigDecimal serviceFee = detail.getServiceCharge();
+ BigDecimal costServiceCharge = detail.getCostServiceCharge();
+
+ if (phaseToServiceFee.containsKey(type)) {
+ BigDecimal existingFee = phaseToServiceFee.get(type);
+ BigDecimal existingCostServiceCharge = phaseToCostServiceFee.get(type);
+ if (existingFee.compareTo(serviceFee) != 0) {
+ return false; // 发现不一致的服务费
+ }
+ if (existingCostServiceCharge.compareTo(costServiceCharge) != 0) {
+ return false; // 发现不一致的原价服务费
+ }
+ } else {
+ phaseToServiceFee.put(type, serviceFee);
+ phaseToCostServiceFee.put(type, costServiceCharge);
+ }
+ }
+ return true; // 所有相同阶段的服务费一致
+ }
+
+ @Override
+ public List<TAccountingStrategyDetailVO> queryStrategyByGunIdAndTime(Integer gunId) {
+ TChargingGun chargingGun = chargingGunService.getById(gunId);
+ TAccountingStrategy accountingStrategy = accountingStrategyMapper.selectById(chargingGun.getAccountingStrategyId());
+ if(Objects.isNull(accountingStrategy)){
+ throw new ServiceException("未查询到计费策略");
+ }
+ List<TAccountingStrategyDetailVO> list = this.queryAccountingStrategyDetailByStrategyId(accountingStrategy.getId());
+ list.stream().filter(item -> "00:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59:59"));
+ // 获取当前登录用户id
+ Long userId = tokenService.getLoginUserApplet().getUserId();
+ // 根据id查询用户信息
+ TAppUser appUser = appUserClient.getUserById(userId).getData();
+ if(Objects.nonNull(appUser)){
+ // 查询会员信息
+ TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
+ TAccountingStrategyDetailVO accountingStrategyDetailVO;
+ TAccountingStrategyDetailVO accountingStrategyDetailNext;
+ // 获取当前时间段的计费策略明细
+ accountingStrategyDetailVO = list.stream().filter(detail -> DateUtils.string2LocalTime(detail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0
+ && DateUtils.string2LocalTime(detail.getEndTime() + ("23:59:59".equals(detail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0)
+ .findFirst().orElseThrow(() -> new ServiceException("当前时间段未查询到计费策略明细"));
+ // 获取后一次的计费策略明细
+ accountingStrategyDetailVO.setEndTime("23:59:59".equals(accountingStrategyDetailVO.getEndTime())? "00:00":accountingStrategyDetailVO.getEndTime());
+ accountingStrategyDetailNext = list.stream().filter(detail -> detail.getStartTime().compareTo(accountingStrategyDetailVO.getEndTime()) == 0)
+ .findFirst().orElseThrow(() -> new ServiceException("未查询到下一时间段的计费策略明细"));
+ if(Objects.nonNull(vip)) {
+ if (vip.getType() == 2) {
+ accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge().multiply(vip.getDiscount())));
+ accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge().multiply(vip.getDiscount())));
+ } else {
+ BigDecimal discount = accountingStrategy.getDiscount();
+ if(Objects.isNull(discount)){
+ discount = BigDecimal.ONE;
+ }
+ accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge().multiply(discount)));
+ accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge().multiply(discount)));
+ }
+ }else {
+ accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge()));
+ accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge()));
+ }
+ list = new ArrayList<>();
+ list.add(accountingStrategyDetailVO);
+ list.add(accountingStrategyDetailNext);
+ return list;
+ }
+ return new ArrayList<>();
+ }
}
--
Gitblit v1.7.1