初始化代码
This commit is contained in:
parent
aea8ca7f0c
commit
fb5c0d1e60
|
@ -1,17 +1,15 @@
|
|||
package com.chint.application.commands;
|
||||
|
||||
import com.chint.domain.value_object.ApproveLegData;
|
||||
import com.chint.domain.value_object.FinishLegData;
|
||||
import com.chint.infrastructure.echo_framework.command.Command;
|
||||
import lombok.Data;
|
||||
|
||||
import static com.chint.infrastructure.constant.Constant.LEG_EVENT_APPROVAL;
|
||||
import static com.chint.infrastructure.constant.Constant.LEG_EVENT_FINISH;
|
||||
|
||||
@Data
|
||||
public class LegFinishedCommand extends Command {
|
||||
private Integer LegEventType = LEG_EVENT_FINISH;
|
||||
private Long LegId;
|
||||
private final Integer legEventType = LEG_EVENT_FINISH;
|
||||
private Long legId;
|
||||
private FinishLegData data;
|
||||
|
||||
public LegFinishedCommand legId(Long LegId) {
|
||||
|
|
|
@ -1,27 +1,24 @@
|
|||
package com.chint.application.commands;
|
||||
|
||||
import com.chint.domain.value_object.ApproveLegData;
|
||||
import com.chint.domain.value_object.FinishLegData;
|
||||
import com.chint.domain.value_object.OrderLegData;
|
||||
import com.chint.infrastructure.echo_framework.command.Command;
|
||||
import lombok.Data;
|
||||
|
||||
import static com.chint.infrastructure.constant.Constant.LEG_EVENT_APPROVAL;
|
||||
import static com.chint.infrastructure.constant.Constant.LEG_EVENT_ORDERED;
|
||||
|
||||
@Data
|
||||
public class LegOrderedCommand extends Command {
|
||||
private Integer LegEventType = LEG_EVENT_ORDERED;
|
||||
private Long LegId;
|
||||
private OrderLegData data;
|
||||
private Long orderDetailId;
|
||||
|
||||
public LegOrderedCommand legId(Long LegId) {
|
||||
this.setLegId(LegId);
|
||||
return this;
|
||||
}
|
||||
|
||||
public LegOrderedCommand data(OrderLegData data) {
|
||||
this.data = data;
|
||||
public LegOrderedCommand orderDetailId(Long orderDetailId) {
|
||||
this.setOrderDetailId(orderDetailId);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,25 @@
|
|||
package com.chint.application.commands;
|
||||
|
||||
import com.chint.domain.value_object.ApproveLegData;
|
||||
import com.chint.domain.value_object.RejectLegData;
|
||||
import com.chint.infrastructure.echo_framework.command.Command;
|
||||
import lombok.Data;
|
||||
|
||||
import static com.chint.infrastructure.constant.Constant.LEG_EVENT_NOT_ORDERED;
|
||||
import static com.chint.infrastructure.constant.Constant.LEG_EVENT_REJECT;
|
||||
|
||||
@Data
|
||||
public class LegRejectCommand extends Command {
|
||||
private Integer LegEventType = LEG_EVENT_NOT_ORDERED;
|
||||
private final Integer legEventType = LEG_EVENT_REJECT;
|
||||
private Long routeId;
|
||||
private RejectLegData data;
|
||||
|
||||
public LegRejectCommand routeId(Long routeId) {
|
||||
this.setRouteId(routeId);
|
||||
return this;
|
||||
}
|
||||
|
||||
public LegRejectCommand data(RejectLegData data) {
|
||||
this.data = data;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
package com.chint.application.commands;
|
||||
|
||||
import com.chint.domain.value_object.OrderLegData;
|
||||
import com.chint.infrastructure.echo_framework.command.Command;
|
||||
import lombok.Data;
|
||||
|
||||
import static com.chint.infrastructure.constant.Constant.LEG_EVENT_ORDERED;
|
||||
|
||||
@Data
|
||||
public class RouteAddOrderCommand extends Command {
|
||||
private Integer LegEventType = LEG_EVENT_ORDERED;
|
||||
private OrderLegData data;
|
||||
public RouteAddOrderCommand data(OrderLegData data) {
|
||||
this.data = data;
|
||||
return this;
|
||||
}
|
||||
}
|
|
@ -51,4 +51,20 @@ public class OrderController {
|
|||
return Result.Success(SUCCESS);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@ApiOperation("修改规划节点关联的订单")
|
||||
@PostMapping("/leg/update")
|
||||
public Result<String> updateLegOrder(@RequestBody UpdateLegData updateLegData) {
|
||||
orderApplicationService.orderedToLeg(updateLegData);
|
||||
return Result.Success(SUCCESS);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@ApiOperation("审批拒绝行程规划单")
|
||||
@PostMapping("/reject")
|
||||
public Result<String> rejectOrder(@RequestBody RejectLegData rejectLegData) {
|
||||
orderApplicationService.reject(rejectLegData);
|
||||
return Result.Success(SUCCESS);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ package com.chint.application.out;
|
|||
import com.chint.application.services.SupplierLoginService;
|
||||
import com.chint.infrastructure.util.Result;
|
||||
import com.chint.interfaces.rest.ctrip.dto.login.H5Response;
|
||||
import com.chint.interfaces.rest.ctrip.dto.login.PCResponse;
|
||||
import com.chint.interfaces.rest.ly.dto.login.LYRedirectUrlResponse;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
@ -20,7 +21,7 @@ public class SupplierLoginController {
|
|||
@Autowired
|
||||
private SupplierLoginService supplierLoginService;
|
||||
|
||||
@ApiOperation("单点登录同程")
|
||||
@ApiOperation("单点登录同程-移动")
|
||||
@PostMapping("/ly/login")
|
||||
public Result<LYRedirectUrlResponse> lyLogin() {
|
||||
//登录
|
||||
|
@ -28,10 +29,24 @@ public class SupplierLoginController {
|
|||
return Result.Success(SUCCESS, data);
|
||||
}
|
||||
|
||||
@ApiOperation("单点登录携程")
|
||||
@ApiOperation("单点登录同程-PC")
|
||||
@PostMapping("/ly/login/pc")
|
||||
public Result<LYRedirectUrlResponse> lyLoginPC() {
|
||||
//登录
|
||||
LYRedirectUrlResponse data = supplierLoginService.lyLoginPC();
|
||||
return Result.Success(SUCCESS, data);
|
||||
}
|
||||
|
||||
@ApiOperation("单点登录携程-移动")
|
||||
@PostMapping("/CTrip/login")
|
||||
public Result<H5Response> cTripLogin() {
|
||||
return Result.Success(SUCCESS, supplierLoginService.cTripLogin());
|
||||
}
|
||||
|
||||
@ApiOperation("单点登录携程-PC")
|
||||
@PostMapping("/CTrip/login/pc")
|
||||
public Result<PCResponse> cTripLoginPC() {
|
||||
return Result.Success(SUCCESS, supplierLoginService.cTripLoginPC());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package com.chint.application.services;
|
||||
|
||||
import com.chint.application.commands.*;
|
||||
import com.chint.domain.aggregates.order.Leg;
|
||||
import com.chint.domain.aggregates.order.RouteOrder;
|
||||
import com.chint.domain.exceptions.NotFoundException;
|
||||
import com.chint.domain.exceptions.OrderException;
|
||||
import com.chint.domain.factoriy.leg.LegFactory;
|
||||
import com.chint.domain.factoriy.order.OrderFactory;
|
||||
import com.chint.domain.repository.RouteRepository;
|
||||
|
@ -16,7 +16,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||
|
||||
import java.util.Optional;
|
||||
|
||||
import static com.chint.infrastructure.constant.Constant.NOT_FOUND;
|
||||
import static com.chint.infrastructure.constant.Constant.*;
|
||||
|
||||
@Service
|
||||
public class OrderApplicationService {
|
||||
|
@ -37,18 +37,18 @@ public class OrderApplicationService {
|
|||
public RouteOrder saveOrder(OrderSaveData orderSaveData) {
|
||||
RouteOrder order;
|
||||
if (orderSaveData.getRouteId() != null) {
|
||||
order = Optional.ofNullable(routeRepository.queryById(orderSaveData.getRouteId()))
|
||||
.orElseThrow(() -> new NotFoundException(NOT_FOUND));
|
||||
order = Optional.ofNullable(routeRepository.queryById(orderSaveData.getRouteId())).orElseThrow(() -> new NotFoundException(NOT_FOUND));
|
||||
order.reloadStatus(orderSaveData, legFactory);
|
||||
if (!order.getOrderStatus().equals(ORDER_STATUS_PREPARE)) {
|
||||
throw new OrderException(DATA_INVALID);
|
||||
}
|
||||
} else {
|
||||
// order = orderFactory.createOrder(orderSaveData);
|
||||
throw new NotFoundException(NOT_FOUND);
|
||||
}
|
||||
RouteOrder routeOrder = orderDomainService.saveOrder(order);
|
||||
//这里保存订单之后,需要为每个新添加的leg执行规划中事件
|
||||
routeOrder.getLegItems().forEach(leg ->
|
||||
Command.of(LegPrepareCommand.class).legId(leg.getLegId()).sendToQueue()
|
||||
);
|
||||
routeOrder.getLegItems().forEach(leg -> Command.of(LegPrepareCommand.class).legId(leg.getLegId()).sendToQueue());
|
||||
return routeOrder;
|
||||
}
|
||||
|
||||
|
@ -63,17 +63,30 @@ public class OrderApplicationService {
|
|||
}
|
||||
|
||||
@Transactional
|
||||
public void ordered(Long legId, OrderLegData data){
|
||||
Command.of(LegOrderedCommand.class).legId(legId).data(data).sendToQueue();
|
||||
public void ordered(OrderLegData data) {
|
||||
Command.of(RouteAddOrderCommand.class).data(data).sendToQueue();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void payed(Long legId, PayLegData data){
|
||||
public void orderedToLeg(UpdateLegData updateLegData) {
|
||||
Command.of(LegOrderedCommand.class)
|
||||
.legId(updateLegData.getLegId())
|
||||
.orderDetailId(updateLegData.getOrderDetailId())
|
||||
.sendToQueue();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void payed(Long legId, PayLegData data) {
|
||||
Command.of(LegPayedCommand.class).legId(legId).data(data).sendToQueue();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void finished(Long legId, FinishLegData data){
|
||||
public void finished(Long legId, FinishLegData data) {
|
||||
Command.of(LegFinishedCommand.class).legId(legId).data(data).sendToQueue();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void reject(RejectLegData data) {
|
||||
Command.of(LegRejectCommand.class).data(data).sendToQueue();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,10 +2,12 @@ package com.chint.application.services;
|
|||
|
||||
import com.chint.interfaces.rest.ctrip.CTripLoginRequest;
|
||||
import com.chint.interfaces.rest.ctrip.dto.login.H5Response;
|
||||
import com.chint.interfaces.rest.ctrip.dto.login.PCResponse;
|
||||
import com.chint.interfaces.rest.ly.LYLoginRequest;
|
||||
import com.chint.interfaces.rest.ly.dto.login.LYRedirectUrlResponse;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.yaml.snakeyaml.extensions.compactnotation.PackageCompactConstructor;
|
||||
|
||||
import static com.chint.infrastructure.constant.Constant.L_Y_ENTRANCE_HOME;
|
||||
|
||||
|
@ -15,7 +17,6 @@ public class SupplierLoginService {
|
|||
@Autowired
|
||||
private LYLoginRequest lyLoginRequest;
|
||||
|
||||
|
||||
@Autowired
|
||||
private CTripLoginRequest cTripLoginRequest;
|
||||
|
||||
|
@ -26,7 +27,14 @@ public class SupplierLoginService {
|
|||
return lyLoginRequest.login(L_Y_ENTRANCE_HOME);
|
||||
}
|
||||
|
||||
public LYRedirectUrlResponse lyLoginPC() {
|
||||
return lyLoginRequest.loginPC(L_Y_ENTRANCE_HOME);
|
||||
}
|
||||
|
||||
public H5Response cTripLogin() {
|
||||
return cTripLoginRequest.hSingleLogin();
|
||||
}
|
||||
public PCResponse cTripLoginPC() {
|
||||
return cTripLoginRequest.authLogin();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,10 +52,13 @@ public class Leg {
|
|||
private Integer legStatus;
|
||||
@Transient
|
||||
private String legStatusName;
|
||||
@Transient
|
||||
private OrderDetail orderDetail; //这个属性不做持久化保存 ,根据下单事件进行获取
|
||||
|
||||
@MappedCollection(idColumn = "leg_id", keyColumn = "leg_key")
|
||||
private List<LegEvent> eventList;
|
||||
|
||||
|
||||
public Leg(Long legId) {
|
||||
this.legId = legId;
|
||||
}
|
||||
|
@ -84,8 +87,17 @@ public class Leg {
|
|||
this.legStatus = latestEvent.getEventType();
|
||||
|
||||
// If the latest event is an order event, update the amount
|
||||
if (latestEvent.getEventType().equals(LEG_EVENT_ORDERED)) {
|
||||
this.amount = latestEvent.getOrderDetail().getAmount();
|
||||
if (latestEvent.getEventType() >= LEG_EVENT_ORDERED) {
|
||||
//获取最新的下单事件
|
||||
LegEvent latestOrderEvent = this.eventList
|
||||
.stream()
|
||||
.filter(legEvent -> legEvent.getEventType().equals(LEG_EVENT_ORDERED))
|
||||
.max(Comparator.comparingLong(LegEvent::getLegEventId))
|
||||
.orElse(null);
|
||||
Optional.ofNullable(latestOrderEvent.getOrderDetail()).ifPresent(detail -> {
|
||||
this.amount = detail.getPrice();
|
||||
this.orderDetail = detail;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -152,17 +164,17 @@ public class Leg {
|
|||
}
|
||||
|
||||
// 事件类型为负数,代表是可以任何时机都可进行的事件
|
||||
if(event.getEventType() < 0) {
|
||||
if (event.getEventType() < 0) {
|
||||
eventList.add(event);
|
||||
return this;
|
||||
}
|
||||
|
||||
// 如果列表不为空,确保新事件的类型是按顺序的
|
||||
// 如果列表不为空,确保新事件的类型是按顺序的或者与最后一个事件类型相同
|
||||
if (!eventList.isEmpty()) {
|
||||
LegEvent lastEvent = eventList.get(eventList.size() - 1);
|
||||
int lastEventType = lastEvent.getEventType();
|
||||
if (newEventType != lastEventType + 1) {
|
||||
throw new LegEventException("Events must be added in sequence.");
|
||||
if (newEventType != lastEventType && newEventType != lastEventType + 1) {
|
||||
throw new LegEventException("New event must be the same as the last event type or the next in sequence.");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ import lombok.Data;
|
|||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.annotation.Transient;
|
||||
import org.springframework.data.relational.core.mapping.Column;
|
||||
import org.springframework.data.relational.core.mapping.Embedded;
|
||||
import org.springframework.data.relational.core.mapping.MappedCollection;
|
||||
import org.springframework.data.relational.core.mapping.Table;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
@ -25,7 +25,7 @@ public class LegEvent {
|
|||
|
||||
private LocalDateTime happenTime;
|
||||
|
||||
@Embedded.Nullable
|
||||
@MappedCollection(idColumn = "order_id")
|
||||
private OrderDetail orderDetail;
|
||||
|
||||
public String translateLegEvent(int event) {
|
||||
|
@ -40,4 +40,14 @@ public class LegEvent {
|
|||
default -> "未知事件";
|
||||
};
|
||||
}
|
||||
|
||||
public LegEvent reloadStatus() {
|
||||
this.setEventName(translateLegEvent(this.eventType));
|
||||
return this;
|
||||
}
|
||||
|
||||
public LegEvent orderDetail(OrderDetail orderDetail) {
|
||||
this.setOrderDetail(orderDetail);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,41 @@
|
|||
package com.chint.domain.aggregates.order;
|
||||
|
||||
import lombok.Data;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.relational.core.mapping.Table;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
@Table("order_detail")
|
||||
public class OrderDetail {
|
||||
|
||||
@Id
|
||||
private Long orderId; // 使用 order_id 作为主键
|
||||
private String orderNo;
|
||||
private String supplierName;
|
||||
private String productName; // 产品名称
|
||||
private Integer productType; // 商品类型
|
||||
private Integer quantity; // 数量
|
||||
private String price; // 价格
|
||||
private Long destinationId;
|
||||
private Long originId;
|
||||
private LocalDateTime startTime;
|
||||
private LocalDateTime endTime;
|
||||
private LocalDateTime createTime;
|
||||
private LocalDateTime updateTime;
|
||||
// 根据需要添加构造函数、getter、setter等
|
||||
|
||||
private String amount;
|
||||
public static OrderDetail of(String orderNo, String supplierName) {
|
||||
OrderDetail orderDetail = new OrderDetail();
|
||||
orderDetail.setOrderNo(orderNo);
|
||||
orderDetail.setSupplierName(supplierName);
|
||||
orderDetail.setCreateTime(LocalDateTime.now());
|
||||
orderDetail.setUpdateTime(LocalDateTime.now());
|
||||
return orderDetail;
|
||||
}
|
||||
|
||||
public OrderDetail productType(Integer productType) {
|
||||
this.setProductType(productType);
|
||||
return this;
|
||||
}
|
||||
}
|
|
@ -54,7 +54,10 @@ public class RouteOrder extends BaseEntity {
|
|||
private String supplierName;
|
||||
|
||||
@MappedCollection(idColumn = "route_id", keyColumn = "route_order_key")
|
||||
public List<Leg> legItems;
|
||||
private List<Leg> legItems;
|
||||
|
||||
@MappedCollection(idColumn = "route_id", keyColumn = "route_order_key")
|
||||
private List<OrderDetail> orderDetails;
|
||||
|
||||
|
||||
// public void addItemAtPosition(Leg newItem) {
|
||||
|
@ -91,6 +94,11 @@ public class RouteOrder extends BaseEntity {
|
|||
return this;
|
||||
}
|
||||
|
||||
public RouteOrder addOrderDetail(OrderDetail orderDetail) {
|
||||
this.orderDetails.add(orderDetail);
|
||||
return this;
|
||||
}
|
||||
|
||||
public RouteOrder reloadStatus() {
|
||||
this.getLegItems().forEach(Leg::reloadStatus);
|
||||
this.estimateAmount = this.getLegItems()
|
||||
|
@ -166,6 +174,8 @@ public class RouteOrder extends BaseEntity {
|
|||
this.orderStatus = 2;
|
||||
} else if (allItemsInStatus(1)) {
|
||||
this.orderStatus = 1;
|
||||
} else if (allItemsInStatus(-1)) {
|
||||
this.orderStatus = -1;
|
||||
} else {
|
||||
this.orderStatus = 0; // 或其他适当的默认状态
|
||||
}
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
package com.chint.domain.exceptions;
|
||||
|
||||
public class OrderException extends BaseException{
|
||||
public OrderException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
}
|
|
@ -3,12 +3,15 @@ package com.chint.domain.factoriy.leg_event;
|
|||
import com.chint.domain.aggregates.order.LegEvent;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Component
|
||||
public class LegEventFactoryImpl implements LegEventFactory{
|
||||
@Override
|
||||
public LegEvent creatLegEvent(Integer eventType) {
|
||||
LegEvent legEvent = new LegEvent();
|
||||
legEvent.setEventType(eventType);
|
||||
legEvent.setHappenTime(LocalDateTime.now());
|
||||
return legEvent;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
package com.chint.domain.factoriy.order_detail;
|
||||
|
||||
import com.chint.domain.aggregates.order.OrderDetail;
|
||||
import com.chint.domain.value_object.OrderLegData;
|
||||
|
||||
public interface OrderDetailFactory {
|
||||
OrderDetail create(OrderLegData orderLegData);
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.chint.domain.factoriy.order_detail;
|
||||
|
||||
import com.chint.domain.aggregates.order.OrderDetail;
|
||||
import com.chint.domain.value_object.OrderLegData;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class OrderDetailFactoryImpl implements OrderDetailFactory {
|
||||
@Override
|
||||
public OrderDetail create(OrderLegData orderLegData) {
|
||||
return OrderDetail.of(orderLegData.getOrderNo(), orderLegData.getSupplierName());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package com.chint.domain.repository;
|
||||
|
||||
import com.chint.domain.aggregates.order.OrderDetail;
|
||||
|
||||
public interface OrderDetailRepository {
|
||||
OrderDetail findById(Long orderDetailId);
|
||||
}
|
|
@ -9,6 +9,8 @@ public interface RouteRepository {
|
|||
|
||||
RouteOrder findByFakeOrderNo(String fakeOrderNo);
|
||||
|
||||
RouteOrder findByActualOrderNo(String actualOrderNo);
|
||||
|
||||
RouteOrder save(RouteOrder routeOrder);
|
||||
|
||||
PageResult<RouteOrder> pageQuery(OrderQueryData orderQueryData);
|
||||
|
|
|
@ -4,7 +4,9 @@ import com.chint.application.commands.*;
|
|||
import com.chint.domain.aggregates.order.*;
|
||||
import com.chint.domain.exceptions.CommandException;
|
||||
import com.chint.domain.factoriy.leg_event.LegEventFactory;
|
||||
import com.chint.domain.factoriy.order_detail.OrderDetailFactory;
|
||||
import com.chint.domain.repository.LegRepository;
|
||||
import com.chint.domain.repository.OrderDetailRepository;
|
||||
import com.chint.domain.repository.RouteRepository;
|
||||
import com.chint.domain.service.order_sync.SyncAdapter;
|
||||
import com.chint.domain.value_object.ApproveLegData;
|
||||
|
@ -19,7 +21,7 @@ import static com.chint.infrastructure.constant.Constant.ORDER_STATUS_APPROVAL;
|
|||
import static com.chint.infrastructure.constant.Constant.ORDER_STATUS_PREPARE;
|
||||
|
||||
@Service
|
||||
public class LegEventHandler implements LegEventService{
|
||||
public class LegEventHandler implements LegEventService {
|
||||
|
||||
@Autowired
|
||||
private SyncAdapter syncAdapter;
|
||||
|
@ -33,6 +35,12 @@ public class LegEventHandler implements LegEventService{
|
|||
@Autowired
|
||||
private LegEventFactory legEventFactory;
|
||||
|
||||
@Autowired
|
||||
private OrderDetailFactory orderDetailFactory;
|
||||
|
||||
@Autowired
|
||||
private OrderDetailRepository orderDetailRepository;
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void prepareLeg(LegPrepareCommand command) {
|
||||
|
@ -43,6 +51,7 @@ public class LegEventHandler implements LegEventService{
|
|||
legRepository.save(leg);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void approveLeg(LegApprovalCommand command) {
|
||||
|
@ -65,6 +74,7 @@ public class LegEventHandler implements LegEventService{
|
|||
throw new CommandException("订单未初始化");
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void syncLeg(LegSyncCommand command) {
|
||||
|
@ -86,19 +96,49 @@ public class LegEventHandler implements LegEventService{
|
|||
throw new CommandException("订单未提交审批");
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void routeAddOrder(RouteAddOrderCommand command) {
|
||||
OrderLegData data = command.getData();
|
||||
//首先查询到 行程规划订单 , 为形成规划订单添加 外部订单信息
|
||||
OrderDetail orderDetail = orderDetailFactory.create(data).productType(data.getProductType());
|
||||
String actualOrderNo = data.getActualOrderNo();
|
||||
RouteOrder routeOrder = routeRepository.findByActualOrderNo(actualOrderNo);
|
||||
routeOrder.addOrderDetail(orderDetail);
|
||||
//结合外部订单信息,筛选最合适的leg节点 ,触发下单事件 ;
|
||||
routeOrder.getLegItems()
|
||||
.stream()
|
||||
.filter(leg -> leg.getLegType().equals(orderDetail.getProductType())
|
||||
&& leg.getDestinationId().equals(orderDetail.getDestinationId())
|
||||
&& leg.getOriginId().equals(orderDetail.getOriginId())
|
||||
&& leg.getStartTime().isBefore(orderDetail.getStartTime())
|
||||
&& leg.getEndTime().isAfter(orderDetail.getEndTime()))
|
||||
.findFirst()
|
||||
.ifPresent(leg -> {
|
||||
LegEvent legEvent = legEventFactory.creatLegEvent(command.getLegEventType());
|
||||
legEvent.setOrderDetail(orderDetail);
|
||||
leg.addEvent(legEvent);
|
||||
});
|
||||
routeRepository.save(routeOrder);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void orderLeg(LegOrderedCommand command) {
|
||||
OrderLegData data = command.getData();
|
||||
//如果筛选事件可能会是错误,需要用户手动添加并修改事件 , 因此会进行额外出发修改下单事件。
|
||||
Leg leg = legRepository.findByLegId(Leg.of(command.getLegId()));
|
||||
LegEvent legEvent = legEventFactory.creatLegEvent(command.getLegEventType());
|
||||
OrderDetail orderDetail = new OrderDetail();
|
||||
orderDetail.setAmount(data.getOrderNo());
|
||||
orderDetail.setAmount(data.getAmount());
|
||||
legEvent.setOrderDetail(orderDetail);
|
||||
|
||||
//因为orderDetail已经进行持久化保存 ,只需要从数据库进行查询
|
||||
OrderDetail orderDetail = orderDetailRepository.findById(command.getOrderDetailId());
|
||||
LegEvent legEvent = legEventFactory
|
||||
.creatLegEvent(command.getLegEventType())
|
||||
.orderDetail(orderDetail);
|
||||
leg.addEvent(legEvent);
|
||||
|
||||
legRepository.save(leg);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void payForLeg(LegPayedCommand command) {
|
||||
|
@ -106,12 +146,11 @@ public class LegEventHandler implements LegEventService{
|
|||
Leg leg = legRepository.findByLegId(Leg.of(command.getLegId()));
|
||||
LegEvent legEvent = legEventFactory.creatLegEvent(command.getLegEventType());
|
||||
OrderDetail orderDetail = new OrderDetail();
|
||||
orderDetail.setAmount(data.getOrderNo());
|
||||
orderDetail.setAmount(data.getAmount());
|
||||
legEvent.setOrderDetail(orderDetail);
|
||||
leg.addEvent(legEvent);
|
||||
legRepository.save(leg);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void finishLeg(LegFinishedCommand command) {
|
||||
|
@ -120,9 +159,13 @@ public class LegEventHandler implements LegEventService{
|
|||
leg.addEvent(legEvent);
|
||||
legRepository.save(leg);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void rejectLeg(LegRejectCommand command) {
|
||||
|
||||
RouteOrder routeOrder = routeRepository.findByActualOrderNo(command.getData().getActualOrderNo());
|
||||
LegEvent legEvent = legEventFactory.creatLegEvent(command.getLegEventType());
|
||||
routeOrder.getLegItems().forEach(leg -> leg.addEvent(legEvent));
|
||||
routeRepository.save(routeOrder);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,19 +2,25 @@ package com.chint.domain.service.leg_event;
|
|||
|
||||
|
||||
import com.chint.application.commands.*;
|
||||
import com.chint.domain.value_object.*;
|
||||
import com.chint.infrastructure.echo_framework.command.Command;
|
||||
|
||||
public interface LegEventService {
|
||||
void prepareLeg(LegPrepareCommand command);
|
||||
|
||||
//审批事件要从bpm或其他平台接收到一个真实订单
|
||||
void approveLeg(LegApprovalCommand command);
|
||||
|
||||
void syncLeg(LegSyncCommand command);
|
||||
|
||||
//下单事件
|
||||
void orderLeg(LegOrderedCommand command);
|
||||
|
||||
void routeAddOrder(RouteAddOrderCommand command);
|
||||
|
||||
//付款
|
||||
void payForLeg(LegPayedCommand command);
|
||||
|
||||
//结束
|
||||
void finishLeg(LegFinishedCommand command);
|
||||
|
||||
void rejectLeg(LegRejectCommand command);
|
||||
}
|
|
@ -57,6 +57,12 @@ public class LegEventServiceImpl implements LegEventService {
|
|||
legEventHandler.orderLeg(command);
|
||||
}
|
||||
|
||||
@ListenTo(command = "RouteAddOrderCommand", order = 0)
|
||||
@Override
|
||||
public void routeAddOrder(RouteAddOrderCommand command) {
|
||||
legEventHandler.routeAddOrder(command);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ListenTo(command = "LegPayedCommand", order = 0)
|
||||
public void payForLeg(LegPayedCommand command) {
|
||||
|
@ -73,9 +79,6 @@ public class LegEventServiceImpl implements LegEventService {
|
|||
@Override
|
||||
@ListenTo(command = "LegRejectCommand", order = 0)
|
||||
public void rejectLeg(LegRejectCommand command) {
|
||||
// Leg leg = legRepository.findByLegId(Leg.of(command.getLegId()));
|
||||
// LegEvent legEvent = legEventFactory.creatLegEvent(command.getLegEventType());
|
||||
// leg.addEvent(legEvent);
|
||||
// legRepository.save(leg);
|
||||
legEventHandler.rejectLeg(command);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.chint.domain.service.order_sync;
|
||||
|
||||
import com.chint.domain.aggregates.order.ApproveOrderNo;
|
||||
import com.chint.domain.aggregates.order.Leg;
|
||||
import com.chint.domain.aggregates.order.RouteOrder;
|
||||
import com.chint.domain.aggregates.user.User;
|
||||
import com.chint.domain.repository.CityRepository;
|
||||
|
@ -9,16 +10,22 @@ import com.chint.domain.service.OrderDomainService;
|
|||
import com.chint.infrastructure.util.BaseContext;
|
||||
import com.chint.interfaces.rest.ctrip.CTripApprovalRequest;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.ApprovalRequest;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.ApprovalResult;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.PassengerDetail;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.air.FlightEndorsementDetail;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.hotel.HotelEndorsementDetail;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.quick.CarQuickEndorsementDetail;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.quick.RankInfo;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.train.TrainEndorsementDetail;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.chint.infrastructure.constant.Constant.LEG_TYPE_HOTEL;
|
||||
import static com.chint.infrastructure.constant.Constant.*;
|
||||
|
||||
@Component
|
||||
public class CTripOrderSyncAdapter implements SupplierOrderSync {
|
||||
|
@ -29,10 +36,6 @@ public class CTripOrderSyncAdapter implements SupplierOrderSync {
|
|||
@Autowired
|
||||
private CTripApprovalRequest approvalRequest;
|
||||
|
||||
@Autowired
|
||||
private LocationRepository locationRepository;
|
||||
|
||||
|
||||
@Autowired
|
||||
private OrderDomainService orderDomainService;
|
||||
|
||||
|
@ -42,27 +45,85 @@ public class CTripOrderSyncAdapter implements SupplierOrderSync {
|
|||
User currentUser = BaseContext.getCurrentUser();
|
||||
ApproveOrderNo approveOrderNo = order.getApproveOrderNo();
|
||||
RankInfo rankInfo = RankInfo.of(currentUser.getRankCode());
|
||||
List<String> cityCode = new ArrayList<>();
|
||||
List<HotelEndorsementDetail> hotelList = new ArrayList<>();
|
||||
orderDomainService.queryLocation(order.getLegItems())
|
||||
.forEach(
|
||||
leg -> {
|
||||
cityCode.add(
|
||||
cityRepository.findByCityName(leg.getOriginLocation().getLocationName()).getCity()
|
||||
);
|
||||
if (leg.getLegType().equals(LEG_TYPE_HOTEL)) {
|
||||
hotelList.add(
|
||||
HotelEndorsementDetail.of(cityCode.stream().distinct().toList())
|
||||
.passenger(PassengerDetail.of(String.valueOf(currentUser.getEmployeeNo())))
|
||||
.starTime(leg.getStartTime())
|
||||
.endTime(leg.getEndTime())
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
ApprovalRequest approvalRequestParam = ApprovalRequest.buildApproval(String.valueOf(currentUser.getEmployeeNo()), approveOrderNo.getActualOrderNo(), rankInfo)
|
||||
.withHotel(hotelList);
|
||||
approvalRequest.approval(approvalRequestParam);
|
||||
return false;
|
||||
Map<Integer, List<Leg>> collect = orderDomainService.queryLocation(order.getLegItems())
|
||||
.stream().collect(Collectors.groupingBy(Leg::getLegType));
|
||||
|
||||
ApprovalRequest approvalRequestParam = ApprovalRequest
|
||||
.buildApproval(approveOrderNo.getActualOrderNo(), String.valueOf(currentUser.getEmployeeNo()), rankInfo);
|
||||
|
||||
collect.forEach((k, v) -> {
|
||||
switch (k) {
|
||||
case LEG_TYPE_TRAIN -> approvalRequestParam.withTrain(generateTrainList(v));
|
||||
case LEG_TYPE_HOTEL -> approvalRequestParam.withHotel(generateHotelList(v));
|
||||
case LEG_TYPE_AIRPLANE -> approvalRequestParam.withAir(generateFilghtList(v));
|
||||
case LEG_TYPE_TAXI -> approvalRequestParam.withQuickCar(generateCarList(v));
|
||||
}
|
||||
});
|
||||
|
||||
ApprovalResult approval = approvalRequest.approval(approvalRequestParam);
|
||||
return approval.getSetApprovalResult().getStatus().getSuccess();
|
||||
}
|
||||
|
||||
private List<HotelEndorsementDetail> generateHotelList(List<Leg> legs) {
|
||||
List<HotelEndorsementDetail> hotelList = new ArrayList<>();
|
||||
legs.forEach(leg -> {
|
||||
hotelList.add(
|
||||
HotelEndorsementDetail.of(List.of(
|
||||
cityRepository.findByCityName(leg.getOriginLocation().getLocationName()).getCity()
|
||||
))
|
||||
.passenger(PassengerDetail.of(String.valueOf(BaseContext.getCurrentUser().getEmployeeNo())))
|
||||
.starTime(leg.getStartTime())
|
||||
.endTime(leg.getEndTime())
|
||||
);
|
||||
});
|
||||
return hotelList;
|
||||
}
|
||||
|
||||
private List<FlightEndorsementDetail> generateFilghtList(List<Leg> legs) {
|
||||
List<FlightEndorsementDetail> filghtList = new ArrayList<>();
|
||||
legs.forEach(leg -> {
|
||||
filghtList.add(
|
||||
FlightEndorsementDetail.of(List.of(
|
||||
cityRepository.findByCityName(leg.getOriginLocation().getLocationName()).getCity()
|
||||
), List.of(
|
||||
cityRepository.findByCityName(leg.getDestinationLocation().getLocationName()).getCity()
|
||||
))
|
||||
.passenger(PassengerDetail.of(String.valueOf(BaseContext.getCurrentUser().getEmployeeNo())))
|
||||
.starTime(leg.getStartTime())
|
||||
.endTime(leg.getEndTime())
|
||||
);
|
||||
});
|
||||
return filghtList;
|
||||
}
|
||||
|
||||
private List<TrainEndorsementDetail> generateTrainList(List<Leg> legs) {
|
||||
List<TrainEndorsementDetail> trainList = new ArrayList<>();
|
||||
legs.forEach(leg -> {
|
||||
trainList.add(
|
||||
TrainEndorsementDetail.of(List.of(
|
||||
cityRepository.findByCityName(leg.getOriginLocation().getLocationName()).getCity()
|
||||
), List.of(
|
||||
cityRepository.findByCityName(leg.getDestinationLocation().getLocationName()).getCity()
|
||||
)).passenger(PassengerDetail.of(String.valueOf(BaseContext.getCurrentUser().getEmployeeNo())))
|
||||
.starTime(leg.getStartTime())
|
||||
.endTime(leg.getEndTime())
|
||||
);
|
||||
});
|
||||
return trainList;
|
||||
}
|
||||
|
||||
private List<CarQuickEndorsementDetail> generateCarList(List<Leg> legs) {
|
||||
List<CarQuickEndorsementDetail> carList = new ArrayList<>();
|
||||
legs.forEach(leg -> {
|
||||
carList.add(
|
||||
CarQuickEndorsementDetail.of(List.of(
|
||||
cityRepository.findByCityName(leg.getOriginLocation().getLocationName()).getCity()
|
||||
)).passenger(PassengerDetail.of(String.valueOf(BaseContext.getCurrentUser().getEmployeeNo())))
|
||||
.starTime(leg.getStartTime())
|
||||
.endTime(leg.getEndTime())
|
||||
);
|
||||
});
|
||||
return carList;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@ import com.chint.domain.aggregates.order.RouteOrder;
|
|||
import com.chint.domain.aggregates.user.User;
|
||||
import com.chint.domain.repository.LocationRepository;
|
||||
import com.chint.domain.service.OrderDomainService;
|
||||
import com.chint.infrastructure.constant.Constant;
|
||||
import com.chint.infrastructure.util.BaseContext;
|
||||
import com.chint.interfaces.rest.ly.LYPostRequest;
|
||||
import com.chint.interfaces.rest.ly.dto.applyordersync.*;
|
||||
|
@ -18,21 +17,21 @@ import java.time.format.DateTimeFormatter;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static com.chint.infrastructure.constant.Constant.L_Y_BASE_URL;
|
||||
import static com.chint.infrastructure.constant.Constant.L_Y_ORDER_PATH;
|
||||
|
||||
@Component
|
||||
public class LYOrderSyncAdapter implements SupplierOrderSync {
|
||||
|
||||
@Autowired
|
||||
private LYPostRequest postRequest;
|
||||
|
||||
@Autowired
|
||||
private LocationRepository locationRepository;
|
||||
|
||||
@Autowired
|
||||
private OrderDomainService orderDomainService;
|
||||
|
||||
@Override
|
||||
public boolean syncSupplierOrder(RouteOrder order) {
|
||||
String supplierOrderSyncUrl = Constant.L_Y_BASE_URL + Constant.L_Y_ORDER_PATH;//请求地址
|
||||
String supplierOrderSyncUrl = L_Y_BASE_URL + L_Y_ORDER_PATH;//请求地址
|
||||
//1.设置订单参数
|
||||
SupplierOrderParam param = new SupplierOrderParam();//参数
|
||||
param.setOutEmployeeIdType(0);//外部员工ID类型,默认为0
|
||||
|
@ -52,9 +51,9 @@ public class LYOrderSyncAdapter implements SupplierOrderSync {
|
|||
param.setTravelDescription("同程订单");//描述信息
|
||||
param.setBookableProducts("1,3,5");//1:国内机票,2:国际机票,3:国内酒店,4:海外酒店,5:火车票,6:用车
|
||||
//2.同程的行程节点集合
|
||||
ArrayList<AOSItem> aosItems = getAosItems(order);
|
||||
List<AOSItem> aosItems = getAosItems(order);
|
||||
//3.差旅人信息
|
||||
ArrayList<AOSPerson> aosPeople = new ArrayList<>();
|
||||
List<AOSPerson> aosPeople = new ArrayList<>();
|
||||
AOSPerson aosPerson = new AOSPerson();
|
||||
aosPerson.setName(user.getName());//用户名
|
||||
aosPerson.setRelation(0);//0:内部员工,1:配偶,2:子女,3:父母,4:面试候选人,5:实习生,6:外部宾客
|
||||
|
@ -62,7 +61,7 @@ public class LYOrderSyncAdapter implements SupplierOrderSync {
|
|||
aosPerson.setOutEmployeeId(String.valueOf(user.getEmployeeNo()));//SF号(长工号)
|
||||
aosPeople.add(aosPerson);
|
||||
//4.前置差旅政策
|
||||
ArrayList<AOSPreTravelPolicy> aosPreTravelPolicies = new ArrayList<>();
|
||||
List<AOSPreTravelPolicy> aosPreTravelPolicies = new ArrayList<>();
|
||||
AOSPreTravelPolicy aosPreTravelPolicy = new AOSPreTravelPolicy();
|
||||
aosPreTravelPolicy.setPolicyCode("");//一般指客户经理提供的差旅政策标题
|
||||
aosPreTravelPolicy.setProductTypeId(0);//产品ID 1:国内机票,2:国际机票,3:国内酒店,4:海外酒店,5:火车票,6:用车
|
||||
|
@ -82,8 +81,8 @@ public class LYOrderSyncAdapter implements SupplierOrderSync {
|
|||
}
|
||||
|
||||
//同程Leg集合解析
|
||||
private ArrayList<AOSItem> getAosItems(RouteOrder order) {
|
||||
ArrayList<AOSItem> aosItems = new ArrayList<>();
|
||||
private List<AOSItem> getAosItems(RouteOrder order) {
|
||||
List<AOSItem> aosItems = new ArrayList<>();
|
||||
AOSItem aosItem = new AOSItem();
|
||||
LocalDateTime startDate = LocalDateTime.MAX;
|
||||
LocalDateTime endDate = LocalDateTime.MIN;
|
||||
|
@ -107,7 +106,6 @@ public class LYOrderSyncAdapter implements SupplierOrderSync {
|
|||
String arriveCity = leg.getDestinationLocation().getLocationName();//到达城市名
|
||||
departCityStr.append(departCity).append(",");
|
||||
arriveCityStr.append(arriveCity).append(",");
|
||||
|
||||
}
|
||||
// 移除最后一个逗号
|
||||
if (!departCityStr.isEmpty()) {
|
||||
|
|
|
@ -0,0 +1,75 @@
|
|||
package com.chint.domain.service.supplier;
|
||||
|
||||
import com.chint.domain.value_object.OrderLegData;
|
||||
import com.chint.domain.value_object.SupplierCallbackData;
|
||||
import com.chint.interfaces.rest.ctrip.dto.search.ItineraryEntity;
|
||||
import com.chint.interfaces.rest.ctrip.dto.search.SearchOrderResponse;
|
||||
import com.chint.interfaces.rest.ctrip.dto.search.car.CarOrderInfoEntity;
|
||||
import com.chint.interfaces.rest.ctrip.dto.search.flight.FlightOrderInfoEntity;
|
||||
import com.chint.interfaces.rest.ctrip.dto.search.hotel.HotelOrderInfoEntity;
|
||||
import com.chint.interfaces.rest.ctrip.dto.search.train.TrainOrderInfoEntity;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static com.chint.infrastructure.constant.Constant.*;
|
||||
|
||||
|
||||
@Component
|
||||
public class CTripOrderDataAdapter implements OrderDataAdapter {
|
||||
@Override
|
||||
public OrderLegData adapt(SupplierCallbackData supplierData) {
|
||||
//这里的查询结果的订单查询 ,需要根据订单单号来进行查询的结果,因此只会返回一个订单信息和对应的行程规划单
|
||||
SearchOrderResponse searchOrderResponse = (SearchOrderResponse) supplierData.getData();
|
||||
if (!searchOrderResponse.getItineraryList().isEmpty()) {
|
||||
ItineraryEntity itineraryEntity = searchOrderResponse.getItineraryList().get(0);
|
||||
|
||||
OrderLegData.Builder builder = OrderLegData.builder()
|
||||
.actualOrderNo(itineraryEntity.getJourneyNO())
|
||||
.supplierName(SUPPLIER_C_TRIP);
|
||||
|
||||
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private OrderLegData.Builder findSingleElementList(ItineraryEntity itineraryEntity,
|
||||
OrderLegData.Builder builder) {
|
||||
List<HotelOrderInfoEntity> hotelOrderInfoList = itineraryEntity.getHotelOrderInfoList();
|
||||
if (hotelOrderInfoList != null && hotelOrderInfoList.size() == 1) {
|
||||
HotelOrderInfoEntity hotelOrderInfoEntity = hotelOrderInfoList.get(0);
|
||||
return builder.productType(LEG_TYPE_HOTEL)
|
||||
.orderNo(hotelOrderInfoEntity.getOrderId())
|
||||
.price(hotelOrderInfoEntity.getAmount());
|
||||
}
|
||||
// 处理航班订单
|
||||
List<FlightOrderInfoEntity> flightOrderInfoList = itineraryEntity.getFlightOrderInfoList();
|
||||
if (flightOrderInfoList != null && flightOrderInfoList.size() == 1) {
|
||||
FlightOrderInfoEntity flightOrderInfo = flightOrderInfoList.get(0);
|
||||
return builder.productType(LEG_TYPE_AIRPLANE)
|
||||
.orderNo(flightOrderInfo.getBasicInfo().getOrderID())
|
||||
.price(flightOrderInfo.getFlightOrderFeeDetailList().get(0).getPayCurrency());
|
||||
}
|
||||
|
||||
// 处理火车票订单
|
||||
List<TrainOrderInfoEntity> trainOrderInfoList = itineraryEntity.getTrainOrderInfoList();
|
||||
if (trainOrderInfoList != null && trainOrderInfoList.size() == 1) {
|
||||
TrainOrderInfoEntity trainOrderInfo = trainOrderInfoList.get(0);
|
||||
return builder.productType(LEG_TYPE_TRAIN)
|
||||
.orderNo(trainOrderInfo.getBasicInfo().getOrderID())
|
||||
.price(String.valueOf(trainOrderInfo.getOrderPaymentList().get(0).getFeeAmount()));
|
||||
}
|
||||
|
||||
// 处理租车订单
|
||||
List<CarOrderInfoEntity> carOrderInfoList = itineraryEntity.getCarOrderInfoList();
|
||||
if (carOrderInfoList != null && carOrderInfoList.size() == 1) {
|
||||
CarOrderInfoEntity carOrderInfo = carOrderInfoList.get(0);
|
||||
return builder.productType(LEG_TYPE_TAXI)
|
||||
.orderNo(String.valueOf(carOrderInfo.getBasicInfo().getOrderId()))
|
||||
.price(String.valueOf(carOrderInfo.getPaymentInfoList().get(0).getAmount()));
|
||||
}
|
||||
|
||||
// 如果没有找到任何只含一个元素的列表,返回null
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.chint.domain.service.supplier;
|
||||
|
||||
import com.chint.domain.value_object.OrderLegData;
|
||||
import com.chint.domain.value_object.SupplierCallbackData;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class LYOrderDataAdapter implements OrderDataAdapter{
|
||||
@Override
|
||||
public OrderLegData adapt(SupplierCallbackData supplierData) {
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
package com.chint.domain.service.supplier;
|
||||
|
||||
import com.chint.domain.value_object.OrderLegData;
|
||||
import com.chint.domain.value_object.SupplierCallbackData;
|
||||
|
||||
public interface OrderDataAdapter {
|
||||
OrderLegData adapt(SupplierCallbackData supplierData);
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package com.chint.domain.service.supplier;
|
||||
|
||||
import com.chint.domain.exceptions.NotFoundException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import static com.chint.infrastructure.constant.Constant.*;
|
||||
|
||||
@Component
|
||||
public class OrderDataAdapterSelector {
|
||||
|
||||
@Autowired
|
||||
private CTripOrderDataAdapter cTripOrderDataAdapter;
|
||||
|
||||
@Autowired
|
||||
private LYOrderDataAdapter lyOrderDataAdapter;
|
||||
|
||||
public OrderDataAdapter of(String supplierName) {
|
||||
// 当找不到匹配的适配器时,抛出一个异常
|
||||
return switch (supplierName) {
|
||||
case SUPPLIER_C_TRIP -> cTripOrderDataAdapter;
|
||||
case SUPPLIER_L_Y -> lyOrderDataAdapter;
|
||||
default -> throw new NotFoundException(NOT_FOUND);
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package com.chint.domain.service.supplier;
|
||||
|
||||
import com.chint.domain.value_object.SupplierCallbackData;
|
||||
|
||||
public interface SupplierService {
|
||||
void handleSupplierCallback(SupplierCallbackData callbackData);
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package com.chint.domain.service.supplier;
|
||||
|
||||
import com.chint.application.commands.RouteAddOrderCommand;
|
||||
import com.chint.domain.value_object.OrderLegData;
|
||||
import com.chint.domain.value_object.SupplierCallbackData;
|
||||
import com.chint.infrastructure.echo_framework.command.Command;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class SupplierServiceImpl implements SupplierService {
|
||||
|
||||
@Autowired
|
||||
private OrderDataAdapterSelector orderDataAdapterSelector;
|
||||
|
||||
@Override
|
||||
public void handleSupplierCallback(SupplierCallbackData callbackData) {
|
||||
OrderLegData data = orderDataAdapterSelector
|
||||
.of(callbackData.getSupplierName())
|
||||
.adapt(callbackData);
|
||||
Command.of(RouteAddOrderCommand.class).data(data).sendToQueue();
|
||||
}
|
||||
}
|
|
@ -1,9 +1,69 @@
|
|||
package com.chint.domain.value_object;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class OrderLegData {
|
||||
private String actualOrderNo;
|
||||
private String orderNo;
|
||||
private String amount;
|
||||
private String supplierName;
|
||||
private Integer productType;
|
||||
private String price;
|
||||
|
||||
private OrderLegData(Builder builder) {
|
||||
this.actualOrderNo = builder.actualOrderNo;
|
||||
this.orderNo = builder.orderNo;
|
||||
this.supplierName = builder.supplierName;
|
||||
this.productType = builder.productType;
|
||||
this.price = builder.price;
|
||||
}
|
||||
|
||||
public static Builder builder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
// Builder class
|
||||
public static class Builder {
|
||||
private String actualOrderNo;
|
||||
private String orderNo;
|
||||
private String supplierName;
|
||||
private Integer productType;
|
||||
private String price;
|
||||
|
||||
public Builder() {
|
||||
}
|
||||
|
||||
public Builder actualOrderNo(String actualOrderNo) {
|
||||
this.actualOrderNo = actualOrderNo;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder orderNo(String orderNo) {
|
||||
this.orderNo = orderNo;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder supplierName(String supplierName) {
|
||||
this.supplierName = supplierName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder productType(Integer productType) {
|
||||
this.productType = productType;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder price(String price) {
|
||||
this.price = price;
|
||||
return this;
|
||||
}
|
||||
|
||||
public OrderLegData build() {
|
||||
return new OrderLegData(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
package com.chint.domain.value_object;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class RejectLegData {
|
||||
// private Long routeId;
|
||||
// private String fakeOrderNo;
|
||||
private String actualOrderNo;
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package com.chint.domain.value_object;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class SupplierCallbackData {
|
||||
private String supplierName;
|
||||
private String employeeNo;
|
||||
private Object data;
|
||||
|
||||
public static SupplierCallbackData of(String supplierName) {
|
||||
SupplierCallbackData supplierCallbackData = new SupplierCallbackData();
|
||||
supplierCallbackData.setSupplierName(supplierName);
|
||||
return supplierCallbackData;
|
||||
}
|
||||
|
||||
public SupplierCallbackData data(Object data) {
|
||||
this.data = data;
|
||||
return this;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
package com.chint.domain.value_object;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class UpdateLegData {
|
||||
private Long LegId;
|
||||
private Long orderDetailId;
|
||||
}
|
|
@ -141,7 +141,8 @@ public class Constant {
|
|||
public static final String C_TRIP_CORP_ID = "zhengtai2024";
|
||||
public static final String C_TRIP_APP_KEY = "obk_zhengtai2024"; // 测试appkey
|
||||
public static final String C_TRIP_APP_SECURITY = "fI3}FZX+zUdxPa2W!R6I2gYO"; // 测试app秘钥
|
||||
public static final String C_TRIP_H5_LOGIN = "/corpservice/authorize/getticket"; // 测试app秘钥
|
||||
public static final String C_TRIP_LOGIN_TICKET = "/corpservice/authorize/getticket"; // H5单点登录的ticket获取
|
||||
public static final String C_TRIP_ORDER_SEARCH_PATH = "/switchapi/Order/SearchOrder"; // 测试app秘钥
|
||||
public static final String USER_SAVE_PATH = "/corpservice/CorpCustService/SaveCorpCustInfoList";
|
||||
public static final String HOTEL_CITY_PATH = "/corpopenapi/HotelCity/GetCountryCityExtend";
|
||||
public static final String HOTEL_COUNTRY_PATH = "/corpopenapi/HotelCity/GetCountry";
|
||||
|
@ -155,7 +156,6 @@ public class Constant {
|
|||
public static final String C_TRIP_APPROVAL_PATH = "/switchapi/approval.svc/rest/setapproval";
|
||||
public static final String C_TRIP_ESTIMATE_PATH = "/bookingrelatedservice/bookingrelatedopenapi";
|
||||
public static final String C_TRIP_TOKEN_PATH = "/dataservice/token/getAccessToken";
|
||||
public static final String C_TRIP_ORDER_SEARCH_PATH = "/switchapi/Order/SearchOrder";
|
||||
|
||||
public static final String C_TRIP_AUTH_LOGIN = "/corpservice/authorize/login";
|
||||
|
||||
|
@ -163,11 +163,18 @@ public class Constant {
|
|||
|
||||
|
||||
//同程
|
||||
public static final String L_Y_BASE_URL = "https://api.qa.dttrip.cn";
|
||||
public static final String L_Y_TOKEN_PATH = "/openapi/api/OAuth/v2/GetAccessToken";
|
||||
public static final String L_Y_ORDER_PATH = "/openapi/api/TravelApplyOrder/ApplyOrderSync";
|
||||
public static final String L_Y_USER_PATH = "/openapi/api/Employee/SyncEmployeeInfo";
|
||||
public static final String L_Y_LOGIN_PATH = "/openapi/api/Employee/SSO";
|
||||
public static final String L_Y_BASE_URL = "https://api.qa.dttrip.cn/openapi";
|
||||
public static final String L_Y_TOKEN_PATH = "/api/OAuth/v2/GetAccessToken";
|
||||
public static final String L_Y_ORDER_PATH = "/api/TravelApplyOrder/ApplyOrderSync";
|
||||
public static final String L_Y_USER_PATH = "/api/Employee/SyncEmployeeInfo";
|
||||
public static final String L_Y_LOGIN_PATH = "/api/Employee/SSO";
|
||||
public static final String L_Y_FLIGHT_LIST_PATH = "/api/DomesticFlight/GetFlightOrderList";
|
||||
public static final String L_Y_FLIGHT_DETAIL_PATH = "/api/DomesticFlight/GetFlightOrderDetail";
|
||||
public static final String L_Y_TRAIN_LIST_PATH = "/api/Train/GetTrainOrderList";
|
||||
public static final String L_Y_TRAIN_DETAIL_PATH = "/api/Train/GetTrainOrderDetail";
|
||||
public static final String L_Y_HOTEL_LIST_PATH = "/api/Hotel/GetHotelOrderList";
|
||||
public static final String L_Y_HOTEL_DETAIL_PATH = "/api/Hotel/GetHotelOrderDetail";
|
||||
public static final String L_Y_APP_ID = "zhengtai";
|
||||
public static final String L_Y_ACCOUNT = "4f9cb1080b564dd0a94aa95f7a19c8b5"; // 测试appkey
|
||||
public static final String L_Y_PASSWORD = "1fD3SutgzfS48qznYQiq"; // 测试app秘钥
|
||||
public static final String L_Y_SECRET = "WOHzCMvHd823iHgH"; // 测试app秘钥
|
||||
|
@ -183,13 +190,10 @@ public class Constant {
|
|||
public static final Integer L_Y_TRAVEL_TYPE_ALL = 0; // 全部(因公因私)
|
||||
public static final Integer L_Y_TRAVEL_TYPE_PERSON = 1; // (因公)
|
||||
public static final Integer L_Y_TRAVEL_TYPE_NO_PERSON = 2; // (因私)
|
||||
|
||||
public static final String L_Y_TRAIN_MAX_PRICE = "/openapi/api/Train/TrainHighPirceSearchByCityName";//火车票价格查询
|
||||
|
||||
public static final String L_Y_FLY_PRICE = "/openapi/api/DomesticFlight/CheckFlightOrderBookableStatus";//飞机表估算价格
|
||||
|
||||
public static final String L_Y_HOTEL_List = "/openapi/api/Hotel/GetHotelCityList"; //酒店城市列表
|
||||
public static final String L_Y_HOTEL_MIN_PRICE = "/openapi/api/Hotel/GetHotelMinPrice";//酒店估算价格
|
||||
public static final String L_Y_TRAIN_MAX_PRICE = "/api/Train/TrainHighPirceSearchByCityName";//火车票价格查询
|
||||
public static final String L_Y_FLY_PRICE = "/api/DomesticFlight/CheckFlightOrderBookableStatus";//飞机表估算价格
|
||||
public static final String L_Y_HOTEL_List = "/api/Hotel/GetHotelCityList"; //酒店城市列表
|
||||
public static final String L_Y_HOTEL_MIN_PRICE = "/api/Hotel/GetHotelMinPrice";//酒店估算价格
|
||||
|
||||
// status
|
||||
public static final int STATUS_DISABLED = 0;
|
||||
|
|
|
@ -4,6 +4,7 @@ package com.chint.infrastructure.handler;
|
|||
import com.chint.domain.exceptions.CommandException;
|
||||
import com.chint.domain.exceptions.LegEventException;
|
||||
import com.chint.domain.exceptions.NotFoundException;
|
||||
import com.chint.domain.exceptions.OrderException;
|
||||
import com.chint.infrastructure.util.Result;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
@ -29,4 +30,9 @@ public class GlobalExceptionHandler {
|
|||
public Result<String> handleCommandException(HttpServletRequest request, CommandException e) {
|
||||
return Result.error(e.getMessage());
|
||||
}
|
||||
|
||||
@ExceptionHandler(OrderException.class)
|
||||
public Result<String> handleOrderException(HttpServletRequest request, OrderException e) {
|
||||
return Result.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
package com.chint.infrastructure.repository;
|
||||
|
||||
import com.chint.domain.aggregates.order.OrderDetail;
|
||||
import com.chint.domain.exceptions.NotFoundException;
|
||||
import com.chint.domain.repository.OrderDetailRepository;
|
||||
import com.chint.infrastructure.repository.jdbc.JdbcOrderDetailRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import static com.chint.infrastructure.constant.Constant.NOT_FOUND;
|
||||
|
||||
@Repository
|
||||
public class OrderDetailRepositoryImpl implements OrderDetailRepository {
|
||||
@Autowired
|
||||
private JdbcOrderDetailRepository orderDetailRepository;
|
||||
|
||||
@Override
|
||||
public OrderDetail findById(Long orderDetailId) {
|
||||
return orderDetailRepository.findById(orderDetailId).orElseThrow(() -> new NotFoundException(NOT_FOUND));
|
||||
}
|
||||
}
|
|
@ -32,6 +32,11 @@ public class RouteRepositoryImpl implements RouteRepository {
|
|||
return jdbcRouteRepository.findByApproveOrderNo_FakeOrderNo(fakeOrderNo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RouteOrder findByActualOrderNo(String actualOrderNo) {
|
||||
return jdbcRouteRepository.findByApproveOrderNo_ActualOrderNo(actualOrderNo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RouteOrder save(RouteOrder routeOrder) {
|
||||
return jdbcRouteRepository.save(routeOrder);
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
package com.chint.infrastructure.repository.jdbc;
|
||||
|
||||
import com.chint.domain.aggregates.order.OrderDetail;
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface JdbcOrderDetailRepository extends CrudRepository<OrderDetail, Long> {
|
||||
}
|
|
@ -14,4 +14,6 @@ public interface JdbcRouteRepository extends CrudRepository<RouteOrder, Long> {
|
|||
|
||||
RouteOrder findByApproveOrderNo_FakeOrderNo(String approveOrderNo_fakeOrderNo);
|
||||
|
||||
RouteOrder findByApproveOrderNo_ActualOrderNo(String approveOrderNo_actualOrderNo);
|
||||
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.chint.interfaces.rest.ctrip;
|
|||
|
||||
import com.chint.interfaces.rest.base.PostRequest;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.ApprovalRequest;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.ApprovalRequestOut;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.ApprovalResult;
|
||||
import com.chint.interfaces.rest.ctrip.dto.Authentication;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
@ -21,9 +22,11 @@ public class CTripApprovalRequest {
|
|||
private PostRequest postRequest;
|
||||
|
||||
public ApprovalResult approval(ApprovalRequest approvalRequest) {
|
||||
ApprovalRequestOut approvalRequestOut = new ApprovalRequestOut();
|
||||
approvalRequestOut.setRequest(approvalRequest);
|
||||
String ticket = ticketRequest.loadTicket();
|
||||
approvalRequest.setStatus(0);
|
||||
approvalRequest.setStatus(1);
|
||||
approvalRequest.setAuth(Authentication.of(C_TRIP_APP_KEY, ticket));
|
||||
return postRequest.post(approvalUrl, approvalRequest, ApprovalResult.class);
|
||||
return postRequest.post(approvalUrl, approvalRequestOut, ApprovalResult.class);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,7 +49,7 @@ public class CTripLoginRequest {
|
|||
//H5单点登录
|
||||
private String singleLoginUrl = C_TRIP_BASE_URL + C_TRIP_SINGLE_LOGIN;
|
||||
|
||||
private String singleTokenUrl = C_TRIP_BASE_URL + C_TRIP_H5_LOGIN;
|
||||
private String singleTokenUrl = C_TRIP_BASE_URL + C_TRIP_LOGIN_TICKET;
|
||||
private String IDPEntityID = C_TRIP_ENTITY_ID;
|
||||
private String corpId = C_TRIP_CORP_ID;
|
||||
|
||||
|
@ -59,16 +59,19 @@ public class CTripLoginRequest {
|
|||
}
|
||||
|
||||
|
||||
public HttpResponse authLogin(CTripAuthLoginParam authLoginParam) {
|
||||
|
||||
String ticket = ticketRequest.loadTicket();
|
||||
String token = tokenRequest.getToken();
|
||||
authLoginParam.setTicket(ticket);
|
||||
public PCResponse authLogin() {
|
||||
User currentUser = BaseContext.getCurrentUser();
|
||||
String employeeId = String.valueOf(
|
||||
currentUser.getEmployeeNo()
|
||||
);
|
||||
CTripAuthLoginParam authLoginParam = CTripAuthLoginParam.of(String.valueOf(
|
||||
employeeId
|
||||
));
|
||||
authLoginParam.setForCorp(0);
|
||||
String ticket = loadLoginToken();
|
||||
|
||||
String appKey = C_TRIP_APP_KEY;
|
||||
String uid = StringUtils.isNotBlank(authLoginParam.getUID()) ? authLoginParam.getUID() : "";
|
||||
|
||||
String employeeId = StringUtils.isNotBlank(authLoginParam.getEmployeeID()) ? authLoginParam.getEmployeeID() : "";
|
||||
String email = StringUtils.isNotBlank(authLoginParam.getEmail()) ? authLoginParam.getEmail() : "";
|
||||
String ta = StringUtils.isNotBlank(authLoginParam.getTA()) ? authLoginParam.getTA() : "";
|
||||
Integer forCorp = authLoginParam.getForCorp() == null ? authLoginParam.getForCorp() : 0;
|
||||
|
@ -96,23 +99,25 @@ public class CTripLoginRequest {
|
|||
Digest.md5(appKey + uid + employeeId + email + ta + forCopStr + cost1 + cost2 + cost3 + mdAppSecurity);
|
||||
|
||||
authLoginParam.setSignature(finallySign);
|
||||
// Result post = postRequest.post(authLoginUrl, authLoginParam, Result.class);
|
||||
|
||||
// HttpClient client = HttpClients.createDefault();
|
||||
HttpPost httpPost = new HttpPost(authLoginUrl);
|
||||
List entitys = new ArrayList<>();
|
||||
entitys.add(new BasicNameValuePair("AppKey", appKey));
|
||||
entitys.add(new BasicNameValuePair("Token", token));
|
||||
entitys.add(new BasicNameValuePair("Ticket", ticket));
|
||||
entitys.add(new BasicNameValuePair("EmployeeID", employeeId));
|
||||
entitys.add(new BasicNameValuePair("Signature", finallySign));
|
||||
entitys.add(new BasicNameValuePair("ForCorp", "0"));
|
||||
entitys.add(new BasicNameValuePair("ForCorp", String.valueOf(authLoginParam.getForCorp())));
|
||||
|
||||
try {
|
||||
httpPost.setEntity(new UrlEncodedFormEntity(entitys));
|
||||
HttpClient client = new DefaultHttpClient();
|
||||
try {
|
||||
return client.execute(httpPost);
|
||||
HttpResponse execute = client.execute(httpPost);
|
||||
String body = EntityUtils.toString(execute.getEntity(), "UTF-8");
|
||||
String url = getPCUrlFromHtml(body);
|
||||
PCResponse pcResponse = new PCResponse();
|
||||
pcResponse.setRedirectUrl(url);
|
||||
pcResponse.setSuccess(true);
|
||||
return pcResponse;
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
@ -121,12 +126,16 @@ public class CTripLoginRequest {
|
|||
}
|
||||
}
|
||||
|
||||
private String loadLoginToken() {
|
||||
H5LoginToken h5TokenResponse = postRequest.post(singleTokenUrl, H5TicketModel.build(), H5LoginToken.class);
|
||||
return h5TokenResponse.getToken();
|
||||
}
|
||||
|
||||
|
||||
public H5Response hSingleLogin() {
|
||||
CTripHSingleLoginParam hSingleLoginParam = new CTripHSingleLoginParam();
|
||||
User currentUser = BaseContext.getCurrentUser();
|
||||
H5LoginToken h5TokenResponse = postRequest.post(singleTokenUrl, H5TicketModel.build(), H5LoginToken.class);
|
||||
String token = h5TokenResponse.getToken();
|
||||
String token = loadLoginToken();
|
||||
String accessUserId = C_TRIP_APP_KEY;
|
||||
String employeeId = String.valueOf(currentUser.getEmployeeNo());
|
||||
String corpPayType = StringUtils.isNotBlank(hSingleLoginParam.getCorpPayType()) ?
|
||||
|
@ -242,4 +251,35 @@ public class CTripLoginRequest {
|
|||
throw new NotFoundException(NOT_FOUND);
|
||||
}
|
||||
}
|
||||
|
||||
private static String getPCUrlFromHtml(String htmlContent) {
|
||||
// 正则表达式匹配 action URL
|
||||
Pattern actionPattern = Pattern.compile("action=\"(.*?)\"");
|
||||
Matcher actionMatcher = actionPattern.matcher(htmlContent);
|
||||
String actionUrl = "";
|
||||
if (actionMatcher.find()) {
|
||||
actionUrl = actionMatcher.group(1); // 获取 action URL
|
||||
}
|
||||
|
||||
// 正则表达式匹配所有隐藏的 input 元素
|
||||
Pattern inputPattern = Pattern.compile("<input type=\"hidden\" name=\"(.*?)\" value=\"(.*?)\" />");
|
||||
Matcher inputMatcher = inputPattern.matcher(htmlContent);
|
||||
|
||||
StringBuilder urlBuilder = new StringBuilder(actionUrl);
|
||||
boolean isFirstParam = true;
|
||||
|
||||
while (inputMatcher.find()) {
|
||||
if (isFirstParam) {
|
||||
urlBuilder.append("?"); // 第一个参数前添加 ?
|
||||
isFirstParam = false;
|
||||
} else {
|
||||
urlBuilder.append("&"); // 后续参数前添加 &
|
||||
}
|
||||
urlBuilder.append(inputMatcher.group(1)) // 添加参数名
|
||||
.append("=")
|
||||
.append(inputMatcher.group(2)); // 添加参数值
|
||||
}
|
||||
|
||||
return urlBuilder.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
package com.chint.interfaces.rest.ctrip;
|
||||
|
||||
import com.chint.interfaces.rest.base.PostRequest;
|
||||
import com.chint.interfaces.rest.ctrip.dto.search.SearchOrderRequest;
|
||||
import com.chint.interfaces.rest.ctrip.dto.search.SearchOrderResponse;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import static com.chint.infrastructure.constant.Constant.*;
|
||||
|
||||
@Service
|
||||
public class CTripOrderSearchRequest {
|
||||
private String searchUrl = C_TRIP_BASE_URL + C_TRIP_ORDER_SEARCH_PATH;
|
||||
|
||||
@Autowired
|
||||
private PostRequest postRequest;
|
||||
|
||||
@Autowired
|
||||
private CTripTicketRequest ticketRequest;
|
||||
|
||||
public SearchOrderResponse searchOrder(String journeyNo) {
|
||||
String ticket = ticketRequest.loadTicket();
|
||||
SearchOrderRequest request = SearchOrderRequest
|
||||
.builder()
|
||||
.authInfo()
|
||||
.details(C_TRIP_APP_KEY, ticket)
|
||||
.done()
|
||||
.language(LANGUAGE_CN)
|
||||
.journeyNo(journeyNo)
|
||||
.done();
|
||||
return postRequest.post(searchUrl, request, SearchOrderResponse.class);
|
||||
}
|
||||
}
|
|
@ -6,8 +6,8 @@ import lombok.Data;
|
|||
@Data
|
||||
@AllArgsConstructor
|
||||
public class Authentication {
|
||||
private String appKey;
|
||||
private String ticket;
|
||||
private String AppKey;
|
||||
private String Ticket;
|
||||
// Getters and setters...
|
||||
|
||||
public static Authentication of(String appKey, String ticket) {
|
||||
|
|
|
@ -18,108 +18,109 @@ import java.util.List;
|
|||
public class ApprovalRequest {
|
||||
// 审批单号 - 必填
|
||||
// OA审批通过时生成,同步审批单编号,用于标识审批单
|
||||
private String approvalNumber;
|
||||
private String ApprovalNumber;
|
||||
|
||||
// 状态 - 必填
|
||||
// 0为审批中,1为审批通过,2为审批拒绝
|
||||
private int status;
|
||||
// 1
|
||||
private int Status;
|
||||
|
||||
// 携程卡号 - 非必填
|
||||
// N表示非必填,多个携程卡号以逗号隔开,长度不能超过500个字符且不重复。
|
||||
private String ctripCardNO;
|
||||
private String CtripCardNO;
|
||||
|
||||
// 员工编号 - 非必填
|
||||
// N表示非必填,多个员工编号以逗号隔开,长度不能超过500个字符且不重复。
|
||||
private String employeeID;
|
||||
private String EmployeeID;
|
||||
|
||||
// 机票背书信息详情列表 - 必填
|
||||
// Y表示必填项,用于记录一条审批单中的一条或多条航班信息,详细信息格式见3.3.2节的JSON数据交互格式详细说明。
|
||||
private List<FlightEndorsementDetail> flightEndorsementDetails;
|
||||
private List<FlightEndorsementDetail> FlightEndorsementDetails;
|
||||
|
||||
// 酒店背书信息详情列表 - 必填
|
||||
// Y表示必填项。
|
||||
private List<HotelEndorsementDetail> hotelEndorsementDetails;
|
||||
private List<HotelEndorsementDetail> HotelEndorsementDetails;
|
||||
|
||||
// 火车背书信息详情列表 - 必填
|
||||
// Y表示必填项。
|
||||
private List<TrainEndorsementDetail> trainEndorsementDetails;
|
||||
private List<TrainEndorsementDetail> TrainEndorsementDetails;
|
||||
|
||||
// 租车背书信息详情列表 - 必填
|
||||
// Y表示必填项。
|
||||
private List<CarQuickEndorsementDetail> carQuickEndorsementDetails;
|
||||
private List<CarQuickEndorsementDetail> CarQuickEndorsementDetails;
|
||||
|
||||
// 接送车背书信息详情列表 - 必填
|
||||
// Y表示必填项。
|
||||
private List<CarPickUpEndorsementDetail> carPickUpEndorsementDetails;
|
||||
private List<CarPickUpEndorsementDetail> CarPickUpEndorsementDetails;
|
||||
|
||||
// 包车背书信息详情列表 - 必填
|
||||
// Y表示必填项。
|
||||
private List<CarCharterEndorsementDetail> carCharterEndorsementDetails;
|
||||
private List<CarCharterEndorsementDetail> CarCharterEndorsementDetails;
|
||||
|
||||
// 巴士背书信息详情列表 - 必填
|
||||
// Y表示必填项。
|
||||
private List<BusEndorsementDetail> busEndorsementDetails;
|
||||
private List<BusEndorsementDetail> BusEndorsementDetails;
|
||||
|
||||
// 出差计划背书信息详情列表 - 必填
|
||||
// Y表示必填项。
|
||||
private List<TravelPlanEndorsementDetail> travelPlanEndorsementDetails;
|
||||
private List<TravelPlanEndorsementDetail> TravelPlanEndorsementDetails;
|
||||
|
||||
// 有效期 - 非必填
|
||||
// 有效期格式为日期时间,起始时间从2017-01-01开始。
|
||||
private String expiredTime;
|
||||
private String ExpiredTime;
|
||||
|
||||
// 认证信息 - 非必填
|
||||
// 携程分配给客户公司,具体见下表描述。
|
||||
private Authentication auth;
|
||||
private Authentication Auth;
|
||||
|
||||
// 成本中心等扩展字段列表,非必填,如无该需求则不需要传
|
||||
// Y表示必填项。
|
||||
private List<ExtendField> extendFieldList;
|
||||
// Y表示必填项。R
|
||||
private List<ExtendField> ExtendFieldList;
|
||||
|
||||
// 备注 - 必填
|
||||
// Y表示必填项。
|
||||
private String remark;
|
||||
private String Remark;
|
||||
|
||||
// 职级信息 - 非必填
|
||||
// 职级信息(仅限于职级信息的前20)
|
||||
private RankInfo rankInfo;
|
||||
private RankInfo RankInfo;
|
||||
|
||||
public ApprovalRequest(String approvalNumber, String employeeID, RankInfo rankInfo) {
|
||||
this.approvalNumber = approvalNumber;
|
||||
this.employeeID = employeeID;
|
||||
this.rankInfo = rankInfo;
|
||||
this.ApprovalNumber = approvalNumber;
|
||||
this.EmployeeID = employeeID;
|
||||
this.RankInfo = rankInfo;
|
||||
}
|
||||
|
||||
public static ApprovalRequest buildApproval(String employeeID, String approvalNumber, RankInfo rankInfo) {
|
||||
return new ApprovalRequest(employeeID, approvalNumber, rankInfo);
|
||||
public static ApprovalRequest buildApproval(String approvalNumber, String employeeID, RankInfo rankInfo) {
|
||||
return new ApprovalRequest(approvalNumber,employeeID, rankInfo);
|
||||
}
|
||||
|
||||
public ApprovalRequest withAir(List<FlightEndorsementDetail> flightEndorsementDetails) {
|
||||
this.flightEndorsementDetails = flightEndorsementDetails;
|
||||
this.FlightEndorsementDetails = flightEndorsementDetails;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ApprovalRequest withTrain(List<HotelEndorsementDetail> hotelEndorsementDetails) {
|
||||
this.hotelEndorsementDetails = hotelEndorsementDetails;
|
||||
public ApprovalRequest withTrain(List<TrainEndorsementDetail> trainEndorsementDetails) {
|
||||
this.TrainEndorsementDetails = trainEndorsementDetails;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ApprovalRequest withBus(List<BusEndorsementDetail> busEndorsementDetails) {
|
||||
this.busEndorsementDetails = busEndorsementDetails;
|
||||
this.BusEndorsementDetails = busEndorsementDetails;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ApprovalRequest withPickCar(List<CarPickUpEndorsementDetail> carPickUpEndorsementDetails) {
|
||||
this.carPickUpEndorsementDetails = carPickUpEndorsementDetails;
|
||||
this.CarPickUpEndorsementDetails = carPickUpEndorsementDetails;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ApprovalRequest withQuickCar(List<CarQuickEndorsementDetail> carQuickEndorsementDetails) {
|
||||
this.carQuickEndorsementDetails = carQuickEndorsementDetails;
|
||||
this.CarQuickEndorsementDetails = carQuickEndorsementDetails;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ApprovalRequest withHotel(List<HotelEndorsementDetail> hotelEndorsementDetails) {
|
||||
this.hotelEndorsementDetails = hotelEndorsementDetails;
|
||||
this.HotelEndorsementDetails = hotelEndorsementDetails;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.approval;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ApprovalRequestOut {
|
||||
private ApprovalRequest request;
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.approval;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ApprovalResponse {
|
||||
private ResponseStatus Status;
|
||||
}
|
|
@ -5,6 +5,8 @@ import lombok.Data;
|
|||
@Data
|
||||
public class ApprovalResult {
|
||||
|
||||
private ResponseStatus Status;
|
||||
private ApprovalResponse SetApprovalResult;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,100 +1,131 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.approval.air;
|
||||
|
||||
import com.chint.infrastructure.util.DateTimeUtil;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.CurrencyType;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.PassengerDetail;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.hotel.HotelEndorsementDetail;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class FlightEndorsementDetail {
|
||||
|
||||
// 订票类型列表 - 1张, 2张, 3张, 超过3张
|
||||
private List<String> bookingTypeList;
|
||||
private List<String> BookingTypeList;
|
||||
|
||||
// 订单ID列表 - 最多20个
|
||||
private List<String> orderIDList;
|
||||
private List<String> OrderIDList;
|
||||
|
||||
// 航空公司名称 - 不可为空字符串
|
||||
private String airline;
|
||||
private String Airline;
|
||||
|
||||
// 货币类型 - 默认CNY
|
||||
private CurrencyType currency;
|
||||
private CurrencyType Currency;
|
||||
|
||||
// 航班类型 - 单程(1) or 往返(2)
|
||||
private FlightWayType flightWay;
|
||||
private FlightWayType FlightWay;
|
||||
|
||||
// 起飞日期开始时间 - 格式: yyyy-MM-dd
|
||||
private String departDateBegin;
|
||||
private String DepartDateBegin;
|
||||
|
||||
// 起飞日期结束时间 - 格式: yyyy-MM-dd
|
||||
private String departDateEnd;
|
||||
private String DepartDateEnd;
|
||||
|
||||
// 返回日期开始时间 - 格式: yyyy-MM-dd
|
||||
private String returnDateBegin;
|
||||
private String ReturnDateBegin;
|
||||
|
||||
// 返回日期结束时间 - 格式: yyyy-MM-dd
|
||||
private String returnDateEnd;
|
||||
private String ReturnDateEnd;
|
||||
|
||||
// 起飞时间开始时间 - 格式: HH:mm
|
||||
private String takeOffBeginTime;
|
||||
private String TakeOffBeginTime;
|
||||
|
||||
// 起飞时间结束时间 - 格式: HH:mm
|
||||
private String takeOffEndTime;
|
||||
private String TakeOffEndTime;
|
||||
|
||||
// 到达时间开始时间 - 格式: HH:mm
|
||||
private String arrivalBeginTime;
|
||||
private String ArrivalBeginTime;
|
||||
|
||||
// 到达时间结束时间 - 格式: HH:mm
|
||||
private String arrivalEndTime;
|
||||
private String ArrivalEndTime;
|
||||
|
||||
// 折扣率 - 0.1到1.0, 0代表无折扣
|
||||
private float discount;
|
||||
private float Discount;
|
||||
|
||||
// 出发国家ID列表 - 最多1000个
|
||||
private List<String> departCountryIds;
|
||||
private List<String> DepartCountryIds;
|
||||
|
||||
// 出发国家代码列表 - 最多1000个
|
||||
private List<String> departCountryCodes;
|
||||
private List<String> DepartCountryCodes;
|
||||
|
||||
// 出发城市代码列表 - 最多1000个
|
||||
private List<String> departCityCodes;
|
||||
private List<String> DepartCityCodes;
|
||||
|
||||
// 到达国家ID列表 - 最多1000个
|
||||
private List<String> arrivalCountryIds;
|
||||
private List<String> ArrivalCountryIds;
|
||||
|
||||
// 到达城市代码列表 - 最多1000个
|
||||
private List<String> arrivalCityCodes;
|
||||
private List<String> ArrivalCityCodes;
|
||||
|
||||
// 出发城市ID列表 - 最多1000个
|
||||
private List<String> departCityIds;
|
||||
private List<String> DepartCityIds;
|
||||
|
||||
// 到达城市ID列表 - 最多1000个
|
||||
private List<String> arrivalCityIds;
|
||||
private List<String> ArrivalCityIds;
|
||||
|
||||
// 乘客列表 - 无数量限制
|
||||
private List<PassengerDetail> passengerList;
|
||||
private List<PassengerDetail> PassengerList;
|
||||
|
||||
// 价格 - 可为负数, 默认为0
|
||||
private float price;
|
||||
private float Price;
|
||||
|
||||
// 产品类型 - 1代表经济舱, 2代表商务舱
|
||||
private ProductTypeEnum productType;
|
||||
private ProductTypeEnum ProductType;
|
||||
|
||||
// 座位等级 - 经济舱(3), 商务舱(2), 头等舱(1)
|
||||
private SeatClassType seatClass;
|
||||
private SeatClassType SeatClass;
|
||||
|
||||
// 跳过的字段位 - 用于标记不包含的字段
|
||||
private long skipFields;
|
||||
private long SkipFields;
|
||||
|
||||
// 旅客数量 - 无限制
|
||||
private int travelerCount;
|
||||
private int TravelerCount;
|
||||
|
||||
// 总旅客数量 - 用于统计
|
||||
private int totalTravelerCount;
|
||||
private int TotalTravelerCount;
|
||||
|
||||
// 预验证字段位 - 用于标记需要预验证的字段
|
||||
private long preVerifyFields;
|
||||
private long PreVerifyFields;
|
||||
|
||||
// Getters and setters...
|
||||
|
||||
public static FlightEndorsementDetail of(List<String> DepartCityIds , List<String> ArrivalCityIds) {
|
||||
FlightEndorsementDetail flightEndorsementDetail = new FlightEndorsementDetail();
|
||||
flightEndorsementDetail.setDepartCountryIds(DepartCityIds);
|
||||
flightEndorsementDetail.setArrivalCityIds(ArrivalCityIds);
|
||||
return flightEndorsementDetail;
|
||||
}
|
||||
|
||||
public FlightEndorsementDetail passenger(PassengerDetail passengerDetail) {
|
||||
if (this.PassengerList == null) {
|
||||
this.PassengerList = new ArrayList<>();
|
||||
}
|
||||
this.PassengerList.add(passengerDetail);
|
||||
return this;
|
||||
}
|
||||
|
||||
public FlightEndorsementDetail starTime(LocalDateTime startTime) {
|
||||
this.DepartDateBegin = DateTimeUtil.timeToStr(startTime);
|
||||
this.ReturnDateBegin = DateTimeUtil.timeToStr(startTime);
|
||||
return this;
|
||||
}
|
||||
|
||||
public FlightEndorsementDetail endTime(LocalDateTime endTime) {
|
||||
this.DepartDateEnd = DateTimeUtil.timeToStr(endTime);
|
||||
this.ReturnDateEnd = DateTimeUtil.timeToStr(endTime);
|
||||
return this;
|
||||
}
|
||||
}
|
|
@ -14,64 +14,64 @@ import java.util.List;
|
|||
public class HotelEndorsementDetail {
|
||||
|
||||
// 产品类型
|
||||
private HotelProductTypeEnum productType;
|
||||
private HotelProductTypeEnum ProductType;
|
||||
|
||||
// 入住开始日期 - 格式: yyyy-MM-dd
|
||||
private String checkInDateBegin;
|
||||
private String CheckInDateBegin;
|
||||
|
||||
// 入住结束日期 - 格式: yyyy-MM-dd
|
||||
private String checkInDateEnd;
|
||||
private String CheckInDateEnd;
|
||||
|
||||
// 离店开始日期 - 格式: yyyy-MM-dd
|
||||
private String checkOutDateBegin;
|
||||
private String CheckOutDateBegin;
|
||||
|
||||
// 离店结束日期 - 格式: yyyy-MM-dd
|
||||
private String checkOutDateEnd;
|
||||
private String CheckOutDateEnd;
|
||||
|
||||
// 乘客列表
|
||||
private List<PassengerDetail> passengerList;
|
||||
private List<PassengerDetail> PassengerList;
|
||||
|
||||
// 入住国家ID列表
|
||||
private List<String> checkInCountryIds;
|
||||
private List<String> CheckInCountryIds;
|
||||
|
||||
// 入住国家代码列表
|
||||
private List<String> checkInCountryCodes;
|
||||
private List<String> CheckInCountryCodes;
|
||||
|
||||
// 入住城市代码列表
|
||||
private List<String> checkInCityCodes;
|
||||
private List<String> CheckInCityCodes;
|
||||
|
||||
// 最高价格
|
||||
private String maxPrice;
|
||||
private String MaxPrice;
|
||||
|
||||
// 最低价格
|
||||
private String minPrice;
|
||||
private String MinPrice;
|
||||
|
||||
// 货币类型 - 默认CNY
|
||||
private CurrencyType currency;
|
||||
private CurrencyType Currency;
|
||||
|
||||
// 最大星级
|
||||
private String maxStarRating;
|
||||
private String MaxStarRating;
|
||||
|
||||
// 最小星级
|
||||
private String minStarRating;
|
||||
private String MinStarRating;
|
||||
|
||||
// 平均价格
|
||||
private String averagePrice;
|
||||
private String AveragePrice;
|
||||
|
||||
// 房间数量
|
||||
private int roomCount;
|
||||
private int RoomCount;
|
||||
|
||||
// 跳过的字段位 - 用于标记不包含的字段
|
||||
private long skipFields;
|
||||
private long SkipFields;
|
||||
|
||||
// 总房晚数
|
||||
private int totalRoomNightCount;
|
||||
private int TotalRoomNightCount;
|
||||
|
||||
// 房晚价格
|
||||
private String roomNightPrice;
|
||||
private String RoomNightPrice;
|
||||
|
||||
// 预验证字段位 - 用于标记需要预验证的字段
|
||||
private long preVerifyFields;
|
||||
private long PreVerifyFields;
|
||||
|
||||
// Getters and setters...
|
||||
|
||||
|
@ -82,22 +82,22 @@ public class HotelEndorsementDetail {
|
|||
}
|
||||
|
||||
public HotelEndorsementDetail passenger(PassengerDetail passengerDetail) {
|
||||
if (this.passengerList == null) {
|
||||
this.passengerList = new ArrayList<>();
|
||||
if (this.PassengerList == null) {
|
||||
this.PassengerList = new ArrayList<>();
|
||||
}
|
||||
this.passengerList.add(passengerDetail);
|
||||
this.PassengerList.add(passengerDetail);
|
||||
return this;
|
||||
}
|
||||
|
||||
public HotelEndorsementDetail starTime(LocalDateTime startTime) {
|
||||
this.checkInDateBegin = DateTimeUtil.timeToStr(startTime);
|
||||
this.checkOutDateBegin = DateTimeUtil.timeToStr(startTime);
|
||||
this.CheckInDateBegin = DateTimeUtil.timeToStr(startTime);
|
||||
this.CheckOutDateBegin = DateTimeUtil.timeToStr(startTime);
|
||||
return this;
|
||||
}
|
||||
|
||||
public HotelEndorsementDetail endTime(LocalDateTime endTime) {
|
||||
this.checkInDateEnd = DateTimeUtil.timeToStr(endTime);
|
||||
this.checkOutDateEnd = DateTimeUtil.timeToStr(endTime);
|
||||
this.CheckInDateEnd = DateTimeUtil.timeToStr(endTime);
|
||||
this.CheckOutDateEnd = DateTimeUtil.timeToStr(endTime);
|
||||
return this;
|
||||
}
|
||||
}
|
|
@ -1,42 +1,70 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.approval.quick;
|
||||
|
||||
import com.chint.infrastructure.util.DateTimeUtil;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.CurrencyType;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.PassengerDetail;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.train.TrainEndorsementDetail;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class CarQuickEndorsementDetail {
|
||||
|
||||
// 产品类型
|
||||
private int productType;
|
||||
private int ProductType;
|
||||
// 乘客列表, 最多100名
|
||||
private List<PassengerDetail> passengerList;
|
||||
private List<PassengerDetail> PassengerList;
|
||||
// 城市代码
|
||||
private String cities;
|
||||
private String Cities;
|
||||
// 公司地址列表
|
||||
private List<CompanyAddressDetail> companyAddressList;
|
||||
private List<CompanyAddressDetail> CompanyAddressList;
|
||||
// 到达地址列表
|
||||
private List<CompanyAddressDetail> arrivalAddressList;
|
||||
private List<CompanyAddressDetail> ArrivalAddressList;
|
||||
// 开始使用日期
|
||||
private String beginUseDate;
|
||||
private String BeginUseDate;
|
||||
// 结束使用日期
|
||||
private String endUseDate;
|
||||
private String EndUseDate;
|
||||
// 使用时间列表
|
||||
private List<UseTimeDetail> useTimeList;
|
||||
private List<UseTimeDetail> UseTimeList;
|
||||
// 货币类型, 默认CNY
|
||||
private CurrencyType currency;
|
||||
private CurrencyType Currency;
|
||||
// 价格,默认为0
|
||||
private float price;
|
||||
private float Price;
|
||||
// 车辆组
|
||||
private String vehicleGroup;
|
||||
private String VehicleGroup;
|
||||
// 有效性金额
|
||||
private int effectivenessAmount;
|
||||
private int EffectivenessAmount;
|
||||
// 跳过的字段位
|
||||
private long skipFields;
|
||||
private long SkipFields;
|
||||
// 到达城市代码
|
||||
private String arrivalCities;
|
||||
private String ArrivalCities;
|
||||
|
||||
// Getters and setters...
|
||||
|
||||
public static CarQuickEndorsementDetail of(List<String> cities) {
|
||||
CarQuickEndorsementDetail carQuickEndorsementDetail = new CarQuickEndorsementDetail();
|
||||
carQuickEndorsementDetail.setArrivalCities(String.join(",",cities));
|
||||
return carQuickEndorsementDetail;
|
||||
}
|
||||
|
||||
public CarQuickEndorsementDetail passenger(PassengerDetail passengerDetail) {
|
||||
if (this.PassengerList == null) {
|
||||
this.PassengerList = new ArrayList<>();
|
||||
}
|
||||
this.PassengerList.add(passengerDetail);
|
||||
return this;
|
||||
}
|
||||
|
||||
public CarQuickEndorsementDetail starTime(LocalDateTime startTime) {
|
||||
this.BeginUseDate = DateTimeUtil.timeToStr(startTime);
|
||||
return this;
|
||||
}
|
||||
|
||||
public CarQuickEndorsementDetail endTime(LocalDateTime endTime) {
|
||||
this.EndUseDate = DateTimeUtil.timeToStr(endTime);
|
||||
return this;
|
||||
}
|
||||
}
|
|
@ -1,69 +1,103 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.approval.train;
|
||||
|
||||
import com.chint.infrastructure.util.DateTimeUtil;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.CurrencyType;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.PassengerDetail;
|
||||
import com.chint.interfaces.rest.ctrip.dto.approval.air.FlightEndorsementDetail;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
// TrainEndorsementDetail class definition
|
||||
|
||||
@Data
|
||||
public class TrainEndorsementDetail {
|
||||
|
||||
// 火车产品类型
|
||||
private TrainProductTypeEnum productType;
|
||||
private TrainProductTypeEnum ProductType;
|
||||
|
||||
// 订票类型列表 - 1张, 2张, 3张, 超过3张
|
||||
private List<String> bookingTypeList;
|
||||
private List<String> BookingTypeList;
|
||||
|
||||
// 订单ID列表
|
||||
private List<String> orderIDList;
|
||||
private List<String> OrderIDList;
|
||||
|
||||
// 行程类型 - 单程(1) or 往返(2)
|
||||
private TripTypeEnum tripType;
|
||||
private TripTypeEnum TripType;
|
||||
|
||||
// 出发日期开始 - 格式: yyyy-MM-dd
|
||||
private String departDateBegin;
|
||||
private String DepartDateBegin;
|
||||
|
||||
// 出发日期结束 - 格式: yyyy-MM-dd
|
||||
private String departDateEnd;
|
||||
private String DepartDateEnd;
|
||||
|
||||
// 返回日期开始 - 格式: yyyy-MM-dd
|
||||
private String returnDateBegin;
|
||||
private String ReturnDateBegin;
|
||||
|
||||
// 返回日期结束 - 格式: yyyy-MM-dd
|
||||
private String returnDateEnd;
|
||||
private String ReturnDateEnd;
|
||||
|
||||
// 乘客列表 - 无限制
|
||||
private List<PassengerDetail> passengerList;
|
||||
private List<PassengerDetail> PassengerList;
|
||||
|
||||
// 到达城市代码列表 - 最多1000个
|
||||
private List<String> arrivalCityCodes;
|
||||
private List<String> ArrivalCityCodes;
|
||||
|
||||
// 出发城市代码列表 - 最多1000个
|
||||
private List<String> departCityCodes;
|
||||
private List<String> DepartCityCodes;
|
||||
|
||||
// 价格 - 可为负数, 默认为0
|
||||
private String price;
|
||||
private String Price;
|
||||
|
||||
// 货币类型 - 默认CNY
|
||||
private CurrencyType currency;
|
||||
private CurrencyType Currency;
|
||||
|
||||
// 座位类型
|
||||
private List<SeatTypeEnum> seatType;
|
||||
private List<SeatTypeEnum> SeatType;
|
||||
|
||||
// 跳过的字段位 - 用于标记不包含的字段
|
||||
private long skipFields;
|
||||
private long SkipFields;
|
||||
|
||||
// 旅客数量 - 默认为0
|
||||
private int travelerCount;
|
||||
private int TravelerCount;
|
||||
|
||||
// 预验证字段位 - 用于标记需要预验证的字段
|
||||
private long preVerifyFields;
|
||||
private long PreVerifyFields;
|
||||
|
||||
// 列车车次列表 - 如G, D, C, Z, T, K等
|
||||
private List<String> trainVehicleTypeList;
|
||||
private List<String> TrainVehicleTypeList;
|
||||
|
||||
// 总旅客数量 - 用于统计
|
||||
private int totalTravelerCount;
|
||||
private int TotalTravelerCount;
|
||||
|
||||
// Getters and setters...
|
||||
|
||||
public static TrainEndorsementDetail of(List<String> DepartCityCodes , List<String> ArrivalCityCodes) {
|
||||
TrainEndorsementDetail trainEndorsementDetail = new TrainEndorsementDetail();
|
||||
trainEndorsementDetail.setDepartCityCodes(DepartCityCodes);
|
||||
trainEndorsementDetail.setArrivalCityCodes(ArrivalCityCodes);
|
||||
return trainEndorsementDetail;
|
||||
}
|
||||
|
||||
public TrainEndorsementDetail passenger(PassengerDetail passengerDetail) {
|
||||
if (this.PassengerList == null) {
|
||||
this.PassengerList = new ArrayList<>();
|
||||
}
|
||||
this.PassengerList.add(passengerDetail);
|
||||
return this;
|
||||
}
|
||||
|
||||
public TrainEndorsementDetail starTime(LocalDateTime startTime) {
|
||||
this.DepartDateBegin = DateTimeUtil.timeToStr(startTime);
|
||||
this.ReturnDateBegin = DateTimeUtil.timeToStr(startTime);
|
||||
return this;
|
||||
}
|
||||
|
||||
public TrainEndorsementDetail endTime(LocalDateTime endTime) {
|
||||
this.DepartDateEnd = DateTimeUtil.timeToStr(endTime);
|
||||
this.ReturnDateEnd = DateTimeUtil.timeToStr(endTime);
|
||||
return this;
|
||||
}
|
||||
}
|
|
@ -32,5 +32,10 @@ public class CTripAuthLoginParam {
|
|||
private String OrderId;
|
||||
private Boolean OnlyInitPage;
|
||||
|
||||
public static CTripAuthLoginParam of(String employeeID) {
|
||||
CTripAuthLoginParam cTripAuthLoginParam = new CTripAuthLoginParam();
|
||||
cTripAuthLoginParam.setEmployeeID(employeeID);
|
||||
return cTripAuthLoginParam;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.login;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class PCResponse {
|
||||
private String redirectUrl;
|
||||
private boolean success;
|
||||
}
|
|
@ -1,8 +1,11 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.put;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class TrainTicketChangeNotification {
|
||||
private String businessId;
|
||||
private String businessType;
|
||||
|
@ -19,110 +22,4 @@ public class TrainTicketChangeNotification {
|
|||
|
||||
private List<PassengerInfoEntity> passengerInfoList;
|
||||
private String uId;
|
||||
|
||||
// Getter and Setter methods for all fields
|
||||
|
||||
public String getBusinessId() {
|
||||
return businessId;
|
||||
}
|
||||
|
||||
public void setBusinessId(String businessId) {
|
||||
this.businessId = businessId;
|
||||
}
|
||||
|
||||
public String getBusinessType() {
|
||||
return businessType;
|
||||
}
|
||||
|
||||
public void setBusinessType(String businessType) {
|
||||
this.businessType = businessType;
|
||||
}
|
||||
|
||||
public String getContent() {
|
||||
return content;
|
||||
}
|
||||
|
||||
public void setContent(String content) {
|
||||
this.content = content;
|
||||
}
|
||||
|
||||
public String getContentEn() {
|
||||
return contentEn;
|
||||
}
|
||||
|
||||
public void setContentEn(String contentEn) {
|
||||
this.contentEn = contentEn;
|
||||
}
|
||||
|
||||
public String getCorpId() {
|
||||
return corpId;
|
||||
}
|
||||
|
||||
public void setCorpId(String corpId) {
|
||||
this.corpId = corpId;
|
||||
}
|
||||
|
||||
public String getMessageCategory() {
|
||||
return messageCategory;
|
||||
}
|
||||
|
||||
public void setMessageCategory(String messageCategory) {
|
||||
this.messageCategory = messageCategory;
|
||||
}
|
||||
|
||||
public String getMessageType() {
|
||||
return messageType;
|
||||
}
|
||||
|
||||
public void setMessageType(String messageType) {
|
||||
this.messageType = messageType;
|
||||
}
|
||||
|
||||
public String getPreEmployeeID() {
|
||||
return preEmployeeID;
|
||||
}
|
||||
|
||||
public void setPreEmployeeID(String preEmployeeID) {
|
||||
this.preEmployeeID = preEmployeeID;
|
||||
}
|
||||
|
||||
public String getSign() {
|
||||
return sign;
|
||||
}
|
||||
|
||||
public void setSign(String sign) {
|
||||
this.sign = sign;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public String getTitleEn() {
|
||||
return titleEn;
|
||||
}
|
||||
|
||||
public void setTitleEn(String titleEn) {
|
||||
this.titleEn = titleEn;
|
||||
}
|
||||
|
||||
public String getTitleImageUrl() {
|
||||
return titleImageUrl;
|
||||
}
|
||||
|
||||
public void setTitleImageUrl(String titleImageUrl) {
|
||||
this.titleImageUrl = titleImageUrl;
|
||||
}
|
||||
|
||||
public String getuId() {
|
||||
return uId;
|
||||
}
|
||||
|
||||
public void setuId(String uId) {
|
||||
this.uId = uId;
|
||||
}
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search;
|
||||
|
||||
public class CarOrderInfoEntity {
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search;
|
||||
|
||||
public class FlightOrderInfoEntity {
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class HotelOrderInfoEntity {
|
||||
}
|
|
@ -1,5 +1,9 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search;
|
||||
|
||||
import com.chint.interfaces.rest.ctrip.dto.search.car.CarOrderInfoEntity;
|
||||
import com.chint.interfaces.rest.ctrip.dto.search.flight.FlightOrderInfoEntity;
|
||||
import com.chint.interfaces.rest.ctrip.dto.search.hotel.HotelOrderInfoEntity;
|
||||
import com.chint.interfaces.rest.ctrip.dto.search.train.TrainOrderInfoEntity;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -8,23 +12,21 @@ import java.util.List;
|
|||
public class ItineraryEntity {
|
||||
|
||||
// 行程单号
|
||||
private String journeyNO; // 行程单号
|
||||
private String JourneyNO; // 行程单号
|
||||
// 酒店订单信息列表
|
||||
private List<HotelOrderInfoEntity> hotelOrderInfoList; // 酒店订单信息列表
|
||||
private List<HotelOrderInfoEntity> HotelOrderInfoList; // 酒店订单信息列表
|
||||
// 航班订单信息列表
|
||||
private List<FlightOrderInfoEntity> flightOrderInfoList; // 航班订单信息列表
|
||||
private List<FlightOrderInfoEntity> FlightOrderInfoList; // 航班订单信息列表
|
||||
// 火车票订单信息列表
|
||||
private List<TrainOrderInfoEntity> trainOrderInfoList; // 火车票订单信息列表
|
||||
private List<TrainOrderInfoEntity> TrainOrderInfoList; // 火车票订单信息列表
|
||||
// 租车订单信息列表
|
||||
private List<CarOrderInfoEntity> carOrderInfoList; // 租车订单信息列表
|
||||
private List<CarOrderInfoEntity> CarOrderInfoList; // 租车订单信息列表
|
||||
// 快捷租车订单信息列表
|
||||
private List<CarQuickOrderInfoEntity> carQuickOrderInfoList; // 快捷租车订单信息列表
|
||||
private List<CarQuickOrderInfoEntity> CarQuickOrderInfoList; // 快捷租车订单信息列表
|
||||
// 接送机租车订单信息列表
|
||||
private List<DomPickUpCarOrderInfoEntity> domPickUpCarOrderInfoList; // 接送机租车订单信息列表
|
||||
private List<DomPickUpCarOrderInfoEntity> DomPickUpCarOrderInfoList; // 接送机租车订单信息列表
|
||||
// 包车租车订单信息列表
|
||||
private List<DomCharterCarOrderInfoEntity> domCharterCarOrderInfoList; // 包车租车订单信息列表
|
||||
private List<DomCharterCarOrderInfoEntity> DomCharterCarOrderInfoList; // 包车租车订单信息列表
|
||||
// 国际火车票订单信息列表
|
||||
private List<IntlTrainOrderInfoEntity> intlTrainOrderInfoList; // 国际火车票订单信息列表
|
||||
|
||||
// Getters and Setters...
|
||||
private List<IntlTrainOrderInfoEntity> IntlTrainOrderInfoList; // 国际火车票订单信息列表
|
||||
}
|
|
@ -34,5 +34,9 @@ public class SearchOrderRequest {
|
|||
private String htlSearchTypeExtend; // 酒店查询类型扩展
|
||||
private String carSearchTypeExtend; // 租车查询类型扩展
|
||||
|
||||
public static SearchRequestBuilder builder() {
|
||||
return new SearchRequestBuilder();
|
||||
}
|
||||
|
||||
// Getters and Setters...
|
||||
}
|
|
@ -9,9 +9,9 @@ import java.util.List;
|
|||
public class SearchOrderResponse {
|
||||
|
||||
// 响应状态
|
||||
private ResponseStatus status; // 响应状态
|
||||
private ResponseStatus Status; // 响应状态
|
||||
// 行程单列表
|
||||
private List<ItineraryEntity> itineraryList; // 行程单列表
|
||||
private List<ItineraryEntity> ItineraryList; // 行程单列表
|
||||
|
||||
// Getters and Setters...
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search;
|
||||
|
||||
import com.chint.interfaces.rest.ctrip.dto.Authentication;
|
||||
|
||||
public class SearchRequestBuilder {
|
||||
|
||||
private SearchOrderRequest request = new SearchOrderRequest();
|
||||
|
||||
public SearchRequestBuilder language(String language){
|
||||
request.setLanguage(language);
|
||||
return this;
|
||||
}
|
||||
|
||||
public SearchRequestBuilder journeyNo(String journeyNo){
|
||||
request.setJourneyNo(journeyNo);
|
||||
return this;
|
||||
}
|
||||
|
||||
public SearchOrderRequest done() {
|
||||
return request;
|
||||
}
|
||||
|
||||
public AuthInfoBuilder authInfo() {
|
||||
return new AuthInfoBuilder(this, request);
|
||||
}
|
||||
|
||||
public static class AuthInfoBuilder {
|
||||
private final SearchRequestBuilder parentBuilder;
|
||||
private final SearchOrderRequest request;
|
||||
|
||||
public AuthInfoBuilder(SearchRequestBuilder parentBuilder, SearchOrderRequest request) {
|
||||
this.parentBuilder = parentBuilder;
|
||||
this.request = request;
|
||||
}
|
||||
|
||||
public AuthInfoBuilder details(String appKey, String accessToken) {
|
||||
Authentication authInfo = new Authentication(appKey, accessToken); // Construct AuthInfo with parameters
|
||||
request.setAuth(authInfo);
|
||||
return this;
|
||||
}
|
||||
|
||||
public SearchRequestBuilder done() {
|
||||
return parentBuilder;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search;
|
||||
|
||||
public class TrainOrderInfoEntity {
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.car;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// 订单基本信息类
|
||||
@Data
|
||||
public class BasicInfo {
|
||||
private long orderId; // 订单ID
|
||||
private double estimateAmount; // 预估金额
|
||||
private double orderAmount; // 订单金额
|
||||
private double dealAmount; // 成交金额
|
||||
private String orderStatus; // 订单状态
|
||||
private String authorizeStatus; // 授权状态
|
||||
private String paymentStatus; // 支付状态
|
||||
private String paymentType; // 支付类型
|
||||
private String feeType; // 费用类型
|
||||
private String UID; // 用户ID
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.car;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class CarOrderInfoEntity {
|
||||
private BasicInfo basicInfo; // 基本信息
|
||||
private OrderProduct orderProduct; // 订单产品
|
||||
private List<OrderFee> orderFeeList; // 订单费用列表
|
||||
private OrderInsurance orderInsurance; // 订单保险信息
|
||||
private OrderInvoice orderInvoice; // 订单发票信息
|
||||
private PassengerInfo passengerInfo; // 乘客信息
|
||||
private List<PaymentInfo> paymentInfoList; // 支付信息列表
|
||||
private List<PaymentSettlement> paymentSettlementList; // 支付结算列表
|
||||
private List<ChoosedVehicle> choosedVehicleList; // 选择的车辆列表
|
||||
private OrderConfigInfo orderConfigInfo; // 订单配置信息
|
||||
private List<PaymentSupply> paymentSupplyList; // 支付供应列表
|
||||
private OrderPaymentInfo orderPaymentInfo; // 订单支付信息
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.car;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// 选择的车辆信息类
|
||||
@Data
|
||||
class ChoosedVehicle {
|
||||
private double estimateAmount; // 预估金额
|
||||
private int vehicleId; // 车辆ID
|
||||
private String vehicleName; // 车辆名称
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.car;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// 出发地址信息类
|
||||
@Data
|
||||
class DepartAddress {
|
||||
private String address; // 地址
|
||||
private String addressDetail; // 地址详情
|
||||
private String cityId; // 城市ID
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.car;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// 订单配置信息类
|
||||
@Data
|
||||
class OrderConfigInfo {
|
||||
private String sceneName; // 场景名称
|
||||
private String standardName; // 标准名称
|
||||
private String carTravelSendType; // 汽车出行发送类型
|
||||
private String currency; // 货币类型
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.car;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// 订单费用信息类
|
||||
@Data
|
||||
class OrderFee {
|
||||
private String costScene; // 费用场景
|
||||
private String feeTypeCode; // 费用类型编码
|
||||
private String feeName; // 费用名称
|
||||
private double amount; // 金额
|
||||
private String orderFeeId; // 订单费用ID
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.car;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// 订单保险信息类
|
||||
@Data
|
||||
class OrderInsurance {
|
||||
private String productCode; // 产品编码
|
||||
private String companyId; // 公司ID
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.car;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// 订单发票信息类
|
||||
@Data
|
||||
class OrderInvoice {
|
||||
private String invoiceId; // 发票ID
|
||||
private String customerTaxNumber; // 客户税号
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.car;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class OrderPaymentInfo {
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.car;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// 订单产品信息类
|
||||
@Data
|
||||
public class OrderProduct {
|
||||
private String vendorOrderId; // 供应商订单ID
|
||||
private int bookingType; // 预订类型
|
||||
private String useTime; // 使用时间
|
||||
private DepartAddress departAddress; // 出发地址信息
|
||||
private PassengerPosition passengerPosition; // 乘客位置信息
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.car;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// 乘客信息类
|
||||
@Data
|
||||
class PassengerInfo {
|
||||
private String corpUserId; // 公司用户ID
|
||||
private String employeeId; // 员工ID
|
||||
private String intlCode; // 国际代码
|
||||
private String passengerId; // 乘客ID
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.car;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// 乘客位置信息类
|
||||
@Data
|
||||
class PassengerPosition {
|
||||
private String latitude; // 纬度
|
||||
private String longitude; // 经度
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.car;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// 支付信息类
|
||||
@Data
|
||||
public class PaymentInfo {
|
||||
private double amount; // 金额
|
||||
private String billNo; // 账单号
|
||||
private String paidTime; // 支付时间
|
||||
private String paymentCategory; // 支付类别
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.car;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// 支付结算信息类
|
||||
@Data
|
||||
class PaymentSettlement {
|
||||
private double amount; // 金额
|
||||
private String feeTypeCode; // 费用类型编码
|
||||
private String feeTypeName; // 费用类型名称
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.car;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// 支付供应信息类
|
||||
@Data
|
||||
class PaymentSupply {
|
||||
private String paymentSupplyId; // 支付供应ID
|
||||
private long orderID; // 订单ID
|
||||
private double serviceAmount; // 服务金额
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.flight;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class BasicInfo {
|
||||
private String orderID;
|
||||
private String tripID;
|
||||
private String orderStatus;
|
||||
private String orderStatusCode;
|
||||
private String UID;
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.flight;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
class DeliveryInfo {
|
||||
private String deliveryInfo;
|
||||
private String contactPhone;
|
||||
private String contactMobile;
|
||||
private String contactName;
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.flight;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class FlightInfo {
|
||||
private String sequence;
|
||||
private String flight;
|
||||
private String airLineCode;
|
||||
private String airLineName;
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.flight;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class FlightOrderFeeDetail {
|
||||
private String transactionType;
|
||||
private String payType;
|
||||
private int transactionAmount;
|
||||
private String payCurrency;
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.flight;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class FlightOrderInfoEntity {
|
||||
private BasicInfo basicInfo;
|
||||
private DeliveryInfo deliveryInfo;
|
||||
private List<FlightInfo> flightInfo;
|
||||
private List<PassengerInfo> passengerInfo;
|
||||
private List<FlightOrderFeeDetail> flightOrderFeeDetailList;
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.flight;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
class PassengerBasic {
|
||||
private String corpEid;
|
||||
private String passengerName;
|
||||
private String passengerNamePY;
|
||||
private String nationalityCode;
|
||||
private String cardTypeName;
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.flight;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class PassengerInfo {
|
||||
private PassengerBasic passengerBasic;
|
||||
private List<SequenceInfo> sequenceInfo;
|
||||
|
||||
// Getters and setters
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.flight;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
class SequenceInfo {
|
||||
private int sequence;
|
||||
private List<TicketInfo> ticketInfo;
|
||||
|
||||
// Getters and setters
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.flight;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
class TicketInfo {
|
||||
private String airLineCode;
|
||||
private String ticketNo;
|
||||
private String ticketNoSignCode;
|
||||
private String status;
|
||||
// Other fields and getters/setters
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.hotel;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ClientInfo {
|
||||
private int RoomIndex; // 房间索引
|
||||
private String ClientName; // 客户名
|
||||
private String EmployeeID; // 员工ID
|
||||
private String CostCenter1; // 成本中心1
|
||||
private String CostCenter2; // 成本中心2
|
||||
private String CostCenter3; // 成本中心3
|
||||
private String CostCenter4; // 成本中心4
|
||||
private String CostCenter5; // 成本中心5
|
||||
private String CostCenter6; // 成本中心6
|
||||
private String Dept1; // 部门1
|
||||
private String Dept2; // 部门2
|
||||
private String Dept3; // 部门3
|
||||
private String Dept4; // 部门4
|
||||
// Dept5至Dept10可以根据实际需要添加
|
||||
private String CheckinTime; // 入住时间
|
||||
private String CheckoutTime; // 离店时间
|
||||
private String ActualDepartureTime; // 实际离开时间
|
||||
private double ShareOrderAmount; // 分摊订单金额
|
||||
// ClientPreApprovalNo字段的具体类型根据需要确定,如果是一个复杂结构,可能需要定义一个新的类
|
||||
private double Price; // 价格
|
||||
private String Star; // 星级
|
||||
private double ActualUpperAmount; // 实际上限金额
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.hotel;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class HotelOrderInfoEntity {
|
||||
private String OrderId; // 订单ID
|
||||
private String TripId; // 旅行ID
|
||||
private String Uid; // 用户ID
|
||||
private String PreEmployeeId; // 预订员工ID
|
||||
private String PreEmployeeName; // 预订员工姓名
|
||||
private String Currency; // 货币类型
|
||||
private String Amount; // 订单总金额
|
||||
private String AmountRMB; // 订单金额(人民币)
|
||||
private String CustomPayAmount; // 自定义支付金额
|
||||
private String SettlementAmount; // 结算金额
|
||||
private String PostAmount; // 邮寄金额
|
||||
private String PayType; // 支付类型
|
||||
private String CustomPayCurrency; // 自定义支付货币
|
||||
private String CustomPayExchange; // 自定义支付汇率
|
||||
private String SettlementCurrency; // 结算货币
|
||||
private String SettlementExchange; // 结算汇率
|
||||
private String IsMixPayment; // 是否混合支付
|
||||
private String SettlementACCNTAmt; // 结算账户金额
|
||||
private String SettlementPersonAmt; // 结算个人金额
|
||||
private String AddedFees; // 额外费用
|
||||
private String FrontendServiceFee; // 前端服务费
|
||||
private String HotelType; // 酒店类型
|
||||
private String HotelName; // 酒店名称
|
||||
private String HotelEnName; // 酒店英文名称
|
||||
private String StarLicence; // 星级许可
|
||||
private String Star; // 星级
|
||||
private String CustomerEval; // 客户评价
|
||||
private String Telephone; // 电话号码
|
||||
private String Address; // 地址
|
||||
private String StartTime; // 入住开始时间
|
||||
private String EndTime; // 入住结束时间
|
||||
private String ProvinceEname; // 省份英文名
|
||||
private String CityID; // 城市ID
|
||||
private String CityName; // 城市名称
|
||||
private String CityEnName; // 城市英文名称
|
||||
private String RoomName; // 房间名称
|
||||
private String IsDomestic; // 是否国内
|
||||
private String RoomType; // 房间类型
|
||||
private String MealType; // 餐食类型
|
||||
private String MasterHotelID; // 主酒店ID
|
||||
private String DistrictID; // 区域ID
|
||||
private String DistrictName; // 区域名称
|
||||
private String OrderStatus; // 订单状态
|
||||
private String OrderDetailStatus; // 订单详细状态
|
||||
private String OrderDetailStatusName; // 订单详细状态名称
|
||||
private String OrderDate; // 订单日期
|
||||
private String LastCancelTime; // 最后取消时间
|
||||
private String CancelTime; // 取消时间
|
||||
private String CancelReasonCode; // 取消原因代码
|
||||
private String CancelReasonDesc; // 取消原因描述
|
||||
private String FundAccount; // 资金账户
|
||||
private String SubAccount; // 子账户
|
||||
private String BalanceType; // 余额类型
|
||||
private String CorpPayType; // 公司支付类型
|
||||
private String ContactEmail; // 联系人邮箱
|
||||
private String ContactName; // 联系人姓名
|
||||
private String ContactTel; // 联系人电话
|
||||
private String HotelConfirmNo; // 酒店确认号
|
||||
private String JourneyNo; // 旅程编号
|
||||
private String CostCenter; // 成本中心
|
||||
// 后续字段含义类似,可根据实际情况添加注释
|
||||
private List<ClientInfo> ClientInfo; // 客户信息列表
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.train;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// AccountPaymentInfo内部类定义
|
||||
@Data
|
||||
public class AccountPaymentInfo {
|
||||
private long DealID;
|
||||
private int AccountID;
|
||||
private int SubAccountID;
|
||||
private String OrderID;
|
||||
private double Amount;
|
||||
private String Category;
|
||||
private String DataChange_CreateTime;
|
||||
private String TrainRelatedNo;
|
||||
// 可以根据需要继续添加更多的字段
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.train;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// AfterTakeTicket内部类定义
|
||||
@Data
|
||||
public class AfterTakeTicket {
|
||||
private long AfterTakeTicketId;
|
||||
private String CompanyId;
|
||||
private String CompanyName;
|
||||
private String ContactName;
|
||||
private String ContactPhone;
|
||||
private String CountryCode;
|
||||
private String Address;
|
||||
private String DeliverTime;
|
||||
private String NoticeCtripTime;
|
||||
private String CtripTakeTicketTime;
|
||||
private String CtripDeliverTime;
|
||||
private String TakeType;
|
||||
private String TakeTicketStatus;
|
||||
private String FailReason;
|
||||
private String ExpressCompany;
|
||||
private String ExpressNo;
|
||||
// 可以根据需要继续添加更多的字段
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.train;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class FundAccountDealInfo {
|
||||
private double Amount;
|
||||
private String Category;
|
||||
private long DealID;
|
||||
// 可以根据需要继续添加更多的字段
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.train;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// OrderPayment内部类定义
|
||||
@Data
|
||||
public class OrderPayment {
|
||||
private String PaymentType;
|
||||
private String FeeCode;
|
||||
private double FeeAmount;
|
||||
// 可以根据需要继续添加更多的字段
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.train;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// PassengerInfo内部类定义
|
||||
@Data
|
||||
public class PassengerInfo {
|
||||
private long PassengerID;
|
||||
private String PassengerName;
|
||||
private String IdentityTypeName;
|
||||
private String IdentityNo;
|
||||
private String Birthday;
|
||||
private String TicketTypeName;
|
||||
private int InsuranceProductID;
|
||||
private int PurchaseNumber;
|
||||
private int TicketPresentNum;
|
||||
private String CostCenter1;
|
||||
private String CostCenter2;
|
||||
private String CostCenter3;
|
||||
private String CostCenter4;
|
||||
private String EmployeeID;
|
||||
private String CorpUserID;
|
||||
// 可以根据需要继续添加更多的字段
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.train;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// PaymentInfo内部类定义
|
||||
@Data
|
||||
public class PaymentInfo {
|
||||
private double Amount;
|
||||
private double ExchangeRate;
|
||||
private String Currency;
|
||||
private String DealType;
|
||||
private String PayWayID;
|
||||
// 可以根据需要继续添加更多的字段
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.train;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
// SettlementInfo内部类定义
|
||||
@Data
|
||||
public class SettlementInfo {
|
||||
private List<FundAccountDealInfo> FundAccountDealInfos;
|
||||
private List<SettlementInfoDetail> SettlementInfos;
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.train;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class SettlementInfoDetail {
|
||||
private long OrderTicketID;
|
||||
private long PassengerID;
|
||||
private String PassengerName;
|
||||
private double TicketPrice;
|
||||
private double InsuranceFee;
|
||||
private double ServiceFee;
|
||||
private double RefundTicketFee;
|
||||
private double DeliverFee;
|
||||
private double PaperTicketFee;
|
||||
private double ChangeServiceFee;
|
||||
private double GrabServiceFee;
|
||||
private long DealID;
|
||||
private String TicketInfoID;
|
||||
private double AfterTakeTicketFee;
|
||||
private double PurchaseFee;
|
||||
// 可以根据需要继续添加更多的字段
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.train;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// TicketInfo内部类定义
|
||||
@Data
|
||||
public class TicketInfo {
|
||||
private long TicketInfoID;
|
||||
private String TrainName;
|
||||
private String DepartureCityName;
|
||||
private String DepartureDateTime;
|
||||
private String ArrivalCityName;
|
||||
private String ArrivalDateTime;
|
||||
private String FirstSeatTypeName;
|
||||
private double TicketPrice;
|
||||
private String ElectronicOrderNo;
|
||||
private double ServiceFee;
|
||||
private String TicketEntrance;
|
||||
private String DealID;
|
||||
// 可以根据需要继续添加更多的字段
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.train;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class TrainBasicInfo {
|
||||
private String OrderID;
|
||||
private String TripID;
|
||||
private String EmployeeID;
|
||||
private double OrderAmount;
|
||||
private double DealAmount;
|
||||
private int TotalQuantity;
|
||||
private String Remark;
|
||||
private boolean NeedInvoice;
|
||||
private boolean IsIncludeInsuranceInvoice;
|
||||
private int OrderTicketType;
|
||||
private String OrderTicketTypeDesc;
|
||||
private String OrderStatus;
|
||||
private String OrderType;
|
||||
private String OrderTypeDesc;
|
||||
private double ServiceFee;
|
||||
private String ContactName;
|
||||
private String ContactMobile;
|
||||
private String ContactEmail;
|
||||
private String UID;
|
||||
private String UserName;
|
||||
private String RefundTicketStatus;
|
||||
private String PaymentType;
|
||||
private String DataChange_CreateTime;
|
||||
private double DeliverFee;
|
||||
private double PaperTicketFee;
|
||||
private String AccountName;
|
||||
private String ConfirmPerson;
|
||||
private String AuditResult;
|
||||
private String AuditResultDesc;
|
||||
private String OrderStatusName;
|
||||
private double ChangeServiceFee;
|
||||
private String ServerFrom;
|
||||
private String CorporationId;
|
||||
private boolean NeedBigInvoice;
|
||||
private String CountryCode;
|
||||
// 可以根据需要继续添加更多的字段
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.train;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
// CorpOrderInfo内部类定义
|
||||
@Data
|
||||
public class TrainCorpOrderInfo {
|
||||
private String CorporationID;
|
||||
private int AccountID;
|
||||
private int SubAccountID;
|
||||
private String CorpPayType;
|
||||
private String CostCenter1;
|
||||
private String CostCenter2;
|
||||
private String CostCenter3;
|
||||
private String CostCenter4;
|
||||
private String JourneyReason;
|
||||
private String Project;
|
||||
private String JouneryID;
|
||||
private String JourneyID;
|
||||
private String CorporationName;
|
||||
private String RcCodeID;
|
||||
private String RcCodeName;
|
||||
// 可以根据需要继续添加更多的字段
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
package com.chint.interfaces.rest.ctrip.dto.search.train;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class TrainDeliveryInfo {
|
||||
private String ShipAddress;
|
||||
private String ShipAddressDetail;
|
||||
private String ShipZipCode;
|
||||
private String ShipReceiverMobile;
|
||||
private String ShipReceiverName;
|
||||
private String ShipReceiverTel;
|
||||
private String CountryCode;
|
||||
// 可以根据需要继续添加更多的字段
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue