fix:高德打车的状态根据有无取消费进行调整

This commit is contained in:
lulz1 2024-05-31 14:17:04 +08:00
parent 2cf04ad987
commit 3a1b59c779
13 changed files with 163 additions and 66 deletions

View File

@ -7,6 +7,7 @@ import com.chint.domain.aggregates.order.RouteOrder;
import com.chint.domain.aggregates.standards.CityTag; import com.chint.domain.aggregates.standards.CityTag;
import com.chint.domain.aggregates.user.User; import com.chint.domain.aggregates.user.User;
import com.chint.domain.exceptions.LocationException; import com.chint.domain.exceptions.LocationException;
import com.chint.domain.exceptions.NotFoundException;
import com.chint.domain.repository.*; import com.chint.domain.repository.*;
import com.chint.domain.service.TrainStandardsService; import com.chint.domain.service.TrainStandardsService;
import com.chint.domain.value_object.FlightPriceData; import com.chint.domain.value_object.FlightPriceData;
@ -254,6 +255,7 @@ public class CTripEstimatePrice implements EstimatePrice {
HotelProductInfo hotelProductInfo = new HotelProductInfo(); HotelProductInfo hotelProductInfo = new HotelProductInfo();
if (location.getCityId() == null) { if (location.getCityId() == null) {
//如果到这里返回无城市id那么就直接报错 然后发送错误的日志 用于记录无法查找到城市id的location的name //如果到这里返回无城市id那么就直接报错 然后发送错误的日志 用于记录无法查找到城市id的location的name
throw new NotFoundException("地点:" + location.getLocationName() + "缺失相关信息(CityId),联系管理员进行添加");
} }
hotelProductInfo.setCityID(location.getCityId().toString()); hotelProductInfo.setCityID(location.getCityId().toString());
BookingRelatedApiRequest bookingRelatedApiRequest = cTripEstimateRequest BookingRelatedApiRequest bookingRelatedApiRequest = cTripEstimateRequest
@ -264,10 +266,11 @@ public class CTripEstimatePrice implements EstimatePrice {
if (success) { if (success) {
HotelValuationResult hotelValuationResult = estimate.getData().getHotelValuationResult(); HotelValuationResult hotelValuationResult = estimate.getData().getHotelValuationResult();
BigDecimal maxPrice = hotelValuationResult.getMaxPrice(); BigDecimal maxPrice = hotelValuationResult.getMaxPrice();
String price = maxPrice == null ? KEEP_TWO_DECIMAL_ZERO : maxPrice.toString(); ; String price = maxPrice == null ? KEEP_TWO_DECIMAL_ZERO : maxPrice.toString();
if (Double.parseDouble(price) == 0) { if (Double.parseDouble(price) == 0) {
hotelPriceData.setSuccess(false); hotelPriceData.setSuccess(false);
hotelPriceData.setMaxPrice(NO_PRICE_ERROR);
return hotelPriceData; return hotelPriceData;
} }
@ -288,35 +291,7 @@ public class CTripEstimatePrice implements EstimatePrice {
hotelPriceData.setSuccess(success); hotelPriceData.setSuccess(success);
hotelPriceData.setMaxPrice(NO_PRICE_ERROR); hotelPriceData.setMaxPrice(NO_PRICE_ERROR);
} }
return hotelPriceData; return hotelPriceData;
// List<TravelStandards> travelStandardsList = travelStandardsRepository.findByStandardLevel(standardLevel);
// //2.过滤出酒店的差标
// List<TravelStandards> travelStandards = travelStandardsList.stream()
// .filter(o -> String.valueOf(LEG_TYPE_HOTEL).equals(o.getProductType()) //酒店
// && cityCategory(priceQueryData.getDepartCity()).equals(o.getCityTag()))//3.根据城市确认具体金额
// .toList();
// HotelPriceData hotelPriceData = new HotelPriceData();
// if (!travelStandards.isEmpty()) {
// String price = travelStandards.get(0).getPrice();
// String arriveData = priceQueryData.getArriveDate();
// String departDate = priceQueryData.getDepartDate();
// if (arriveData != null) {
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// int count = calculateNightsBetweenDates(LocalDate.parse(departDate, formatter),
// LocalDate.parse(arriveData, formatter));
// int res = Integer.parseInt(price) * count;
// price = String.valueOf(res);
// }
// hotelPriceData.setSuccess(true);
// hotelPriceData.setMaxPrice(price);
// } else {
// hotelPriceData.setSuccess(false);
// hotelPriceData.setMaxPrice("无估算价格");
// }
// return hotelPriceData;
} }
/** /**

View File

@ -269,14 +269,14 @@ public class RouteOrder implements Serializable {
this.getLegItems().forEach(Leg::reloadStatus); this.getLegItems().forEach(Leg::reloadStatus);
this.estimateAmount = this.getLegItems() this.estimateAmount = this.getLegItems()
.stream() .stream()
.filter(leg -> leg.getEstimateAmount() != null)
.map(Leg::getEstimateAmount) .map(Leg::getEstimateAmount)
.filter(Objects::nonNull)
.reduce(BigDecimalCalculator::add) .reduce(BigDecimalCalculator::add)
.orElse(KEEP_TWO_DECIMAL_ZERO); .orElse(KEEP_TWO_DECIMAL_ZERO);
this.amount = this.legItems this.amount = this.legItems
.stream() .stream()
.filter(leg -> leg.getAmount() != null)
.map(Leg::getAmount) .map(Leg::getAmount)
.filter(Objects::nonNull)
.reduce(BigDecimalCalculator::add) .reduce(BigDecimalCalculator::add)
.orElse(KEEP_TWO_DECIMAL_ZERO); .orElse(KEEP_TWO_DECIMAL_ZERO);
this.updateStatus(); this.updateStatus();
@ -577,12 +577,10 @@ public class RouteOrder implements Serializable {
// 计算时间匹配得分这里只是一个示例可以根据实际需要调整计算方式 // 计算时间匹配得分这里只是一个示例可以根据实际需要调整计算方式
long startTimeDiff = Math.abs(Duration.between(leg.getStartTime(), orderDetail.getStartTime()).toMillis()); long startTimeDiff = Math.abs(Duration.between(leg.getStartTime(), orderDetail.getStartTime()).toMillis());
long endTimeDiff = Math.abs(Duration.between(leg.getEndTime(), orderDetail.getEndTime()).toMillis()); long endTimeDiff = Math.abs(Duration.between(leg.getEndTime(), orderDetail.getEndTime()).toMillis());
double timeScore = 1.0 / (1 + startTimeDiff / tolerance) + 1.0 / (1 + endTimeDiff / tolerance);
// 可以添加更多的评分项比如地点匹配得分产品类型得分等 // 可以添加更多的评分项比如地点匹配得分产品类型得分等
// 返回综合评分 // 返回综合评分
return timeScore; return 1.0 / (1 + (double) startTimeDiff / tolerance) + 1.0 / (1 + (double) endTimeDiff / tolerance);
} }
public boolean checkIfHaveTrainLeg() { public boolean checkIfHaveTrainLeg() {

View File

@ -19,6 +19,7 @@ import java.math.RoundingMode;
import java.util.List; import java.util.List;
import static com.chint.infrastructure.constant.BelongSystemConstant.TRAVAL_SYS_TYPE_AMAP; import static com.chint.infrastructure.constant.BelongSystemConstant.TRAVAL_SYS_TYPE_AMAP;
import static com.chint.infrastructure.constant.FSSCConstant.FSSC_CAR_STATUS_REFUND;
import static com.chint.infrastructure.constant.FSSCConstant.FSSC_CAR_STATUS_SUCCESS; import static com.chint.infrastructure.constant.FSSCConstant.FSSC_CAR_STATUS_SUCCESS;
import static com.chint.infrastructure.constant.OrderConstant.ORDER_EVENT_ETA; import static com.chint.infrastructure.constant.OrderConstant.ORDER_EVENT_ETA;
import static com.chint.infrastructure.constant.SupplierNameConstant.SUPPLIER_AMAP_CN_NAME; import static com.chint.infrastructure.constant.SupplierNameConstant.SUPPLIER_AMAP_CN_NAME;
@ -118,6 +119,16 @@ public class AmapOrderExtensionFactoryImpl implements OrderExtensionFactory {
} }
carOrderDetail.setOrderStatus(mapFSSCOrderStatus(data.getShowStatus())); carOrderDetail.setOrderStatus(mapFSSCOrderStatus(data.getShowStatus()));
List<AmapOrderDetailResponse.OriginalFeeDetail> originalFeeDetails = data.parseOriginalFeeDetail();
if (originalFeeDetails.stream().anyMatch(it -> it.getFeeCode().equals("cancelFee") && it.getValue() > 0)) {
carOrderDetail.setOrderStatus(FSSC_CAR_STATUS_REFUND);
originalFeeDetails.stream().filter(it -> it.getFeeCode().equals("cancelFee")).findFirst()
.ifPresent(it -> {
String cancelFee = it.getValue().toString();
carOrderDetail.setCancellationFee(BigDecimalCalculator.divide(cancelFee, "100"));
});
}
carOrderDetail.setTrvaleSysType(TRAVAL_SYS_TYPE_AMAP); carOrderDetail.setTrvaleSysType(TRAVAL_SYS_TYPE_AMAP);
updateCarOrderDetailData(carOrderDetail, response); updateCarOrderDetailData(carOrderDetail, response);

View File

@ -5,11 +5,14 @@ import com.chint.domain.aggregates.order.Location;
import com.chint.infrastructure.util.PageResult; import com.chint.infrastructure.util.PageResult;
import java.util.List; import java.util.List;
import java.util.Optional;
public interface LocationRepository { public interface LocationRepository {
// List<Location> findByHot(List<LocationHot> locationHots); // List<Location> findByHot(List<LocationHot> locationHots);
Location findByLocationId(Long locationId); Location findByLocationId(Long locationId);
Optional<Location> findOptById(Long id);
Location save(Location location); Location save(Location location);
PageResult<Location> pageQuery(LocationParam locationParam); PageResult<Location> pageQuery(LocationParam locationParam);

View File

@ -8,7 +8,8 @@ import com.chint.domain.aggregates.order.RouteOrder;
import com.chint.domain.aggregates.system.ProcessInitiationControl; import com.chint.domain.aggregates.system.ProcessInitiationControl;
import com.chint.domain.aggregates.user.User; import com.chint.domain.aggregates.user.User;
import com.chint.domain.exceptions.NotFoundException; import com.chint.domain.exceptions.NotFoundException;
import com.chint.domain.repository.*; import com.chint.domain.repository.RouteRepository;
import com.chint.domain.repository.UserRepository;
import com.chint.infrastructure.constant.CommonMessageConstant; import com.chint.infrastructure.constant.CommonMessageConstant;
import com.chint.infrastructure.repository.jdbc.JdbcLegRepository; import com.chint.infrastructure.repository.jdbc.JdbcLegRepository;
import com.chint.infrastructure.repository.jdbc.JdbcOrderDetailRepository; import com.chint.infrastructure.repository.jdbc.JdbcOrderDetailRepository;
@ -41,14 +42,11 @@ import java.util.List;
import java.util.Objects; import java.util.Objects;
import static com.chint.infrastructure.constant.BPMConstant.*; import static com.chint.infrastructure.constant.BPMConstant.*;
import static com.chint.infrastructure.constant.BPMConstant.REFUND_TYPE_FLIGHT;
import static com.chint.infrastructure.constant.BelongSystemConstant.BELONG_SYS_CODE_ANFSSC; import static com.chint.infrastructure.constant.BelongSystemConstant.BELONG_SYS_CODE_ANFSSC;
import static com.chint.infrastructure.constant.LegConstant.*; import static com.chint.infrastructure.constant.LegConstant.*;
import static com.chint.infrastructure.constant.LegConstant.LEG_TYPE_OTHER;
import static com.chint.infrastructure.constant.OrderConstant.ORDER_EVENT_CHANGE; import static com.chint.infrastructure.constant.OrderConstant.ORDER_EVENT_CHANGE;
import static com.chint.infrastructure.constant.OrderConstant.ORDER_EVENT_REFUND; import static com.chint.infrastructure.constant.OrderConstant.ORDER_EVENT_REFUND;
import static com.chint.infrastructure.constant.SupplierNameConstant.*; import static com.chint.infrastructure.constant.SupplierNameConstant.*;
import static com.chint.infrastructure.constant.SupplierNameConstant.SUPPLIER_L_Y_BPM_NAME;
@Service @Service
public class BPMOrderDomainService { public class BPMOrderDomainService {
@ -141,7 +139,7 @@ public class BPMOrderDomainService {
ExceedStandardDto exceedStandardDto = switch (command.getProductType()) { ExceedStandardDto exceedStandardDto = switch (command.getProductType()) {
case LEG_TYPE_TRAIN -> bpmParamFactory.creatAuditParamByTrain(orderDetail); case LEG_TYPE_TRAIN -> bpmParamFactory.creatAuditParamByTrain(orderDetail);
case LEG_TYPE_AIRPLANE -> bpmParamFactory.creatAuditParamByFlight(orderDetail); case LEG_TYPE_AIRPLANE -> bpmParamFactory.creatAuditParamByFlight(orderDetail);
case LEG_TYPE_HOTEL -> bpmParamFactory.creatAuditParamByHotel(orderDetail); case LEG_TYPE_HOTEL -> bpmParamFactory.creatAuditParamByHotel(orderDetail, routeOrder);
case LEG_TYPE_TAXI -> bpmParamFactory.creatAuditParamByCar(orderDetail); case LEG_TYPE_TAXI -> bpmParamFactory.creatAuditParamByCar(orderDetail);
case LEG_TYPE_OTHER -> bpmParamFactory.creatAuditParamByOther(orderDetail); case LEG_TYPE_OTHER -> bpmParamFactory.creatAuditParamByOther(orderDetail);
default -> throw new NotFoundException(CommonMessageConstant.NOT_FOUND); default -> throw new NotFoundException(CommonMessageConstant.NOT_FOUND);

View File

@ -11,6 +11,7 @@ import com.chint.domain.value_object.enums.CurrencyType;
import com.chint.infrastructure.constant.CommonMessageConstant; import com.chint.infrastructure.constant.CommonMessageConstant;
import com.chint.infrastructure.constant.OrderConstant; import com.chint.infrastructure.constant.OrderConstant;
import com.chint.infrastructure.echo_framework.command.Command; import com.chint.infrastructure.echo_framework.command.Command;
import com.chint.infrastructure.util.BigDecimalCalculator;
import com.chint.interfaces.rest.amap.dto.detail.AmapOrderDetailResponse; import com.chint.interfaces.rest.amap.dto.detail.AmapOrderDetailResponse;
import com.chint.interfaces.rest.amap.request.AmapOrderDetailRequest; import com.chint.interfaces.rest.amap.request.AmapOrderDetailRequest;
import com.google.gson.Gson; import com.google.gson.Gson;
@ -57,7 +58,8 @@ public class AmapOrderDataAdapter implements OrderDataAdapter {
} else { } else {
Integer enterpriseAmount = data.getEnterpriseAmount(); Integer enterpriseAmount = data.getEnterpriseAmount();
Integer personAmount = data.getPersonAmount(); Integer personAmount = data.getPersonAmount();
price = String.valueOf((enterpriseAmount == null ? 0 : enterpriseAmount) + (personAmount == null ? 0 : personAmount)); price = BigDecimalCalculator.divide(String.valueOf((enterpriseAmount == null ? 0 : enterpriseAmount) + (personAmount == null ? 0 : personAmount)),
"100");
} }
Optional<Long> startLocationId = locationRepository Optional<Long> startLocationId = locationRepository

View File

@ -14,6 +14,7 @@ import org.springframework.stereotype.Repository;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional;
import static com.chint.infrastructure.constant.CommonMessageConstant.NOT_FOUND; import static com.chint.infrastructure.constant.CommonMessageConstant.NOT_FOUND;
import static com.chint.infrastructure.constant.LegConstant.LEG_TYPE_AIRPLANE; import static com.chint.infrastructure.constant.LegConstant.LEG_TYPE_AIRPLANE;
@ -31,6 +32,11 @@ public class LocationRepositoryImpl implements LocationRepository {
return jdbcLocationRepository.findByLocationId(locationId); return jdbcLocationRepository.findByLocationId(locationId);
} }
@Override
public Optional<Location> findOptById(Long id) {
return jdbcLocationRepository.findById(id);
}
@Override @Override
public Location save(Location location) { public Location save(Location location) {
return jdbcLocationRepository.save(location); return jdbcLocationRepository.save(location);

View File

@ -1,9 +1,13 @@
package com.chint.interfaces.rest.amap.dto.detail; package com.chint.interfaces.rest.amap.dto.detail;
import com.chint.interfaces.rest.amap.BaseResponse; import com.chint.interfaces.rest.amap.BaseResponse;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson; import com.google.gson.Gson;
import lombok.Data; import lombok.Data;
import java.lang.reflect.Type;
import java.util.List;
@Data @Data
public class AmapOrderDetailResponse extends BaseResponse { public class AmapOrderDetailResponse extends BaseResponse {
@ -99,6 +103,13 @@ public class AmapOrderDetailResponse extends BaseResponse {
ApplyRecord applyRecord1 = gson.fromJson(record, ApplyRecord.class); ApplyRecord applyRecord1 = gson.fromJson(record, ApplyRecord.class);
return applyRecord1.getOutApplyRecordId(); return applyRecord1.getOutApplyRecordId();
} }
public List<OriginalFeeDetail> parseOriginalFeeDetail() {
Gson gson = new Gson();
String originalFeeDetail1 = this.getOriginalFeeDetail();
Type listType = new TypeToken<List<OriginalFeeDetail>>() {}.getType();
return gson.fromJson(originalFeeDetail1, listType);
}
} }
@lombok.Data @lombok.Data
@ -134,5 +145,11 @@ public class AmapOrderDetailResponse extends BaseResponse {
private String value;//费用 private String value;//费用
} }
@lombok.Data
public static class OriginalFeeDetail {
private String feeCode;//名称
private String pFeeCode;//名称
private String title;//费用
private Double value;//费用
}
} }

View File

@ -4,28 +4,30 @@ import com.chint.domain.aggregates.order.*;
import com.chint.domain.aggregates.user.User; import com.chint.domain.aggregates.user.User;
import com.chint.domain.exceptions.NotFoundException; import com.chint.domain.exceptions.NotFoundException;
import com.chint.domain.repository.LegRepository; import com.chint.domain.repository.LegRepository;
import com.chint.domain.repository.LocationRepository;
import com.chint.infrastructure.constant.BPMConstant; import com.chint.infrastructure.constant.BPMConstant;
import com.chint.infrastructure.constant.CommonMessageConstant; import com.chint.infrastructure.constant.CommonMessageConstant;
import com.chint.infrastructure.repository.jdbc.JdbcUserRepository; import com.chint.infrastructure.repository.jdbc.JdbcUserRepository;
import com.chint.infrastructure.util.DaysUtil; import com.chint.infrastructure.util.DaysUtil;
import com.chint.interfaces.rest.bpm.dto.ANExceedStandardDto; import com.chint.interfaces.rest.bpm.dto.ANExceedStandardDto;
import com.chint.interfaces.rest.bpm.dto.ExceedStandardDto; import com.chint.interfaces.rest.bpm.dto.ExceedStandardDto;
import com.chint.interfaces.rest.ctrip.CTripEstimateRequest;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.Duration;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.util.Optional;
import java.time.format.DateTimeFormatter; import java.util.function.Function;
import java.util.UUID; import java.util.function.Supplier;
import static com.chint.infrastructure.constant.BPMConstant.CHINT_CB_TAG; import static com.chint.infrastructure.constant.BPMConstant.CHINT_CB_TAG;
import static com.chint.infrastructure.constant.BPMConstant.CHINT_TRIP_TAG; import static com.chint.infrastructure.constant.BPMConstant.CHINT_TRIP_TAG;
import static com.chint.infrastructure.constant.LegConstant.LEG_TYPE_HOTEL; import static com.chint.infrastructure.constant.LegConstant.LEG_TYPE_HOTEL;
import static com.chint.infrastructure.constant.SupplierNameConstant.*; import static com.chint.infrastructure.constant.SupplierNameConstant.*;
import static com.chint.infrastructure.constant.UtilConstant.KEEP_TWO_DECIMAL_ZERO;
@Component @Component
public class BPMParamFactory { public class BPMParamFactory {
@ -36,6 +38,13 @@ public class BPMParamFactory {
@Autowired @Autowired
private JdbcUserRepository userRepository; private JdbcUserRepository userRepository;
@Autowired
private CTripEstimateRequest cTripEstimateRequest;
@Autowired
private LocationRepository locationRepository;
public ExceedStandardDto creatAuditParamByCar(OrderDetail orderDetail) { public ExceedStandardDto creatAuditParamByCar(OrderDetail orderDetail) {
CarOrderDetail carOrderDetail = orderDetail.getCarOrderDetail(); CarOrderDetail carOrderDetail = orderDetail.getCarOrderDetail();
ExceedStandardDto exceedStandardDto = new ExceedStandardDto(); ExceedStandardDto exceedStandardDto = new ExceedStandardDto();
@ -61,6 +70,69 @@ public class BPMParamFactory {
return exceedStandardDto; return exceedStandardDto;
} }
public ExceedStandardDto creatAuditParamByHotel(OrderDetail orderDetail, RouteOrder routeOrder) {
HotelOrderDetail hotelOrderDetail = orderDetail.getHotelOrderDetail();
ExceedStandardDto exceedStandardDto = new ExceedStandardDto();
Long legId = orderDetail.getLegId();
// 差旅标准金额
BigDecimal standardPrice = new BigDecimal("0");
// 定义用于计算标准价格的函数
Function<Leg, BigDecimal> calculateStandardPrice = leg -> {
String standardTotalPrice = leg.getEstimateAmount() == null ? "0" : leg.getEstimateAmount();
BigDecimal bigStandardPrice = new BigDecimal(standardTotalPrice);
int days = DaysUtil.calculateNightsBetweenDates(LocalDate.from(leg.getStartTime()), LocalDate.from(leg.getEndTime()));
return days > 0 ? bigStandardPrice.divide(new BigDecimal(days), 3, RoundingMode.HALF_UP) : bigStandardPrice;
};
// legId null 时的处理逻辑
Supplier<BigDecimal> handleNullLegId = () -> {
Optional<Location> optById = locationRepository.findOptById(orderDetail.getOriginId());
return optById.map(location -> {
Long cityId = location.getCityId();
if (cityId != null) {
String maxPrice = cTripEstimateRequest.hotelMaxPrice(cityId, routeOrder.getUserId(), routeOrder.getStandardLevel());
return maxPrice != null ? new BigDecimal(maxPrice) : new BigDecimal(KEEP_TWO_DECIMAL_ZERO);
} else {
return new BigDecimal(KEEP_TWO_DECIMAL_ZERO);
}
}).orElse(new BigDecimal(KEEP_TWO_DECIMAL_ZERO));
};
if (orderDetail.getPrice() != null && orderDetail.getProductType().equals(LEG_TYPE_HOTEL)) {
standardPrice = legId != null ? calculateStandardPrice.apply(legRepository.findByLegId(legId)) : handleNullLegId.get();
}
// 金额计算
BigDecimal bigTotalPrice = new BigDecimal(orderDetail.getPrice() == null ? "0" : orderDetail.getPrice()); // 获取酒店需要支付的总价格
int actualDays = DaysUtil.calculateNightsBetweenDates(LocalDate.from(orderDetail.getStartTime()), LocalDate.from(orderDetail.getEndTime()));
BigDecimal result = bigTotalPrice.subtract(standardPrice.multiply(BigDecimal.valueOf(actualDays)));
BigDecimal divide = actualDays > 0 ? result.divide(new BigDecimal(actualDays), 3, RoundingMode.HALF_UP) : result;
// 超标总金额
String supplierName = getSupplierName(orderDetail.getSupplierName());
exceedStandardDto.setOrderType(BPMConstant.EXCEED_STANDARD_TYPE_HOTEL)
.setHotelStandard(String.valueOf(standardPrice)) // 差旅标准
.setHouseLayout(hotelOrderDetail.getRoomTypeName())
.setHotelName(hotelOrderDetail.getHotelName())
.setOrderSource(supplierName)
.setOrderNo(hotelOrderDetail.getOrderNo())
.setExcessAmount(result) // 超标金额
.setReason(hotelOrderDetail.getOverStandardReason())
.setOccupant(hotelOrderDetail.getBookingName()) // 入住人
.setDays(Integer.valueOf(hotelOrderDetail.getNightCount())) // 入住天数
.setExcessAmountDay(divide); // 超标金额(/)
if (StringUtils.isBlank(exceedStandardDto.getOccupant())) {
String employeeNo = orderDetail.getEmployeeNo(); // 用户id
User user = userRepository.findByEmployeeNo(employeeNo);
if (user != null) {
exceedStandardDto.setOccupant(user.getName()); // 入住人
}
}
return exceedStandardDto;
}
public ExceedStandardDto creatAuditParamByHotel(OrderDetail orderDetail) { public ExceedStandardDto creatAuditParamByHotel(OrderDetail orderDetail) {
HotelOrderDetail hotelOrderDetail = orderDetail.getHotelOrderDetail(); HotelOrderDetail hotelOrderDetail = orderDetail.getHotelOrderDetail();
ExceedStandardDto exceedStandardDto = new ExceedStandardDto(); ExceedStandardDto exceedStandardDto = new ExceedStandardDto();

View File

@ -15,6 +15,8 @@ import org.springframework.stereotype.Component;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import static com.chint.infrastructure.constant.UtilConstant.KEEP_TWO_DECIMAL_ZERO;
@Component @Component
public class CTripEstimateRequest { public class CTripEstimateRequest {
@ -66,6 +68,19 @@ public class CTripEstimateRequest {
return postRequest.post("sign", sign, estimateUrl, bookingRelatedApiRequest, BookingRelatedApiResponse.class); return postRequest.post("sign", sign, estimateUrl, bookingRelatedApiRequest, BookingRelatedApiResponse.class);
} }
public String hotelMaxPrice(Long cityId, String employeeNo, String standardLevel) {
HotelProductInfo hotelProductInfo = new HotelProductInfo();
hotelProductInfo.setCityID(cityId.toString());
BookingRelatedApiRequest bookingRelatedApiRequest = generateBaseRequest(null, null,
hotelProductInfo, employeeNo, standardLevel);
BookingRelatedApiResponse estimate = estimate(bookingRelatedApiRequest);
if (estimate.getStatus().getSuccess()) {
return estimate.getData().getHotelValuationResult().getMaxPrice().toString();
} else {
return KEEP_TWO_DECIMAL_ZERO;
}
}
public BookingRelatedApiRequest generateBaseRequest(FlightProductInfo flightProductInfo, public BookingRelatedApiRequest generateBaseRequest(FlightProductInfo flightProductInfo,
TrainProductInfo trainProductInfo, TrainProductInfo trainProductInfo,
HotelProductInfo hotelProductInfo) { HotelProductInfo hotelProductInfo) {

View File

@ -59,7 +59,7 @@ public class AmapTest {
@Test @Test
public void search() { public void search() {
Gson gson = new Gson(); Gson gson = new Gson();
AmapOrderDetailResponse orderDetailResponse = orderDetailRequest.queryOrderDetail("40168289001340014634615053"); AmapOrderDetailResponse orderDetailResponse = orderDetailRequest.queryOrderDetail("40920084001340019637848323");
System.out.println(gson.toJson(orderDetailResponse)); System.out.println(gson.toJson(orderDetailResponse));
} }

View File

@ -828,7 +828,7 @@ public class LYTest {
@Test @Test
void searchHotel() { void searchHotel() {
HotelDetailResponse hotelOrderDetail = lySearchRequest.getHotelOrderDetail("HO20240414144500947464"); HotelDetailResponse hotelOrderDetail = lySearchRequest.getHotelOrderDetail("HO20240510114900487148");
Gson gson = new Gson(); Gson gson = new Gson();
String json = gson.toJson(hotelOrderDetail); String json = gson.toJson(hotelOrderDetail);
System.out.println(json); System.out.println(json);

View File

@ -299,7 +299,7 @@ class RouteApplicationTests {
@Test @Test
void loginSign() { void loginSign() {
String sfno = "220208013"; String sfno = "220727017";
String syscode = "FSSC"; String syscode = "FSSC";
String billcode = "CLSQ240225000099"; String billcode = "CLSQ240225000099";
String companycode = "正泰集团股份有限公司"; String companycode = "正泰集团股份有限公司";
@ -356,7 +356,7 @@ class RouteApplicationTests {
@Test @Test
void deleteOrderDetail() { void deleteOrderDetail() {
orderDetailRepository.deleteById(3076L); orderDetailRepository.deleteById(3128L);
} }
// @Test // @Test