| package com.doumee.service.business.impl; | 
| import java.math.BigDecimal; | 
|   | 
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
| import com.doumee.core.constants.Constants; | 
| import com.doumee.core.constants.ResponseStatus; | 
| import com.doumee.core.exception.BusinessException; | 
| import com.doumee.dao.business.BaseParamMapper; | 
| import com.doumee.dao.business.MemberRidesMapper; | 
| import com.doumee.dao.business.PricingDetailMapper; | 
| import com.doumee.dao.business.PricingParamMapper; | 
| import com.doumee.dao.business.model.BaseParam; | 
| import com.doumee.dao.business.model.MemberRides; | 
| import com.doumee.dao.business.web.response.PricingRuleDTO; | 
| import com.doumee.service.business.PricingRuleService; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Service; | 
| import org.springframework.util.CollectionUtils; | 
|   | 
| import java.util.List; | 
| import java.util.Objects; | 
| import java.util.stream.Collectors; | 
|   | 
| /** | 
|  * | 
|  * 获取计价规则 | 
|  * @author T14 | 
|  */ | 
|   | 
| @Service | 
| public class PricingRuleServiceImpl implements PricingRuleService { | 
|   | 
|     @Autowired | 
|     PricingParamMapper pricingParamMapper; | 
|   | 
|     @Autowired | 
|     MemberRidesMapper memberRidesMapper; | 
|   | 
|     @Autowired | 
|     BaseParamMapper baseParamMapper; | 
|   | 
|     @Override | 
|     public PricingRuleDTO getPricingRule(String goodaorderId) { | 
|         QueryWrapper<MemberRides> wrapper = new QueryWrapper<>(); | 
|         wrapper.lambda() | 
|                 .eq(MemberRides::getOrdreId,goodaorderId); | 
|         List<MemberRides> memberRides = memberRidesMapper.selectList(wrapper); | 
|         if (CollectionUtils.isEmpty(memberRides)){ | 
|             return null; | 
|         } | 
|         PricingRuleDTO pricingRule = getPricingRule(memberRides); | 
|         return pricingRule; | 
|     } | 
|   | 
|     @Override | 
|     public PricingRuleDTO getPricingRule(List<MemberRides> memberRidesList) { | 
|         if (!CollectionUtils.isEmpty(memberRidesList)){ | 
|             List<String> collect = memberRidesList.stream() | 
|                     .filter(s -> Objects.nonNull(s.getActualPrice())) | 
|                     .map(s -> s.getParamId()) | 
|                     .collect(Collectors.toList()); | 
|             QueryWrapper<BaseParam> wrapper = new QueryWrapper<>(); | 
|             wrapper.lambda() | 
|                     .eq(BaseParam::getIsdeleted, Constants.ZERO) | 
|                     .eq(BaseParam::getType, Constants.THREE) | 
|                     .in(BaseParam::getId,collect) | 
|                     .orderByDesc(BaseParam::getSortnum) | 
|                     .last("limit 1"); | 
|             BaseParam baseParam = baseParamMapper.selectOne(wrapper); | 
|   | 
|             MemberRides memberRides = memberRidesList.stream() | 
|                     .filter(s -> baseParam.getId().equals(s.getParamId())) | 
|                     .findFirst().orElseThrow(() -> new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "没有车辆类型编码")); | 
|             PricingRuleDTO pricingRuleDTO = new PricingRuleDTO(); | 
|             if (memberRides.getBaseTime() < 0){ | 
|                 //一口价定价 | 
|                 pricingRuleDTO.setStartFare(memberRides.getBasePrice()); | 
|                 pricingRuleDTO.setPrice(new BigDecimal("0")); | 
|                 pricingRuleDTO.setType(Constants.ONE); | 
|                 pricingRuleDTO.setParamId(baseParam.getId()); | 
|                 pricingRuleDTO.setBikeType(baseParam.getName()); | 
|                 pricingRuleDTO.setMemberRides(memberRides); | 
|             }else { | 
|                 pricingRuleDTO.setStartFare(memberRides.getBasePrice()); | 
|                 pricingRuleDTO.setPrice(memberRides.getUnitPrice()); | 
|                 pricingRuleDTO.setType(Constants.TWO); | 
|                 pricingRuleDTO.setParamId(baseParam.getId()); | 
|                 pricingRuleDTO.setBikeType(baseParam.getName()); | 
|                 pricingRuleDTO.setMemberRides(memberRides); | 
|             } | 
|             return pricingRuleDTO; | 
|         } | 
|         return null; | 
|     } | 
| } |