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;
|
}
|
}
|