From 782f0259bc2c0362a1075ea401c815186321d8c6 Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期三, 21 八月 2024 10:45:41 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java | 98 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 98 insertions(+), 0 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 741455f..ea793af 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,13 +1,29 @@
package com.ruoyi.chargingPile.service.impl;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.account.api.feignClient.AppUserClient;
+import com.ruoyi.account.api.model.TAppUser;
+import com.ruoyi.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.mapper.TAccountingStrategyDetailMapper;
+import com.ruoyi.chargingPile.mapper.TAccountingStrategyMapper;
import com.ruoyi.chargingPile.service.TAccountingStrategyDetailService;
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.other.api.domain.TVip;
+import com.ruoyi.other.api.feignClient.VipClient;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalTime;
+import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
/**
* <p>
@@ -20,8 +36,90 @@
@Service
public class TAccountingStrategyDetailServiceImpl extends ServiceImpl<TAccountingStrategyDetailMapper, TAccountingStrategyDetail> implements TAccountingStrategyDetailService {
+ @Autowired
+ private TAccountingStrategyMapper accountingStrategyMapper;
+ @Autowired
+ private VipClient vipClient;
+ @Autowired
+ private TokenService tokenService;
+ @Autowired
+ private AppUserClient appUserClient;
@Override
public List<TAccountingStrategyDetailVO> queryAccountingStrategyDetailByStrategyId(Integer strategyId) {
return this.baseMapper.queryAccountingStrategyDetailByStrategyId(strategyId);
}
+
+ @Override
+ public List<TAccountingStrategyDetailVO> queryStrategyBySiteIdAndTime(Integer siteId) {
+ TAccountingStrategy accountingStrategy = accountingStrategyMapper.selectOne(Wrappers.lambdaQuery(TAccountingStrategy.class)
+ .eq(TAccountingStrategy::getSiteId, siteId)
+ .last("limit 1"));
+ if(Objects.isNull(accountingStrategy)){
+ throw new ServiceException("未查询到计费策略");
+ }
+ List<TAccountingStrategyDetailVO> list = this.queryAccountingStrategyDetailByStrategyId(accountingStrategy.getId());
+ // 获取当前登录用户id
+ Long userId = tokenService.getLoginUserApplet().getUserId();
+ // 根据id查询用户信息
+ TAppUser appUser = appUserClient.getUserById(userId).getData();
+ if(Objects.nonNull(appUser) && Objects.nonNull(appUser.getVipId())){
+ // 查询会员信息
+ TVip vip = vipClient.getInfo1(appUser.getVipId()).getData();
+ TAccountingStrategyDetailVO accountingStrategyDetailVO;
+ TAccountingStrategyDetailVO accountingStrategyDetailNext;
+ if(Objects.nonNull(vip) && vip.getType() == 2){
+ // 获取当前时间段的计费策略明细
+ accountingStrategyDetailVO = list.stream().filter(detail -> detail.getStartTime().compareTo(LocalTime.now().toString()) <= 0 && detail.getEndTime().compareTo(LocalTime.now().toString()) >= 0)
+ .findFirst().orElseThrow(() -> new ServiceException("当前时间段未查询到计费策略明细"));
+ accountingStrategyDetailVO.setDiscount(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge()).multiply(vip.getDiscount()));
+ // 获取后一次的计费策略明细
+ accountingStrategyDetailNext = list.stream().filter(detail -> detail.getStartTime().compareTo(accountingStrategyDetailVO.getEndTime()) == 0)
+ .findFirst().orElseThrow(() -> new ServiceException("未查询到下一时间段的计费策略明细"));
+ accountingStrategyDetailNext.setDiscount(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge()).multiply(vip.getDiscount()));
+ }else {
+ // 获取当前时间段的计费策略明细
+ accountingStrategyDetailVO = list.stream().filter(detail -> detail.getStartTime().compareTo(LocalTime.now().toString()) <= 0 && detail.getEndTime().compareTo(LocalTime.now().toString()) >= 0)
+ .findFirst().orElseThrow(() -> new ServiceException("当前时间段未查询到计费策略明细"));
+ accountingStrategyDetailVO.setDiscount(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge()).multiply(accountingStrategy.getDiscount()));
+ // 获取后一次的计费策略明细
+ accountingStrategyDetailNext = list.stream().filter(detail -> detail.getStartTime().compareTo(accountingStrategyDetailVO.getEndTime()) == 0)
+ .findFirst().orElseThrow(() -> new ServiceException("未查询到下一时间段的计费策略明细"));
+ accountingStrategyDetailNext.setDiscount(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge()).multiply(accountingStrategy.getDiscount()));
+ }
+ list = new ArrayList<>();
+ list.add(accountingStrategyDetailVO);
+ list.add(accountingStrategyDetailNext);
+ return list;
+ }
+ return new ArrayList<>();
+ }
+
+ @Override
+ public StrategyPriceVO queryPrice(Integer siteId) {
+ TAccountingStrategy accountingStrategy = accountingStrategyMapper.selectOne(Wrappers.lambdaQuery(TAccountingStrategy.class)
+ .eq(TAccountingStrategy::getSiteId, siteId)
+ .last("limit 1"));
+ if(Objects.isNull(accountingStrategy)){
+ throw new ServiceException("未查询到计费策略");
+ }
+
+ StrategyPriceVO strategyPriceVO = new StrategyPriceVO();
+
+ List<TAccountingStrategyDetailVO> list = this.queryAccountingStrategyDetailByStrategyId(accountingStrategy.getId());
+ // 获取当前时间段的计费策略明细
+ TAccountingStrategyDetailVO accountingStrategyDetailVO = list.stream().filter(detail -> detail.getStartTime().compareTo(LocalTime.now().toString()) <= 0 && detail.getEndTime().compareTo(LocalTime.now().toString()) >= 0)
+ .findFirst().orElseThrow(() -> new ServiceException("当前时间段未查询到计费策略明细"));
+ strategyPriceVO.setDiscountAmount(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge())
+ .subtract(accountingStrategyDetailVO.getServiceCharge().multiply(accountingStrategy.getDiscount())).setScale(2, BigDecimal.ROUND_HALF_UP));
+ // 查询最高抵扣的会员
+ 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());
+ return strategyPriceVO;
+ }
}
--
Gitblit v1.7.1