fix:修复无法兼容同程超标推送出现中转的情况
This commit is contained in:
parent
ee3a7afd3a
commit
62590400ad
|
@ -3,30 +3,21 @@ package com.chint.domain.service;
|
|||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.chint.application.commands.*;
|
||||
import com.chint.domain.aggregates.order.*;
|
||||
import com.chint.domain.aggregates.system.ProcessInitiationControl;
|
||||
import com.chint.domain.aggregates.user.User;
|
||||
import com.chint.domain.exceptions.NotFoundException;
|
||||
import com.chint.domain.exceptions.OrderException;
|
||||
import com.chint.domain.factoriy.leg_event.LegEventFactory;
|
||||
import com.chint.domain.factoriy.order.RouteOrderFactory;
|
||||
import com.chint.domain.factoriy.order_detail.OrderDetailFactory;
|
||||
import com.chint.domain.repository.*;
|
||||
import com.chint.domain.value_object.ApprovalSimpleData;
|
||||
import com.chint.domain.value_object.ApproveRouteData;
|
||||
import com.chint.domain.value_object.UserLoginParam;
|
||||
import com.chint.infrastructure.constant.CommonMessageConstant;
|
||||
import com.chint.infrastructure.constant.RouteConstant;
|
||||
import com.chint.infrastructure.echo_framework.annotation.ListenTo;
|
||||
import com.chint.infrastructure.echo_framework.command.Command;
|
||||
import com.chint.infrastructure.repository.jdbc.JdbcLegRepository;
|
||||
import com.chint.infrastructure.repository.jdbc.JdbcOrderDetailRepository;
|
||||
import com.chint.infrastructure.repository.jdbc.JdbcProcessInitiationControlRepository;
|
||||
import com.chint.infrastructure.util.DelayDispatch;
|
||||
import com.chint.interfaces.rest.bpm.BPMParamFactory;
|
||||
import com.chint.interfaces.rest.bpm.BPMRequest;
|
||||
import com.chint.interfaces.rest.bpm.dto.ANExceedStandardDto;
|
||||
import com.chint.interfaces.rest.bpm.dto.ExceedStandardDto;
|
||||
import com.chint.interfaces.rest.bpm.dto.RescheduleDto;
|
||||
import com.chint.interfaces.rest.ctrip.CTripOrderSearchRequest;
|
||||
import com.chint.interfaces.rest.ctrip.dto.search.ItineraryEntity;
|
||||
import com.chint.interfaces.rest.ctrip.dto.search.SearchOrderResponse;
|
||||
|
@ -44,23 +35,22 @@ import com.chint.interfaces.rest.ly.dto.search.response.train.TrainDetailRespons
|
|||
import com.chint.interfaces.rest.user.UserHttpRequest;
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.chint.infrastructure.constant.BPMConstant.*;
|
||||
import static com.chint.infrastructure.constant.BelongSystemConstant.BELONG_SYS_CODE_ANFSSC;
|
||||
import static com.chint.infrastructure.constant.CommonMessageConstant.COMPANY_NAME_IN_BLACK_LIST;
|
||||
import static com.chint.infrastructure.constant.LegConstant.*;
|
||||
import static com.chint.infrastructure.constant.OrderConstant.*;
|
||||
import static com.chint.infrastructure.constant.RouteConstant.APPROVAL_EVENT_ING;
|
||||
import static com.chint.infrastructure.constant.SupplierNameConstant.*;
|
||||
import static com.chint.infrastructure.constant.SupplierNameConstant.SUPPLIER_C_TRIP;
|
||||
import static com.chint.infrastructure.constant.SupplierNameConstant.SUPPLIER_L_Y;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
|
@ -220,6 +210,11 @@ public class OrderDomainService {
|
|||
Integer orderEventType = command.getOrderEventType();
|
||||
OrderEvent event = orderDetailFactory.createEvent(orderEventType,
|
||||
outStatus);
|
||||
if (orderEventType.equals(ORDER_EVENT_ETA) ||
|
||||
orderEventType.equals(ORDER_EVENT_CHANGE) ||
|
||||
orderEventType.equals(ORDER_EVENT_REFUND)) {
|
||||
event.setExtension(command.getExtension());
|
||||
}
|
||||
orderDetail.addOrderEvent(event);
|
||||
orderDetailRepository.save(orderDetail);
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ public class SupplierCallbackData {
|
|||
return this;
|
||||
}
|
||||
|
||||
public SupplierCallbackData extension(String daextensionta) {
|
||||
public SupplierCallbackData extension(String extension) {
|
||||
this.extension = extension;
|
||||
return this;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.chint.interfaces.rest.ly.in;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.chint.application.commands.OrderStatusChangeCommand;
|
||||
import com.chint.domain.aggregates.order.OrderDetail;
|
||||
import com.chint.domain.aggregates.order.OrderTravel;
|
||||
|
@ -26,6 +26,7 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
|
@ -85,11 +86,13 @@ public class LYETAController {
|
|||
}
|
||||
|
||||
|
||||
SupplierCallbackData supplierCallbackData = handlerETACallBackData(lyETAPush);
|
||||
OrderDetail orderDetail = supplierService.handleSupplierCallback(supplierCallbackData);
|
||||
List<SupplierCallbackData> supplierCallbackDataList = handlerETACallBackData(lyETAPush);
|
||||
|
||||
for (SupplierCallbackData supplierCallbackData : supplierCallbackDataList) {
|
||||
OrderDetail orderDetail = supplierService.handleSupplierCallback(supplierCallbackData);
|
||||
orderTravelRepository.save(OrderTravel.of(orderDetail.getOrderNo(), approvalOrderId));
|
||||
|
||||
if (supplierCallbackData.getExtension() != null) {
|
||||
//发送超标事件
|
||||
Command.of(OrderStatusChangeCommand.class)
|
||||
.orderDetail(orderDetail)
|
||||
|
@ -98,6 +101,7 @@ public class LYETAController {
|
|||
.eventType(ORDER_EVENT_ETA)
|
||||
.orderNo(orderDetail.getOrderNo())
|
||||
.sendToQueue();
|
||||
}
|
||||
|
||||
int subNotifyType = lyETAPush.getSubNotifyType();
|
||||
if (subNotifyType == 2 || subNotifyType == 4 || subNotifyType == 6) {
|
||||
|
@ -110,12 +114,12 @@ public class LYETAController {
|
|||
.orderNo(orderDetail.getOrderNo())
|
||||
.sendToQueue();
|
||||
}
|
||||
|
||||
}
|
||||
return LYNoteResponse.success();
|
||||
}
|
||||
|
||||
|
||||
private SupplierCallbackData handlerETACallBackData(LyETAPush lyETAPush) {
|
||||
private List<SupplierCallbackData> handlerETACallBackData(LyETAPush lyETAPush) {
|
||||
LyETAPush.NotifyData notifyData = lyETAPush.getNotifyDataObject();
|
||||
String bookEmpId = notifyData.getBookEmpId();
|
||||
SupplierCallbackData supplierCallbackData =
|
||||
|
@ -123,21 +127,21 @@ public class LYETAController {
|
|||
LyETAPush.OrderInfo orderInfos = notifyData.getOrderInfos();
|
||||
//如果子类型是1 , 那么就要自己去找出是那种类型的
|
||||
if (lyETAPush.getSubNotifyType() == 1) {
|
||||
handleCommonETA(orderInfos, supplierCallbackData);
|
||||
return handleCommonETA(orderInfos, supplierCallbackData);
|
||||
} else if (lyETAPush.getSubNotifyType() == 2) {
|
||||
//子类型为2,代表机票改签超标
|
||||
searchOrderDetailByProductType(orderInfos, supplierCallbackData, LEG_TYPE_AIRPLANE);
|
||||
return searchOrderDetailByProductType(orderInfos, supplierCallbackData, LEG_TYPE_AIRPLANE);
|
||||
} else if (lyETAPush.getSubNotifyType() == 4) {
|
||||
//子类型为4,代表火车改签超标
|
||||
searchOrderDetailByProductType(orderInfos, supplierCallbackData, LEG_TYPE_TRAIN);
|
||||
return searchOrderDetailByProductType(orderInfos, supplierCallbackData, LEG_TYPE_TRAIN);
|
||||
} else if (lyETAPush.getSubNotifyType() == 6) {
|
||||
//子类型为6,代表酒店变更超标
|
||||
searchOrderDetailByProductType(orderInfos, supplierCallbackData, LEG_TYPE_HOTEL);
|
||||
return searchOrderDetailByProductType(orderInfos, supplierCallbackData, LEG_TYPE_HOTEL);
|
||||
}
|
||||
return supplierCallbackData;
|
||||
return List.of(supplierCallbackData);
|
||||
}
|
||||
|
||||
private SupplierCallbackData handleCommonETA(LyETAPush.OrderInfo orderInfos, SupplierCallbackData supplierCallbackData) {
|
||||
private List<SupplierCallbackData> handleCommonETA(LyETAPush.OrderInfo orderInfos, SupplierCallbackData supplierCallbackData) {
|
||||
Integer productType = findProductType(orderInfos);
|
||||
if (productType == null) {
|
||||
throw new NotFoundException(NOT_FOUND);
|
||||
|
@ -145,38 +149,48 @@ public class LYETAController {
|
|||
return searchOrderDetailByProductType(orderInfos, supplierCallbackData, productType);
|
||||
}
|
||||
|
||||
private SupplierCallbackData searchOrderDetailByProductType(LyETAPush.OrderInfo orderInfos, SupplierCallbackData supplierCallbackData, Integer productType) {
|
||||
private List<SupplierCallbackData> searchOrderDetailByProductType(LyETAPush.OrderInfo orderInfos, SupplierCallbackData supplierCallbackData, Integer productType) {
|
||||
List<SupplierCallbackData> res = new ArrayList<>();
|
||||
switch (productType) {
|
||||
case LEG_TYPE_AIRPLANE -> {
|
||||
List<LyETAPush.FlightOrderInfo> flightOrderInfos = orderInfos.getFlightOrderInfos();
|
||||
if (flightOrderInfos != null && !flightOrderInfos.isEmpty()) {
|
||||
LyETAPush.FlightOrderInfo flightOrderInfo = flightOrderInfos.get(0);
|
||||
for (LyETAPush.FlightOrderInfo flightOrderInfo : flightOrderInfos) {
|
||||
SupplierCallbackData copySupplierCallbackData = BeanUtil.copyProperties(supplierCallbackData, SupplierCallbackData.class);
|
||||
FlightOrderResponse.Data data = lySearchRequest
|
||||
.getFlightOrderDetail(flightOrderInfo.getOrderNo()).getData();
|
||||
supplierCallbackData.data(data).extension(getETAReason(flightOrderInfo)).productType(L_Y_PRODUCT_TYPE_FLY);
|
||||
copySupplierCallbackData.data(data).extension(getETAReason(flightOrderInfo)).productType(L_Y_PRODUCT_TYPE_FLY);
|
||||
res.add(copySupplierCallbackData);
|
||||
}
|
||||
}
|
||||
}
|
||||
case LEG_TYPE_TRAIN -> {
|
||||
List<LyETAPush.TrainOrderInfo> trainOrderInfos = orderInfos.getTrainOrderInfos();
|
||||
if (trainOrderInfos != null && !trainOrderInfos.isEmpty()) {
|
||||
LyETAPush.TrainOrderInfo trainOrderInfo = trainOrderInfos.get(0);
|
||||
for (LyETAPush.TrainOrderInfo trainOrderInfo : trainOrderInfos) {
|
||||
SupplierCallbackData copySupplierCallbackData = BeanUtil.copyProperties(supplierCallbackData, SupplierCallbackData.class);
|
||||
TrainDetailResponse.TrainDetailData data = lySearchRequest
|
||||
.getTrainOrderDetail(trainOrderInfo.getOrderNo()).getData();
|
||||
supplierCallbackData.data(data).extension(getETAReason(trainOrderInfo)).productType(L_Y_PRODUCT_TYPE_TRAIN);
|
||||
copySupplierCallbackData.data(data).extension(getETAReason(trainOrderInfo)).productType(L_Y_PRODUCT_TYPE_TRAIN);
|
||||
res.add(copySupplierCallbackData);
|
||||
}
|
||||
}
|
||||
}
|
||||
case LEG_TYPE_HOTEL -> {
|
||||
List<LyETAPush.HotelOrderInfo> hotelOrderInfos = orderInfos.getHotelOrderInfos();
|
||||
if (hotelOrderInfos != null && !hotelOrderInfos.isEmpty()) {
|
||||
LyETAPush.HotelOrderInfo hotelOrderInfo = hotelOrderInfos.get(0);
|
||||
for (LyETAPush.HotelOrderInfo hotelOrderInfo : hotelOrderInfos) {
|
||||
SupplierCallbackData copySupplierCallbackData = BeanUtil.copyProperties(supplierCallbackData, SupplierCallbackData.class);
|
||||
HotelDetailResponse.Data data = lySearchRequest
|
||||
.getHotelOrderDetail(hotelOrderInfo.getOrderNo()).getData();
|
||||
supplierCallbackData.data(data).extension(getETAReason(hotelOrderInfo)).productType(L_Y_PRODUCT_TYPE_HOTEL);
|
||||
copySupplierCallbackData.data(data).extension(getETAReason(hotelOrderInfo)).productType(L_Y_PRODUCT_TYPE_HOTEL);
|
||||
res.add(copySupplierCallbackData);
|
||||
}
|
||||
}
|
||||
}
|
||||
default -> throw new NotFoundException(NOT_FOUND);
|
||||
}
|
||||
return supplierCallbackData;
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
|
@ -200,8 +214,12 @@ public class LYETAController {
|
|||
List<LyETAPush.BusinessTravelPolicy> businessTravelPolicies = baseOrderInfo.getBusinessTravelPolicies();
|
||||
if (businessTravelPolicies != null && !businessTravelPolicies.isEmpty()) {
|
||||
LyETAPush.BusinessTravelPolicy businessTravelPolicy = businessTravelPolicies.get(0);
|
||||
if (businessTravelPolicy.getViolationReasonChinese().equals("其他")) {
|
||||
return businessTravelPolicy.getViolationReasonRemark();
|
||||
} else {
|
||||
return businessTravelPolicy.getViolationReasonChinese();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -278,9 +278,9 @@ class RouteApplicationTests {
|
|||
// log.trace("trace");
|
||||
}
|
||||
|
||||
// @Test
|
||||
@Test
|
||||
void loginSignProd() {
|
||||
String sfno = "231008023";
|
||||
String sfno = "230701137";
|
||||
String syscode = "FSSC";
|
||||
String billcode = "CLSQ240225000099";
|
||||
String companycode = "正泰集团股份有限公司";
|
||||
|
@ -1011,11 +1011,10 @@ class RouteApplicationTests {
|
|||
pushUser.getUserSFDataFromOpenApiBatch();
|
||||
}
|
||||
|
||||
// @Test
|
||||
@Test
|
||||
void deleteByOrderId() {
|
||||
orderDetailRepository.deleteById(1647L);
|
||||
orderDetailRepository.deleteById(1648L);
|
||||
|
||||
orderDetailRepository.deleteById(2988L);
|
||||
orderDetailRepository.deleteById(2990L);
|
||||
}
|
||||
|
||||
// @Test
|
||||
|
|
Loading…
Reference in New Issue