提交 00f06ed3 authored 作者: hzh's avatar hzh

Merge branch 'dev'

...@@ -229,7 +229,7 @@ public class Api { ...@@ -229,7 +229,7 @@ public class Api {
* @return {@link ApiHttpResponse} 请求返回的结果 * @return {@link ApiHttpResponse} 请求返回的结果
*/ */
public static ApiHttpResponse post(String url, String data, Map<String, String> headers) { public static ApiHttpResponse post(String url, String data, Map<String, String> headers) {
// log.info("请求路径:{}", url); log.info("请求路径:{}", url);
log.info("请求头:{}", JSON.toJSONString(headers)); log.info("请求头:{}", JSON.toJSONString(headers));
log.info("请求体:{}", data); log.info("请求体:{}", data);
StopWatch watch = new StopWatch(); StopWatch watch = new StopWatch();
......
package org.dromara.common.ys.model.req.airport;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.dromara.common.ys.model.BaseModel;
/**
* @author hzh
* @date 2024-10-18
* @desc 指定航班获取舱位价格(第二屏)
**/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class QueryMoreCabinModel extends BaseModel {
/**
* 航班标识,查询航班时返回 ,
*/
private String cacheId;
/**
* 航班号
*/
private String flightNo;
/**
* 用于匹配差标的员工工号,如不传,以当前登录人工号进行匹配
*/
private String empNo;
}
...@@ -2,50 +2,180 @@ package org.dromara.common.ys.model.res.airport; ...@@ -2,50 +2,180 @@ package org.dromara.common.ys.model.res.airport;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author hzh * @author hzh
* @date 2024-10-21 * @date 2024-10-21
**/ **/
@Data @Data
public class QueryFlightMinPriceModel extends QueryFlightModel { public class QueryFlightMinPriceModel {
/** /**
* 价格map * 出发城市机场信息 {[0 起飞机场三字码,1 出发机场名称,2 起飞城市id ,3起飞城市名称]}
*/ */
private Map<String, Object> priceMap; private List<List<Object>> deptAirport;
/** /**
* 机型map * 查询耗时(毫秒)
*/ */
private Map<String, Object> planeMap; private Integer queryTimes;
/** /**
* 查询耗时(毫秒) * 查询缓存key
*/ */
private Integer queryTimes; private String queryCacheKey;
/**
* 机型信息 {[0机型,1机型名称]}
*/
private List<List<Object>> planes;
/**
* 航司信息 {[0航司二字码,1航司名称,2航司logo]}
*/
private List<List<Object>> airlines;
/** /**
* 七天特价 * 到达城市机场信息 {[0 到达机场三字码,1 到达机场名称,2 到达城市id,3 到达城市名称]}
*/ */
private List<WeekPrice> weekPrice; private List<List<Object>> arrAirport;
/**
* 航班舱位信息集合
*/
private List<Flights> flights;
/** /**
* 全天最低价 * 全天最低价
*/ */
private DayMinPrice dayMinPrice; private DayMinPriceBean dayMinPriceBean;
/**
* 中转航班信息
*/
private List<PlaneShoppingGnTransFerFlightBean> transFerFlightBeans;
}
/**
* 航班信息
*/
@Data
class Flights {
/**
* 到达信息 [0 机场城市信息编号 int ,1 到达航站楼,2 到达日期 yyyy-MM-dd,3 到达时间 HH:mm]
*/
private List<Object> arr;
/**
* 航班信息[0 航司信息编号 int ,1 航班号,2 共享航班号, 3 飞行里程 int ,4 飞行时长 eg:12h30m,5 飞行时长(分钟) int eg:120 ,6 是否有餐食 0否 1是,7 经停次数 大于0时 代表需经停 int,8 机型编号 int ,9 航程类型 1 单程 2中转]
*/
private List<Object> flight;
/**
* 最低价销售信息 [0 当前航班最低销售价 Double,1 航班最低销售折扣 Double,2 销售服务费]
*/
private List<Object> minPriceSale;
/**
* 最低价信息 [0 当前航班最低价 Double,1 机场建设费 Double,2 燃油税 Double,3 航班最低折扣 Double,4 航班最低价舱位代码,5 航班最低价舱位名称,6 航班最低价舱位等级,7 最低价舱位等级名称,8 经济舱全价,9产品类型 (0特价 1普通 2代购 3协议 4折上折 5直减产品 6商务优享 7GP产品)
*/
private List<Object> minPrice;
/**
* 出发信息 [0 机场城市信息编号 int,1 起飞航站楼,2 起飞日期 yyyy-MM-dd,3 起飞时间 HH:mm] ,
*/
private List<Object> dept;
/**
* 美亚专用,扩展信息4
*/
private Object ext4;
/**
* 美亚专用,扩展信息5
*/
private Object ext5;
}
/**
* 当天最低价
*/
@Data
class DayMinPriceBean {
/**
* 价格id
*/
private String arriveTime;
/**
* 航班号
*/
private String flightNo;
/**
* 账单价
*/
private String departTime;
/**
* 舱位名称
*/
private String arriveDate;
/** /**
* 航班集合 * 舱位代码
*/ */
private Map<String, Object> flightMap; private String cabin;
/**
* 舱位名称
*/
private String departDate;
/**
* 舱位名称
*/
private String cabinName;
}
/**
* 当天最低价
*/
@Data
class PlaneShoppingGnTransFerFlightBean {
/** /**
* 航班标识 * 中转航班信息
*/ */
private String cacheId; private List<TransFerFlightInfo> transFerFlightInfos;
/**
* 出发信息 [0 停留时长 eg 10h5m ,1 中转次数 int,2 总时长 eg 10h5m ,3 总价格 bigdecimal,4中转城市名称 5 供应商id 6 总基建 7总燃油] ,
*/
private List<Object> transFerExt;
/**
* 销售价
*/
private BigDecimal salePrice;
/**
* 服务费
*/
private BigDecimal serviceFee;
}
/**
* 中转航班信息
*/
@Data
class TransFerFlightInfo {
/**
* 航班信息[0 航司信息编号 int ,1 航班号,2 共享航班号, 3 飞行里程 int ,4 飞行时长 eg:12h30m,5 飞行时长(分钟) int eg:120 ,6 是否有餐食 0否 1是,7 经停次数 大于0时 代表需经停 int,8 机型信息下标 int 9]
*/
private List<List<Object>> flight;
/**
* 出发信息 [0 机场城市信息编号 int,1 起飞航站楼,2 起飞日期 yyyy-MM-dd,3 起飞时间 HH:mm]
*/
private List<List<Object>> dept;
/**
* 到达信息 [0 机场城市信息编号 int ,1 到达航站楼,2 到达日期 yyyy-MM-dd,3 到达时间 HH:mm]
*/
private List<List<Object>> arr;
/**
* 舱位信息 [0 舱位等级代码,1 舱位等级名称,2 舱位代码, 3 舱位名称,4 舱位座位数 5 Y舱价]
*/
private List<List<Object>> cabin;
} }
package org.dromara.common.ys.model.res.airport;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* @author hzh
* @date 2024-10-21
**/
@Data
public class QueryMoreCabinModel {
/**
* 航班所有价格集合,数据结构参考航班列表查询接口返回的价格集合
*/
private Map<String, Object> priceMap;
/**
* 航班所有舱位集合,数据结构参考航班列表查询接口返回的航班的舱位集合
*/
private Map<String, Object> flightMap;
/**
* 航班所有舱位类型集合,数据结构参考航班列表查询接口返回的航班的舱位类型集合
*/
private Map<String, Object> planeMap;
/**
* 缓存id,用于后续查询航班价格和舱位信息时使用
*/
private String cacheId;
/**
* 舱位等级集合
*/
@Data
class CabinType {
/**
* 舱位等级名称
*/
private String cabinTypeName;
/**
* 舱位id集合
*/
private List<String> cabinList;
/**
* 舱位等级
*/
private String cabinType;
}
}
...@@ -32,6 +32,15 @@ public interface IAirportService { ...@@ -32,6 +32,15 @@ public interface IAirportService {
*/ */
QueryFlightMinPriceModel queryFlightMinPrice(String userId, org.dromara.common.ys.model.req.airport.QueryFlightMinPriceModel model); QueryFlightMinPriceModel queryFlightMinPrice(String userId, org.dromara.common.ys.model.req.airport.QueryFlightMinPriceModel model);
/**
* 指定航班获取舱位价格(第二屏)
*
* @param userId 用户id
* @param model 查询参数
* @return 查询结果
*/
QueryMoreCabinModel queryMoreCabin(String userId, org.dromara.common.ys.model.req.airport.QueryMoreCabinModel model);
/** /**
* 创建订单 * 创建订单
* *
......
...@@ -58,6 +58,22 @@ public class AirPortServiceImpl implements IAirportService { ...@@ -58,6 +58,22 @@ public class AirPortServiceImpl implements IAirportService {
return JSON.parseObject(res.getData(), QueryFlightMinPriceModel.class); return JSON.parseObject(res.getData(), QueryFlightMinPriceModel.class);
} }
@Override
public QueryMoreCabinModel queryMoreCabin(String userId, org.dromara.common.ys.model.req.airport.QueryMoreCabinModel model) {
ApiHttpResponse res = Api.v1(
RequestMethodEnum.POST,
DomainEnum.TEST.getDomain(),
AirportApiEnum.QUERY_MORE_CABIN.getUrl(),
userId,
null,
JSON.toJSONString(model)
);
if (!CharSequenceUtil.equals(res.getErrCode(), Code.SUCCESS.getCode())) {
throw new RuntimeException(res.getTips());
}
return JSON.parseObject(res.getData(), QueryMoreCabinModel.class);
}
@Override @Override
public List<BookOrderModel> bookOrder(String userId, org.dromara.common.ys.model.req.airport.bookOrder.BookOrderModel model) { public List<BookOrderModel> bookOrder(String userId, org.dromara.common.ys.model.req.airport.bookOrder.BookOrderModel model) {
ApiHttpResponse res = Api.v1( ApiHttpResponse res = Api.v1(
......
...@@ -76,6 +76,28 @@ public class AirportController extends BaseController { ...@@ -76,6 +76,28 @@ public class AirportController extends BaseController {
return R.ok(airPortService.queryFlight(getUserId(), model)); return R.ok(airPortService.queryFlight(getUserId(), model));
} }
/**
* 航班最低价查询(第一屏)
*/
@GlobalTransactional(timeoutMills = 600000)
@GetMapping("queryFlightMinPrice")
public R<QueryFlightMinPriceModel> queryFlightMinPrice(org.dromara.common.ys.model.req.airport.QueryFlightMinPriceModel model) {
List<AirportModel> airPortList = getAirPortList();
model.setArriveAirport(getCode(model.getArriveAirport(), airPortList));
model.setDepartAirport(getCode(model.getDepartAirport(), airPortList));
model.setTripType(TripType.PUBLIC.getCode());
return R.ok(airPortService.queryFlightMinPrice(getUserId(), model));
}
/**
* 指定航班获取舱位价格(第二屏)
*/
@GlobalTransactional(timeoutMills = 600000)
@GetMapping("queryMoreCabin")
public R<QueryMoreCabinModel> queryMoreCabin(org.dromara.common.ys.model.req.airport.QueryMoreCabinModel model) {
return R.ok(airPortService.queryMoreCabin(getUserId(), model));
}
private String getCode(String cityName, List<AirportModel> airPortList) { private String getCode(String cityName, List<AirportModel> airPortList) {
return airPortList.stream().filter(item -> StringUtils.equals(cityName, item.getCityName())) return airPortList.stream().filter(item -> StringUtils.equals(cityName, item.getCityName()))
.sorted((o1, o2) -> { .sorted((o1, o2) -> {
......
...@@ -10,7 +10,9 @@ import org.dromara.order.api.enums.FeeType; ...@@ -10,7 +10,9 @@ import org.dromara.order.api.enums.FeeType;
import org.dromara.server.service.IOrderStrategy; import org.dromara.server.service.IOrderStrategy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Optional;
/** /**
* 机场订单策略 * 机场订单策略
...@@ -31,22 +33,22 @@ public class AirportOrderStrategy implements IOrderStrategy { ...@@ -31,22 +33,22 @@ public class AirportOrderStrategy implements IOrderStrategy {
// 保险金额 // 保险金额
RemoteSaveOrder.Fee insuranceFee = new RemoteSaveOrder.Fee() RemoteSaveOrder.Fee insuranceFee = new RemoteSaveOrder.Fee()
.setFeeDesc("保险费") .setFeeDesc("保险费")
.setFeeAmount(detail.getInsureAmount()) .setFeeAmount(Optional.ofNullable(detail.getInsureAmount()).orElse(BigDecimal.ZERO))
.setFeeType(FeeType.INSURANCE_FEE); .setFeeType(FeeType.INSURANCE_FEE);
//服务费 //服务费
RemoteSaveOrder.Fee serviceFee = new RemoteSaveOrder.Fee() RemoteSaveOrder.Fee serviceFee = new RemoteSaveOrder.Fee()
.setFeeDesc("服务费") .setFeeDesc("服务费")
.setFeeAmount(detail.getServiceFee()) .setFeeAmount(Optional.ofNullable(detail.getServiceFee()).orElse(BigDecimal.ZERO))
.setFeeType(FeeType.CLOUD_SERVICE_FEE); .setFeeType(FeeType.CLOUD_SERVICE_FEE);
//燃油费 //燃油费
RemoteSaveOrder.Fee fuelFee = new RemoteSaveOrder.Fee() RemoteSaveOrder.Fee fuelFee = new RemoteSaveOrder.Fee()
.setFeeDesc("燃油费") .setFeeDesc("燃油费")
.setFeeAmount(detail.getTax()) .setFeeAmount(Optional.ofNullable(detail.getTax()).orElse(BigDecimal.ZERO))
.setFeeType(FeeType.FUEL_FEE); .setFeeType(FeeType.FUEL_FEE);
//飞机票费 //飞机票费
RemoteSaveOrder.Fee planeTicket = new RemoteSaveOrder.Fee() RemoteSaveOrder.Fee planeTicket = new RemoteSaveOrder.Fee()
.setFeeDesc("飞机票") .setFeeDesc("飞机票")
.setFeeAmount(detail.getSalePrice()) .setFeeAmount(Optional.ofNullable(detail.getSalePrice()).orElse(BigDecimal.ZERO))
.setFeeType(FeeType.AIRPLANE_TICKET_FEE); .setFeeType(FeeType.AIRPLANE_TICKET_FEE);
return new RemoteSaveOrder() return new RemoteSaveOrder()
.setFeeList(List.of(insuranceFee, serviceFee, fuelFee, planeTicket)); .setFeeList(List.of(insuranceFee, serviceFee, fuelFee, planeTicket));
......
...@@ -10,7 +10,9 @@ import org.dromara.order.api.enums.FeeType; ...@@ -10,7 +10,9 @@ import org.dromara.order.api.enums.FeeType;
import org.dromara.server.service.IOrderStrategy; import org.dromara.server.service.IOrderStrategy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Optional;
/** /**
* 用车订单策略 * 用车订单策略
...@@ -31,17 +33,17 @@ public class CarOrderStrategy implements IOrderStrategy { ...@@ -31,17 +33,17 @@ public class CarOrderStrategy implements IOrderStrategy {
// 罚金 // 罚金
RemoteSaveOrder.Fee fineFee = new RemoteSaveOrder.Fee() RemoteSaveOrder.Fee fineFee = new RemoteSaveOrder.Fee()
.setFeeDesc("罚金") .setFeeDesc("罚金")
.setFeeAmount(detail.getFine()) .setFeeAmount(Optional.ofNullable(detail.getFine()).orElse(BigDecimal.ZERO))
.setFeeType(FeeType.CAR_FINE); .setFeeType(FeeType.CAR_FINE);
//服务费 //服务费
RemoteSaveOrder.Fee serviceFee = new RemoteSaveOrder.Fee() RemoteSaveOrder.Fee serviceFee = new RemoteSaveOrder.Fee()
.setFeeDesc("服务费") .setFeeDesc("服务费")
.setFeeAmount(detail.getServiceFee()) .setFeeAmount(Optional.ofNullable(detail.getServiceFee()).orElse(BigDecimal.ZERO))
.setFeeType(FeeType.CLOUD_SERVICE_FEE); .setFeeType(FeeType.CLOUD_SERVICE_FEE);
//火车票费 //火车票费
RemoteSaveOrder.Fee carFee = new RemoteSaveOrder.Fee() RemoteSaveOrder.Fee carFee = new RemoteSaveOrder.Fee()
.setFeeDesc("用车费") .setFeeDesc("用车费")
.setFeeAmount(detail.getUseVehicleFee()) .setFeeAmount(Optional.ofNullable(detail.getUseVehicleFee()).orElse(BigDecimal.ZERO))
.setFeeType(FeeType.CAR_FEE); .setFeeType(FeeType.CAR_FEE);
return new RemoteSaveOrder() return new RemoteSaveOrder()
.setFeeList(List.of(fineFee, serviceFee, carFee)); .setFeeList(List.of(fineFee, serviceFee, carFee));
......
...@@ -10,7 +10,9 @@ import org.dromara.order.api.enums.FeeType; ...@@ -10,7 +10,9 @@ import org.dromara.order.api.enums.FeeType;
import org.dromara.server.service.IOrderStrategy; import org.dromara.server.service.IOrderStrategy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Optional;
/** /**
* 酒店订单策略 * 酒店订单策略
...@@ -31,12 +33,12 @@ public class HotelOrderStrategy implements IOrderStrategy { ...@@ -31,12 +33,12 @@ public class HotelOrderStrategy implements IOrderStrategy {
// 保险金额 // 保险金额
RemoteSaveOrder.Fee hotelFee = new RemoteSaveOrder.Fee() RemoteSaveOrder.Fee hotelFee = new RemoteSaveOrder.Fee()
.setFeeDesc("房费") .setFeeDesc("房费")
.setFeeAmount(detail.getSalePrice()) .setFeeAmount(Optional.ofNullable(detail.getSalePrice()).orElse(BigDecimal.ZERO))
.setFeeType(FeeType.INSURANCE_FEE); .setFeeType(FeeType.INSURANCE_FEE);
//服务费 //服务费
RemoteSaveOrder.Fee serviceFee = new RemoteSaveOrder.Fee() RemoteSaveOrder.Fee serviceFee = new RemoteSaveOrder.Fee()
.setFeeDesc("服务费") .setFeeDesc("服务费")
.setFeeAmount(detail.getServiceFee()) .setFeeAmount(Optional.ofNullable(detail.getServiceFee()).orElse(BigDecimal.ZERO))
.setFeeType(FeeType.CLOUD_SERVICE_FEE); .setFeeType(FeeType.CLOUD_SERVICE_FEE);
return new RemoteSaveOrder() return new RemoteSaveOrder()
.setFeeList(List.of(hotelFee, serviceFee)); .setFeeList(List.of(hotelFee, serviceFee));
......
...@@ -11,7 +11,9 @@ import org.dromara.order.api.enums.FeeType; ...@@ -11,7 +11,9 @@ import org.dromara.order.api.enums.FeeType;
import org.dromara.server.service.IOrderStrategy; import org.dromara.server.service.IOrderStrategy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Optional;
/** /**
* 火车票订单策略 * 火车票订单策略
...@@ -32,17 +34,17 @@ public class TrainOrderStrategy implements IOrderStrategy { ...@@ -32,17 +34,17 @@ public class TrainOrderStrategy implements IOrderStrategy {
// 保险金额 // 保险金额
RemoteSaveOrder.Fee insuranceFee = new RemoteSaveOrder.Fee() RemoteSaveOrder.Fee insuranceFee = new RemoteSaveOrder.Fee()
.setFeeDesc("保险费") .setFeeDesc("保险费")
.setFeeAmount(detail.getInsureAmount()) .setFeeAmount(Optional.ofNullable(detail.getInsureAmount()).orElse(BigDecimal.ZERO))
.setFeeType(FeeType.HOTEL_FEE); .setFeeType(FeeType.HOTEL_FEE);
//服务费 //服务费
RemoteSaveOrder.Fee serviceFee = new RemoteSaveOrder.Fee() RemoteSaveOrder.Fee serviceFee = new RemoteSaveOrder.Fee()
.setFeeDesc("服务费") .setFeeDesc("服务费")
.setFeeAmount(detail.getServiceChargePrice()) .setFeeAmount(Optional.ofNullable(detail.getServiceChargePrice()).orElse(BigDecimal.ZERO))
.setFeeType(FeeType.CLOUD_SERVICE_FEE); .setFeeType(FeeType.CLOUD_SERVICE_FEE);
//火车票费 //火车票费
RemoteSaveOrder.Fee railTicket = new RemoteSaveOrder.Fee() RemoteSaveOrder.Fee railTicket = new RemoteSaveOrder.Fee()
.setFeeDesc("火车票费") .setFeeDesc("火车票费")
.setFeeAmount(detail.getTicketPrice()) .setFeeAmount(Optional.ofNullable(detail.getTicketPrice()).orElse(BigDecimal.ZERO))
.setFeeType(FeeType.RAIL_TICKET_FEE); .setFeeType(FeeType.RAIL_TICKET_FEE);
return new RemoteSaveOrder() return new RemoteSaveOrder()
.setFeeList(List.of(insuranceFee, serviceFee, railTicket)); .setFeeList(List.of(insuranceFee, serviceFee, railTicket));
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论